.. | .. |
---|
21 | 21 | * |
---|
22 | 22 | * Authors: Alex Deucher |
---|
23 | 23 | */ |
---|
| 24 | + |
---|
24 | 25 | #include <linux/firmware.h> |
---|
25 | | -#include <linux/slab.h> |
---|
26 | 26 | #include <linux/module.h> |
---|
27 | | -#include <drm/drmP.h> |
---|
| 27 | +#include <linux/pci.h> |
---|
| 28 | +#include <linux/slab.h> |
---|
| 29 | + |
---|
| 30 | +#include <drm/drm_vblank.h> |
---|
| 31 | +#include <drm/radeon_drm.h> |
---|
| 32 | + |
---|
| 33 | +#include "atom.h" |
---|
| 34 | +#include "clearstate_si.h" |
---|
28 | 35 | #include "radeon.h" |
---|
29 | 36 | #include "radeon_asic.h" |
---|
30 | 37 | #include "radeon_audio.h" |
---|
31 | | -#include <drm/radeon_drm.h> |
---|
32 | | -#include "sid.h" |
---|
33 | | -#include "atom.h" |
---|
34 | | -#include "si_blit_shaders.h" |
---|
35 | | -#include "clearstate_si.h" |
---|
36 | 38 | #include "radeon_ucode.h" |
---|
| 39 | +#include "si_blit_shaders.h" |
---|
| 40 | +#include "sid.h" |
---|
37 | 41 | |
---|
38 | 42 | |
---|
39 | 43 | MODULE_FIRMWARE("radeon/TAHITI_pfp.bin"); |
---|
.. | .. |
---|
3253 | 3257 | /* XXX what about 12? */ |
---|
3254 | 3258 | rdev->config.si.tile_config |= (3 << 0); |
---|
3255 | 3259 | break; |
---|
3256 | | - } |
---|
| 3260 | + } |
---|
3257 | 3261 | switch ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) { |
---|
3258 | 3262 | case 0: /* four banks */ |
---|
3259 | 3263 | rdev->config.si.tile_config |= 0 << 4; |
---|
.. | .. |
---|
6468 | 6472 | * there. So it is pointless to try to go through that code |
---|
6469 | 6473 | * hence why we disable uvd here. |
---|
6470 | 6474 | */ |
---|
6471 | | - rdev->has_uvd = 0; |
---|
| 6475 | + rdev->has_uvd = false; |
---|
6472 | 6476 | return; |
---|
6473 | 6477 | } |
---|
6474 | 6478 | rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_obj = NULL; |
---|
.. | .. |
---|
6535 | 6539 | * there. So it is pointless to try to go through that code |
---|
6536 | 6540 | * hence why we disable vce here. |
---|
6537 | 6541 | */ |
---|
6538 | | - rdev->has_vce = 0; |
---|
| 6542 | + rdev->has_vce = false; |
---|
6539 | 6543 | return; |
---|
6540 | 6544 | } |
---|
6541 | 6545 | rdev->ring[TN_RING_TYPE_VCE1_INDEX].ring_obj = NULL; |
---|
.. | .. |
---|
7083 | 7087 | { |
---|
7084 | 7088 | struct pci_dev *root = rdev->pdev->bus->self; |
---|
7085 | 7089 | enum pci_bus_speed speed_cap; |
---|
7086 | | - int bridge_pos, gpu_pos; |
---|
7087 | 7090 | u32 speed_cntl, current_data_rate; |
---|
7088 | 7091 | int i; |
---|
7089 | 7092 | u16 tmp16; |
---|
.. | .. |
---|
7125 | 7128 | DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n"); |
---|
7126 | 7129 | } |
---|
7127 | 7130 | |
---|
7128 | | - bridge_pos = pci_pcie_cap(root); |
---|
7129 | | - if (!bridge_pos) |
---|
7130 | | - return; |
---|
7131 | | - |
---|
7132 | | - gpu_pos = pci_pcie_cap(rdev->pdev); |
---|
7133 | | - if (!gpu_pos) |
---|
| 7131 | + if (!pci_is_pcie(root) || !pci_is_pcie(rdev->pdev)) |
---|
7134 | 7132 | return; |
---|
7135 | 7133 | |
---|
7136 | 7134 | if (speed_cap == PCIE_SPEED_8_0GT) { |
---|
.. | .. |
---|
7140 | 7138 | u16 bridge_cfg2, gpu_cfg2; |
---|
7141 | 7139 | u32 max_lw, current_lw, tmp; |
---|
7142 | 7140 | |
---|
7143 | | - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); |
---|
7144 | | - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); |
---|
7145 | | - |
---|
7146 | | - tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; |
---|
7147 | | - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); |
---|
7148 | | - |
---|
7149 | | - tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; |
---|
7150 | | - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); |
---|
| 7141 | + pcie_capability_set_word(root, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); |
---|
| 7142 | + pcie_capability_set_word(rdev->pdev, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); |
---|
7151 | 7143 | |
---|
7152 | 7144 | tmp = RREG32_PCIE(PCIE_LC_STATUS1); |
---|
7153 | 7145 | max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; |
---|
.. | .. |
---|
7165 | 7157 | |
---|
7166 | 7158 | for (i = 0; i < 10; i++) { |
---|
7167 | 7159 | /* check status */ |
---|
7168 | | - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16); |
---|
| 7160 | + pcie_capability_read_word(rdev->pdev, |
---|
| 7161 | + PCI_EXP_DEVSTA, |
---|
| 7162 | + &tmp16); |
---|
7169 | 7163 | if (tmp16 & PCI_EXP_DEVSTA_TRPND) |
---|
7170 | 7164 | break; |
---|
7171 | 7165 | |
---|
7172 | | - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); |
---|
7173 | | - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); |
---|
| 7166 | + pcie_capability_read_word(root, PCI_EXP_LNKCTL, |
---|
| 7167 | + &bridge_cfg); |
---|
| 7168 | + pcie_capability_read_word(rdev->pdev, |
---|
| 7169 | + PCI_EXP_LNKCTL, |
---|
| 7170 | + &gpu_cfg); |
---|
7174 | 7171 | |
---|
7175 | | - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2); |
---|
7176 | | - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2); |
---|
| 7172 | + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, |
---|
| 7173 | + &bridge_cfg2); |
---|
| 7174 | + pcie_capability_read_word(rdev->pdev, |
---|
| 7175 | + PCI_EXP_LNKCTL2, |
---|
| 7176 | + &gpu_cfg2); |
---|
7177 | 7177 | |
---|
7178 | 7178 | tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); |
---|
7179 | 7179 | tmp |= LC_SET_QUIESCE; |
---|
.. | .. |
---|
7183 | 7183 | tmp |= LC_REDO_EQ; |
---|
7184 | 7184 | WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp); |
---|
7185 | 7185 | |
---|
7186 | | - mdelay(100); |
---|
| 7186 | + msleep(100); |
---|
7187 | 7187 | |
---|
7188 | 7188 | /* linkctl */ |
---|
7189 | | - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16); |
---|
7190 | | - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; |
---|
7191 | | - tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); |
---|
7192 | | - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); |
---|
7193 | | - |
---|
7194 | | - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16); |
---|
7195 | | - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; |
---|
7196 | | - tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); |
---|
7197 | | - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); |
---|
| 7189 | + pcie_capability_clear_and_set_word(root, PCI_EXP_LNKCTL, |
---|
| 7190 | + PCI_EXP_LNKCTL_HAWD, |
---|
| 7191 | + bridge_cfg & |
---|
| 7192 | + PCI_EXP_LNKCTL_HAWD); |
---|
| 7193 | + pcie_capability_clear_and_set_word(rdev->pdev, PCI_EXP_LNKCTL, |
---|
| 7194 | + PCI_EXP_LNKCTL_HAWD, |
---|
| 7195 | + gpu_cfg & |
---|
| 7196 | + PCI_EXP_LNKCTL_HAWD); |
---|
7198 | 7197 | |
---|
7199 | 7198 | /* linkctl2 */ |
---|
7200 | | - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16); |
---|
7201 | | - tmp16 &= ~((1 << 4) | (7 << 9)); |
---|
7202 | | - tmp16 |= (bridge_cfg2 & ((1 << 4) | (7 << 9))); |
---|
7203 | | - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16); |
---|
| 7199 | + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, |
---|
| 7200 | + &tmp16); |
---|
| 7201 | + tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | |
---|
| 7202 | + PCI_EXP_LNKCTL2_TX_MARGIN); |
---|
| 7203 | + tmp16 |= (bridge_cfg2 & |
---|
| 7204 | + (PCI_EXP_LNKCTL2_ENTER_COMP | |
---|
| 7205 | + PCI_EXP_LNKCTL2_TX_MARGIN)); |
---|
| 7206 | + pcie_capability_write_word(root, |
---|
| 7207 | + PCI_EXP_LNKCTL2, |
---|
| 7208 | + tmp16); |
---|
7204 | 7209 | |
---|
7205 | | - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); |
---|
7206 | | - tmp16 &= ~((1 << 4) | (7 << 9)); |
---|
7207 | | - tmp16 |= (gpu_cfg2 & ((1 << 4) | (7 << 9))); |
---|
7208 | | - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); |
---|
| 7210 | + pcie_capability_read_word(rdev->pdev, |
---|
| 7211 | + PCI_EXP_LNKCTL2, |
---|
| 7212 | + &tmp16); |
---|
| 7213 | + tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | |
---|
| 7214 | + PCI_EXP_LNKCTL2_TX_MARGIN); |
---|
| 7215 | + tmp16 |= (gpu_cfg2 & |
---|
| 7216 | + (PCI_EXP_LNKCTL2_ENTER_COMP | |
---|
| 7217 | + PCI_EXP_LNKCTL2_TX_MARGIN)); |
---|
| 7218 | + pcie_capability_write_word(rdev->pdev, |
---|
| 7219 | + PCI_EXP_LNKCTL2, |
---|
| 7220 | + tmp16); |
---|
7209 | 7221 | |
---|
7210 | 7222 | tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); |
---|
7211 | 7223 | tmp &= ~LC_SET_QUIESCE; |
---|
.. | .. |
---|
7219 | 7231 | speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE; |
---|
7220 | 7232 | WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); |
---|
7221 | 7233 | |
---|
7222 | | - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); |
---|
7223 | | - tmp16 &= ~0xf; |
---|
| 7234 | + pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL2, &tmp16); |
---|
| 7235 | + tmp16 &= ~PCI_EXP_LNKCTL2_TLS; |
---|
7224 | 7236 | if (speed_cap == PCIE_SPEED_8_0GT) |
---|
7225 | | - tmp16 |= 3; /* gen3 */ |
---|
| 7237 | + tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ |
---|
7226 | 7238 | else if (speed_cap == PCIE_SPEED_5_0GT) |
---|
7227 | | - tmp16 |= 2; /* gen2 */ |
---|
| 7239 | + tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ |
---|
7228 | 7240 | else |
---|
7229 | | - tmp16 |= 1; /* gen1 */ |
---|
7230 | | - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); |
---|
| 7241 | + tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ |
---|
| 7242 | + pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL2, tmp16); |
---|
7231 | 7243 | |
---|
7232 | 7244 | speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); |
---|
7233 | 7245 | speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE; |
---|