
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 ?