From: Paul Gortmaker <paul.gortmaker@windriver.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: linuxppc-dev@ozlabs.org
Subject: Re: [PATCH 2/7] powerpc: allow localbus compatible serial ports for console device
Date: Thu, 17 Jan 2008 17:03:58 -0500 [thread overview]
Message-ID: <20080117220357.GC4122@windriver.com> (raw)
In-Reply-To: <200801071704.23151.arnd@arndb.de>
In message: Re: [PATCH 2/7] powerpc: allow localbus compatible serial ports for console device
on 07/01/2008 Arnd Bergmann wrote:
> On Monday 07 January 2008, Paul Gortmaker wrote:
> >
> > I'd thought about doing that, but there are slight differences
> > in each test. To remain 100% faithful to the original implementation
> > you'd have to have a table or similar that had these various fields
> > and loop over that -- something like:
> >
> > compat parent pnt-compat pnt-type add-fcn
> > ---------------------------------------------------------------
> > ns16550 NULL NULL soc add_legacy_soc_port
> > NULL isa NULL NULL add_legacy_isa_port
> > ns16550 NULL NULL tsi-bridge add_legacy_soc_port
> > ns16550 NULL ibm,opb opb add_legacy_soc_port
> > ns16550 NULL localbus NULL add_legacy_soc_port
> >
> > But, if we were willing to move away from checks based on
> > the parent->type and stick with parent->compat, then the
> > unification would be a lot cleaner and easier to implement.
>
> Unfortunately, some of our cell blades don't have the right
> 'compatible' property, so you still need to check the type for
> the opb case.
>
> > (we could also leave the ISA one out as an oddball, and then
> > not have to carry an add-fcn either).
>
> yes, that seems reasonable.
Have a look at this and see if it seems OK to you. It collapses the soc,
tsi-bridge, opb and localbus code blocks into one. The patch is layered
on my previous patch that did the for_each cleanup on the np's but if folks
are OK with the general implementation, I'll spin an equivalent patch
for direct application to the origin/for-2.6.25 branch with signed off etc.
Thanks,
Paul.
---
diff --git a/arch/powerpc/kernel/legacy_serial.c b/arch/powerpc/kernel/legacy_serial.c
index d0b8e35..16a4ef1 100644
--- a/arch/powerpc/kernel/legacy_serial.c
+++ b/arch/powerpc/kernel/legacy_serial.c
@@ -31,6 +31,21 @@ static struct legacy_serial_info {
int irq_check_parent;
phys_addr_t taddr;
} legacy_serial_infos[MAX_LEGACY_SERIAL_PORTS];
+
+struct serial_parent {
+ char *type;
+ char *compat;
+};
+
+static struct __init serial_parent parents[] = {
+ {"soc", NULL},
+ {"tsi-bridge", NULL},
+ {"opb", "ibm,opb"},
+ {NULL, "wrs,epld-localbus"},
+};
+
+#define NUM_PARENTS sizeof(parents)/sizeof(struct serial_parent)
+
static unsigned int legacy_serial_count;
static int legacy_serial_console = -1;
@@ -292,6 +307,7 @@ void __init find_legacy_serial_ports(void)
{
struct device_node *np, *stdout = NULL;
const char *path;
+ struct serial_parent *sp, *end = parents + NUM_PARENTS;
int index;
DBG(" -> find_legacy_serial_port()\n");
@@ -306,15 +322,24 @@ void __init find_legacy_serial_ports(void)
DBG(" no linux,stdout-path !\n");
}
- /* First fill our array with SOC ports */
- for_each_compatible_node(np, "serial", "ns16550") {
- struct device_node *soc = of_get_parent(np);
- if (soc && !strcmp(soc->type, "soc")) {
- index = add_legacy_soc_port(np, np);
- if (index >= 0 && np == stdout)
- legacy_serial_console = index;
+ for (sp = parents; sp != end; sp++) {
+ for_each_compatible_node(np, "serial", "ns16550") {
+ struct device_node *parent = of_get_parent(np);
+ int p_type_ok = 0, p_is_compat = 0;
+ if (!parent)
+ continue;
+ if (sp->type && !strcmp(parent->type, sp->type))
+ p_type_ok = 1;
+ if (sp->compat && of_device_is_compatible(parent, sp->compat))
+ p_is_compat = 1;
+ if (p_type_ok || p_is_compat) {
+ index = add_legacy_soc_port(np, np);
+ if (index >= 0 && np == stdout)
+ legacy_serial_console = index;
+ }
+ of_node_put(parent);
}
- of_node_put(soc);
+
}
/* Next, fill our array with ISA ports */
@@ -328,40 +353,6 @@ void __init find_legacy_serial_ports(void)
of_node_put(isa);
}
- /* Next, fill our array with tsi-bridge ports */
- for_each_compatible_node(np, "serial", "ns16550") {
- struct device_node *tsi = of_get_parent(np);
- if (tsi && !strcmp(tsi->type, "tsi-bridge")) {
- index = add_legacy_soc_port(np, np);
- if (index >= 0 && np == stdout)
- legacy_serial_console = index;
- }
- of_node_put(tsi);
- }
-
- /* Next, fill our array with opb bus ports */
- for_each_compatible_node(np, "serial", "ns16550") {
- struct device_node *opb = of_get_parent(np);
- if (opb && (!strcmp(opb->type, "opb") ||
- of_device_is_compatible(opb, "ibm,opb"))) {
- index = add_legacy_soc_port(np, np);
- if (index >= 0 && np == stdout)
- legacy_serial_console = index;
- }
- of_node_put(opb);
- }
-
- /* Next, fill our array with any localbus serial ports */
- for_each_compatible_node(np, "serial", "ns16550") {
- struct device_node *lbs = of_get_parent(np);
- if (lbs && of_device_is_compatible(lbs, "localbus")) {
- index = add_legacy_soc_port(np, np);
- if (index >= 0 && np == stdout)
- legacy_serial_console = index;
- }
- of_node_put(lbs);
- }
-
#ifdef CONFIG_PCI
/* Next, try to locate PCI ports */
for (np = NULL; (np = of_find_all_nodes(np));) {
next prev parent reply other threads:[~2008-01-17 22:03 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-07 14:25 [PATCH 0/7] Powerpc support for SBC8560 board Paul Gortmaker
2008-01-07 14:25 ` [PATCH 1/7] powerpc: use for_each in legacy_serial Paul Gortmaker
2008-01-07 14:25 ` Paul Gortmaker
2008-01-07 14:25 ` [PATCH 2/7] powerpc: allow localbus compatible serial ports for console device Paul Gortmaker
2008-01-07 14:25 ` Paul Gortmaker
2008-01-07 14:33 ` Arnd Bergmann
2008-01-07 15:33 ` Paul Gortmaker
2008-01-07 16:04 ` Arnd Bergmann
2008-01-17 22:03 ` Paul Gortmaker [this message]
2008-01-17 22:07 ` Scott Wood
2008-01-17 22:35 ` Arnd Bergmann
2008-01-24 17:13 ` [PATCH] powerpc: reduce code duplication in legacy_serial, add UART parent types Paul Gortmaker
2008-01-24 22:40 ` Paul Gortmaker
2008-01-25 8:17 ` Kumar Gala
2008-07-07 6:33 ` Benjamin Herrenschmidt
2008-07-07 15:02 ` Paul Gortmaker
2008-07-07 15:05 ` [PATCH] legacy-serial: more meaningful names, terminate array Paul Gortmaker
2008-07-07 22:17 ` Benjamin Herrenschmidt
2008-07-07 22:42 ` [PATCH] ibmebus: more meaningful variable name Paul Gortmaker
2008-01-25 6:17 ` [PATCH] powerpc: reduce code duplication in legacy_serial, add UART parent types Arnd Bergmann
2008-01-07 14:25 ` [PATCH 3/7] sbc8560: add support for Wind River SBC8560 in arch/powerpc Paul Gortmaker
2008-01-07 14:25 ` Paul Gortmaker
2008-01-08 0:32 ` Stephen Rothwell
2008-01-09 4:39 ` Paul Gortmaker
2008-01-09 6:23 ` Stephen Rothwell
2008-01-07 14:25 ` [PATCH 4/7] sbc8560: Add device tree source for Wind River SBC8560 board Paul Gortmaker
2008-01-07 14:25 ` Paul Gortmaker
2008-01-10 2:56 ` David Gibson
2008-01-15 14:12 ` Kumar Gala
2008-01-17 20:50 ` Paul Gortmaker
2008-01-07 14:25 ` [PATCH 5/7] sbc8560: Convert WRS SBC8560 device tree to v1 format Paul Gortmaker
2008-01-07 14:25 ` Paul Gortmaker
2008-01-07 14:25 ` [PATCH 6/7] CPM2: Make support for the CPM2 optional on 8560 based boards Paul Gortmaker
2008-01-07 14:25 ` Paul Gortmaker
2008-01-07 14:25 ` [PATCH 7/7] sbc8560: Add default .config file for Wind River SBC8560 Paul Gortmaker
2008-01-07 14:25 ` Paul Gortmaker
2008-01-24 9:30 ` [PATCH 0/7] Powerpc support for SBC8560 board Kumar Gala
2008-01-24 14:17 ` Paul Gortmaker
2008-01-24 14:25 ` Kumar Gala
2008-01-24 14:27 ` Paul Gortmaker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080117220357.GC4122@windriver.com \
--to=paul.gortmaker@windriver.com \
--cc=arnd@arndb.de \
--cc=linuxppc-dev@ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.