![Romain Perier](/assets/img/avatar_default.png)
This commits adds support for the AMD Catalyst Linux driver 15.9 (15.201.1151). It includes the fglrx kernel module with various fixes to make it work with at least Linux kernel 4.4 LTS, the userspace OpenGL stack and the xorg driver module. Signed-off-by: Romain Perier <romain.perier@free-electrons.com> Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr> [Thomas: - fixup whitespace issues noticed by Yann. - register AMD_CATALYST_PREPARE_MODULE as a post-patch hook rather than calling it during the configure step, also suggested by Yann.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
79 lines
2.6 KiB
Diff
79 lines
2.6 KiB
Diff
From 54b230e26a1889c08507e791ab043f8a4b4ff771 Mon Sep 17 00:00:00 2001
|
|
From: Romain Perier <romain.perier@free-electrons.com>
|
|
Date: Thu, 7 Jul 2016 14:40:53 +0200
|
|
Subject: [PATCH] Add support for Linux 4.4
|
|
|
|
It fixes various things like the use of seq_printf because its API
|
|
changed. It also replaces the call to mtrr_add and mtrr_del by
|
|
arch_phys_wc_add and arch_phys_wc_del because these symbols are
|
|
no longer exported for Linux >= 4.3.x.
|
|
|
|
Signed-off-by: Romain Perier <romain.perier@free-electrons.com>
|
|
---
|
|
common/lib/modules/fglrx/build_mod/firegl_public.c | 21 +++++++++++++++++++++
|
|
1 file changed, 21 insertions(+)
|
|
|
|
diff --git a/common/lib/modules/fglrx/build_mod/firegl_public.c b/common/lib/modules/fglrx/build_mod/firegl_public.c
|
|
index bb67bba..b4b2d30 100755
|
|
--- a/common/lib/modules/fglrx/build_mod/firegl_public.c
|
|
+++ b/common/lib/modules/fglrx/build_mod/firegl_public.c
|
|
@@ -636,9 +636,16 @@ static int firegl_major_proc_read(struct seq_file *m, void* data)
|
|
|
|
len = snprintf(buf, request, "%d\n", major);
|
|
#else
|
|
+
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)
|
|
+ seq_printf(m, "%d\n", major);
|
|
+ len = 0;
|
|
+#else
|
|
len = seq_printf(m, "%d\n", major);
|
|
#endif
|
|
|
|
+#endif
|
|
+
|
|
KCL_DEBUG1(FN_FIREGL_PROC, "return len=%i\n",len);
|
|
|
|
return len;
|
|
@@ -3432,7 +3439,11 @@ int ATI_API_CALL KCL_MEM_MTRR_Support(void)
|
|
int ATI_API_CALL KCL_MEM_MTRR_AddRegionWc(unsigned long base, unsigned long size)
|
|
{
|
|
#ifdef CONFIG_MTRR
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)
|
|
+ return arch_phys_wc_add(base, size);
|
|
+#else
|
|
return mtrr_add(base, size, MTRR_TYPE_WRCOMB, 1);
|
|
+#endif
|
|
#else /* !CONFIG_MTRR */
|
|
return -EPERM;
|
|
#endif /* !CONFIG_MTRR */
|
|
@@ -3441,7 +3452,12 @@ int ATI_API_CALL KCL_MEM_MTRR_AddRegionWc(unsigned long base, unsigned long size
|
|
int ATI_API_CALL KCL_MEM_MTRR_DeleteRegion(int reg, unsigned long base, unsigned long size)
|
|
{
|
|
#ifdef CONFIG_MTRR
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)
|
|
+ arch_phys_wc_del(reg);
|
|
+ return 0;
|
|
+#else
|
|
return mtrr_del(reg, base, size);
|
|
+#endif
|
|
#else /* !CONFIG_MTRR */
|
|
return -EPERM;
|
|
#endif /* !CONFIG_MTRR */
|
|
@@ -6505,8 +6521,13 @@ static int KCL_fpu_save_init(struct task_struct *tsk)
|
|
if (!(fpu->state->xsave.xsave_hdr.xstate_bv & XSTATE_FP))
|
|
#else
|
|
_copy_xregs_to_kernel(&fpu->state.xsave);
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0)
|
|
+ if (!(fpu->state.xsave.header.xfeatures & XFEATURE_MASK_FP))
|
|
+#else
|
|
if (!(fpu->state.xsave.header.xfeatures & XSTATE_FP))
|
|
#endif
|
|
+
|
|
+#endif
|
|
return 1;
|
|
} else if (static_cpu_has(X86_FEATURE_FXSR)) {
|
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0)
|
|
--
|
|
2.8.1
|
|
|