diff options
Diffstat (limited to 'drivers/char/agp/intel-gtt.c')
-rw-r--r-- | drivers/char/agp/intel-gtt.c | 107 |
1 files changed, 99 insertions, 8 deletions
diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c index 9ed92ef5829b..58e32f7c3229 100644 --- a/drivers/char/agp/intel-gtt.c +++ b/drivers/char/agp/intel-gtt.c | |||
@@ -1156,6 +1156,30 @@ static bool gen6_check_flags(unsigned int flags) | |||
1156 | return true; | 1156 | return true; |
1157 | } | 1157 | } |
1158 | 1158 | ||
1159 | static void haswell_write_entry(dma_addr_t addr, unsigned int entry, | ||
1160 | unsigned int flags) | ||
1161 | { | ||
1162 | unsigned int type_mask = flags & ~AGP_USER_CACHED_MEMORY_GFDT; | ||
1163 | unsigned int gfdt = flags & AGP_USER_CACHED_MEMORY_GFDT; | ||
1164 | u32 pte_flags; | ||
1165 | |||
1166 | if (type_mask == AGP_USER_MEMORY) | ||
1167 | pte_flags = HSW_PTE_UNCACHED | I810_PTE_VALID; | ||
1168 | else if (type_mask == AGP_USER_CACHED_MEMORY_LLC_MLC) { | ||
1169 | pte_flags = GEN6_PTE_LLC_MLC | I810_PTE_VALID; | ||
1170 | if (gfdt) | ||
1171 | pte_flags |= GEN6_PTE_GFDT; | ||
1172 | } else { /* set 'normal'/'cached' to LLC by default */ | ||
1173 | pte_flags = GEN6_PTE_LLC | I810_PTE_VALID; | ||
1174 | if (gfdt) | ||
1175 | pte_flags |= GEN6_PTE_GFDT; | ||
1176 | } | ||
1177 | |||
1178 | /* gen6 has bit11-4 for physical addr bit39-32 */ | ||
1179 | addr |= (addr >> 28) & 0xff0; | ||
1180 | writel(addr | pte_flags, intel_private.gtt + entry); | ||
1181 | } | ||
1182 | |||
1159 | static void gen6_write_entry(dma_addr_t addr, unsigned int entry, | 1183 | static void gen6_write_entry(dma_addr_t addr, unsigned int entry, |
1160 | unsigned int flags) | 1184 | unsigned int flags) |
1161 | { | 1185 | { |
@@ -1382,6 +1406,15 @@ static const struct intel_gtt_driver sandybridge_gtt_driver = { | |||
1382 | .check_flags = gen6_check_flags, | 1406 | .check_flags = gen6_check_flags, |
1383 | .chipset_flush = i9xx_chipset_flush, | 1407 | .chipset_flush = i9xx_chipset_flush, |
1384 | }; | 1408 | }; |
1409 | static const struct intel_gtt_driver haswell_gtt_driver = { | ||
1410 | .gen = 6, | ||
1411 | .setup = i9xx_setup, | ||
1412 | .cleanup = gen6_cleanup, | ||
1413 | .write_entry = haswell_write_entry, | ||
1414 | .dma_mask_size = 40, | ||
1415 | .check_flags = gen6_check_flags, | ||
1416 | .chipset_flush = i9xx_chipset_flush, | ||
1417 | }; | ||
1385 | static const struct intel_gtt_driver valleyview_gtt_driver = { | 1418 | static const struct intel_gtt_driver valleyview_gtt_driver = { |
1386 | .gen = 7, | 1419 | .gen = 7, |
1387 | .setup = i9xx_setup, | 1420 | .setup = i9xx_setup, |
@@ -1499,19 +1532,77 @@ static const struct intel_gtt_driver_description { | |||
1499 | { PCI_DEVICE_ID_INTEL_VALLEYVIEW_IG, | 1532 | { PCI_DEVICE_ID_INTEL_VALLEYVIEW_IG, |
1500 | "ValleyView", &valleyview_gtt_driver }, | 1533 | "ValleyView", &valleyview_gtt_driver }, |
1501 | { PCI_DEVICE_ID_INTEL_HASWELL_D_GT1_IG, | 1534 | { PCI_DEVICE_ID_INTEL_HASWELL_D_GT1_IG, |
1502 | "Haswell", &sandybridge_gtt_driver }, | 1535 | "Haswell", &haswell_gtt_driver }, |
1503 | { PCI_DEVICE_ID_INTEL_HASWELL_D_GT2_IG, | 1536 | { PCI_DEVICE_ID_INTEL_HASWELL_D_GT2_IG, |
1504 | "Haswell", &sandybridge_gtt_driver }, | 1537 | "Haswell", &haswell_gtt_driver }, |
1538 | { PCI_DEVICE_ID_INTEL_HASWELL_D_GT2_PLUS_IG, | ||
1539 | "Haswell", &haswell_gtt_driver }, | ||
1505 | { PCI_DEVICE_ID_INTEL_HASWELL_M_GT1_IG, | 1540 | { PCI_DEVICE_ID_INTEL_HASWELL_M_GT1_IG, |
1506 | "Haswell", &sandybridge_gtt_driver }, | 1541 | "Haswell", &haswell_gtt_driver }, |
1507 | { PCI_DEVICE_ID_INTEL_HASWELL_M_GT2_IG, | 1542 | { PCI_DEVICE_ID_INTEL_HASWELL_M_GT2_IG, |
1508 | "Haswell", &sandybridge_gtt_driver }, | 1543 | "Haswell", &haswell_gtt_driver }, |
1544 | { PCI_DEVICE_ID_INTEL_HASWELL_M_GT2_PLUS_IG, | ||
1545 | "Haswell", &haswell_gtt_driver }, | ||
1509 | { PCI_DEVICE_ID_INTEL_HASWELL_S_GT1_IG, | 1546 | { PCI_DEVICE_ID_INTEL_HASWELL_S_GT1_IG, |
1510 | "Haswell", &sandybridge_gtt_driver }, | 1547 | "Haswell", &haswell_gtt_driver }, |
1511 | { PCI_DEVICE_ID_INTEL_HASWELL_S_GT2_IG, | 1548 | { PCI_DEVICE_ID_INTEL_HASWELL_S_GT2_IG, |
1512 | "Haswell", &sandybridge_gtt_driver }, | 1549 | "Haswell", &haswell_gtt_driver }, |
1513 | { PCI_DEVICE_ID_INTEL_HASWELL_SDV, | 1550 | { PCI_DEVICE_ID_INTEL_HASWELL_S_GT2_PLUS_IG, |
1514 | "Haswell", &sandybridge_gtt_driver }, | 1551 | "Haswell", &haswell_gtt_driver }, |
1552 | { PCI_DEVICE_ID_INTEL_HASWELL_SDV_D_GT1_IG, | ||
1553 | "Haswell", &haswell_gtt_driver }, | ||
1554 | { PCI_DEVICE_ID_INTEL_HASWELL_SDV_D_GT2_IG, | ||
1555 | "Haswell", &haswell_gtt_driver }, | ||
1556 | { PCI_DEVICE_ID_INTEL_HASWELL_SDV_D_GT2_PLUS_IG, | ||
1557 | "Haswell", &haswell_gtt_driver }, | ||
1558 | { PCI_DEVICE_ID_INTEL_HASWELL_SDV_M_GT1_IG, | ||
1559 | "Haswell", &haswell_gtt_driver }, | ||
1560 | { PCI_DEVICE_ID_INTEL_HASWELL_SDV_M_GT2_IG, | ||
1561 | "Haswell", &haswell_gtt_driver }, | ||
1562 | { PCI_DEVICE_ID_INTEL_HASWELL_SDV_M_GT2_PLUS_IG, | ||
1563 | "Haswell", &haswell_gtt_driver }, | ||
1564 | { PCI_DEVICE_ID_INTEL_HASWELL_SDV_S_GT1_IG, | ||
1565 | "Haswell", &haswell_gtt_driver }, | ||
1566 | { PCI_DEVICE_ID_INTEL_HASWELL_SDV_S_GT2_IG, | ||
1567 | "Haswell", &haswell_gtt_driver }, | ||
1568 | { PCI_DEVICE_ID_INTEL_HASWELL_SDV_S_GT2_PLUS_IG, | ||
1569 | "Haswell", &haswell_gtt_driver }, | ||
1570 | { PCI_DEVICE_ID_INTEL_HASWELL_ULT_D_GT1_IG, | ||
1571 | "Haswell", &haswell_gtt_driver }, | ||
1572 | { PCI_DEVICE_ID_INTEL_HASWELL_ULT_D_GT2_IG, | ||
1573 | "Haswell", &haswell_gtt_driver }, | ||
1574 | { PCI_DEVICE_ID_INTEL_HASWELL_ULT_D_GT2_PLUS_IG, | ||
1575 | "Haswell", &haswell_gtt_driver }, | ||
1576 | { PCI_DEVICE_ID_INTEL_HASWELL_ULT_M_GT1_IG, | ||
1577 | "Haswell", &haswell_gtt_driver }, | ||
1578 | { PCI_DEVICE_ID_INTEL_HASWELL_ULT_M_GT2_IG, | ||
1579 | "Haswell", &haswell_gtt_driver }, | ||
1580 | { PCI_DEVICE_ID_INTEL_HASWELL_ULT_M_GT2_PLUS_IG, | ||
1581 | "Haswell", &haswell_gtt_driver }, | ||
1582 | { PCI_DEVICE_ID_INTEL_HASWELL_ULT_S_GT1_IG, | ||
1583 | "Haswell", &haswell_gtt_driver }, | ||
1584 | { PCI_DEVICE_ID_INTEL_HASWELL_ULT_S_GT2_IG, | ||
1585 | "Haswell", &haswell_gtt_driver }, | ||
1586 | { PCI_DEVICE_ID_INTEL_HASWELL_ULT_S_GT2_PLUS_IG, | ||
1587 | "Haswell", &haswell_gtt_driver }, | ||
1588 | { PCI_DEVICE_ID_INTEL_HASWELL_CRW_D_GT1_IG, | ||
1589 | "Haswell", &haswell_gtt_driver }, | ||
1590 | { PCI_DEVICE_ID_INTEL_HASWELL_CRW_D_GT2_IG, | ||
1591 | "Haswell", &haswell_gtt_driver }, | ||
1592 | { PCI_DEVICE_ID_INTEL_HASWELL_CRW_D_GT2_PLUS_IG, | ||
1593 | "Haswell", &haswell_gtt_driver }, | ||
1594 | { PCI_DEVICE_ID_INTEL_HASWELL_CRW_M_GT1_IG, | ||
1595 | "Haswell", &haswell_gtt_driver }, | ||
1596 | { PCI_DEVICE_ID_INTEL_HASWELL_CRW_M_GT2_IG, | ||
1597 | "Haswell", &haswell_gtt_driver }, | ||
1598 | { PCI_DEVICE_ID_INTEL_HASWELL_CRW_M_GT2_PLUS_IG, | ||
1599 | "Haswell", &haswell_gtt_driver }, | ||
1600 | { PCI_DEVICE_ID_INTEL_HASWELL_CRW_S_GT1_IG, | ||
1601 | "Haswell", &haswell_gtt_driver }, | ||
1602 | { PCI_DEVICE_ID_INTEL_HASWELL_CRW_S_GT2_IG, | ||
1603 | "Haswell", &haswell_gtt_driver }, | ||
1604 | { PCI_DEVICE_ID_INTEL_HASWELL_CRW_S_GT2_PLUS_IG, | ||
1605 | "Haswell", &haswell_gtt_driver }, | ||
1515 | { 0, NULL, NULL } | 1606 | { 0, NULL, NULL } |
1516 | }; | 1607 | }; |
1517 | 1608 | ||