From: Albert H. <he...@us...> - 2009-12-09 18:45:05
|
Update of /cvsroot/gc-linux/linux/arch/powerpc/platforms/embedded6xx In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv22540/arch/powerpc/platforms/embedded6xx Modified Files: Kconfig Makefile flipper-pic.c starlet-es.c starlet-mipc.c wii.c Log Message: Merge v2.6.32. Index: flipper-pic.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/powerpc/platforms/embedded6xx/flipper-pic.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** flipper-pic.c 28 Mar 2009 20:44:19 -0000 1.4 --- flipper-pic.c 9 Dec 2009 18:44:54 -0000 1.5 *************** *** 12,15 **** --- 12,17 ---- * */ + #define DRV_MODULE_NAME "flipper-pic" + #define pr_fmt(fmt) DRV_MODULE_NAME ": " fmt #include <linux/kernel.h> *************** *** 21,31 **** #include "flipper-pic.h" - - #define DRV_MODULE_NAME "flipper-pic" - - #define drv_printk(level, format, arg...) \ - printk(level DRV_MODULE_NAME ": " format , ## arg) - - /* * IRQ chip hooks. --- 23,26 ---- *************** *** 86,89 **** --- 81,85 ---- { set_irq_chip_data(virq, h->host_data); + get_irq_desc(virq)->status |= IRQ_LEVEL; set_irq_chip_and_handler(virq, &flipper_pic, handle_level_irq); return 0; *************** *** 129,139 **** retval = of_address_to_resource(np, 0, &res); if (retval) { ! drv_printk(KERN_ERR, "no io memory range found\n"); return NULL; } io_base = ioremap(res.start, res.end - res.start + 1); ! drv_printk(KERN_INFO, "controller at 0x%08x mapped to 0x%p\n", ! res.start, io_base); __flipper_quiesce(io_base); --- 125,134 ---- retval = of_address_to_resource(np, 0, &res); if (retval) { ! pr_err("no io memory range found\n"); return NULL; } io_base = ioremap(res.start, res.end - res.start + 1); ! pr_info("controller at 0x%08x mapped to 0x%p\n", res.start, io_base); __flipper_quiesce(io_base); *************** *** 142,146 **** &flipper_irq_host_ops, -1); if (!irq_host) { ! drv_printk(KERN_ERR, "failed to allocate irq_host\n"); return NULL; } --- 137,141 ---- &flipper_irq_host_ops, -1); if (!irq_host) { ! pr_err("failed to allocate irq_host\n"); return NULL; } *************** *** 228,232 **** io_base = flipper_irq_host->host_data; icr = in_be32(io_base + FLIPPER_ICR); - drv_printk(KERN_INFO, "%x\n", icr); return !(icr & FLIPPER_ICR_RSS); } --- 223,226 ---- Index: starlet-es.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/powerpc/platforms/embedded6xx/starlet-es.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** starlet-es.c 25 Oct 2009 18:50:27 -0000 1.7 --- starlet-es.c 9 Dec 2009 18:44:54 -0000 1.8 *************** *** 319,323 **** { struct starlet_es_ticket_view *views; ! unsigned long count; int error; --- 319,323 ---- { struct starlet_es_ticket_view *views; ! unsigned long count = 0; int error; *************** *** 325,328 **** --- 325,330 ---- if (error) return error; + if (!count) + return -ENOENT; views = starlet_kzalloc(sizeof(*views)*count, GFP_ATOMIC); *************** *** 456,460 **** u64 *titles; u64 candidate; ! unsigned long count; int found, i; int error; --- 458,462 ---- u64 *titles; u64 candidate; ! unsigned long count = 0; int found, i; int error; *************** *** 463,466 **** --- 465,470 ---- if (error) return error; + if (!count) + return -ENOENT; titles = starlet_kzalloc(sizeof(*titles)*count, GFP_KERNEL); *************** *** 498,507 **** u64 ios_min, u64 ios_max) { ! u64 title; int error; error = starlet_es_find_newest_title(es_dev, &title, ios_min, ios_max); if (!error) ! return -EINVAL; if (error > 0) { es_dev->ios_title = title; --- 502,511 ---- u64 ios_min, u64 ios_max) { ! u64 title = 0; int error; error = starlet_es_find_newest_title(es_dev, &title, ios_min, ios_max); if (!error) ! return -ENOENT; if (error > 0) { es_dev->ios_title = title; Index: Makefile =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/powerpc/platforms/embedded6xx/Makefile,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** Makefile 9 Dec 2009 18:18:06 -0000 1.13 --- Makefile 9 Dec 2009 18:44:54 -0000 1.14 *************** *** 8,9 **** --- 8,20 ---- obj-$(CONFIG_PPC_PRPMC2800) += prpmc2800.o obj-$(CONFIG_PPC_C2K) += c2k.o + obj-$(CONFIG_GAMECUBE) += gamecube.o gamecube_dev.o + obj-$(CONFIG_WII) += wii.o wii_dev.o + obj-$(CONFIG_HLWD_GPIO) += hlwd-gpio.o + obj-$(CONFIG_STARLET_MINI) += starlet-mipc.o + obj-$(CONFIG_STARLET_IOS) += starlet-ipc.o starlet-malloc.o \ + starlet-stm.o starlet-es.o + obj-$(CONFIG_FLIPPER_PIC) += flipper-pic.o + obj-$(CONFIG_HLWD_PIC) += hlwd-pic.o + obj-$(CONFIG_USBGECKO_UDBG) += usbgecko_udbg.o + obj-$(CONFIG_GAMECUBE_VIDEO_UDBG) += gcnvi_udbg.o + obj-$(CONFIG_GAMECUBE_RSW) += gcn-rsw.o Index: Kconfig =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/powerpc/platforms/embedded6xx/Kconfig,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** Kconfig 9 Dec 2009 18:18:06 -0000 1.13 --- Kconfig 9 Dec 2009 18:44:54 -0000 1.14 *************** *** 91,92 **** --- 91,200 ---- bool "Enable MPC10x store gathering" depends on MPC10X_BRIDGE + + config GAMECUBE + bool "Nintendo-GameCube" + depends on EMBEDDED6xx + select GAMECUBE_COMMON + help + Select GAMECUBE if configuring for the Nintendo GameCube. + More information at: <http://gc-linux.sourceforge.net/> + + config WII + bool "Nintendo-Wii" + depends on EMBEDDED6xx + select GAMECUBE_COMMON + select PPC_LIB_RHEAP if STARLET_IOS + select USB_ARCH_HAS_EHCI if STARLET_MINI + select USB_ARCH_HAS_OHCI if STARLET_MINI + select HAVE_GENERIC_DMA_COHERENT + help + Select WII if configuring for the Nintendo Wii. + More information at: <http://gc-linux.sourceforge.net/> + + config STARLET_IOS + bool "Nintendo Wii Starlet IOS support" + depends on WII + default y + + config STARLET_MINI + bool "Team Twiizers 'mini' firmware support" + depends on WII && EXPERIMENTAL + default y + + config FLIPPER_PIC + bool + depends on GAMECUBE_COMMON + default y + + config HLWD_PIC + bool + depends on STARLET_MINI + default y + + config GAMECUBE_COMMON + bool + select NOT_COHERENT_CACHE + select FLIPPER_PIC + default n + + config GAMECUBE_UDBG + bool "Nintendo GameCube/Wii udbg support" + depends on GAMECUBE_COMMON + default n + help + If you say yes to this option, you will be able to choose between + several udbg drivers available for the Nintendo GameCube/Wii. + + If in doubt, say N here. + + choice + prompt "Nintendo GameCube/Wii udbg drivers" + depends on GAMECUBE_UDBG + + config USBGECKO_UDBG + bool "USB Gecko udbg console for the Nintendo GameCube/Wii" + help + If you say yes to this option, support will be included for the + USB Gecko adapter as an udbg console. + The USB Gecko is a EXI to USB Serial converter that can be plugged + into a memcard slot in the Nintendo GameCube/Wii. + + This driver bypasses the EXI layer completely. + + If in doubt, say N here. + + config GAMECUBE_VIDEO_UDBG + bool "Nintendo GameCube/Wii framebuffer udbg console" + select FONTS + select FONT_8x16 + help + If you say yes to this option, support will be included for a + framebuffer based udbg console for the Nintendo GameCube/Wii. + + If in doubt, say N here. + + endchoice + + config GAMECUBE_RSW + bool "Nintendo GameCube/Wii reset switch/button" + depends on GAMECUBE_COMMON + default y + help + If you say yes to this option, support will be included for the + reset switch/button of the Nintendo GameCube/Wii. + + If in doubt, say Y here. + + config HLWD_GPIO + bool "Nintendo Wii (Hollywood) GPIO support" + depends on GPIOLIB && WII + default y + help + If you say yes to this option, support will be included for the + GPIOs provided by the Hollywood chipset of the Nintendo Wii + video game console. + Those GPIO lines control, for example, the sensor bar IR leds, + the front led, or the eject switch of the disk unit. + + If in doubt, say Y here. + Index: wii.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/powerpc/platforms/embedded6xx/wii.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** wii.c 25 Oct 2009 18:50:27 -0000 1.6 --- wii.c 9 Dec 2009 18:44:54 -0000 1.7 *************** *** 51,55 **** /* try first to launch The Homebrew Channel... */ ! starlet_es_reload_ios_and_launch(STARLET_TITLE_HBC); /* ..and if that fails, try an assisted restart */ starlet_stm_restart(); --- 51,56 ---- /* try first to launch The Homebrew Channel... */ ! starlet_es_reload_ios_and_launch(STARLET_TITLE_HBC_JODI); ! starlet_es_reload_ios_and_launch(STARLET_TITLE_HBC_HAXX); /* ..and if that fails, try an assisted restart */ starlet_stm_restart(); *************** *** 88,92 **** #ifdef CONFIG_STARLET_MINI ! static void wii_mipc_restart(char *cmd) { void __iomem *hw_resets; --- 89,93 ---- #ifdef CONFIG_STARLET_MINI ! static void wii_restart(char *cmd) { void __iomem *hw_resets; *************** *** 94,103 **** local_irq_disable(); ! hw_resets = mipc_ioremap(0x0d800194, 4); if (hw_resets) { /* clear the system reset pin to cause a reset */ ! mipc_clear_bit(0, hw_resets); ! mipc_wmb(); ! mipc_iounmap(hw_resets); } --- 95,103 ---- local_irq_disable(); ! hw_resets = ioremap(0x0d800194, 4); if (hw_resets) { /* clear the system reset pin to cause a reset */ ! clear_bit(0, hw_resets); ! iounmap(hw_resets); } *************** *** 106,110 **** } ! static void wii_mipc_power_off(void) { void __iomem *gpio; --- 106,110 ---- } ! static void wii_power_off(void) { void __iomem *gpio; *************** *** 112,124 **** local_irq_disable(); ! gpio = mipc_ioremap(0x0d8000e0, 3*4); if (gpio) { /* make sure that the poweroff GPIO is configured as output */ ! mipc_out_be32(gpio + 4, mipc_in_be32(gpio + 4) | 0x2); /* drive the poweroff GPIO high */ ! mipc_out_be32(gpio + 0, mipc_in_be32(gpio + 0) | 0x2); ! mipc_wmb(); ! mipc_iounmap(gpio); } --- 112,123 ---- local_irq_disable(); ! gpio = ioremap(0x0d8000e0, 3*4); if (gpio) { /* make sure that the poweroff GPIO is configured as output */ ! out_be32(gpio + 4, in_be32(gpio + 4) | 0x2); /* drive the poweroff GPIO high */ ! out_be32(gpio + 0, in_be32(gpio + 0) | 0x2); ! iounmap(gpio); } *************** *** 129,138 **** #else ! static void wii_mipc_restart(char *cmd) { wii_death_loop(); } ! static void wii_mipc_power_off(void) { wii_death_loop(); --- 128,137 ---- #else ! static void wii_restart(char *cmd) { wii_death_loop(); } ! static void wii_power_off(void) { wii_death_loop(); *************** *** 162,167 **** if (!error) { starlet_ipc_flavour = STARLET_IPC_MINI; ! ppc_md.restart = wii_mipc_restart; ! ppc_md.power_off = wii_mipc_power_off; } else { starlet_ipc_flavour = STARLET_IPC_IOS; --- 161,166 ---- if (!error) { starlet_ipc_flavour = STARLET_IPC_MINI; ! ppc_md.restart = wii_restart; ! ppc_md.power_off = wii_power_off; } else { starlet_ipc_flavour = STARLET_IPC_IOS; Index: starlet-mipc.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/powerpc/platforms/embedded6xx/starlet-mipc.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** starlet-mipc.c 25 Oct 2009 18:50:27 -0000 1.1 --- starlet-mipc.c 9 Dec 2009 18:44:54 -0000 1.2 *************** *** 12,16 **** * */ ! #include <linux/kernel.h> --- 12,17 ---- * */ ! #define DRV_MODULE_NAME "starlet-mipc" ! #define pr_fmt(fmt) DRV_MODULE_NAME ": " fmt #include <linux/kernel.h> *************** *** 25,42 **** #include <asm/starlet-mini.h> ! #include "hollywood-pic.h" - #define DRV_MODULE_NAME "starlet-mipc" #define DRV_DESCRIPTION "IPC driver for 'mini'" #define DRV_AUTHOR "Albert Herranz" ! static char mipc_driver_version[] = "0.3i"; ! ! #define drv_printk(level, format, arg...) \ ! printk(level DRV_MODULE_NAME ": " format , ## arg) ! ! #define DBG(fmt, arg...) drv_printk(KERN_DEBUG, "%s: " fmt, \ ! __func__, ## arg) --- 26,36 ---- #include <asm/starlet-mini.h> ! #include "hlwd-pic.h" #define DRV_DESCRIPTION "IPC driver for 'mini'" #define DRV_AUTHOR "Albert Herranz" ! static char mipc_driver_version[] = "0.4i"; *************** *** 83,103 **** } __attribute__ ((packed)); - - struct mipc_ops { - unsigned int (*readl)(void __iomem *addr); - unsigned short (*readw)(void __iomem *addr); - unsigned char (*readb)(void __iomem *addr); - void (*writel)(unsigned int val, void __iomem *addr); - void (*writew)(unsigned short val, void __iomem *addr); - void (*writeb)(unsigned char val, void __iomem *addr); - void (*setbitl)(unsigned int val, void __iomem *addr); - void (*clearbitl)(unsigned int val, void __iomem *addr); - void (*clrsetbitsl)(unsigned int clear, unsigned int set, - void __iomem *addr); - void (*_wmb)(void); - void __iomem *(*ioremap)(phys_addr_t addr, unsigned long size); - void (*iounmap)(volatile void __iomem *addr); - }; - /* * --- 77,80 ---- *************** *** 108,112 **** struct device *dev; - struct mipc_ops *ops; spinlock_t call_lock; /* serialize firmware calls */ --- 85,88 ---- *************** *** 202,210 **** int i; ! drv_printk(KERN_INFO, "req %pP = {\n", req); ! drv_printk(KERN_CONT, "code = %08X, tag = %08X\n", req->code, req->tag); for (i = 0; i < MIPC_REQ_MAX_ARGS; i++) ! drv_printk(KERN_CONT, "arg[%d] = %08X\n", i, req->args[i]); ! drv_printk(KERN_CONT, "}\n"); } --- 178,186 ---- int i; ! pr_info("req %pP = {\n", req); ! pr_cont("code = %08X, tag = %08X\n", req->code, req->tag); for (i = 0; i < MIPC_REQ_MAX_ARGS; i++) ! pr_cont("arg[%d] = %08X\n", i, req->args[i]); ! pr_cont("}\n"); } *************** *** 215,219 **** for (i = 0; i < count; i++) ! DBG("%d: %X (%08X)\n", i, req[i].tag, req[i].code); } #endif --- 191,195 ---- for (i = 0; i < count; i++) ! pr_devel("%d: %X (%08X)\n", i, req[i].tag, req[i].code); } #endif *************** *** 226,237 **** out_size = ipc_dev->out_ring_size * sizeof(*ipc_dev->out_ring); ! drv_printk(KERN_INFO, "ppc: intail_idx=%u, outhead_idx=%u\n", ! ipc_dev->intail_idx, ipc_dev->outhead_idx); ! drv_printk(KERN_CONT, "arm: inhead_idx=%u, outtail_idx=%u\n", ! mipc_peek_inhead(ipc_dev->io_base), ! mipc_peek_outtail(ipc_dev->io_base)); ! drv_printk(KERN_CONT, "in_ring=%uK@%p, out_ring=%uK@%p\n", ! in_size / 1024, ipc_dev->in_ring, ! out_size / 1024, ipc_dev->out_ring); } --- 202,213 ---- out_size = ipc_dev->out_ring_size * sizeof(*ipc_dev->out_ring); ! pr_info("ppc: intail_idx=%u, outhead_idx=%u\n", ! ipc_dev->intail_idx, ipc_dev->outhead_idx); ! pr_cont("arm: inhead_idx=%u, outtail_idx=%u\n", ! mipc_peek_inhead(ipc_dev->io_base), ! mipc_peek_outtail(ipc_dev->io_base)); ! pr_cont("in_ring=%uK@%p, out_ring=%uK@%p\n", ! in_size / 1024, ipc_dev->in_ring, ! out_size / 1024, ipc_dev->out_ring); } *************** *** 246,250 **** if (mipc_peek_inhead(io_base) == mipc_get_next_intail(ipc_dev)) { ! DBG("%s queue full\n", "ppc->arm ipc"); __spin_event_timeout(mipc_peek_inhead(io_base) != mipc_get_next_intail(ipc_dev), --- 222,226 ---- if (mipc_peek_inhead(io_base) == mipc_get_next_intail(ipc_dev)) { ! pr_err("%s queue full\n", "ppc->arm ipc"); __spin_event_timeout(mipc_peek_inhead(io_base) != mipc_get_next_intail(ipc_dev), *************** *** 254,258 **** } if (!result) { ! DBG("%s queue drain timed out\n", "ppc->arm ipc"); error = -EIO; goto out; --- 230,234 ---- } if (!result) { ! pr_err("%s queue drain timed out\n", "ppc->arm ipc"); error = -EIO; goto out; *************** *** 267,271 **** out: if (error) ! DBG("exit %d\n", error); return error; } --- 243,247 ---- out: if (error) ! pr_devel("exit %d\n", error); return error; } *************** *** 304,308 **** error = __mipc_recv_req(ipc_dev, timeout, req); if (error) ! DBG("arm->ppc ipc request timed out (%d)\n", error); return error; } --- 280,284 ---- error = __mipc_recv_req(ipc_dev, timeout, req); if (error) ! pr_devel("arm->ppc ipc request timed out (%d)\n", error); return error; } *************** *** 323,334 **** __spin_event_timeout(req->code == code && req->tag == tag, timeout, result, ctx) { ! DBG("expected: code=%08X, tag=%08X\n", code, tag); mipc_print_req(req); ! DBG("+++ status\n"); mipc_print_status(ipc_dev); #ifdef DEBUG_RINGS ! DBG("+++ in_ring\n"); mipc_dump_ring(ipc_dev->in_ring, ipc_dev->in_ring_size); ! DBG("+++ out_ring\n"); mipc_dump_ring(ipc_dev->out_ring, ipc_dev->out_ring_size); #endif --- 299,310 ---- __spin_event_timeout(req->code == code && req->tag == tag, timeout, result, ctx) { ! pr_devel("expected: code=%08X, tag=%08X\n", code, tag); mipc_print_req(req); ! pr_devel("+++ status\n"); mipc_print_status(ipc_dev); #ifdef DEBUG_RINGS ! pr_devel("+++ in_ring\n"); mipc_dump_ring(ipc_dev->in_ring, ipc_dev->in_ring_size); ! pr_devel("+++ out_ring\n"); mipc_dump_ring(ipc_dev->out_ring, ipc_dev->out_ring_size); #endif *************** *** 339,343 **** } if (!result) { ! drv_printk(KERN_ERR, "%s: recv timed out\n", __func__); error = -EIO; goto out; --- 315,319 ---- } if (!result) { ! pr_err("%s: recv timed out\n", __func__); error = -EIO; goto out; *************** *** 347,351 **** out: if (error) ! DBG("exit %d\n", error); return error; } --- 323,327 ---- out: if (error) ! pr_devel("exit %d\n", error); return error; } *************** *** 438,442 **** } if (!result) { ! drv_printk(KERN_ERR, "%s: flush timed out\n", __func__); error = -EIO; goto out; --- 414,418 ---- } if (!result) { ! pr_err("%s: flush timed out\n", __func__); error = -EIO; goto out; *************** *** 444,448 **** out: if (error) ! DBG("exit %d\n", error); return error; } --- 420,424 ---- out: if (error) ! pr_devel("exit %d\n", error); return error; } *************** *** 466,470 **** { if (!mipc_device_instance) ! drv_printk(KERN_ERR, "uninitialized device instance!\n"); return mipc_device_instance; } --- 442,446 ---- { if (!mipc_device_instance) ! pr_err("uninitialized device instance!\n"); return mipc_device_instance; } *************** *** 477,493 **** error = mipc_sendrecv1_call(ipc_dev, timeout, &resp, MIPC_SYS_PING, 0); if (error) ! DBG("exit %d\n", error); return error; } - - /* - * - * Indirect I/O operations. - * - */ - #define __declare_ipc_send2_accessor(_name, _suffix, _size, _call) \ ! void mipc_indirect_##_name##_suffix(_size a, void __iomem *addr) \ { \ struct mipc_device *ipc_dev = mipc_get_device(); \ --- 453,462 ---- error = mipc_sendrecv1_call(ipc_dev, timeout, &resp, MIPC_SYS_PING, 0); if (error) ! pr_devel("exit %d\n", error); return error; } #define __declare_ipc_send2_accessor(_name, _suffix, _size, _call) \ ! void mipc_##_name##_suffix(_size a, void __iomem *addr) \ { \ struct mipc_device *ipc_dev = mipc_get_device(); \ *************** *** 499,508 **** return; \ \ ! DBG(__stringify(_name, _suffix) "(%p,%x)\n", addr, a); \ BUG(); \ } #define __declare_ipc_send3_accessor(_name, _suffix, _size, _call) \ ! void mipc_indirect_##_name##_suffix(_size a, _size b, void __iomem *addr) \ { \ struct mipc_device *ipc_dev = mipc_get_device(); \ --- 468,477 ---- return; \ \ ! pr_devel(__stringify(_name, _suffix) "(%p,%x)\n", addr, a); \ BUG(); \ } #define __declare_ipc_send3_accessor(_name, _suffix, _size, _call) \ ! void mipc_##_name##_suffix(_size a, _size b, void __iomem *addr) \ { \ struct mipc_device *ipc_dev = mipc_get_device(); \ *************** *** 510,523 **** \ error = mipc_send3_call(ipc_dev, MIPC_SYS_IO_TIMEOUT, _call, \ ! (u32)addr, a, b); \ if (!error) \ return; \ \ ! DBG(__stringify(_name, _suffix) "(%p,%x,%x)\n", addr, a, b); \ BUG(); \ } #define __declare_ipc_sendrecv1_accessor(_name, _suffix, _size, _call) \ ! _size mipc_indirect_##_name##_suffix(void __iomem *addr) \ { \ struct mipc_device *ipc_dev = mipc_get_device(); \ --- 479,492 ---- \ error = mipc_send3_call(ipc_dev, MIPC_SYS_IO_TIMEOUT, _call, \ ! (u32)addr, a, b); \ if (!error) \ return; \ \ ! pr_devel(__stringify(_name, _suffix) "(%p,%x,%x)\n", addr, a, b);\ BUG(); \ } #define __declare_ipc_sendrecv1_accessor(_name, _suffix, _size, _call) \ ! _size mipc_##_name##_suffix(void __iomem *addr) \ { \ struct mipc_device *ipc_dev = mipc_get_device(); \ *************** *** 530,534 **** return resp.args[0]; \ \ ! DBG(__stringify(_name, _suffix) "(%p)\n", addr); \ BUG(); \ return 0; \ --- 499,503 ---- return resp.args[0]; \ \ ! pr_devel(__stringify(_name, _suffix) "(%p)\n", addr); \ BUG(); \ return 0; \ *************** *** 547,551 **** __declare_ipc_send3_accessor(clrsetbits, l, unsigned int, MIPC_SYS_MASK32) ! void mipc_indirect_wmb(void) { struct mipc_device *ipc_dev = mipc_get_device(); --- 516,520 ---- __declare_ipc_send3_accessor(clrsetbits, l, unsigned int, MIPC_SYS_MASK32) ! void mipc_wmb(void) { struct mipc_device *ipc_dev = mipc_get_device(); *************** *** 556,716 **** return; ! DBG(__stringify(_name, _suffix) "()\n"); BUG(); } - void __iomem *mipc_indirect_ioremap(phys_addr_t addr, unsigned long size) - { - return (void __iomem *)addr; - } - - void mipc_indirect_iounmap(volatile void __iomem *addr) - { - /* nothing to do */ - } - - /* - * - * Direct I/O operations. - * - */ - - void mipc_direct_writel(unsigned int val, void __iomem *addr) - { - out_be32(addr, val); - } - - void mipc_direct_writew(unsigned short val, void __iomem *addr) - { - out_be16(addr, val); - } - - void mipc_direct_writeb(unsigned char val, void __iomem *addr) - { - out_8(addr, val); - } - - void mipc_direct_setbitl(unsigned int val, void __iomem *addr) - { - out_be32(addr, in_be32(addr) | val); - } - - void mipc_direct_clearbitl(unsigned int val, void __iomem *addr) - { - out_be32(addr, in_be32(addr) & ~val); - } - - void mipc_direct_clrsetbitsl(unsigned int clear, unsigned int set, - void __iomem *addr) - { - out_be32(addr, (in_be32(addr) & ~clear) | set); - } - - unsigned int mipc_direct_readl(void __iomem *addr) - { - return in_be32(addr); - } - - unsigned short mipc_direct_readw(void __iomem *addr) - { - return in_be16(addr); - } - - unsigned char mipc_direct_readb(void __iomem *addr) - { - return in_8(addr); - } - - void mipc_direct_wmb(void) - { - wmb(); - } - - void __iomem *mipc_direct_ioremap(phys_addr_t addr, unsigned long size) - { - return ioremap(addr, size); - } - - void mipc_direct_iounmap(volatile void __iomem *addr) - { - iounmap(addr); - } - - - /* - * - * - */ - - unsigned int mipc_readl(void __iomem *addr) - { - struct mipc_device *ipc_dev = mipc_get_device(); - return ipc_dev->ops->readl(addr); - } - - unsigned short mipc_readw(void __iomem *addr) - { - struct mipc_device *ipc_dev = mipc_get_device(); - return ipc_dev->ops->readw(addr); - } - - unsigned char mipc_readb(void __iomem *addr) - { - struct mipc_device *ipc_dev = mipc_get_device(); - return ipc_dev->ops->readb(addr); - } - - void mipc_writel(unsigned int val, void __iomem *addr) - { - struct mipc_device *ipc_dev = mipc_get_device(); - ipc_dev->ops->writel(val, addr); - } - - void mipc_writew(unsigned short val, void __iomem *addr) - { - struct mipc_device *ipc_dev = mipc_get_device(); - ipc_dev->ops->writew(val, addr); - } - - void mipc_writeb(unsigned char val, void __iomem *addr) - { - struct mipc_device *ipc_dev = mipc_get_device(); - ipc_dev->ops->writeb(val, addr); - } - - void mipc_setbitl(unsigned int val, void __iomem *addr) - { - struct mipc_device *ipc_dev = mipc_get_device(); - ipc_dev->ops->setbitl(val, addr); - } - - void mipc_clearbitl(unsigned int val, void __iomem *addr) - { - struct mipc_device *ipc_dev = mipc_get_device(); - ipc_dev->ops->clearbitl(val, addr); - } - - void mipc_clrsetbitsl(unsigned int clear, unsigned int set, void __iomem *addr) - { - struct mipc_device *ipc_dev = mipc_get_device(); - ipc_dev->ops->clrsetbitsl(clear, set, addr); - } - - void mipc_wmb(void) - { - struct mipc_device *ipc_dev = mipc_get_device(); - ipc_dev->ops->_wmb(); - } - void __iomem *mipc_ioremap(phys_addr_t addr, unsigned long size) { ! struct mipc_device *ipc_dev = mipc_get_device(); ! return ipc_dev->ops->ioremap(addr, size); } void mipc_iounmap(volatile void __iomem *addr) { ! struct mipc_device *ipc_dev = mipc_get_device(); ! ipc_dev->ops->iounmap(addr); } --- 525,540 ---- return; ! pr_devel(__stringify(_name, _suffix) "()\n"); BUG(); } void __iomem *mipc_ioremap(phys_addr_t addr, unsigned long size) { ! return (void __iomem *)addr; } void mipc_iounmap(volatile void __iomem *addr) { ! /* nothing to do */ } *************** *** 796,800 **** p = ioremap(0x13fffffc, 4); if (!p) { ! drv_printk(KERN_ERR, "unable to ioremap mini ipc header ptr\n"); error = -ENOMEM; goto out; --- 620,624 ---- p = ioremap(0x13fffffc, 4); if (!p) { ! pr_err("unable to ioremap mini ipc header ptr\n"); error = -ENOMEM; goto out; *************** *** 802,806 **** /* check that the header pointer points to MEM2 */ if (mipc_check_address(*p)) { ! DBG("wrong mini ipc header address %pP\n", (void *)*p); error = -ENODEV; goto out_unmap_p; --- 626,630 ---- /* check that the header pointer points to MEM2 */ if (mipc_check_address(*p)) { ! pr_devel("wrong mini ipc header address %pP\n", (void *)*p); error = -ENODEV; goto out_unmap_p; *************** *** 810,814 **** PAGE_KERNEL); if (!hdr) { ! drv_printk(KERN_ERR, "unable to ioremap mini ipc header\n"); error = -ENOMEM; goto out_unmap_p; --- 634,638 ---- PAGE_KERNEL); if (!hdr) { ! pr_err("unable to ioremap mini ipc header\n"); error = -ENOMEM; goto out_unmap_p; *************** *** 819,828 **** magic[3] = 0; if (memcmp(magic, "IPC", 3)) { ! DBG("wrong magic \"%s\"\n", magic); error = -ENODEV; goto out_unmap_hdr; } if (hdr->version < MIPC_MIN_VER && hdr->version > MIPC_MAX_VER) { ! drv_printk(KERN_ERR, "unsupported mini ipc version %d" " (min %d, max %d)\n", hdr->version, MIPC_MIN_VER, MIPC_MAX_VER); --- 643,652 ---- magic[3] = 0; if (memcmp(magic, "IPC", 3)) { ! pr_devel("wrong magic \"%s\"\n", magic); error = -ENODEV; goto out_unmap_hdr; } if (hdr->version < MIPC_MIN_VER && hdr->version > MIPC_MAX_VER) { ! pr_err("unsupported mini ipc version %d" " (min %d, max %d)\n", hdr->version, MIPC_MIN_VER, MIPC_MAX_VER); *************** *** 831,845 **** } if (mipc_check_address(hdr->mem2_boundary)) { ! DBG("invalid mem2_boundary %pP\n", (void *)hdr->mem2_boundary); error = -EINVAL; goto out_unmap_hdr; } if (mipc_check_address(hdr->ipc_in)) { ! DBG("invalid ipc_in %pP\n", (void *)hdr->ipc_in); error = -EINVAL; goto out_unmap_hdr; } if (mipc_check_address(hdr->ipc_out)) { ! DBG("invalid ipc_out %pP\n", (void *)hdr->ipc_out); error = -EINVAL; goto out_unmap_hdr; --- 655,670 ---- } if (mipc_check_address(hdr->mem2_boundary)) { ! pr_err("invalid mem2_boundary %pP\n", ! (void *)hdr->mem2_boundary); error = -EINVAL; goto out_unmap_hdr; } if (mipc_check_address(hdr->ipc_in)) { ! pr_err("invalid ipc_in %pP\n", (void *)hdr->ipc_in); error = -EINVAL; goto out_unmap_hdr; } if (mipc_check_address(hdr->ipc_out)) { ! pr_err("invalid ipc_out %pP\n", (void *)hdr->ipc_out); error = -EINVAL; goto out_unmap_hdr; *************** *** 860,870 **** static void mipc_print_infohdr(struct mipc_infohdr *hdr) { ! drv_printk(KERN_INFO, "magic=%c%c%c, version=%d, mem2_boundary=%pP\n", ! hdr->magic[0], hdr->magic[1], hdr->magic[2], ! hdr->version, ! (void *)hdr->mem2_boundary); ! drv_printk(KERN_CONT, "ipc_in[%u] @ %pP, ipc_out[%u] @ %pP\n", ! hdr->ipc_in_size, (void *)hdr->ipc_in, ! hdr->ipc_out_size, (void *)hdr->ipc_out); } --- 685,695 ---- static void mipc_print_infohdr(struct mipc_infohdr *hdr) { ! pr_info("magic=%c%c%c, version=%d, mem2_boundary=%pP\n", ! hdr->magic[0], hdr->magic[1], hdr->magic[2], ! hdr->version, ! (void *)hdr->mem2_boundary); ! pr_cont("ipc_in[%u] @ %pP, ipc_out[%u] @ %pP\n", ! hdr->ipc_in_size, (void *)hdr->ipc_in, ! hdr->ipc_out_size, (void *)hdr->ipc_out); } *************** *** 899,903 **** gpio = mipc_ioremap(0x0d8000c0, 4); if (!gpio) { ! DBG("ioremap failed\n"); return; } --- 724,728 ---- gpio = mipc_ioremap(0x0d8000c0, 4); if (!gpio) { ! pr_err("ioremap failed\n"); return; } *************** *** 925,937 **** } ! drv_printk(KERN_INFO, "io timings in timebase ticks" ! " (1 usec = %lu ticks)\n", tb_ticks_per_usec); ! drv_printk(KERN_CONT, "mmio: read=%lu (%lu ns), write=%lu (%lu ns)\n", ! t_read, tbl_to_ns(t_read), t_write, tbl_to_ns(t_write)); ! drv_printk(KERN_CONT, "mipc: read=%lu (%lu ns), write=%lu (%lu ns)\n", ! t_mipc_read, tbl_to_ns(t_mipc_read), ! t_mipc_write, tbl_to_ns(t_mipc_write)); ! drv_printk(KERN_CONT, "mipc: ping=%lu (%lu ns)\n", ! t_mipc_ping, tbl_to_ns(t_mipc_ping)); mipc_iounmap(gpio); --- 750,762 ---- } ! pr_info("io timings in timebase ticks" ! " (1 usec = %lu ticks)\n", tb_ticks_per_usec); ! pr_cont("mmio: read=%lu (%lu ns), write=%lu (%lu ns)\n", ! t_read, tbl_to_ns(t_read), t_write, tbl_to_ns(t_write)); ! pr_cont("mipc: read=%lu (%lu ns), write=%lu (%lu ns)\n", ! t_mipc_read, tbl_to_ns(t_mipc_read), ! t_mipc_write, tbl_to_ns(t_mipc_write)); ! pr_cont("mipc: ping=%lu (%lu ns)\n", ! t_mipc_ping, tbl_to_ns(t_mipc_ping)); mipc_iounmap(gpio); *************** *** 946,953 **** _MIPC(_MIPC_SLOW, _MIPC_DEV_SDHC, _MIPC_SDHC_EXIT), 0); ! if (error) { ! drv_printk(KERN_ERR, "unable to shutdown mini SDHC subsystem" ! ", you are DOOMED!\n"); ! } } --- 771,776 ---- _MIPC(_MIPC_SLOW, _MIPC_DEV_SDHC, _MIPC_SDHC_EXIT), 0); ! if (error) ! pr_err("unable to shutdown mini SDHC subsystem\n"); } *************** *** 970,1025 **** } ! struct mipc_ops mipc_indirect_ops = { ! .readl = mipc_indirect_readl, ! .readw = mipc_indirect_readw, ! .readb = mipc_indirect_readb, ! .writel = mipc_indirect_writel, ! .writew = mipc_indirect_writew, ! .writeb = mipc_indirect_writeb, ! .setbitl = mipc_indirect_setbitl, ! .clearbitl = mipc_indirect_clearbitl, ! .clrsetbitsl = mipc_indirect_clrsetbitsl, ! ._wmb = mipc_indirect_wmb, ! .ioremap = mipc_indirect_ioremap, ! .iounmap = mipc_indirect_iounmap, ! }; ! ! struct mipc_ops mipc_direct_ops = { ! .readl = mipc_direct_readl, ! .readw = mipc_direct_readw, ! .readb = mipc_direct_readb, ! .writel = mipc_direct_writel, ! .writew = mipc_direct_writew, ! .writeb = mipc_direct_writeb, ! .setbitl = mipc_direct_setbitl, ! .clearbitl = mipc_direct_clearbitl, ! .clrsetbitsl = mipc_direct_clrsetbitsl, ! ._wmb = mipc_direct_wmb, ! .ioremap = mipc_direct_ioremap, ! .iounmap = mipc_direct_iounmap, ! }; ! ! static void mipc_init_ops(struct mipc_device *ipc_dev) { void __iomem *hw_ahbprot = (void __iomem *)0x0d800064; u32 initial_ahbprot, ahbprot; ! initial_ahbprot = mipc_indirect_readl(hw_ahbprot); if (initial_ahbprot != 0xffffffff) { ! drv_printk(KERN_INFO, "AHBPROT=%08X (before)\n", ! initial_ahbprot); ! mipc_indirect_writel(0xffffffff, hw_ahbprot); } ! ahbprot = mipc_indirect_readl(hw_ahbprot); if (initial_ahbprot != ahbprot) ! drv_printk(KERN_INFO, "AHBPROT=%08X (after)\n", ahbprot); ! if (ahbprot != 0xffffffff) { ! drv_printk(KERN_INFO, "using indirect io via mini\n"); ! ipc_dev->ops = &mipc_indirect_ops; ! } else { ! drv_printk(KERN_INFO, "using direct io\n"); ! ipc_dev->ops = &mipc_direct_ops; ! } } --- 793,812 ---- } ! static void mipc_init_ahbprot(struct mipc_device *ipc_dev) { void __iomem *hw_ahbprot = (void __iomem *)0x0d800064; u32 initial_ahbprot, ahbprot; ! initial_ahbprot = mipc_readl(hw_ahbprot); if (initial_ahbprot != 0xffffffff) { ! pr_debug("AHBPROT=%08X (before)\n", initial_ahbprot); ! mipc_writel(0xffffffff, hw_ahbprot); } ! ahbprot = mipc_readl(hw_ahbprot); if (initial_ahbprot != ahbprot) ! pr_debug("AHBPROT=%08X (after)\n", ahbprot); ! if (ahbprot != 0xffffffff) ! pr_err("failed to set AHBPROT\n"); } *************** *** 1033,1037 **** error = mipc_discover(&hdr); if (error) { ! drv_printk(KERN_ERR, "unable to find mini ipc instance\n"); goto out; } --- 820,824 ---- error = mipc_discover(&hdr); if (error) { ! pr_err("unable to find mini ipc instance\n"); goto out; } *************** *** 1069,1078 **** goto out; ! drv_printk(KERN_INFO, "ping OK\n"); ! ! mipc_init_ops(ipc_dev); if (mipc_do_simple_tests) mipc_simple_tests(ipc_dev); mipc_starlet_fixups(ipc_dev); --- 856,864 ---- goto out; ! pr_info("ping OK\n"); if (mipc_do_simple_tests) mipc_simple_tests(ipc_dev); + mipc_init_ahbprot(ipc_dev); mipc_starlet_fixups(ipc_dev); *************** *** 1102,1106 **** ipc_dev = kzalloc(sizeof(*ipc_dev), GFP_KERNEL); if (!ipc_dev) { ! drv_printk(KERN_ERR, "failed to allocate ipc_dev\n"); error = -ENOMEM; goto out; --- 888,892 ---- ipc_dev = kzalloc(sizeof(*ipc_dev), GFP_KERNEL); if (!ipc_dev) { ! pr_err("failed to allocate ipc_dev\n"); error = -ENOMEM; goto out; *************** *** 1116,1121 **** } ! drv_printk(KERN_INFO, "ready\n"); ! hollywood_pic_probe(); out: --- 902,907 ---- } ! pr_info("ready\n"); ! hlwd_pic_probe(); out: *************** *** 1166,1170 **** error = of_address_to_resource(odev->node, 0, &mem[0]); if (error) { ! drv_printk(KERN_ERR, "no io memory range found (%d)\n", error); goto out; } --- 952,956 ---- error = of_address_to_resource(odev->node, 0, &mem[0]); if (error) { ! pr_err("no io memory range found (%d)\n", error); goto out; } *************** *** 1209,1214 **** static int __init mipc_init_module(void) { ! drv_printk(KERN_INFO, "%s - version %s\n", DRV_DESCRIPTION, ! mipc_driver_version); return of_register_platform_driver(&mipc_of_driver); --- 995,999 ---- static int __init mipc_init_module(void) { ! pr_info("%s - version %s\n", DRV_DESCRIPTION, mipc_driver_version); return of_register_platform_driver(&mipc_of_driver); |