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 pcie64 indirect to register block

Move 64-bit pcie indirect read/writes 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
74b9c49e 5312d68a

+38 -55
+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_rreg64_t pcie_rreg64; 908 - amdgpu_wreg64_t pcie_wreg64; 909 907 amdgpu_rreg64_ext_t pcie_rreg64_ext; 910 908 amdgpu_wreg64_ext_t pcie_wreg64_ext; 911 909 struct amdgpu_doorbell doorbell; ··· 1306 1308 #define WREG32_PCIE_PORT(reg, v) amdgpu_reg_pciep_wr32(adev, (reg), (v)) 1307 1309 #define RREG32_PCIE_EXT(reg) amdgpu_reg_pcie_ext_rd32(adev, (reg)) 1308 1310 #define WREG32_PCIE_EXT(reg, v) amdgpu_reg_pcie_ext_wr32(adev, (reg), (v)) 1309 - #define RREG64_PCIE(reg) adev->pcie_rreg64(adev, (reg)) 1310 - #define WREG64_PCIE(reg, v) adev->pcie_wreg64(adev, (reg), (v)) 1311 + #define RREG64_PCIE(reg) amdgpu_reg_pcie_rd64(adev, (reg)) 1312 + #define WREG64_PCIE(reg, v) amdgpu_reg_pcie_wr64(adev, (reg), (v)) 1311 1313 #define RREG64_PCIE_EXT(reg) adev->pcie_rreg64_ext(adev, (reg)) 1312 1314 #define WREG64_PCIE_EXT(reg, v) adev->pcie_wreg64_ext(adev, (reg), (v)) 1313 1315 #define RREG32_SMC(reg) amdgpu_reg_smc_rd32(adev, (reg))
-38
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
··· 858 858 return adev->nbio.funcs->get_rev_id(adev); 859 859 } 860 860 861 - /** 862 - * amdgpu_invalid_rreg64 - dummy 64 bit reg read function 863 - * 864 - * @adev: amdgpu_device pointer 865 - * @reg: offset of register 866 - * 867 - * Dummy register read function. Used for register blocks 868 - * that certain asics don't have (all asics). 869 - * Returns the value in the register. 870 - */ 871 - static uint64_t amdgpu_invalid_rreg64(struct amdgpu_device *adev, uint32_t reg) 872 - { 873 - dev_err(adev->dev, "Invalid callback to read 64 bit register 0x%04X\n", 874 - reg); 875 - BUG(); 876 - return 0; 877 - } 878 - 879 861 static uint64_t amdgpu_invalid_rreg64_ext(struct amdgpu_device *adev, uint64_t reg) 880 862 { 881 863 dev_err(adev->dev, "Invalid callback to read register 0x%llX\n", reg); 882 864 BUG(); 883 865 return 0; 884 - } 885 - 886 - /** 887 - * amdgpu_invalid_wreg64 - dummy reg write function 888 - * 889 - * @adev: amdgpu_device pointer 890 - * @reg: offset of register 891 - * @v: value to write to the register 892 - * 893 - * Dummy register read function. Used for register blocks 894 - * that certain asics don't have (all asics). 895 - */ 896 - static void amdgpu_invalid_wreg64(struct amdgpu_device *adev, uint32_t reg, uint64_t v) 897 - { 898 - dev_err(adev->dev, 899 - "Invalid callback to write 64 bit register 0x%04X with 0x%08llX\n", 900 - reg, v); 901 - BUG(); 902 866 } 903 867 904 868 static void amdgpu_invalid_wreg64_ext(struct amdgpu_device *adev, uint64_t reg, uint64_t v) ··· 3704 3740 3705 3741 amdgpu_reg_access_init(adev); 3706 3742 3707 - adev->pcie_rreg64 = &amdgpu_invalid_rreg64; 3708 - adev->pcie_wreg64 = &amdgpu_invalid_wreg64; 3709 3743 adev->pcie_rreg64_ext = &amdgpu_invalid_rreg64_ext; 3710 3744 adev->pcie_wreg64_ext = &amdgpu_invalid_wreg64_ext; 3711 3745
+20
drivers/gpu/drm/amd/amdgpu/amdgpu_reg_access.c
··· 63 63 adev->reg.pcie.wreg = NULL; 64 64 adev->reg.pcie.rreg_ext = NULL; 65 65 adev->reg.pcie.wreg_ext = NULL; 66 + adev->reg.pcie.rreg64 = NULL; 67 + adev->reg.pcie.wreg64 = NULL; 66 68 adev->reg.pcie.port_rreg = NULL; 67 69 adev->reg.pcie.port_wreg = NULL; 68 70 } ··· 223 221 return; 224 222 } 225 223 adev->reg.pcie.wreg_ext(adev, reg, v); 224 + } 225 + 226 + uint64_t amdgpu_reg_pcie_rd64(struct amdgpu_device *adev, uint32_t reg) 227 + { 228 + if (!adev->reg.pcie.rreg64) { 229 + dev_err_once(adev->dev, "PCIE 64-bit register read not supported\n"); 230 + return 0; 231 + } 232 + return adev->reg.pcie.rreg64(adev, reg); 233 + } 234 + 235 + void amdgpu_reg_pcie_wr64(struct amdgpu_device *adev, uint32_t reg, uint64_t v) 236 + { 237 + if (!adev->reg.pcie.wreg64) { 238 + dev_err_once(adev->dev, "PCIE 64-bit register write not supported\n"); 239 + return; 240 + } 241 + adev->reg.pcie.wreg64(adev, reg, v); 226 242 } 227 243 228 244 uint32_t amdgpu_reg_pciep_rd32(struct amdgpu_device *adev, uint32_t reg)
+6 -3
drivers/gpu/drm/amd/amdgpu/amdgpu_reg_access.h
··· 33 33 typedef void (*amdgpu_wreg_t)(struct amdgpu_device *, uint32_t, uint32_t); 34 34 typedef uint32_t (*amdgpu_rreg_ext_t)(struct amdgpu_device *, uint64_t); 35 35 typedef void (*amdgpu_wreg_ext_t)(struct amdgpu_device *, uint64_t, uint32_t); 36 + typedef uint64_t (*amdgpu_rreg64_t)(struct amdgpu_device *, uint32_t); 37 + typedef void (*amdgpu_wreg64_t)(struct amdgpu_device *, uint32_t, uint64_t); 36 38 37 39 typedef uint32_t (*amdgpu_block_rreg_t)(struct amdgpu_device *, uint32_t, 38 40 uint32_t); ··· 58 56 amdgpu_wreg_t wreg; 59 57 amdgpu_rreg_ext_t rreg_ext; 60 58 amdgpu_wreg_ext_t wreg_ext; 59 + amdgpu_rreg64_t rreg64; 60 + amdgpu_wreg64_t wreg64; 61 61 amdgpu_rreg_t port_rreg; 62 62 amdgpu_wreg_t port_wreg; 63 63 }; ··· 96 92 uint32_t amdgpu_reg_pcie_ext_rd32(struct amdgpu_device *adev, uint64_t reg); 97 93 void amdgpu_reg_pcie_ext_wr32(struct amdgpu_device *adev, uint64_t reg, 98 94 uint32_t v); 95 + uint64_t amdgpu_reg_pcie_rd64(struct amdgpu_device *adev, uint32_t reg); 96 + void amdgpu_reg_pcie_wr64(struct amdgpu_device *adev, uint32_t reg, uint64_t v); 99 97 uint32_t amdgpu_reg_pciep_rd32(struct amdgpu_device *adev, uint32_t reg); 100 98 void amdgpu_reg_pciep_wr32(struct amdgpu_device *adev, uint32_t reg, 101 99 uint32_t v); 102 - 103 - typedef uint64_t (*amdgpu_rreg64_t)(struct amdgpu_device *, uint32_t); 104 - typedef void (*amdgpu_wreg64_t)(struct amdgpu_device *, uint32_t, uint64_t); 105 100 106 101 typedef uint64_t (*amdgpu_rreg64_ext_t)(struct amdgpu_device *, uint64_t); 107 102 typedef void (*amdgpu_wreg64_ext_t)(struct amdgpu_device *, uint64_t, uint64_t);
+2 -2
drivers/gpu/drm/amd/amdgpu/nv.c
··· 637 637 adev->nbio.funcs->set_reg_remap(adev); 638 638 adev->reg.pcie.rreg = &amdgpu_device_indirect_rreg; 639 639 adev->reg.pcie.wreg = &amdgpu_device_indirect_wreg; 640 - adev->pcie_rreg64 = &amdgpu_device_indirect_rreg64; 641 - adev->pcie_wreg64 = &amdgpu_device_indirect_wreg64; 640 + adev->reg.pcie.rreg64 = &amdgpu_device_indirect_rreg64; 641 + adev->reg.pcie.wreg64 = &amdgpu_device_indirect_wreg64; 642 642 adev->reg.pcie.port_rreg = &amdgpu_device_pcie_port_rreg; 643 643 adev->reg.pcie.port_wreg = &amdgpu_device_pcie_port_wreg; 644 644
+2 -2
drivers/gpu/drm/amd/amdgpu/soc15.c
··· 965 965 adev->reg.pcie.wreg = &amdgpu_device_indirect_wreg; 966 966 adev->reg.pcie.rreg_ext = &amdgpu_device_indirect_rreg_ext; 967 967 adev->reg.pcie.wreg_ext = &amdgpu_device_indirect_wreg_ext; 968 - adev->pcie_rreg64 = &amdgpu_device_indirect_rreg64; 969 - adev->pcie_wreg64 = &amdgpu_device_indirect_wreg64; 968 + adev->reg.pcie.rreg64 = &amdgpu_device_indirect_rreg64; 969 + adev->reg.pcie.wreg64 = &amdgpu_device_indirect_wreg64; 970 970 adev->pcie_rreg64_ext = &amdgpu_device_indirect_rreg64_ext; 971 971 adev->pcie_wreg64_ext = &amdgpu_device_indirect_wreg64_ext; 972 972 adev->reg.uvd_ctx.rreg = &soc15_uvd_ctx_rreg;
+2 -2
drivers/gpu/drm/amd/amdgpu/soc21.c
··· 591 591 adev->nbio.funcs->set_reg_remap(adev); 592 592 adev->reg.pcie.rreg = &amdgpu_device_indirect_rreg; 593 593 adev->reg.pcie.wreg = &amdgpu_device_indirect_wreg; 594 - adev->pcie_rreg64 = &amdgpu_device_indirect_rreg64; 595 - adev->pcie_wreg64 = &amdgpu_device_indirect_wreg64; 594 + adev->reg.pcie.rreg64 = &amdgpu_device_indirect_rreg64; 595 + adev->reg.pcie.wreg64 = &amdgpu_device_indirect_wreg64; 596 596 adev->reg.pcie.port_rreg = &amdgpu_device_pcie_port_rreg; 597 597 adev->reg.pcie.port_wreg = &amdgpu_device_pcie_port_wreg; 598 598
+2 -2
drivers/gpu/drm/amd/amdgpu/soc24.c
··· 364 364 adev->nbio.funcs->set_reg_remap(adev); 365 365 adev->reg.pcie.rreg = &amdgpu_device_indirect_rreg; 366 366 adev->reg.pcie.wreg = &amdgpu_device_indirect_wreg; 367 - adev->pcie_rreg64 = &amdgpu_device_indirect_rreg64; 368 - adev->pcie_wreg64 = &amdgpu_device_indirect_wreg64; 367 + adev->reg.pcie.rreg64 = &amdgpu_device_indirect_rreg64; 368 + adev->reg.pcie.wreg64 = &amdgpu_device_indirect_wreg64; 369 369 adev->reg.pcie.port_rreg = &amdgpu_device_pcie_port_rreg; 370 370 adev->reg.pcie.port_wreg = &amdgpu_device_pcie_port_wreg; 371 371
+2 -2
drivers/gpu/drm/amd/amdgpu/soc_v1_0.c
··· 254 254 adev->reg.pcie.wreg = &amdgpu_device_indirect_wreg; 255 255 adev->reg.pcie.rreg_ext = &amdgpu_device_indirect_rreg_ext; 256 256 adev->reg.pcie.wreg_ext = &amdgpu_device_indirect_wreg_ext; 257 - adev->pcie_rreg64 = &amdgpu_device_indirect_rreg64; 258 - adev->pcie_wreg64 = &amdgpu_device_indirect_wreg64; 257 + adev->reg.pcie.rreg64 = &amdgpu_device_indirect_rreg64; 258 + adev->reg.pcie.wreg64 = &amdgpu_device_indirect_wreg64; 259 259 adev->reg.pcie.port_rreg = &amdgpu_device_pcie_port_rreg; 260 260 adev->reg.pcie.port_wreg = &amdgpu_device_pcie_port_wreg; 261 261 adev->pcie_rreg64_ext = &amdgpu_device_indirect_rreg64_ext;