[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 amd-gfx
mailing list