From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Sat, 19 Sep 2020 04:47:47 +0200 Subject: [PATCH 1/2] arm: rmobile: Add RZ/G2M SoC In-Reply-To: <20200918160307.14323-1-biju.das.jz@bp.renesas.com> References: <20200918160307.14323-1-biju.das.jz@bp.renesas.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 ?