diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/si.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/si.c | 162 |
1 files changed, 43 insertions, 119 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/si.c b/drivers/gpu/drm/amd/amdgpu/si.c index dc9511c5ecb8..3ed8ad8725b9 100644 --- a/drivers/gpu/drm/amd/amdgpu/si.c +++ b/drivers/gpu/drm/amd/amdgpu/si.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include "si_dma.h" | 39 | #include "si_dma.h" |
40 | #include "dce_v6_0.h" | 40 | #include "dce_v6_0.h" |
41 | #include "si.h" | 41 | #include "si.h" |
42 | #include "dce_virtual.h" | ||
42 | 43 | ||
43 | static const u32 tahiti_golden_registers[] = | 44 | static const u32 tahiti_golden_registers[] = |
44 | { | 45 | { |
@@ -905,7 +906,7 @@ static void si_pcie_wreg(struct amdgpu_device *adev, u32 reg, u32 v) | |||
905 | spin_unlock_irqrestore(&adev->pcie_idx_lock, flags); | 906 | spin_unlock_irqrestore(&adev->pcie_idx_lock, flags); |
906 | } | 907 | } |
907 | 908 | ||
908 | u32 si_pciep_rreg(struct amdgpu_device *adev, u32 reg) | 909 | static u32 si_pciep_rreg(struct amdgpu_device *adev, u32 reg) |
909 | { | 910 | { |
910 | unsigned long flags; | 911 | unsigned long flags; |
911 | u32 r; | 912 | u32 r; |
@@ -918,7 +919,7 @@ u32 si_pciep_rreg(struct amdgpu_device *adev, u32 reg) | |||
918 | return r; | 919 | return r; |
919 | } | 920 | } |
920 | 921 | ||
921 | void si_pciep_wreg(struct amdgpu_device *adev, u32 reg, u32 v) | 922 | static void si_pciep_wreg(struct amdgpu_device *adev, u32 reg, u32 v) |
922 | { | 923 | { |
923 | unsigned long flags; | 924 | unsigned long flags; |
924 | 925 | ||
@@ -1811,7 +1812,7 @@ static int si_common_set_powergating_state(void *handle, | |||
1811 | return 0; | 1812 | return 0; |
1812 | } | 1813 | } |
1813 | 1814 | ||
1814 | const struct amd_ip_funcs si_common_ip_funcs = { | 1815 | static const struct amd_ip_funcs si_common_ip_funcs = { |
1815 | .name = "si_common", | 1816 | .name = "si_common", |
1816 | .early_init = si_common_early_init, | 1817 | .early_init = si_common_early_init, |
1817 | .late_init = NULL, | 1818 | .late_init = NULL, |
@@ -1828,119 +1829,13 @@ const struct amd_ip_funcs si_common_ip_funcs = { | |||
1828 | .set_powergating_state = si_common_set_powergating_state, | 1829 | .set_powergating_state = si_common_set_powergating_state, |
1829 | }; | 1830 | }; |
1830 | 1831 | ||
1831 | static const struct amdgpu_ip_block_version verde_ip_blocks[] = | 1832 | static const struct amdgpu_ip_block_version si_common_ip_block = |
1832 | { | 1833 | { |
1833 | { | 1834 | .type = AMD_IP_BLOCK_TYPE_COMMON, |
1834 | .type = AMD_IP_BLOCK_TYPE_COMMON, | 1835 | .major = 1, |
1835 | .major = 1, | 1836 | .minor = 0, |
1836 | .minor = 0, | 1837 | .rev = 0, |
1837 | .rev = 0, | 1838 | .funcs = &si_common_ip_funcs, |
1838 | .funcs = &si_common_ip_funcs, | ||
1839 | }, | ||
1840 | { | ||
1841 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1842 | .major = 6, | ||
1843 | .minor = 0, | ||
1844 | .rev = 0, | ||
1845 | .funcs = &gmc_v6_0_ip_funcs, | ||
1846 | }, | ||
1847 | { | ||
1848 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1849 | .major = 1, | ||
1850 | .minor = 0, | ||
1851 | .rev = 0, | ||
1852 | .funcs = &si_ih_ip_funcs, | ||
1853 | }, | ||
1854 | { | ||
1855 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1856 | .major = 6, | ||
1857 | .minor = 0, | ||
1858 | .rev = 0, | ||
1859 | .funcs = &amdgpu_pp_ip_funcs, | ||
1860 | }, | ||
1861 | { | ||
1862 | .type = AMD_IP_BLOCK_TYPE_DCE, | ||
1863 | .major = 6, | ||
1864 | .minor = 0, | ||
1865 | .rev = 0, | ||
1866 | .funcs = &dce_v6_0_ip_funcs, | ||
1867 | }, | ||
1868 | { | ||
1869 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1870 | .major = 6, | ||
1871 | .minor = 0, | ||
1872 | .rev = 0, | ||
1873 | .funcs = &gfx_v6_0_ip_funcs, | ||
1874 | }, | ||
1875 | { | ||
1876 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1877 | .major = 1, | ||
1878 | .minor = 0, | ||
1879 | .rev = 0, | ||
1880 | .funcs = &si_dma_ip_funcs, | ||
1881 | }, | ||
1882 | /* { | ||
1883 | .type = AMD_IP_BLOCK_TYPE_UVD, | ||
1884 | .major = 3, | ||
1885 | .minor = 1, | ||
1886 | .rev = 0, | ||
1887 | .funcs = &si_null_ip_funcs, | ||
1888 | }, | ||
1889 | { | ||
1890 | .type = AMD_IP_BLOCK_TYPE_VCE, | ||
1891 | .major = 1, | ||
1892 | .minor = 0, | ||
1893 | .rev = 0, | ||
1894 | .funcs = &si_null_ip_funcs, | ||
1895 | }, | ||
1896 | */ | ||
1897 | }; | ||
1898 | |||
1899 | |||
1900 | static const struct amdgpu_ip_block_version hainan_ip_blocks[] = | ||
1901 | { | ||
1902 | { | ||
1903 | .type = AMD_IP_BLOCK_TYPE_COMMON, | ||
1904 | .major = 1, | ||
1905 | .minor = 0, | ||
1906 | .rev = 0, | ||
1907 | .funcs = &si_common_ip_funcs, | ||
1908 | }, | ||
1909 | { | ||
1910 | .type = AMD_IP_BLOCK_TYPE_GMC, | ||
1911 | .major = 6, | ||
1912 | .minor = 0, | ||
1913 | .rev = 0, | ||
1914 | .funcs = &gmc_v6_0_ip_funcs, | ||
1915 | }, | ||
1916 | { | ||
1917 | .type = AMD_IP_BLOCK_TYPE_IH, | ||
1918 | .major = 1, | ||
1919 | .minor = 0, | ||
1920 | .rev = 0, | ||
1921 | .funcs = &si_ih_ip_funcs, | ||
1922 | }, | ||
1923 | { | ||
1924 | .type = AMD_IP_BLOCK_TYPE_SMC, | ||
1925 | .major = 6, | ||
1926 | .minor = 0, | ||
1927 | .rev = 0, | ||
1928 | .funcs = &amdgpu_pp_ip_funcs, | ||
1929 | }, | ||
1930 | { | ||
1931 | .type = AMD_IP_BLOCK_TYPE_GFX, | ||
1932 | .major = 6, | ||
1933 | .minor = 0, | ||
1934 | .rev = 0, | ||
1935 | .funcs = &gfx_v6_0_ip_funcs, | ||
1936 | }, | ||
1937 | { | ||
1938 | .type = AMD_IP_BLOCK_TYPE_SDMA, | ||
1939 | .major = 1, | ||
1940 | .minor = 0, | ||
1941 | .rev = 0, | ||
1942 | .funcs = &si_dma_ip_funcs, | ||
1943 | }, | ||
1944 | }; | 1839 | }; |
1945 | 1840 | ||
1946 | int si_set_ip_blocks(struct amdgpu_device *adev) | 1841 | int si_set_ip_blocks(struct amdgpu_device *adev) |
@@ -1949,13 +1844,42 @@ int si_set_ip_blocks(struct amdgpu_device *adev) | |||
1949 | case CHIP_VERDE: | 1844 | case CHIP_VERDE: |
1950 | case CHIP_TAHITI: | 1845 | case CHIP_TAHITI: |
1951 | case CHIP_PITCAIRN: | 1846 | case CHIP_PITCAIRN: |
1847 | amdgpu_ip_block_add(adev, &si_common_ip_block); | ||
1848 | amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block); | ||
1849 | amdgpu_ip_block_add(adev, &si_ih_ip_block); | ||
1850 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1851 | if (adev->enable_virtual_display) | ||
1852 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1853 | else | ||
1854 | amdgpu_ip_block_add(adev, &dce_v6_0_ip_block); | ||
1855 | amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block); | ||
1856 | amdgpu_ip_block_add(adev, &si_dma_ip_block); | ||
1857 | /* amdgpu_ip_block_add(adev, &uvd_v3_1_ip_block); */ | ||
1858 | /* amdgpu_ip_block_add(adev, &vce_v1_0_ip_block); */ | ||
1859 | break; | ||
1952 | case CHIP_OLAND: | 1860 | case CHIP_OLAND: |
1953 | adev->ip_blocks = verde_ip_blocks; | 1861 | amdgpu_ip_block_add(adev, &si_common_ip_block); |
1954 | adev->num_ip_blocks = ARRAY_SIZE(verde_ip_blocks); | 1862 | amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block); |
1863 | amdgpu_ip_block_add(adev, &si_ih_ip_block); | ||
1864 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1865 | if (adev->enable_virtual_display) | ||
1866 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1867 | else | ||
1868 | amdgpu_ip_block_add(adev, &dce_v6_4_ip_block); | ||
1869 | amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block); | ||
1870 | amdgpu_ip_block_add(adev, &si_dma_ip_block); | ||
1871 | /* amdgpu_ip_block_add(adev, &uvd_v3_1_ip_block); */ | ||
1872 | /* amdgpu_ip_block_add(adev, &vce_v1_0_ip_block); */ | ||
1955 | break; | 1873 | break; |
1956 | case CHIP_HAINAN: | 1874 | case CHIP_HAINAN: |
1957 | adev->ip_blocks = hainan_ip_blocks; | 1875 | amdgpu_ip_block_add(adev, &si_common_ip_block); |
1958 | adev->num_ip_blocks = ARRAY_SIZE(hainan_ip_blocks); | 1876 | amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block); |
1877 | amdgpu_ip_block_add(adev, &si_ih_ip_block); | ||
1878 | amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); | ||
1879 | if (adev->enable_virtual_display) | ||
1880 | amdgpu_ip_block_add(adev, &dce_virtual_ip_block); | ||
1881 | amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block); | ||
1882 | amdgpu_ip_block_add(adev, &si_dma_ip_block); | ||
1959 | break; | 1883 | break; |
1960 | default: | 1884 | default: |
1961 | BUG(); | 1885 | BUG(); |