drm: use core pcie functionality for pcie gen/width
Subsystems (4)
cover drm: use core pcie functionality for pcie gen/width
This series exports some pcie helper functions for use by drivers and fixes up the amdgpu and radeon drivers to use this core functionality rather than the duplicated functionality in the drm. Finally we remove the drm helpers since the duplicate the pcie functionality of the core. This also adds proper pcie gen4 detection for amdgpu.
Alex Deucher (5):
pci: export pcie_get_speed_cap and pcie_get_width_cap drm/amdgpu: update amd_pcie.h to include gen4 speeds drm/amdgpu: use pcie functions for link width and speed drm/radeon: use pcie functions for link width
drm: drop drm_pcie_get_speed_cap_mask and drm_pcie_get_max_link_width
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 83 +++++++++++++++++++++--------- drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c | 7 ++- drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 3 +- drivers/gpu/drm/amd/amdgpu/si_dpm.c | 3 +- drivers/gpu/drm/amd/include/amd_pcie.h | 2 + drivers/gpu/drm/drm_pci.c | 58 --------------------- drivers/gpu/drm/radeon/ci_dpm.c | 20 +++++-- drivers/gpu/drm/radeon/cik.c | 22 ++++---- drivers/gpu/drm/radeon/r600_dpm.c | 4 +- drivers/gpu/drm/radeon/radeon.h | 4 ++ drivers/gpu/drm/radeon/si.c | 22 ++++---- drivers/gpu/drm/radeon/si_dpm.c | 20 +++++-- drivers/pci/pci.c | 2 + include/drm/drm_pci.h | 7 --- include/linux/pci.h | 3 ++ 15 files changed, 132 insertions(+), 128 deletions(-)
Signature · 6 lines
2.13.6 _______________________________________________ amd-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/amd-gfx
A message that is not in the archive (sent off-list or not yet received): 20180625210606.2736-1-alexander.deucher-5C7GfCeVMHo@public.gmane.org
PATCH 1/5 pci: export pcie_get_speed_cap and pcie_get_width_cap
So drivers can use them. This can be used to replace duplicate code in the drm subsystem.
--- drivers/pci/pci.c | 2 ++ include/linux/pci.h | 3 +++ 2 files changed, 5 insertions(+)
drivers/pci/pci.c +2 -0
@@ -5222,6 +5222,7 @@ enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev)return PCI_SPEED_UNKNOWN ; } +EXPORT_SYMBOL (pcie_get_speed_cap);/** * pcie_get_width_cap - query for the PCI device's link width capability
@@ -5240,6 +5241,7 @@ enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev)return PCIE_LNK_WIDTH_UNKNOWN ; } +EXPORT_SYMBOL (pcie_get_width_cap);/** * pcie_bandwidth_capable - calculate a PCI device's link bandwidth capability
include/linux/pci.h +3 -0
@@ -261,6 +261,9 @@ enum pci_bus_speed { PCI_SPEED_UNKNOWN = 0xff, }; +enum pci_bus_speed pcie_get_speed_cap (struct pci_dev *dev); +enum pcie_link_width pcie_get_width_cap (struct pci_dev *dev); +struct pci_cap_saved_data {u16 cap_nr;bool cap_extended;
Signature · 6 lines
2.13.6 _______________________________________________ amd-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH 1/5] pci: export pcie_get_speed_cap and pcie_get_width_cap
Quoted 4 lines · Alex Deucher
So drivers can use them. This can be used to replace duplicate code in the drm subsystem.
Signed-off-by Alex Deucher <[email protected]>
Thanks a lot for doing this!
If you haven't applied these yet, please
s/pci: export/PCI: Export/
in the subject.
Quoted 42 lines
--- drivers/pci/pci.c | 2 ++ include/linux/pci.h | 3 +++ 2 files changed, 5 insertions(+)drivers/pci/pci.c +2
-0@@ -5222,6 +5222,7 @@ enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev)return PCI_SPEED_UNKNOWN ; } +EXPORT_SYMBOL (pcie_get_speed_cap);/** * pcie_get_width_cap - query for the PCI device's link width capability @@ -5240,6 +5241,7 @@ enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev)return PCIE_LNK_WIDTH_UNKNOWN ; } +EXPORT_SYMBOL (pcie_get_width_cap);/** * pcie_bandwidth_capable - calculate a PCI device's link bandwidth capability include/linux/pci.h +3
-0@@ -261,6 +261,9 @@ enum pci_bus_speed { PCI_SPEED_UNKNOWN = 0xff, }; +enum pci_bus_speed pcie_get_speed_cap (struct pci_dev *dev); +enum pcie_link_width pcie_get_width_cap (struct pci_dev *dev); +struct pci_cap_saved_data {u16 cap_nr;bool cap_extended;Signature · 1 line
2.13.6
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
A message that is not in the archive (sent off-list or not yet received): 20180628134221.GC90450-1RhO1Y9PlrlHTL0Zs8A6p5iNqAH0jzoTYJqu5kTmcBRl57MIdRCFDg@public.gmane.org
Re: [PATCH 1/5] pci: export pcie_get_speed_cap and pcie_get_width_cap
Quoted 8 lines · Bjorn Helgaas
Quoted 4 lines · Alex Deucher
So drivers can use them. This can be used to replace duplicate code in the drm subsystem.
Signed-off-by Alex Deucher <[email protected]>Acked-by Bjorn Helgaas <[email protected]>
Quoted 7 lines
Thanks a lot for doing this!
If you haven't applied these yet, please
s/pci: export/PCI: Export/
in the subject.
Will fix. Any objections to taking this via the drm tree?
Thanks,
Alex
Quoted 34 lines
Quoted 34 lines
--- drivers/pci/pci.c | 2 ++ include/linux/pci.h | 3 +++ 2 files changed, 5 insertions(+)drivers/pci/pci.c +2
-0@@ -5222,6 +5222,7 @@ enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev)return PCI_SPEED_UNKNOWN ; } +EXPORT_SYMBOL (pcie_get_speed_cap);/** * pcie_get_width_cap - query for the PCI device's link width capability @@ -5240,6 +5241,7 @@ enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev)return PCIE_LNK_WIDTH_UNKNOWN ; } +EXPORT_SYMBOL (pcie_get_width_cap);/** * pcie_bandwidth_capable - calculate a PCI device's link bandwidth capability include/linux/pci.h +0
-0@@ -261,6 +261,9 @@ enum pci_bus_speed { PCI_SPEED_UNKNOWN = 0xff, };
Quoted 9 lines
Quoted 9 lines
include/linux/pci.h +3
-1+enum pci_bus_speed pcie_get_speed_cap (struct pci_dev *dev); +enum pcie_link_width pcie_get_width_cap (struct pci_dev *dev); +struct pci_cap_saved_data {u16 cap_nr;bool cap_extended; --2.13.6
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
A message that is not in the archive (sent off-list or not yet received): CADnq5_OMmcbKsWQ3QfuMKYOxhrZZxOCs4YTN+Pyf7zuy43ypyA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org
Re: [PATCH 1/5] pci: export pcie_get_speed_cap and pcie_get_width_cap
Quoted 11 lines · Alex Deucher
Quoted 10 lines · Bjorn Helgaas
Quoted 4 lines · Alex Deucher
So drivers can use them. This can be used to replace duplicate code in the drm subsystem.
Signed-off-by Alex Deucher <[email protected]>Acked-by Bjorn Helgaas <[email protected]>Thanks a lot for doing this!
Quoted 8 lines
Quoted 5 lines
If you haven't applied these yet, please
s/pci: export/PCI: Export/
in the subject.
Will fix. Any objections to taking this via the drm tree?
Nope, I acked it because I assumed you would merge it along with the rest of the series via some non-PCI tree, so the drm tree would be great.
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
PATCH 2/5 drm/amdgpu: update amd_pcie.h to include gen4 speeds
In reply to a message not in the archiveInternal header used by the driver to specify pcie gen speeds of the asic and chipset.
--- drivers/gpu/drm/amd/include/amd_pcie.h | 2 ++ 1 file changed, 2 insertions(+)
drivers/gpu/drm/amd/include/amd_pcie.h +2 -0
@@ -27,6 +27,7 @@#define CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 0x00010000#define CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 0x00020000#define CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 0x00040000 +#define CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4 0x00080000#define CAIL_PCIE_LINK_SPEED_SUPPORT_MASK 0xFFFF0000#define CAIL_PCIE_LINK_SPEED_SUPPORT_SHIFT 16
@@ -34,6 +35,7 @@#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 0x00000001#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 0x00000002#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 0x00000004 +#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4 0x00000008#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_MASK 0x0000FFFF#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_SHIFT 0
Signature · 6 lines
2.13.6 _______________________________________________ amd-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/amd-gfx
A message that is not in the archive (sent off-list or not yet received): 20180625210606.2736-3-alexander.deucher-5C7GfCeVMHo@public.gmane.org
Re: [PATCH 2/5] drm/amdgpu: update amd_pcie.h to include gen4 speeds
Quoted 4 lines · Alex Deucher
Internal header used by the driver to specify pcie gen speeds of the asic and chipset.
Signed-off-by Alex Deucher <[email protected]>
Anyone care to review patches 2,3,4?
Quoted 25 lines
--- drivers/gpu/drm/amd/include/amd_pcie.h | 2 ++ 1 file changed, 2 insertions(+)drivers/gpu/drm/amd/include/amd_pcie.h +2
-1@@ -27,6 +27,7 @@#define CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 0x00010000#define CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 0x00020000#define CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 0x00040000 +#define CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4 0x00080000#define CAIL_PCIE_LINK_SPEED_SUPPORT_MASK 0xFFFF0000#define CAIL_PCIE_LINK_SPEED_SUPPORT_SHIFT 16@@ -34,6 +35,7 @@#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 0x00000001#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 0x00000002#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 0x00000004 +#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4 0x00000008#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_MASK 0x0000FFFF#define CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_SHIFT 0 --
Quoted 2 lines
2.13.6
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
PATCH 4/5 drm/radeon: use pcie functions for link width
In reply to a message not in the archiveThis is the last user of drm_pcie_get_speed_cap_mask. Use the pci version so we can drop drm_pcie_get_speed_cap_mask.
--- drivers/gpu/drm/radeon/ci_dpm.c | 20 +++++++++++++++----- drivers/gpu/drm/radeon/cik.c | 22 ++++++++++++---------- drivers/gpu/drm/radeon/r600_dpm.c | 4 ++-- drivers/gpu/drm/radeon/radeon.h | 4 ++++ drivers/gpu/drm/radeon/si.c | 22 ++++++++++++---------- drivers/gpu/drm/radeon/si_dpm.c | 20 +++++++++++++++----- 6 files changed, 60 insertions(+), 32 deletions(-)
drivers/gpu/drm/radeon/ci_dpm.c +15 -5
@@ -5676,19 +5676,29 @@ int ci_dpm_init(struct radeon_device *rdev)u16 data_offset, size;u8 frev, crev;struct ci_power_info *pi; +enum pci_bus_speed speed_cap; +struct pci_dev *root = rdev->pdev->bus->self;int ret; -u32 mask; pi =kzalloc (sizeof (struct ci_power_info ),GFP_KERNEL );if (pi ==NULL )return -ENOMEM ; rdev->pm.dpm.priv = pi; - ret =drm_pcie_get_speed_cap_mask (rdev->ddev, &mask); -if (ret) + speed_cap =pcie_get_speed_cap (root); +if (speed_cap ==PCI_SPEED_UNKNOWN ) { pi->sys_pcie_mask =0 ; -else - pi->sys_pcie_mask = mask; + }else { +if (speed_cap ==PCIE_SPEED_8_0GT ) + pi->sys_pcie_mask =RADEON_PCIE_SPEED_25 | +RADEON_PCIE_SPEED_50 | +RADEON_PCIE_SPEED_80 ; +else if (speed_cap ==PCIE_SPEED_5_0GT ) + pi->sys_pcie_mask =RADEON_PCIE_SPEED_25 | +RADEON_PCIE_SPEED_50 ; +else + pi->sys_pcie_mask =RADEON_PCIE_SPEED_25 ; + } pi->force_pcie_gen =RADEON_PCIE_GEN_INVALID ; pi->pcie_gen_performance.max =RADEON_PCIE_GEN1 ;
drivers/gpu/drm/radeon/cik.c +12 -10
@@ -9499,9 +9499,10 @@ int cik_set_vce_clocks(struct radeon_device *rdev, u32 evclk, u32 ecclk)static void cik_pcie_gen3_enable (struct radeon_device *rdev) {struct pci_dev *root = rdev->pdev->bus->self; +enum pci_bus_speed speed_cap;int bridge_pos, gpu_pos; -u32 speed_cntl, mask, current_data_rate; -int ret, i; +u32 speed_cntl, current_data_rate; +int i;u16 tmp16;if (pci_is_root_bus (rdev->pdev->bus))
@@ -9516,23 +9517,24 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev)if (!(rdev->flags &RADEON_IS_PCIE ))return ; - ret =drm_pcie_get_speed_cap_mask (rdev->ddev, &mask); -if (ret !=0 ) + speed_cap =pcie_get_speed_cap (root); +if (speed_cap ==PCI_SPEED_UNKNOWN )return ; -if (!(mask & (DRM_PCIE_SPEED_50 |DRM_PCIE_SPEED_80 ))) +if ((speed_cap !=PCIE_SPEED_8_0GT ) && + (speed_cap !=PCIE_SPEED_5_0GT ))return ; speed_cntl =RREG32_PCIE_PORT (PCIE_LC_SPEED_CNTL ); current_data_rate = (speed_cntl &LC_CURRENT_DATA_RATE_MASK ) >>LC_CURRENT_DATA_RATE_SHIFT ; -if (mask &DRM_PCIE_SPEED_80 ) { +if (speed_cap ==PCIE_SPEED_8_0GT ) {if (current_data_rate ==2 ) {DRM_INFO ("PCIE gen 3 link speeds already enabled\n" );return ; }DRM_INFO ("enabling PCIE gen 3 link speeds, disable with radeon.pcie_gen2=0\n" ); - }else if (mask &DRM_PCIE_SPEED_50 ) { + }else if (speed_cap ==PCIE_SPEED_5_0GT ) {if (current_data_rate ==1 ) {DRM_INFO ("PCIE gen 2 link speeds already enabled\n" );return ;
@@ -9548,7 +9550,7 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev)if (!gpu_pos)return ; -if (mask &DRM_PCIE_SPEED_80 ) { +if (speed_cap ==PCIE_SPEED_8_0GT ) {/* re-try equalization if gen3 is not already enabled */ if (current_data_rate !=2 ) {u16 bridge_cfg, gpu_cfg;
@@ -9636,9 +9638,9 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev)pci_read_config_word (rdev->pdev, gpu_pos +PCI_EXP_LNKCTL2 , &tmp16); tmp16 &= ~0xf ; -if (mask &DRM_PCIE_SPEED_80 ) +if (speed_cap ==PCIE_SPEED_8_0GT ) tmp16 |=3 ;/* gen3 */ -else if (mask &DRM_PCIE_SPEED_50 ) +else if (speed_cap ==PCIE_SPEED_5_0GT ) tmp16 |=2 ;/* gen2 */ else tmp16 |=1 ;/* gen1 */
drivers/gpu/drm/radeon/r600_dpm.c +2 -2
@@ -1327,9 +1327,9 @@ enum radeon_pcie_gen r600_get_pcie_gen_support(struct radeon_device *rdev,case RADEON_PCIE_GEN3 :return RADEON_PCIE_GEN3 ;default : -if ((sys_mask &DRM_PCIE_SPEED_80 ) && (default_gen ==RADEON_PCIE_GEN3 )) +if ((sys_mask &RADEON_PCIE_SPEED_80 ) && (default_gen ==RADEON_PCIE_GEN3 ))return RADEON_PCIE_GEN3 ; -else if ((sys_mask &DRM_PCIE_SPEED_50 ) && (default_gen ==RADEON_PCIE_GEN2 )) +else if ((sys_mask &RADEON_PCIE_SPEED_50 ) && (default_gen ==RADEON_PCIE_GEN2 ))return RADEON_PCIE_GEN2 ;else return RADEON_PCIE_GEN1 ;
drivers/gpu/drm/radeon/radeon.h +4 -0
@@ -1653,6 +1653,10 @@ struct radeon_pm {struct radeon_dpm dpm; }; +#define RADEON_PCIE_SPEED_25 1 +#define RADEON_PCIE_SPEED_50 2 +#define RADEON_PCIE_SPEED_80 4 +int radeon_pm_get_type_index (struct radeon_device *rdev,enum radeon_pm_state_type ps_type,int instance);
drivers/gpu/drm/radeon/si.c +12 -10
@@ -7082,9 +7082,10 @@ int si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk)static void si_pcie_gen3_enable (struct radeon_device *rdev) {struct pci_dev *root = rdev->pdev->bus->self; +enum pci_bus_speed speed_cap;int bridge_pos, gpu_pos; -u32 speed_cntl, mask, current_data_rate; -int ret, i; +u32 speed_cntl, current_data_rate; +int i;u16 tmp16;if (pci_is_root_bus (rdev->pdev->bus))
@@ -7099,23 +7100,24 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev)if (!(rdev->flags &RADEON_IS_PCIE ))return ; - ret =drm_pcie_get_speed_cap_mask (rdev->ddev, &mask); -if (ret !=0 ) + speed_cap =pcie_get_speed_cap (root); +if (speed_cap ==PCI_SPEED_UNKNOWN )return ; -if (!(mask & (DRM_PCIE_SPEED_50 |DRM_PCIE_SPEED_80 ))) +if ((speed_cap !=PCIE_SPEED_8_0GT ) && + (speed_cap !=PCIE_SPEED_5_0GT ))return ; speed_cntl =RREG32_PCIE_PORT (PCIE_LC_SPEED_CNTL ); current_data_rate = (speed_cntl &LC_CURRENT_DATA_RATE_MASK ) >>LC_CURRENT_DATA_RATE_SHIFT ; -if (mask &DRM_PCIE_SPEED_80 ) { +if (speed_cap ==PCIE_SPEED_8_0GT ) {if (current_data_rate ==2 ) {DRM_INFO ("PCIE gen 3 link speeds already enabled\n" );return ; }DRM_INFO ("enabling PCIE gen 3 link speeds, disable with radeon.pcie_gen2=0\n" ); - }else if (mask &DRM_PCIE_SPEED_50 ) { + }else if (speed_cap ==PCIE_SPEED_5_0GT ) {if (current_data_rate ==1 ) {DRM_INFO ("PCIE gen 2 link speeds already enabled\n" );return ;
@@ -7131,7 +7133,7 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev)if (!gpu_pos)return ; -if (mask &DRM_PCIE_SPEED_80 ) { +if (speed_cap ==PCIE_SPEED_8_0GT ) {/* re-try equalization if gen3 is not already enabled */ if (current_data_rate !=2 ) {u16 bridge_cfg, gpu_cfg;
@@ -7219,9 +7221,9 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev)pci_read_config_word (rdev->pdev, gpu_pos +PCI_EXP_LNKCTL2 , &tmp16); tmp16 &= ~0xf ; -if (mask &DRM_PCIE_SPEED_80 ) +if (speed_cap ==PCIE_SPEED_8_0GT ) tmp16 |=3 ;/* gen3 */ -else if (mask &DRM_PCIE_SPEED_50 ) +else if (speed_cap ==PCIE_SPEED_5_0GT ) tmp16 |=2 ;/* gen2 */ else tmp16 |=1 ;/* gen1 */
drivers/gpu/drm/radeon/si_dpm.c +15 -5
@@ -6899,8 +6899,9 @@ int si_dpm_init(struct radeon_device *rdev)struct ni_power_info *ni_pi;struct si_power_info *si_pi;struct atom_clock_dividers dividers; +enum pci_bus_speed speed_cap; +struct pci_dev *root = rdev->pdev->bus->self;int ret; -u32 mask; si_pi =kzalloc (sizeof (struct si_power_info ),GFP_KERNEL );if (si_pi ==NULL )
@@ -6910,11 +6911,20 @@ int si_dpm_init(struct radeon_device *rdev) eg_pi = &ni_pi->eg; pi = &eg_pi->rv7xx; - ret =drm_pcie_get_speed_cap_mask (rdev->ddev, &mask); -if (ret) + speed_cap =pcie_get_speed_cap (root); +if (speed_cap ==PCI_SPEED_UNKNOWN ) { si_pi->sys_pcie_mask =0 ; -else - si_pi->sys_pcie_mask = mask; + }else { +if (speed_cap ==PCIE_SPEED_8_0GT ) + si_pi->sys_pcie_mask =RADEON_PCIE_SPEED_25 | +RADEON_PCIE_SPEED_50 | +RADEON_PCIE_SPEED_80 ; +else if (speed_cap ==PCIE_SPEED_5_0GT ) + si_pi->sys_pcie_mask =RADEON_PCIE_SPEED_25 | +RADEON_PCIE_SPEED_50 ; +else + si_pi->sys_pcie_mask =RADEON_PCIE_SPEED_25 ; + } si_pi->force_pcie_gen =RADEON_PCIE_GEN_INVALID ; si_pi->boot_pcie_gen =si_get_current_pcie_speed (rdev);
Signature · 6 lines
2.13.6 _______________________________________________ amd-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/amd-gfx
PATCH 5/5 drm: drop drm_pcie_get_speed_cap_mask and drm_pcie_get_max_link_width
In reply to a message not in the archiveThese functions duplicated functionality which was ultimately added to the pci core.
All users of these functions have been ported to using the newly exposed pci functionality. These functions are no longer used, so drop them.
--- drivers/gpu/drm/drm_pci.c | 58 ----------------------------------------------- include/drm/drm_pci.h | 7 ------ 2 files changed, 65 deletions(-)
drivers/gpu/drm/drm_pci.c +0 -58
@@ -326,64 +326,6 @@ int drm_legacy_pci_init(struct drm_driver *driver, struct pci_driver *pdriver) }EXPORT_SYMBOL (drm_legacy_pci_init); -int drm_pcie_get_speed_cap_mask (struct drm_device *dev,u32 *mask) -{ -struct pci_dev *root; -u32 lnkcap, lnkcap2; - - *mask =0 ; -if (!dev->pdev) -return -EINVAL ; - - root = dev->pdev->bus->self; - -/* we've been informed via and serverworks don't make the cut */ -if (root->vendor ==PCI_VENDOR_ID_VIA || - root->vendor ==PCI_VENDOR_ID_SERVERWORKS ) -return -EINVAL ; - -pcie_capability_read_dword (root,PCI_EXP_LNKCAP , &lnkcap); -pcie_capability_read_dword (root,PCI_EXP_LNKCAP2 , &lnkcap2); - -if (lnkcap2) {/* PCIe r3.0-compliant */ -if (lnkcap2 &PCI_EXP_LNKCAP2_SLS_2_5GB ) - *mask |=DRM_PCIE_SPEED_25 ; -if (lnkcap2 &PCI_EXP_LNKCAP2_SLS_5_0GB ) - *mask |=DRM_PCIE_SPEED_50 ; -if (lnkcap2 &PCI_EXP_LNKCAP2_SLS_8_0GB ) - *mask |=DRM_PCIE_SPEED_80 ; - }else {/* pre-r3.0 */ -if (lnkcap &PCI_EXP_LNKCAP_SLS_2_5GB ) - *mask |=DRM_PCIE_SPEED_25 ; -if (lnkcap &PCI_EXP_LNKCAP_SLS_5_0GB ) - *mask |= (DRM_PCIE_SPEED_25 |DRM_PCIE_SPEED_50 ); - } - -DRM_INFO ("probing gen 2 caps for device %x:%x = %x/%x\n" , root->vendor, root->device, lnkcap, lnkcap2); -return 0 ; -} -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 void drm_pci_agp_destroy (struct drm_device *dev) {}
include/drm/drm_pci.h +0 -7
@@ -58,11 +58,4 @@ static inline int drm_get_pci_dev(struct pci_dev *pdev, }#endif -#define DRM_PCIE_SPEED_25 1 -#define DRM_PCIE_SPEED_50 2 -#define DRM_PCIE_SPEED_80 4 - -int drm_pcie_get_speed_cap_mask (struct drm_device *dev,u32 *speed_mask); -int drm_pcie_get_max_link_width (struct drm_device *dev,u32 *mlw); -#endif /* _DRM_PCI_H_ */
Signature · 6 lines
2.13.6 _______________________________________________ amd-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/amd-gfx
A message that is not in the archive (sent off-list or not yet received): 20180625210606.2736-6-alexander.deucher-5C7GfCeVMHo@public.gmane.org
Dave Airlie
Reviewed-byRe: [PATCH 5/5] drm: drop drm_pcie_get_speed_cap_mask and drm_pcie_get_max_link_width
Quoted 8 lines · Alex Deucher
These functions duplicated functionality which was ultimately added to the pci core.
All users of these functions have been ported to using the newly exposed pci functionality. These functions are no longer used, so drop them.
Signed-off-by Alex Deucher <[email protected]>
Dave.
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Whole series is Acked-by: Christian König <[email protected]>.
BTW: With patch #2 you created quite some noise in the news:
https://www.tomshardware.com/news/amd-vega-20-pcie-4.0,37389.html
Cheers,
Christian.
Am 25.06.2018 um 23:06 schrieb Alex Deucher:
Quoted 13 lines
This series exports some pcie helper functions for use by drivers and fixes up the amdgpu and radeon drivers to use this core functionality rather than the duplicated functionality in the drm. Finally we remove the drm helpers since the duplicate the pcie functionality of the core. This also adds proper pcie gen4 detection for amdgpu.
Alex Deucher (5):
pci: exportpcie_get_speed_capandpcie_get_width_capdrm/amdgpu: updateamd_pcie.hto include gen4 speeds drm/amdgpu: use pcie functions for link width and speed drm/radeon: use pcie functions for link width
drm: dropdrm_pcie_get_speed_cap_maskanddrm_pcie_get_max_link_width
Quoted 17 lines
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 83 +++++++++++++++++++++--------- drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c | 7 ++- drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 3 +- drivers/gpu/drm/amd/amdgpu/si_dpm.c | 3 +- drivers/gpu/drm/amd/include/amd_pcie.h | 2 + drivers/gpu/drm/drm_pci.c | 58 --------------------- drivers/gpu/drm/radeon/ci_dpm.c | 20 +++++-- drivers/gpu/drm/radeon/cik.c | 22 ++++---- drivers/gpu/drm/radeon/r600_dpm.c | 4 +- drivers/gpu/drm/radeon/radeon.h | 4 ++ drivers/gpu/drm/radeon/si.c | 22 ++++---- drivers/gpu/drm/radeon/si_dpm.c | 20 +++++-- drivers/pci/pci.c | 2 + include/drm/drm_pci.h | 7 --- include/linux/pci.h | 3 ++ 15 files changed, 132 insertions(+), 128 deletions(-)
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
PATCH 3/5 drm/amdgpu: use pcie functions for link width and speed
In reply to Alex DeucherUse the newly exported pci functions to get the link width and speed rather than using the drm duplicated versions.
Also query the GPU link caps directly rather than hardcoding them.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 83 +++++++++++++++++++++--------- drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c | 7 ++- drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 3 +- drivers/gpu/drm/amd/amdgpu/si_dpm.c | 3 +- 4 files changed, 65 insertions(+), 31 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +58 -25
@@ -3290,8 +3290,9 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,*/ static void amdgpu_device_get_pcie_info (struct amdgpu_device *adev) { -u32 mask; -int ret; +struct pci_dev *pdev; +enum pci_bus_speed speed_cap; +enum pcie_link_width link_width;if (amdgpu_pcie_gen_cap) adev->pm.pcie_gen_mask = amdgpu_pcie_gen_cap;
@@ -3309,27 +3310,61 @@ static void amdgpu_device_get_pcie_info(struct amdgpu_device *adev) }if (adev->pm.pcie_gen_mask ==0 ) { - ret =drm_pcie_get_speed_cap_mask (adev->ddev, &mask); -if (!ret) { - adev->pm.pcie_gen_mask = (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 | +/* asic caps */ + pdev = adev->pdev; + speed_cap =pcie_get_speed_cap (pdev); +if (speed_cap ==PCI_SPEED_UNKNOWN ) { + adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 ); - -if (mask &DRM_PCIE_SPEED_25 ) - adev->pm.pcie_gen_mask |=CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 ; -if (mask &DRM_PCIE_SPEED_50 ) - adev->pm.pcie_gen_mask |=CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 ; -if (mask &DRM_PCIE_SPEED_80 ) - adev->pm.pcie_gen_mask |=CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 ; }else { - adev->pm.pcie_gen_mask =AMDGPU_DEFAULT_PCIE_GEN_MASK ; +if (speed_cap ==PCIE_SPEED_16_0GT ) + adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 | +CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 | +CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 | +CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4 ); +else if (speed_cap ==PCIE_SPEED_8_0GT ) + adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 | +CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 | +CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 ); +else if (speed_cap ==PCIE_SPEED_5_0GT ) + adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 | +CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 ); +else + adev->pm.pcie_gen_mask |=CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 ; + } +/* platform caps */ + pdev = adev->ddev->pdev->bus->self; + speed_cap =pcie_get_speed_cap (pdev); +if (speed_cap ==PCI_SPEED_UNKNOWN ) { + adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 | +CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 ); + }else { +if (speed_cap ==PCIE_SPEED_16_0GT ) + adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 | +CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 | +CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 | +CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4 ); +else if (speed_cap ==PCIE_SPEED_8_0GT ) + adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 | +CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 | +CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 ); +else if (speed_cap ==PCIE_SPEED_5_0GT ) + adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 | +CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 ); +else + adev->pm.pcie_gen_mask |=CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 ; + } }if (adev->pm.pcie_mlw_mask ==0 ) { - ret =drm_pcie_get_max_link_width (adev->ddev, &mask); -if (!ret) { -switch (mask) { -case 32 : + pdev = adev->ddev->pdev->bus->self; + link_width =pcie_get_width_cap (pdev); +if (link_width ==PCIE_LNK_WIDTH_UNKNOWN ) { + adev->pm.pcie_mlw_mask |=AMDGPU_DEFAULT_PCIE_MLW_MASK ; + }else { +switch (link_width) { +case PCIE_LNK_X32 : adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X32 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
@@ -3338,7 +3373,7 @@ static void amdgpu_device_get_pcie_info(struct amdgpu_device *adev)CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);break ; -case 16 : +case PCIE_LNK_X16 : adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
@@ -3346,36 +3381,34 @@ static void amdgpu_device_get_pcie_info(struct amdgpu_device *adev)CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 | CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);break ; -case 12 : +case PCIE_LNK_X12 : adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |CAIL_PCIE_LINK_WIDTH_SUPPORT_X1 );break ; -case 8 : +case PCIE_LNK_X8 : adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |CAIL_PCIE_LINK_WIDTH_SUPPORT_X1 );break ; -case 4 : +case PCIE_LNK_X4 : adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |CAIL_PCIE_LINK_WIDTH_SUPPORT_X1 );break ; -case 2 : +case PCIE_LNK_X2 : adev->pm.pcie_mlw_mask = (CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |CAIL_PCIE_LINK_WIDTH_SUPPORT_X1 );break ; -case 1 : +case PCIE_LNK_X1 : adev->pm.pcie_mlw_mask =CAIL_PCIE_LINK_WIDTH_SUPPORT_X1 ;break ;default :break ; } - }else { - adev->pm.pcie_mlw_mask =AMDGPU_DEFAULT_PCIE_MLW_MASK ; } } }
drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c +5 -2
@@ -28,6 +28,7 @@#include "amdgpu_i2c.h" #include "amdgpu_dpm.h" #include "atom.h" +#include "amd_pcie.h" void amdgpu_dpm_print_class_info (u32 class,u32 class2) {
@@ -936,9 +937,11 @@ enum amdgpu_pcie_gen amdgpu_get_pcie_gen_support(struct amdgpu_device *adev,case AMDGPU_PCIE_GEN3 :return AMDGPU_PCIE_GEN3 ;default : -if ((sys_mask &DRM_PCIE_SPEED_80 ) && (default_gen ==AMDGPU_PCIE_GEN3 )) +if ((sys_mask &CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 ) && + (default_gen ==AMDGPU_PCIE_GEN3 ))return AMDGPU_PCIE_GEN3 ; -else if ((sys_mask &DRM_PCIE_SPEED_50 ) && (default_gen ==AMDGPU_PCIE_GEN2 )) +else if ((sys_mask &CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 ) && + (default_gen ==AMDGPU_PCIE_GEN2 ))return AMDGPU_PCIE_GEN2 ;else return AMDGPU_PCIE_GEN1 ;
drivers/gpu/drm/amd/amdgpu/ci_dpm.c +1 -2
@@ -5846,8 +5846,7 @@ static int ci_dpm_init(struct amdgpu_device *adev) adev->pm.dpm.priv = pi; pi->sys_pcie_mask = - (adev->pm.pcie_gen_mask &CAIL_PCIE_LINK_SPEED_SUPPORT_MASK ) >> -CAIL_PCIE_LINK_SPEED_SUPPORT_SHIFT ; + adev->pm.pcie_gen_mask &CAIL_PCIE_LINK_SPEED_SUPPORT_MASK ; pi->force_pcie_gen =AMDGPU_PCIE_GEN_INVALID ;
drivers/gpu/drm/amd/amdgpu/si_dpm.c +1 -2
@@ -7318,8 +7318,7 @@ static int si_dpm_init(struct amdgpu_device *adev) pi = &eg_pi->rv7xx; si_pi->sys_pcie_mask = - (adev->pm.pcie_gen_mask &CAIL_PCIE_LINK_SPEED_SUPPORT_MASK ) >> -CAIL_PCIE_LINK_SPEED_SUPPORT_SHIFT ; + adev->pm.pcie_gen_mask &CAIL_PCIE_LINK_SPEED_SUPPORT_MASK ; si_pi->force_pcie_gen =AMDGPU_PCIE_GEN_INVALID ; si_pi->boot_pcie_gen =si_get_current_pcie_speed (adev);
Signature · 6 lines
2.13.6 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Ping on the drm and amdgpu patches.
Alex
Quoted 30 lines · Alex Deucher
This series exports some pcie helper functions for use by drivers and fixes up the amdgpu and radeon drivers to use this core functionality rather than the duplicated functionality in the drm. Finally we remove the drm helpers since the duplicate the pcie functionality of the core. This also adds proper pcie gen4 detection for amdgpu.
Alex Deucher (5):
pci: exportpcie_get_speed_capandpcie_get_width_capdrm/amdgpu: updateamd_pcie.hto include gen4 speeds drm/amdgpu: use pcie functions for link width and speed drm/radeon: use pcie functions for link width
drm: dropdrm_pcie_get_speed_cap_maskanddrm_pcie_get_max_link_widthdrivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 83 +++++++++++++++++++++--------- drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c | 7 ++- drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 3 +- drivers/gpu/drm/amd/amdgpu/si_dpm.c | 3 +- drivers/gpu/drm/amd/include/amd_pcie.h | 2 + drivers/gpu/drm/drm_pci.c | 58 --------------------- drivers/gpu/drm/radeon/ci_dpm.c | 20 +++++-- drivers/gpu/drm/radeon/cik.c | 22 ++++---- drivers/gpu/drm/radeon/r600_dpm.c | 4 +- drivers/gpu/drm/radeon/radeon.h | 4 ++ drivers/gpu/drm/radeon/si.c | 22 ++++---- drivers/gpu/drm/radeon/si_dpm.c | 20 +++++-- drivers/pci/pci.c | 2 + include/drm/drm_pci.h | 7 --- include/linux/pci.h | 3 ++ 15 files changed, 132 insertions(+), 128 deletions(-)
Quoted 3 lines
--
2.13.6
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel