From: Sylvain Munaut <tnt@246tNt.com>
To: Paul Mackerras <paulus@samba.org>
Cc: Linux PPC Dev ML <linuxppc-dev@ozlabs.org>,
Sylvain Munaut <tnt@246tNt.com>
Subject: [PATCH 02/10] powerpc: Add device tree fixups for the EFIKA
Date: Mon, 12 Feb 2007 23:13:20 +0100 [thread overview]
Message-ID: <11713184101239-git-send-email-tnt@246tNt.com> (raw)
In-Reply-To: <11713184091057-git-send-email-tnt@246tNt.com>
We make the efika device tree compliant with the defined bindings
(at least compliant enough). This is mostly done by mangling
the device_type and compatible properties, but also adding
some missing bits.
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Acked-by: Grant Likely <grant.likely@secretlab.ca>
---
arch/powerpc/kernel/prom_init.c | 81 +++++++++++++++++++++++++++++++++++++++
1 files changed, 81 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index 520ef42..4fb5938 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -2117,11 +2117,92 @@ #else
#define fixup_device_tree_pmac()
#endif
+#ifdef CONFIG_PPC_EFIKA
+/* The current fw of the Efika has a device tree needs quite a few
+ * fixups to be compliant with the mpc52xx bindings. It's currently
+ * unknown if it will ever be compliant (come on bPlan ...) so we do fixups.
+ * NOTE that we (barely) tolerate it because the EFIKA was out before
+ * the bindings were finished, for any new boards -> RTFM ! */
+
+struct subst_entry {
+ char *path;
+ char *property;
+ void *value;
+ int value_len;
+};
+
+static void __init fixup_device_tree_efika(void)
+{
+ /* Substitution table */
+ #define prop_cstr(x) x, sizeof(x)
+ int prop_sound_irq[3] = { 2, 2, 0 };
+ int prop_bcomm_irq[3*16] = { 3,0,0, 3,1,0, 3,2,0, 3,3,0,
+ 3,4,0, 3,5,0, 3,6,0, 3,7,0,
+ 3,8,0, 3,9,0, 3,10,0, 3,11,0,
+ 3,12,0, 3,13,0, 3,14,0, 3,15,0 };
+ struct subst_entry efika_subst_table[] = {
+ { "/", "device_type", prop_cstr("efika") },
+ { "/builtin", "compatible", prop_cstr("soc") },
+ { "/builtin/ata", "compatible", prop_cstr("mpc5200b-ata\0mpc5200-ata"), },
+ { "/builtin/bestcomm", "compatible", prop_cstr("mpc5200b-bestcomm\0mpc5200-bestcomm") },
+ { "/builtin/bestcomm", "interrupts", prop_bcomm_irq, sizeof(prop_bcomm_irq) },
+ { "/builtin/ethernet", "compatible", prop_cstr("mpc5200b-fec\0mpc5200-fec") },
+ { "/builtin/pic", "compatible", prop_cstr("mpc5200b-pic\0mpc5200-pic") },
+ { "/builtin/serial", "compatible", prop_cstr("mpc5200b-psc-uart\0mpc5200-psc-uart") },
+ { "/builtin/sound", "compatible", prop_cstr("mpc5200b-psc-ac97\0mpc5200-psc-ac97") },
+ { "/builtin/sound", "interrupts", prop_sound_irq, sizeof(prop_sound_irq) },
+ { "/builtin/sram", "compatible", prop_cstr("mpc5200b-sram\0mpc5200-sram") },
+ { "/builtin/sram", "device_type", prop_cstr("sram") },
+ {}
+ };
+ #undef prop_cstr
+
+ /* Vars */
+ u32 node;
+ char prop[64];
+ int rv, i;
+
+ /* Check if we're really running on a EFIKA */
+ node = call_prom("finddevice", 1, 1, ADDR("/"));
+ if (!PHANDLE_VALID(node))
+ return;
+
+ rv = prom_getprop(node, "model", prop, sizeof(prop));
+ if (rv == PROM_ERROR)
+ return;
+ if (strcmp(prop, "EFIKA5K2"))
+ return;
+
+ prom_printf("Applying EFIKA device tree fixups\n");
+
+ /* Process substitution table */
+ for (i=0; efika_subst_table[i].path; i++) {
+ struct subst_entry *se = &efika_subst_table[i];
+
+ node = call_prom("finddevice", 1, 1, ADDR(se->path));
+ if (!PHANDLE_VALID(node)) {
+ prom_printf("fixup_device_tree_efika: ",
+ "skipped entry %x - not found\n", i);
+ continue;
+ }
+
+ rv = prom_setprop(node, se->path, se->property,
+ se->value, se->value_len );
+ if (rv == PROM_ERROR)
+ prom_printf("fixup_device_tree_efika: ",
+ "skipped entry %x - setprop error\n", i);
+ }
+}
+#else
+#define fixup_device_tree_efika()
+#endif
+
static void __init fixup_device_tree(void)
{
fixup_device_tree_maple();
fixup_device_tree_chrp();
fixup_device_tree_pmac();
+ fixup_device_tree_efika();
}
static void __init prom_find_boot_cpu(void)
--
1.4.2
next prev parent reply other threads:[~2007-02-12 22:14 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-12 22:13 [PATCH 00/10] Mainly 52xx patches for 2.6.21 (but not only) Sylvain Munaut
2007-02-12 22:13 ` [PATCH 01/10] powerpc/serial: Dispose irq mapping when done in mpc52xx_serial.c Sylvain Munaut
2007-02-12 22:13 ` Sylvain Munaut [this message]
2007-02-12 22:13 ` [PATCH 03/10] powerpc: Restore 'proper' link order in platform Sylvain Munaut
2007-02-12 22:13 ` [PATCH 04/10] powerpc: Use common 52xx of_platform probe code for EFIKA Sylvain Munaut
2007-02-12 22:13 ` [PATCH 05/10] powerpc: Fix unbalanced of_node_{get, put} in efika-setup.c Sylvain Munaut
2007-02-12 22:13 ` [PATCH 06/10] powerpc: Small cleanup of EFIKA platform Sylvain Munaut
2007-02-12 22:13 ` [PATCH 07/10] powerpc: Add a unified uevent handler for bus based on of_device Sylvain Munaut
2007-02-12 22:13 ` [PATCH 08/10] macintosh: Use the new of_device common uevent handler Sylvain Munaut
2007-02-12 22:13 ` [PATCH 09/10] powerpc: Add uevent handler for of_platform_bus Sylvain Munaut
2007-02-12 22:13 ` [PATCH 10/10] powerpc: Add uevent handler for ibmebus Sylvain Munaut
2007-03-29 14:46 ` Olaf Hering
2007-03-30 11:27 ` Hoang-Nam Nguyen
2007-03-30 11:45 ` Sylvain Munaut
2007-03-27 6:30 ` [PATCH 08/10] macintosh: Use the new of_device common uevent handler Benjamin Herrenschmidt
2007-03-27 7:11 ` Sylvain Munaut
2007-03-28 10:29 ` Johannes Berg
2007-03-28 10:58 ` Sylvain Munaut
2007-03-28 11:10 ` Johannes Berg
2007-02-12 23:06 ` [PATCH 02/10] powerpc: Add device tree fixups for the EFIKA Kumar Gala
2007-02-12 23:11 ` Sylvain Munaut
2007-02-12 23:18 ` Benjamin Herrenschmidt
2007-02-12 23:12 ` Benjamin Herrenschmidt
2007-02-12 23:25 ` Sylvain Munaut
2007-02-13 0:20 ` Benjamin Herrenschmidt
2007-02-16 16:44 ` Segher Boessenkool
2007-02-12 23:10 ` [PATCH 01/10] powerpc/serial: Dispose irq mapping when done in mpc52xx_serial.c Benjamin Herrenschmidt
2007-02-15 22:18 ` [PATCH] " Sylvain Munaut
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=11713184101239-git-send-email-tnt@246tNt.com \
--to=tnt@246tnt.com \
--cc=linuxppc-dev@ozlabs.org \
--cc=paulus@samba.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 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).