aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c78
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
1936void 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