diff options
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.patch | 59 |
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 + |