diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 587ff7145361..65531463f88e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include "amdgpu_i2c.h" | 38 | #include "amdgpu_i2c.h" |
39 | #include "atom.h" | 39 | #include "atom.h" |
40 | #include "amdgpu_atombios.h" | 40 | #include "amdgpu_atombios.h" |
41 | #include "amd_pcie.h" | ||
41 | #ifdef CONFIG_DRM_AMDGPU_CIK | 42 | #ifdef CONFIG_DRM_AMDGPU_CIK |
42 | #include "cik.h" | 43 | #include "cik.h" |
43 | #endif | 44 | #endif |
@@ -1932,6 +1933,83 @@ retry: | |||
1932 | return r; | 1933 | return r; |
1933 | } | 1934 | } |
1934 | 1935 | ||
1936 | void amdgpu_get_pcie_info(struct amdgpu_device *adev) | ||
1937 | { | ||
1938 | u32 mask; | ||
1939 | int ret; | ||
1940 | |||
1941 | if (pci_is_root_bus(adev->pdev->bus)) | ||
1942 | return; | ||
1943 | |||
1944 | if (amdgpu_pcie_gen2 == 0) | ||
1945 | return; | ||
1946 | |||
1947 | if (adev->flags & AMD_IS_APU) | ||
1948 | return; | ||
1949 | |||
1950 | ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask); | ||
1951 | if (!ret) { | ||
1952 | adev->pm.pcie_gen_mask = (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 | | ||
1953 | CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 | | ||
1954 | CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3); | ||
1955 | |||
1956 | if (mask & DRM_PCIE_SPEED_25) | ||
1957 | adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1; | ||
1958 | if (mask & DRM_PCIE_SPEED_50) | ||
1959 | adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2; | ||
1960 | if (mask & DRM_PCIE_SPEED_80) | ||
1961 | adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3; | ||
1962 | } | ||
1963 | ret = drm_pcie_get_max_link_width(adev->ddev, &mask); | ||
1964 | if (!ret) { | ||
1965 | switch (mask) { | ||
1966 | case 32: | ||
1967 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X32 | | ||
1968 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 | | ||
1969 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | | ||
1970 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | | ||
1971 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | | ||
1972 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | ||
1973 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | ||
1974 | break; | ||
1975 | case 16: | ||
1976 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 | | ||
1977 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | | ||
1978 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | | ||
1979 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | | ||
1980 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | ||
1981 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | ||
1982 | break; | ||
1983 | case 12: | ||
1984 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | | ||
1985 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | | ||
1986 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | | ||
1987 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | ||
1988 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | ||
1989 | break; | ||
1990 | case 8: | ||
1991 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 | | ||
1992 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | | ||
1993 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | ||
1994 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | ||
1995 | break; | ||
1996 | case 4: | ||
1997 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 | | ||
1998 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | ||
1999 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | ||
2000 | break; | ||
2001 | case 2: | ||
2002 | adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | | ||
2003 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1); | ||
2004 | break; | ||
2005 | case 1: | ||
2006 | adev->pm.pcie_mlw_mask = CAIL_PCIE_LINK_WIDTH_SUPPORT_X1; | ||
2007 | break; | ||
2008 | default: | ||
2009 | break; | ||
2010 | } | ||
2011 | } | ||
2012 | } | ||
1935 | 2013 | ||
1936 | /* | 2014 | /* |
1937 | * Debugfs | 2015 | * Debugfs |