.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * Intel E3-1200 |
---|
3 | 4 | * Copyright (C) 2014 Jason Baron <jbaron@akamai.com> |
---|
.. | .. |
---|
8 | 9 | * Since the DRAM controller is on the cpu chip, we can use its PCI device |
---|
9 | 10 | * id to identify these processors. |
---|
10 | 11 | * |
---|
11 | | - * PCI DRAM controller device ids (Taken from The PCI ID Repository - http://pci-ids.ucw.cz/) |
---|
| 12 | + * PCI DRAM controller device ids (Taken from The PCI ID Repository - https://pci-ids.ucw.cz/) |
---|
12 | 13 | * |
---|
13 | 14 | * 0108: Xeon E3-1200 Processor Family DRAM Controller |
---|
14 | 15 | * 010c: Xeon E3-1200/2nd Generation Core Processor Family DRAM Controller |
---|
.. | .. |
---|
19 | 20 | * 0c08: Xeon E3-1200 v3 Processor DRAM Controller |
---|
20 | 21 | * 1918: Xeon E3-1200 v5 Skylake Host Bridge/DRAM Registers |
---|
21 | 22 | * 5918: Xeon E3-1200 Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers |
---|
| 23 | + * 3e..: 8th/9th Gen Core Processor Host Bridge/DRAM Registers |
---|
22 | 24 | * |
---|
23 | 25 | * Based on Intel specification: |
---|
24 | | - * http://www.intel.com/content/dam/www/public/us/en/documents/datasheets/xeon-e3-1200v3-vol-2-datasheet.pdf |
---|
| 26 | + * https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/xeon-e3-1200v3-vol-2-datasheet.pdf |
---|
25 | 27 | * http://www.intel.com/content/www/us/en/processors/xeon/xeon-e3-1200-family-vol-2-datasheet.html |
---|
26 | | - * http://www.intel.com/content/www/us/en/processors/core/7th-gen-core-family-mobile-h-processor-lines-datasheet-vol-2.html |
---|
| 28 | + * https://www.intel.com/content/www/us/en/processors/core/7th-gen-core-family-mobile-h-processor-lines-datasheet-vol-2.html |
---|
| 29 | + * https://www.intel.com/content/www/us/en/products/docs/processors/core/8th-gen-core-family-datasheet-vol-2.html |
---|
27 | 30 | * |
---|
28 | 31 | * According to the above datasheet (p.16): |
---|
29 | 32 | * " |
---|
.. | .. |
---|
59 | 62 | #define PCI_DEVICE_ID_INTEL_IE31200_HB_7 0x0c08 |
---|
60 | 63 | #define PCI_DEVICE_ID_INTEL_IE31200_HB_8 0x1918 |
---|
61 | 64 | #define PCI_DEVICE_ID_INTEL_IE31200_HB_9 0x5918 |
---|
| 65 | + |
---|
| 66 | +/* Coffee Lake-S */ |
---|
| 67 | +#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_MASK 0x3e00 |
---|
| 68 | +#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_1 0x3e0f |
---|
| 69 | +#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_2 0x3e18 |
---|
| 70 | +#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_3 0x3e1f |
---|
| 71 | +#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_4 0x3e30 |
---|
| 72 | +#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_5 0x3e31 |
---|
| 73 | +#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_6 0x3e32 |
---|
| 74 | +#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_7 0x3e33 |
---|
| 75 | +#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_8 0x3ec2 |
---|
| 76 | +#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_9 0x3ec6 |
---|
| 77 | +#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_10 0x3eca |
---|
| 78 | + |
---|
| 79 | +/* Test if HB is for Skylake or later. */ |
---|
| 80 | +#define DEVICE_ID_SKYLAKE_OR_LATER(did) \ |
---|
| 81 | + (((did) == PCI_DEVICE_ID_INTEL_IE31200_HB_8) || \ |
---|
| 82 | + ((did) == PCI_DEVICE_ID_INTEL_IE31200_HB_9) || \ |
---|
| 83 | + (((did) & PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_MASK) == \ |
---|
| 84 | + PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_MASK)) |
---|
62 | 85 | |
---|
63 | 86 | #define IE31200_DIMMS 4 |
---|
64 | 87 | #define IE31200_RANKS 8 |
---|
.. | .. |
---|
336 | 359 | return NULL; |
---|
337 | 360 | } |
---|
338 | 361 | |
---|
339 | | - window = ioremap_nocache(u.mchbar, IE31200_MMR_WINDOW_SIZE); |
---|
| 362 | + window = ioremap(u.mchbar, IE31200_MMR_WINDOW_SIZE); |
---|
340 | 363 | if (!window) |
---|
341 | 364 | ie31200_printk(KERN_ERR, "Cannot map mmio space at 0x%llx\n", |
---|
342 | 365 | (unsigned long long)u.mchbar); |
---|
.. | .. |
---|
382 | 405 | u32 addr_decode, mad_offset; |
---|
383 | 406 | |
---|
384 | 407 | /* |
---|
385 | | - * Kaby Lake seems to work like Skylake. Please re-visit this logic |
---|
386 | | - * when adding new CPU support. |
---|
| 408 | + * Kaby Lake, Coffee Lake seem to work like Skylake. Please re-visit |
---|
| 409 | + * this logic when adding new CPU support. |
---|
387 | 410 | */ |
---|
388 | | - bool skl = (pdev->device >= PCI_DEVICE_ID_INTEL_IE31200_HB_8); |
---|
| 411 | + bool skl = DEVICE_ID_SKYLAKE_OR_LATER(pdev->device); |
---|
389 | 412 | |
---|
390 | 413 | edac_dbg(0, "MC:\n"); |
---|
391 | 414 | |
---|
.. | .. |
---|
469 | 492 | |
---|
470 | 493 | if (dimm_info[j][i].dual_rank) { |
---|
471 | 494 | nr_pages = nr_pages / 2; |
---|
472 | | - dimm = EDAC_DIMM_PTR(mci->layers, mci->dimms, |
---|
473 | | - mci->n_layers, (i * 2) + 1, |
---|
474 | | - j, 0); |
---|
| 495 | + dimm = edac_get_dimm(mci, (i * 2) + 1, j, 0); |
---|
475 | 496 | dimm->nr_pages = nr_pages; |
---|
476 | 497 | edac_dbg(0, "set nr pages: 0x%lx\n", nr_pages); |
---|
477 | 498 | dimm->grain = 8; /* just a guess */ |
---|
.. | .. |
---|
482 | 503 | dimm->dtype = DEV_UNKNOWN; |
---|
483 | 504 | dimm->edac_mode = EDAC_UNKNOWN; |
---|
484 | 505 | } |
---|
485 | | - dimm = EDAC_DIMM_PTR(mci->layers, mci->dimms, |
---|
486 | | - mci->n_layers, i * 2, j, 0); |
---|
| 506 | + dimm = edac_get_dimm(mci, i * 2, j, 0); |
---|
487 | 507 | dimm->nr_pages = nr_pages; |
---|
488 | 508 | edac_dbg(0, "set nr pages: 0x%lx\n", nr_pages); |
---|
489 | 509 | dimm->grain = 8; /* same guess */ |
---|
.. | .. |
---|
549 | 569 | } |
---|
550 | 570 | |
---|
551 | 571 | static const struct pci_device_id ie31200_pci_tbl[] = { |
---|
552 | | - { |
---|
553 | | - PCI_VEND_DEV(INTEL, IE31200_HB_1), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
---|
554 | | - IE31200}, |
---|
555 | | - { |
---|
556 | | - PCI_VEND_DEV(INTEL, IE31200_HB_2), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
---|
557 | | - IE31200}, |
---|
558 | | - { |
---|
559 | | - PCI_VEND_DEV(INTEL, IE31200_HB_3), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
---|
560 | | - IE31200}, |
---|
561 | | - { |
---|
562 | | - PCI_VEND_DEV(INTEL, IE31200_HB_4), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
---|
563 | | - IE31200}, |
---|
564 | | - { |
---|
565 | | - PCI_VEND_DEV(INTEL, IE31200_HB_5), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
---|
566 | | - IE31200}, |
---|
567 | | - { |
---|
568 | | - PCI_VEND_DEV(INTEL, IE31200_HB_6), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
---|
569 | | - IE31200}, |
---|
570 | | - { |
---|
571 | | - PCI_VEND_DEV(INTEL, IE31200_HB_7), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
---|
572 | | - IE31200}, |
---|
573 | | - { |
---|
574 | | - PCI_VEND_DEV(INTEL, IE31200_HB_8), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
---|
575 | | - IE31200}, |
---|
576 | | - { |
---|
577 | | - PCI_VEND_DEV(INTEL, IE31200_HB_9), PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
---|
578 | | - IE31200}, |
---|
579 | | - { |
---|
580 | | - 0, |
---|
581 | | - } /* 0 terminated list. */ |
---|
| 572 | + { PCI_VEND_DEV(INTEL, IE31200_HB_1), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 573 | + { PCI_VEND_DEV(INTEL, IE31200_HB_2), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 574 | + { PCI_VEND_DEV(INTEL, IE31200_HB_3), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 575 | + { PCI_VEND_DEV(INTEL, IE31200_HB_4), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 576 | + { PCI_VEND_DEV(INTEL, IE31200_HB_5), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 577 | + { PCI_VEND_DEV(INTEL, IE31200_HB_6), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 578 | + { PCI_VEND_DEV(INTEL, IE31200_HB_7), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 579 | + { PCI_VEND_DEV(INTEL, IE31200_HB_8), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 580 | + { PCI_VEND_DEV(INTEL, IE31200_HB_9), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 581 | + { PCI_VEND_DEV(INTEL, IE31200_HB_CFL_1), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 582 | + { PCI_VEND_DEV(INTEL, IE31200_HB_CFL_2), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 583 | + { PCI_VEND_DEV(INTEL, IE31200_HB_CFL_3), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 584 | + { PCI_VEND_DEV(INTEL, IE31200_HB_CFL_4), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 585 | + { PCI_VEND_DEV(INTEL, IE31200_HB_CFL_5), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 586 | + { PCI_VEND_DEV(INTEL, IE31200_HB_CFL_6), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 587 | + { PCI_VEND_DEV(INTEL, IE31200_HB_CFL_7), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 588 | + { PCI_VEND_DEV(INTEL, IE31200_HB_CFL_8), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 589 | + { PCI_VEND_DEV(INTEL, IE31200_HB_CFL_9), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 590 | + { PCI_VEND_DEV(INTEL, IE31200_HB_CFL_10), PCI_ANY_ID, PCI_ANY_ID, 0, 0, IE31200 }, |
---|
| 591 | + { 0, } /* 0 terminated list. */ |
---|
582 | 592 | }; |
---|
583 | 593 | MODULE_DEVICE_TABLE(pci, ie31200_pci_tbl); |
---|
584 | 594 | |
---|