diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/vi.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vi.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c index fa5a4448531d..68552da40287 100644 --- a/drivers/gpu/drm/amd/amdgpu/vi.c +++ b/drivers/gpu/drm/amd/amdgpu/vi.c | |||
@@ -122,6 +122,32 @@ static void vi_smc_wreg(struct amdgpu_device *adev, u32 reg, u32 v) | |||
122 | spin_unlock_irqrestore(&adev->smc_idx_lock, flags); | 122 | spin_unlock_irqrestore(&adev->smc_idx_lock, flags); |
123 | } | 123 | } |
124 | 124 | ||
125 | /* smu_8_0_d.h */ | ||
126 | #define mmMP0PUB_IND_INDEX 0x180 | ||
127 | #define mmMP0PUB_IND_DATA 0x181 | ||
128 | |||
129 | static u32 cz_smc_rreg(struct amdgpu_device *adev, u32 reg) | ||
130 | { | ||
131 | unsigned long flags; | ||
132 | u32 r; | ||
133 | |||
134 | spin_lock_irqsave(&adev->smc_idx_lock, flags); | ||
135 | WREG32(mmMP0PUB_IND_INDEX, (reg)); | ||
136 | r = RREG32(mmMP0PUB_IND_DATA); | ||
137 | spin_unlock_irqrestore(&adev->smc_idx_lock, flags); | ||
138 | return r; | ||
139 | } | ||
140 | |||
141 | static void cz_smc_wreg(struct amdgpu_device *adev, u32 reg, u32 v) | ||
142 | { | ||
143 | unsigned long flags; | ||
144 | |||
145 | spin_lock_irqsave(&adev->smc_idx_lock, flags); | ||
146 | WREG32(mmMP0PUB_IND_INDEX, (reg)); | ||
147 | WREG32(mmMP0PUB_IND_DATA, (v)); | ||
148 | spin_unlock_irqrestore(&adev->smc_idx_lock, flags); | ||
149 | } | ||
150 | |||
125 | static u32 vi_uvd_ctx_rreg(struct amdgpu_device *adev, u32 reg) | 151 | static u32 vi_uvd_ctx_rreg(struct amdgpu_device *adev, u32 reg) |
126 | { | 152 | { |
127 | unsigned long flags; | 153 | unsigned long flags; |
@@ -1222,8 +1248,13 @@ static int vi_common_early_init(void *handle) | |||
1222 | bool smc_enabled = false; | 1248 | bool smc_enabled = false; |
1223 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 1249 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
1224 | 1250 | ||
1225 | adev->smc_rreg = &vi_smc_rreg; | 1251 | if (adev->flags & AMDGPU_IS_APU) { |
1226 | adev->smc_wreg = &vi_smc_wreg; | 1252 | adev->smc_rreg = &cz_smc_rreg; |
1253 | adev->smc_wreg = &cz_smc_wreg; | ||
1254 | } else { | ||
1255 | adev->smc_rreg = &vi_smc_rreg; | ||
1256 | adev->smc_wreg = &vi_smc_wreg; | ||
1257 | } | ||
1227 | adev->pcie_rreg = &vi_pcie_rreg; | 1258 | adev->pcie_rreg = &vi_pcie_rreg; |
1228 | adev->pcie_wreg = &vi_pcie_wreg; | 1259 | adev->pcie_wreg = &vi_pcie_wreg; |
1229 | adev->uvd_ctx_rreg = &vi_uvd_ctx_rreg; | 1260 | adev->uvd_ctx_rreg = &vi_uvd_ctx_rreg; |