* Re: [PATCH] MIPS: Scan the DMI system information [not found] <5959f904-5c46-30a7-7a4f-17f692aca320@loongson.cn> @ 2019-11-07 9:26 ` Tiezhu Yang 2019-11-07 10:42 ` Jean Delvare 0 siblings, 1 reply; 7+ messages in thread From: Tiezhu Yang @ 2019-11-07 9:26 UTC (permalink / raw) To: Jiaxun Yang, Paul Burton, Ralf Baechle, James Hogan, Jean Delvare, Huacai Chen Cc: linux-mips, linux-kernel, Yinglu Yang, Xuefeng Li Sorry to resend this email because the mail list server was denied due to it is not plain text. On 11/07/2019 11:42 AM, Jiaxun Yang wrote: > 于 2019年11月7日 GMT+08:00 上午10:42:23, Tiezhu Yang<yangtiezhu@loongson.cn> 写到: >> On 11/07/2019 08:35 AM, Jiaxun Yang wrote: >>> 于 2019年11月7日 GMT+08:00 上午12:05:41, Tiezhu Yang >> <yangtiezhu@loongson.cn> 写到: >>>> Enable DMI scanning on the MIPS architecture, this setups DMI >>>> identifiers >>>> (dmi_system_id) for printing it out on task dumps and prepares DIMM >>>> entry >>>> information (dmi_memdev_info) from the SMBIOS table. With this >> patch, >>>> the >>>> driver can easily match various of mainboards. >>>> >>>> In the SMBIOS reference specification, the table anchor string >> "_SM_" >>>> is >>>> present in the address range 0xF0000 to 0xFFFFF on a 16-byte >> boundary, >>>> but there exists a special case for loongson platform, when call >>>> function >>>> dmi_early_remap, it should specify the start address to 0xFFFE000 >> due >>>> to >>>> it is reserved for SMBIOS and can be normally access in the BIOS. >>>> >>>> Co-developed-by: Yinglu Yang<yangyinglu@loongson.cn> >>>> Signed-off-by: Yinglu Yang<yangyinglu@loongson.cn> >>>> Signed-off-by: Tiezhu Yang<yangtiezhu@loongson.cn> >>>> --- >>>> arch/mips/Kconfig | 12 ++++++++++++ >>>> arch/mips/include/asm/dmi.h | 43 >>>> +++++++++++++++++++++++++++++++++++++++++++ >>>> arch/mips/kernel/setup.c | 2 ++ >>>> 3 files changed, 57 insertions(+) >>>> create mode 100644 arch/mips/include/asm/dmi.h >>>> >>>> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig >>>> index 7cb8947..0a67b18 100644 >>>> --- a/arch/mips/Kconfig >>>> +++ b/arch/mips/Kconfig >>>> @@ -2757,6 +2757,18 @@ config HW_PERF_EVENTS >>>> Enable hardware performance counter support for perf events. If >>>> disabled, perf events will use software events only. >>>> >>>> +# Mark as expert because too many people got it wrong. >>>> +# The code disables itself when not needed. >>>> +config DMI >>>> + default y >>>> + select DMI_SCAN_MACHINE_NON_EFI_FALLBACK >>>> + bool "Enable DMI scanning" if EXPERT >>>> + help >>>> + Enabled scanning of DMI to identify machine quirks. Say Y >>>> + here unless you have verified that your setup is not >>>> + affected by entries in the DMI blacklist. Required by PNP >>>> + BIOS code. >>>> + >>>> config SMP >>>> bool "Multi-Processing support" >>>> depends on SYS_SUPPORTS_SMP >>>> diff --git a/arch/mips/include/asm/dmi.h >> b/arch/mips/include/asm/dmi.h >>>> new file mode 100644 >>>> index 0000000..1f3da37 >>>> --- /dev/null >>>> +++ b/arch/mips/include/asm/dmi.h >>>> @@ -0,0 +1,43 @@ >>>> +/* SPDX-License-Identifier: GPL-2.0 */ >>>> +#ifndef _ASM_MIPS_DMI_H >>>> +#define _ASM_MIPS_DMI_H >>>> + >>>> +#define dmi_early_remap mips_early_memremap >>>> +#define dmi_early_unmap mips_early_memunmap >>>> +#define dmi_remap(_x, _l) mips_memremap(_x, _l, MEMREMAP_WB) >>>> +#define dmi_unmap(_x) mips_memunmap(_x) >>>> + >>>> +#define dmi_alloc(l) memblock_alloc_low(l, PAGE_SIZE) >>>> + >>>> +void __init *mips_early_memremap(resource_size_t phys_addr, >> unsigned >>>> long size) >>>> +{ >>>> +#if defined(CONFIG_MACH_LOONGSON64) >>>> + if (phys_addr == 0xF0000) >>>> + phys_addr = 0xFFFE000; >>>> + >>>> + return (void *)TO_CAC(phys_addr); >>>> +#else >>>> + return NULL; >>>> +#endif >>>> +} >>> Hi Tiezhu, >>> >>> It is really tricky to hijack dmi address here during remap. >>> I think we should set the dmi table address at dmi_scan.c by a marco >> or something else rather than hijack it during remap. >> >> Hi Jiaxun, >> >> Thanks for your review. I agree with you, let me think about it and try >> to >> find a proper way, and then I will send a v2 patch. Hi Jiaxun, It seems that there is no absolutely better way to handle this case. 1. use conditional compilation in drivers/firmware/dmi_scan.c: #if defined(CONFIG_MACH_LOONGSON64) p = dmi_early_remap(0xFFFE000, 0x10000); #else p = dmi_early_remap(0xF0000, 0x10000); #endif This will influence the common code. 2. use callback function in arch/mips/include/asm/dmi.h: struct plat_dmi_ops { void (*early_memremap)(void); void (*memremap)(void); }; extern struct plat_dmi_ops *dmi_ops; void __init *mips_early_memremap(resource_size_t phys_addr, unsigned long size) { dmi_ops->early_memremap(); } void *mips_memremap(resource_size_t offset, size_t size, unsigned long flags) { dmi_ops->memremap(); } we can implement the callback function in various of MIPS platforms, like this: struct plat_dmi_ops loongson3_dmi_ops = { .early_memremap = loongson3_early_memremap, .memremap = loongson3_memremap, }; register_dmi_ops(&loongson3_dmi_ops); #ifdef CONFIG_DMI void __init *loongson3_early_memremap(resource_size_t phys_addr, unsigned long size) { if (phys_addr == 0xF0000) phys_addr = 0xfffe000; return (void *)TO_CAC(phys_addr); } void *loongson3_memremap(resource_size_t offset, size_t size, unsigned long flags) { return (void *)TO_CAC(phys_addr); } #else void __init __iomem *loongson3_early_memremap(u64 phys_addr, unsigned long size) { return NULL; } void __init __iomem *loongson3_memremap(u64 phys_addr, unsigned long size) { return NULL; } #endif This will not influence the common code. What do you think? Hi Jean, Could you give some suggestions? >>> Btw: Probably we should set DMI default y when MACH_LOONGSON64 is >> set? >> >> CONFIG_DMI is set to y by default, I think there is no need to select >> DMI when >> set CONFIG_MACH_LOONGSON64. > Sorry, I meant only default to y when MACH_LOONGSON64 is set or even depends on MACH_LOONGSON64. As Loongson is the only known MIPS platform that supports DMI. Default y unconditionally may lead to regression on other MIPS platforms. OK, I prefer to select DMI when set MACH_LOONGSON64 instead of DMI depends on MACH_LOONGSON64, I will modify the Kconfig file. Thanks, Tiezhu Yang >> Thanks, >> >> Tiezhu Yang >> >>> Thanks. >>> ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] MIPS: Scan the DMI system information 2019-11-07 9:26 ` [PATCH] MIPS: Scan the DMI system information Tiezhu Yang @ 2019-11-07 10:42 ` Jean Delvare 2019-11-07 11:07 ` Tiezhu Yang 0 siblings, 1 reply; 7+ messages in thread From: Jean Delvare @ 2019-11-07 10:42 UTC (permalink / raw) To: Tiezhu Yang Cc: Jiaxun Yang, Paul Burton, Ralf Baechle, James Hogan, Huacai Chen, linux-mips, linux-kernel, Yinglu Yang, Xuefeng Li On Thu, 7 Nov 2019 17:26:58 +0800, Tiezhu Yang wrote: > Sorry to resend this email because the mail list server was denied > due to it is not plain text. > > On 11/07/2019 11:42 AM, Jiaxun Yang wrote: > > 于 2019年11月7日 GMT+08:00 上午10:42:23, Tiezhu Yang<yangtiezhu@loongson.cn> 写到: > >> On 11/07/2019 08:35 AM, Jiaxun Yang wrote: > >>> 于 2019年11月7日 GMT+08:00 上午12:05:41, Tiezhu Yang > >> <yangtiezhu@loongson.cn> 写到: > >>>> Enable DMI scanning on the MIPS architecture, this setups DMI > >>>> identifiers > >>>> (dmi_system_id) for printing it out on task dumps and prepares DIMM > >>>> entry > >>>> information (dmi_memdev_info) from the SMBIOS table. With this > >> patch, > >>>> the > >>>> driver can easily match various of mainboards. > >>>> > >>>> In the SMBIOS reference specification, the table anchor string > >> "_SM_" > >>>> is > >>>> present in the address range 0xF0000 to 0xFFFFF on a 16-byte > >> boundary, > >>>> but there exists a special case for loongson platform, when call > >>>> function > >>>> dmi_early_remap, it should specify the start address to 0xFFFE000 > >> due > >>>> to > >>>> it is reserved for SMBIOS and can be normally access in the BIOS. > >>>> > >>>> Co-developed-by: Yinglu Yang<yangyinglu@loongson.cn> > >>>> Signed-off-by: Yinglu Yang<yangyinglu@loongson.cn> > >>>> Signed-off-by: Tiezhu Yang<yangtiezhu@loongson.cn> > >>>> --- > >>>> arch/mips/Kconfig | 12 ++++++++++++ > >>>> arch/mips/include/asm/dmi.h | 43 > >>>> +++++++++++++++++++++++++++++++++++++++++++ > >>>> arch/mips/kernel/setup.c | 2 ++ > >>>> 3 files changed, 57 insertions(+) > >>>> create mode 100644 arch/mips/include/asm/dmi.h > >>>> > >>>> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig > >>>> index 7cb8947..0a67b18 100644 > >>>> --- a/arch/mips/Kconfig > >>>> +++ b/arch/mips/Kconfig > >>>> @@ -2757,6 +2757,18 @@ config HW_PERF_EVENTS > >>>> Enable hardware performance counter support for perf events. If > >>>> disabled, perf events will use software events only. > >>>> > >>>> +# Mark as expert because too many people got it wrong. > >>>> +# The code disables itself when not needed. > >>>> +config DMI > >>>> + default y > >>>> + select DMI_SCAN_MACHINE_NON_EFI_FALLBACK > >>>> + bool "Enable DMI scanning" if EXPERT > >>>> + help > >>>> + Enabled scanning of DMI to identify machine quirks. Say Y > >>>> + here unless you have verified that your setup is not > >>>> + affected by entries in the DMI blacklist. Required by PNP > >>>> + BIOS code. > >>>> + > >>>> config SMP > >>>> bool "Multi-Processing support" > >>>> depends on SYS_SUPPORTS_SMP > >>>> diff --git a/arch/mips/include/asm/dmi.h > >> b/arch/mips/include/asm/dmi.h > >>>> new file mode 100644 > >>>> index 0000000..1f3da37 > >>>> --- /dev/null > >>>> +++ b/arch/mips/include/asm/dmi.h > >>>> @@ -0,0 +1,43 @@ > >>>> +/* SPDX-License-Identifier: GPL-2.0 */ > >>>> +#ifndef _ASM_MIPS_DMI_H > >>>> +#define _ASM_MIPS_DMI_H > >>>> + > >>>> +#define dmi_early_remap mips_early_memremap > >>>> +#define dmi_early_unmap mips_early_memunmap > >>>> +#define dmi_remap(_x, _l) mips_memremap(_x, _l, MEMREMAP_WB) > >>>> +#define dmi_unmap(_x) mips_memunmap(_x) > >>>> + > >>>> +#define dmi_alloc(l) memblock_alloc_low(l, PAGE_SIZE) > >>>> + > >>>> +void __init *mips_early_memremap(resource_size_t phys_addr, > >> unsigned > >>>> long size) > >>>> +{ > >>>> +#if defined(CONFIG_MACH_LOONGSON64) > >>>> + if (phys_addr == 0xF0000) > >>>> + phys_addr = 0xFFFE000; > >>>> + > >>>> + return (void *)TO_CAC(phys_addr); > >>>> +#else > >>>> + return NULL; > >>>> +#endif > >>>> +} > >>> Hi Tiezhu, > >>> > >>> It is really tricky to hijack dmi address here during remap. > >>> I think we should set the dmi table address at dmi_scan.c by a marco > >> or something else rather than hijack it during remap. > >> > >> Hi Jiaxun, > >> > >> Thanks for your review. I agree with you, let me think about it and try > >> to > >> find a proper way, and then I will send a v2 patch. > > Hi Jiaxun, > > It seems that there is no absolutely better way to handle this case. > > 1. use conditional compilation in drivers/firmware/dmi_scan.c: > > #if defined(CONFIG_MACH_LOONGSON64) > > p = dmi_early_remap(0xFFFE000, 0x10000); > > #else > > p = dmi_early_remap(0xF0000, 0x10000); > > #endif > > > This will influence the common code. > > 2. use callback function in arch/mips/include/asm/dmi.h: I see no reason to go that route if the decision can be made at build time. Callback functions are good when the decision is made at run time. > > struct plat_dmi_ops { > > void (*early_memremap)(void); > > void (*memremap)(void); > > }; > > extern struct plat_dmi_ops *dmi_ops; > > void __init *mips_early_memremap(resource_size_t phys_addr, unsigned long size) > > { > > dmi_ops->early_memremap(); > > } > > void *mips_memremap(resource_size_t offset, size_t size, unsigned long flags) > > { > > dmi_ops->memremap(); > > } > > > we can implement the callback function in various of MIPS platforms, > like this: > > struct plat_dmi_ops loongson3_dmi_ops = { > > .early_memremap = loongson3_early_memremap, > > .memremap = loongson3_memremap, > > }; > > register_dmi_ops(&loongson3_dmi_ops); > > #ifdef CONFIG_DMI > > void __init *loongson3_early_memremap(resource_size_t phys_addr, unsigned long size) > > { > > if (phys_addr == 0xF0000) > > phys_addr = 0xfffe000; > > return (void *)TO_CAC(phys_addr); > > } > > void *loongson3_memremap(resource_size_t offset, size_t size, unsigned long flags) > > { > > return (void *)TO_CAC(phys_addr); > > } > > #else > > void __init __iomem *loongson3_early_memremap(u64 phys_addr, unsigned long size) > > { > > return NULL; > > } > > void __init __iomem *loongson3_memremap(u64 phys_addr, unsigned long size) > > { > > return NULL; > > } > > #endif > > > This will not influence the common code. > > What do you think? > > > Hi Jean, > > Could you give some suggestions? What about: #if defined(CONFIG_MACH_LOONGSON64) #define SMBIOS_ENTRY_POINT_SCAN_START 0xFFFE000 #else #define SMBIOS_ENTRY_POINT_SCAN_START 0xF0000 #endif And then just use SMBIOS_ENTRY_POINT_SCAN_START instead of the raw address everywhere it is needed? -- Jean Delvare SUSE L3 Support ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] MIPS: Scan the DMI system information 2019-11-07 10:42 ` Jean Delvare @ 2019-11-07 11:07 ` Tiezhu Yang 0 siblings, 0 replies; 7+ messages in thread From: Tiezhu Yang @ 2019-11-07 11:07 UTC (permalink / raw) To: Jean Delvare Cc: Jiaxun Yang, Paul Burton, Ralf Baechle, James Hogan, Huacai Chen, linux-mips, linux-kernel, Yinglu Yang, Xuefeng Li On 11/07/2019 06:42 PM, Jean Delvare wrote: > On Thu, 7 Nov 2019 17:26:58 +0800, Tiezhu Yang wrote: >> Sorry to resend this email because the mail list server was denied >> due to it is not plain text. >> >> On 11/07/2019 11:42 AM, Jiaxun Yang wrote: >>> 于 2019年11月7日 GMT+08:00 上午10:42:23, Tiezhu Yang<yangtiezhu@loongson.cn> 写到: >>>> On 11/07/2019 08:35 AM, Jiaxun Yang wrote: >>>>> 于 2019年11月7日 GMT+08:00 上午12:05:41, Tiezhu Yang >>>> <yangtiezhu@loongson.cn> 写到: >>>>>> Enable DMI scanning on the MIPS architecture, this setups DMI >>>>>> identifiers >>>>>> (dmi_system_id) for printing it out on task dumps and prepares DIMM >>>>>> entry >>>>>> information (dmi_memdev_info) from the SMBIOS table. With this >>>> patch, >>>>>> the >>>>>> driver can easily match various of mainboards. >>>>>> >>>>>> In the SMBIOS reference specification, the table anchor string >>>> "_SM_" >>>>>> is >>>>>> present in the address range 0xF0000 to 0xFFFFF on a 16-byte >>>> boundary, >>>>>> but there exists a special case for loongson platform, when call >>>>>> function >>>>>> dmi_early_remap, it should specify the start address to 0xFFFE000 >>>> due >>>>>> to >>>>>> it is reserved for SMBIOS and can be normally access in the BIOS. >>>>>> >>>>>> Co-developed-by: Yinglu Yang<yangyinglu@loongson.cn> >>>>>> Signed-off-by: Yinglu Yang<yangyinglu@loongson.cn> >>>>>> Signed-off-by: Tiezhu Yang<yangtiezhu@loongson.cn> >>>>>> --- >>>>>> arch/mips/Kconfig | 12 ++++++++++++ >>>>>> arch/mips/include/asm/dmi.h | 43 >>>>>> +++++++++++++++++++++++++++++++++++++++++++ >>>>>> arch/mips/kernel/setup.c | 2 ++ >>>>>> 3 files changed, 57 insertions(+) >>>>>> create mode 100644 arch/mips/include/asm/dmi.h >>>>>> >>>>>> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig >>>>>> index 7cb8947..0a67b18 100644 >>>>>> --- a/arch/mips/Kconfig >>>>>> +++ b/arch/mips/Kconfig >>>>>> @@ -2757,6 +2757,18 @@ config HW_PERF_EVENTS >>>>>> Enable hardware performance counter support for perf events. If >>>>>> disabled, perf events will use software events only. >>>>>> >>>>>> +# Mark as expert because too many people got it wrong. >>>>>> +# The code disables itself when not needed. >>>>>> +config DMI >>>>>> + default y >>>>>> + select DMI_SCAN_MACHINE_NON_EFI_FALLBACK >>>>>> + bool "Enable DMI scanning" if EXPERT >>>>>> + help >>>>>> + Enabled scanning of DMI to identify machine quirks. Say Y >>>>>> + here unless you have verified that your setup is not >>>>>> + affected by entries in the DMI blacklist. Required by PNP >>>>>> + BIOS code. >>>>>> + >>>>>> config SMP >>>>>> bool "Multi-Processing support" >>>>>> depends on SYS_SUPPORTS_SMP >>>>>> diff --git a/arch/mips/include/asm/dmi.h >>>> b/arch/mips/include/asm/dmi.h >>>>>> new file mode 100644 >>>>>> index 0000000..1f3da37 >>>>>> --- /dev/null >>>>>> +++ b/arch/mips/include/asm/dmi.h >>>>>> @@ -0,0 +1,43 @@ >>>>>> +/* SPDX-License-Identifier: GPL-2.0 */ >>>>>> +#ifndef _ASM_MIPS_DMI_H >>>>>> +#define _ASM_MIPS_DMI_H >>>>>> + >>>>>> +#define dmi_early_remap mips_early_memremap >>>>>> +#define dmi_early_unmap mips_early_memunmap >>>>>> +#define dmi_remap(_x, _l) mips_memremap(_x, _l, MEMREMAP_WB) >>>>>> +#define dmi_unmap(_x) mips_memunmap(_x) >>>>>> + >>>>>> +#define dmi_alloc(l) memblock_alloc_low(l, PAGE_SIZE) >>>>>> + >>>>>> +void __init *mips_early_memremap(resource_size_t phys_addr, >>>> unsigned >>>>>> long size) >>>>>> +{ >>>>>> +#if defined(CONFIG_MACH_LOONGSON64) >>>>>> + if (phys_addr == 0xF0000) >>>>>> + phys_addr = 0xFFFE000; >>>>>> + >>>>>> + return (void *)TO_CAC(phys_addr); >>>>>> +#else >>>>>> + return NULL; >>>>>> +#endif >>>>>> +} >>>>> Hi Tiezhu, >>>>> >>>>> It is really tricky to hijack dmi address here during remap. >>>>> I think we should set the dmi table address at dmi_scan.c by a marco >>>> or something else rather than hijack it during remap. >>>> >>>> Hi Jiaxun, >>>> >>>> Thanks for your review. I agree with you, let me think about it and try >>>> to >>>> find a proper way, and then I will send a v2 patch. >> Hi Jiaxun, >> >> It seems that there is no absolutely better way to handle this case. >> >> 1. use conditional compilation in drivers/firmware/dmi_scan.c: >> >> #if defined(CONFIG_MACH_LOONGSON64) >> >> p = dmi_early_remap(0xFFFE000, 0x10000); >> >> #else >> >> p = dmi_early_remap(0xF0000, 0x10000); >> >> #endif >> >> >> This will influence the common code. >> >> 2. use callback function in arch/mips/include/asm/dmi.h: > I see no reason to go that route if the decision can be made at build > time. Callback functions are good when the decision is made at run time. > >> struct plat_dmi_ops { >> >> void (*early_memremap)(void); >> >> void (*memremap)(void); >> >> }; >> >> extern struct plat_dmi_ops *dmi_ops; >> >> void __init *mips_early_memremap(resource_size_t phys_addr, unsigned long size) >> >> { >> >> dmi_ops->early_memremap(); >> >> } >> >> void *mips_memremap(resource_size_t offset, size_t size, unsigned long flags) >> >> { >> >> dmi_ops->memremap(); >> >> } >> >> >> we can implement the callback function in various of MIPS platforms, >> like this: >> >> struct plat_dmi_ops loongson3_dmi_ops = { >> >> .early_memremap = loongson3_early_memremap, >> >> .memremap = loongson3_memremap, >> >> }; >> >> register_dmi_ops(&loongson3_dmi_ops); >> >> #ifdef CONFIG_DMI >> >> void __init *loongson3_early_memremap(resource_size_t phys_addr, unsigned long size) >> >> { >> >> if (phys_addr == 0xF0000) >> >> phys_addr = 0xfffe000; >> >> return (void *)TO_CAC(phys_addr); >> >> } >> >> void *loongson3_memremap(resource_size_t offset, size_t size, unsigned long flags) >> >> { >> >> return (void *)TO_CAC(phys_addr); >> >> } >> >> #else >> >> void __init __iomem *loongson3_early_memremap(u64 phys_addr, unsigned long size) >> >> { >> >> return NULL; >> >> } >> >> void __init __iomem *loongson3_memremap(u64 phys_addr, unsigned long size) >> >> { >> >> return NULL; >> >> } >> >> #endif >> >> >> This will not influence the common code. >> >> What do you think? >> >> >> Hi Jean, >> >> Could you give some suggestions? > What about: > > #if defined(CONFIG_MACH_LOONGSON64) > #define SMBIOS_ENTRY_POINT_SCAN_START 0xFFFE000 > #else > #define SMBIOS_ENTRY_POINT_SCAN_START 0xF0000 > #endif > > And then just use SMBIOS_ENTRY_POINT_SCAN_START instead of the raw > address everywhere it is needed? OK, good idea, thank you very much! I will send a v2 patch as soon as possible. Thanks, Tiezhu Yang > ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] MIPS: Scan the DMI system information @ 2019-11-06 16:05 Tiezhu Yang 2019-11-07 0:35 ` Jiaxun Yang 0 siblings, 1 reply; 7+ messages in thread From: Tiezhu Yang @ 2019-11-06 16:05 UTC (permalink / raw) To: Paul Burton, Ralf Baechle, James Hogan Cc: linux-mips, linux-kernel, Yinglu Yang Enable DMI scanning on the MIPS architecture, this setups DMI identifiers (dmi_system_id) for printing it out on task dumps and prepares DIMM entry information (dmi_memdev_info) from the SMBIOS table. With this patch, the driver can easily match various of mainboards. In the SMBIOS reference specification, the table anchor string "_SM_" is present in the address range 0xF0000 to 0xFFFFF on a 16-byte boundary, but there exists a special case for loongson platform, when call function dmi_early_remap, it should specify the start address to 0xFFFE000 due to it is reserved for SMBIOS and can be normally access in the BIOS. Co-developed-by: Yinglu Yang <yangyinglu@loongson.cn> Signed-off-by: Yinglu Yang <yangyinglu@loongson.cn> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> --- arch/mips/Kconfig | 12 ++++++++++++ arch/mips/include/asm/dmi.h | 43 +++++++++++++++++++++++++++++++++++++++++++ arch/mips/kernel/setup.c | 2 ++ 3 files changed, 57 insertions(+) create mode 100644 arch/mips/include/asm/dmi.h diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 7cb8947..0a67b18 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -2757,6 +2757,18 @@ config HW_PERF_EVENTS Enable hardware performance counter support for perf events. If disabled, perf events will use software events only. +# Mark as expert because too many people got it wrong. +# The code disables itself when not needed. +config DMI + default y + select DMI_SCAN_MACHINE_NON_EFI_FALLBACK + bool "Enable DMI scanning" if EXPERT + help + Enabled scanning of DMI to identify machine quirks. Say Y + here unless you have verified that your setup is not + affected by entries in the DMI blacklist. Required by PNP + BIOS code. + config SMP bool "Multi-Processing support" depends on SYS_SUPPORTS_SMP diff --git a/arch/mips/include/asm/dmi.h b/arch/mips/include/asm/dmi.h new file mode 100644 index 0000000..1f3da37 --- /dev/null +++ b/arch/mips/include/asm/dmi.h @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _ASM_MIPS_DMI_H +#define _ASM_MIPS_DMI_H + +#define dmi_early_remap mips_early_memremap +#define dmi_early_unmap mips_early_memunmap +#define dmi_remap(_x, _l) mips_memremap(_x, _l, MEMREMAP_WB) +#define dmi_unmap(_x) mips_memunmap(_x) + +#define dmi_alloc(l) memblock_alloc_low(l, PAGE_SIZE) + +void __init *mips_early_memremap(resource_size_t phys_addr, unsigned long size) +{ +#if defined(CONFIG_MACH_LOONGSON64) + if (phys_addr == 0xF0000) + phys_addr = 0xFFFE000; + + return (void *)TO_CAC(phys_addr); +#else + return NULL; +#endif +} + +void __init mips_early_memunmap(void *addr, unsigned long size) +{ + +} + +void *mips_memremap(resource_size_t offset, size_t size, unsigned long flags) +{ +#if defined(CONFIG_MACH_LOONGSON64) + return (void *)TO_CAC(offset); +#else + return NULL; +#endif +} + +void mips_memunmap(void *addr) +{ + +} + +#endif /* _ASM_MIPS_DMI_H */ diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index c3d4212..da7d312 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c @@ -28,6 +28,7 @@ #include <linux/decompress/generic.h> #include <linux/of_fdt.h> #include <linux/of_reserved_mem.h> +#include <linux/dmi.h> #include <asm/addrspace.h> #include <asm/bootinfo.h> @@ -802,6 +803,7 @@ void __init setup_arch(char **cmdline_p) #endif arch_mem_init(cmdline_p); + dmi_setup(); resource_init(); plat_smp_setup(); -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] MIPS: Scan the DMI system information 2019-11-06 16:05 Tiezhu Yang @ 2019-11-07 0:35 ` Jiaxun Yang 2019-11-07 2:42 ` Tiezhu Yang 0 siblings, 1 reply; 7+ messages in thread From: Jiaxun Yang @ 2019-11-07 0:35 UTC (permalink / raw) To: Tiezhu Yang, Paul Burton, Ralf Baechle, James Hogan Cc: linux-mips, linux-kernel, Yinglu Yang 于 2019年11月7日 GMT+08:00 上午12:05:41, Tiezhu Yang <yangtiezhu@loongson.cn> 写到: >Enable DMI scanning on the MIPS architecture, this setups DMI >identifiers >(dmi_system_id) for printing it out on task dumps and prepares DIMM >entry >information (dmi_memdev_info) from the SMBIOS table. With this patch, >the >driver can easily match various of mainboards. > >In the SMBIOS reference specification, the table anchor string "_SM_" >is >present in the address range 0xF0000 to 0xFFFFF on a 16-byte boundary, >but there exists a special case for loongson platform, when call >function >dmi_early_remap, it should specify the start address to 0xFFFE000 due >to >it is reserved for SMBIOS and can be normally access in the BIOS. > >Co-developed-by: Yinglu Yang <yangyinglu@loongson.cn> >Signed-off-by: Yinglu Yang <yangyinglu@loongson.cn> >Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> >--- > arch/mips/Kconfig | 12 ++++++++++++ >arch/mips/include/asm/dmi.h | 43 >+++++++++++++++++++++++++++++++++++++++++++ > arch/mips/kernel/setup.c | 2 ++ > 3 files changed, 57 insertions(+) > create mode 100644 arch/mips/include/asm/dmi.h > >diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig >index 7cb8947..0a67b18 100644 >--- a/arch/mips/Kconfig >+++ b/arch/mips/Kconfig >@@ -2757,6 +2757,18 @@ config HW_PERF_EVENTS > Enable hardware performance counter support for perf events. If > disabled, perf events will use software events only. > >+# Mark as expert because too many people got it wrong. >+# The code disables itself when not needed. >+config DMI >+ default y >+ select DMI_SCAN_MACHINE_NON_EFI_FALLBACK >+ bool "Enable DMI scanning" if EXPERT >+ help >+ Enabled scanning of DMI to identify machine quirks. Say Y >+ here unless you have verified that your setup is not >+ affected by entries in the DMI blacklist. Required by PNP >+ BIOS code. >+ > config SMP > bool "Multi-Processing support" > depends on SYS_SUPPORTS_SMP >diff --git a/arch/mips/include/asm/dmi.h b/arch/mips/include/asm/dmi.h >new file mode 100644 >index 0000000..1f3da37 >--- /dev/null >+++ b/arch/mips/include/asm/dmi.h >@@ -0,0 +1,43 @@ >+/* SPDX-License-Identifier: GPL-2.0 */ >+#ifndef _ASM_MIPS_DMI_H >+#define _ASM_MIPS_DMI_H >+ >+#define dmi_early_remap mips_early_memremap >+#define dmi_early_unmap mips_early_memunmap >+#define dmi_remap(_x, _l) mips_memremap(_x, _l, MEMREMAP_WB) >+#define dmi_unmap(_x) mips_memunmap(_x) >+ >+#define dmi_alloc(l) memblock_alloc_low(l, PAGE_SIZE) >+ >+void __init *mips_early_memremap(resource_size_t phys_addr, unsigned >long size) >+{ >+#if defined(CONFIG_MACH_LOONGSON64) >+ if (phys_addr == 0xF0000) >+ phys_addr = 0xFFFE000; >+ >+ return (void *)TO_CAC(phys_addr); >+#else >+ return NULL; >+#endif >+} Hi Tiezhu, It is really tricky to hijack dmi address here during remap. I think we should set the dmi table address at dmi_scan.c by a marco or something else rather than hijack it during remap. Btw: Probably we should set DMI default y when MACH_LOONGSON64 is set? Thanks. -- Jiaxun Yang ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] MIPS: Scan the DMI system information 2019-11-07 0:35 ` Jiaxun Yang @ 2019-11-07 2:42 ` Tiezhu Yang 2019-11-07 3:42 ` Jiaxun Yang 0 siblings, 1 reply; 7+ messages in thread From: Tiezhu Yang @ 2019-11-07 2:42 UTC (permalink / raw) To: Jiaxun Yang, Paul Burton, Ralf Baechle, James Hogan Cc: linux-mips, linux-kernel, Yinglu Yang On 11/07/2019 08:35 AM, Jiaxun Yang wrote: > > 于 2019年11月7日 GMT+08:00 上午12:05:41, Tiezhu Yang <yangtiezhu@loongson.cn> 写到: >> Enable DMI scanning on the MIPS architecture, this setups DMI >> identifiers >> (dmi_system_id) for printing it out on task dumps and prepares DIMM >> entry >> information (dmi_memdev_info) from the SMBIOS table. With this patch, >> the >> driver can easily match various of mainboards. >> >> In the SMBIOS reference specification, the table anchor string "_SM_" >> is >> present in the address range 0xF0000 to 0xFFFFF on a 16-byte boundary, >> but there exists a special case for loongson platform, when call >> function >> dmi_early_remap, it should specify the start address to 0xFFFE000 due >> to >> it is reserved for SMBIOS and can be normally access in the BIOS. >> >> Co-developed-by: Yinglu Yang <yangyinglu@loongson.cn> >> Signed-off-by: Yinglu Yang <yangyinglu@loongson.cn> >> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> >> --- >> arch/mips/Kconfig | 12 ++++++++++++ >> arch/mips/include/asm/dmi.h | 43 >> +++++++++++++++++++++++++++++++++++++++++++ >> arch/mips/kernel/setup.c | 2 ++ >> 3 files changed, 57 insertions(+) >> create mode 100644 arch/mips/include/asm/dmi.h >> >> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig >> index 7cb8947..0a67b18 100644 >> --- a/arch/mips/Kconfig >> +++ b/arch/mips/Kconfig >> @@ -2757,6 +2757,18 @@ config HW_PERF_EVENTS >> Enable hardware performance counter support for perf events. If >> disabled, perf events will use software events only. >> >> +# Mark as expert because too many people got it wrong. >> +# The code disables itself when not needed. >> +config DMI >> + default y >> + select DMI_SCAN_MACHINE_NON_EFI_FALLBACK >> + bool "Enable DMI scanning" if EXPERT >> + help >> + Enabled scanning of DMI to identify machine quirks. Say Y >> + here unless you have verified that your setup is not >> + affected by entries in the DMI blacklist. Required by PNP >> + BIOS code. >> + >> config SMP >> bool "Multi-Processing support" >> depends on SYS_SUPPORTS_SMP >> diff --git a/arch/mips/include/asm/dmi.h b/arch/mips/include/asm/dmi.h >> new file mode 100644 >> index 0000000..1f3da37 >> --- /dev/null >> +++ b/arch/mips/include/asm/dmi.h >> @@ -0,0 +1,43 @@ >> +/* SPDX-License-Identifier: GPL-2.0 */ >> +#ifndef _ASM_MIPS_DMI_H >> +#define _ASM_MIPS_DMI_H >> + >> +#define dmi_early_remap mips_early_memremap >> +#define dmi_early_unmap mips_early_memunmap >> +#define dmi_remap(_x, _l) mips_memremap(_x, _l, MEMREMAP_WB) >> +#define dmi_unmap(_x) mips_memunmap(_x) >> + >> +#define dmi_alloc(l) memblock_alloc_low(l, PAGE_SIZE) >> + >> +void __init *mips_early_memremap(resource_size_t phys_addr, unsigned >> long size) >> +{ >> +#if defined(CONFIG_MACH_LOONGSON64) >> + if (phys_addr == 0xF0000) >> + phys_addr = 0xFFFE000; >> + >> + return (void *)TO_CAC(phys_addr); >> +#else >> + return NULL; >> +#endif >> +} > Hi Tiezhu, > > It is really tricky to hijack dmi address here during remap. > I think we should set the dmi table address at dmi_scan.c by a marco or something else rather than hijack it during remap. Hi Jiaxun, Thanks for your review. I agree with you, let me think about it and try to find a proper way, and then I will send a v2 patch. > > Btw: Probably we should set DMI default y when MACH_LOONGSON64 is set? CONFIG_DMI is set to y by default, I think there is no need to select DMI when set CONFIG_MACH_LOONGSON64. Thanks, Tiezhu Yang > > Thanks. > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] MIPS: Scan the DMI system information 2019-11-07 2:42 ` Tiezhu Yang @ 2019-11-07 3:42 ` Jiaxun Yang 0 siblings, 0 replies; 7+ messages in thread From: Jiaxun Yang @ 2019-11-07 3:42 UTC (permalink / raw) To: Tiezhu Yang, Paul Burton, Ralf Baechle, James Hogan Cc: linux-mips, linux-kernel, Yinglu Yang 于 2019年11月7日 GMT+08:00 上午10:42:23, Tiezhu Yang <yangtiezhu@loongson.cn> 写到: >On 11/07/2019 08:35 AM, Jiaxun Yang wrote: >> >> 于 2019年11月7日 GMT+08:00 上午12:05:41, Tiezhu Yang ><yangtiezhu@loongson.cn> 写到: >>> Enable DMI scanning on the MIPS architecture, this setups DMI >>> identifiers >>> (dmi_system_id) for printing it out on task dumps and prepares DIMM >>> entry >>> information (dmi_memdev_info) from the SMBIOS table. With this >patch, >>> the >>> driver can easily match various of mainboards. >>> >>> In the SMBIOS reference specification, the table anchor string >"_SM_" >>> is >>> present in the address range 0xF0000 to 0xFFFFF on a 16-byte >boundary, >>> but there exists a special case for loongson platform, when call >>> function >>> dmi_early_remap, it should specify the start address to 0xFFFE000 >due >>> to >>> it is reserved for SMBIOS and can be normally access in the BIOS. >>> >>> Co-developed-by: Yinglu Yang <yangyinglu@loongson.cn> >>> Signed-off-by: Yinglu Yang <yangyinglu@loongson.cn> >>> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> >>> --- >>> arch/mips/Kconfig | 12 ++++++++++++ >>> arch/mips/include/asm/dmi.h | 43 >>> +++++++++++++++++++++++++++++++++++++++++++ >>> arch/mips/kernel/setup.c | 2 ++ >>> 3 files changed, 57 insertions(+) >>> create mode 100644 arch/mips/include/asm/dmi.h >>> >>> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig >>> index 7cb8947..0a67b18 100644 >>> --- a/arch/mips/Kconfig >>> +++ b/arch/mips/Kconfig >>> @@ -2757,6 +2757,18 @@ config HW_PERF_EVENTS >>> Enable hardware performance counter support for perf events. If >>> disabled, perf events will use software events only. >>> >>> +# Mark as expert because too many people got it wrong. >>> +# The code disables itself when not needed. >>> +config DMI >>> + default y >>> + select DMI_SCAN_MACHINE_NON_EFI_FALLBACK >>> + bool "Enable DMI scanning" if EXPERT >>> + help >>> + Enabled scanning of DMI to identify machine quirks. Say Y >>> + here unless you have verified that your setup is not >>> + affected by entries in the DMI blacklist. Required by PNP >>> + BIOS code. >>> + >>> config SMP >>> bool "Multi-Processing support" >>> depends on SYS_SUPPORTS_SMP >>> diff --git a/arch/mips/include/asm/dmi.h >b/arch/mips/include/asm/dmi.h >>> new file mode 100644 >>> index 0000000..1f3da37 >>> --- /dev/null >>> +++ b/arch/mips/include/asm/dmi.h >>> @@ -0,0 +1,43 @@ >>> +/* SPDX-License-Identifier: GPL-2.0 */ >>> +#ifndef _ASM_MIPS_DMI_H >>> +#define _ASM_MIPS_DMI_H >>> + >>> +#define dmi_early_remap mips_early_memremap >>> +#define dmi_early_unmap mips_early_memunmap >>> +#define dmi_remap(_x, _l) mips_memremap(_x, _l, MEMREMAP_WB) >>> +#define dmi_unmap(_x) mips_memunmap(_x) >>> + >>> +#define dmi_alloc(l) memblock_alloc_low(l, PAGE_SIZE) >>> + >>> +void __init *mips_early_memremap(resource_size_t phys_addr, >unsigned >>> long size) >>> +{ >>> +#if defined(CONFIG_MACH_LOONGSON64) >>> + if (phys_addr == 0xF0000) >>> + phys_addr = 0xFFFE000; >>> + >>> + return (void *)TO_CAC(phys_addr); >>> +#else >>> + return NULL; >>> +#endif >>> +} >> Hi Tiezhu, >> >> It is really tricky to hijack dmi address here during remap. >> I think we should set the dmi table address at dmi_scan.c by a marco >or something else rather than hijack it during remap. > >Hi Jiaxun, > >Thanks for your review. I agree with you, let me think about it and try >to >find a proper way, and then I will send a v2 patch. > >> >> Btw: Probably we should set DMI default y when MACH_LOONGSON64 is >set? > >CONFIG_DMI is set to y by default, I think there is no need to select >DMI when >set CONFIG_MACH_LOONGSON64. Sorry, I meant only default to y when MACH_LOONGSON64 is set or even depends on MACH_LOONGSON64. As Loongson is the only known MIPS platform that supports DMI. Default y unconditionally may lead to regression on other MIPS platforms. > >Thanks, > >Tiezhu Yang > >> >> Thanks. >> -- Jiaxun Yang ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-11-07 11:08 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <5959f904-5c46-30a7-7a4f-17f692aca320@loongson.cn> 2019-11-07 9:26 ` [PATCH] MIPS: Scan the DMI system information Tiezhu Yang 2019-11-07 10:42 ` Jean Delvare 2019-11-07 11:07 ` Tiezhu Yang 2019-11-06 16:05 Tiezhu Yang 2019-11-07 0:35 ` Jiaxun Yang 2019-11-07 2:42 ` Tiezhu Yang 2019-11-07 3:42 ` Jiaxun Yang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).