fdtdec: Support parsing multiple /memory nodes
PATCH 1/1 fdtdec: Support parsing multiple /memory nodes
It is legal to have multiple /memory nodes in a device tree . Currently, fdtdec_setup_memory_size() only supports parsing the first node . This patch extends the function such that if a particular /memory node does no longer have further "reg" entries and CONFIG_NR_DRAM_BANKS still allows for more DRAM banks, the code moves on to the next memory node and checks it's "reg"s. This makes it possible to handle both systems with single memory node with multiple entries and systems with multiple memory nodes with single entry.
--- lib/fdtdec.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-)
lib/fdtdec.c +18 -6
@@ -1176,21 +1176,33 @@ int fdtdec_setup_memory_size(void)#if defined(CONFIG_NR_DRAM_BANKS )int fdtdec_setup_memory_banksize (void ) { -int bank, ret, mem; +int bank, ret, mem, reg =0 ;struct fdt_resource res; - mem =fdt_path_offset (gd->fdt_blob,"/memory" ); + mem =fdt_node_offset_by_prop_value (gd->fdt_blob,-1 ,"device_type" , +"memory" ,7 );if (mem <0 ) {debug ("%s: Missing /memory node\n" , __func__);return -EINVAL ; }for (bank =0 ; bank <CONFIG_NR_DRAM_BANKS ; bank++) { - ret =fdt_get_resource (gd->fdt_blob, mem,"reg" , bank, &res); -if (ret == -FDT_ERR_NOTFOUND ) -break ; -if (ret !=0 ) + ret =fdt_get_resource (gd->fdt_blob, mem,"reg" , reg++, &res); +if (ret == -FDT_ERR_NOTFOUND ) { + reg =0 ; + mem =fdt_node_offset_by_prop_value (gd->fdt_blob, mem, +"device_type" , +"memory" ,7 ); +if (mem == -FDT_ERR_NOTFOUND ) +break ; + + ret =fdt_get_resource (gd->fdt_blob, mem,"reg" , reg++, &res); +if (ret == -FDT_ERR_NOTFOUND ) +break ; + } +if (ret !=0 ) {return -EINVAL ; + } gd->bd->bi_dram[bank].start = (phys_addr_t )res.start; gd->bd->bi_dram[bank].size =
Signature · 1 line
2.15.0
PATCH 1/1 fdtdec: Support parsing multiple /memory nodes
Quoted 9 lines · Marek Vasut
It is legal to have multiple /memory nodes in a device tree . Currently,
fdtdec_setup_memory_size()only supports parsing the first node . This patch extends the function such that if a particular /memory node does no longer have further "reg" entries andCONFIG_NR_DRAM_BANKSstill allows for more DRAM banks, the code moves on to the next memory node and checks it's "reg"s. This makes it possible to handle both systems with single memory node with multiple entries and systems with multiple memory nodes with single entry.
Quoted 3 lines
Signed-off-by Marek Vasut <[email protected]>Cc Tom Rini <[email protected]>Cc Simon Glass <[email protected]>
https://www.devicetree.org/downloads/devicetree-specification-v0.1-20160524.pdf
says that multiple nodes can be used, so this is the correct fix here. Thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171128/bf20f9fe/attachment.sig>
PATCH 1/1 fdtdec: Support parsing multiple /memory nodes
Quoted 11 lines · Tom Rini
Quoted 9 lines · Marek Vasut
It is legal to have multiple /memory nodes in a device tree . Currently,
fdtdec_setup_memory_size()only supports parsing the first node . This patch extends the function such that if a particular /memory node does no longer have further "reg" entries andCONFIG_NR_DRAM_BANKSstill allows for more DRAM banks, the code moves on to the next memory node and checks it's "reg"s. This makes it possible to handle both systems with single memory node with multiple entries and systems with multiple memory nodes with single entry.
Quoted 6 lines
Quoted 3 lines
Signed-off-by Marek Vasut <[email protected]>Cc Tom Rini <[email protected]>Cc Simon Glass <[email protected]>https://www.devicetree.org/downloads/devicetree-specification-v0.1-20160524.pdf
says that multiple nodes can be used, so this is the correct fix here.
I am not a big fan of this kind of practice, but that's how our DTs are, so it cannot be helped and we have to support this :-(
Quoted 3 lines
Thanks!
Reviewed-by Tom Rini <[email protected]>
Thanks.
Signature · 2 lines
Best regards, Marek Vasut
PATCH 1/1 fdtdec: Support parsing multiple /memory nodes
In reply to Marek VasutQuoted 9 lines · Marek Vasut
It is legal to have multiple /memory nodes in a device tree . Currently,
fdtdec_setup_memory_size()only supports parsing the first node . This patch extends the function such that if a particular /memory node does no longer have further "reg" entries andCONFIG_NR_DRAM_BANKSstill allows for more DRAM banks, the code moves on to the next memory node and checks it's "reg"s. This makes it possible to handle both systems with single memory node with multiple entries and systems with multiple memory nodes with single entry.
Quoted 6 lines
Signed-off-by Marek Vasut <[email protected]>Cc Tom Rini <[email protected]>Cc Simon Glass <[email protected]>--- lib/fdtdec.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-)
Oh for a test of this code!
PATCH 1/1 fdtdec: Support parsing multiple /memory nodes
Hi,
Quoted 17 lines · Simon Glass
Quoted 9 lines · Marek Vasut
It is legal to have multiple /memory nodes in a device tree . Currently,
fdtdec_setup_memory_size()only supports parsing the first node . This patch extends the function such that if a particular /memory node does no longer have further "reg" entries andCONFIG_NR_DRAM_BANKSstill allows for more DRAM banks, the code moves on to the next memory node and checks it's "reg"s. This makes it possible to handle both systems with single memory node with multiple entries and systems with multiple memory nodes with single entry.Quoted 6 lines
Signed-off-by Marek Vasut <[email protected]>Cc Tom Rini <[email protected]>Cc Simon Glass <[email protected]>--- lib/fdtdec.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-)
Quoted 3 lines
Oh for a test of this code!
Acked-by Simon Glass <[email protected]>
This is in my queue but seems to have already made it to mainline.
Regards,
Simon
PATCH 1/1 fdtdec: Support parsing multiple /memory nodes
In reply to Marek VasutHi,
Quoted 7 lines · On Wed, 29 Nov 2017 03:45:45 +0100 Marek Vasut wrote:
It is legal to have multiple /memory nodes in a device tree . Currently,
fdtdec_setup_memory_size()only supports parsing the first node . This patch extends the function such that if a particular /memory node does no longer have further "reg" entries andCONFIG_NR_DRAM_BANKSstill allows for more DRAM banks, the code moves on to the next memory node and checks it's "reg"s. This makes it possible to handle both systems
<nit>
s/it's/its/
</nit>
Lothar Waßmann