drm/radeon: Use RMW accessors for changing LNKCTL2
Convert open coded RMW accesses for LNKCTL2 to use pcie_capability_clear_and_set_word() which makes its easier to understand what the code tries to do. LNKCTL2 is not really owned by any driver because it is a collection of control bits that PCI core might need to touch. RMW accessors already have support for proper locking for a selected set of registers (LNKCTL2 is not yet among them but likely will be in the future) to avoid losing concurrent updates. Acked-by: Alex Deucher <alexander.deucher@amd.com> Suggested-by: Lukas Wunner <lukas@wunner.de> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
145242ed6f
commit
756762aeb1
@ -9592,28 +9592,18 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev)
|
||||
PCI_EXP_LNKCTL_HAWD);
|
||||
|
||||
/* linkctl2 */
|
||||
pcie_capability_read_word(root, PCI_EXP_LNKCTL2,
|
||||
&tmp16);
|
||||
tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN);
|
||||
tmp16 |= (bridge_cfg2 &
|
||||
(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN));
|
||||
pcie_capability_write_word(root,
|
||||
PCI_EXP_LNKCTL2,
|
||||
tmp16);
|
||||
|
||||
pcie_capability_read_word(rdev->pdev,
|
||||
PCI_EXP_LNKCTL2,
|
||||
&tmp16);
|
||||
tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN);
|
||||
tmp16 |= (gpu_cfg2 &
|
||||
(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN));
|
||||
pcie_capability_write_word(rdev->pdev,
|
||||
PCI_EXP_LNKCTL2,
|
||||
tmp16);
|
||||
pcie_capability_clear_and_set_word(root, PCI_EXP_LNKCTL2,
|
||||
PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN,
|
||||
bridge_cfg2 |
|
||||
(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN));
|
||||
pcie_capability_clear_and_set_word(rdev->pdev, PCI_EXP_LNKCTL2,
|
||||
PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN,
|
||||
gpu_cfg2 |
|
||||
(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN));
|
||||
|
||||
tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
|
||||
tmp &= ~LC_SET_QUIESCE;
|
||||
@ -9627,15 +9617,15 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev)
|
||||
speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE;
|
||||
WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
|
||||
|
||||
pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL2, &tmp16);
|
||||
tmp16 &= ~PCI_EXP_LNKCTL2_TLS;
|
||||
tmp16 = 0;
|
||||
if (speed_cap == PCIE_SPEED_8_0GT)
|
||||
tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */
|
||||
else if (speed_cap == PCIE_SPEED_5_0GT)
|
||||
tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */
|
||||
else
|
||||
tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */
|
||||
pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL2, tmp16);
|
||||
pcie_capability_clear_and_set_word(rdev->pdev, PCI_EXP_LNKCTL2,
|
||||
PCI_EXP_LNKCTL2_TLS, tmp16);
|
||||
|
||||
speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
|
||||
speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE;
|
||||
|
@ -7174,28 +7174,18 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev)
|
||||
PCI_EXP_LNKCTL_HAWD);
|
||||
|
||||
/* linkctl2 */
|
||||
pcie_capability_read_word(root, PCI_EXP_LNKCTL2,
|
||||
&tmp16);
|
||||
tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN);
|
||||
tmp16 |= (bridge_cfg2 &
|
||||
(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN));
|
||||
pcie_capability_write_word(root,
|
||||
PCI_EXP_LNKCTL2,
|
||||
tmp16);
|
||||
|
||||
pcie_capability_read_word(rdev->pdev,
|
||||
PCI_EXP_LNKCTL2,
|
||||
&tmp16);
|
||||
tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN);
|
||||
tmp16 |= (gpu_cfg2 &
|
||||
(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN));
|
||||
pcie_capability_write_word(rdev->pdev,
|
||||
PCI_EXP_LNKCTL2,
|
||||
tmp16);
|
||||
pcie_capability_clear_and_set_word(root, PCI_EXP_LNKCTL2,
|
||||
PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN,
|
||||
bridge_cfg2 &
|
||||
(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN));
|
||||
pcie_capability_clear_and_set_word(rdev->pdev, PCI_EXP_LNKCTL2,
|
||||
PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN,
|
||||
gpu_cfg2 &
|
||||
(PCI_EXP_LNKCTL2_ENTER_COMP |
|
||||
PCI_EXP_LNKCTL2_TX_MARGIN));
|
||||
|
||||
tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
|
||||
tmp &= ~LC_SET_QUIESCE;
|
||||
@ -7209,15 +7199,15 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev)
|
||||
speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE;
|
||||
WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
|
||||
|
||||
pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL2, &tmp16);
|
||||
tmp16 &= ~PCI_EXP_LNKCTL2_TLS;
|
||||
tmp16 = 0;
|
||||
if (speed_cap == PCIE_SPEED_8_0GT)
|
||||
tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */
|
||||
else if (speed_cap == PCIE_SPEED_5_0GT)
|
||||
tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */
|
||||
else
|
||||
tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */
|
||||
pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL2, tmp16);
|
||||
pcie_capability_clear_and_set_word(rdev->pdev, PCI_EXP_LNKCTL2,
|
||||
PCI_EXP_LNKCTL2_TLS, tmp16);
|
||||
|
||||
speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
|
||||
speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE;
|
||||
|
Loading…
x
Reference in New Issue
Block a user