* [RFC] Current Lite5200b patchset @ 2006-11-01 8:39 Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Device tree for Freescale Lite5200(b) eval board Grant Likely 2006-11-01 19:47 ` [RFC] Current Lite5200b patchset Jon Loeliger 0 siblings, 2 replies; 12+ messages in thread From: Grant Likely @ 2006-11-01 8:39 UTC (permalink / raw) To: Sylvain Munaut, linuxppc-embedded, Benjamin Herrenschmidt Sylvain; As promised, here's the patchset that I'm currently working on for the Lite5200. This depends on Nicolas' pic patch. Right now I've got the kernel booting w/ log output upto trying to run init. You'll also need to get the lite5200 device tree patch for u-boot off the u-boot-users mailing list, and the device tree compiler from www.jdl.com. Device tree is compiled w/: $ dtc -V 0x10 -f -O dtb arch/powerpc/boot/dts/lite5200b.dts > lite5200b.dtb When you boot the kernel, use 'bootm <kernel> <initrd> <dtb>' ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] [POWERPC] Device tree for Freescale Lite5200(b) eval board 2006-11-01 8:39 [RFC] Current Lite5200b patchset Grant Likely @ 2006-11-01 8:39 ` Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] MPC52xx is a 6xx variant, remove PPC_52xx config option Grant Likely 2006-11-01 19:47 ` [RFC] Current Lite5200b patchset Jon Loeliger 1 sibling, 1 reply; 12+ messages in thread From: Grant Likely @ 2006-11-01 8:39 UTC (permalink / raw) To: Sylvain Munaut, linuxppc-embedded, Benjamin Herrenschmidt Signed-off-by: Grant Likely <grant.likely@secretlab.ca> --- arch/powerpc/boot/dts/lite5200b.dts | 268 +++++++++++++++++++++++++++++++++++ 1 files changed, 268 insertions(+), 0 deletions(-) diff --git a/arch/powerpc/boot/dts/lite5200b.dts b/arch/powerpc/boot/dts/lite5200b.dts new file mode 100644 index 0000000..5863ce5 --- /dev/null +++ b/arch/powerpc/boot/dts/lite5200b.dts @@ -0,0 +1,268 @@ +/* + * Lite5200b board Device Tree Source + * + * Copyright 2006 Secret Lab Technologies Ltd. + * Grant Likely <grant.likely@secretlab.ca> + * + * 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. + */ + +/ { + model = "Lite5200b"; + compatible = "mpc5200b\0mpc52xx"; + #address-cells = <1>; + #size-cells = <1>; + + cpus { + #cpus = <1>; + #address-cells = <1>; + #size-cells = <0>; + + PowerPC,5200@0 { + device_type = "cpu"; + reg = <0>; + d-cache-line-size = <20>; + i-cache-line-size = <20>; + d-cache-size = <4000>; // L1, 16K + i-cache-size = <4000>; // L1, 16K + timebase-frequency = <0>; // from bootloader + bus-frequency = <0>; // from bootloader + clock-frequency = <0>; // from bootloader + 32-bit; + }; + }; + + memory { + device_type = "memory"; + reg = <00000000 10000000>; // 256MB + }; + + soc5200@f0000000 { + #interrupt-cells = <2>; + device_type = "soc"; + ranges = <0 f0000000 f0010000>; + reg = <f0000000 00010000>; + bus-frequency = <0>; // from bootloader + + pic@500 { + // 5200 interrupts are encoded into two levels; + // Level 1 is 2 bits; [CRIT=0,MAIN=1,PERF=2,SDMA=3] + // Level 2 is 6 bits + // The levels are encoded into the lower byte of + // a single cell; // in binary: 1122 2222 + linux,phandle = <500>; + interrupt-controller; + device_type = "interrupt_controller"; + compatible = "mpc5200b-pic\0mpc52xx-pic"; + reg = <500 80>; + built-in; + }; + + gpt@600 { // General Purpose Timer + compatible = "mpc5200b-gpt\0mpc52xx-gpt"; + device_type = "gpt"; + reg = <600 10>; + interrupts = <49 2>; + interrupt-parent = <500>; + }; + + gpt@610 { // General Purpose Timer + compatible = "mpc5200b-gpt\0mpc52xx-gpt"; + device_type = "gpt"; + reg = <610 10>; + interrupts = <4a 2>; + interrupt-parent = <500>; + }; + + gpt@620 { // General Purpose Timer + compatible = "mpc5200b-gpt\0mpc52xx-gpt"; + device_type = "gpt"; + reg = <620 10>; + interrupts = <4b 2>; + interrupt-parent = <500>; + }; + + gpt@630 { // General Purpose Timer + compatible = "mpc5200b-gpt\0mpc52xx-gpt"; + device_type = "gpt"; + reg = <630 10>; + interrupts = <4c 2>; + interrupt-parent = <500>; + }; + + gpt@640 { // General Purpose Timer + compatible = "mpc5200b-gpt\0mpc52xx-gpt"; + device_type = "gpt"; + reg = <640 10>; + interrupts = <4d 2>; + interrupt-parent = <500>; + }; + + gpt@650 { // General Purpose Timer + compatible = "mpc5200b-gpt\0mpc52xx-gpt"; + device_type = "gpt"; + reg = <650 10>; + interrupts = <4e 2>; + interrupt-parent = <500>; + }; + + gpt@660 { // General Purpose Timer + compatible = "mpc5200b-gpt\0mpc52xx-gpt"; + device_type = "gpt"; + reg = <660 10>; + interrupts = <4f 2>; + interrupt-parent = <500>; + }; + + gpt@670 { // General Purpose Timer + compatible = "mpc5200b-gpt\0mpc52xx-gpt"; + device_type = "gpt"; + reg = <670 10>; + interrupts = <50 2>; + interrupt-parent = <500>; + }; + + rtc@800 { // Real time clock + compatible = "mpc5200-rtc"; + device_type = "rtc"; + reg = <800 100>; + interrupts = <45 2 46 2>; + interrupt-parent = <500>; + }; + + mscan@900 { + device_type = "mscan"; + compatible = "mpc5200-mscan"; + interrupts = <91 2>; + interrupt-parent = <500>; + reg = <900 80>; + }; + + mscan@980 { + device_type = "mscan"; + compatible = "mpc5200-mscan"; + interrupts = <52 2>; + interrupt-parent = <500>; + reg = <980 80>; + }; + + pci@0d00 { + #interrupt-cells = <1>; + #size-cells = <2>; + #address-cells = <3>; + device_type = "pci"; + compatible = "mpc5200-pci"; + // I actually know very little about setting up PCI, + // so anything here would just be pulled out of my + // butt. Instead I'll leave these placeholders until + // I figure out what it should be + // + // interrupt-map-mask = <>; + // interrupt-map = <>; + // bus-range = <>; + // ranges = <>; + // + clock-frequency = <3f940aa>; + interrupts = <88 2 89 2 8a 2>; + interrupt-parent = <500>; + }; + + spi@f00 { + device_type = "spi"; + compatible = "mpc5200-spi"; + reg = <f00 20>; + interrupts = <8d 2 20e 2>; + interrupt-parent = <500>; + }; + + serial@2000 { // PSC1 + device_type = "serial"; + compatible = "mpc5200b-psc\0mpc52xx-psc"; + port-number = <0>; // Logical port assignment + reg = <2000 100>; + interrupts = <81 2>; + interrupt-parent = <500>; + }; + + // PSC2 in spi mode example + spi@2200 { // PSC2 + device_type = "spi"; + compatible = "mpc5200b-psc\0mpc52xx-psc"; + reg = <2200 100>; + interrupts = <82 2>; + interrupt-parent = <500>; + }; + + // PSC3 in CODEC mode example + i2s@2400 { // PSC3 + device_type = "i2s"; + compatible = "mpc5200b-psc\0mpc52xx-psc"; + reg = <2400 100>; + interrupts = <83 2>; + interrupt-parent = <500>; + }; + + // PSC4 unconfigured + //serial@2600 { // PSC4 + // device_type = "serial"; + // compatible = "mpc5200b-psc\0mpc52xx-psc"; + // reg = <2600 100>; + // interrupts = <8b 2>; + // interrupt-parent = <500>; + //}; + + // PSC5 unconfigured + //serial@2800 { // PSC5 + // device_type = "serial"; + // compatible = "mpc5200b-psc\0mpc52xx-psc"; + // reg = <2800 100>; + // interrupts = <8c 2>; + // interrupt-parent = <500>; + //}; + + // PSC6 in AC97 mode example + ac97@2c00 { // PSC6 + device_type = "ac97"; + compatible = "mpc5200b-psc\0mpc52xx-psc"; + reg = <2c00 100>; + interrupts = <84 2>; + interrupt-parent = <500>; + }; + + ethernet@3000 { + device_type = "network"; + compatible = "mpc5200-fec"; + reg = <3000 800>; + mac-address = [ 02 03 04 05 06 07 ]; // Bad! + interrupts = <85 2>; + interrupt-parent = <500>; + }; + + ata@3a00 { + device_type = "ata"; + compatible = "mpc5200-ata"; + reg = <3a00 100>; + interrupts = <87 2>; + interrupt-parent = <500>; + }; + + i2c@3d00 { + device_type = "i2c"; + compatible = "mpc5200-i2c"; + reg = <3d00 40>; + interrupts = <8f 2>; + interrupt-parent = <500>; + }; + + i2c@3d40 { + device_type = "i2c"; + compatible = "mpc5200-i2c"; + reg = <3d40 40>; + interrupts = <90 2>; + interrupt-parent = <500>; + }; + }; +}; -- 1.4.3.rc2.g0503 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] [POWERPC] MPC52xx is a 6xx variant, remove PPC_52xx config option 2006-11-01 8:39 ` [PATCH] [POWERPC] Device tree for Freescale Lite5200(b) eval board Grant Likely @ 2006-11-01 8:39 ` Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Cleanup pegasos i8259 not in device tree workaround Grant Likely 0 siblings, 1 reply; 12+ messages in thread From: Grant Likely @ 2006-11-01 8:39 UTC (permalink / raw) To: Sylvain Munaut, linuxppc-embedded, Benjamin Herrenschmidt Signed-off-by: Grant Likely <grant.likely@secretlab.ca> --- arch/powerpc/Kconfig | 5 ----- 1 files changed, 0 insertions(+), 5 deletions(-) diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index f9b11c1..6bff8b7 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -126,11 +126,6 @@ config CLASSIC32 systems, 64 bit IBM RS/6000 or an Apple G5, choose 6xx. Note that the kernel runs in 32-bit mode even on 64-bit chips. -config PPC_52xx - bool "Freescale 52xx" - select 6xx - select PPC_FPU - config PPC_82xx bool "Freescale 82xx" select 6xx -- 1.4.3.rc2.g0503 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] [POWERPC] Cleanup pegasos i8259 not in device tree workaround. 2006-11-01 8:39 ` [PATCH] [POWERPC] MPC52xx is a 6xx variant, remove PPC_52xx config option Grant Likely @ 2006-11-01 8:39 ` Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] whitespace cleanup Grant Likely 0 siblings, 1 reply; 12+ messages in thread From: Grant Likely @ 2006-11-01 8:39 UTC (permalink / raw) To: Sylvain Munaut, linuxppc-embedded, Benjamin Herrenschmidt Only make assumptions about i8259 presence if ppc_md.get_irq is not set. Previous workaround only checked chrp_mpic value. Signed-off-by: Grant Likely <grant.likely@secretlab.ca> --- arch/powerpc/platforms/chrp/setup.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c index 49b8dab..a5466ed 100644 --- a/arch/powerpc/platforms/chrp/setup.c +++ b/arch/powerpc/platforms/chrp/setup.c @@ -451,7 +451,7 @@ static void __init chrp_find_8259(void) * we have a pegasos that claims to be chrp but doesn't have * a proper interrupt tree */ - if (pic == NULL && chrp_mpic != NULL) { + if (pic == NULL && ppc_md.get_irq != NULL) { printk(KERN_ERR "i8259: Not found in device-tree" " assuming no legacy interrupts\n"); return; -- 1.4.3.rc2.g0503 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] [POWERPC] whitespace cleanup 2006-11-01 8:39 ` [PATCH] [POWERPC] Cleanup pegasos i8259 not in device tree workaround Grant Likely @ 2006-11-01 8:39 ` Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device Grant Likely 0 siblings, 1 reply; 12+ messages in thread From: Grant Likely @ 2006-11-01 8:39 UTC (permalink / raw) To: Sylvain Munaut, linuxppc-embedded, Benjamin Herrenschmidt Performed here to make the next patch (of_platform support) cleaner... And, yes, I know that whitespace patches are debatable, but I'm being lazy and this is easier that trying to take my whitespace changes back out. :P Signed-off-by: Grant Likely <grant.likely@secretlab.ca> --- drivers/serial/mpc52xx_uart.c | 114 ++++++++++++++++++++--------------------- 1 files changed, 56 insertions(+), 58 deletions(-) diff --git a/drivers/serial/mpc52xx_uart.c b/drivers/serial/mpc52xx_uart.c index 4f80c5b..29c9300 100644 --- a/drivers/serial/mpc52xx_uart.c +++ b/drivers/serial/mpc52xx_uart.c @@ -1,6 +1,4 @@ /* - * drivers/serial/mpc52xx_uart.c - * * Driver for the PSC of the Freescale MPC52xx PSCs configured as UARTs. * * FIXME According to the usermanual the status bits in the status register @@ -14,18 +12,18 @@ * * * Maintainer : Sylvain Munaut <tnt@246tNt.com> - * + * * Some of the code has been inspired/copied from the 2.4 code written * by Dale Farnsworth <dfarnsworth@mvista.com>. - * + * * Copyright (C) 2004-2005 Sylvain Munaut <tnt@246tNt.com> * Copyright (C) 2003 MontaVista, Software, Inc. - * + * * This file is licensed under the terms of the GNU General Public License * version 2. This program is licensed "as is" without any warranty of any * kind, whether express or implied. */ - + /* Platform device Usage : * * Since PSCs can have multiple function, the correct driver for each one @@ -101,27 +99,27 @@ #endif /* UART operations */ /* ======================================================================== */ -static unsigned int +static unsigned int mpc52xx_uart_tx_empty(struct uart_port *port) { int status = in_be16(&PSC(port)->mpc52xx_psc_status); return (status & MPC52xx_PSC_SR_TXEMP) ? TIOCSER_TEMT : 0; } -static void +static void mpc52xx_uart_set_mctrl(struct uart_port *port, unsigned int mctrl) { /* Not implemented */ } -static unsigned int +static unsigned int mpc52xx_uart_get_mctrl(struct uart_port *port) { /* Not implemented */ return TIOCM_CTS | TIOCM_DSR | TIOCM_CAR; } -static void +static void mpc52xx_uart_stop_tx(struct uart_port *port) { /* port->lock taken by caller */ @@ -129,7 +127,7 @@ mpc52xx_uart_stop_tx(struct uart_port *p out_be16(&PSC(port)->mpc52xx_psc_imr,port->read_status_mask); } -static void +static void mpc52xx_uart_start_tx(struct uart_port *port) { /* port->lock taken by caller */ @@ -137,12 +135,12 @@ mpc52xx_uart_start_tx(struct uart_port * out_be16(&PSC(port)->mpc52xx_psc_imr,port->read_status_mask); } -static void +static void mpc52xx_uart_send_xchar(struct uart_port *port, char ch) { unsigned long flags; spin_lock_irqsave(&port->lock, flags); - + port->x_char = ch; if (ch) { /* Make sure tx interrupts are on */ @@ -150,7 +148,7 @@ mpc52xx_uart_send_xchar(struct uart_port port->read_status_mask |= MPC52xx_PSC_IMR_TXRDY; out_be16(&PSC(port)->mpc52xx_psc_imr,port->read_status_mask); } - + spin_unlock_irqrestore(&port->lock, flags); } @@ -178,7 +176,7 @@ mpc52xx_uart_break_ctl(struct uart_port out_8(&PSC(port)->command,MPC52xx_PSC_START_BRK); else out_8(&PSC(port)->command,MPC52xx_PSC_STOP_BRK); - + spin_unlock_irqrestore(&port->lock, flags); } @@ -197,11 +195,11 @@ mpc52xx_uart_startup(struct uart_port *p /* Reset/activate the port, clear and enable interrupts */ out_8(&psc->command,MPC52xx_PSC_RST_RX); out_8(&psc->command,MPC52xx_PSC_RST_TX); - + out_be32(&psc->sicr,0); /* UART mode DCD ignored */ out_be16(&psc->mpc52xx_psc_clock_select, 0xdd00); /* /16 prescaler on */ - + out_8(&psc->rfcntl, 0x00); out_be16(&psc->rfalarm, 0x1ff); out_8(&psc->tfcntl, 0x07); @@ -209,10 +207,10 @@ mpc52xx_uart_startup(struct uart_port *p port->read_status_mask |= MPC52xx_PSC_IMR_RXRDY | MPC52xx_PSC_IMR_TXRDY; out_be16(&psc->mpc52xx_psc_imr,port->read_status_mask); - + out_8(&psc->command,MPC52xx_PSC_TX_ENABLE); out_8(&psc->command,MPC52xx_PSC_RX_ENABLE); - + return 0; } @@ -220,19 +218,19 @@ static void mpc52xx_uart_shutdown(struct uart_port *port) { struct mpc52xx_psc __iomem *psc = PSC(port); - + /* Shut down the port, interrupt and all */ out_8(&psc->command,MPC52xx_PSC_RST_RX); out_8(&psc->command,MPC52xx_PSC_RST_TX); - - port->read_status_mask = 0; + + port->read_status_mask = 0; out_be16(&psc->mpc52xx_psc_imr,port->read_status_mask); /* Release interrupt */ free_irq(port->irq, port); } -static void +static void mpc52xx_uart_set_termios(struct uart_port *port, struct termios *new, struct termios *old) { @@ -241,10 +239,10 @@ mpc52xx_uart_set_termios(struct uart_por unsigned char mr1, mr2; unsigned short ctr; unsigned int j, baud, quot; - + /* Prepare what we're gonna write */ mr1 = 0; - + switch (new->c_cflag & CSIZE) { case CS5: mr1 |= MPC52xx_PSC_MODE_5_BITS; break; @@ -261,8 +259,8 @@ mpc52xx_uart_set_termios(struct uart_por MPC52xx_PSC_MODE_PARODD : MPC52xx_PSC_MODE_PAREVEN; } else mr1 |= MPC52xx_PSC_MODE_PARNONE; - - + + mr2 = 0; if (new->c_cflag & CSTOPB) @@ -276,7 +274,7 @@ mpc52xx_uart_set_termios(struct uart_por baud = uart_get_baud_rate(port, new, old, 0, port->uartclk/16); quot = uart_get_divisor(port, baud); ctr = quot & 0xffff; - + /* Get the lock */ spin_lock_irqsave(&port->lock, flags); @@ -290,14 +288,14 @@ mpc52xx_uart_set_termios(struct uart_por * boot for the console, all stuff is not yet ready to receive at that * time and that just makes the kernel oops */ /* while (j-- && mpc52xx_uart_int_rx_chars(port)); */ - while (!(in_be16(&psc->mpc52xx_psc_status) & MPC52xx_PSC_SR_TXEMP) && + while (!(in_be16(&psc->mpc52xx_psc_status) & MPC52xx_PSC_SR_TXEMP) && --j) udelay(1); if (!j) printk( KERN_ERR "mpc52xx_uart.c: " "Unable to flush RX & TX fifos in-time in set_termios." - "Some chars may have been lost.\n" ); + "Some chars may have been lost.\n" ); /* Reset the TX & RX */ out_8(&psc->command,MPC52xx_PSC_RST_RX); @@ -309,7 +307,7 @@ mpc52xx_uart_set_termios(struct uart_por out_8(&psc->mode,mr2); out_8(&psc->ctur,ctr >> 8); out_8(&psc->ctlr,ctr & 0xff); - + /* Reenable TX & RX */ out_8(&psc->command,MPC52xx_PSC_TX_ENABLE); out_8(&psc->command,MPC52xx_PSC_RX_ENABLE); @@ -373,7 +371,7 @@ mpc52xx_uart_verify_port(struct uart_por if ( (ser->irq != port->irq) || (ser->io_type != SERIAL_IO_MEM) || - (ser->baud_base != port->uartclk) || + (ser->baud_base != port->uartclk) || (ser->iomem_base != (void*)port->mapbase) || (ser->hub6 != 0 ) ) return -EINVAL; @@ -404,11 +402,11 @@ static struct uart_ops mpc52xx_uart_ops .verify_port = mpc52xx_uart_verify_port }; - + /* ======================================================================== */ /* Interrupt handling */ /* ======================================================================== */ - + static inline int mpc52xx_uart_int_rx_chars(struct uart_port *port) { @@ -435,11 +433,11 @@ #endif flag = TTY_NORMAL; port->icount.rx++; - + if ( status & (MPC52xx_PSC_SR_PE | MPC52xx_PSC_SR_FE | MPC52xx_PSC_SR_RB) ) { - + if (status & MPC52xx_PSC_SR_RB) { flag = TTY_BREAK; uart_handle_break(port); @@ -464,7 +462,7 @@ #endif } tty_flip_buffer_push(tty); - + return in_be16(&PSC(port)->mpc52xx_psc_status) & MPC52xx_PSC_SR_RXRDY; } @@ -509,25 +507,25 @@ mpc52xx_uart_int_tx_chars(struct uart_po return 1; } -static irqreturn_t +static irqreturn_t mpc52xx_uart_int(int irq, void *dev_id) { struct uart_port *port = dev_id; unsigned long pass = ISR_PASS_LIMIT; unsigned int keepgoing; unsigned short status; - + spin_lock(&port->lock); - + /* While we have stuff to do, we continue */ do { /* If we don't find anything to do, we stop */ - keepgoing = 0; - + keepgoing = 0; + /* Read status */ status = in_be16(&PSC(port)->mpc52xx_psc_isr); status &= port->read_status_mask; - + /* Do we need to receive chars ? */ /* For this RX interrupts must be on and some chars waiting */ if ( status & MPC52xx_PSC_IMR_RXRDY ) @@ -537,15 +535,15 @@ mpc52xx_uart_int(int irq, void *dev_id) /* For this, TX must be ready and TX interrupt enabled */ if ( status & MPC52xx_PSC_IMR_TXRDY ) keepgoing |= mpc52xx_uart_int_tx_chars(port); - + /* Limit number of iteration */ if ( !(--pass) ) keepgoing = 0; } while (keepgoing); - + spin_unlock(&port->lock); - + return IRQ_HANDLED; } @@ -566,7 +564,7 @@ mpc52xx_console_get_options(struct uart_ /* Read the mode registers */ out_8(&psc->command,MPC52xx_PSC_SEL_MODE_REG_1); mr1 = in_8(&psc->mode); - + /* CT{U,L}R are write-only ! */ *baud = __res.bi_baudrate ? __res.bi_baudrate : CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD; @@ -579,26 +577,26 @@ mpc52xx_console_get_options(struct uart_ case MPC52xx_PSC_MODE_8_BITS: default: *bits = 8; } - + if (mr1 & MPC52xx_PSC_MODE_PARNONE) *parity = 'n'; else *parity = mr1 & MPC52xx_PSC_MODE_PARODD ? 'o' : 'e'; } -static void +static void mpc52xx_console_write(struct console *co, const char *s, unsigned int count) { struct uart_port *port = &mpc52xx_uart_ports[co->index]; struct mpc52xx_psc __iomem *psc = PSC(port); unsigned int i, j; - + /* Disable interrupts */ out_be16(&psc->mpc52xx_psc_imr, 0); /* Wait the TX buffer to be empty */ - j = 5000000; /* Maximum wait */ - while (!(in_be16(&psc->mpc52xx_psc_status) & MPC52xx_PSC_SR_TXEMP) && + j = 5000000; /* Maximum wait */ + while (!(in_be16(&psc->mpc52xx_psc_status) & MPC52xx_PSC_SR_TXEMP) && --j) udelay(1); @@ -607,13 +605,13 @@ mpc52xx_console_write(struct console *co /* Line return handling */ if (*s == '\n') out_8(&psc->mpc52xx_psc_buffer_8, '\r'); - + /* Send the char */ out_8(&psc->mpc52xx_psc_buffer_8, *s); /* Wait the TX buffer to be empty */ - j = 20000; /* Maximum wait */ - while (!(in_be16(&psc->mpc52xx_psc_status) & + j = 20000; /* Maximum wait */ + while (!(in_be16(&psc->mpc52xx_psc_status) & MPC52xx_PSC_SR_TXEMP) && --j) udelay(1); } @@ -634,7 +632,7 @@ mpc52xx_console_setup(struct console *co if (co->index < 0 || co->index >= MPC52xx_PSC_MAXNUM) return -EINVAL; - + /* Basic port init. Needed since we use some uart_??? func before * real init for early access */ spin_lock_init(&port->lock); @@ -669,8 +667,8 @@ static struct console mpc52xx_console = .data = &mpc52xx_uart_driver, }; - -static int __init + +static int __init mpc52xx_console_init(void) { register_console(&mpc52xx_console); -- 1.4.3.rc2.g0503 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device 2006-11-01 8:39 ` [PATCH] [POWERPC] whitespace cleanup Grant Likely @ 2006-11-01 8:39 ` Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Remove unneeded memset from mpc52xx_psc_uart probe function Grant Likely 2006-11-01 20:37 ` [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device Nicolas DET 0 siblings, 2 replies; 12+ messages in thread From: Grant Likely @ 2006-11-01 8:39 UTC (permalink / raw) To: Sylvain Munaut, linuxppc-embedded, Benjamin Herrenschmidt As part of the transition to arch/powerpc, this patch moves the mpc5200 PSC driver over to the OF platform bus infrastructure. This patch is not acceptable for mainline as-is because it breaks arch/ppc support for the mpc52xx. More rework is needed to allow it to compile for either arch (or alternately, fork the driver) Signed-off-by: Grant Likely <grant.likely@secretlab.ca> --- drivers/serial/mpc52xx_uart.c | 146 +++++++++++++++++++++++++++++------------ 1 files changed, 105 insertions(+), 41 deletions(-) diff --git a/drivers/serial/mpc52xx_uart.c b/drivers/serial/mpc52xx_uart.c index 29c9300..09bf8e0 100644 --- a/drivers/serial/mpc52xx_uart.c +++ b/drivers/serial/mpc52xx_uart.c @@ -42,7 +42,8 @@ * will be mapped to. */ -#include <linux/platform_device.h> +#define DEBUG + #include <linux/module.h> #include <linux/tty.h> #include <linux/serial.h> @@ -51,6 +52,7 @@ #include <linux/console.h> #include <asm/delay.h> #include <asm/io.h> +#include <asm/of_device.h> #include <asm/mpc52xx.h> #include <asm/mpc52xx_psc.h> @@ -371,7 +373,7 @@ mpc52xx_uart_verify_port(struct uart_por if ( (ser->irq != port->irq) || (ser->io_type != SERIAL_IO_MEM) || - (ser->baud_base != port->uartclk) || + (ser->baud_base != port->uartclk) || (ser->iomem_base != (void*)port->mapbase) || (ser->hub6 != 0 ) ) return -EINVAL; @@ -561,13 +563,13 @@ mpc52xx_console_get_options(struct uart_ struct mpc52xx_psc __iomem *psc = PSC(port); unsigned char mr1; + pr_debug("mpc52xx_console_get_options(port=%p)\n", port); /* Read the mode registers */ out_8(&psc->command,MPC52xx_PSC_SEL_MODE_REG_1); mr1 = in_8(&psc->mode); /* CT{U,L}R are write-only ! */ - *baud = __res.bi_baudrate ? - __res.bi_baudrate : CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD; + *baud = CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD; /* Parse them */ switch (mr1 & MPC52xx_PSC_MODE_BITS_MASK) { @@ -604,10 +606,10 @@ mpc52xx_console_write(struct console *co for (i = 0; i < count; i++, s++) { /* Line return handling */ if (*s == '\n') - out_8(&psc->mpc52xx_psc_buffer_8, '\r'); + out_8(&psc->buffer.buffer_8, '\r'); /* Send the char */ - out_8(&psc->mpc52xx_psc_buffer_8, *s); + out_8(&psc->buffer.buffer_8, *s); /* Wait the TX buffer to be empty */ j = 20000; /* Maximum wait */ @@ -624,33 +626,74 @@ static int __init mpc52xx_console_setup(struct console *co, char *options) { struct uart_port *port = &mpc52xx_uart_ports[co->index]; + struct device_node *np = NULL; + struct device_node *np_idx; + const void *pp = NULL; + struct resource res; + int index = 0; + int ret; int baud = CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD; int bits = 8; int parity = 'n'; int flow = 'n'; - if (co->index < 0 || co->index >= MPC52xx_PSC_MAXNUM) + pr_debug("mpc52xx_console_setup co=%p, options=%s, index=%i\n", + co, options, co->index); + + while ((np = of_find_compatible_node(np, "serial", "mpc52xx-psc"))) { + if (index == co->index) + break; + index++; + } + + if (!np) { + pr_debug("PSC%x not found in device tree\n", co->index); + return -EINVAL; + } + + /* Fetch register locations */ + if ((ret = of_address_to_resource(np, 0, &res)) != 0) { + pr_debug("Could not get resources for PSC%x\n", index); + return ret; + } + + /* Search for bus-frequency property in this node or a parent */ + np_idx = np; + while (np_idx) { + if ((pp = get_property(np_idx, "bus-frequency", NULL)) != NULL) + break; + np_idx = of_get_parent(np_idx); + } + if (!pp) { + pr_debug("Could not find bus-frequency property!\n"); return -EINVAL; + } /* Basic port init. Needed since we use some uart_??? func before * real init for early access */ spin_lock_init(&port->lock); - port->uartclk = __res.bi_ipbfreq / 2; /* Look at CTLR doc */ + port->uartclk = *(const u32*)pp / 2; port->ops = &mpc52xx_uart_ops; - port->mapbase = MPC52xx_PA(MPC52xx_PSCx_OFFSET(co->index+1)); + port->mapbase = res.start; + port->membase = ioremap(res.start, sizeof(struct mpc52xx_psc)); + port->irq = irq_of_parse_and_map(np, 0); - /* We ioremap ourself */ - port->membase = ioremap(port->mapbase, MPC52xx_PSC_SIZE); if (port->membase == NULL) return -EINVAL; + pr_debug("mpc52xx_psc at %lx mapped to %p; irq=%x freq=%i\n", + port->mapbase, port->membase, port->irq, port->uartclk); + /* Setup the port parameters accoding to options */ if (options) uart_parse_options(options, &baud, &parity, &bits, &flow); else mpc52xx_console_get_options(port, &baud, &parity, &bits, &flow); + pr_debug("Setting console parameters: %i %i%c1 flow=%c\n", + baud, bits, parity, flow); + return uart_set_options(port, co, baud, parity, bits, flow); } @@ -703,28 +746,26 @@ static struct uart_driver mpc52xx_uart_d /* ======================================================================== */ static int __devinit -mpc52xx_uart_probe(struct platform_device *dev) +mpc52xx_uart_probe(struct of_device *op, const struct of_device_id *match) { - struct resource *res = dev->resource; - + static int idx = 0; struct uart_port *port = NULL; - int i, idx, ret; + struct resource res; + int ret; + + printk("Got here!\n"); + dev_dbg(&op->dev, "mpc52xx_uart_probe(op=%p, match=%p)\n", op, match); /* Check validity & presence */ - idx = dev->id; - if (idx < 0 || idx >= MPC52xx_PSC_MAXNUM) + if (idx >= MPC52xx_PSC_MAXNUM) return -EINVAL; - if (!mpc52xx_match_psc_function(idx,"uart")) - return -ENODEV; - /* Init the port structure */ port = &mpc52xx_uart_ports[idx]; memset(port, 0x00, sizeof(struct uart_port)); spin_lock_init(&port->lock); - port->uartclk = __res.bi_ipbfreq / 2; /* Look at CTLR doc */ port->fifosize = 512; port->iotype = UPIO_MEM; port->flags = UPF_BOOT_AUTOCONF | @@ -733,29 +774,36 @@ mpc52xx_uart_probe(struct platform_devic port->ops = &mpc52xx_uart_ops; /* Search for IRQ and mapbase */ - for (i=0 ; i<dev->num_resources ; i++, res++) { - if (res->flags & IORESOURCE_MEM) - port->mapbase = res->start; - else if (res->flags & IORESOURCE_IRQ) - port->irq = res->start; - } - if (!port->irq || !port->mapbase) + if ((ret = of_address_to_resource(op->node, 0, &res)) != 0) + return ret; + + port->mapbase = res.start; + port->membase = ioremap(res.start, sizeof(struct mpc52xx_psc)); + port->irq = irq_of_parse_and_map(op->node, 0); + + dev_dbg(&op->dev, "mpc52xx-psc UART at %lx. mapped to %p, irq %x\n", + port->mapbase, port->membase, port->irq); + + //if (!port->irq || !port->mapbase) { + if (!port->mapbase) { + printk(KERN_ERR "Could not allocate resources for PSC\n"); return -EINVAL; + } /* Add the port to the uart sub-system */ ret = uart_add_one_port(&mpc52xx_uart_driver, port); if (!ret) - platform_set_drvdata(dev, (void*)port); + dev_set_drvdata(&op->dev, (void*)port); + idx++; return ret; } static int -mpc52xx_uart_remove(struct platform_device *dev) +mpc52xx_uart_remove(struct of_device *op) { - struct uart_port *port = (struct uart_port *) platform_get_drvdata(dev); - - platform_set_drvdata(dev, NULL); + struct uart_port *port = dev_get_drvdata(&op->dev); + dev_set_drvdata(&op->dev, NULL); if (port) uart_remove_one_port(&mpc52xx_uart_driver, port); @@ -787,7 +835,19 @@ mpc52xx_uart_resume(struct platform_devi } #endif -static struct platform_driver mpc52xx_uart_platform_driver = { +static struct of_device_id mpc52xx_uart_match[] = { + { + .name = "serial", + .compatible = "mpc52xx-psc", + }, + {}, +}; +MODULE_DEVICE_TABLE(of, mpc52xx_uart_match); + +static struct of_platform_driver mpc52xx_uart_of_driver = { + .owner = THIS_MODULE, + .name = "mpc52xx-uart", + .match_table = mpc52xx_uart_match, .probe = mpc52xx_uart_probe, .remove = mpc52xx_uart_remove, #ifdef CONFIG_PM @@ -811,20 +871,24 @@ mpc52xx_uart_init(void) printk(KERN_INFO "Serial: MPC52xx PSC driver\n"); - ret = uart_register_driver(&mpc52xx_uart_driver); - if (ret == 0) { - ret = platform_driver_register(&mpc52xx_uart_platform_driver); - if (ret) - uart_unregister_driver(&mpc52xx_uart_driver); + if ((ret = uart_register_driver(&mpc52xx_uart_driver)) != 0) { + printk(KERN_ERR "Could not register mpc52xx uart driver\n"); + return ret; } - return ret; + if ((ret = of_register_driver(&mpc52xx_uart_of_driver)) != 0) { + printk(KERN_ERR "Could not register mpc52xx of driver\n"); + uart_unregister_driver(&mpc52xx_uart_driver); + return ret; + } + + return 0; } static void __exit mpc52xx_uart_exit(void) { - platform_driver_unregister(&mpc52xx_uart_platform_driver); + of_unregister_driver(&mpc52xx_uart_of_driver); uart_unregister_driver(&mpc52xx_uart_driver); } -- 1.4.3.rc2.g0503 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] [POWERPC] Remove unneeded memset from mpc52xx_psc_uart probe function 2006-11-01 8:39 ` [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device Grant Likely @ 2006-11-01 8:39 ` Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Add support for lite5200b to arch/powerpc Grant Likely 2006-11-01 20:37 ` [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device Nicolas DET 1 sibling, 1 reply; 12+ messages in thread From: Grant Likely @ 2006-11-01 8:39 UTC (permalink / raw) To: Sylvain Munaut, linuxppc-embedded, Benjamin Herrenschmidt This allows the console to continue to work after initializing the port for full serial access. However, this is not a proper fix. The init behaviour between console and serial driver access must be reengineered Signed-off-by: Grant Likely <grant.likely@secretlab.ca> --- drivers/serial/mpc52xx_uart.c | 3 --- 1 files changed, 0 insertions(+), 3 deletions(-) diff --git a/drivers/serial/mpc52xx_uart.c b/drivers/serial/mpc52xx_uart.c index 09bf8e0..f194010 100644 --- a/drivers/serial/mpc52xx_uart.c +++ b/drivers/serial/mpc52xx_uart.c @@ -753,7 +753,6 @@ mpc52xx_uart_probe(struct of_device *op, struct resource res; int ret; - printk("Got here!\n"); dev_dbg(&op->dev, "mpc52xx_uart_probe(op=%p, match=%p)\n", op, match); /* Check validity & presence */ @@ -763,8 +762,6 @@ mpc52xx_uart_probe(struct of_device *op, /* Init the port structure */ port = &mpc52xx_uart_ports[idx]; - memset(port, 0x00, sizeof(struct uart_port)); - spin_lock_init(&port->lock); port->fifosize = 512; port->iotype = UPIO_MEM; -- 1.4.3.rc2.g0503 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] [POWERPC] Add support for lite5200b to arch/powerpc 2006-11-01 8:39 ` [PATCH] [POWERPC] Remove unneeded memset from mpc52xx_psc_uart probe function Grant Likely @ 2006-11-01 8:39 ` Grant Likely 0 siblings, 0 replies; 12+ messages in thread From: Grant Likely @ 2006-11-01 8:39 UTC (permalink / raw) To: Sylvain Munaut, linuxppc-embedded, Benjamin Herrenschmidt Here is an inital attempt at porting the lite5200b to arch/powerpc. Many things are probably missing/broken Signed-off-by: Grant Likely <grant.likely@secretlab.ca> --- arch/powerpc/platforms/embedded6xx/Makefile | 1 + arch/powerpc/platforms/embedded6xx/lite5200.c | 156 +++++++++++++++++++++++++ 2 files changed, 157 insertions(+), 0 deletions(-) diff --git a/arch/powerpc/platforms/embedded6xx/Makefile b/arch/powerpc/platforms/embedded6xx/Makefile index fa499fe..a33f34d 100644 --- a/arch/powerpc/platforms/embedded6xx/Makefile +++ b/arch/powerpc/platforms/embedded6xx/Makefile @@ -2,3 +2,4 @@ # # Makefile for the 6xx/7xx/7xxxx linux kernel. # obj-$(CONFIG_MPC7448HPC2) += mpc7448_hpc2.o +obj-$(CONFIG_LITE5200) += lite5200.o diff --git a/arch/powerpc/platforms/embedded6xx/lite5200.c b/arch/powerpc/platforms/embedded6xx/lite5200.c new file mode 100644 index 0000000..fd14dec --- /dev/null +++ b/arch/powerpc/platforms/embedded6xx/lite5200.c @@ -0,0 +1,156 @@ +/* + * Freescale Lite5200 board support + * + * Written by: Grant Likely <grant.likely@secretlab.ca> + * + * Copyright (C) Secret Lab Technologies Ltd. 2006. All rights reserved. + * Copyright (C) Freescale Semicondutor, Inc. 2006. All rights reserved. + * + * Description: + * 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. + */ + +#define DEBUG + +#include <linux/stddef.h> +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/errno.h> +#include <linux/reboot.h> +#include <linux/pci.h> +#include <linux/kdev_t.h> +#include <linux/major.h> +#include <linux/console.h> +#include <linux/delay.h> +#include <linux/seq_file.h> +#include <linux/root_dev.h> +#include <linux/initrd.h> + +#include <asm/system.h> +#include <asm/atomic.h> +#include <asm/time.h> +#include <asm/io.h> +#include <asm/machdep.h> +#include <asm/ipic.h> +#include <asm/bootinfo.h> +#include <asm/irq.h> +#include <asm/prom.h> +#include <asm/udbg.h> +#include <sysdev/fsl_soc.h> +#include <asm/qe.h> +#include <asm/qe_ic.h> +#include <asm/of_device.h> + +#include <asm/mpc52xx.h> + +#ifndef CONFIG_PCI +unsigned long isa_io_base = 0; +unsigned long isa_mem_base = 0; +#endif + +/* ************************************************************************ + * + * Setup the architecture + * + */ + +static int __init mpc52xx_declare_of_platform_devices(void) +{ + struct device_node *np; + struct device_node *cnp = NULL; + const u32 *base; + char *name; + + /* Find every child of the SOC node and add it to of_platform */ + np = of_find_node_by_name(NULL, "soc5200"); + if (np) { + while ((cnp = of_get_next_child(np, cnp))) { + name = kmalloc(BUS_ID_SIZE, GFP_KERNEL); + strcpy(name, cnp->name); + + base = get_property(cnp, "reg", NULL); + if (base) + sprintf(name+strlen(name), "@%x", *base); + + of_platform_device_create(cnp, name, NULL); + } + } + + return 0; +} + +device_initcall(mpc52xx_declare_of_platform_devices); + +static void __init lite5200_setup_arch(void) +{ + struct device_node *np; + + if (ppc_md.progress) + ppc_md.progress("lite5200_setup_arch()", 0); + + np = of_find_node_by_type(NULL, "cpu"); + if (np) { + unsigned int *fp = + (int *)get_property(np, "clock-frequency", NULL); + if (fp != 0) + loops_per_jiffy = *fp / HZ; + else + loops_per_jiffy = 50000000 / HZ; + of_node_put(np); + } + +#ifdef CONFIG_PCI + for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;) + add_bridge(np); + + ppc_md.pci_swizzle = common_swizzle; + ppc_md.pci_exclude_device = mpc52xx_exclude_device; +#endif + +#ifdef CONFIG_BLK_DEV_INITRD + if (initrd_start) + ROOT_DEV = Root_RAM0; + else +#endif +#ifdef CONFIG_ROOT_NFS + ROOT_DEV = Root_NFS; +#else + ROOT_DEV = Root_HDA1; +#endif +} + +void lite5200_show_cpuinfo(struct seq_file *m) +{ + seq_printf(m, "vendor\t\t: Freescale Semiconductor\n"); + seq_printf(m, "machine\t\t: Lite5200\n"); +} + +/* + * Called very early, MMU is off, device-tree isn't unflattened + */ +static int __init lite5200_probe(void) +{ + char *compatible = of_get_flat_dt_prop(of_get_flat_dt_root(), + "compatible", NULL); + + if (compatible == NULL) + return 0; + if (strcmp(compatible, "mpc5200")) + return 0; + + pr_debug("%s-based board found\n", compatible); + + return 1; +} + +define_machine(mpc52xx) { + .name = "mpc52xx", + .probe = lite5200_probe, + .setup_arch = lite5200_setup_arch, + .init_IRQ = mpc52xx_init_irq, + .show_cpuinfo = lite5200_show_cpuinfo, + .calibrate_decr = generic_calibrate_decr, +}; -- 1.4.3.rc2.g0503 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device 2006-11-01 8:39 ` [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Remove unneeded memset from mpc52xx_psc_uart probe function Grant Likely @ 2006-11-01 20:37 ` Nicolas DET 2006-11-01 20:50 ` Grant Likely 1 sibling, 1 reply; 12+ messages in thread From: Nicolas DET @ 2006-11-01 20:37 UTC (permalink / raw) To: Grant Likely; +Cc: linuxppc-embedded [-- Attachment #1: Type: text/plain, Size: 925 bytes --] Grant Likely wrote: > As part of the transition to arch/powerpc, this patch moves the mpc5200 PSC > driver over to the OF platform bus infrastructure. > > This patch is not acceptable for mainline as-is because it breaks arch/ppc > support for the mpc52xx. More rework is needed to allow it to compile for > either arch (or alternately, fork the driver) > It has been hard to apply on 2.6.19-rc4 but it seems to perform well. I add to add some entries in mpc52xx_uart_match[] In now looks like this: static struct of_device_id mpc52xx_uart_match[] = { { .name = "serial", .compatible = "mpc52xx-psc", }, { .name = "serial", .compatible = "mpc52xx-serial", }, { .name = "serial", .compatible = "mpc5200-psc", }, { .name = "serial", .compatible = "mpc5200-serial", }, {}, }; By the way, why not using mpc52xx_uart_match[] to also in mpc52xx_console_setup() to track down any devices? Regards, [-- Attachment #2: nd.vcf --] [-- Type: text/x-vcard, Size: 249 bytes --] begin:vcard fn:Nicolas DET ( bplan GmbH ) n:DET;Nicolas org:bplan GmbH adr:;;;;;;Germany email;internet:nd@bplan-gmbh.de title:Software Entwicklung tel;work:+49 6171 9187 - 31 x-mozilla-html:FALSE url:http://www.bplan-gmbh.de version:2.1 end:vcard ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device 2006-11-01 20:37 ` [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device Nicolas DET @ 2006-11-01 20:50 ` Grant Likely 2006-11-01 20:54 ` Nicolas DET 0 siblings, 1 reply; 12+ messages in thread From: Grant Likely @ 2006-11-01 20:50 UTC (permalink / raw) To: Nicolas DET; +Cc: linuxppc-embedded On 11/1/06, Nicolas DET <nd@bplan-gmbh.de> wrote: > Grant Likely wrote: > > As part of the transition to arch/powerpc, this patch moves the mpc5200 PSC > > driver over to the OF platform bus infrastructure. > > > > This patch is not acceptable for mainline as-is because it breaks arch/ppc > > support for the mpc52xx. More rework is needed to allow it to compile for > > either arch (or alternately, fork the driver) > > > > It has been hard to apply on 2.6.19-rc4 but it seems to perform well. > I add to add some entries in mpc52xx_uart_match[] Good news, thanks for the feedback. I take it you are able to use the serial port with this driver? > > In now looks like this: > static struct of_device_id mpc52xx_uart_match[] = { > { > .name = "serial", > .compatible = "mpc52xx-psc", > }, > { > .name = "serial", > .compatible = "mpc52xx-serial", > }, > { > .name = "serial", > .compatible = "mpc5200-psc", > }, > { > .name = "serial", > .compatible = "mpc5200-serial", > }, > {}, > }; I'd rather not do this for the mainline code. I'd rather define a naming convention and all of us use it. We're early enough in this process that we can do that since there are only two major boards (lite5200 & Efika) on track to be supported in mainline ATM. Having 4 compatibility blocks to support 2 boards is over-engineering. :) > > By the way, why not using mpc52xx_uart_match[] to also in > mpc52xx_console_setup() to track down any devices? Because I hadn't thought of that, and therefore have not decided if that's a good idea! :) I'll take a look. g. -- Grant Likely, B.Sc. P.Eng. Secret Lab Technologies Ltd. grant.likely@secretlab.ca (403) 399-0195 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device 2006-11-01 20:50 ` Grant Likely @ 2006-11-01 20:54 ` Nicolas DET 0 siblings, 0 replies; 12+ messages in thread From: Nicolas DET @ 2006-11-01 20:54 UTC (permalink / raw) To: Grant Likely; +Cc: linuxppc-embedded [-- Attachment #1: Type: text/plain, Size: 1706 bytes --] Grant Likely wrote: > On 11/1/06, Nicolas DET <nd@bplan-gmbh.de> wrote: >> Grant Likely wrote: >> > As part of the transition to arch/powerpc, this patch moves the >> mpc5200 PSC >> > driver over to the OF platform bus infrastructure. >> > >> > This patch is not acceptable for mainline as-is because it breaks >> arch/ppc >> > support for the mpc52xx. More rework is needed to allow it to >> compile for >> > either arch (or alternately, fork the driver) >> > >> >> It has been hard to apply on 2.6.19-rc4 but it seems to perform well. >> I add to add some entries in mpc52xx_uart_match[] > > Good news, thanks for the feedback. I take it you are able to use the > serial port with this driver? Yes. >> >> In now looks like this: >> static struct of_device_id mpc52xx_uart_match[] = { >> { >> .name = "serial", >> .compatible = "mpc52xx-psc", >> }, >> { >> .name = "serial", >> .compatible = "mpc52xx-serial", >> }, >> { >> .name = "serial", >> .compatible = "mpc5200-psc", >> }, >> { >> .name = "serial", >> .compatible = "mpc5200-serial", >> }, >> {}, >> }; > > I'd rather not do this for the mainline code. I'd rather define a > naming convention and all of us use it. We're early enough in this > process that we can do that since there are only two major boards > (lite5200 & Efika) on track to be supported in mainline ATM. > > Having 4 compatibility blocks to support 2 boards is over-engineering. :) Ok. Efika will have "mpc5200-serial' inside the "compatible" property. Regards, [-- Attachment #2: nd.vcf --] [-- Type: text/x-vcard, Size: 249 bytes --] begin:vcard fn:Nicolas DET ( bplan GmbH ) n:DET;Nicolas org:bplan GmbH adr:;;;;;;Germany email;internet:nd@bplan-gmbh.de title:Software Entwicklung tel;work:+49 6171 9187 - 31 x-mozilla-html:FALSE url:http://www.bplan-gmbh.de version:2.1 end:vcard ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFC] Current Lite5200b patchset 2006-11-01 8:39 [RFC] Current Lite5200b patchset Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Device tree for Freescale Lite5200(b) eval board Grant Likely @ 2006-11-01 19:47 ` Jon Loeliger 1 sibling, 0 replies; 12+ messages in thread From: Jon Loeliger @ 2006-11-01 19:47 UTC (permalink / raw) To: Grant Likely; +Cc: linuxppc-embedded@ozlabs.org On Wed, 2006-11-01 at 02:39, Grant Likely wrote: > You'll also need to get the lite5200 device tree patch for u-boot off the > u-boot-users mailing list, and the device tree compiler from www.jdl.com. > > Device tree is compiled w/: > $ dtc -V 0x10 -f -O dtb arch/powerpc/boot/dts/lite5200b.dts > lite5200b.dtb And note that I just made -V 0x10 the default! jdl ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2006-11-01 20:54 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-11-01 8:39 [RFC] Current Lite5200b patchset Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Device tree for Freescale Lite5200(b) eval board Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] MPC52xx is a 6xx variant, remove PPC_52xx config option Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Cleanup pegasos i8259 not in device tree workaround Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] whitespace cleanup Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Remove unneeded memset from mpc52xx_psc_uart probe function Grant Likely 2006-11-01 8:39 ` [PATCH] [POWERPC] Add support for lite5200b to arch/powerpc Grant Likely 2006-11-01 20:37 ` [PATCH] [POWERPC] Move mpc52xx-psc uart driver to of_device from platform_device Nicolas DET 2006-11-01 20:50 ` Grant Likely 2006-11-01 20:54 ` Nicolas DET 2006-11-01 19:47 ` [RFC] Current Lite5200b patchset Jon Loeliger
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.