diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/cik.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik.c | 834 |
1 files changed, 80 insertions, 754 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c index a845b6a93b79..302df85893ab 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik.c +++ b/drivers/gpu/drm/amd/amdgpu/cik.c | |||
@@ -1189,18 +1189,6 @@ static int cik_gpu_pci_config_reset(struct amdgpu_device *adev) | |||
1189 | return r; | 1189 | return r; |
1190 | } | 1190 | } |
1191 | 1191 | ||
1192 | static void cik_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hung) | ||
1193 | { | ||
1194 | u32 tmp = RREG32(mmBIOS_SCRATCH_3); | ||
1195 | |||
1196 | if (hung) | ||
1197 | tmp |= ATOM_S3_ASIC_GUI_ENGINE_HUNG; | ||
1198 | else | ||
1199 | tmp &= ~ATOM_S3_ASIC_GUI_ENGINE_HUNG; | ||
1200 | |||
1201 | WREG32(mmBIOS_SCRATCH_3, tmp); | ||
1202 | } | ||
1203 | |||
1204 | /** | 1192 | /** |
1205 | * cik_asic_reset - soft reset GPU | 1193 | * cik_asic_reset - soft reset GPU |
1206 | * | 1194 | * |
@@ -1213,11 +1201,12 @@ static void cik_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hu | |||
1213 | static int cik_asic_reset(struct amdgpu_device *adev) | 1201 | static int cik_asic_reset(struct amdgpu_device *adev) |
1214 | { | 1202 | { |
1215 | int r; | 1203 | int r; |
1216 | cik_set_bios_scratch_engine_hung(adev, true); | 1204 | |
1205 | amdgpu_atombios_scratch_regs_engine_hung(adev, true); | ||
1217 | 1206 | ||
1218 | r = cik_gpu_pci_config_reset(adev); | 1207 | r = cik_gpu_pci_config_reset(adev); |
1219 | 1208 | ||
1220 | cik_set_bios_scratch_engine_hung(adev, false); | 1209 | amdgpu_atombios_scratch_regs_engine_hung(adev, false); |
1221 | 1210 | ||
1222 | return r; | 1211 | return r; |
1223 | } | 1212 | } |
@@ -1641,745 +1630,6 @@ static void cik_detect_hw_virtualization(struct amdgpu_device *adev) | |||
1641 | adev->virtualization.virtual_caps |= AMDGPU_PASSTHROUGH_MODE; | 1630 | adev->virtualization.virtual_caps |= AMDGPU_PASSTHROUGH_MODE; |
1642 | } | 1631 | } |
1643 | 1632 | ||
1644 | static const struct amdgpu_ip_block_version bonaire_ip_blocks[] = | ||
1645 | { | ||
1646 | /* ORDER MATTERS! */ | ||
1647 | { | ||
1648 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1649 | .major = 1, | ||
1650 | .minor = 0, | ||
1651 | .rev = 0, | ||
1652 | .funcs = &cik_common_ip_funcs, | ||
1653 | }, | ||
1654 | { | ||
1655 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1656 | .major = 7, | ||
1657 | .minor = 0, | ||
1658 | .rev = 0, | ||
1659 | .funcs = &gmc_v7_0_ip_funcs, | ||
1660 | }, | ||
1661 | { | ||
1662 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1663 | .major = 2, | ||
1664 | .minor = 0, | ||
1665 | .rev = 0, | ||
1666 | .funcs = &cik_ih_ip_funcs, | ||
1667 | }, | ||
1668 | { | ||
1669 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1670 | .major = 7, | ||
1671 | .minor = 0, | ||
1672 | .rev = 0, | ||
1673 | .funcs = &amdgpu_pp_ip_funcs, | ||
1674 | }, | ||
1675 | { | ||
1676 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1677 | .major = 8, | ||
1678 | .minor = 2, | ||
1679 | .rev = 0, | ||
1680 | .funcs = &dce_v8_0_ip_funcs, | ||
1681 | }, | ||
1682 | { | ||
1683 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1684 | .major = 7, | ||
1685 | .minor = 2, | ||
1686 | .rev = 0, | ||
1687 | .funcs = &gfx_v7_0_ip_funcs, | ||
1688 | }, | ||
1689 | { | ||
1690 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1691 | .major = 2, | ||
1692 | .minor = 0, | ||
1693 | .rev = 0, | ||
1694 | .funcs = &cik_sdma_ip_funcs, | ||
1695 | }, | ||
1696 | { | ||
1697 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1698 | .major = 4, | ||
1699 | .minor = 2, | ||
1700 | .rev = 0, | ||
1701 | .funcs = &uvd_v4_2_ip_funcs, | ||
1702 | }, | ||
1703 | { | ||
1704 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1705 | .major = 2, | ||
1706 | .minor = 0, | ||
1707 | .rev = 0, | ||
1708 | .funcs = &vce_v2_0_ip_funcs, | ||
1709 | }, | ||
1710 | }; | ||
1711 | |||
1712 | static const struct amdgpu_ip_block_version bonaire_ip_blocks_vd[] = | ||
1713 | { | ||
1714 | /* ORDER MATTERS! */ | ||
1715 | { | ||
1716 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1717 | .major = 1, | ||
1718 | .minor = 0, | ||
1719 | .rev = 0, | ||
1720 | .funcs = &cik_common_ip_funcs, | ||
1721 | }, | ||
1722 | { | ||
1723 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1724 | .major = 7, | ||
1725 | .minor = 0, | ||
1726 | .rev = 0, | ||
1727 | .funcs = &gmc_v7_0_ip_funcs, | ||
1728 | }, | ||
1729 | { | ||
1730 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1731 | .major = 2, | ||
1732 | .minor = 0, | ||
1733 | .rev = 0, | ||
1734 | .funcs = &cik_ih_ip_funcs, | ||
1735 | }, | ||
1736 | { | ||
1737 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1738 | .major = 7, | ||
1739 | .minor = 0, | ||
1740 | .rev = 0, | ||
1741 | .funcs = &amdgpu_pp_ip_funcs, | ||
1742 | }, | ||
1743 | { | ||
1744 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1745 | .major = 8, | ||
1746 | .minor = 2, | ||
1747 | .rev = 0, | ||
1748 | .funcs = &dce_virtual_ip_funcs, | ||
1749 | }, | ||
1750 | { | ||
1751 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1752 | .major = 7, | ||
1753 | .minor = 2, | ||
1754 | .rev = 0, | ||
1755 | .funcs = &gfx_v7_0_ip_funcs, | ||
1756 | }, | ||
1757 | { | ||
1758 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1759 | .major = 2, | ||
1760 | .minor = 0, | ||
1761 | .rev = 0, | ||
1762 | .funcs = &cik_sdma_ip_funcs, | ||
1763 | }, | ||
1764 | { | ||
1765 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1766 | .major = 4, | ||
1767 | .minor = 2, | ||
1768 | .rev = 0, | ||
1769 | .funcs = &uvd_v4_2_ip_funcs, | ||
1770 | }, | ||
1771 | { | ||
1772 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1773 | .major = 2, | ||
1774 | .minor = 0, | ||
1775 | .rev = 0, | ||
1776 | .funcs = &vce_v2_0_ip_funcs, | ||
1777 | }, | ||
1778 | }; | ||
1779 | |||
1780 | static const struct amdgpu_ip_block_version hawaii_ip_blocks[] = | ||
1781 | { | ||
1782 | /* ORDER MATTERS! */ | ||
1783 | { | ||
1784 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1785 | .major = 1, | ||
1786 | .minor = 0, | ||
1787 | .rev = 0, | ||
1788 | .funcs = &cik_common_ip_funcs, | ||
1789 | }, | ||
1790 | { | ||
1791 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1792 | .major = 7, | ||
1793 | .minor = 0, | ||
1794 | .rev = 0, | ||
1795 | .funcs = &gmc_v7_0_ip_funcs, | ||
1796 | }, | ||
1797 | { | ||
1798 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1799 | .major = 2, | ||
1800 | .minor = 0, | ||
1801 | .rev = 0, | ||
1802 | .funcs = &cik_ih_ip_funcs, | ||
1803 | }, | ||
1804 | { | ||
1805 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1806 | .major = 7, | ||
1807 | .minor = 0, | ||
1808 | .rev = 0, | ||
1809 | .funcs = &amdgpu_pp_ip_funcs, | ||
1810 | }, | ||
1811 | { | ||
1812 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1813 | .major = 8, | ||
1814 | .minor = 5, | ||
1815 | .rev = 0, | ||
1816 | .funcs = &dce_v8_0_ip_funcs, | ||
1817 | }, | ||
1818 | { | ||
1819 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1820 | .major = 7, | ||
1821 | .minor = 3, | ||
1822 | .rev = 0, | ||
1823 | .funcs = &gfx_v7_0_ip_funcs, | ||
1824 | }, | ||
1825 | { | ||
1826 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1827 | .major = 2, | ||
1828 | .minor = 0, | ||
1829 | .rev = 0, | ||
1830 | .funcs = &cik_sdma_ip_funcs, | ||
1831 | }, | ||
1832 | { | ||
1833 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1834 | .major = 4, | ||
1835 | .minor = 2, | ||
1836 | .rev = 0, | ||
1837 | .funcs = &uvd_v4_2_ip_funcs, | ||
1838 | }, | ||
1839 | { | ||
1840 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1841 | .major = 2, | ||
1842 | .minor = 0, | ||
1843 | .rev = 0, | ||
1844 | .funcs = &vce_v2_0_ip_funcs, | ||
1845 | }, | ||
1846 | }; | ||
1847 | |||
1848 | static const struct amdgpu_ip_block_version hawaii_ip_blocks_vd[] = | ||
1849 | { | ||
1850 | /* ORDER MATTERS! */ | ||
1851 | { | ||
1852 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1853 | .major = 1, | ||
1854 | .minor = 0, | ||
1855 | .rev = 0, | ||
1856 | .funcs = &cik_common_ip_funcs, | ||
1857 | }, | ||
1858 | { | ||
1859 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1860 | .major = 7, | ||
1861 | .minor = 0, | ||
1862 | .rev = 0, | ||
1863 | .funcs = &gmc_v7_0_ip_funcs, | ||
1864 | }, | ||
1865 | { | ||
1866 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1867 | .major = 2, | ||
1868 | .minor = 0, | ||
1869 | .rev = 0, | ||
1870 | .funcs = &cik_ih_ip_funcs, | ||
1871 | }, | ||
1872 | { | ||
1873 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1874 | .major = 7, | ||
1875 | .minor = 0, | ||
1876 | .rev = 0, | ||
1877 | .funcs = &amdgpu_pp_ip_funcs, | ||
1878 | }, | ||
1879 | { | ||
1880 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1881 | .major = 8, | ||
1882 | .minor = 5, | ||
1883 | .rev = 0, | ||
1884 | .funcs = &dce_virtual_ip_funcs, | ||
1885 | }, | ||
1886 | { | ||
1887 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1888 | .major = 7, | ||
1889 | .minor = 3, | ||
1890 | .rev = 0, | ||
1891 | .funcs = &gfx_v7_0_ip_funcs, | ||
1892 | }, | ||
1893 | { | ||
1894 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1895 | .major = 2, | ||
1896 | .minor = 0, | ||
1897 | .rev = 0, | ||
1898 | .funcs = &cik_sdma_ip_funcs, | ||
1899 | }, | ||
1900 | { | ||
1901 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1902 | .major = 4, | ||
1903 | .minor = 2, | ||
1904 | .rev = 0, | ||
1905 | .funcs = &uvd_v4_2_ip_funcs, | ||
1906 | }, | ||
1907 | { | ||
1908 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1909 | .major = 2, | ||
1910 | .minor = 0, | ||
1911 | .rev = 0, | ||
1912 | .funcs = &vce_v2_0_ip_funcs, | ||
1913 | }, | ||
1914 | }; | ||
1915 | |||
1916 | static const struct amdgpu_ip_block_version kabini_ip_blocks[] = | ||
1917 | { | ||
1918 | /* ORDER MATTERS! */ | ||
1919 | { | ||
1920 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1921 | .major = 1, | ||
1922 | .minor = 0, | ||
1923 | .rev = 0, | ||
1924 | .funcs = &cik_common_ip_funcs, | ||
1925 | }, | ||
1926 | { | ||
1927 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1928 | .major = 7, | ||
1929 | .minor = 0, | ||
1930 | .rev = 0, | ||
1931 | .funcs = &gmc_v7_0_ip_funcs, | ||
1932 | }, | ||
1933 | { | ||
1934 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1935 | .major = 2, | ||
1936 | .minor = 0, | ||
1937 | .rev = 0, | ||
1938 | .funcs = &cik_ih_ip_funcs, | ||
1939 | }, | ||
1940 | { | ||
1941 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1942 | .major = 7, | ||
1943 | .minor = 0, | ||
1944 | .rev = 0, | ||
1945 | .funcs = &amdgpu_pp_ip_funcs, | ||
1946 | }, | ||
1947 | { | ||
1948 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1949 | .major = 8, | ||
1950 | .minor = 3, | ||
1951 | .rev = 0, | ||
1952 | .funcs = &dce_v8_0_ip_funcs, | ||
1953 | }, | ||
1954 | { | ||
1955 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1956 | .major = 7, | ||
1957 | .minor = 2, | ||
1958 | .rev = 0, | ||
1959 | .funcs = &gfx_v7_0_ip_funcs, | ||
1960 | }, | ||
1961 | { | ||
1962 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1963 | .major = 2, | ||
1964 | .minor = 0, | ||
1965 | .rev = 0, | ||
1966 | .funcs = &cik_sdma_ip_funcs, | ||
1967 | }, | ||
1968 | { | ||
1969 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1970 | .major = 4, | ||
1971 | .minor = 2, | ||
1972 | .rev = 0, | ||
1973 | .funcs = &uvd_v4_2_ip_funcs, | ||
1974 | }, | ||
1975 | { | ||
1976 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1977 | .major = 2, | ||
1978 | .minor = 0, | ||
1979 | .rev = 0, | ||
1980 | .funcs = &vce_v2_0_ip_funcs, | ||
1981 | }, | ||
1982 | }; | ||
1983 | |||
1984 | static const struct amdgpu_ip_block_version kabini_ip_blocks_vd[] = | ||
1985 | { | ||
1986 | /* ORDER MATTERS! */ | ||
1987 | { | ||
1988 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1989 | .major = 1, | ||
1990 | .minor = 0, | ||
1991 | .rev = 0, | ||
1992 | .funcs = &cik_common_ip_funcs, | ||
1993 | }, | ||
1994 | { | ||
1995 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1996 | .major = 7, | ||
1997 | .minor = 0, | ||
1998 | .rev = 0, | ||
1999 | .funcs = &gmc_v7_0_ip_funcs, | ||
2000 | }, | ||
2001 | { | ||
2002 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
2003 | .major = 2, | ||
2004 | .minor = 0, | ||
2005 | .rev = 0, | ||
2006 | .funcs = &cik_ih_ip_funcs, | ||
2007 | }, | ||
2008 | { | ||
2009 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
2010 | .major = 7, | ||
2011 | .minor = 0, | ||
2012 | .rev = 0, | ||
2013 | .funcs = &amdgpu_pp_ip_funcs, | ||
2014 | }, | ||
2015 | { | ||
2016 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
2017 | .major = 8, | ||
2018 | .minor = 3, | ||
2019 | .rev = 0, | ||
2020 | .funcs = &dce_virtual_ip_funcs, | ||
2021 | }, | ||
2022 | { | ||
2023 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
2024 | .major = 7, | ||
2025 | .minor = 2, | ||
2026 | .rev = 0, | ||
2027 | .funcs = &gfx_v7_0_ip_funcs, | ||
2028 | }, | ||
2029 | { | ||
2030 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
2031 | .major = 2, | ||
2032 | .minor = 0, | ||
2033 | .rev = 0, | ||
2034 | .funcs = &cik_sdma_ip_funcs, | ||
2035 | }, | ||
2036 | { | ||
2037 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
2038 | .major = 4, | ||
2039 | .minor = 2, | ||
2040 | .rev = 0, | ||
2041 | .funcs = &uvd_v4_2_ip_funcs, | ||
2042 | }, | ||
2043 | { | ||
2044 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
2045 | .major = 2, | ||
2046 | .minor = 0, | ||
2047 | .rev = 0, | ||
2048 | .funcs = &vce_v2_0_ip_funcs, | ||
2049 | }, | ||
2050 | }; | ||
2051 | |||
2052 | static const struct amdgpu_ip_block_version mullins_ip_blocks[] = | ||
2053 | { | ||
2054 | /* ORDER MATTERS! */ | ||
2055 | { | ||
2056 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
2057 | .major = 1, | ||
2058 | .minor = 0, | ||
2059 | .rev = 0, | ||
2060 | .funcs = &cik_common_ip_funcs, | ||
2061 | }, | ||
2062 | { | ||
2063 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
2064 | .major = 7, | ||
2065 | .minor = 0, | ||
2066 | .rev = 0, | ||
2067 | .funcs = &gmc_v7_0_ip_funcs, | ||
2068 | }, | ||
2069 | { | ||
2070 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
2071 | .major = 2, | ||
2072 | .minor = 0, | ||
2073 | .rev = 0, | ||
2074 | .funcs = &cik_ih_ip_funcs, | ||
2075 | }, | ||
2076 | { | ||
2077 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
2078 | .major = 7, | ||
2079 | .minor = 0, | ||
2080 | .rev = 0, | ||
2081 | .funcs = &amdgpu_pp_ip_funcs, | ||
2082 | }, | ||
2083 | { | ||
2084 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
2085 | .major = 8, | ||
2086 | .minor = 3, | ||
2087 | .rev = 0, | ||
2088 | .funcs = &dce_v8_0_ip_funcs, | ||
2089 | }, | ||
2090 | { | ||
2091 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
2092 | .major = 7, | ||
2093 | .minor = 2, | ||
2094 | .rev = 0, | ||
2095 | .funcs = &gfx_v7_0_ip_funcs, | ||
2096 | }, | ||
2097 | { | ||
2098 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
2099 | .major = 2, | ||
2100 | .minor = 0, | ||
2101 | .rev = 0, | ||
2102 | .funcs = &cik_sdma_ip_funcs, | ||
2103 | }, | ||
2104 | { | ||
2105 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
2106 | .major = 4, | ||
2107 | .minor = 2, | ||
2108 | .rev = 0, | ||
2109 | .funcs = &uvd_v4_2_ip_funcs, | ||
2110 | }, | ||
2111 | { | ||
2112 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
2113 | .major = 2, | ||
2114 | .minor = 0, | ||
2115 | .rev = 0, | ||
2116 | .funcs = &vce_v2_0_ip_funcs, | ||
2117 | }, | ||
2118 | }; | ||
2119 | |||
2120 | static const struct amdgpu_ip_block_version mullins_ip_blocks_vd[] = | ||
2121 | { | ||
2122 | /* ORDER MATTERS! */ | ||
2123 | { | ||
2124 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
2125 | .major = 1, | ||
2126 | .minor = 0, | ||
2127 | .rev = 0, | ||
2128 | .funcs = &cik_common_ip_funcs, | ||
2129 | }, | ||
2130 | { | ||
2131 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
2132 | .major = 7, | ||
2133 | .minor = 0, | ||
2134 | .rev = 0, | ||
2135 | .funcs = &gmc_v7_0_ip_funcs, | ||
2136 | }, | ||
2137 | { | ||
2138 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
2139 | .major = 2, | ||
2140 | .minor = 0, | ||
2141 | .rev = 0, | ||
2142 | .funcs = &cik_ih_ip_funcs, | ||
2143 | }, | ||
2144 | { | ||
2145 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
2146 | .major = 7, | ||
2147 | .minor = 0, | ||
2148 | .rev = 0, | ||
2149 | .funcs = &amdgpu_pp_ip_funcs, | ||
2150 | }, | ||
2151 | { | ||
2152 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
2153 | .major = 8, | ||
2154 | .minor = 3, | ||
2155 | .rev = 0, | ||
2156 | .funcs = &dce_virtual_ip_funcs, | ||
2157 | }, | ||
2158 | { | ||
2159 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
2160 | .major = 7, | ||
2161 | .minor = 2, | ||
2162 | .rev = 0, | ||
2163 | .funcs = &gfx_v7_0_ip_funcs, | ||
2164 | }, | ||
2165 | { | ||
2166 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
2167 | .major = 2, | ||
2168 | .minor = 0, | ||
2169 | .rev = 0, | ||
2170 | .funcs = &cik_sdma_ip_funcs, | ||
2171 | }, | ||
2172 | { | ||
2173 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
2174 | .major = 4, | ||
2175 | .minor = 2, | ||
2176 | .rev = 0, | ||
2177 | .funcs = &uvd_v4_2_ip_funcs, | ||
2178 | }, | ||
2179 | { | ||
2180 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
2181 | .major = 2, | ||
2182 | .minor = 0, | ||
2183 | .rev = 0, | ||
2184 | .funcs = &vce_v2_0_ip_funcs, | ||
2185 | }, | ||
2186 | }; | ||
2187 | |||
2188 | static const struct amdgpu_ip_block_version kaveri_ip_blocks[] = | ||
2189 | { | ||
2190 | /* ORDER MATTERS! */ | ||
2191 | { | ||
2192 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
2193 | .major = 1, | ||
2194 | .minor = 0, | ||
2195 | .rev = 0, | ||
2196 | .funcs = &cik_common_ip_funcs, | ||
2197 | }, | ||
2198 | { | ||
2199 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
2200 | .major = 7, | ||
2201 | .minor = 0, | ||
2202 | .rev = 0, | ||
2203 | .funcs = &gmc_v7_0_ip_funcs, | ||
2204 | }, | ||
2205 | { | ||
2206 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
2207 | .major = 2, | ||
2208 | .minor = 0, | ||
2209 | .rev = 0, | ||
2210 | .funcs = &cik_ih_ip_funcs, | ||
2211 | }, | ||
2212 | { | ||
2213 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
2214 | .major = 7, | ||
2215 | .minor = 0, | ||
2216 | .rev = 0, | ||
2217 | .funcs = &amdgpu_pp_ip_funcs, | ||
2218 | }, | ||
2219 | { | ||
2220 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
2221 | .major = 8, | ||
2222 | .minor = 1, | ||
2223 | .rev = 0, | ||
2224 | .funcs = &dce_v8_0_ip_funcs, | ||
2225 | }, | ||
2226 | { | ||
2227 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
2228 | .major = 7, | ||
2229 | .minor = 1, | ||
2230 | .rev = 0, | ||
2231 | .funcs = &gfx_v7_0_ip_funcs, | ||
2232 | }, | ||
2233 | { | ||
2234 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
2235 | .major = 2, | ||
2236 | .minor = 0, | ||
2237 | .rev = 0, | ||
2238 | .funcs = &cik_sdma_ip_funcs, | ||
2239 | }, | ||
2240 | { | ||
2241 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
2242 | .major = 4, | ||
2243 | .minor = 2, | ||
2244 | .rev = 0, | ||
2245 | .funcs = &uvd_v4_2_ip_funcs, | ||
2246 | }, | ||
2247 | { | ||
2248 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
2249 | .major = 2, | ||
2250 | .minor = 0, | ||
2251 | .rev = 0, | ||
2252 | .funcs = &vce_v2_0_ip_funcs, | ||
2253 | }, | ||
2254 | }; | ||
2255 | |||
2256 | static const struct amdgpu_ip_block_version kaveri_ip_blocks_vd[] = | ||
2257 | { | ||
2258 | /* ORDER MATTERS! */ | ||
2259 | { | ||
2260 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
2261 | .major = 1, | ||
2262 | .minor = 0, | ||
2263 | .rev = 0, | ||
2264 | .funcs = &cik_common_ip_funcs, | ||
2265 | }, | ||
2266 | { | ||
2267 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
2268 | .major = 7, | ||
2269 | .minor = 0, | ||
2270 | .rev = 0, | ||
2271 | .funcs = &gmc_v7_0_ip_funcs, | ||
2272 | }, | ||
2273 | { | ||
2274 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
2275 | .major = 2, | ||
2276 | .minor = 0, | ||
2277 | .rev = 0, | ||
2278 | .funcs = &cik_ih_ip_funcs, | ||
2279 | }, | ||
2280 | { | ||
2281 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
2282 | .major = 7, | ||
2283 | .minor = 0, | ||
2284 | .rev = 0, | ||
2285 | .funcs = &amdgpu_pp_ip_funcs, | ||
2286 | }, | ||
2287 | { | ||
2288 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
2289 | .major = 8, | ||
2290 | .minor = 1, | ||
2291 | .rev = 0, | ||
2292 | .funcs = &dce_virtual_ip_funcs, | ||
2293 | }, | ||
2294 | { | ||
2295 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
2296 | .major = 7, | ||
2297 | .minor = 1, | ||
2298 | .rev = 0, | ||
2299 | .funcs = &gfx_v7_0_ip_funcs, | ||
2300 | }, | ||
2301 | { | ||
2302 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
2303 | .major = 2, | ||
2304 | .minor = 0, | ||
2305 | .rev = 0, | ||
2306 | .funcs = &cik_sdma_ip_funcs, | ||
2307 | }, | ||
2308 | { | ||
2309 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
2310 | .major = 4, | ||
2311 | .minor = 2, | ||
2312 | .rev = 0, | ||
2313 | .funcs = &uvd_v4_2_ip_funcs, | ||
2314 | }, | ||
2315 | { | ||
2316 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
2317 | .major = 2, | ||
2318 | .minor = 0, | ||
2319 | .rev = 0, | ||
2320 | .funcs = &vce_v2_0_ip_funcs, | ||
2321 | }, | ||
2322 | }; | ||
2323 | |||
2324 | int cik_set_ip_blocks(struct amdgpu_device *adev) | ||
2325 | { | ||
2326 | if (adev->enable_virtual_display) { | ||
2327 | switch (adev->asic_type) { | ||
2328 | case CHIP_BONAIRE: | ||
2329 | adev->ip_blocks = bonaire_ip_blocks_vd; | ||
2330 | adev->num_ip_blocks = ARRAY_SIZE(bonaire_ip_blocks_vd); | ||
2331 | break; | ||
2332 | case CHIP_HAWAII: | ||
2333 | adev->ip_blocks = hawaii_ip_blocks_vd; | ||
2334 | adev->num_ip_blocks = ARRAY_SIZE(hawaii_ip_blocks_vd); | ||
2335 | break; | ||
2336 | case CHIP_KAVERI: | ||
2337 | adev->ip_blocks = kaveri_ip_blocks_vd; | ||
2338 | adev->num_ip_blocks = ARRAY_SIZE(kaveri_ip_blocks_vd); | ||
2339 | break; | ||
2340 | case CHIP_KABINI: | ||
2341 | adev->ip_blocks = kabini_ip_blocks_vd; | ||
2342 | adev->num_ip_blocks = ARRAY_SIZE(kabini_ip_blocks_vd); | ||
2343 | break; | ||
2344 | case CHIP_MULLINS: | ||
2345 | adev->ip_blocks = mullins_ip_blocks_vd; | ||
2346 | adev->num_ip_blocks = ARRAY_SIZE(mullins_ip_blocks_vd); | ||
2347 | break; | ||
2348 | default: | ||
2349 | /* FIXME: not supported yet */ | ||
2350 | return -EINVAL; | ||
2351 | } | ||
2352 | } else { | ||
2353 | switch (adev->asic_type) { | ||
2354 | case CHIP_BONAIRE: | ||
2355 | adev->ip_blocks = bonaire_ip_blocks; | ||
2356 | adev->num_ip_blocks = ARRAY_SIZE(bonaire_ip_blocks); | ||
2357 | break; | ||
2358 | case CHIP_HAWAII: | ||
2359 | adev->ip_blocks = hawaii_ip_blocks; | ||
2360 | adev->num_ip_blocks = ARRAY_SIZE(hawaii_ip_blocks); | ||
2361 | break; | ||
2362 | case CHIP_KAVERI: | ||
2363 | adev->ip_blocks = kaveri_ip_blocks; | ||
2364 | adev->num_ip_blocks = ARRAY_SIZE(kaveri_ip_blocks); | ||
2365 | break; | ||
2366 | case CHIP_KABINI: | ||
2367 | adev->ip_blocks = kabini_ip_blocks; | ||
2368 | adev->num_ip_blocks = ARRAY_SIZE(kabini_ip_blocks); | ||
2369 | break; | ||
2370 | case CHIP_MULLINS: | ||
2371 | adev->ip_blocks = mullins_ip_blocks; | ||
2372 | adev->num_ip_blocks = ARRAY_SIZE(mullins_ip_blocks); | ||
2373 | break; | ||
2374 | default: | ||
2375 | /* FIXME: not supported yet */ | ||
2376 | return -EINVAL; | ||
2377 | } | ||
2378 | } | ||
2379 | |||
2380 | return 0; | ||
2381 | } | ||
2382 | |||
2383 | static const struct amdgpu_asic_funcs cik_asic_funcs = | 1633 | static const struct amdgpu_asic_funcs cik_asic_funcs = |
2384 | { | 1634 | { |
2385 | .read_disabled_bios = &cik_read_disabled_bios, | 1635 | .read_disabled_bios = &cik_read_disabled_bios, |
@@ -2612,7 +1862,7 @@ static int cik_common_set_powergating_state(void *handle, | |||
2612 | return 0; | 1862 | return 0; |
2613 | } | 1863 | } |
2614 | 1864 | ||
2615 | const struct amd_ip_funcs cik_common_ip_funcs = { | 1865 | static const struct amd_ip_funcs cik_common_ip_funcs = { |
2616 | .name = "cik_common", | 1866 | .name = "cik_common", |
2617 | .early_init = cik_common_early_init, | 1867 | .early_init = cik_common_early_init, |
2618 | .late_init = NULL, | 1868 | .late_init = NULL, |
@@ -2628,3 +1878,79 @@ const struct amd_ip_funcs cik_common_ip_funcs = { | |||
2628 | .set_clockgating_state = cik_common_set_clockgating_state, | 1878 | .set_clockgating_state = cik_common_set_clockgating_state, |
2629 | .set_powergating_state = cik_common_set_powergating_state, | 1879 | .set_powergating_state = cik_common_set_powergating_state, |
2630 | }; | 1880 | }; |
1881 | |||
1882 | static const struct amdgpu_ip_block_version cik_common_ip_block = | ||
1883 | { | ||
1884 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1885 | .major = 1, | ||
1886 | .minor = 0, | ||
1887 | .rev = 0, | ||
1888 | .funcs = &cik_common_ip_funcs, | ||
1889 | }; | ||
1890 | |||
1891 | int cik_set_ip_blocks(struct amdgpu_device *adev) | ||
1892 | { | ||
1893 | switch (adev->asic_type) { | ||
1894 | case CHIP_BONAIRE: | ||
1895 | amdgpu_ip_block_add(adev, &cik_common_ip_block); | ||
1896 | amdgpu_ip_block_add(adev, &gmc_v7_0_ip_block); | ||
1897 | amdgpu_ip_block_add(adev, &cik_ih_ip_block); | ||
1898 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1899 | if (adev->enable_virtual_display) | ||
1900 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1901 | else | ||
1902 | amdgpu_ip_block_add(adev, &dce_v8_2_ip_block); | ||
1903 | amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block); | ||
1904 | amdgpu_ip_block_add(adev, &cik_sdma_ip_block); | ||
1905 | amdgpu_ip_block_add(adev, &uvd_v4_2_ip_block); | ||
1906 | amdgpu_ip_block_add(adev, &vce_v2_0_ip_block); | ||
1907 | break; | ||
1908 | case CHIP_HAWAII: | ||
1909 | amdgpu_ip_block_add(adev, &cik_common_ip_block); | ||
1910 | amdgpu_ip_block_add(adev, &gmc_v7_0_ip_block); | ||
1911 | amdgpu_ip_block_add(adev, &cik_ih_ip_block); | ||
1912 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1913 | if (adev->enable_virtual_display) | ||
1914 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1915 | else | ||
1916 | amdgpu_ip_block_add(adev, &dce_v8_5_ip_block); | ||
1917 | amdgpu_ip_block_add(adev, &gfx_v7_3_ip_block); | ||
1918 | amdgpu_ip_block_add(adev, &cik_sdma_ip_block); | ||
1919 | amdgpu_ip_block_add(adev, &uvd_v4_2_ip_block); | ||
1920 | amdgpu_ip_block_add(adev, &vce_v2_0_ip_block); | ||
1921 | break; | ||
1922 | case CHIP_KAVERI: | ||
1923 | amdgpu_ip_block_add(adev, &cik_common_ip_block); | ||
1924 | amdgpu_ip_block_add(adev, &gmc_v7_0_ip_block); | ||
1925 | amdgpu_ip_block_add(adev, &cik_ih_ip_block); | ||
1926 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1927 | if (adev->enable_virtual_display) | ||
1928 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1929 | else | ||
1930 | amdgpu_ip_block_add(adev, &dce_v8_1_ip_block); | ||
1931 | amdgpu_ip_block_add(adev, &gfx_v7_1_ip_block); | ||
1932 | amdgpu_ip_block_add(adev, &cik_sdma_ip_block); | ||
1933 | amdgpu_ip_block_add(adev, &uvd_v4_2_ip_block); | ||
1934 | amdgpu_ip_block_add(adev, &vce_v2_0_ip_block); | ||
1935 | break; | ||
1936 | case CHIP_KABINI: | ||
1937 | case CHIP_MULLINS: | ||
1938 | amdgpu_ip_block_add(adev, &cik_common_ip_block); | ||
1939 | amdgpu_ip_block_add(adev, &gmc_v7_0_ip_block); | ||
1940 | amdgpu_ip_block_add(adev, &cik_ih_ip_block); | ||
1941 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1942 | if (adev->enable_virtual_display) | ||
1943 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1944 | else | ||
1945 | amdgpu_ip_block_add(adev, &dce_v8_3_ip_block); | ||
1946 | amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block); | ||
1947 | amdgpu_ip_block_add(adev, &cik_sdma_ip_block); | ||
1948 | amdgpu_ip_block_add(adev, &uvd_v4_2_ip_block); | ||
1949 | amdgpu_ip_block_add(adev, &vce_v2_0_ip_block); | ||
1950 | break; | ||
1951 | default: | ||
1952 | /* FIXME: not supported yet */ | ||
1953 | return -EINVAL; | ||
1954 | } | ||
1955 | return 0; | ||
1956 | } | ||