| .. | .. |
|---|
| 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); |
|---|
| 7141 | + pcie_capability_read_word(root, PCI_EXP_LNKCTL, |
|---|
| 7142 | + &bridge_cfg); |
|---|
| 7143 | + pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL, |
|---|
| 7144 | + &gpu_cfg); |
|---|
| 7145 | 7145 | |
|---|
| 7146 | 7146 | tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; |
|---|
| 7147 | | - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); |
|---|
| 7147 | + pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); |
|---|
| 7148 | 7148 | |
|---|
| 7149 | 7149 | tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; |
|---|
| 7150 | | - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); |
|---|
| 7150 | + pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL, |
|---|
| 7151 | + tmp16); |
|---|
| 7151 | 7152 | |
|---|
| 7152 | 7153 | tmp = RREG32_PCIE(PCIE_LC_STATUS1); |
|---|
| 7153 | 7154 | max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; |
|---|
| .. | .. |
|---|
| 7165 | 7166 | |
|---|
| 7166 | 7167 | for (i = 0; i < 10; i++) { |
|---|
| 7167 | 7168 | /* check status */ |
|---|
| 7168 | | - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16); |
|---|
| 7169 | + pcie_capability_read_word(rdev->pdev, |
|---|
| 7170 | + PCI_EXP_DEVSTA, |
|---|
| 7171 | + &tmp16); |
|---|
| 7169 | 7172 | if (tmp16 & PCI_EXP_DEVSTA_TRPND) |
|---|
| 7170 | 7173 | break; |
|---|
| 7171 | 7174 | |
|---|
| 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); |
|---|
| 7175 | + pcie_capability_read_word(root, PCI_EXP_LNKCTL, |
|---|
| 7176 | + &bridge_cfg); |
|---|
| 7177 | + pcie_capability_read_word(rdev->pdev, |
|---|
| 7178 | + PCI_EXP_LNKCTL, |
|---|
| 7179 | + &gpu_cfg); |
|---|
| 7174 | 7180 | |
|---|
| 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); |
|---|
| 7181 | + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, |
|---|
| 7182 | + &bridge_cfg2); |
|---|
| 7183 | + pcie_capability_read_word(rdev->pdev, |
|---|
| 7184 | + PCI_EXP_LNKCTL2, |
|---|
| 7185 | + &gpu_cfg2); |
|---|
| 7177 | 7186 | |
|---|
| 7178 | 7187 | tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); |
|---|
| 7179 | 7188 | tmp |= LC_SET_QUIESCE; |
|---|
| .. | .. |
|---|
| 7183 | 7192 | tmp |= LC_REDO_EQ; |
|---|
| 7184 | 7193 | WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp); |
|---|
| 7185 | 7194 | |
|---|
| 7186 | | - mdelay(100); |
|---|
| 7195 | + msleep(100); |
|---|
| 7187 | 7196 | |
|---|
| 7188 | 7197 | /* linkctl */ |
|---|
| 7189 | | - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16); |
|---|
| 7198 | + pcie_capability_read_word(root, PCI_EXP_LNKCTL, |
|---|
| 7199 | + &tmp16); |
|---|
| 7190 | 7200 | tmp16 &= ~PCI_EXP_LNKCTL_HAWD; |
|---|
| 7191 | 7201 | tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); |
|---|
| 7192 | | - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); |
|---|
| 7202 | + pcie_capability_write_word(root, |
|---|
| 7203 | + PCI_EXP_LNKCTL, |
|---|
| 7204 | + tmp16); |
|---|
| 7193 | 7205 | |
|---|
| 7194 | | - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16); |
|---|
| 7206 | + pcie_capability_read_word(rdev->pdev, |
|---|
| 7207 | + PCI_EXP_LNKCTL, |
|---|
| 7208 | + &tmp16); |
|---|
| 7195 | 7209 | tmp16 &= ~PCI_EXP_LNKCTL_HAWD; |
|---|
| 7196 | 7210 | tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); |
|---|
| 7197 | | - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); |
|---|
| 7211 | + pcie_capability_write_word(rdev->pdev, |
|---|
| 7212 | + PCI_EXP_LNKCTL, |
|---|
| 7213 | + tmp16); |
|---|
| 7198 | 7214 | |
|---|
| 7199 | 7215 | /* 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); |
|---|
| 7216 | + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, |
|---|
| 7217 | + &tmp16); |
|---|
| 7218 | + tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | |
|---|
| 7219 | + PCI_EXP_LNKCTL2_TX_MARGIN); |
|---|
| 7220 | + tmp16 |= (bridge_cfg2 & |
|---|
| 7221 | + (PCI_EXP_LNKCTL2_ENTER_COMP | |
|---|
| 7222 | + PCI_EXP_LNKCTL2_TX_MARGIN)); |
|---|
| 7223 | + pcie_capability_write_word(root, |
|---|
| 7224 | + PCI_EXP_LNKCTL2, |
|---|
| 7225 | + tmp16); |
|---|
| 7204 | 7226 | |
|---|
| 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); |
|---|
| 7227 | + pcie_capability_read_word(rdev->pdev, |
|---|
| 7228 | + PCI_EXP_LNKCTL2, |
|---|
| 7229 | + &tmp16); |
|---|
| 7230 | + tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | |
|---|
| 7231 | + PCI_EXP_LNKCTL2_TX_MARGIN); |
|---|
| 7232 | + tmp16 |= (gpu_cfg2 & |
|---|
| 7233 | + (PCI_EXP_LNKCTL2_ENTER_COMP | |
|---|
| 7234 | + PCI_EXP_LNKCTL2_TX_MARGIN)); |
|---|
| 7235 | + pcie_capability_write_word(rdev->pdev, |
|---|
| 7236 | + PCI_EXP_LNKCTL2, |
|---|
| 7237 | + tmp16); |
|---|
| 7209 | 7238 | |
|---|
| 7210 | 7239 | tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); |
|---|
| 7211 | 7240 | tmp &= ~LC_SET_QUIESCE; |
|---|
| .. | .. |
|---|
| 7219 | 7248 | speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE; |
|---|
| 7220 | 7249 | WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); |
|---|
| 7221 | 7250 | |
|---|
| 7222 | | - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); |
|---|
| 7223 | | - tmp16 &= ~0xf; |
|---|
| 7251 | + pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL2, &tmp16); |
|---|
| 7252 | + tmp16 &= ~PCI_EXP_LNKCTL2_TLS; |
|---|
| 7224 | 7253 | if (speed_cap == PCIE_SPEED_8_0GT) |
|---|
| 7225 | | - tmp16 |= 3; /* gen3 */ |
|---|
| 7254 | + tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ |
|---|
| 7226 | 7255 | else if (speed_cap == PCIE_SPEED_5_0GT) |
|---|
| 7227 | | - tmp16 |= 2; /* gen2 */ |
|---|
| 7256 | + tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ |
|---|
| 7228 | 7257 | else |
|---|
| 7229 | | - tmp16 |= 1; /* gen1 */ |
|---|
| 7230 | | - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); |
|---|
| 7258 | + tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ |
|---|
| 7259 | + pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL2, tmp16); |
|---|
| 7231 | 7260 | |
|---|
| 7232 | 7261 | speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); |
|---|
| 7233 | 7262 | speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE; |
|---|