[PATCH 1/2] arm: rmobile: Add RZ/G2M SoC

Marek Vasut marek.vasut at gmail.com
Sat Sep 19 04:47:47 CEST 2020


On 9/18/20 6:03 PM, Biju Das wrote:
> Add CPU and PRR IDs for R8A774A1(a.k.a RZ/G2M) SoC.

[...]

> +static const struct udevice_id *of_soc_match_compatible(void)
> +{
> +	const struct udevice_id *of_match = soc_ids;
> +	int i;
> +
> +	for (i = 0; i < ARRAY_SIZE(soc_ids); i++) {
> +		if (!fdt_node_check_compatible(gd->fdt_blob, 0,
> +					       of_match->compatible))
> +			return of_match;
> +		of_match++;
> +	}
> +
> +	return NULL;
> +}

This should rather be a generic function, I think this is something that
already exists in Linux common code too, right ?

>  static int rmobile_cpuinfo_idx(void)
>  {
>  	int i = 0;
>  	u32 cpu_type = rmobile_get_cpu_type();
> +	const struct udevice_id *match = of_soc_match_compatible();
>  
> +	/*
> +	 * This loop identifies CPU based on PRR register, it differentiates
> +	 * RZ/G SoC's from R-Car SoC's by matching RZ/G SoC compatible string
> +	 * from DT against the family_type.
> +	 */
>  	for (; i < ARRAY_SIZE(rmobile_cpuinfo); i++)
> -		if (rmobile_cpuinfo[i].cpu_type == cpu_type)
> -			break;
> +		if (rmobile_cpuinfo[i].cpu_type == cpu_type) {
> +			if (match &&
> +			    rmobile_cpuinfo[i].family_type == match->data)
> +				break;
> +			else if (!match &&
> +				 rmobile_cpuinfo[i].family_type != SOC_RZG2)
> +				break;
> +		}

I still don't understand this, so if cpu_type ==
RMOBILE_CPU_TYPE_R8A7796 , then it can be either RZG2 or R8A7796, right?
And there is no PRR bit or any other bit to tell those two chips apart ?

I would like to avoid using the OF match here, because that fails if you
use MULTI_DTB_FIT , does it not ? So can you please check whether there
might be some way to tell the two SoCs apart ?


More information about the U-Boot mailing list