All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] Powerpc/85xx: set liodn for srio in device tree
@ 2011-08-19  1:43 Shaohui Xie
  0 siblings, 0 replies; only message in thread
From: Shaohui Xie @ 2011-08-19  1:43 UTC (permalink / raw)
  To: u-boot

Previous, U-boot did not set fsl,liodn for rapidio in device tree, which is
needed by HV(hypervisor), and HV needs fsl,liodn of rapidio have more values,
for ex for P4080, fsl,liodn = <198 199 200>; while P2040/P3041/P5020 has 4
LIODNs respectivelly.

This patch using a generic mechanism which allow a device have mutilple liodns.

Reported-and-tested-by: Diana CRACIUN <Diana.Craciun@freescale.com>
Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
---
 arch/powerpc/cpu/mpc85xx/liodn.c     |   20 +++++++++++++++++---
 arch/powerpc/cpu/mpc85xx/p2041_ids.c |    8 ++++----
 arch/powerpc/cpu/mpc85xx/p3041_ids.c |    8 ++++----
 arch/powerpc/cpu/mpc85xx/p4080_ids.c |    6 +++---
 arch/powerpc/cpu/mpc85xx/p5020_ids.c |    8 ++++----
 5 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/arch/powerpc/cpu/mpc85xx/liodn.c b/arch/powerpc/cpu/mpc85xx/liodn.c
index bd19094..5ccaaf5 100644
--- a/arch/powerpc/cpu/mpc85xx/liodn.c
+++ b/arch/powerpc/cpu/mpc85xx/liodn.c
@@ -149,7 +149,11 @@ void set_liodns(void)
 
 static void fdt_fixup_liodn_tbl(void *blob, struct liodn_id_table *tbl, int sz)
 {
-	int i;
+	int i, j;
+	int fdt_liodn[8];
+	int *p = fdt_liodn;
+	char *p_compat = NULL;
+	phys_addr_t cmp_offset = 0;
 
 	for (i = 0; i < sz; i++) {
 		int off;
@@ -160,9 +164,19 @@ static void fdt_fixup_liodn_tbl(void *blob, struct liodn_id_table *tbl, int sz)
 		off = fdt_node_offset_by_compat_reg(blob,
 				tbl[i].compat, tbl[i].compat_offset);
 		if (off >= 0) {
+			if (p_compat != NULL) {
+				if (strcmp(tbl[i].compat, p_compat))
+					p = fdt_liodn;
+				else if (cmp_offset != tbl[i].compat_offset)
+					p = fdt_liodn;
+			}
+			for (j = 0; j < tbl[i].num_ids; j++)
+				*p++ = tbl[i].id[j];
 			off = fdt_setprop(blob, off, "fsl,liodn",
-				&tbl[i].id[0],
-				sizeof(u32) * tbl[i].num_ids);
+					fdt_liodn,
+					sizeof(u32) * (p - fdt_liodn));
+			p_compat = (char *)tbl[i].compat;
+			cmp_offset = tbl[i].compat_offset;
 			if (off > 0)
 				printf("WARNING unable to set fsl,liodn for "
 					"%s: %s\n",
diff --git a/arch/powerpc/cpu/mpc85xx/p2041_ids.c b/arch/powerpc/cpu/mpc85xx/p2041_ids.c
index 112ea56..f3b2e7f 100644
--- a/arch/powerpc/cpu/mpc85xx/p2041_ids.c
+++ b/arch/powerpc/cpu/mpc85xx/p2041_ids.c
@@ -63,10 +63,10 @@ struct liodn_id_table liodn_tbl[] = {
 	SET_DMA_LIODN(1, 197),
 	SET_DMA_LIODN(2, 198),
 
-	SET_GUTS_LIODN("fsl,rapidio-delta", 199, rio1liodnr, 0),
-	SET_GUTS_LIODN(NULL, 200, rio2liodnr, 0),
-	SET_GUTS_LIODN(NULL, 201, rio1maintliodnr, 0),
-	SET_GUTS_LIODN(NULL, 202, rio2maintliodnr, 0),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 199, rio1liodnr, 0xc0000),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 200, rio2liodnr, 0xc0000),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 201, rio1maintliodnr, 0xc0000),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 202, rio2maintliodnr, 0xc0000),
 };
 int liodn_tbl_sz = ARRAY_SIZE(liodn_tbl);
 
