[PATCH 03/10] soc: xilinx: zynqmp: Add machine identification support
Stefan Herbrechtsmeier
stefan.herbrechtsmeier-oss at weidmueller.com
Mon Jun 20 11:16:28 CEST 2022
Am 17.06.2022 um 12:41 schrieb Michal Simek:
> On 6/8/22 18:20, Stefan Herbrechtsmeier wrote:
>> [CAUTION: External Email]
>>
>> From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier at weidmueller.com>
>>
>> Add machine identification support based on the
>> zynqmp_get_silicon_idcode_name function in board/xilinx/zynqmp/zynqmp.c.
>>
>> Signed-off-by: Stefan Herbrechtsmeier
>> <stefan.herbrechtsmeier at weidmueller.com>
>> ---
>>
>> drivers/soc/soc_xilinx_zynqmp.c | 289 +++++++++++++++++++++++++++++++-
>> 1 file changed, 286 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/soc/soc_xilinx_zynqmp.c
>> b/drivers/soc/soc_xilinx_zynqmp.c
>> index a71115b17c..45592ed534 100644
>> --- a/drivers/soc/soc_xilinx_zynqmp.c
>> +++ b/drivers/soc/soc_xilinx_zynqmp.c
>> @@ -54,8 +318,7 @@ static int soc_xilinx_zynqmp_probe(struct udevice
>> *dev)
>>
>> priv->family = zynqmp_family;
>>
>> - if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3 ||
>> - !IS_ENABLED(CONFIG_ZYNQMP_FIRMWARE))
>> + if (!IS_ENABLED(CONFIG_ZYNQMP_FIRMWARE))
>> ret = zynqmp_mmio_read(ZYNQMP_PS_VERSION,
>> &ret_payload[2]);
>> else
>> ret = xilinx_pm_request(PM_GET_CHIPID, 0, 0, 0, 0,
>
> I was looking at code and this change is very interesting.
> I think that it can be just
> ret = xilinx_pm_request(PM_GET_CHIPID, 0, 0, 0, 0,...
> because message can be sent via IPI directly.
Without zynqmp_mmio_read this driver depends on the
CONFIG_ZYNQMP_FIRMWARE driver.
> That means that this should be completely separate patch.
I will add a separate patch.
>
>
>> @@ -65,6 +328,26 @@ static int soc_xilinx_zynqmp_probe(struct udevice
>> *dev)
>>
>> priv->revision = ret_payload[2] & ZYNQMP_PS_VER_MASK;
>>
>> + if (IS_ENABLED(CONFIG_ZYNQMP_FIRMWARE)) {
>
> When above change is there you should be able to remove this checking
> because
> you should get all payloads back in proper shape.
>
>
>
>> + /*
>> + * Firmware returns:
>> + * payload[0][31:0] = status of the operation
>> + * payload[1] = IDCODE
>> + * payload[2][19:0] = Version
>> + * payload[2][28:20] = EXTENDED_IDCODE
>> + * payload[2][29] = PL_INIT
>> + */
>> + u32 idcode = ret_payload[1];
>> + u32 idcode2 = ret_payload[2] >>
>> + ZYNQMP_CSU_VERSION_EMPTY_SHIFT;
>> + dev_dbg(dev, "IDCODE: 0x%0x, IDCODE2: 0x%0x\n", idcode,
>> + idcode2);
>> +
>> + ret = soc_xilinx_zynqmp_detect_machine(dev, idcode,
>> idcode2);
>> + if (ret)
>> + return ret;
>> + }
>> +
>> return 0;
>> }
>>
>> --
>> 2.30.2
>>
Regards
Stefan
More information about the U-Boot
mailing list