Commit a28e4b67 authored by Samuel Holland's avatar Samuel Holland Committed by Andrew Morton

drm/amd/display: use ARCH_HAS_KERNEL_FPU_SUPPORT

Now that all previously-supported architectures select
ARCH_HAS_KERNEL_FPU_SUPPORT, this code can depend on that symbol instead
of the existing list of architectures.  It can also take advantage of the
common kernel-mode FPU API and method of adjusting CFLAGS.

Link: https://lkml.kernel.org/r/20240329072441.591471-14-samuel.holland@sifive.comSigned-off-by: default avatarSamuel Holland <samuel.holland@sifive.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Acked-by: Christian König <christian.koenig@amd.com> 
Cc: Borislav Petkov (AMD) <bp@alien8.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Masahiro Yamada <masahiroy@kernel.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Nicolas Schier <nicolas@fjasle.eu>
Cc: Palmer Dabbelt <palmer@rivosinc.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: WANG Xuerui <git@xen0n.name>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 06a990b6
...@@ -8,7 +8,7 @@ config DRM_AMD_DC ...@@ -8,7 +8,7 @@ config DRM_AMD_DC
depends on BROKEN || !CC_IS_CLANG || ARM64 || RISCV || SPARC64 || X86_64 depends on BROKEN || !CC_IS_CLANG || ARM64 || RISCV || SPARC64 || X86_64
select SND_HDA_COMPONENT if SND_HDA_CORE select SND_HDA_COMPONENT if SND_HDA_CORE
# !CC_IS_CLANG: https://github.com/ClangBuiltLinux/linux/issues/1752 # !CC_IS_CLANG: https://github.com/ClangBuiltLinux/linux/issues/1752
select DRM_AMD_DC_FP if (X86 || LOONGARCH || (PPC64 && ALTIVEC) || (ARM64 && KERNEL_MODE_NEON && !CC_IS_CLANG)) select DRM_AMD_DC_FP if ARCH_HAS_KERNEL_FPU_SUPPORT && (!ARM64 || !CC_IS_CLANG)
help help
Choose this option if you want to use the new display engine Choose this option if you want to use the new display engine
support for AMDGPU. This adds required support for Vega and support for AMDGPU. This adds required support for Vega and
......
...@@ -26,16 +26,7 @@ ...@@ -26,16 +26,7 @@
#include "dc_trace.h" #include "dc_trace.h"
#if defined(CONFIG_X86) #include <linux/fpu.h>
#include <asm/fpu/api.h>
#elif defined(CONFIG_PPC64)
#include <asm/switch_to.h>
#include <asm/cputable.h>
#elif defined(CONFIG_ARM64)
#include <asm/neon.h>
#elif defined(CONFIG_LOONGARCH)
#include <asm/fpu.h>
#endif
/** /**
* DOC: DC FPU manipulation overview * DOC: DC FPU manipulation overview
...@@ -87,16 +78,9 @@ void dc_fpu_begin(const char *function_name, const int line) ...@@ -87,16 +78,9 @@ void dc_fpu_begin(const char *function_name, const int line)
WARN_ON_ONCE(!in_task()); WARN_ON_ONCE(!in_task());
preempt_disable(); preempt_disable();
depth = __this_cpu_inc_return(fpu_recursion_depth); depth = __this_cpu_inc_return(fpu_recursion_depth);
if (depth == 1) { if (depth == 1) {
#if defined(CONFIG_X86) || defined(CONFIG_LOONGARCH) BUG_ON(!kernel_fpu_available());
kernel_fpu_begin(); kernel_fpu_begin();
#elif defined(CONFIG_PPC64)
if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE))
enable_kernel_fp();
#elif defined(CONFIG_ARM64)
kernel_neon_begin();
#endif
} }
TRACE_DCN_FPU(true, function_name, line, depth); TRACE_DCN_FPU(true, function_name, line, depth);
...@@ -118,14 +102,7 @@ void dc_fpu_end(const char *function_name, const int line) ...@@ -118,14 +102,7 @@ void dc_fpu_end(const char *function_name, const int line)
depth = __this_cpu_dec_return(fpu_recursion_depth); depth = __this_cpu_dec_return(fpu_recursion_depth);
if (depth == 0) { if (depth == 0) {
#if defined(CONFIG_X86) || defined(CONFIG_LOONGARCH)
kernel_fpu_end(); kernel_fpu_end();
#elif defined(CONFIG_PPC64)
if (!cpu_has_feature(CPU_FTR_FPU_UNAVAILABLE))
disable_kernel_fp();
#elif defined(CONFIG_ARM64)
kernel_neon_end();
#endif
} else { } else {
WARN_ON_ONCE(depth < 0); WARN_ON_ONCE(depth < 0);
} }
......
...@@ -25,40 +25,8 @@ ...@@ -25,40 +25,8 @@
# It provides the general basic services required by other DAL # It provides the general basic services required by other DAL
# subcomponents. # subcomponents.
ifdef CONFIG_X86 dml_ccflags := $(CC_FLAGS_FPU)
dml_ccflags-$(CONFIG_CC_IS_GCC) := -mhard-float dml_rcflags := $(CC_FLAGS_NO_FPU)
dml_ccflags := $(dml_ccflags-y) -msse
endif
ifdef CONFIG_PPC64
dml_ccflags := -mhard-float
endif
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
endif
endif
ifdef CONFIG_X86
ifdef IS_OLD_GCC
# Stack alignment mismatch, proceed with caution.
# GCC < 7.1 cannot compile code using `double` and -mpreferred-stack-boundary=3
# (8B stack alignment).
dml_ccflags += -mpreferred-stack-boundary=4
else
dml_ccflags += -msse2
endif
endif
ifneq ($(CONFIG_FRAME_WARN),0) ifneq ($(CONFIG_FRAME_WARN),0)
ifeq ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y) ifeq ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y)
......
...@@ -24,40 +24,8 @@ ...@@ -24,40 +24,8 @@
# #
# Makefile for dml2. # Makefile for dml2.
ifdef CONFIG_X86 dml2_ccflags := $(CC_FLAGS_FPU)
dml2_ccflags-$(CONFIG_CC_IS_GCC) := -mhard-float dml2_rcflags := $(CC_FLAGS_NO_FPU)
dml2_ccflags := $(dml2_ccflags-y) -msse
endif
ifdef CONFIG_PPC64
dml2_ccflags := -mhard-float
endif
ifdef CONFIG_ARM64
dml2_rcflags := -mgeneral-regs-only
endif
ifdef CONFIG_LOONGARCH
dml2_ccflags := -mfpu=64
dml2_rcflags := -msoft-float
endif
ifdef CONFIG_CC_IS_GCC
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
IS_OLD_GCC = 1
endif
endif
ifdef CONFIG_X86
ifdef IS_OLD_GCC
# Stack alignment mismatch, proceed with caution.
# GCC < 7.1 cannot compile code using `double` and -mpreferred-stack-boundary=3
# (8B stack alignment).
dml2_ccflags += -mpreferred-stack-boundary=4
else
dml2_ccflags += -msse2
endif
endif
ifneq ($(CONFIG_FRAME_WARN),0) ifneq ($(CONFIG_FRAME_WARN),0)
ifeq ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y) ifeq ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment