[PATCH V2] drm/amdgpu/display: Enable DC_FP for LoongArch

WANG Xuerui kernel at xen0n.name
Fri May 5 17:45:54 UTC 2023


Hi,

On 5/5/23 21:39, Hamza Mahfooz wrote:
>
> Hey Huacai,
>
> On 5/5/23 07:32, Huacai Chen wrote:
>> Now LoongArch provides kernel_fpu_begin() and kernel_fpu_end() in commit
>> 2b3bd32ea3a22ea2d ("LoongArch: Provide kernel fpu functions"), so we can
>> enable DC_FP for DCN devices.
>
> Have you had the chance to test how well this is working on actual
> hardware, or was it only compile tested? If it was only compile tested,
> it would be great if you could run some tests. Please see the following
> for more details:
> https://lore.kernel.org/amd-gfx/8eb69dfb-ae35-dbf2-3f82-e8cc00e5389a@amd.com/ 
>
>
Thanks for the helpful link!

I did test an earlier version of this patch along with the 
arch/loongarch kernel FPU bits before that patch got upstreamed, with a 
RX 6400 (BEIGE_GOBY) on a Loongson 3A5000 + LS7A1000 system (by far the 
most popular combination for LoongArch desktops). Things like Plasma 
Wayland session or glmark2 work just fine, although I didn't go for the 
more complete testing as detailed in the mail you linked to. I'll try 
going through that procedure in the next 1~2 days when I have time & get 
physical access to that box.

On a side note, I had to modprobe amdgpu with runpm=0, otherwise my 
dmesg gets flooded with PSP getting resumed every 8~10 seconds or so. I 
currently have none of the connectors plugged in. I didn't notice any 
similar reports on the Internet so I don't know if it's due to platform 
quirks or not.

>>
>> Signed-off-by: WANG Xuerui <kernel at xen0n.name>
>> Signed-off-by: Huacai Chen <chenhuacai at loongson.cn>
>> ---
>> V2: Update commit message to add the commit which provides kernel fpu
>>      functions.
>>
>>   drivers/gpu/drm/amd/display/Kconfig            | 2 +-
>>   drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c | 6 ++++--
>>   drivers/gpu/drm/amd/display/dc/dml/Makefile    | 5 +++++
>>   3 files changed, 10 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/display/Kconfig 
>> b/drivers/gpu/drm/amd/display/Kconfig
>> index 2d8e55e29637..49df073962d5 100644
>> --- a/drivers/gpu/drm/amd/display/Kconfig
>> +++ b/drivers/gpu/drm/amd/display/Kconfig
>> @@ -8,7 +8,7 @@ config DRM_AMD_DC
>>       depends on BROKEN || !CC_IS_CLANG || X86_64 || SPARC64 || ARM64
>>       select SND_HDA_COMPONENT if SND_HDA_CORE
>>       # !CC_IS_CLANG: 
>> https://github.com/ClangBuiltLinux/linux/issues/1752
>> -    select DRM_AMD_DC_FP if (X86 || (PPC64 && ALTIVEC) || (ARM64 && 
>> KERNEL_MODE_NEON && !CC_IS_CLANG))
>> +    select DRM_AMD_DC_FP if (X86 || LOONGARCH || (PPC64 && ALTIVEC) 
>> || (ARM64 && KERNEL_MODE_NEON && !CC_IS_CLANG))
>>       help
>>         Choose this option if you want to use the new display engine
>>         support for AMDGPU. This adds required support for Vega and
>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c 
>> b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c
>> index 1743ca0a3641..86f4c0e04654 100644
>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/dc_fpu.c
>> @@ -33,6 +33,8 @@
>>   #include <asm/cputable.h>
>>   #elif defined(CONFIG_ARM64)
>>   #include <asm/neon.h>
>> +#elif defined(CONFIG_LOONGARCH)
>> +#include <asm/fpu.h>
>>   #endif
>>     /**
>> @@ -88,7 +90,7 @@ void dc_fpu_begin(const char *function_name, const 
>> int line)
>>       *pcpu += 1;
>>         if (*pcpu == 1) {
>> -#if defined(CONFIG_X86)
>> +#if defined(CONFIG_X86) || defined(CONFIG_LOONGARCH)
>>           kernel_fpu_begin();
This is going to conflict with commit b1bcdd409d2d ("drm/amd/display: 
Disable migration to ensure consistency of per-CPU variable"), which is 
present in next-20230505. Resolution is trivial though.
>>   #elif defined(CONFIG_PPC64)
>>           if (cpu_has_feature(CPU_FTR_VSX_COMP)) {
>> @@ -127,7 +129,7 @@ void dc_fpu_end(const char *function_name, const 
>> int line)
>>       pcpu = get_cpu_ptr(&fpu_recursion_depth);
>>       *pcpu -= 1;
>>       if (*pcpu <= 0) {
>> -#if defined(CONFIG_X86)
>> +#if defined(CONFIG_X86) || defined(CONFIG_LOONGARCH)
>>           kernel_fpu_end();
>>   #elif defined(CONFIG_PPC64)
>>           if (cpu_has_feature(CPU_FTR_VSX_COMP)) {
>> diff --git a/drivers/gpu/drm/amd/display/dc/dml/Makefile 
>> b/drivers/gpu/drm/amd/display/dc/dml/Makefile
>> index 01db035589c5..542962a93e8f 100644
>> --- a/drivers/gpu/drm/amd/display/dc/dml/Makefile
>> +++ b/drivers/gpu/drm/amd/display/dc/dml/Makefile
>> @@ -38,6 +38,11 @@ ifdef CONFIG_ARM64
>>   dml_rcflags := -mgeneral-regs-only
>>   endif
>>   +ifdef CONFIG_LOONGARCH
>> +dml_ccflags := -mfpu=64
>> +dml_rcflags := -msoft-float
>> +endif
>> +
>>   ifdef CONFIG_CC_IS_GCC
>>   ifneq ($(call gcc-min-version, 70100),y)
>>   IS_OLD_GCC = 1

-- 
WANG "xen0n" Xuerui

Linux/LoongArch mailing list: https://lore.kernel.org/loongarch/



More information about the dri-devel mailing list