On 09.01.24 10:15, Sascha Hauer wrote: > Create separate functions from code that can be re-used by upcoming > LS1028a support. > > Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> > --- > arch/arm/mach-layerscape/icid.c | 98 +++++++++++++++++++-------------- > 1 file changed, 57 insertions(+), 41 deletions(-) > > diff --git a/arch/arm/mach-layerscape/icid.c b/arch/arm/mach-layerscape/icid.c > index f0a9dc8063..dd0e160bde 100644 > --- a/arch/arm/mach-layerscape/icid.c > +++ b/arch/arm/mach-layerscape/icid.c > @@ -68,6 +68,58 @@ struct icid_id_table { > phys_addr_t reg_addr; > }; > > +static void of_set_iommu_prop(struct device_node *np, phandle iommu_handle, > + int stream_id) > +{ > + u32 prop[2]; > + > + prop[0] = cpu_to_fdt32(iommu_handle); > + prop[1] = cpu_to_fdt32(stream_id); > + > + of_set_property(np, "iommus", prop, sizeof(prop), 1); I know the code is only moved around, but changing this to of_property_write_u32_array() would make the intent clearer. > +} > + > +static phandle of_get_iommu_handle(struct device_node *root) > +{ > + struct device_node *iommu; > + > + iommu = of_find_compatible_node(root, NULL, "arm,mmu-500"); > + if (!iommu) { > + pr_info("No \"arm,mmu-500\" node found, won't fixup\n"); > + return 0; > + } > + > + return of_node_create_phandle(iommu); > +} > + > +static int of_fixup_icid(struct device_node *root, phandle iommu_handle, > + const struct icid_id_table *icid_table, int num_icid) > +{ > + int i; > + > + for (i = 0; i < num_icid; i++) { > + const struct icid_id_table *icid = &icid_table[i]; > + struct device_node *np; > + > + if (!icid->compat) > + continue; > + > + for_each_compatible_node_from(np, root, NULL, icid->compat) { > + struct resource res; > + > + if (of_address_to_resource(np, 0, &res)) > + continue; > + > + if (res.start == icid->compat_addr) { > + of_set_iommu_prop(np, iommu_handle, icid->id); > + break; > + } > + } > + } > + > + return 0; > +} > + > struct fman_icid_id_table { > u32 port_id; > u32 icid; > @@ -292,17 +344,6 @@ static int get_fman_port_icid(int port_id, const struct fman_icid_id_table *tbl, > return -ENODEV; > } > > -static void of_set_iommu_prop(struct device_node *np, phandle iommu_handle, > - int stream_id) > -{ > - u32 prop[2]; > - > - prop[0] = cpu_to_fdt32(iommu_handle); > - prop[1] = cpu_to_fdt32(stream_id); > - > - of_set_property(np, "iommus", prop, sizeof(prop), 1); > -} > - > static void of_fixup_fman_port_icid_by_compat(struct device_node *root, > phandle iommu_handle, > const char *compat) > @@ -491,40 +532,15 @@ static void of_fixup_qportals(struct device_node *root, phandle iommu_handle) > } > } > > -static int icid_of_fixup(struct device_node *root, void *context) > +static int of_fixup_ls1046a(struct device_node *root, void *context) > { > - int i; > - struct device_node *iommu; > phandle iommu_handle; > > - iommu = of_find_compatible_node(root, NULL, "arm,mmu-500"); > - if (!iommu) { > - pr_info("No \"arm,mmu-500\" node found, won't fixup\n"); > + iommu_handle = of_get_iommu_handle(root); > + if (!iommu_handle) > return 0; > - } > - > - iommu_handle = of_node_create_phandle(iommu); > - > - for (i = 0; i < ARRAY_SIZE(icid_tbl_ls1046a); i++) { > - const struct icid_id_table *icid = &icid_tbl_ls1046a[i]; > - struct device_node *np; > - > - if (!icid->compat) > - continue; > - > - for_each_compatible_node_from(np, root, NULL, icid->compat) { > - struct resource res; > - > - if (of_address_to_resource(np, 0, &res)) > - continue; > - > - if (res.start == icid->compat_addr) { > - of_set_iommu_prop(np, iommu_handle, icid->id); > - break; > - } > - } > - } > > + of_fixup_icid(root, iommu_handle, icid_tbl_ls1046a, ARRAY_SIZE(icid_tbl_ls1046a)); > of_fixup_fman_icids(root, iommu_handle); > of_fixup_qportals(root, iommu_handle); > > @@ -553,5 +569,5 @@ void ls1046a_setup_icids(void) > > setup_qbman_portals(); > > - of_register_fixup(icid_of_fixup, NULL); > + of_register_fixup(of_fixup_ls1046a, NULL); > } -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |