Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amdgpu: Add pcie ext access to register block

Move pcie extended access (64-bit address) to register access block.

Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Lijo Lazar and committed by
Alex Deucher
5312d68a e84d7e71

+34 -28
+2 -4
drivers/gpu/drm/amd/amdgpu/amdgpu.h
··· 904 904 struct amdgpu_reg_access reg; 905 905 /* protects concurrent PCIE register access */ 906 906 spinlock_t pcie_idx_lock; 907 - amdgpu_rreg_ext_t pcie_rreg_ext; 908 - amdgpu_wreg_ext_t pcie_wreg_ext; 909 907 amdgpu_rreg64_t pcie_rreg64; 910 908 amdgpu_wreg64_t pcie_wreg64; 911 909 amdgpu_rreg64_ext_t pcie_rreg64_ext; ··· 1306 1308 #define WREG32_PCIE(reg, v) amdgpu_reg_pcie_wr32(adev, (reg), (v)) 1307 1309 #define RREG32_PCIE_PORT(reg) amdgpu_reg_pciep_rd32(adev, (reg)) 1308 1310 #define WREG32_PCIE_PORT(reg, v) amdgpu_reg_pciep_wr32(adev, (reg), (v)) 1309 - #define RREG32_PCIE_EXT(reg) adev->pcie_rreg_ext(adev, (reg)) 1310 - #define WREG32_PCIE_EXT(reg, v) adev->pcie_wreg_ext(adev, (reg), (v)) 1311 + #define RREG32_PCIE_EXT(reg) amdgpu_reg_pcie_ext_rd32(adev, (reg)) 1312 + #define WREG32_PCIE_EXT(reg, v) amdgpu_reg_pcie_ext_wr32(adev, (reg), (v)) 1311 1313 #define RREG64_PCIE(reg) adev->pcie_rreg64(adev, (reg)) 1312 1314 #define WREG64_PCIE(reg, v) adev->pcie_wreg64(adev, (reg), (v)) 1313 1315 #define RREG64_PCIE_EXT(reg) adev->pcie_rreg64_ext(adev, (reg))
-17
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
··· 858 858 return adev->nbio.funcs->get_rev_id(adev); 859 859 } 860 860 861 - static uint32_t amdgpu_invalid_rreg_ext(struct amdgpu_device *adev, uint64_t reg) 862 - { 863 - dev_err(adev->dev, "Invalid callback to read register 0x%llX\n", reg); 864 - BUG(); 865 - return 0; 866 - } 867 - 868 - static void amdgpu_invalid_wreg_ext(struct amdgpu_device *adev, uint64_t reg, uint32_t v) 869 - { 870 - dev_err(adev->dev, 871 - "Invalid callback to write register 0x%llX with 0x%08X\n", reg, 872 - v); 873 - BUG(); 874 - } 875 - 876 861 /** 877 862 * amdgpu_invalid_rreg64 - dummy 64 bit reg read function 878 863 * ··· 3740 3755 3741 3756 amdgpu_reg_access_init(adev); 3742 3757 3743 - adev->pcie_rreg_ext = &amdgpu_invalid_rreg_ext; 3744 - adev->pcie_wreg_ext = &amdgpu_invalid_wreg_ext; 3745 3758 adev->pcie_rreg64 = &amdgpu_invalid_rreg64; 3746 3759 adev->pcie_wreg64 = &amdgpu_invalid_wreg64; 3747 3760 adev->pcie_rreg64_ext = &amdgpu_invalid_rreg64_ext;
+21
drivers/gpu/drm/amd/amdgpu/amdgpu_reg_access.c
··· 61 61 62 62 adev->reg.pcie.rreg = NULL; 63 63 adev->reg.pcie.wreg = NULL; 64 + adev->reg.pcie.rreg_ext = NULL; 65 + adev->reg.pcie.wreg_ext = NULL; 64 66 adev->reg.pcie.port_rreg = NULL; 65 67 adev->reg.pcie.port_wreg = NULL; 66 68 } ··· 202 200 return; 203 201 } 204 202 adev->reg.pcie.wreg(adev, reg, v); 203 + } 204 + 205 + uint32_t amdgpu_reg_pcie_ext_rd32(struct amdgpu_device *adev, uint64_t reg) 206 + { 207 + if (!adev->reg.pcie.rreg_ext) { 208 + dev_err_once(adev->dev, "PCIE EXT register read not supported\n"); 209 + return 0; 210 + } 211 + return adev->reg.pcie.rreg_ext(adev, reg); 212 + } 213 + 214 + void amdgpu_reg_pcie_ext_wr32(struct amdgpu_device *adev, uint64_t reg, 215 + uint32_t v) 216 + { 217 + if (!adev->reg.pcie.wreg_ext) { 218 + dev_err_once(adev->dev, "PCIE EXT register write not supported\n"); 219 + return; 220 + } 221 + adev->reg.pcie.wreg_ext(adev, reg, v); 205 222 } 206 223 207 224 uint32_t amdgpu_reg_pciep_rd32(struct amdgpu_device *adev, uint32_t reg)
+7 -3
drivers/gpu/drm/amd/amdgpu/amdgpu_reg_access.h
··· 31 31 32 32 typedef uint32_t (*amdgpu_rreg_t)(struct amdgpu_device *, uint32_t); 33 33 typedef void (*amdgpu_wreg_t)(struct amdgpu_device *, uint32_t, uint32_t); 34 + typedef uint32_t (*amdgpu_rreg_ext_t)(struct amdgpu_device *, uint64_t); 35 + typedef void (*amdgpu_wreg_ext_t)(struct amdgpu_device *, uint64_t, uint32_t); 34 36 35 37 typedef uint32_t (*amdgpu_block_rreg_t)(struct amdgpu_device *, uint32_t, 36 38 uint32_t); ··· 54 52 struct amdgpu_reg_pcie_ind { 55 53 amdgpu_rreg_t rreg; 56 54 amdgpu_wreg_t wreg; 55 + amdgpu_rreg_ext_t rreg_ext; 56 + amdgpu_wreg_ext_t wreg_ext; 57 57 amdgpu_rreg_t port_rreg; 58 58 amdgpu_wreg_t port_wreg; 59 59 }; ··· 89 85 uint32_t reg, uint32_t v); 90 86 uint32_t amdgpu_reg_pcie_rd32(struct amdgpu_device *adev, uint32_t reg); 91 87 void amdgpu_reg_pcie_wr32(struct amdgpu_device *adev, uint32_t reg, uint32_t v); 88 + uint32_t amdgpu_reg_pcie_ext_rd32(struct amdgpu_device *adev, uint64_t reg); 89 + void amdgpu_reg_pcie_ext_wr32(struct amdgpu_device *adev, uint64_t reg, 90 + uint32_t v); 92 91 uint32_t amdgpu_reg_pciep_rd32(struct amdgpu_device *adev, uint32_t reg); 93 92 void amdgpu_reg_pciep_wr32(struct amdgpu_device *adev, uint32_t reg, 94 93 uint32_t v); 95 - 96 - typedef uint32_t (*amdgpu_rreg_ext_t)(struct amdgpu_device *, uint64_t); 97 - typedef void (*amdgpu_wreg_ext_t)(struct amdgpu_device *, uint64_t, uint32_t); 98 94 99 95 typedef uint64_t (*amdgpu_rreg64_t)(struct amdgpu_device *, uint32_t); 100 96 typedef void (*amdgpu_wreg64_t)(struct amdgpu_device *, uint32_t, uint64_t);
+2 -2
drivers/gpu/drm/amd/amdgpu/soc15.c
··· 963 963 adev->nbio.funcs->set_reg_remap(adev); 964 964 adev->reg.pcie.rreg = &amdgpu_device_indirect_rreg; 965 965 adev->reg.pcie.wreg = &amdgpu_device_indirect_wreg; 966 - adev->pcie_rreg_ext = &amdgpu_device_indirect_rreg_ext; 967 - adev->pcie_wreg_ext = &amdgpu_device_indirect_wreg_ext; 966 + adev->reg.pcie.rreg_ext = &amdgpu_device_indirect_rreg_ext; 967 + adev->reg.pcie.wreg_ext = &amdgpu_device_indirect_wreg_ext; 968 968 adev->pcie_rreg64 = &amdgpu_device_indirect_rreg64; 969 969 adev->pcie_wreg64 = &amdgpu_device_indirect_wreg64; 970 970 adev->pcie_rreg64_ext = &amdgpu_device_indirect_rreg64_ext;
+2 -2
drivers/gpu/drm/amd/amdgpu/soc_v1_0.c
··· 252 252 253 253 adev->reg.pcie.rreg = &amdgpu_device_indirect_rreg; 254 254 adev->reg.pcie.wreg = &amdgpu_device_indirect_wreg; 255 - adev->pcie_rreg_ext = &amdgpu_device_indirect_rreg_ext; 256 - adev->pcie_wreg_ext = &amdgpu_device_indirect_wreg_ext; 255 + adev->reg.pcie.rreg_ext = &amdgpu_device_indirect_rreg_ext; 256 + adev->reg.pcie.wreg_ext = &amdgpu_device_indirect_wreg_ext; 257 257 adev->pcie_rreg64 = &amdgpu_device_indirect_rreg64; 258 258 adev->pcie_wreg64 = &amdgpu_device_indirect_wreg64; 259 259 adev->reg.pcie.port_rreg = &amdgpu_device_pcie_port_rreg;