* [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: [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
* 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
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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).