* [PATCH v1] armv8: fsl-layerscape: icid: also find DWC3 nodes as fsl, ls1028a-dwc3
@ 2026-09-30 6:07 Vincent Jardin
2026-10-15 7:48 ` [PATCH v1] armv8: fsl-layerscape: icid: also find DWC3 nodes as fsl,ls1028a-dwc3 Vincent Jardin
0 siblings, 1 reply; 2+ messages in thread
From: Vincent Jardin @ 2026-09-30 6:07 UTC (permalink / raw)
To: u-boot; +Cc: Ilias Apalodimas, Tom Rini, Peng Fan, Frank Li, Vincent Jardin
The ICID check the USB controllers as "snps,dwc3" to add
their "iommus" property to the device tree passed to the OS/Linux.
The upstream Layerscape device trees imported since v6.19 (dts/upstream)
described these controllers as "fsl,<soc>-dwc3", "fsl,ls1028a-dwc3"
instead, since the Linux commit
7b204755ebc2 ("arm64: dts: layerscape: add dma-coherent for usb node"),
so on LX2160A boards, it fails:
WARNING could not find node snps,dwc3: FDT_ERR_NOTFOUND.
WARNING could not find node snps,dwc3: FDT_ERR_NOTFOUND.
The tables cannot simply switch to the new name: older device trees
still use "snps,dwc3" and carry no "iommus" property of their own.
So, let's keep "snps,dwc3" and, when it finds nothing,
then retry with "fsl,ls1028a-dwc3", which every newer
Layerscape USB node lists.
The stream IDs themselves are programmed by set_icids(), which does
not use the compatible, so the hardware setup is unchanged.
Signed-off-by: Vincent Jardin <vjardin@free.fr>
---
arch/arm/cpu/armv8/fsl-layerscape/icid.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/icid.c b/arch/arm/cpu/armv8/fsl-layerscape/icid.c
index aa0af077d2f..9b6d5225799 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/icid.c
+++ b/arch/arm/cpu/armv8/fsl-layerscape/icid.c
@@ -5,6 +5,7 @@
#include <config.h>
#include <linux/libfdt.h>
+#include <linux/string.h>
#include <fdt_support.h>
#include <asm/io.h>
@@ -71,6 +72,19 @@ int fdt_set_iommu_prop(void *blob, int off, int smmu_ph, u32 *ids, int num_ids)
return 0;
}
+static int fdt_icid_node_offset(void *blob, struct icid_id_table *entry)
+{
+ int off;
+
+ off = fdt_node_offset_by_compat_reg(blob, entry->compat,
+ entry->compat_addr);
+ if (off < 0 && !strcmp(entry->compat, "snps,dwc3"))
+ off = fdt_node_offset_by_compat_reg(blob, "fsl,ls1028a-dwc3",
+ entry->compat_addr);
+
+ return off;
+}
+
static int fdt_fixup_icid_tbl(void *blob, int smmu_ph,
struct icid_id_table *tbl, int size)
{
@@ -80,9 +94,7 @@ static int fdt_fixup_icid_tbl(void *blob, int smmu_ph,
if (!tbl[i].compat)
continue;
- off = fdt_node_offset_by_compat_reg(blob,
- tbl[i].compat,
- tbl[i].compat_addr);
+ off = fdt_icid_node_offset(blob, &tbl[i]);
if (off > 0) {
err = fdt_set_iommu_prop(blob, off, smmu_ph,
&tbl[i].id, 1);
---
base-commit: a06e89ab05eaa2b8344d521319399333cd760ae5
branch: for-upstream/layerscape-icid-dwc3-v1
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-10-15 7:48 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-30 6:07 [PATCH v1] armv8: fsl-layerscape: icid: also find DWC3 nodes as fsl, ls1028a-dwc3 Vincent Jardin
2026-10-15 7:48 ` [PATCH v1] armv8: fsl-layerscape: icid: also find DWC3 nodes as fsl,ls1028a-dwc3 Vincent Jardin
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.