diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2017-01-05 12:15:52 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-01-19 14:18:04 -0500 |
commit | 7cd7aea3dc78c5f592516159c719b8e3c7540449 (patch) | |
tree | a55c1c131b2a890d08a70854252e02c5d5853d12 /drivers/gpu/drm | |
parent | 5375b71f3b1784c430ca7c58e6aae6bba8ef222c (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.c | 60 |
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"); | |||
50 | MODULE_FIRMWARE("radeon/tahiti_mc.bin"); | 50 | MODULE_FIRMWARE("radeon/tahiti_mc.bin"); |
51 | MODULE_FIRMWARE("radeon/tahiti_rlc.bin"); | 51 | MODULE_FIRMWARE("radeon/tahiti_rlc.bin"); |
52 | MODULE_FIRMWARE("radeon/tahiti_smc.bin"); | 52 | MODULE_FIRMWARE("radeon/tahiti_smc.bin"); |
53 | MODULE_FIRMWARE("radeon/tahiti_k_smc.bin"); | ||
54 | 53 | ||
55 | MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin"); | 54 | MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin"); |
56 | MODULE_FIRMWARE("radeon/PITCAIRN_me.bin"); | 55 | MODULE_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; |