[PATCH v1] spi: spi-aspeed-smc: convert devfdt_get_addr_index output to phys_addr_t
Johan Jonker
jbx6244 at gmail.com
Sat Feb 25 10:50:05 CET 2023
On 2/25/23 10:26, Michael Nazzareno Trimarchi wrote:
> Hi Johan
>
> On Thu, Feb 23, 2023 at 3:06 PM Johan Jonker <jbx6244 at gmail.com> wrote:
>>
>> The fdt_addr_t and phys_addr_t size have been decoupled.
>> A 32bit CPU can expect 64-bit data from the device tree parser,
>> so convert devfdt_get_addr_index output to phys_addr_t in the
>> spi-aspeed-smc.c file. Also fix dev_dbg to be able to handle
>> both sizes.
>>
>> Signed-off-by: Johan Jonker <jbx6244 at gmail.com>
>> ---
>>
>> Note:
>>
>> This is needed for a Rockchip patch serie to pass the test and
>> must be merged before by Rockchip maintainers:
>>
>> [PATCH v4 00/11] Fixes for Rockchip NFC driver part 1
>> https://lore.kernel.org/u-boot/f3dba231-4a55-0a94-dfab-5cab1419d132@gmail.com/
>>
>> Request for hardware test by Aspeed people.
>> ---
>> drivers/spi/spi-aspeed-smc.c | 8 ++++----
>> 1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/spi/spi-aspeed-smc.c b/drivers/spi/spi-aspeed-smc.c
>> index a3c96333..17696441 100644
>> --- a/drivers/spi/spi-aspeed-smc.c
>> +++ b/drivers/spi/spi-aspeed-smc.c
>> @@ -1125,14 +1125,14 @@ static int apseed_spi_of_to_plat(struct udevice *bus)
>> int ret;
>> struct clk hclk;
>>
>> - priv->regs = (void __iomem *)devfdt_get_addr_index(bus, 0);
>> + priv->regs = (void __iomem *)((phys_addr_t)devfdt_get_addr_index(bus, 0));
>
> devfdt_get_addr_index_ptr is not the right way?
That may work.
>
>> if ((u32)priv->regs == FDT_ADDR_T_NONE) {
>> dev_err(bus, "wrong ctrl base\n");
>> return -ENODEV;
>> }
>>
>> plat->ahb_base =
>> - (void __iomem *)devfdt_get_addr_size_index(bus, 1, &plat->ahb_sz);
>> + (void __iomem *)((phys_addr_t)devfdt_get_addr_size_index(bus, 1, &plat->ahb_sz));
>
> devfdt_get_addr_index_ptr, same here
fdt_addr_t devfdt_get_addr_size_index(const struct udevice *dev, int index,
fdt_size_t *size)
vs
void *devfdt_get_addr_index_ptr(const struct udevice *dev, int index)
===
devfdt_get_addr_index_ptr does not offer the ahb_sz size.
https://elixir.bootlin.com/u-boot/latest/source/drivers/core/fdtaddr.c#L112
This function is used for that in devfdt_get_addr_size_index:
fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, dev_of_offset(dev),
"reg", index, size, false);
What would you suggest? Keep the cast or use fdtdec_get_addr_size_auto_noparent ?
I'm a little bit "reluctant" to poke in code that I don't have hardware for.
Johan
>
>> if ((u32)plat->ahb_base == FDT_ADDR_T_NONE) {
>> dev_err(bus, "wrong AHB base\n");
>> return -ENODEV;
>> @@ -1151,8 +1151,8 @@ static int apseed_spi_of_to_plat(struct udevice *bus)
>> plat->hclk_rate = clk_get_rate(&hclk);
>> clk_free(&hclk);
>>
>> - dev_dbg(bus, "ctrl_base = 0x%x, ahb_base = 0x%p, size = 0x%lx\n",
>> - (u32)priv->regs, plat->ahb_base, plat->ahb_sz);
>> + dev_dbg(bus, "ctrl_base = 0x%x, ahb_base = 0x%p, size = 0x%llx\n",
>> + (u32)priv->regs, plat->ahb_base, (fdt64_t)plat->ahb_sz);
>> dev_dbg(bus, "hclk = %dMHz, max_cs = %d\n",
>> plat->hclk_rate / 1000000, plat->max_cs);
>>
>> --
>
> Michael
>
>> 2.20.1
>>
>
>
More information about the U-Boot
mailing list