|
@@ -139,6 +139,13 @@ MODULE_FIRMWARE("amdgpu/polaris10_mec.bin");
|
|
|
MODULE_FIRMWARE("amdgpu/polaris10_mec2.bin");
|
|
|
MODULE_FIRMWARE("amdgpu/polaris10_rlc.bin");
|
|
|
|
|
|
+MODULE_FIRMWARE("amdgpu/polaris12_ce.bin");
|
|
|
+MODULE_FIRMWARE("amdgpu/polaris12_pfp.bin");
|
|
|
+MODULE_FIRMWARE("amdgpu/polaris12_me.bin");
|
|
|
+MODULE_FIRMWARE("amdgpu/polaris12_mec.bin");
|
|
|
+MODULE_FIRMWARE("amdgpu/polaris12_mec2.bin");
|
|
|
+MODULE_FIRMWARE("amdgpu/polaris12_rlc.bin");
|
|
|
+
|
|
|
static const struct amdgpu_gds_reg_offset amdgpu_gds_reg_offset[] =
|
|
|
{
|
|
|
{mmGDS_VMID0_BASE, mmGDS_VMID0_SIZE, mmGDS_GWS_VMID0, mmGDS_OA_VMID0},
|
|
@@ -689,6 +696,7 @@ static void gfx_v8_0_init_golden_registers(struct amdgpu_device *adev)
|
|
|
(const u32)ARRAY_SIZE(tonga_golden_common_all));
|
|
|
break;
|
|
|
case CHIP_POLARIS11:
|
|
|
+ case CHIP_POLARIS12:
|
|
|
amdgpu_program_register_sequence(adev,
|
|
|
golden_settings_polaris11_a11,
|
|
|
(const u32)ARRAY_SIZE(golden_settings_polaris11_a11));
|
|
@@ -903,6 +911,9 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
|
|
|
case CHIP_POLARIS10:
|
|
|
chip_name = "polaris10";
|
|
|
break;
|
|
|
+ case CHIP_POLARIS12:
|
|
|
+ chip_name = "polaris12";
|
|
|
+ break;
|
|
|
case CHIP_STONEY:
|
|
|
chip_name = "stoney";
|
|
|
break;
|
|
@@ -1768,6 +1779,7 @@ static int gfx_v8_0_gpu_early_init(struct amdgpu_device *adev)
|
|
|
gb_addr_config = TONGA_GB_ADDR_CONFIG_GOLDEN;
|
|
|
break;
|
|
|
case CHIP_POLARIS11:
|
|
|
+ case CHIP_POLARIS12:
|
|
|
ret = amdgpu_atombios_get_gfx_info(adev);
|
|
|
if (ret)
|
|
|
return ret;
|
|
@@ -2682,6 +2694,7 @@ static void gfx_v8_0_tiling_mode_table_init(struct amdgpu_device *adev)
|
|
|
|
|
|
break;
|
|
|
case CHIP_POLARIS11:
|
|
|
+ case CHIP_POLARIS12:
|
|
|
modearray[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
|
|
|
PIPE_CONFIG(ADDR_SURF_P4_16x16) |
|
|
|
TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B) |
|
|
@@ -3503,6 +3516,7 @@ gfx_v8_0_raster_config(struct amdgpu_device *adev, u32 *rconf, u32 *rconf1)
|
|
|
*rconf1 |= 0x0;
|
|
|
break;
|
|
|
case CHIP_POLARIS11:
|
|
|
+ case CHIP_POLARIS12:
|
|
|
*rconf |= RB_MAP_PKR0(2) | RB_XSEL2(1) | SE_MAP(2) |
|
|
|
SE_XSEL(1) | SE_YSEL(1);
|
|
|
*rconf1 |= 0x0;
|
|
@@ -4021,7 +4035,8 @@ static void gfx_v8_0_init_pg(struct amdgpu_device *adev)
|
|
|
cz_enable_cp_power_gating(adev, true);
|
|
|
else
|
|
|
cz_enable_cp_power_gating(adev, false);
|
|
|
- } else if (adev->asic_type == CHIP_POLARIS11) {
|
|
|
+ } else if ((adev->asic_type == CHIP_POLARIS11) ||
|
|
|
+ (adev->asic_type == CHIP_POLARIS12)) {
|
|
|
gfx_v8_0_init_csb(adev);
|
|
|
gfx_v8_0_init_save_restore_list(adev);
|
|
|
gfx_v8_0_enable_save_restore_machine(adev);
|
|
@@ -4095,7 +4110,8 @@ static int gfx_v8_0_rlc_resume(struct amdgpu_device *adev)
|
|
|
RLC_CGCG_CGLS_CTRL__CGLS_EN_MASK);
|
|
|
WREG32(mmRLC_CGCG_CGLS_CTRL, tmp);
|
|
|
if (adev->asic_type == CHIP_POLARIS11 ||
|
|
|
- adev->asic_type == CHIP_POLARIS10) {
|
|
|
+ adev->asic_type == CHIP_POLARIS10 ||
|
|
|
+ adev->asic_type == CHIP_POLARIS12) {
|
|
|
tmp = RREG32(mmRLC_CGCG_CGLS_CTRL_3D);
|
|
|
tmp &= ~0x3;
|
|
|
WREG32(mmRLC_CGCG_CGLS_CTRL_3D, tmp);
|
|
@@ -4283,6 +4299,7 @@ static int gfx_v8_0_cp_gfx_start(struct amdgpu_device *adev)
|
|
|
amdgpu_ring_write(ring, 0x0000002A);
|
|
|
break;
|
|
|
case CHIP_POLARIS11:
|
|
|
+ case CHIP_POLARIS12:
|
|
|
amdgpu_ring_write(ring, 0x16000012);
|
|
|
amdgpu_ring_write(ring, 0x00000000);
|
|
|
break;
|
|
@@ -4664,7 +4681,8 @@ static int gfx_v8_0_cp_compute_resume(struct amdgpu_device *adev)
|
|
|
(adev->asic_type == CHIP_FIJI) ||
|
|
|
(adev->asic_type == CHIP_STONEY) ||
|
|
|
(adev->asic_type == CHIP_POLARIS11) ||
|
|
|
- (adev->asic_type == CHIP_POLARIS10)) {
|
|
|
+ (adev->asic_type == CHIP_POLARIS10) ||
|
|
|
+ (adev->asic_type == CHIP_POLARIS12)) {
|
|
|
WREG32(mmCP_MEC_DOORBELL_RANGE_LOWER,
|
|
|
AMDGPU_DOORBELL_KIQ << 2);
|
|
|
WREG32(mmCP_MEC_DOORBELL_RANGE_UPPER,
|
|
@@ -4700,7 +4718,8 @@ static int gfx_v8_0_cp_compute_resume(struct amdgpu_device *adev)
|
|
|
mqd->cp_hqd_persistent_state = tmp;
|
|
|
if (adev->asic_type == CHIP_STONEY ||
|
|
|
adev->asic_type == CHIP_POLARIS11 ||
|
|
|
- adev->asic_type == CHIP_POLARIS10) {
|
|
|
+ adev->asic_type == CHIP_POLARIS10 ||
|
|
|
+ adev->asic_type == CHIP_POLARIS12) {
|
|
|
tmp = RREG32(mmCP_ME1_PIPE3_INT_CNTL);
|
|
|
tmp = REG_SET_FIELD(tmp, CP_ME1_PIPE3_INT_CNTL, GENERIC2_INT_ENABLE, 1);
|
|
|
WREG32(mmCP_ME1_PIPE3_INT_CNTL, tmp);
|
|
@@ -5279,7 +5298,8 @@ static int gfx_v8_0_late_init(void *handle)
|
|
|
static void gfx_v8_0_enable_gfx_static_mg_power_gating(struct amdgpu_device *adev,
|
|
|
bool enable)
|
|
|
{
|
|
|
- if (adev->asic_type == CHIP_POLARIS11)
|
|
|
+ if ((adev->asic_type == CHIP_POLARIS11) ||
|
|
|
+ (adev->asic_type == CHIP_POLARIS12))
|
|
|
/* Send msg to SMU via Powerplay */
|
|
|
amdgpu_set_powergating_state(adev,
|
|
|
AMD_IP_BLOCK_TYPE_SMC,
|
|
@@ -5353,6 +5373,7 @@ static int gfx_v8_0_set_powergating_state(void *handle,
|
|
|
gfx_v8_0_enable_gfx_dynamic_mg_power_gating(adev, false);
|
|
|
break;
|
|
|
case CHIP_POLARIS11:
|
|
|
+ case CHIP_POLARIS12:
|
|
|
if ((adev->pg_flags & AMD_PG_SUPPORT_GFX_SMG) && enable)
|
|
|
gfx_v8_0_enable_gfx_static_mg_power_gating(adev, true);
|
|
|
else
|