aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2017-01-05 12:15:52 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-01-19 14:18:04 -0500
commit7cd7aea3dc78c5f592516159c719b8e3c7540449 (patch)
treea55c1c131b2a890d08a70854252e02c5d5853d12 /drivers/gpu/drm
parent5375b71f3b1784c430ca7c58e6aae6bba8ef222c (diff)
drm/radeon: update smc firmware selection for SI
commit 6458bd4dfd9414cba5804eb9907fe2a824278c34 upstream. Use the appropriate smc firmware for each chip revision. Using the wrong one can cause stability issues. Acked-by: Edward O'Callaghan <funfunctor@folklore1984.net> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/radeon/si.c60
1 files changed, 28 insertions, 32 deletions
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index 125c7e82c3d1..877af4a5ef68 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -50,7 +50,6 @@ MODULE_FIRMWARE("radeon/tahiti_ce.bin");
50MODULE_FIRMWARE("radeon/tahiti_mc.bin"); 50MODULE_FIRMWARE("radeon/tahiti_mc.bin");
51MODULE_FIRMWARE("radeon/tahiti_rlc.bin"); 51MODULE_FIRMWARE("radeon/tahiti_rlc.bin");
52MODULE_FIRMWARE("radeon/tahiti_smc.bin"); 52MODULE_FIRMWARE("radeon/tahiti_smc.bin");
53MODULE_FIRMWARE("radeon/tahiti_k_smc.bin");
54 53
55MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin"); 54MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin");
56MODULE_FIRMWARE("radeon/PITCAIRN_me.bin"); 55MODULE_FIRMWARE("radeon/PITCAIRN_me.bin");
@@ -1657,9 +1656,6 @@ static int si_init_microcode(struct radeon_device *rdev)
1657 switch (rdev->family) { 1656 switch (rdev->family) {
1658 case CHIP_TAHITI: 1657 case CHIP_TAHITI:
1659 chip_name = "TAHITI"; 1658 chip_name = "TAHITI";
1660 /* XXX: figure out which Tahitis need the new ucode */
1661 if (0)
1662 new_smc = true;
1663 new_chip_name = "tahiti"; 1659 new_chip_name = "tahiti";
1664 pfp_req_size = SI_PFP_UCODE_SIZE * 4; 1660 pfp_req_size = SI_PFP_UCODE_SIZE * 4;
1665 me_req_size = SI_PM4_UCODE_SIZE * 4; 1661 me_req_size = SI_PM4_UCODE_SIZE * 4;
@@ -1671,12 +1667,9 @@ static int si_init_microcode(struct radeon_device *rdev)
1671 break; 1667 break;
1672 case CHIP_PITCAIRN: 1668 case CHIP_PITCAIRN:
1673 chip_name = "PITCAIRN"; 1669 chip_name = "PITCAIRN";
1674 if ((rdev->pdev->revision == 0x81) || 1670 if ((rdev->pdev->revision == 0x81) &&
1675 (rdev->pdev->device == 0x6810) || 1671 ((rdev->pdev->device == 0x6810) ||
1676 (rdev->pdev->device == 0x6811) || 1672 (rdev->pdev->device == 0x6811)))
1677 (rdev->pdev->device == 0x6816) ||
1678 (rdev->pdev->device == 0x6817) ||
1679 (rdev->pdev->device == 0x6806))
1680 new_smc = true; 1673 new_smc = true;
1681 new_chip_name = "pitcairn"; 1674 new_chip_name = "pitcairn";
1682 pfp_req_size = SI_PFP_UCODE_SIZE * 4; 1675 pfp_req_size = SI_PFP_UCODE_SIZE * 4;
@@ -1689,15 +1682,15 @@ static int si_init_microcode(struct radeon_device *rdev)
1689 break; 1682 break;
1690 case CHIP_VERDE: 1683 case CHIP_VERDE:
1691 chip_name = "VERDE"; 1684 chip_name = "VERDE";
1692 if ((rdev->pdev->revision == 0x81) || 1685 if (((rdev->pdev->device == 0x6820) &&
1693 (rdev->pdev->revision == 0x83) || 1686 ((rdev->pdev->revision == 0x81) ||
1694 (rdev->pdev->revision == 0x87) || 1687 (rdev->pdev->revision == 0x83))) ||
1695 (rdev->pdev->device == 0x6820) || 1688 ((rdev->pdev->device == 0x6821) &&
1696 (rdev->pdev->device == 0x6821) || 1689 ((rdev->pdev->revision == 0x83) ||
1697 (rdev->pdev->device == 0x6822) || 1690 (rdev->pdev->revision == 0x87))) ||
1698 (rdev->pdev->device == 0x6823) || 1691 ((rdev->pdev->revision == 0x87) &&
1699 (rdev->pdev->device == 0x682A) || 1692 ((rdev->pdev->device == 0x6823) ||
1700 (rdev->pdev->device == 0x682B)) 1693 (rdev->pdev->device == 0x682b))))
1701 new_smc = true; 1694 new_smc = true;
1702 new_chip_name = "verde"; 1695 new_chip_name = "verde";
1703 pfp_req_size = SI_PFP_UCODE_SIZE * 4; 1696 pfp_req_size = SI_PFP_UCODE_SIZE * 4;
@@ -1710,13 +1703,13 @@ static int si_init_microcode(struct radeon_device *rdev)
1710 break; 1703 break;
1711 case CHIP_OLAND: 1704 case CHIP_OLAND:
1712 chip_name = "OLAND"; 1705 chip_name = "OLAND";
1713 if ((rdev->pdev->revision == 0xC7) || 1706 if (((rdev->pdev->revision == 0x81) &&
1714 (rdev->pdev->revision == 0x80) || 1707 ((rdev->pdev->device == 0x6600) ||
1715 (rdev->pdev->revision == 0x81) || 1708 (rdev->pdev->device == 0x6604) ||
1716 (rdev->pdev->revision == 0x83) || 1709 (rdev->pdev->device == 0x6605) ||
1717 (rdev->pdev->revision == 0x87) || 1710 (rdev->pdev->device == 0x6610))) ||
1718 (rdev->pdev->device == 0x6604) || 1711 ((rdev->pdev->revision == 0x83) &&
1719 (rdev->pdev->device == 0x6605)) 1712 (rdev->pdev->device == 0x6610)))
1720 new_smc = true; 1713 new_smc = true;
1721 new_chip_name = "oland"; 1714 new_chip_name = "oland";
1722 pfp_req_size = SI_PFP_UCODE_SIZE * 4; 1715 pfp_req_size = SI_PFP_UCODE_SIZE * 4;
@@ -1728,12 +1721,15 @@ static int si_init_microcode(struct radeon_device *rdev)
1728 break; 1721 break;
1729 case CHIP_HAINAN: 1722 case CHIP_HAINAN:
1730 chip_name = "HAINAN"; 1723 chip_name = "HAINAN";
1731 if ((rdev->pdev->revision == 0x81) || 1724 if (((rdev->pdev->revision == 0x81) &&
1732 (rdev->pdev->revision == 0x83) || 1725 (rdev->pdev->device == 0x6660)) ||
1733 (rdev->pdev->revision == 0xC3) || 1726 ((rdev->pdev->revision == 0x83) &&
1734 (rdev->pdev->device == 0x6664) || 1727 ((rdev->pdev->device == 0x6660) ||
1735 (rdev->pdev->device == 0x6665) || 1728 (rdev->pdev->device == 0x6663) ||
1736 (rdev->pdev->device == 0x6667)) 1729 (rdev->pdev->device == 0x6665) ||
1730 (rdev->pdev->device == 0x6667))) ||
1731 ((rdev->pdev->revision == 0xc3) &&
1732 (rdev->pdev->device == 0x6665)))
1737 new_smc = true; 1733 new_smc = true;
1738 new_chip_name = "hainan"; 1734 new_chip_name = "hainan";
1739 pfp_req_size = SI_PFP_UCODE_SIZE * 4; 1735 pfp_req_size = SI_PFP_UCODE_SIZE * 4;