diff --git a/arch/powerpc/cpu/mpc85xx/p3041_ids.c b/arch/powerpc/cpu/mpc85xx/p3041_ids.c
index 9836588..b1fbd74 100644
--- a/arch/powerpc/cpu/mpc85xx/p3041_ids.c
+++ b/arch/powerpc/cpu/mpc85xx/p3041_ids.c
@@ -64,10 +64,10 @@ struct liodn_id_table liodn_tbl[] = {
 	SET_DMA_LIODN(1, 197),
 	SET_DMA_LIODN(2, 198),
 
-	SET_GUTS_LIODN("fsl,rapidio-delta", 199, rio1liodnr, 0),
-	SET_GUTS_LIODN(NULL, 200, rio2liodnr, 0),
-	SET_GUTS_LIODN(NULL, 201, rio1maintliodnr, 0),
-	SET_GUTS_LIODN(NULL, 202, rio2maintliodnr, 0),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 199, rio1liodnr, 0xc0000),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 200, rio2liodnr, 0xc0000),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 201, rio1maintliodnr, 0xc0000),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 202, rio2maintliodnr, 0xc0000),
 };
 int liodn_tbl_sz = ARRAY_SIZE(liodn_tbl);
 
diff --git a/arch/powerpc/cpu/mpc85xx/p4080_ids.c b/arch/powerpc/cpu/mpc85xx/p4080_ids.c
index 560c02a..04164ba 100644
--- a/arch/powerpc/cpu/mpc85xx/p4080_ids.c
+++ b/arch/powerpc/cpu/mpc85xx/p4080_ids.c
@@ -53,9 +53,9 @@ struct liodn_id_table liodn_tbl[] = {
 	SET_DMA_LIODN(1, 196),
 	SET_DMA_LIODN(2, 197),
 
-	SET_GUTS_LIODN("fsl,rapidio-delta", 198, rio1liodnr, 0),
-	SET_GUTS_LIODN(NULL, 199, rio2liodnr, 0),
-	SET_GUTS_LIODN(NULL, 200, rmuliodnr, 0),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 198, rio1liodnr, 0xc0000),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 199, rio2liodnr, 0xc0000),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 200, rio1maintliodnr, 0xc0000),
 
 #ifdef CONFIG_SYS_DPAA_QBMAN
 	SET_QMAN_LIODN(31),
diff --git a/arch/powerpc/cpu/mpc85xx/p5020_ids.c b/arch/powerpc/cpu/mpc85xx/p5020_ids.c
index 9836588..b1fbd74 100644
--- a/arch/powerpc/cpu/mpc85xx/p5020_ids.c
+++ b/arch/powerpc/cpu/mpc85xx/p5020_ids.c
@@ -64,10 +64,10 @@ struct liodn_id_table liodn_tbl[] = {
 	SET_DMA_LIODN(1, 197),
 	SET_DMA_LIODN(2, 198),
 
-	SET_GUTS_LIODN("fsl,rapidio-delta", 199, rio1liodnr, 0),
-	SET_GUTS_LIODN(NULL, 200, rio2liodnr, 0),
-	SET_GUTS_LIODN(NULL, 201, rio1maintliodnr, 0),
-	SET_GUTS_LIODN(NULL, 202, rio2maintliodnr, 0),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 199, rio1liodnr, 0xc0000),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 200, rio2liodnr, 0xc0000),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 201, rio1maintliodnr, 0xc0000),
+	SET_GUTS_LIODN("fsl,rapidio-delta", 202, rio2maintliodnr, 0xc0000),
 };
 int liodn_tbl_sz = ARRAY_SIZE(liodn_tbl);
 
-- 
1.6.4

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2011-08-19  1:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-19  1:43 [U-Boot] [PATCH] Powerpc/85xx: set liodn for srio in device tree Shaohui Xie

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.