diff options
Diffstat (limited to 'arch/powerpc/cpu')
-rw-r--r-- | arch/powerpc/cpu/mpc512x/serial.c | 92 | ||||
-rw-r--r-- | arch/powerpc/cpu/mpc5xx/serial.c | 69 | ||||
-rw-r--r-- | arch/powerpc/cpu/mpc5xxx/serial.c | 181 | ||||
-rw-r--r-- | arch/powerpc/cpu/mpc5xxx/usb_ohci.c | 4 | ||||
-rw-r--r-- | arch/powerpc/cpu/mpc8220/uart.c | 35 | ||||
-rw-r--r-- | arch/powerpc/cpu/mpc8260/serial_scc.c | 39 | ||||
-rw-r--r-- | arch/powerpc/cpu/mpc8260/serial_smc.c | 39 | ||||
-rw-r--r-- | arch/powerpc/cpu/mpc85xx/serial_scc.c | 39 | ||||
-rw-r--r-- | arch/powerpc/cpu/mpc8xx/serial.c | 43 | ||||
-rw-r--r-- | arch/powerpc/cpu/ppc4xx/Makefile | 1 | ||||
-rw-r--r-- | arch/powerpc/cpu/ppc4xx/cpu.c | 16 | ||||
-rw-r--r-- | arch/powerpc/cpu/ppc4xx/iop480_uart.c | 236 | ||||
-rw-r--r-- | arch/powerpc/cpu/ppc4xx/speed.c | 25 | ||||
-rw-r--r-- | arch/powerpc/cpu/ppc4xx/start.S | 108 | ||||
-rw-r--r-- | arch/powerpc/cpu/ppc4xx/usb_ohci.c | 4 |
15 files changed, 267 insertions, 664 deletions
diff --git a/arch/powerpc/cpu/mpc512x/serial.c b/arch/powerpc/cpu/mpc512x/serial.c index 7c53346ea0..58587fd5bc 100644 --- a/arch/powerpc/cpu/mpc512x/serial.c +++ b/arch/powerpc/cpu/mpc512x/serial.c @@ -37,7 +37,7 @@ DECLARE_GLOBAL_DATA_PTR; -#if defined(CONFIG_PSC_CONSOLE) || defined(CONFIG_SERIAL_MULTI) +#if defined(CONFIG_PSC_CONSOLE) static void fifo_init (volatile psc512x_t *psc) { @@ -52,7 +52,6 @@ static void fifo_init (volatile psc512x_t *psc) out_be32(&psc->rfintmask, 0); out_be32(&psc->tfintmask, 0); -#if defined(CONFIG_SERIAL_MULTI) switch (((u32)psc & 0xf00) >> 8) { case 0: tfsize = FIFOC_PSC0_TX_SIZE | (FIFOC_PSC0_TX_ADDR << 16); @@ -105,10 +104,7 @@ static void fifo_init (volatile psc512x_t *psc) default: return; } -#else - tfsize = CONSOLE_FIFO_TX_SIZE | (CONSOLE_FIFO_TX_ADDR << 16); - rfsize = CONSOLE_FIFO_RX_SIZE | (CONSOLE_FIFO_RX_ADDR << 16); -#endif + out_be32(&psc->tfsize, tfsize); out_be32(&psc->rfsize, rfsize); @@ -155,12 +151,10 @@ int serial_init_dev(unsigned int idx) { volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR; volatile psc512x_t *psc = (psc512x_t *) &im->psc[idx]; -#if defined(CONFIG_SERIAL_MULTI) u32 reg; reg = in_be32(&im->clk.sccr[0]); out_be32(&im->clk.sccr[0], reg | CLOCK_SCCR1_PSC_EN(idx)); -#endif fifo_init (psc); @@ -285,9 +279,7 @@ int serial_getcts_dev(unsigned int idx) return (in_8(&psc->ip) & 0x1) ? 0 : 1; } -#endif /* CONFIG_PSC_CONSOLE || CONFIG_SERIAL_MULTI */ - -#if defined(CONFIG_SERIAL_MULTI) +#endif /* CONFIG_PSC_CONSOLE */ #define DECLARE_PSC_SERIAL_FUNCTIONS(port) \ int serial##port##_init(void) \ @@ -319,15 +311,15 @@ int serial_getcts_dev(unsigned int idx) serial_puts_dev(port, s); \ } -#define INIT_PSC_SERIAL_STRUCTURE(port, name) { \ - name, \ - serial##port##_init, \ - serial##port##_uninit, \ - serial##port##_setbrg, \ - serial##port##_getc, \ - serial##port##_tstc, \ - serial##port##_putc, \ - serial##port##_puts, \ +#define INIT_PSC_SERIAL_STRUCTURE(port, __name) { \ + .name = __name, \ + .start = serial##port##_init, \ + .stop = serial##port##_uninit, \ + .setbrg = serial##port##_setbrg, \ + .getc = serial##port##_getc, \ + .tstc = serial##port##_tstc, \ + .putc = serial##port##_putc, \ + .puts = serial##port##_puts, \ } #if defined(CONFIG_SYS_PSC1) @@ -365,55 +357,22 @@ __weak struct serial_device *default_serial_console(void) #endif } -#else - -void serial_setbrg(void) -{ - serial_setbrg_dev(CONFIG_PSC_CONSOLE); -} - -int serial_init(void) +void mpc512x_serial_initialize(void) { - return serial_init_dev(CONFIG_PSC_CONSOLE); -} - -void serial_putc(const char c) -{ - serial_putc_dev(CONFIG_PSC_CONSOLE, c); -} - -void serial_putc_raw(const char c) -{ - serial_putc_raw_dev(CONFIG_PSC_CONSOLE, c); -} - -void serial_puts(const char *s) -{ - serial_puts_dev(CONFIG_PSC_CONSOLE, s); -} - -int serial_getc(void) -{ - return serial_getc_dev(CONFIG_PSC_CONSOLE); -} - -int serial_tstc(void) -{ - return serial_tstc_dev(CONFIG_PSC_CONSOLE); -} - -void serial_setrts(int s) -{ - return serial_setrts_dev(CONFIG_PSC_CONSOLE, s); -} - -int serial_getcts(void) -{ - return serial_getcts_dev(CONFIG_PSC_CONSOLE); +#if defined(CONFIG_SYS_PSC1) + serial_register(&serial1_device); +#endif +#if defined(CONFIG_SYS_PSC3) + serial_register(&serial3_device); +#endif +#if defined(CONFIG_SYS_PSC4) + serial_register(&serial4_device); +#endif +#if defined(CONFIG_SYS_PSC6) + serial_register(&serial6_device); +#endif } -#endif /* CONFIG_PSC_CONSOLE */ -#if defined(CONFIG_SERIAL_MULTI) #include <stdio_dev.h> /* * Routines for communication with serial devices over PSC @@ -498,4 +457,3 @@ int read_port(struct stdio_dev *port, char *buf, int size) return cnt; } -#endif /* CONFIG_SERIAL_MULTI */ diff --git a/arch/powerpc/cpu/mpc5xx/serial.c b/arch/powerpc/cpu/mpc5xx/serial.c index 88c6db81cb..6ef8be8fac 100644 --- a/arch/powerpc/cpu/mpc5xx/serial.c +++ b/arch/powerpc/cpu/mpc5xx/serial.c @@ -33,20 +33,40 @@ #include <watchdog.h> #include <command.h> #include <mpc5xx.h> +#include <serial.h> +#include <linux/compiler.h> DECLARE_GLOBAL_DATA_PTR; /* - * Local function prototypes + * Local functions */ -static int ready_to_send(void); +static int ready_to_send(void) +{ + volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR; + volatile short status; + + do { +#if defined(CONFIG_5xx_CONS_SCI1) + status = immr->im_qsmcm.qsmcm_sc1sr; +#else + status = immr->im_qsmcm.qsmcm_sc2sr; +#endif + +#if defined(CONFIG_WATCHDOG) + reset_5xx_watchdog (immr); +#endif + } while ((status & SCI_TDRE) == 0); + return 1; + +} /* * Minimal global serial functions needed to use one of the SCI modules. */ -int serial_init (void) +static int mpc5xx_serial_init(void) { volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR; @@ -63,7 +83,7 @@ int serial_init (void) return 0; } -void serial_putc(const char c) +static void mpc5xx_serial_putc(const char c) { volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR; @@ -85,7 +105,7 @@ void serial_putc(const char c) } } -int serial_getc(void) +static int mpc5xx_serial_getc(void) { volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR; volatile short status; @@ -113,7 +133,7 @@ int serial_getc(void) return tmp; } -int serial_tstc() +static int mpc5xx_serial_tstc(void) { volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR; short status; @@ -127,7 +147,7 @@ int serial_tstc() return (status & SCI_RDRF); } -void serial_setbrg (void) +static void mpc5xx_serial_setbrg(void) { volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR; short scxbr; @@ -141,7 +161,7 @@ void serial_setbrg (void) #endif } -void serial_puts (const char *s) +static void mpc5xx_serial_puts(const char *s) { while (*s) { serial_putc(*s); @@ -149,22 +169,23 @@ void serial_puts (const char *s) } } -int ready_to_send(void) +static struct serial_device mpc5xx_serial_drv = { + .name = "mpc5xx_serial", + .start = mpc5xx_serial_init, + .stop = NULL, + .setbrg = mpc5xx_serial_setbrg, + .putc = mpc5xx_serial_putc, + .puts = mpc5xx_serial_puts, + .getc = mpc5xx_serial_getc, + .tstc = mpc5xx_serial_tstc, +}; + +void mpc5xx_serial_initialize(void) { - volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR; - volatile short status; - - do { -#if defined(CONFIG_5xx_CONS_SCI1) - status = immr->im_qsmcm.qsmcm_sc1sr; -#else - status = immr->im_qsmcm.qsmcm_sc2sr; -#endif - -#if defined(CONFIG_WATCHDOG) - reset_5xx_watchdog (immr); -#endif - } while ((status & SCI_TDRE) == 0); - return 1; + serial_register(&mpc5xx_serial_drv); +} +__weak struct serial_device *default_serial_console(void) +{ + return &mpc5xx_serial_drv; } diff --git a/arch/powerpc/cpu/mpc5xxx/serial.c b/arch/powerpc/cpu/mpc5xxx/serial.c index aa09f67ccf..eb141619b8 100644 --- a/arch/powerpc/cpu/mpc5xxx/serial.c +++ b/arch/powerpc/cpu/mpc5xxx/serial.c @@ -25,7 +25,7 @@ * Linux/PPC sources (m8260_tty.c had no copyright info in it). * * Martin Krause, 8 Jun 2006 - * Added CONFIG_SERIAL_MULTI support + * Added SERIAL_MULTI support */ /* @@ -36,10 +36,7 @@ #include <common.h> #include <linux/compiler.h> #include <mpc5xxx.h> - -#if defined (CONFIG_SERIAL_MULTI) #include <serial.h> -#endif DECLARE_GLOBAL_DATA_PTR; @@ -61,11 +58,8 @@ DECLARE_GLOBAL_DATA_PTR; #error CONFIG_PSC_CONSOLE must be in 1 ... 6 #endif -#if defined(CONFIG_SERIAL_MULTI) && !defined(CONFIG_PSC_CONSOLE2) -#error you must define CONFIG_PSC_CONSOLE2 if CONFIG_SERIAL_MULTI is set -#endif +#if defined(CONFIG_PSC_CONSOLE2) -#if defined(CONFIG_SERIAL_MULTI) #if CONFIG_PSC_CONSOLE2 == 1 #define PSC_BASE2 MPC5XXX_PSC1 #elif CONFIG_PSC_CONSOLE2 == 2 @@ -81,19 +75,12 @@ DECLARE_GLOBAL_DATA_PTR; #else #error CONFIG_PSC_CONSOLE2 must be in 1 ... 6 #endif -#endif /* CONFIG_SERIAL_MULTI */ -#if defined(CONFIG_SERIAL_MULTI) -int serial_init_dev (unsigned long dev_base) -#else -int serial_init (void) #endif + +int serial_init_dev (unsigned long dev_base) { -#if defined(CONFIG_SERIAL_MULTI) volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev_base; -#else - volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE; -#endif unsigned long baseclk; int div; @@ -127,24 +114,12 @@ int serial_init (void) return (0); } -#if defined(CONFIG_SERIAL_MULTI) void serial_putc_dev (unsigned long dev_base, const char c) -#else -void serial_putc(const char c) -#endif { -#if defined(CONFIG_SERIAL_MULTI) volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev_base; -#else - volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE; -#endif if (c == '\n') -#if defined(CONFIG_SERIAL_MULTI) serial_putc_dev (dev_base, '\r'); -#else - serial_putc('\r'); -#endif /* Wait for last character to go. */ while (!(psc->psc_status & PSC_SR_TXEMP)) @@ -153,17 +128,9 @@ void serial_putc(const char c) psc->psc_buffer_8 = c; } -#if defined(CONFIG_SERIAL_MULTI) void serial_putc_raw_dev(unsigned long dev_base, const char c) -#else -void serial_putc_raw(const char c) -#endif { -#if defined(CONFIG_SERIAL_MULTI) volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev_base; -#else - volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE; -#endif /* Wait for last character to go. */ while (!(psc->psc_status & PSC_SR_TXEMP)) ; @@ -172,32 +139,16 @@ void serial_putc_raw(const char c) } -#if defined(CONFIG_SERIAL_MULTI) void serial_puts_dev (unsigned long dev_base, const char *s) -#else -void serial_puts (const char *s) -#endif { while (*s) { -#if defined(CONFIG_SERIAL_MULTI) serial_putc_dev (dev_base, *s++); -#else - serial_putc (*s++); -#endif } } -#if defined(CONFIG_SERIAL_MULTI) int serial_getc_dev (unsigned long dev_base) -#else -int serial_getc(void) -#endif { -#if defined(CONFIG_SERIAL_MULTI) volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev_base; -#else - volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE; -#endif /* Wait for a character to arrive. */ while (!(psc->psc_status & PSC_SR_RXRDY)) @@ -206,32 +157,16 @@ int serial_getc(void) return psc->psc_buffer_8; } -#if defined(CONFIG_SERIAL_MULTI) int serial_tstc_dev (unsigned long dev_base) -#else -int serial_tstc(void) -#endif { -#if defined(CONFIG_SERIAL_MULTI) volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev_base; -#else - volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE; -#endif return (psc->psc_status & PSC_SR_RXRDY); } -#if defined(CONFIG_SERIAL_MULTI) void serial_setbrg_dev (unsigned long dev_base) -#else -void serial_setbrg(void) -#endif { -#if defined(CONFIG_SERIAL_MULTI) volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev_base; -#else - volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE; -#endif unsigned long baseclk, div; baseclk = (gd->ipb_clk + 16) / 32; @@ -242,17 +177,9 @@ void serial_setbrg(void) psc->ctlr = div & 0xff; } -#if defined(CONFIG_SERIAL_MULTI) void serial_setrts_dev (unsigned long dev_base, int s) -#else -void serial_setrts(int s) -#endif { -#if defined(CONFIG_SERIAL_MULTI) volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev_base; -#else - volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE; -#endif if (s) { /* Assert RTS (become LOW) */ @@ -264,88 +191,53 @@ void serial_setrts(int s) } } -#if defined(CONFIG_SERIAL_MULTI) int serial_getcts_dev (unsigned long dev_base) -#else -int serial_getcts(void) -#endif { -#if defined(CONFIG_SERIAL_MULTI) volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)dev_base; -#else - volatile struct mpc5xxx_psc *psc = (struct mpc5xxx_psc *)PSC_BASE; -#endif return (psc->ip & 0x1) ? 0 : 1; } -#if defined(CONFIG_SERIAL_MULTI) int serial0_init(void) { return (serial_init_dev(PSC_BASE)); } -int serial1_init(void) -{ - return (serial_init_dev(PSC_BASE2)); -} void serial0_setbrg (void) { serial_setbrg_dev(PSC_BASE); } -void serial1_setbrg (void) -{ - serial_setbrg_dev(PSC_BASE2); -} void serial0_putc(const char c) { serial_putc_dev(PSC_BASE,c); } -void serial1_putc(const char c) -{ - serial_putc_dev(PSC_BASE2, c); -} void serial0_puts(const char *s) { serial_puts_dev(PSC_BASE, s); } -void serial1_puts(const char *s) -{ - serial_puts_dev(PSC_BASE2, s); -} - int serial0_getc(void) { return(serial_getc_dev(PSC_BASE)); } -int serial1_getc(void) -{ - return(serial_getc_dev(PSC_BASE2)); -} int serial0_tstc(void) { return (serial_tstc_dev(PSC_BASE)); } -int serial1_tstc(void) -{ - return (serial_tstc_dev(PSC_BASE2)); -} - struct serial_device serial0_device = { - "serial0", - serial0_init, - NULL, - serial0_setbrg, - serial0_getc, - serial0_tstc, - serial0_putc, - serial0_puts, + .name = "serial0", + .start = serial0_init, + .stop = NULL, + .setbrg = serial0_setbrg, + .getc = serial0_getc, + .tstc = serial0_tstc, + .putc = serial0_putc, + .puts = serial0_puts, }; __weak struct serial_device *default_serial_console(void) @@ -353,17 +245,48 @@ __weak struct serial_device *default_serial_console(void) return &serial0_device; } +#ifdef CONFIG_PSC_CONSOLE2 +int serial1_init(void) +{ + return serial_init_dev(PSC_BASE2); +} + +void serial1_setbrg(void) +{ + serial_setbrg_dev(PSC_BASE2); +} + +void serial1_putc(const char c) +{ + serial_putc_dev(PSC_BASE2, c); +} + +void serial1_puts(const char *s) +{ + serial_puts_dev(PSC_BASE2, s); +} + +int serial1_getc(void) +{ + return serial_getc_dev(PSC_BASE2); +} + +int serial1_tstc(void) +{ + return serial_tstc_dev(PSC_BASE2); +} + struct serial_device serial1_device = { - "serial1", - serial1_init, - NULL, - serial1_setbrg, - serial1_getc, - serial1_tstc, - serial1_putc, - serial1_puts, + .name = "serial1", + .start = serial1_init, + .stop = NULL, + .setbrg = serial1_setbrg, + .getc = serial1_getc, + .tstc = serial1_tstc, + .putc = serial1_putc, + .puts = serial1_puts, }; -#endif /* CONFIG_SERIAL_MULTI */ +#endif /* CONFIG_PSC_CONSOLE2 */ #endif /* CONFIG_PSC_CONSOLE */ diff --git a/arch/powerpc/cpu/mpc5xxx/usb_ohci.c b/arch/powerpc/cpu/mpc5xxx/usb_ohci.c index 6d915256a3..607034b7c6 100644 --- a/arch/powerpc/cpu/mpc5xxx/usb_ohci.c +++ b/arch/powerpc/cpu/mpc5xxx/usb_ohci.c @@ -1561,7 +1561,7 @@ static void hc_release_ohci (ohci_t *ohci) */ static char ohci_inited = 0; -int usb_lowlevel_init(void) +int usb_lowlevel_init(int index, void **controller) { /* Set the USB Clock */ @@ -1629,7 +1629,7 @@ int usb_lowlevel_init(void) return 0; } -int usb_lowlevel_stop(void) +int usb_lowlevel_stop(int index) { /* this gets called really early - before the controller has */ /* even been initialized! */ diff --git a/arch/powerpc/cpu/mpc8220/uart.c b/arch/powerpc/cpu/mpc8220/uart.c index 0c4b536b48..25d4472ea0 100644 --- a/arch/powerpc/cpu/mpc8220/uart.c +++ b/arch/powerpc/cpu/mpc8220/uart.c @@ -29,13 +29,15 @@ #include <common.h> #include <mpc8220.h> +#include <serial.h> +#include <linux/compiler.h> DECLARE_GLOBAL_DATA_PTR; #define PSC_BASE MMAP_PSC1 #if defined(CONFIG_PSC_CONSOLE) -int serial_init (void) +static int mpc8220_serial_init(void) { volatile psc8220_t *psc = (psc8220_t *) PSC_BASE; u32 counter; @@ -69,7 +71,7 @@ int serial_init (void) return (0); } -void serial_putc (const char c) +static void mpc8220_serial_putc(const char c) { volatile psc8220_t *psc = (psc8220_t *) PSC_BASE; @@ -82,14 +84,14 @@ void serial_putc (const char c) psc->xmitbuf[0] = c; } -void serial_puts (const char *s) +static void mpc8220_serial_puts(const char *s) { while (*s) { serial_putc (*s++); } } -int serial_getc (void) +static int mpc8220_serial_getc(void) { volatile psc8220_t *psc = (psc8220_t *) PSC_BASE; @@ -98,14 +100,14 @@ int serial_getc (void) return psc->xmitbuf[2]; } -int serial_tstc (void) +static int mpc8220_serial_tstc(void) { volatile psc8220_t *psc = (psc8220_t *) PSC_BASE; return (psc->sr_csr & PSC_SR_RXRDY); } -void serial_setbrg (void) +static void mpc8220_serial_setbrg(void) { volatile psc8220_t *psc = (psc8220_t *) PSC_BASE; u32 counter; @@ -123,4 +125,25 @@ void serial_setbrg (void) psc->cr = PSC_CR_RX_ENABLE | PSC_CR_TX_ENABLE; } + +static struct serial_device mpc8220_serial_drv = { + .name = "mpc8220_serial", + .start = mpc8220_serial_init, + .stop = NULL, + .setbrg = mpc8220_serial_setbrg, + .putc = mpc8220_serial_putc, + .puts = mpc8220_serial_puts, + .getc = mpc8220_serial_getc, + .tstc = mpc8220_serial_tstc, +}; + +void mpc8220_serial_initialize(void) +{ + serial_register(&mpc8220_serial_drv); +} + +__weak struct serial_device *default_serial_console(void) +{ + return &mpc8220_serial_drv; +} #endif /* CONFIG_PSC_CONSOLE */ diff --git a/arch/powerpc/cpu/mpc8260/serial_scc.c b/arch/powerpc/cpu/mpc8260/serial_scc.c index 4ab6a28640..ab7755824a 100644 --- a/arch/powerpc/cpu/mpc8260/serial_scc.c +++ b/arch/powerpc/cpu/mpc8260/serial_scc.c @@ -31,6 +31,8 @@ #include <common.h> #include <mpc8260.h> #include <asm/cpm_8260.h> +#include <serial.h> +#include <linux/compiler.h> DECLARE_GLOBAL_DATA_PTR; @@ -82,7 +84,7 @@ DECLARE_GLOBAL_DATA_PTR; #endif -int serial_init (void) +static int mpc8260_scc_serial_init(void) { volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; volatile scc_t *sp; @@ -180,8 +182,7 @@ int serial_init (void) return (0); } -void -serial_setbrg (void) +static void mpc8260_scc_serial_setbrg(void) { #if defined(CONFIG_CONS_USE_EXTC) m8260_cpm_extcbrg(SCC_INDEX, gd->baudrate, @@ -191,8 +192,7 @@ serial_setbrg (void) #endif } -void -serial_putc(const char c) +static void mpc8260_scc_serial_putc(const char c) { volatile scc_uart_t *up; volatile cbd_t *tbdf; @@ -217,16 +217,14 @@ serial_putc(const char c) tbdf->cbd_sc |= BD_SC_READY; } -void -serial_puts (const char *s) +static void mpc8260_scc_serial_puts(const char *s) { while (*s) { serial_putc (*s++); } } -int -serial_getc(void) +static int mpc8260_scc_serial_getc(void) { volatile cbd_t *rbdf; volatile scc_uart_t *up; @@ -250,8 +248,7 @@ serial_getc(void) return (c); } -int -serial_tstc() +static int mpc8260_scc_serial_tstc(void) { volatile cbd_t *rbdf; volatile scc_uart_t *up; @@ -264,6 +261,26 @@ serial_tstc() return ((rbdf->cbd_sc & BD_SC_EMPTY) == 0); } +static struct serial_device mpc8260_scc_serial_drv = { + .name = "mpc8260_scc_uart", + .start = mpc8260_scc_serial_init, + .stop = NULL, + .setbrg = mpc8260_scc_serial_setbrg, + .putc = mpc8260_scc_serial_putc, + .puts = mpc8260_scc_serial_puts, + .getc = mpc8260_scc_serial_getc, + .tstc = mpc8260_scc_serial_tstc, +}; + +void mpc8260_scc_serial_initialize(void) +{ + serial_register(&mpc8260_scc_serial_drv); +} + +__weak struct serial_device *default_serial_console(void) +{ + return &mpc8260_scc_serial_drv; +} #endif /* CONFIG_CONS_ON_SCC */ #if defined(CONFIG_KGDB_ON_SCC) diff --git a/arch/powerpc/cpu/mpc8260/serial_smc.c b/arch/powerpc/cpu/mpc8260/serial_smc.c index 7b6eaba09a..7edde9a492 100644 --- a/arch/powerpc/cpu/mpc8260/serial_smc.c +++ b/arch/powerpc/cpu/mpc8260/serial_smc.c @@ -33,6 +33,8 @@ #include <common.h> #include <mpc8260.h> #include <asm/cpm_8260.h> +#include <serial.h> +#include <linux/compiler.h> DECLARE_GLOBAL_DATA_PTR; @@ -91,7 +93,7 @@ static unsigned char brg_map[] = { 3, /* BRG1 for SCC4 */ }; -int serial_init (void) +static int mpc8260_smc_serial_init(void) { volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; volatile smc_t *sp; @@ -183,8 +185,7 @@ int serial_init (void) return (0); } -void -serial_setbrg (void) +static void mpc8260_smc_serial_setbrg(void) { #if defined(CONFIG_CONS_USE_EXTC) m8260_cpm_extcbrg(brg_map[SMC_INDEX], gd->baudrate, @@ -194,8 +195,7 @@ serial_setbrg (void) #endif } -void -serial_putc(const char c) +static void mpc8260_smc_serial_putc(const char c) { volatile smc_uart_t *up; volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; @@ -216,16 +216,14 @@ serial_putc(const char c) rtx->txbd.cbd_sc |= BD_SC_READY; } -void -serial_puts (const char *s) +static void mpc8260_smc_serial_puts(const char *s) { while (*s) { serial_putc (*s++); } } -int -serial_getc(void) +static int mpc8260_smc_serial_getc(void) { volatile smc_uart_t *up; volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; @@ -254,8 +252,7 @@ serial_getc(void) return(c); } -int -serial_tstc() +static int mpc8260_smc_serial_tstc(void) { volatile smc_uart_t *up; volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; @@ -267,6 +264,26 @@ serial_tstc() return !(rtx->rxbd.cbd_sc & BD_SC_EMPTY); } +static struct serial_device mpc8260_smc_serial_drv = { + .name = "mpc8260_smc_uart", + .start = mpc8260_smc_serial_init, + .stop = NULL, + .setbrg = mpc8260_smc_serial_setbrg, + .putc = mpc8260_smc_serial_putc, + .puts = mpc8260_smc_serial_puts, + .getc = mpc8260_smc_serial_getc, + .tstc = mpc8260_smc_serial_tstc, +}; + +void mpc8260_smc_serial_initialize(void) +{ + serial_register(&mpc8260_smc_serial_drv); +} + +__weak struct serial_device *default_serial_console(void) +{ + return &mpc8260_smc_serial_drv; +} #endif /* CONFIG_CONS_ON_SMC */ #if defined(CONFIG_KGDB_ON_SMC) diff --git a/arch/powerpc/cpu/mpc85xx/serial_scc.c b/arch/powerpc/cpu/mpc85xx/serial_scc.c index 2dab2124fc..fe9af55c7a 100644 --- a/arch/powerpc/cpu/mpc85xx/serial_scc.c +++ b/arch/powerpc/cpu/mpc85xx/serial_scc.c @@ -34,6 +34,8 @@ #include <common.h> #include <asm/cpm_85xx.h> +#include <serial.h> +#include <linux/compiler.h> DECLARE_GLOBAL_DATA_PTR; @@ -85,7 +87,7 @@ DECLARE_GLOBAL_DATA_PTR; #endif -int serial_init (void) +static int mpc85xx_serial_init(void) { volatile ccsr_cpm_t *cpm = (ccsr_cpm_t *)CONFIG_SYS_MPC85xx_CPM_ADDR; volatile ccsr_cpm_scc_t *sp; @@ -184,8 +186,7 @@ int serial_init (void) return (0); } -void -serial_setbrg (void) +static void mpc85xx_serial_setbrg(void) { #if defined(CONFIG_CONS_USE_EXTC) m8560_cpm_extcbrg(SCC_INDEX, gd->baudrate, @@ -195,8 +196,7 @@ serial_setbrg (void) #endif } -void -serial_putc(const char c) +static void mpc85xx_serial_putc(const char c) { volatile scc_uart_t *up; volatile cbd_t *tbdf; @@ -220,16 +220,14 @@ serial_putc(const char c) tbdf->cbd_sc |= BD_SC_READY; } -void -serial_puts (const char *s) +static void mpc85xx_serial_puts(const char *s) { while (*s) { serial_putc (*s++); } } -int -serial_getc(void) +static int mpc85xx_serial_getc(void) { volatile cbd_t *rbdf; volatile scc_uart_t *up; @@ -252,8 +250,7 @@ serial_getc(void) return (c); } -int -serial_tstc() +static int mpc85xx_serial_tstc(void) { volatile cbd_t *rbdf; volatile scc_uart_t *up; @@ -265,4 +262,24 @@ serial_tstc() return ((rbdf->cbd_sc & BD_SC_EMPTY) == 0); } +static struct serial_device mpc85xx_serial_drv = { + .name = "mpc85xx_serial", + .start = mpc85xx_serial_init, + .stop = NULL, + .setbrg = mpc85xx_serial_setbrg, + .putc = mpc85xx_serial_putc, + .puts = mpc85xx_serial_puts, + .getc = mpc85xx_serial_getc, + .tstc = mpc85xx_serial_tstc, +}; + +void mpc85xx_serial_initialize(void) +{ + serial_register(&mpc85xx_serial_drv); +} + +__weak struct serial_device *default_serial_console(void) +{ + return &mpc85xx_serial_drv; +} #endif /* CONFIG_CONS_ON_SCC */ diff --git a/arch/powerpc/cpu/mpc8xx/serial.c b/arch/powerpc/cpu/mpc8xx/serial.c index 9239b24d20..00888e9062 100644 --- a/arch/powerpc/cpu/mpc8xx/serial.c +++ b/arch/powerpc/cpu/mpc8xx/serial.c @@ -390,14 +390,14 @@ smc_tstc(void) struct serial_device serial_smc_device = { - "serial_smc", - smc_init, - NULL, - smc_setbrg, - smc_getc, - smc_tstc, - smc_putc, - smc_puts, + .name = "serial_smc", + .start = smc_init, + .stop = NULL, + .setbrg = smc_setbrg, + .getc = smc_getc, + .tstc = smc_tstc, + .putc = smc_putc, + .puts = smc_puts, }; #endif /* CONFIG_8xx_CONS_SMC1 || CONFIG_8xx_CONS_SMC2 */ @@ -660,14 +660,14 @@ scc_tstc(void) struct serial_device serial_scc_device = { - "serial_scc", - scc_init, - NULL, - scc_setbrg, - scc_getc, - scc_tstc, - scc_putc, - scc_puts, + .name = "serial_scc", + .start = scc_init, + .stop = NULL, + .setbrg = scc_setbrg, + .getc = scc_getc, + .tstc = scc_tstc, + .putc = scc_putc, + .puts = scc_puts, }; #endif /* CONFIG_8xx_CONS_SCCx */ @@ -681,6 +681,17 @@ __weak struct serial_device *default_serial_console(void) #endif } +void mpc8xx_serial_initialize(void) +{ +#if defined(CONFIG_8xx_CONS_SMC1) || defined(CONFIG_8xx_CONS_SMC2) + serial_register(&serial_smc_device); +#endif +#if defined(CONFIG_8xx_CONS_SCC1) || defined(CONFIG_8xx_CONS_SCC2) || \ + defined(CONFIG_8xx_CONS_SCC3) || defined(CONFIG_8xx_CONS_SCC4) + serial_register(&serial_scc_device); +#endif +} + #ifdef CONFIG_MODEM_SUPPORT void disable_putc(void) { diff --git a/arch/powerpc/cpu/ppc4xx/Makefile b/arch/powerpc/cpu/ppc4xx/Makefile index 3d62255039..8da2f86e59 100644 --- a/arch/powerpc/cpu/ppc4xx/Makefile +++ b/arch/powerpc/cpu/ppc4xx/Makefile @@ -53,7 +53,6 @@ COBJS += ecc.o COBJS-$(CONFIG_CMD_ECCTEST) += cmd_ecctest.o COBJS += fdt.o COBJS += interrupts.o -COBJS += iop480_uart.o COBJS-$(CONFIG_CMD_REGINFO) += reginfo.o COBJS += sdram.o COBJS += speed.o diff --git a/arch/powerpc/cpu/ppc4xx/cpu.c b/arch/powerpc/cpu/ppc4xx/cpu.c index 67f1fff7ef..60aba8cefe 100644 --- a/arch/powerpc/cpu/ppc4xx/cpu.c +++ b/arch/powerpc/cpu/ppc4xx/cpu.c @@ -79,7 +79,7 @@ static int pci_async_enabled(void) #endif #endif /* CONFIG_PCI */ -#if defined(CONFIG_PCI) && !defined(CONFIG_IOP480) && \ +#if defined(CONFIG_PCI) && \ !defined(CONFIG_405) && !defined(CONFIG_405EX) int pci_arbiter_enabled(void) { @@ -303,7 +303,6 @@ int checkcpu (void) u32 reg; #endif -#if !defined(CONFIG_IOP480) char addstr[64] = ""; sys_info_t sys_info; int cpu_num; @@ -671,14 +670,6 @@ int checkcpu (void) printf (" 16 kB I-Cache %d kB D-Cache", ((pvr | 0x00000001) == PVR_405GPR_RB) ? 16 : 8); #endif -#endif /* !defined(CONFIG_IOP480) */ - -#if defined(CONFIG_IOP480) - printf ("PLX IOP480 (PVR=%08x)", pvr); - printf (" at %s MHz:", strmhz(buf, clock)); - printf (" %u kB I-Cache", 4); - printf (" %u kB D-Cache", 2); -#endif #endif /* !defined(CONFIG_405) */ @@ -723,15 +714,10 @@ int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) */ unsigned long get_tbclk (void) { -#if !defined(CONFIG_IOP480) sys_info_t sys_info; get_sys_info(&sys_info); return (sys_info.freqProcessor); -#else - return (66000000); -#endif - } diff --git a/arch/powerpc/cpu/ppc4xx/iop480_uart.c b/arch/powerpc/cpu/ppc4xx/iop480_uart.c deleted file mode 100644 index 027ca30c25..0000000000 --- a/arch/powerpc/cpu/ppc4xx/iop480_uart.c +++ /dev/null @@ -1,236 +0,0 @@ -/* - * (C) Copyright 2000-2006 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#include <common.h> -#include <commproc.h> -#include <asm/processor.h> -#include <asm/io.h> -#include <watchdog.h> - -#ifdef CONFIG_SERIAL_MULTI -#include <serial.h> -#endif - -DECLARE_GLOBAL_DATA_PTR; - -#ifdef CONFIG_IOP480 - -#define SPU_BASE 0x40000000 - -#define spu_LineStat_rc 0x00 /* Line Status Register (Read/Clear) */ -#define spu_LineStat_w 0x04 /* Line Status Register (Set) */ -#define spu_Handshk_rc 0x08 /* Handshake Status Register (Read/Clear) */ -#define spu_Handshk_w 0x0c /* Handshake Status Register (Set) */ -#define spu_BRateDivh 0x10 /* Baud rate divisor high */ -#define spu_BRateDivl 0x14 /* Baud rate divisor low */ -#define spu_CtlReg 0x18 /* Control Register */ -#define spu_RxCmd 0x1c /* Rx Command Register */ -#define spu_TxCmd 0x20 /* Tx Command Register */ -#define spu_RxBuff 0x24 /* Rx data buffer */ -#define spu_TxBuff 0x24 /* Tx data buffer */ - -/*-----------------------------------------------------------------------------+ - | Line Status Register. - +-----------------------------------------------------------------------------*/ -#define asyncLSRport1 0x40000000 -#define asyncLSRport1set 0x40000004 -#define asyncLSRDataReady 0x80 -#define asyncLSRFramingError 0x40 -#define asyncLSROverrunError 0x20 -#define asyncLSRParityError 0x10 -#define asyncLSRBreakInterrupt 0x08 -#define asyncLSRTxHoldEmpty 0x04 -#define asyncLSRTxShiftEmpty 0x02 - -/*-----------------------------------------------------------------------------+ - | Handshake Status Register. - +-----------------------------------------------------------------------------*/ -#define asyncHSRport1 0x40000008 -#define asyncHSRport1set 0x4000000c -#define asyncHSRDsr 0x80 -#define asyncLSRCts 0x40 - -/*-----------------------------------------------------------------------------+ - | Control Register. - +-----------------------------------------------------------------------------*/ -#define asyncCRport1 0x40000018 -#define asyncCRNormal 0x00 -#define asyncCRLoopback 0x40 -#define asyncCRAutoEcho 0x80 -#define asyncCRDtr 0x20 -#define asyncCRRts 0x10 -#define asyncCRWordLength7 0x00 -#define asyncCRWordLength8 0x08 -#define asyncCRParityDisable 0x00 -#define asyncCRParityEnable 0x04 -#define asyncCREvenParity 0x00 -#define asyncCROddParity 0x02 -#define asyncCRStopBitsOne 0x00 -#define asyncCRStopBitsTwo 0x01 -#define asyncCRDisableDtrRts 0x00 - -/*-----------------------------------------------------------------------------+ - | Receiver Command Register. - +-----------------------------------------------------------------------------*/ -#define asyncRCRport1 0x4000001c -#define asyncRCRDisable 0x00 -#define asyncRCREnable 0x80 -#define asyncRCRIntDisable 0x00 -#define asyncRCRIntEnabled 0x20 -#define asyncRCRDMACh2 0x40 -#define asyncRCRDMACh3 0x60 -#define asyncRCRErrorInt 0x10 -#define asyncRCRPauseEnable 0x08 - -/*-----------------------------------------------------------------------------+ - | Transmitter Command Register. - +-----------------------------------------------------------------------------*/ -#define asyncTCRport1 0x40000020 -#define asyncTCRDisable 0x00 -#define asyncTCREnable 0x80 -#define asyncTCRIntDisable 0x00 -#define asyncTCRIntEnabled 0x20 -#define asyncTCRDMACh2 0x40 -#define asyncTCRDMACh3 0x60 -#define asyncTCRTxEmpty 0x10 -#define asyncTCRErrorInt 0x08 -#define asyncTCRStopPause 0x04 -#define asyncTCRBreakGen 0x02 - -/*-----------------------------------------------------------------------------+ - | Miscellanies defines. - +-----------------------------------------------------------------------------*/ -#define asyncTxBufferport1 0x40000024 -#define asyncRxBufferport1 0x40000024 -#define asyncDLABLsbport1 0x40000014 -#define asyncDLABMsbport1 0x40000010 -#define asyncXOFFchar 0x13 -#define asyncXONchar 0x11 - -/* - * Minimal serial functions needed to use one of the SMC ports - * as serial console interface. - */ - -int serial_init (void) -{ - unsigned short br_reg; - - br_reg = ((((CONFIG_CPUCLOCK * 1000000) / 16) / gd->baudrate) - 1); - - /* - * Init onboard UART - */ - out_8((u8 *)SPU_BASE + spu_LineStat_rc, 0x78); /* Clear all bits in Line Status Reg */ - out_8((u8 *)SPU_BASE + spu_BRateDivl, (br_reg & 0x00ff)); /* Set baud rate divisor... */ - out_8((u8 *)SPU_BASE + spu_BRateDivh, ((br_reg & 0xff00) >> 8)); /* ... */ - out_8((u8 *)SPU_BASE + spu_CtlReg, 0x08); /* Set 8 bits, no parity and 1 stop bit */ - out_8((u8 *)SPU_BASE + spu_RxCmd, 0xb0); /* Enable Rx */ - out_8((u8 *)SPU_BASE + spu_TxCmd, 0x9c); /* Enable Tx */ - out_8((u8 *)SPU_BASE + spu_Handshk_rc, 0xff); /* Clear Handshake */ - in_8((u8 *)SPU_BASE + spu_RxBuff); /* Dummy read, to clear receiver */ - - return (0); -} - -void serial_setbrg (void) -{ - unsigned short br_reg; - - br_reg = ((((CONFIG_CPUCLOCK * 1000000) / 16) / gd->baudrate) - 1); - - out_8((u8 *)SPU_BASE + spu_BRateDivl, - (br_reg & 0x00ff)); /* Set baud rate divisor... */ - out_8((u8 *)SPU_BASE + spu_BRateDivh, - ((br_reg & 0xff00) >> 8)); /* ... */ -} - -void serial_putc (const char c) -{ - if (c == '\n') - serial_putc ('\r'); - - /* load status from handshake register */ - if (in_8((u8 *)SPU_BASE + spu_Handshk_rc) != 00) - out_8((u8 *)SPU_BASE + spu_Handshk_rc, 0xff); /* Clear Handshake */ - - out_8((u8 *)SPU_BASE + spu_TxBuff, c); /* Put char */ - - while ((in_8((u8 *)SPU_BASE + spu_LineStat_rc) & 04) != 04) { - if (in_8((u8 *)SPU_BASE + spu_Handshk_rc) != 00) - out_8((u8 *)SPU_BASE + spu_Handshk_rc, 0xff); /* Clear Handshake */ - } -} - -void serial_puts (const char *s) -{ - while (*s) { - serial_putc (*s++); - } -} - -int serial_getc () -{ - unsigned char status = 0; - - while (1) { - status = in_8((u8 *)asyncLSRport1); - if ((status & asyncLSRDataReady) != 0x0) { - break; - } - if ((status & ( asyncLSRFramingError | - asyncLSROverrunError | - asyncLSRParityError | - asyncLSRBreakInterrupt )) != 0) { - (void) out_8((u8 *)asyncLSRport1, - asyncLSRFramingError | - asyncLSROverrunError | - asyncLSRParityError | - asyncLSRBreakInterrupt ); - } - } - return (0x000000ff & (int) in_8((u8 *)asyncRxBufferport1)); -} - -int serial_tstc () -{ - unsigned char status; - - status = in_8((u8 *)asyncLSRport1); - if ((status & asyncLSRDataReady) != 0x0) { - return (1); - } - if ((status & ( asyncLSRFramingError | - asyncLSROverrunError | - asyncLSRParityError | - asyncLSRBreakInterrupt )) != 0) { - (void) out_8((u8 *)asyncLSRport1, - asyncLSRFramingError | - asyncLSROverrunError | - asyncLSRParityError | - asyncLSRBreakInterrupt); - } - return 0; -} - -#endif /* CONFIG_IOP480 */ diff --git a/arch/powerpc/cpu/ppc4xx/speed.c b/arch/powerpc/cpu/ppc4xx/speed.c index 09d6671d0d..45ef035b03 100644 --- a/arch/powerpc/cpu/ppc4xx/speed.c +++ b/arch/powerpc/cpu/ppc4xx/speed.c @@ -812,14 +812,6 @@ unsigned long determine_pci_clock_per(void) extern void get_sys_info (sys_info_t * sysInfo); extern ulong get_PCI_freq (void); -#elif defined(CONFIG_AP1000) -void get_sys_info (sys_info_t * sysInfo) -{ - sysInfo->freqProcessor = 240 * 1000 * 1000; - sysInfo->freqPLB = 80 * 1000 * 1000; - sysInfo->freqPCI = 33 * 1000 * 1000; -} - #elif defined(CONFIG_405) void get_sys_info (sys_info_t * sysInfo) @@ -1190,22 +1182,12 @@ void get_sys_info (sys_info_t * sysInfo) int get_clocks (void) { -#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \ - defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \ - defined(CONFIG_405EX) || defined(CONFIG_405) || \ - defined(CONFIG_440) sys_info_t sys_info; get_sys_info (&sys_info); gd->cpu_clk = sys_info.freqProcessor; gd->bus_clk = sys_info.freqPLB; -#endif /* defined(CONFIG_405GP) || defined(CONFIG_405CR) */ - -#ifdef CONFIG_IOP480 - gd->cpu_clk = 66000000; - gd->bus_clk = 66000000; -#endif return (0); } @@ -1226,11 +1208,6 @@ ulong get_bus_freq (ulong dummy) get_sys_info (&sys_info); val = sys_info.freqPLB; - -#elif defined(CONFIG_IOP480) - - val = 66; - #else # error get_bus_freq() not implemented #endif @@ -1238,7 +1215,6 @@ ulong get_bus_freq (ulong dummy) return val; } -#if !defined(CONFIG_IOP480) ulong get_OPB_freq (void) { PPC4xx_SYS_INFO sys_info; @@ -1247,4 +1223,3 @@ ulong get_OPB_freq (void) return sys_info.freqOPB; } -#endif diff --git a/arch/powerpc/cpu/ppc4xx/start.S b/arch/powerpc/cpu/ppc4xx/start.S index 3b0e3644a4..7aef43b210 100644 --- a/arch/powerpc/cpu/ppc4xx/start.S +++ b/arch/powerpc/cpu/ppc4xx/start.S @@ -806,114 +806,6 @@ _start: #endif /* CONFIG_440 */ /*****************************************************************************/ -#ifdef CONFIG_IOP480 - /*----------------------------------------------------------------------- */ - /* Set up some machine state registers. */ - /*----------------------------------------------------------------------- */ - addi r0,r0,0x0000 /* initialize r0 to zero */ - mtspr SPRN_ESR,r0 /* clear Exception Syndrome Reg */ - mttcr r0 /* timer control register */ - mtexier r0 /* disable all interrupts */ - addis r4,r0,0xFFFF /* set r4 to 0xFFFFFFFF (status in the */ - ori r4,r4,0xFFFF /* dbsr is cleared by setting bits to 1) */ - mtdbsr r4 /* clear/reset the dbsr */ - mtexisr r4 /* clear all pending interrupts */ - addis r4,r0,0x8000 - mtexier r4 /* enable critical exceptions */ - addis r4,r0,0x0000 /* assume 403GCX - enable core clk */ - ori r4,r4,0x4020 /* dbling (no harm done on GA and GC */ - mtiocr r4 /* since bit not used) & DRC to latch */ - /* data bus on rising edge of CAS */ - /*----------------------------------------------------------------------- */ - /* Clear XER. */ - /*----------------------------------------------------------------------- */ - mtxer r0 - /*----------------------------------------------------------------------- */ - /* Invalidate i-cache and d-cache TAG arrays. */ - /*----------------------------------------------------------------------- */ - addi r3,0,1024 /* 1/4 of I-cache size, half of D-cache */ - addi r4,0,1024 /* 1/4 of I-cache */ -..cloop: - iccci 0,r3 - iccci r4,r3 - dccci 0,r3 - addic. r3,r3,-16 /* move back one cache line */ - bne ..cloop /* loop back to do rest until r3 = 0 */ - - /* */ - /* initialize IOP480 so it can read 1 MB code area for SRAM spaces */ - /* this requires enabling MA[17..0], by default only MA[12..0] are enabled. */ - /* */ - - /* first copy IOP480 register base address into r3 */ - addis r3,0,0x5000 /* IOP480 register base address hi */ -/* ori r3,r3,0x0000 / IOP480 register base address lo */ - -#ifdef CONFIG_ADCIOP - /* use r4 as the working variable */ - /* turn on CS3 (LOCCTL.7) */ - lwz r4,0x84(r3) /* LOCTL is at offset 0x84 */ - andi. r4,r4,0xff7f /* make bit 7 = 0 -- CS3 mode */ - stw r4,0x84(r3) /* LOCTL is at offset 0x84 */ -#endif - -#ifdef CONFIG_DASA_SIM - /* use r4 as the working variable */ - /* turn on MA17 (LOCCTL.7) */ - lwz r4,0x84(r3) /* LOCTL is at offset 0x84 */ - ori r4,r4,0x80 /* make bit 7 = 1 -- MA17 mode */ - stw r4,0x84(r3) /* LOCTL is at offset 0x84 */ -#endif - - /* turn on MA16..13 (LCS0BRD.12 = 0) */ - lwz r4,0x100(r3) /* LCS0BRD is at offset 0x100 */ - andi. r4,r4,0xefff /* make bit 12 = 0 */ - stw r4,0x100(r3) /* LCS0BRD is at offset 0x100 */ - - /* make sure above stores all comlete before going on */ - sync - - /* last thing, set local init status done bit (DEVINIT.31) */ - lwz r4,0x80(r3) /* DEVINIT is at offset 0x80 */ - oris r4,r4,0x8000 /* make bit 31 = 1 */ - stw r4,0x80(r3) /* DEVINIT is at offset 0x80 */ - - /* clear all pending interrupts and disable all interrupts */ - li r4,-1 /* set p1 to 0xffffffff */ - stw r4,0x1b0(r3) /* clear all pending interrupts */ - stw r4,0x1b8(r3) /* clear all pending interrupts */ - li r4,0 /* set r4 to 0 */ - stw r4,0x1b4(r3) /* disable all interrupts */ - stw r4,0x1bc(r3) /* disable all interrupts */ - - /* make sure above stores all comlete before going on */ - sync - - /* Set-up icache cacheability. */ - lis r1, CONFIG_SYS_ICACHE_SACR_VALUE@h - ori r1, r1, CONFIG_SYS_ICACHE_SACR_VALUE@l - mticcr r1 - isync - - /* Set-up dcache cacheability. */ - lis r1, CONFIG_SYS_DCACHE_SACR_VALUE@h - ori r1, r1, CONFIG_SYS_DCACHE_SACR_VALUE@l - mtdccr r1 - - addis r1,r0,CONFIG_SYS_INIT_RAM_ADDR@h - ori r1,r1,CONFIG_SYS_INIT_SP_OFFSET /* set up the stack to SDRAM */ - li r0, 0 /* Make room for stack frame header and */ - stwu r0, -4(r1) /* clear final stack frame so that */ - stwu r0, -4(r1) /* stack backtraces terminate cleanly */ - - GET_GOT /* initialize GOT access */ - - bl board_init_f /* run first part of init code (from Flash) */ - /* NOTREACHED - board_init_f() does not return */ - -#endif /* CONFIG_IOP480 */ - -/*****************************************************************************/ #if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \ defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \ defined(CONFIG_405EX) || defined(CONFIG_405) diff --git a/arch/powerpc/cpu/ppc4xx/usb_ohci.c b/arch/powerpc/cpu/ppc4xx/usb_ohci.c index 14c6a280a6..4ce2726297 100644 --- a/arch/powerpc/cpu/ppc4xx/usb_ohci.c +++ b/arch/powerpc/cpu/ppc4xx/usb_ohci.c @@ -1566,7 +1566,7 @@ static void hc_release_ohci (ohci_t *ohci) */ static char ohci_inited = 0; -int usb_lowlevel_init(void) +int usb_lowlevel_init(int index, void **controller) { memset (&gohci, 0, sizeof (ohci_t)); memset (&urb_priv, 0, sizeof (urb_priv_t)); @@ -1624,7 +1624,7 @@ int usb_lowlevel_init(void) return 0; } -int usb_lowlevel_stop(void) +int usb_lowlevel_stop(int index) { /* this gets called really early - before the controller has */ /* even been initialized! */ |