[U-Boot] [PATCH] Powerpc/85xx: set liodn for srio in device tree

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);
participants (1)
-
Shaohui Xie