aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0176-drm-amdgpu-Do-not-directly-dereference-pointers-to-B.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0176-drm-amdgpu-Do-not-directly-dereference-pointers-to-B.patch')
-rw-r--r--meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0176-drm-amdgpu-Do-not-directly-dereference-pointers-to-B.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0176-drm-amdgpu-Do-not-directly-dereference-pointers-to-B.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0176-drm-amdgpu-Do-not-directly-dereference-pointers-to-B.patch
new file mode 100644
index 00000000..71fad078
--- /dev/null
+++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0176-drm-amdgpu-Do-not-directly-dereference-pointers-to-B.patch
@@ -0,0 +1,59 @@
+From 18da4340e651dd41d698fc54084b9139b614539b Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Fri, 17 Apr 2015 10:50:02 -0400
+Subject: [PATCH 0176/1050] drm/amdgpu: Do not directly dereference pointers to
+ BIOS area.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Use readb() and memcpy_fromio() accessors instead.
+
+Ported from radeon commit:
+f2c9e560b406f2f6b14b345c7da33467dee9cdf2
+
+Acked-by: Christian König <christian.koenig@amd.com>
+Acked-by: Jammy Zhou <Jammy.Zhou@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
+index d7a3ab2..ceb444f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c
+@@ -75,7 +75,7 @@ static bool igp_read_bios_from_vram(struct amdgpu_device *adev)
+
+ bool amdgpu_read_bios(struct amdgpu_device *adev)
+ {
+- uint8_t __iomem *bios;
++ uint8_t __iomem *bios, val1, val2;
+ size_t size;
+
+ adev->bios = NULL;
+@@ -85,15 +85,19 @@ bool amdgpu_read_bios(struct amdgpu_device *adev)
+ return false;
+ }
+
+- if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) {
++ val1 = readb(&bios[0]);
++ val2 = readb(&bios[1]);
++
++ if (size == 0 || val1 != 0x55 || val2 != 0xaa) {
+ pci_unmap_rom(adev->pdev, bios);
+ return false;
+ }
+- adev->bios = kmemdup(bios, size, GFP_KERNEL);
++ adev->bios = kzalloc(size, GFP_KERNEL);
+ if (adev->bios == NULL) {
+ pci_unmap_rom(adev->pdev, bios);
+ return false;
+ }
++ memcpy_fromio(adev->bios, bios, size);
+ pci_unmap_rom(adev->pdev, bios);
+ return true;
+ }
+--
+1.9.1
+