Commit 6458bd4d authored by Alex Deucher's avatar Alex Deucher

drm/radeon: update smc firmware selection for SI

Use the appropriate smc firmware for each chip revision.
Using the wrong one can cause stability issues.
Acked-by: default avatarEdward O'Callaghan <funfunctor@folklore1984.net>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
parent 5165484b
...@@ -50,7 +50,6 @@ MODULE_FIRMWARE("radeon/tahiti_ce.bin"); ...@@ -50,7 +50,6 @@ MODULE_FIRMWARE("radeon/tahiti_ce.bin");
MODULE_FIRMWARE("radeon/tahiti_mc.bin"); MODULE_FIRMWARE("radeon/tahiti_mc.bin");
MODULE_FIRMWARE("radeon/tahiti_rlc.bin"); MODULE_FIRMWARE("radeon/tahiti_rlc.bin");
MODULE_FIRMWARE("radeon/tahiti_smc.bin"); MODULE_FIRMWARE("radeon/tahiti_smc.bin");
MODULE_FIRMWARE("radeon/tahiti_k_smc.bin");
MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin"); MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin");
MODULE_FIRMWARE("radeon/PITCAIRN_me.bin"); MODULE_FIRMWARE("radeon/PITCAIRN_me.bin");
...@@ -1657,9 +1656,6 @@ static int si_init_microcode(struct radeon_device *rdev) ...@@ -1657,9 +1656,6 @@ static int si_init_microcode(struct radeon_device *rdev)
switch (rdev->family) { switch (rdev->family) {
case CHIP_TAHITI: case CHIP_TAHITI:
chip_name = "TAHITI"; chip_name = "TAHITI";
/* XXX: figure out which Tahitis need the new ucode */
if (0)
new_smc = true;
new_chip_name = "tahiti"; new_chip_name = "tahiti";
pfp_req_size = SI_PFP_UCODE_SIZE * 4; pfp_req_size = SI_PFP_UCODE_SIZE * 4;
me_req_size = SI_PM4_UCODE_SIZE * 4; me_req_size = SI_PM4_UCODE_SIZE * 4;
...@@ -1671,12 +1667,9 @@ static int si_init_microcode(struct radeon_device *rdev) ...@@ -1671,12 +1667,9 @@ static int si_init_microcode(struct radeon_device *rdev)
break; break;
case CHIP_PITCAIRN: case CHIP_PITCAIRN:
chip_name = "PITCAIRN"; chip_name = "PITCAIRN";
if ((rdev->pdev->revision == 0x81) || if ((rdev->pdev->revision == 0x81) &&
(rdev->pdev->device == 0x6810) || ((rdev->pdev->device == 0x6810) ||
(rdev->pdev->device == 0x6811) || (rdev->pdev->device == 0x6811)))
(rdev->pdev->device == 0x6816) ||
(rdev->pdev->device == 0x6817) ||
(rdev->pdev->device == 0x6806))
new_smc = true; new_smc = true;
new_chip_name = "pitcairn"; new_chip_name = "pitcairn";
pfp_req_size = SI_PFP_UCODE_SIZE * 4; pfp_req_size = SI_PFP_UCODE_SIZE * 4;
...@@ -1689,15 +1682,15 @@ static int si_init_microcode(struct radeon_device *rdev) ...@@ -1689,15 +1682,15 @@ static int si_init_microcode(struct radeon_device *rdev)
break; break;
case CHIP_VERDE: case CHIP_VERDE:
chip_name = "VERDE"; chip_name = "VERDE";
if ((rdev->pdev->revision == 0x81) || if (((rdev->pdev->device == 0x6820) &&
(rdev->pdev->revision == 0x83) || ((rdev->pdev->revision == 0x81) ||
(rdev->pdev->revision == 0x87) || (rdev->pdev->revision == 0x83))) ||
(rdev->pdev->device == 0x6820) || ((rdev->pdev->device == 0x6821) &&
(rdev->pdev->device == 0x6821) || ((rdev->pdev->revision == 0x83) ||
(rdev->pdev->device == 0x6822) || (rdev->pdev->revision == 0x87))) ||
(rdev->pdev->device == 0x6823) || ((rdev->pdev->revision == 0x87) &&
(rdev->pdev->device == 0x682A) || ((rdev->pdev->device == 0x6823) ||
(rdev->pdev->device == 0x682B)) (rdev->pdev->device == 0x682b))))
new_smc = true; new_smc = true;
new_chip_name = "verde"; new_chip_name = "verde";
pfp_req_size = SI_PFP_UCODE_SIZE * 4; pfp_req_size = SI_PFP_UCODE_SIZE * 4;
...@@ -1710,13 +1703,13 @@ static int si_init_microcode(struct radeon_device *rdev) ...@@ -1710,13 +1703,13 @@ static int si_init_microcode(struct radeon_device *rdev)
break; break;
case CHIP_OLAND: case CHIP_OLAND:
chip_name = "OLAND"; chip_name = "OLAND";
if ((rdev->pdev->revision == 0xC7) || if (((rdev->pdev->revision == 0x81) &&
(rdev->pdev->revision == 0x80) || ((rdev->pdev->device == 0x6600) ||
(rdev->pdev->revision == 0x81) || (rdev->pdev->device == 0x6604) ||
(rdev->pdev->revision == 0x83) || (rdev->pdev->device == 0x6605) ||
(rdev->pdev->revision == 0x87) || (rdev->pdev->device == 0x6610))) ||
(rdev->pdev->device == 0x6604) || ((rdev->pdev->revision == 0x83) &&
(rdev->pdev->device == 0x6605)) (rdev->pdev->device == 0x6610)))
new_smc = true; new_smc = true;
new_chip_name = "oland"; new_chip_name = "oland";
pfp_req_size = SI_PFP_UCODE_SIZE * 4; pfp_req_size = SI_PFP_UCODE_SIZE * 4;
...@@ -1728,12 +1721,15 @@ static int si_init_microcode(struct radeon_device *rdev) ...@@ -1728,12 +1721,15 @@ static int si_init_microcode(struct radeon_device *rdev)
break; break;
case CHIP_HAINAN: case CHIP_HAINAN:
chip_name = "HAINAN"; chip_name = "HAINAN";
if ((rdev->pdev->revision == 0x81) || if (((rdev->pdev->revision == 0x81) &&
(rdev->pdev->revision == 0x83) || (rdev->pdev->device == 0x6660)) ||
(rdev->pdev->revision == 0xC3) || ((rdev->pdev->revision == 0x83) &&
(rdev->pdev->device == 0x6664) || ((rdev->pdev->device == 0x6660) ||
(rdev->pdev->device == 0x6665) || (rdev->pdev->device == 0x6663) ||
(rdev->pdev->device == 0x6667)) (rdev->pdev->device == 0x6665) ||
(rdev->pdev->device == 0x6667))) ||
((rdev->pdev->revision == 0xc3) &&
(rdev->pdev->device == 0x6665)))
new_smc = true; new_smc = true;
new_chip_name = "hainan"; new_chip_name = "hainan";
pfp_req_size = SI_PFP_UCODE_SIZE * 4; pfp_req_size = SI_PFP_UCODE_SIZE * 4;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment