drm/amdgpu: fix bad address translation for sienna_cichlid
authorjsg <jsg@openbsd.org>
Mon, 19 Jul 2021 10:30:39 +0000 (10:30 +0000)
committerjsg <jsg@openbsd.org>
Mon, 19 Jul 2021 10:30:39 +0000 (10:30 +0000)
From Stanley.Yang
a2122e07920456e5d43f32e61d52be59634ddcab in linux 5.10.y/5.10.51
6ec598cc9dfbf40433e94a2ed1a622e3ef80268b in mainline linux

sys/dev/pci/drm/amd/amdgpu/amdgpu_umc.h
sys/dev/pci/drm/amd/amdgpu/umc_v8_7.c

index 1838144..bda4438 100644 (file)
 #ifndef __AMDGPU_UMC_H__
 #define __AMDGPU_UMC_H__
 
+/*
+ * (addr / 256) * 4096, the higher 26 bits in ErrorAddr
+ * is the index of 4KB block
+ */
+#define ADDR_OF_4KB_BLOCK(addr)                        (((addr) & ~0xffULL) << 4)
 /*
  * (addr / 256) * 8192, the higher 26 bits in ErrorAddr
  * is the index of 8KB block
index 5665c77..afbbe9f 100644 (file)
@@ -233,7 +233,7 @@ static void umc_v8_7_query_error_address(struct amdgpu_device *adev,
                err_addr &= ~((0x1ULL << lsb) - 1);
 
                /* translate umc channel address to soc pa, 3 parts are included */
-               retired_page = ADDR_OF_8KB_BLOCK(err_addr) |
+               retired_page = ADDR_OF_4KB_BLOCK(err_addr) |
                                ADDR_OF_256B_BLOCK(channel_index) |
                                OFFSET_IN_256B_BLOCK(err_addr);