[PATCH] ARM: OMAP2+: Fix populating the hwmod data from device tree

Tony Lindgren tony at atomide.com
Wed Nov 20 13:12:56 EST 2013


* Tony Lindgren <tony at atomide.com> [131119 18:57]:
> We have some device tree properties where the ti,hwmod has multiple
> values:
> 
> am33xx.dtsi:	ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2";
> am4372.dtsi:	ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2";
> dra7.dtsi:	ti,hwmods = "l3_main_1", "l3_main_2";
> omap3.dtsi:	ti,hwmods = "mcbsp2", "mcbsp2_sidetone";
> omap3.dtsi:	ti,hwmods = "mcbsp3", "mcbsp3_sidetone";
> omap4.dtsi:	ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
> omap5.dtsi:	ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
> 
> So we need to handle the whole string array instead of just the
> first string to find the related hwmod entry.
> 
> Cc: "Benoît Cousson" <bcousson at baylibre.com>
> Cc: Paul Walmsley <paul at pwsan.com>
> Signed-off-by: Tony Lindgren <tony at atomide.com>
> 
> --- a/arch/arm/mach-omap2/omap_hwmod.c
> +++ b/arch/arm/mach-omap2/omap_hwmod.c
> @@ -2228,11 +2228,23 @@ static struct device_node *of_dev_hwmod_lookup(struct device_node *np,
>  						struct omap_hwmod *oh)
>  {
>  	struct device_node *np0 = NULL, *np1 = NULL;
> -	const char *p;
>  
>  	for_each_child_of_node(np, np0) {
> -		if (of_find_property(np0, "ti,hwmods", NULL)) {
> -			p = of_get_property(np0, "ti,hwmods", NULL);
> +		int count, i;
> +
> +		count = of_property_count_strings(np0, "ti,hwmods");
> +		if (count < 1)
> +			continue;
> +
> +		for (i = 0; i < count; i++) {
> +			const char *p;
> +			int res;
> +
> +			res = of_property_read_string_index(np0, "ti,hwmods",
> +							    i, &p);
> +			if (res)
> +				continue;
> +
>  			if (!strcmp(p, oh->name))
>  				return np0;
>  			np1 = of_dev_hwmod_lookup(np0, oh);

Hmm I think this also needs part two to it to populate the right IO space
based on the index, this probably now wrongly populates the first IO space
for all the hwmod instances in the group.

Regards,

Tony



More information about the linux-arm-kernel mailing list