[U-Boot] [PATCH v3 5/7] armv8: ls1046a: initial icid setup support

Laurentiu Tudor laurentiu.tudor at nxp.com
Tue Jul 10 10:55:50 UTC 2018


Hi Bharat,

On 10.07.2018 08:14, Bharat Bhushan wrote:
> 
> 
>> -----Original Message-----
>> From: Laurentiu Tudor
>> Sent: Monday, July 9, 2018 6:42 PM
>> To: Bharat Bhushan <bharat.bhushan at nxp.com>; York Sun
>> <york.sun at nxp.com>; Prabhakar Kushwaha
>> <prabhakar.kushwaha at nxp.com>; u-boot at lists.denx.de
>> Subject: Re: [PATCH v3 5/7] armv8: ls1046a: initial icid setup support
>>
>> Hi Bharat,
>>
>> On 09.07.2018 15:13, Bharat Bhushan wrote:
>>>
>>>
>>>> -----Original Message-----
>>>> From: Laurentiu Tudor [mailto:laurentiu.tudor at nxp.com]
>>>> Sent: Wednesday, July 4, 2018 7:44 PM
>>>> To: York Sun <york.sun at nxp.com>; Prabhakar Kushwaha
>>>> <prabhakar.kushwaha at nxp.com>; u-boot at lists.denx.de
>>>> Cc: Bharat Bhushan <bharat.bhushan at nxp.com>; Laurentiu Tudor
>>>> <laurentiu.tudor at nxp.com>
>>>> Subject: [PATCH v3 5/7] armv8: ls1046a: initial icid setup support
>>>>
>>>> Add infrastructure for ICID setup and device tree fixup on ARM platforms.
>>>> This include basic ICID setup for several devices.
>>>>
>>>> Signed-off-by: Laurentiu Tudor <laurentiu.tudor at nxp.com>
>>>> ---
>>>>    arch/arm/cpu/armv8/fsl-layerscape/Makefile    |   1 +
>>>>    arch/arm/cpu/armv8/fsl-layerscape/icid.c      | 111
>> ++++++++++++++++++
>>>>    .../arm/cpu/armv8/fsl-layerscape/ls1046_ids.c |  29 +++++
>>>>    arch/arm/cpu/armv8/fsl-layerscape/soc.c       |   3 +
>>>>    .../asm/arch-fsl-layerscape/fsl_icid.h        |  80 +++++++++++++
>>>>    board/freescale/ls1046aqds/ls1046aqds.c       |   2 +
>>>>    board/freescale/ls1046ardb/ls1046ardb.c       |   3 +
>>>>    7 files changed, 229 insertions(+)
>>>>    create mode 100644 arch/arm/cpu/armv8/fsl-layerscape/icid.c
>>>>    create mode 100644 arch/arm/cpu/armv8/fsl-layerscape/ls1046_ids.c
>>>>    create mode 100644
>>>> arch/arm/include/asm/arch-fsl-layerscape/fsl_icid.h
>>>>
>>>> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Makefile
>>>> b/arch/arm/cpu/armv8/fsl-layerscape/Makefile
>>>> index 1e9e4680fe..5d6f68aad6 100644
>>>> --- a/arch/arm/cpu/armv8/fsl-layerscape/Makefile
>>>> +++ b/arch/arm/cpu/armv8/fsl-layerscape/Makefile
>>>> @@ -37,6 +37,7 @@ endif
>>>>
>>>>    ifneq ($(CONFIG_ARCH_LS1046A),)
>>>>    obj-$(CONFIG_SYS_HAS_SERDES) += ls1046a_serdes.o
>>>> +obj-y += icid.o ls1046_ids.o
>>>>    endif
>>>>
>>>>    ifneq ($(CONFIG_ARCH_LS1088A),)
>>>> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/icid.c
>>>> b/arch/arm/cpu/armv8/fsl-layerscape/icid.c
>>>> new file mode 100644
>>>> index 0000000000..8694bd6fa1
>>>> --- /dev/null
>>>> +++ b/arch/arm/cpu/armv8/fsl-layerscape/icid.c
>>>> @@ -0,0 +1,111 @@
>>>> +// SPDX-License-Identifier: GPL-2.0+
>>>> +/*
>>>> + * Copyright 2018 NXP
>>>> + */
>>>> +
>>>> +#include <common.h>
>>>> +#include <linux/libfdt.h>
>>>> +#include <fdt_support.h>
>>>> +
>>>> +#include <asm/io.h>
>>>> +#include <asm/processor.h>
>>>> +#include <asm/arch-fsl-layerscape/fsl_icid.h>
>>>> +
>>>> +static void set_icid(struct icid_id_table *tbl, int size) {
>>>> +	int i;
>>>> +
>>>> +	for (i = 0; i < size; i++)
>>>> +		out_be32((u32 *)(tbl[i].reg_addr), tbl[i].reg); }
>>>> +
>>>> +void set_icids(void)
>>>> +{
>>>> +	/* setup general icid offsets */
>>>> +	set_icid(icid_tbl, icid_tbl_sz);
>>>> +}
>>>> +
>>>> +int fdt_set_iommu_prop(void *blob, int off, int smmu_ph, u32 *ids,
>>>> +int
>>>> +num_ids) {
>>>> +	int i, ret;
>>>> +	u32 prop[8];
>>>> +
>>>> +	for (i = 0; i < num_ids; i++) {
>>>> +		prop[i * 2] = cpu_to_fdt32(smmu_ph);
>>>> +		prop[i * 2 + 1] = cpu_to_fdt32(ids[i]);
>>>> +	}
>>>> +	ret = fdt_setprop(blob, off, "iommus",
>>>> +			  prop, sizeof(u32) * num_ids * 2);
>>>> +	if (ret > 0) {
>>>> +		printf("WARNING unable to set iommus: %s\n",
>>>> fdt_strerror(off));
>>>> +		return off;
>>>> +	}
>>>> +	ret = fdt_setprop_empty(blob, off, "dma-coherent");
>>>
>>> This forces "dma-coherent" for all SOCs, although there is no current
>> known SOCs which does not support non-coherent but maybe safe not to
>> set from common code.
>>
>> I see your point and will drop this.
>> Now, regarding a replacement solution, I don't have any other idea than
>> updating the device trees directly. Thoughts?
> 
> dma-coherent will be default in device tree and u-boot code should check if dma-coherent already set.

You mean add a check that dma-coherent isn't already there?

> Have another function exposed from generic code which set "dma-coherent" and platforms code will call that function if it is coherent.

Who would call such a function in the current design? Not sure I 
understand where this would fit in the current implementation.

On the other hand, I think that the dma coherency of a device is a hw 
property and it really makes sense to sit in the device tree.

---
Best Regards, Laurentiu


More information about the U-Boot mailing list