forked from Minki/linux
drm/amdgpu:use smc_index_11 for VI
for VI smc, index_0 to index_8 are all not safe, they may used by BIOS/FW, and index_11 is reserved only for driver. Signed-off-by: Monk Liu <Monk.Liu@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
e1d99217d0
commit
4bc10d168a
@ -121,8 +121,8 @@ static u32 vi_smc_rreg(struct amdgpu_device *adev, u32 reg)
|
||||
u32 r;
|
||||
|
||||
spin_lock_irqsave(&adev->smc_idx_lock, flags);
|
||||
WREG32(mmSMC_IND_INDEX_0, (reg));
|
||||
r = RREG32(mmSMC_IND_DATA_0);
|
||||
WREG32(mmSMC_IND_INDEX_11, (reg));
|
||||
r = RREG32(mmSMC_IND_DATA_11);
|
||||
spin_unlock_irqrestore(&adev->smc_idx_lock, flags);
|
||||
return r;
|
||||
}
|
||||
@ -132,8 +132,8 @@ static void vi_smc_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&adev->smc_idx_lock, flags);
|
||||
WREG32(mmSMC_IND_INDEX_0, (reg));
|
||||
WREG32(mmSMC_IND_DATA_0, (v));
|
||||
WREG32(mmSMC_IND_INDEX_11, (reg));
|
||||
WREG32(mmSMC_IND_DATA_11, (v));
|
||||
spin_unlock_irqrestore(&adev->smc_idx_lock, flags);
|
||||
}
|
||||
|
||||
@ -437,12 +437,12 @@ static bool vi_read_bios_from_rom(struct amdgpu_device *adev,
|
||||
/* take the smc lock since we are using the smc index */
|
||||
spin_lock_irqsave(&adev->smc_idx_lock, flags);
|
||||
/* set rom index to 0 */
|
||||
WREG32(mmSMC_IND_INDEX_0, ixROM_INDEX);
|
||||
WREG32(mmSMC_IND_DATA_0, 0);
|
||||
WREG32(mmSMC_IND_INDEX_11, ixROM_INDEX);
|
||||
WREG32(mmSMC_IND_DATA_11, 0);
|
||||
/* set index to data for continous read */
|
||||
WREG32(mmSMC_IND_INDEX_0, ixROM_DATA);
|
||||
WREG32(mmSMC_IND_INDEX_11, ixROM_DATA);
|
||||
for (i = 0; i < length_dw; i++)
|
||||
dw_ptr[i] = RREG32(mmSMC_IND_DATA_0);
|
||||
dw_ptr[i] = RREG32(mmSMC_IND_DATA_11);
|
||||
spin_unlock_irqrestore(&adev->smc_idx_lock, flags);
|
||||
|
||||
return true;
|
||||
|
@ -176,6 +176,8 @@
|
||||
#define mmSMU1_SMU_SMC_IND_DATA 0x83
|
||||
#define mmSMU2_SMU_SMC_IND_DATA 0x85
|
||||
#define mmSMU3_SMU_SMC_IND_DATA 0x87
|
||||
#define mmSMC_IND_INDEX_11 0x1AC
|
||||
#define mmSMC_IND_DATA_11 0x1AD
|
||||
#define ixRCU_UC_EVENTS 0xc0000004
|
||||
#define ixRCU_MISC_CTRL 0xc0000010
|
||||
#define ixCC_RCU_FUSES 0xc00c0000
|
||||
|
@ -87,6 +87,8 @@
|
||||
#define mmSMC_IND_DATA_6 0x8d
|
||||
#define mmSMC_IND_INDEX_7 0x8e
|
||||
#define mmSMC_IND_DATA_7 0x8f
|
||||
#define mmSMC_IND_INDEX_11 0x1AC
|
||||
#define mmSMC_IND_DATA_11 0x1AD
|
||||
#define mmSMC_IND_ACCESS_CNTL 0x92
|
||||
#define mmSMC_MESSAGE_0 0x94
|
||||
#define mmSMC_RESP_0 0x95
|
||||
|
@ -90,6 +90,8 @@
|
||||
#define mmSMC_IND_DATA_6 0x8d
|
||||
#define mmSMC_IND_INDEX_7 0x8e
|
||||
#define mmSMC_IND_DATA_7 0x8f
|
||||
#define mmSMC_IND_INDEX_11 0x1AC
|
||||
#define mmSMC_IND_DATA_11 0x1AD
|
||||
#define mmSMC_IND_ACCESS_CNTL 0x92
|
||||
#define mmSMC_MESSAGE_0 0x94
|
||||
#define mmSMC_RESP_0 0x95
|
||||
|
@ -28,8 +28,6 @@
|
||||
#include <pp_endian.h>
|
||||
|
||||
#define SMC_RAM_END 0x40000
|
||||
#define mmSMC_IND_INDEX_11 0x01AC
|
||||
#define mmSMC_IND_DATA_11 0x01AD
|
||||
|
||||
struct smu7_buffer_entry {
|
||||
uint32_t data_size;
|
||||
|
Loading…
Reference in New Issue
Block a user