2022-07-21 10:24:15

by Tiezhu Yang

[permalink] [raw]
Subject: [PATCH] LoongArch: Fix wrong "ROM Size" of boardinfo

We can see the "ROM Size" is different in the following outputs:

[root@linux loongson]# cat /sys/firmware/loongson/boardinfo
BIOS Information
Vendor : Loongson
Version : vUDK2018-LoongArch-V2.0.pre-beta8
ROM Size : 63 KB
Release Date : 06/15/2022

Board Information
Manufacturer : Loongson
Board Name : Loongson-LS3A5000-7A1000-1w-A2101
Family : LOONGSON64

[root@linux loongson]# dmidecode | head -11
...
Handle 0x0000, DMI type 0, 26 bytes
BIOS Information
Vendor: Loongson
Version: vUDK2018-LoongArch-V2.0.pre-beta8
Release Date: 06/15/2022
ROM Size: 4 MB

According to "BIOS Information (Type 0) structure" in the SMBIOS
Reference Specification [1], it shows 64K * (n+1) is the size of
the physical device containing the BIOS if the size is less than
16M.

Additionally, we can see the related code in dmidecode [2]:

u64 s = { .l = (code1 + 1) << 6 };

So the output of dmidecode is correct, the output of boardinfo
is wrong, fix it.

By the way, at present no need to consider the size is 16M or
greater on LoongArch, because it is usually 4M or 8M which is
enough to use.

[1] https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.6.0.pdf
[2] https://git.savannah.nongnu.org/cgit/dmidecode.git/tree/dmidecode.c#n347

Fixes: 628c3bb40e9a ("LoongArch: Add boot and setup routines")
Signed-off-by: Tiezhu Yang <[email protected]>
---
arch/loongarch/kernel/setup.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/loongarch/kernel/setup.c b/arch/loongarch/kernel/setup.c
index c74860b..8f5c2f9 100644
--- a/arch/loongarch/kernel/setup.c
+++ b/arch/loongarch/kernel/setup.c
@@ -126,7 +126,7 @@ static void __init parse_bios_table(const struct dmi_header *dm)
char *dmi_data = (char *)dm;

bios_extern = *(dmi_data + SMBIOS_BIOSEXTERN_OFFSET);
- b_info.bios_size = *(dmi_data + SMBIOS_BIOSSIZE_OFFSET);
+ b_info.bios_size = (*(dmi_data + SMBIOS_BIOSSIZE_OFFSET) + 1) << 6;

if (bios_extern & LOONGSON_EFI_ENABLE)
set_bit(EFI_BOOT, &efi.flags);
--
2.1.0


2022-07-22 07:51:16

by WANG Xuerui

[permalink] [raw]
Subject: Re: [PATCH] LoongArch: Fix wrong "ROM Size" of boardinfo

On 2022/7/21 17:53, Tiezhu Yang wrote:
> We can see the "ROM Size" is different in the following outputs:
>
> [root@linux loongson]# cat /sys/firmware/loongson/boardinfo
> BIOS Information
> Vendor : Loongson
> Version : vUDK2018-LoongArch-V2.0.pre-beta8
> ROM Size : 63 KB
> Release Date : 06/15/2022
>
> Board Information
> Manufacturer : Loongson
> Board Name : Loongson-LS3A5000-7A1000-1w-A2101
> Family : LOONGSON64
>
> [root@linux loongson]# dmidecode | head -11
> ...
> Handle 0x0000, DMI type 0, 26 bytes
> BIOS Information
> Vendor: Loongson
> Version: vUDK2018-LoongArch-V2.0.pre-beta8
> Release Date: 06/15/2022
> ROM Size: 4 MB
>
> According to "BIOS Information (Type 0) structure" in the SMBIOS
> Reference Specification [1], it shows 64K * (n+1) is the size of
> the physical device containing the BIOS if the size is less than
> 16M.
>
> Additionally, we can see the related code in dmidecode [2]:
>
> u64 s = { .l = (code1 + 1) << 6 };
>
> So the output of dmidecode is correct, the output of boardinfo
> is wrong, fix it.
>
> By the way, at present no need to consider the size is 16M or
> greater on LoongArch, because it is usually 4M or 8M which is
> enough to use.
Although the commit message is a bit Chinglish, the inclusion of code
and snippets have all complemented the description, so overall it
doesn't hamper understanding and I'm mostly okay with it.
>
> [1] https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.6.0.pdf
> [2] https://git.savannah.nongnu.org/cgit/dmidecode.git/tree/dmidecode.c#n347
>
> Fixes: 628c3bb40e9a ("LoongArch: Add boot and setup routines")
> Signed-off-by: Tiezhu Yang <[email protected]>
> ---
> arch/loongarch/kernel/setup.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/loongarch/kernel/setup.c b/arch/loongarch/kernel/setup.c
> index c74860b..8f5c2f9 100644
> --- a/arch/loongarch/kernel/setup.c
> +++ b/arch/loongarch/kernel/setup.c
> @@ -126,7 +126,7 @@ static void __init parse_bios_table(const struct dmi_header *dm)
> char *dmi_data = (char *)dm;
>
> bios_extern = *(dmi_data + SMBIOS_BIOSEXTERN_OFFSET);
> - b_info.bios_size = *(dmi_data + SMBIOS_BIOSSIZE_OFFSET);
> + b_info.bios_size = (*(dmi_data + SMBIOS_BIOSSIZE_OFFSET) + 1) << 6;
>
> if (bios_extern & LOONGSON_EFI_ENABLE)
> set_bit(EFI_BOOT, &efi.flags);

