Add a helper to get the make link width of the port.
Similar to the helper to get the max link speed.

Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
---
 drivers/gpu/drm/drm_pci.c | 20 ++++++++++++++++++++
 include/drm/drmP.h        |  1 +
 2 files changed, 21 insertions(+)

diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c
index fcd2a86..a1fff11 100644
--- a/drivers/gpu/drm/drm_pci.c
+++ b/drivers/gpu/drm/drm_pci.c
@@ -410,6 +410,26 @@ int drm_pcie_get_speed_cap_mask(struct drm_device *dev, 
u32 *mask)
 }
 EXPORT_SYMBOL(drm_pcie_get_speed_cap_mask);

+int drm_pcie_get_max_link_width(struct drm_device *dev, u32 *mlw)
+{
+       struct pci_dev *root;
+       u32 lnkcap;
+
+       *mlw = 0;
+       if (!dev->pdev)
+               return -EINVAL;
+
+       root = dev->pdev->bus->self;
+
+       pcie_capability_read_dword(root, PCI_EXP_LNKCAP, &lnkcap);
+
+       *mlw = (lnkcap & PCI_EXP_LNKCAP_MLW) >> 4;
+
+       DRM_INFO("probing mlw for device %x:%x = %x\n", root->vendor, 
root->device, lnkcap);
+       return 0;
+}
+EXPORT_SYMBOL(drm_pcie_get_max_link_width);
+
 #else

 int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver)
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index 0b921ae..97348eb 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1098,6 +1098,7 @@ static inline int drm_pci_set_busid(struct drm_device 
*dev,
 #define DRM_PCIE_SPEED_80 4

 extern int drm_pcie_get_speed_cap_mask(struct drm_device *dev, u32 
*speed_mask);
+extern int drm_pcie_get_max_link_width(struct drm_device *dev, u32 *mlw);

 /* platform section */
 extern int drm_platform_init(struct drm_driver *driver, struct platform_device 
*platform_device);
-- 
1.8.3.1

Reply via email to