Re: [PATCH 05/10] ARM: Layerscape: icid: move re-usable code to separate functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 |





[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux