[PATCH V2] drm/amdgpu/display: Enable DC_FP for LoongArch
WANG Xuerui
kernel at xen0n.name
Sat May 6 14:14:59 UTC 2023
On 2023/5/5 19: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.
Some grammatical fixes and paraphrasing:
"LoongArch now provides kernel_fpu_{begin,end} that are used like the
x86 counterparts in commit 2b3bd32ea3a22ea2d ("LoongArch: Provide kernel
fpu functions"), so we can now implement DRM_AMD_DC_FP on LoongArch for
supporting more DCN devices."
>
> Signed-off-by: WANG Xuerui <kernel at xen0n.name>
> Signed-off-by: Huacai Chen <chenhuacai at loongson.cn>
I just finished my tests according to the link above and all seems fine.
* Board: A2101 (Loongson 3A5000 with LS7A1000 bridge)
- with the firmware provided at [1]
* GPU: RX 6400 (PowerColor ITX RX6400 4GB GDDR6)
* Display: Dell P2317H (connected via DisplayPort)
* Kernel: next-20230505 with this patch (with the conflict resolved)
* Sysroot: up-to-date Gentoo/LoongArch
I've tested:
* Desktop sessions: Xfce4, Plasma Wayland
* Hot-plugging
- at tty, at sddm, inside Plasma Wayland session, multiple times each
* Changing resolutions
* kms_flip tests: every non-skipped case passed (I can't test
dual-monitor right now)
[1]: https://github.com/loongson/Firmware/tree/main/5000Series/PC/A2101
Hence it's:
Tested-by: WANG Xuerui <kernel at xen0n.name>
> ---
> 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();
And with the conflict here with linux-next resolved then we may be good
to go.
> #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