[U-Boot] [PATCH v2 05/16] dtoc: Add support for 32 or 64-bit addresses

Simon Glass sjg at chromium.org
Fri Sep 15 11:29:27 UTC 2017


On 29 August 2017 at 14:23, Dr. Philipp Tomsich
<philipp.tomsich at theobroma-systems.com> wrote:
>
>> On 29 Aug 2017, at 22:15, Simon Glass <sjg at chromium.org> wrote:
>>
>> When using 32-bit addresses dtoc works correctly. For 64-bit addresses it
>> does not since it ignores the #address-cells and #size-cells properties.
>>
>> Update the tool to use fdt64_t as the element type for reg properties when
>> either the address or size is larger than one cell. Use the correct value
>> so that C code can obtain the information from the device tree easily.
>>
>> Alos create a new type, fdt_val_t, which is defined to either fdt32_t or
>> fdt64_t depending on the word size of the machine. This type corresponds
>> to fdt_addr_t and fdt_size_t. Unfortunately we cannot just use those types
>> since they are defined to phys_addr_t and phys_size_t which use
>> 'unsigned long' in the 32-bit case, rather than 'unsigned int'.
>>
>> Add tests for the four combinations of address and size values (32/32,
>> 64/64, 32/64, 64/32). Also update existing uses for rk3399 and rk3368
>> which now need to use the new fdt_val_t type.
>>
>> Signed-off-by: Simon Glass <sjg at chromium.org>
>>
>> Suggested-by: Heiko Stuebner <heiko at sntech.de>
>> Reported-by: Kever Yang <kever.yang at rock-chips.com>
>
> Reviewed-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
>
> See below.
>
>> ---
>>
>> Changes in v2:
>> - Support 'reg' properties with a single cell (e.g. #size-cells = 0)
>> - Introduce an fdt_val_t type which is either 32- or 64-bits long
>> - Update rk3368 and rk3399 uses
>> - Drop review tags since there are significant changes in this patch
>>
>> drivers/clk/rockchip/clk_rk3368.c  |   2 +-
>> drivers/clk/rockchip/clk_rk3399.c  |   4 +-
>> drivers/core/regmap.c              |   2 +-
>> include/fdtdec.h                   |   2 +
>> include/regmap.h                   |   2 +-
>> include/syscon.h                   |   6 +-
>> tools/dtoc/dtb_platdata.py         |  61 +++++++++++
>> tools/dtoc/dtoc_test_addr32.dts    |  27 +++++
>> tools/dtoc/dtoc_test_addr32_64.dts |  33 ++++++
>> tools/dtoc/dtoc_test_addr64.dts    |  33 ++++++
>> tools/dtoc/dtoc_test_addr64_32.dts |  33 ++++++
>> tools/dtoc/fdt_util.py             |   2 +
>> tools/dtoc/test_dtoc.py            | 212 +++++++++++++++++++++++++++++++++++++
>> 13 files changed, 413 insertions(+), 6 deletions(-)
>> create mode 100644 tools/dtoc/dtoc_test_addr32.dts
>> create mode 100644 tools/dtoc/dtoc_test_addr32_64.dts
>> create mode 100644 tools/dtoc/dtoc_test_addr64.dts
>> create mode 100644 tools/dtoc/dtoc_test_addr64_32.dts
>>
>> diff --git a/drivers/clk/rockchip/clk_rk3368.c b/drivers/clk/rockchip/clk_rk3368.c
>> index 2be1f572d7..0160d50c03 100644
>> --- a/drivers/clk/rockchip/clk_rk3368.c
>> +++ b/drivers/clk/rockchip/clk_rk3368.c
>> @@ -471,7 +471,7 @@ static int rk3368_clk_probe(struct udevice *dev)
>> #if CONFIG_IS_ENABLED(OF_PLATDATA)
>>       struct rk3368_clk_plat *plat = dev_get_platdata(dev);
>>
>> -     priv->cru = map_sysmem(plat->dtd.reg[1], plat->dtd.reg[3]);
>> +     priv->cru = map_sysmem(plat->dtd.reg[0], plat->dtd.reg[1]);
>> #endif
>> #if IS_ENABLED(CONFIG_SPL_BUILD) || IS_ENABLED(CONFIG_TPL_BUILD)
>>       rkclk_init(priv->cru);
>> diff --git a/drivers/clk/rockchip/clk_rk3399.c b/drivers/clk/rockchip/clk_rk3399.c
>> index 3edafea140..0de3db620d 100644
>> --- a/drivers/clk/rockchip/clk_rk3399.c
>> +++ b/drivers/clk/rockchip/clk_rk3399.c
>> @@ -963,7 +963,7 @@ static int rk3399_clk_probe(struct udevice *dev)
>> #if CONFIG_IS_ENABLED(OF_PLATDATA)
>>       struct rk3399_clk_plat *plat = dev_get_platdata(dev);
>>
>> -     priv->cru = map_sysmem(plat->dtd.reg[1], plat->dtd.reg[3]);
>> +     priv->cru = map_sysmem(plat->dtd.reg[0], plat->dtd.reg[0]);
>
> The second argument needs to be reg[1].
>

OK, I will fix when applying, thanks.

- Simon


More information about the U-Boot mailing list