Hi, Hamza, On Fri, May 5, 2023 at 9:37 PM Hamza Mahfooz <hamza.mahfooz@xxxxxxx> 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@xxxxxxx/ I have tested hotplug, resolution changing and kms_flip in IGT, all of them works fine. Huacai > > > > > Signed-off-by: WANG Xuerui <kernel@xxxxxxxxxx> > > Signed-off-by: Huacai Chen <chenhuacai@xxxxxxxxxxx> > > --- > > 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(); > > #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 > -- > Hamza >