[U-Boot] [PATCH 2/2] zynq: Support CPU info display
Michal Simek
michal.simek at xilinx.com
Wed Jan 17 06:48:20 UTC 2018
Hi,
On 16.1.2018 19:38, Ezequiel Garcia wrote:
> On 16 January 2018 at 09:08, Michal Simek <michal.simek at xilinx.com> wrote:
>> On 15.1.2018 16:46, Ezequiel Garcia wrote:
>>> This commit adds CPU and silicon version information
>>> consuming the SLCR IDCODE and DEVCFG MCTRL registers,
>>> respectively.
>>>
>>> Signed-off-by: Ariel D'Alessandro <ariel at vanguardiasur.com.ar>
>>> Signed-off-by: Ezequiel Garcia <ezequiel at vanguardiasur.com.ar>
>>> ---
>>> arch/arm/mach-zynq/Makefile | 1 +
>>> arch/arm/mach-zynq/cpu_info.c | 49 +++++++++++++++++++++++++++++++++++++++++++
>>> 2 files changed, 50 insertions(+)
>>> create mode 100644 arch/arm/mach-zynq/cpu_info.c
>>>
>>> diff --git a/arch/arm/mach-zynq/Makefile b/arch/arm/mach-zynq/Makefile
>>> index e3f0117da563..31f1e0d5a8ad 100644
>>> --- a/arch/arm/mach-zynq/Makefile
>>> +++ b/arch/arm/mach-zynq/Makefile
>>> @@ -14,5 +14,6 @@ obj-y += ddrc.o
>>> obj-y += slcr.o
>>> obj-y += clk.o
>>> obj-y += lowlevel_init.o
>>> +obj-$(CONFIG_DISPLAY_CPUINFO) += cpu_info.o
>>> AFLAGS_lowlevel_init.o := -mfpu=neon
>>> obj-$(CONFIG_SPL_BUILD) += spl.o ps7_spl_init.o
>>> diff --git a/arch/arm/mach-zynq/cpu_info.c b/arch/arm/mach-zynq/cpu_info.c
>>> new file mode 100644
>>> index 000000000000..730ccccb73da
>>> --- /dev/null
>>> +++ b/arch/arm/mach-zynq/cpu_info.c
>>> @@ -0,0 +1,49 @@
>>> +/*
>>> + * Copyright (C) 2018 VanguardiaSur - www.vanguardiasur.com.ar
>>
>> The part of code below is copied from board.c which is interestingly
>> copyrighted just by me. But there should be also Xilinx. :-)
>>
>
> Oh, sorry about!
>
> /*
> * (C) Copyright 2012 Michal Simek <monstr at monstr.eu>
> * (C) Copyright 2018 VanguardiaSur - www.vanguardiasur.com.ar
> *
> * SPDX-License-Identifier: GPL-2.0+
> */
>
> This OK ? How should the Xilinx copyright look like?
I have sent a patch to update years and add line to board.c. If you can
based your work on the top of that that will be great.
>
>>> + *
>>> + * SPDX-License-Identifier: GPL-2.0+
>>> + */
>>> +
>>> +#include <common.h>
>>> +#include <stdio.h>
>>
>> Already the part of common.h
>>
>
> Got it.
>
>>> +#include <zynqpl.h>
>>
>> This is not needed but both these patches are pointing to one more thing
>> which could be the part of this series which is filling FPGA structure
>> which should be removed from board.c too.
>>
>
> OK.
>
>>> +#include <asm/arch/sys_proto.h>
>>> +#include <asm/arch/ps7_init_gpl.h>
>>
>> This header is probably not needed.
>>
>
> Seems needed because of PCW_SILICON_VERSION_3.
ah right.
>
>>> +
>>> +static const struct {
>>> + u8 idcode;
>>> + const char *cpuinfo;
>>> +} zynq_cpu_info[] = {
>>> + { .idcode = XILINX_ZYNQ_7007S, .cpuinfo = "7007S" },
>>> + { .idcode = XILINX_ZYNQ_7010, .cpuinfo = "7010" },
>>> + { .idcode = XILINX_ZYNQ_7012S, .cpuinfo = "7012S" },
>>> + { .idcode = XILINX_ZYNQ_7014S, .cpuinfo = "7014S" },
>>> + { .idcode = XILINX_ZYNQ_7015, .cpuinfo = "7015" },
>>> + { .idcode = XILINX_ZYNQ_7020, .cpuinfo = "7020" },
>>> + { .idcode = XILINX_ZYNQ_7030, .cpuinfo = "7030" },
>>> + { .idcode = XILINX_ZYNQ_7035, .cpuinfo = "7035" },
>>> + { .idcode = XILINX_ZYNQ_7045, .cpuinfo = "7045" },
>>> + { .idcode = XILINX_ZYNQ_7100, .cpuinfo = "7100"},
>>
>> If you look at include/zynqpl.h then 7z007s name is used instead.
>
> Oh, missed those strings. We should be able to reuse them.
I hope that filling that structure together will be great.
>
>> Normally this was available via fpga info command but not a problem to
>> show it as the part of boot log.
>>
>>> + { /* Sentinel */ },
>>> +};
>>> +
>>> +int print_cpuinfo(void)
>>> +{
>>> + u32 idcode, version;
>>> + u8 i;
>>> +
>>> + idcode = zynq_slcr_get_idcode();
>>> +
>>> + for (i = 0; zynq_cpu_info[i].idcode; i++) {
>>> + if (zynq_cpu_info[i].idcode == idcode) {
>>> + printf("CPU: Zynq %s\n", zynq_cpu_info[i].cpuinfo);
>>> + break;
>>> + }
>>> + }
>>> +
>>> + version = zynq_get_silicon_version() << 1;
>>> + if (version > (PCW_SILICON_VERSION_3 << 1))
>>> + version += 1;
>>> + printf("Silicon: v%d.%d\n", version >> 1, version & 1);
>>
>>
>> When this is running on QEMU only silicon version is shown and nothing else.
>>
>> U-Boot 2018.01-00101-g2cb1e21ccc8e (Jan 16 2018 - 12:08:57 +0100) Xilinx
>> Zynq ZC702
>>
>> Silicon: v0.0
>> Model: Zynq ZC702 Development Board
>> I2C: ready
>> DRAM: ECC disabled 1 GiB
>>
>> I think if you print cpu information you should also print silicon
>> version. If you don't print it, then just don't print silicon version too.
>>
>
> OK, makes sense.
>
>> Anyway just a summary. You pointed to this code that's why I think to do
>> it properly we should also remove fpga initialization from board.c and
>> move it to mach-zynq and detect idcode just once and then reuse it.
>>
>
> Right. Perhaps we can put both fpga init and print_cpuinfo in slcr.c.
I am not sure that slcr is the right file. cpu.c seems to me better. But
not a problem if you want to create new file.
Thanks,
Michal
More information about the U-Boot
mailing list