I've tested on real 3A5000 hardware and confirmed this is working.

$ cat /sys/firmware/loongson/boardinfo
BIOS Information
Vendor                  : Loongson
Version                 : vUDK2018-LoongArch-V2.0.pre-beta8
ROM Size                : 4096 KB
Release Date            : 06/15/2022

Board Information
Manufacturer            : Loongson
Board Name              : Loongson-LS3A5000-7A1000-1w-A2101
Family                  : LOONGSON64


So,

Reviewed-by: WANG Xuerui <[email protected]>

2022-07-22 07:55:22

by Huacai Chen

[permalink] [raw]
Subject: Re: [PATCH] LoongArch: Fix wrong "ROM Size" of boardinfo

Hi, Tiezhu,

If this patch is really needed, please also send a patch for our
internal LTS kernel repo, thanks.

Huacai

On Fri, Jul 22, 2022 at 3:49 PM WANG Xuerui <[email protected]> wrote:
>
> On 2022/7/21 17:53, Tiezhu Yang wrote:
> > We can see the "ROM Size" is different in the following outputs:
> >
> > [root@linux loongson]# cat /sys/firmware/loongson/boardinfo
> > BIOS Information
> > Vendor : Loongson
> > Version : vUDK2018-LoongArch-V2.0.pre-beta8
> > ROM Size : 63 KB
> > Release Date : 06/15/2022
> >
> > Board Information
> > Manufacturer : Loongson
> > Board Name : Loongson-LS3A5000-7A1000-1w-A2101
> > Family : LOONGSON64
> >
> > [root@linux loongson]# dmidecode | head -11
> > ...
> > Handle 0x0000, DMI type 0, 26 bytes
> > BIOS Information
> > Vendor: Loongson
> > Version: vUDK2018-LoongArch-V2.0.pre-beta8
> > Release Date: 06/15/2022
> > ROM Size: 4 MB
> >
> > According to "BIOS Information (Type 0) structure" in the SMBIOS
> > Reference Specification [1], it shows 64K * (n+1) is the size of
> > the physical device containing the BIOS if the size is less than
> > 16M.
> >
> > Additionally, we can see the related code in dmidecode [2]:
> >
> > u64 s = { .l = (code1 + 1) << 6 };
> >
> > So the output of dmidecode is correct, the output of boardinfo
> > is wrong, fix it.
> >
> > By the way, at present no need to consider the size is 16M or
> > greater on LoongArch, because it is usually 4M or 8M which is
> > enough to use.
> Although the commit message is a bit Chinglish, the inclusion of code
> and snippets have all complemented the description, so overall it
> doesn't hamper understanding and I'm mostly okay with it.
> >
> > [1] https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.6.0.pdf
> > [2] https://git.savannah.nongnu.org/cgit/dmidecode.git/tree/dmidecode.c#n347
> >
> > Fixes: 628c3bb40e9a ("LoongArch: Add boot and setup routines")
> > Signed-off-by: Tiezhu Yang <[email protected]>
> > ---
> > arch/loongarch/kernel/setup.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/arch/loongarch/kernel/setup.c b/arch/loongarch/kernel/setup.c
> > index c74860b..8f5c2f9 100644
> > --- a/arch/loongarch/kernel/setup.c
> > +++ b/arch/loongarch/kernel/setup.c
> > @@ -126,7 +126,7 @@ static void __init parse_bios_table(const struct dmi_header *dm)
> > char *dmi_data = (char *)dm;
> >
> > bios_extern = *(dmi_data + SMBIOS_BIOSEXTERN_OFFSET);
> > - b_info.bios_size = *(dmi_data + SMBIOS_BIOSSIZE_OFFSET);
> > + b_info.bios_size = (*(dmi_data + SMBIOS_BIOSSIZE_OFFSET) + 1) << 6;
> >
> > if (bios_extern & LOONGSON_EFI_ENABLE)
> > set_bit(EFI_BOOT, &efi.flags);
>
> I've tested on real 3A5000 hardware and confirmed this is working.
>
> $ cat /sys/firmware/loongson/boardinfo
> BIOS Information
> Vendor : Loongson
> Version : vUDK2018-LoongArch-V2.0.pre-beta8
> ROM Size : 4096 KB
> Release Date : 06/15/2022
>
> Board Information
> Manufacturer : Loongson
> Board Name : Loongson-LS3A5000-7A1000-1w-A2101
> Family : LOONGSON64
>
>
> So,
>
> Reviewed-by: WANG Xuerui <[email protected]>
>
>