.. | .. |
---|
24 | 24 | #include <linux/firmware.h> |
---|
25 | 25 | #include <linux/slab.h> |
---|
26 | 26 | #include <linux/module.h> |
---|
27 | | -#include <drm/drmP.h> |
---|
| 27 | +#include <linux/pci.h> |
---|
| 28 | + |
---|
28 | 29 | #include "amdgpu.h" |
---|
29 | 30 | #include "amdgpu_atombios.h" |
---|
30 | 31 | #include "amdgpu_ih.h" |
---|
.. | .. |
---|
965 | 966 | |
---|
966 | 967 | static const struct amdgpu_allowed_register_entry cik_allowed_read_registers[] = { |
---|
967 | 968 | {mmGRBM_STATUS}, |
---|
| 969 | + {mmGRBM_STATUS2}, |
---|
| 970 | + {mmGRBM_STATUS_SE0}, |
---|
| 971 | + {mmGRBM_STATUS_SE1}, |
---|
| 972 | + {mmGRBM_STATUS_SE2}, |
---|
| 973 | + {mmGRBM_STATUS_SE3}, |
---|
| 974 | + {mmSRBM_STATUS}, |
---|
| 975 | + {mmSRBM_STATUS2}, |
---|
| 976 | + {mmSDMA0_STATUS_REG + SDMA0_REGISTER_OFFSET}, |
---|
| 977 | + {mmSDMA0_STATUS_REG + SDMA1_REGISTER_OFFSET}, |
---|
| 978 | + {mmCP_STAT}, |
---|
| 979 | + {mmCP_STALLED_STAT1}, |
---|
| 980 | + {mmCP_STALLED_STAT2}, |
---|
| 981 | + {mmCP_STALLED_STAT3}, |
---|
| 982 | + {mmCP_CPF_BUSY_STAT}, |
---|
| 983 | + {mmCP_CPF_STALLED_STAT1}, |
---|
| 984 | + {mmCP_CPF_STATUS}, |
---|
| 985 | + {mmCP_CPC_BUSY_STAT}, |
---|
| 986 | + {mmCP_CPC_STALLED_STAT1}, |
---|
| 987 | + {mmCP_CPC_STATUS}, |
---|
968 | 988 | {mmGB_ADDR_CONFIG}, |
---|
969 | 989 | {mmMC_ARB_RAMCFG}, |
---|
970 | 990 | {mmGB_TILE_MODE0}, |
---|
.. | .. |
---|
1269 | 1289 | } |
---|
1270 | 1290 | |
---|
1271 | 1291 | /** |
---|
| 1292 | + * cik_asic_pci_config_reset - soft reset GPU |
---|
| 1293 | + * |
---|
| 1294 | + * @adev: amdgpu_device pointer |
---|
| 1295 | + * |
---|
| 1296 | + * Use PCI Config method to reset the GPU. |
---|
| 1297 | + * |
---|
| 1298 | + * Returns 0 for success. |
---|
| 1299 | + */ |
---|
| 1300 | +static int cik_asic_pci_config_reset(struct amdgpu_device *adev) |
---|
| 1301 | +{ |
---|
| 1302 | + int r; |
---|
| 1303 | + |
---|
| 1304 | + amdgpu_atombios_scratch_regs_engine_hung(adev, true); |
---|
| 1305 | + |
---|
| 1306 | + r = cik_gpu_pci_config_reset(adev); |
---|
| 1307 | + |
---|
| 1308 | + amdgpu_atombios_scratch_regs_engine_hung(adev, false); |
---|
| 1309 | + |
---|
| 1310 | + return r; |
---|
| 1311 | +} |
---|
| 1312 | + |
---|
| 1313 | +static bool cik_asic_supports_baco(struct amdgpu_device *adev) |
---|
| 1314 | +{ |
---|
| 1315 | + switch (adev->asic_type) { |
---|
| 1316 | + case CHIP_BONAIRE: |
---|
| 1317 | + case CHIP_HAWAII: |
---|
| 1318 | + return amdgpu_dpm_is_baco_supported(adev); |
---|
| 1319 | + default: |
---|
| 1320 | + return false; |
---|
| 1321 | + } |
---|
| 1322 | +} |
---|
| 1323 | + |
---|
| 1324 | +static enum amd_reset_method |
---|
| 1325 | +cik_asic_reset_method(struct amdgpu_device *adev) |
---|
| 1326 | +{ |
---|
| 1327 | + bool baco_reset; |
---|
| 1328 | + |
---|
| 1329 | + if (amdgpu_reset_method == AMD_RESET_METHOD_LEGACY || |
---|
| 1330 | + amdgpu_reset_method == AMD_RESET_METHOD_BACO) |
---|
| 1331 | + return amdgpu_reset_method; |
---|
| 1332 | + |
---|
| 1333 | + if (amdgpu_reset_method != -1) |
---|
| 1334 | + dev_warn(adev->dev, "Specified reset:%d isn't supported, using AUTO instead.\n", |
---|
| 1335 | + amdgpu_reset_method); |
---|
| 1336 | + |
---|
| 1337 | + switch (adev->asic_type) { |
---|
| 1338 | + case CHIP_BONAIRE: |
---|
| 1339 | + /* disable baco reset until it works */ |
---|
| 1340 | + /* smu7_asic_get_baco_capability(adev, &baco_reset); */ |
---|
| 1341 | + baco_reset = false; |
---|
| 1342 | + break; |
---|
| 1343 | + case CHIP_HAWAII: |
---|
| 1344 | + baco_reset = cik_asic_supports_baco(adev); |
---|
| 1345 | + break; |
---|
| 1346 | + default: |
---|
| 1347 | + baco_reset = false; |
---|
| 1348 | + break; |
---|
| 1349 | + } |
---|
| 1350 | + |
---|
| 1351 | + if (baco_reset) |
---|
| 1352 | + return AMD_RESET_METHOD_BACO; |
---|
| 1353 | + else |
---|
| 1354 | + return AMD_RESET_METHOD_LEGACY; |
---|
| 1355 | +} |
---|
| 1356 | + |
---|
| 1357 | +/** |
---|
1272 | 1358 | * cik_asic_reset - soft reset GPU |
---|
1273 | 1359 | * |
---|
1274 | 1360 | * @adev: amdgpu_device pointer |
---|
.. | .. |
---|
1281 | 1367 | { |
---|
1282 | 1368 | int r; |
---|
1283 | 1369 | |
---|
1284 | | - amdgpu_atombios_scratch_regs_engine_hung(adev, true); |
---|
1285 | | - |
---|
1286 | | - r = cik_gpu_pci_config_reset(adev); |
---|
1287 | | - |
---|
1288 | | - amdgpu_atombios_scratch_regs_engine_hung(adev, false); |
---|
| 1370 | + if (cik_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) { |
---|
| 1371 | + dev_info(adev->dev, "BACO reset\n"); |
---|
| 1372 | + r = amdgpu_dpm_baco_reset(adev); |
---|
| 1373 | + } else { |
---|
| 1374 | + dev_info(adev->dev, "PCI CONFIG reset\n"); |
---|
| 1375 | + r = cik_asic_pci_config_reset(adev); |
---|
| 1376 | + } |
---|
1289 | 1377 | |
---|
1290 | 1378 | return r; |
---|
1291 | 1379 | } |
---|
.. | .. |
---|
1377 | 1465 | static void cik_pcie_gen3_enable(struct amdgpu_device *adev) |
---|
1378 | 1466 | { |
---|
1379 | 1467 | struct pci_dev *root = adev->pdev->bus->self; |
---|
1380 | | - int bridge_pos, gpu_pos; |
---|
1381 | 1468 | u32 speed_cntl, current_data_rate; |
---|
1382 | 1469 | int i; |
---|
1383 | 1470 | u16 tmp16; |
---|
.. | .. |
---|
1412 | 1499 | DRM_INFO("enabling PCIE gen 2 link speeds, disable with amdgpu.pcie_gen2=0\n"); |
---|
1413 | 1500 | } |
---|
1414 | 1501 | |
---|
1415 | | - bridge_pos = pci_pcie_cap(root); |
---|
1416 | | - if (!bridge_pos) |
---|
1417 | | - return; |
---|
1418 | | - |
---|
1419 | | - gpu_pos = pci_pcie_cap(adev->pdev); |
---|
1420 | | - if (!gpu_pos) |
---|
| 1502 | + if (!pci_is_pcie(root) || !pci_is_pcie(adev->pdev)) |
---|
1421 | 1503 | return; |
---|
1422 | 1504 | |
---|
1423 | 1505 | if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) { |
---|
.. | .. |
---|
1427 | 1509 | u16 bridge_cfg2, gpu_cfg2; |
---|
1428 | 1510 | u32 max_lw, current_lw, tmp; |
---|
1429 | 1511 | |
---|
1430 | | - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); |
---|
1431 | | - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); |
---|
1432 | | - |
---|
1433 | | - tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; |
---|
1434 | | - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); |
---|
1435 | | - |
---|
1436 | | - tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; |
---|
1437 | | - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); |
---|
| 1512 | + pcie_capability_set_word(root, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); |
---|
| 1513 | + pcie_capability_set_word(adev->pdev, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_HAWD); |
---|
1438 | 1514 | |
---|
1439 | 1515 | tmp = RREG32_PCIE(ixPCIE_LC_STATUS1); |
---|
1440 | 1516 | max_lw = (tmp & PCIE_LC_STATUS1__LC_DETECTED_LINK_WIDTH_MASK) >> |
---|
.. | .. |
---|
1458 | 1534 | |
---|
1459 | 1535 | for (i = 0; i < 10; i++) { |
---|
1460 | 1536 | /* check status */ |
---|
1461 | | - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16); |
---|
| 1537 | + pcie_capability_read_word(adev->pdev, |
---|
| 1538 | + PCI_EXP_DEVSTA, |
---|
| 1539 | + &tmp16); |
---|
1462 | 1540 | if (tmp16 & PCI_EXP_DEVSTA_TRPND) |
---|
1463 | 1541 | break; |
---|
1464 | 1542 | |
---|
1465 | | - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); |
---|
1466 | | - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); |
---|
| 1543 | + pcie_capability_read_word(root, PCI_EXP_LNKCTL, |
---|
| 1544 | + &bridge_cfg); |
---|
| 1545 | + pcie_capability_read_word(adev->pdev, |
---|
| 1546 | + PCI_EXP_LNKCTL, |
---|
| 1547 | + &gpu_cfg); |
---|
1467 | 1548 | |
---|
1468 | | - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2); |
---|
1469 | | - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2); |
---|
| 1549 | + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, |
---|
| 1550 | + &bridge_cfg2); |
---|
| 1551 | + pcie_capability_read_word(adev->pdev, |
---|
| 1552 | + PCI_EXP_LNKCTL2, |
---|
| 1553 | + &gpu_cfg2); |
---|
1470 | 1554 | |
---|
1471 | 1555 | tmp = RREG32_PCIE(ixPCIE_LC_CNTL4); |
---|
1472 | 1556 | tmp |= PCIE_LC_CNTL4__LC_SET_QUIESCE_MASK; |
---|
.. | .. |
---|
1479 | 1563 | msleep(100); |
---|
1480 | 1564 | |
---|
1481 | 1565 | /* linkctl */ |
---|
1482 | | - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16); |
---|
1483 | | - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; |
---|
1484 | | - tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); |
---|
1485 | | - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); |
---|
1486 | | - |
---|
1487 | | - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16); |
---|
1488 | | - tmp16 &= ~PCI_EXP_LNKCTL_HAWD; |
---|
1489 | | - tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); |
---|
1490 | | - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); |
---|
| 1566 | + pcie_capability_clear_and_set_word(root, PCI_EXP_LNKCTL, |
---|
| 1567 | + PCI_EXP_LNKCTL_HAWD, |
---|
| 1568 | + bridge_cfg & |
---|
| 1569 | + PCI_EXP_LNKCTL_HAWD); |
---|
| 1570 | + pcie_capability_clear_and_set_word(adev->pdev, PCI_EXP_LNKCTL, |
---|
| 1571 | + PCI_EXP_LNKCTL_HAWD, |
---|
| 1572 | + gpu_cfg & |
---|
| 1573 | + PCI_EXP_LNKCTL_HAWD); |
---|
1491 | 1574 | |
---|
1492 | 1575 | /* linkctl2 */ |
---|
1493 | | - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16); |
---|
1494 | | - tmp16 &= ~((1 << 4) | (7 << 9)); |
---|
1495 | | - tmp16 |= (bridge_cfg2 & ((1 << 4) | (7 << 9))); |
---|
1496 | | - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16); |
---|
| 1576 | + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, |
---|
| 1577 | + &tmp16); |
---|
| 1578 | + tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | |
---|
| 1579 | + PCI_EXP_LNKCTL2_TX_MARGIN); |
---|
| 1580 | + tmp16 |= (bridge_cfg2 & |
---|
| 1581 | + (PCI_EXP_LNKCTL2_ENTER_COMP | |
---|
| 1582 | + PCI_EXP_LNKCTL2_TX_MARGIN)); |
---|
| 1583 | + pcie_capability_write_word(root, |
---|
| 1584 | + PCI_EXP_LNKCTL2, |
---|
| 1585 | + tmp16); |
---|
1497 | 1586 | |
---|
1498 | | - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); |
---|
1499 | | - tmp16 &= ~((1 << 4) | (7 << 9)); |
---|
1500 | | - tmp16 |= (gpu_cfg2 & ((1 << 4) | (7 << 9))); |
---|
1501 | | - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); |
---|
| 1587 | + pcie_capability_read_word(adev->pdev, |
---|
| 1588 | + PCI_EXP_LNKCTL2, |
---|
| 1589 | + &tmp16); |
---|
| 1590 | + tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | |
---|
| 1591 | + PCI_EXP_LNKCTL2_TX_MARGIN); |
---|
| 1592 | + tmp16 |= (gpu_cfg2 & |
---|
| 1593 | + (PCI_EXP_LNKCTL2_ENTER_COMP | |
---|
| 1594 | + PCI_EXP_LNKCTL2_TX_MARGIN)); |
---|
| 1595 | + pcie_capability_write_word(adev->pdev, |
---|
| 1596 | + PCI_EXP_LNKCTL2, |
---|
| 1597 | + tmp16); |
---|
1502 | 1598 | |
---|
1503 | 1599 | tmp = RREG32_PCIE(ixPCIE_LC_CNTL4); |
---|
1504 | 1600 | tmp &= ~PCIE_LC_CNTL4__LC_SET_QUIESCE_MASK; |
---|
.. | .. |
---|
1513 | 1609 | speed_cntl &= ~PCIE_LC_SPEED_CNTL__LC_FORCE_DIS_SW_SPEED_CHANGE_MASK; |
---|
1514 | 1610 | WREG32_PCIE(ixPCIE_LC_SPEED_CNTL, speed_cntl); |
---|
1515 | 1611 | |
---|
1516 | | - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); |
---|
1517 | | - tmp16 &= ~0xf; |
---|
| 1612 | + pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL2, &tmp16); |
---|
| 1613 | + tmp16 &= ~PCI_EXP_LNKCTL2_TLS; |
---|
| 1614 | + |
---|
1518 | 1615 | if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) |
---|
1519 | | - tmp16 |= 3; /* gen3 */ |
---|
| 1616 | + tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ |
---|
1520 | 1617 | else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2) |
---|
1521 | | - tmp16 |= 2; /* gen2 */ |
---|
| 1618 | + tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ |
---|
1522 | 1619 | else |
---|
1523 | | - tmp16 |= 1; /* gen1 */ |
---|
1524 | | - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); |
---|
| 1620 | + tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ |
---|
| 1621 | + pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL2, tmp16); |
---|
1525 | 1622 | |
---|
1526 | 1623 | speed_cntl = RREG32_PCIE(ixPCIE_LC_SPEED_CNTL); |
---|
1527 | 1624 | speed_cntl |= PCIE_LC_SPEED_CNTL__LC_INITIATE_LINK_SPEED_CHANGE_MASK; |
---|
.. | .. |
---|
1708 | 1805 | >> CC_DRM_ID_STRAPS__ATI_REV_ID__SHIFT; |
---|
1709 | 1806 | } |
---|
1710 | 1807 | |
---|
1711 | | -static void cik_detect_hw_virtualization(struct amdgpu_device *adev) |
---|
1712 | | -{ |
---|
1713 | | - if (is_virtual_machine()) /* passthrough mode */ |
---|
1714 | | - adev->virt.caps |= AMDGPU_PASSTHROUGH_MODE; |
---|
1715 | | -} |
---|
1716 | | - |
---|
1717 | 1808 | static void cik_flush_hdp(struct amdgpu_device *adev, struct amdgpu_ring *ring) |
---|
1718 | 1809 | { |
---|
1719 | 1810 | if (!ring || !ring->funcs->emit_wreg) { |
---|
.. | .. |
---|
1741 | 1832 | return true; |
---|
1742 | 1833 | } |
---|
1743 | 1834 | |
---|
| 1835 | +static void cik_get_pcie_usage(struct amdgpu_device *adev, uint64_t *count0, |
---|
| 1836 | + uint64_t *count1) |
---|
| 1837 | +{ |
---|
| 1838 | + uint32_t perfctr = 0; |
---|
| 1839 | + uint64_t cnt0_of, cnt1_of; |
---|
| 1840 | + int tmp; |
---|
| 1841 | + |
---|
| 1842 | + /* This reports 0 on APUs, so return to avoid writing/reading registers |
---|
| 1843 | + * that may or may not be different from their GPU counterparts |
---|
| 1844 | + */ |
---|
| 1845 | + if (adev->flags & AMD_IS_APU) |
---|
| 1846 | + return; |
---|
| 1847 | + |
---|
| 1848 | + /* Set the 2 events that we wish to watch, defined above */ |
---|
| 1849 | + /* Reg 40 is # received msgs, Reg 104 is # of posted requests sent */ |
---|
| 1850 | + perfctr = REG_SET_FIELD(perfctr, PCIE_PERF_CNTL_TXCLK, EVENT0_SEL, 40); |
---|
| 1851 | + perfctr = REG_SET_FIELD(perfctr, PCIE_PERF_CNTL_TXCLK, EVENT1_SEL, 104); |
---|
| 1852 | + |
---|
| 1853 | + /* Write to enable desired perf counters */ |
---|
| 1854 | + WREG32_PCIE(ixPCIE_PERF_CNTL_TXCLK, perfctr); |
---|
| 1855 | + /* Zero out and enable the perf counters |
---|
| 1856 | + * Write 0x5: |
---|
| 1857 | + * Bit 0 = Start all counters(1) |
---|
| 1858 | + * Bit 2 = Global counter reset enable(1) |
---|
| 1859 | + */ |
---|
| 1860 | + WREG32_PCIE(ixPCIE_PERF_COUNT_CNTL, 0x00000005); |
---|
| 1861 | + |
---|
| 1862 | + msleep(1000); |
---|
| 1863 | + |
---|
| 1864 | + /* Load the shadow and disable the perf counters |
---|
| 1865 | + * Write 0x2: |
---|
| 1866 | + * Bit 0 = Stop counters(0) |
---|
| 1867 | + * Bit 1 = Load the shadow counters(1) |
---|
| 1868 | + */ |
---|
| 1869 | + WREG32_PCIE(ixPCIE_PERF_COUNT_CNTL, 0x00000002); |
---|
| 1870 | + |
---|
| 1871 | + /* Read register values to get any >32bit overflow */ |
---|
| 1872 | + tmp = RREG32_PCIE(ixPCIE_PERF_CNTL_TXCLK); |
---|
| 1873 | + cnt0_of = REG_GET_FIELD(tmp, PCIE_PERF_CNTL_TXCLK, COUNTER0_UPPER); |
---|
| 1874 | + cnt1_of = REG_GET_FIELD(tmp, PCIE_PERF_CNTL_TXCLK, COUNTER1_UPPER); |
---|
| 1875 | + |
---|
| 1876 | + /* Get the values and add the overflow */ |
---|
| 1877 | + *count0 = RREG32_PCIE(ixPCIE_PERF_COUNT0_TXCLK) | (cnt0_of << 32); |
---|
| 1878 | + *count1 = RREG32_PCIE(ixPCIE_PERF_COUNT1_TXCLK) | (cnt1_of << 32); |
---|
| 1879 | +} |
---|
| 1880 | + |
---|
| 1881 | +static bool cik_need_reset_on_init(struct amdgpu_device *adev) |
---|
| 1882 | +{ |
---|
| 1883 | + u32 clock_cntl, pc; |
---|
| 1884 | + |
---|
| 1885 | + if (adev->flags & AMD_IS_APU) |
---|
| 1886 | + return false; |
---|
| 1887 | + |
---|
| 1888 | + /* check if the SMC is already running */ |
---|
| 1889 | + clock_cntl = RREG32_SMC(ixSMC_SYSCON_CLOCK_CNTL_0); |
---|
| 1890 | + pc = RREG32_SMC(ixSMC_PC_C); |
---|
| 1891 | + if ((0 == REG_GET_FIELD(clock_cntl, SMC_SYSCON_CLOCK_CNTL_0, ck_disable)) && |
---|
| 1892 | + (0x20100 <= pc)) |
---|
| 1893 | + return true; |
---|
| 1894 | + |
---|
| 1895 | + return false; |
---|
| 1896 | +} |
---|
| 1897 | + |
---|
| 1898 | +static uint64_t cik_get_pcie_replay_count(struct amdgpu_device *adev) |
---|
| 1899 | +{ |
---|
| 1900 | + uint64_t nak_r, nak_g; |
---|
| 1901 | + |
---|
| 1902 | + /* Get the number of NAKs received and generated */ |
---|
| 1903 | + nak_r = RREG32_PCIE(ixPCIE_RX_NUM_NAK); |
---|
| 1904 | + nak_g = RREG32_PCIE(ixPCIE_RX_NUM_NAK_GENERATED); |
---|
| 1905 | + |
---|
| 1906 | + /* Add the total number of NAKs, i.e the number of replays */ |
---|
| 1907 | + return (nak_r + nak_g); |
---|
| 1908 | +} |
---|
| 1909 | + |
---|
| 1910 | +static void cik_pre_asic_init(struct amdgpu_device *adev) |
---|
| 1911 | +{ |
---|
| 1912 | +} |
---|
| 1913 | + |
---|
1744 | 1914 | static const struct amdgpu_asic_funcs cik_asic_funcs = |
---|
1745 | 1915 | { |
---|
1746 | 1916 | .read_disabled_bios = &cik_read_disabled_bios, |
---|
1747 | 1917 | .read_bios_from_rom = &cik_read_bios_from_rom, |
---|
1748 | 1918 | .read_register = &cik_read_register, |
---|
1749 | 1919 | .reset = &cik_asic_reset, |
---|
| 1920 | + .reset_method = &cik_asic_reset_method, |
---|
1750 | 1921 | .set_vga_state = &cik_vga_set_state, |
---|
1751 | 1922 | .get_xclk = &cik_get_xclk, |
---|
1752 | 1923 | .set_uvd_clocks = &cik_set_uvd_clocks, |
---|
.. | .. |
---|
1755 | 1926 | .flush_hdp = &cik_flush_hdp, |
---|
1756 | 1927 | .invalidate_hdp = &cik_invalidate_hdp, |
---|
1757 | 1928 | .need_full_reset = &cik_need_full_reset, |
---|
| 1929 | + .init_doorbell_index = &legacy_doorbell_index_init, |
---|
| 1930 | + .get_pcie_usage = &cik_get_pcie_usage, |
---|
| 1931 | + .need_reset_on_init = &cik_need_reset_on_init, |
---|
| 1932 | + .get_pcie_replay_count = &cik_get_pcie_replay_count, |
---|
| 1933 | + .supports_baco = &cik_asic_supports_baco, |
---|
| 1934 | + .pre_asic_init = &cik_pre_asic_init, |
---|
1758 | 1935 | }; |
---|
1759 | 1936 | |
---|
1760 | 1937 | static int cik_common_early_init(void *handle) |
---|
.. | .. |
---|
1995 | 2172 | |
---|
1996 | 2173 | int cik_set_ip_blocks(struct amdgpu_device *adev) |
---|
1997 | 2174 | { |
---|
1998 | | - cik_detect_hw_virtualization(adev); |
---|
1999 | | - |
---|
2000 | 2175 | switch (adev->asic_type) { |
---|
2001 | 2176 | case CHIP_BONAIRE: |
---|
2002 | 2177 | amdgpu_device_ip_block_add(adev, &cik_common_ip_block); |
---|
2003 | 2178 | amdgpu_device_ip_block_add(adev, &gmc_v7_0_ip_block); |
---|
2004 | 2179 | amdgpu_device_ip_block_add(adev, &cik_ih_ip_block); |
---|
2005 | | - if (amdgpu_dpm == -1) |
---|
2006 | | - amdgpu_device_ip_block_add(adev, &pp_smu_ip_block); |
---|
2007 | | - else |
---|
2008 | | - amdgpu_device_ip_block_add(adev, &ci_smu_ip_block); |
---|
| 2180 | + amdgpu_device_ip_block_add(adev, &gfx_v7_2_ip_block); |
---|
| 2181 | + amdgpu_device_ip_block_add(adev, &cik_sdma_ip_block); |
---|
| 2182 | + amdgpu_device_ip_block_add(adev, &pp_smu_ip_block); |
---|
2009 | 2183 | if (adev->enable_virtual_display) |
---|
2010 | 2184 | amdgpu_device_ip_block_add(adev, &dce_virtual_ip_block); |
---|
2011 | 2185 | #if defined(CONFIG_DRM_AMD_DC) |
---|
.. | .. |
---|
2014 | 2188 | #endif |
---|
2015 | 2189 | else |
---|
2016 | 2190 | amdgpu_device_ip_block_add(adev, &dce_v8_2_ip_block); |
---|
2017 | | - amdgpu_device_ip_block_add(adev, &gfx_v7_2_ip_block); |
---|
2018 | | - amdgpu_device_ip_block_add(adev, &cik_sdma_ip_block); |
---|
2019 | 2191 | amdgpu_device_ip_block_add(adev, &uvd_v4_2_ip_block); |
---|
2020 | 2192 | amdgpu_device_ip_block_add(adev, &vce_v2_0_ip_block); |
---|
2021 | 2193 | break; |
---|
.. | .. |
---|
2023 | 2195 | amdgpu_device_ip_block_add(adev, &cik_common_ip_block); |
---|
2024 | 2196 | amdgpu_device_ip_block_add(adev, &gmc_v7_0_ip_block); |
---|
2025 | 2197 | amdgpu_device_ip_block_add(adev, &cik_ih_ip_block); |
---|
2026 | | - if (amdgpu_dpm == -1) |
---|
2027 | | - amdgpu_device_ip_block_add(adev, &pp_smu_ip_block); |
---|
2028 | | - else |
---|
2029 | | - amdgpu_device_ip_block_add(adev, &ci_smu_ip_block); |
---|
| 2198 | + amdgpu_device_ip_block_add(adev, &gfx_v7_3_ip_block); |
---|
| 2199 | + amdgpu_device_ip_block_add(adev, &cik_sdma_ip_block); |
---|
| 2200 | + amdgpu_device_ip_block_add(adev, &pp_smu_ip_block); |
---|
2030 | 2201 | if (adev->enable_virtual_display) |
---|
2031 | 2202 | amdgpu_device_ip_block_add(adev, &dce_virtual_ip_block); |
---|
2032 | 2203 | #if defined(CONFIG_DRM_AMD_DC) |
---|
.. | .. |
---|
2035 | 2206 | #endif |
---|
2036 | 2207 | else |
---|
2037 | 2208 | amdgpu_device_ip_block_add(adev, &dce_v8_5_ip_block); |
---|
2038 | | - amdgpu_device_ip_block_add(adev, &gfx_v7_3_ip_block); |
---|
2039 | | - amdgpu_device_ip_block_add(adev, &cik_sdma_ip_block); |
---|
2040 | 2209 | amdgpu_device_ip_block_add(adev, &uvd_v4_2_ip_block); |
---|
2041 | 2210 | amdgpu_device_ip_block_add(adev, &vce_v2_0_ip_block); |
---|
2042 | 2211 | break; |
---|
.. | .. |
---|
2044 | 2213 | amdgpu_device_ip_block_add(adev, &cik_common_ip_block); |
---|
2045 | 2214 | amdgpu_device_ip_block_add(adev, &gmc_v7_0_ip_block); |
---|
2046 | 2215 | amdgpu_device_ip_block_add(adev, &cik_ih_ip_block); |
---|
| 2216 | + amdgpu_device_ip_block_add(adev, &gfx_v7_1_ip_block); |
---|
| 2217 | + amdgpu_device_ip_block_add(adev, &cik_sdma_ip_block); |
---|
2047 | 2218 | amdgpu_device_ip_block_add(adev, &kv_smu_ip_block); |
---|
2048 | 2219 | if (adev->enable_virtual_display) |
---|
2049 | 2220 | amdgpu_device_ip_block_add(adev, &dce_virtual_ip_block); |
---|
.. | .. |
---|
2053 | 2224 | #endif |
---|
2054 | 2225 | else |
---|
2055 | 2226 | amdgpu_device_ip_block_add(adev, &dce_v8_1_ip_block); |
---|
2056 | | - amdgpu_device_ip_block_add(adev, &gfx_v7_1_ip_block); |
---|
2057 | | - amdgpu_device_ip_block_add(adev, &cik_sdma_ip_block); |
---|
| 2227 | + |
---|
2058 | 2228 | amdgpu_device_ip_block_add(adev, &uvd_v4_2_ip_block); |
---|
2059 | 2229 | amdgpu_device_ip_block_add(adev, &vce_v2_0_ip_block); |
---|
2060 | 2230 | break; |
---|
.. | .. |
---|
2063 | 2233 | amdgpu_device_ip_block_add(adev, &cik_common_ip_block); |
---|
2064 | 2234 | amdgpu_device_ip_block_add(adev, &gmc_v7_0_ip_block); |
---|
2065 | 2235 | amdgpu_device_ip_block_add(adev, &cik_ih_ip_block); |
---|
| 2236 | + amdgpu_device_ip_block_add(adev, &gfx_v7_2_ip_block); |
---|
| 2237 | + amdgpu_device_ip_block_add(adev, &cik_sdma_ip_block); |
---|
2066 | 2238 | amdgpu_device_ip_block_add(adev, &kv_smu_ip_block); |
---|
2067 | 2239 | if (adev->enable_virtual_display) |
---|
2068 | 2240 | amdgpu_device_ip_block_add(adev, &dce_virtual_ip_block); |
---|
.. | .. |
---|
2072 | 2244 | #endif |
---|
2073 | 2245 | else |
---|
2074 | 2246 | amdgpu_device_ip_block_add(adev, &dce_v8_3_ip_block); |
---|
2075 | | - amdgpu_device_ip_block_add(adev, &gfx_v7_2_ip_block); |
---|
2076 | | - amdgpu_device_ip_block_add(adev, &cik_sdma_ip_block); |
---|
2077 | 2247 | amdgpu_device_ip_block_add(adev, &uvd_v4_2_ip_block); |
---|
2078 | 2248 | amdgpu_device_ip_block_add(adev, &vce_v2_0_ip_block); |
---|
2079 | 2249 | break; |
---|