2 * Intel I/OAT DMA Linux driver
3 * Copyright(c) 2007 - 2009 Intel Corporation.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18 * The full GNU General Public License is included in this distribution in
19 * the file called "COPYING".
23 #include <linux/kernel.h>
24 #include <linux/pci.h>
25 #include <linux/smp.h>
26 #include <linux/interrupt.h>
27 #include <linux/dca.h>
29 /* either a kernel change is needed, or we need something like this in kernel */
32 #undef cpu_physical_id
33 #define cpu_physical_id(cpu) (cpuid_ebx(1) >> 24)
37 #include "ioatdma_registers.h"
40 * Bit 7 of a tag map entry is the "valid" bit, if it is set then bits 0:6
41 * contain the bit number of the APIC ID to map into the DCA tag. If the valid
42 * bit is not set, then the value must be 0 or 1 and defines the bit in the tag.
44 #define DCA_TAG_MAP_VALID 0x80
46 #define DCA3_TAG_MAP_BIT_TO_INV 0x80
47 #define DCA3_TAG_MAP_BIT_TO_SEL 0x40
48 #define DCA3_TAG_MAP_LITERAL_VAL 0x1
50 #define DCA_TAG_MAP_MASK 0xDF
52 /* expected tag map bytes for I/OAT ver.2 */
53 #define DCA2_TAG_MAP_BYTE0 0x80
54 #define DCA2_TAG_MAP_BYTE1 0x0
55 #define DCA2_TAG_MAP_BYTE2 0x81
56 #define DCA2_TAG_MAP_BYTE3 0x82
57 #define DCA2_TAG_MAP_BYTE4 0x82
59 /* verify if tag map matches expected values */
60 static inline int dca2_tag_map_valid(u8
*tag_map
)
62 return ((tag_map
[0] == DCA2_TAG_MAP_BYTE0
) &&
63 (tag_map
[1] == DCA2_TAG_MAP_BYTE1
) &&
64 (tag_map
[2] == DCA2_TAG_MAP_BYTE2
) &&
65 (tag_map
[3] == DCA2_TAG_MAP_BYTE3
) &&
66 (tag_map
[4] == DCA2_TAG_MAP_BYTE4
));
70 * "Legacy" DCA systems do not implement the DCA register set in the
71 * I/OAT device. Software needs direct support for their tag mappings.
74 #define APICID_BIT(x) (DCA_TAG_MAP_VALID | (x))
75 #define IOAT_TAG_MAP_LEN 8
77 static u8 ioat_tag_map_BNB
[IOAT_TAG_MAP_LEN
] = {
78 1, APICID_BIT(1), APICID_BIT(2), APICID_BIT(2), };
79 static u8 ioat_tag_map_SCNB
[IOAT_TAG_MAP_LEN
] = {
80 1, APICID_BIT(1), APICID_BIT(2), APICID_BIT(2), };
81 static u8 ioat_tag_map_CNB
[IOAT_TAG_MAP_LEN
] = {
82 1, APICID_BIT(1), APICID_BIT(3), APICID_BIT(4), APICID_BIT(2), };
83 static u8 ioat_tag_map_UNISYS
[IOAT_TAG_MAP_LEN
] = { 0 };
85 /* pack PCI B/D/F into a u16 */
86 static inline u16
dcaid_from_pcidev(struct pci_dev
*pci
)
88 return (pci
->bus
->number
<< 8) | pci
->devfn
;
91 static int dca_enabled_in_bios(struct pci_dev
*pdev
)
93 /* CPUID level 9 returns DCA configuration */
94 /* Bit 0 indicates DCA enabled by the BIOS */
95 unsigned long cpuid_level_9
;
98 cpuid_level_9
= cpuid_eax(9);
99 res
= test_bit(0, &cpuid_level_9
);
101 dev_err(&pdev
->dev
, "DCA is disabled in BIOS\n");
106 static int system_has_dca_enabled(struct pci_dev
*pdev
)
108 if (boot_cpu_has(X86_FEATURE_DCA
))
109 return dca_enabled_in_bios(pdev
);
111 dev_err(&pdev
->dev
, "boot cpu doesn't have X86_FEATURE_DCA\n");
115 struct ioat_dca_slot
{
116 struct pci_dev
*pdev
; /* requester device */
117 u16 rid
; /* requester id, as used by IOAT */
120 #define IOAT_DCA_MAX_REQ 6
121 #define IOAT3_DCA_MAX_REQ 2
123 struct ioat_dca_priv
{
124 void __iomem
*iobase
;
125 void __iomem
*dca_base
;
128 u8 tag_map
[IOAT_TAG_MAP_LEN
];
129 struct ioat_dca_slot req_slots
[0];
132 /* 5000 series chipset DCA Port Requester ID Table Entry Format
133 * [15:8] PCI-Express Bus Number
134 * [7:3] PCI-Express Device Number
135 * [2:0] PCI-Express Function Number
137 * 5000 series chipset DCA control register format
139 * [0] Ignore Function Number
142 static int ioat_dca_add_requester(struct dca_provider
*dca
, struct device
*dev
)
144 struct ioat_dca_priv
*ioatdca
= dca_priv(dca
);
145 struct pci_dev
*pdev
;
149 /* This implementation only supports PCI-Express */
150 if (dev
->bus
!= &pci_bus_type
)
152 pdev
= to_pci_dev(dev
);
153 id
= dcaid_from_pcidev(pdev
);
155 if (ioatdca
->requester_count
== ioatdca
->max_requesters
)
158 for (i
= 0; i
< ioatdca
->max_requesters
; i
++) {
159 if (ioatdca
->req_slots
[i
].pdev
== NULL
) {
160 /* found an empty slot */
161 ioatdca
->requester_count
++;
162 ioatdca
->req_slots
[i
].pdev
= pdev
;
163 ioatdca
->req_slots
[i
].rid
= id
;
164 writew(id
, ioatdca
->dca_base
+ (i
* 4));
165 /* make sure the ignore function bit is off */
166 writeb(0, ioatdca
->dca_base
+ (i
* 4) + 2);
170 /* Error, ioatdma->requester_count is out of whack */
174 static int ioat_dca_remove_requester(struct dca_provider
*dca
,
177 struct ioat_dca_priv
*ioatdca
= dca_priv(dca
);
178 struct pci_dev
*pdev
;
181 /* This implementation only supports PCI-Express */
182 if (dev
->bus
!= &pci_bus_type
)
184 pdev
= to_pci_dev(dev
);
186 for (i
= 0; i
< ioatdca
->max_requesters
; i
++) {
187 if (ioatdca
->req_slots
[i
].pdev
== pdev
) {
188 writew(0, ioatdca
->dca_base
+ (i
* 4));
189 ioatdca
->req_slots
[i
].pdev
= NULL
;
190 ioatdca
->req_slots
[i
].rid
= 0;
191 ioatdca
->requester_count
--;
198 static u8
ioat_dca_get_tag(struct dca_provider
*dca
,
202 struct ioat_dca_priv
*ioatdca
= dca_priv(dca
);
203 int i
, apic_id
, bit
, value
;
207 apic_id
= cpu_physical_id(cpu
);
209 for (i
= 0; i
< IOAT_TAG_MAP_LEN
; i
++) {
210 entry
= ioatdca
->tag_map
[i
];
211 if (entry
& DCA_TAG_MAP_VALID
) {
212 bit
= entry
& ~DCA_TAG_MAP_VALID
;
213 value
= (apic_id
& (1 << bit
)) ? 1 : 0;
215 value
= entry
? 1 : 0;
222 static int ioat_dca_dev_managed(struct dca_provider
*dca
,
225 struct ioat_dca_priv
*ioatdca
= dca_priv(dca
);
226 struct pci_dev
*pdev
;
229 pdev
= to_pci_dev(dev
);
230 for (i
= 0; i
< ioatdca
->max_requesters
; i
++) {
231 if (ioatdca
->req_slots
[i
].pdev
== pdev
)
237 static struct dca_ops ioat_dca_ops
= {
238 .add_requester
= ioat_dca_add_requester
,
239 .remove_requester
= ioat_dca_remove_requester
,
240 .get_tag
= ioat_dca_get_tag
,
241 .dev_managed
= ioat_dca_dev_managed
,
245 struct dca_provider
*ioat_dca_init(struct pci_dev
*pdev
, void __iomem
*iobase
)
247 struct dca_provider
*dca
;
248 struct ioat_dca_priv
*ioatdca
;
255 if (!system_has_dca_enabled(pdev
))
258 /* I/OAT v1 systems must have a known tag_map to support DCA */
259 switch (pdev
->vendor
) {
260 case PCI_VENDOR_ID_INTEL
:
261 switch (pdev
->device
) {
262 case PCI_DEVICE_ID_INTEL_IOAT
:
263 tag_map
= ioat_tag_map_BNB
;
265 case PCI_DEVICE_ID_INTEL_IOAT_CNB
:
266 tag_map
= ioat_tag_map_CNB
;
268 case PCI_DEVICE_ID_INTEL_IOAT_SCNB
:
269 tag_map
= ioat_tag_map_SCNB
;
273 case PCI_VENDOR_ID_UNISYS
:
274 switch (pdev
->device
) {
275 case PCI_DEVICE_ID_UNISYS_DMA_DIRECTOR
:
276 tag_map
= ioat_tag_map_UNISYS
;
284 version
= readb(iobase
+ IOAT_VER_OFFSET
);
285 if (version
== IOAT_VER_3_0
)
286 max_requesters
= IOAT3_DCA_MAX_REQ
;
288 max_requesters
= IOAT_DCA_MAX_REQ
;
290 dca
= alloc_dca_provider(&ioat_dca_ops
,
292 (sizeof(struct ioat_dca_slot
) * max_requesters
));
296 ioatdca
= dca_priv(dca
);
297 ioatdca
->max_requesters
= max_requesters
;
298 ioatdca
->dca_base
= iobase
+ 0x54;
300 /* copy over the APIC ID to DCA tag mapping */
301 for (i
= 0; i
< IOAT_TAG_MAP_LEN
; i
++)
302 ioatdca
->tag_map
[i
] = tag_map
[i
];
304 err
= register_dca_provider(dca
, &pdev
->dev
);
306 free_dca_provider(dca
);
314 static int ioat2_dca_add_requester(struct dca_provider
*dca
, struct device
*dev
)
316 struct ioat_dca_priv
*ioatdca
= dca_priv(dca
);
317 struct pci_dev
*pdev
;
320 u16 global_req_table
;
322 /* This implementation only supports PCI-Express */
323 if (dev
->bus
!= &pci_bus_type
)
325 pdev
= to_pci_dev(dev
);
326 id
= dcaid_from_pcidev(pdev
);
328 if (ioatdca
->requester_count
== ioatdca
->max_requesters
)
331 for (i
= 0; i
< ioatdca
->max_requesters
; i
++) {
332 if (ioatdca
->req_slots
[i
].pdev
== NULL
) {
333 /* found an empty slot */
334 ioatdca
->requester_count
++;
335 ioatdca
->req_slots
[i
].pdev
= pdev
;
336 ioatdca
->req_slots
[i
].rid
= id
;
338 readw(ioatdca
->dca_base
+ IOAT_DCA_GREQID_OFFSET
);
339 writel(id
| IOAT_DCA_GREQID_VALID
,
340 ioatdca
->iobase
+ global_req_table
+ (i
* 4));
344 /* Error, ioatdma->requester_count is out of whack */
348 static int ioat2_dca_remove_requester(struct dca_provider
*dca
,
351 struct ioat_dca_priv
*ioatdca
= dca_priv(dca
);
352 struct pci_dev
*pdev
;
354 u16 global_req_table
;
356 /* This implementation only supports PCI-Express */
357 if (dev
->bus
!= &pci_bus_type
)
359 pdev
= to_pci_dev(dev
);
361 for (i
= 0; i
< ioatdca
->max_requesters
; i
++) {
362 if (ioatdca
->req_slots
[i
].pdev
== pdev
) {
364 readw(ioatdca
->dca_base
+ IOAT_DCA_GREQID_OFFSET
);
365 writel(0, ioatdca
->iobase
+ global_req_table
+ (i
* 4));
366 ioatdca
->req_slots
[i
].pdev
= NULL
;
367 ioatdca
->req_slots
[i
].rid
= 0;
368 ioatdca
->requester_count
--;
375 static u8
ioat2_dca_get_tag(struct dca_provider
*dca
,
381 tag
= ioat_dca_get_tag(dca
, dev
, cpu
);
386 static struct dca_ops ioat2_dca_ops
= {
387 .add_requester
= ioat2_dca_add_requester
,
388 .remove_requester
= ioat2_dca_remove_requester
,
389 .get_tag
= ioat2_dca_get_tag
,
390 .dev_managed
= ioat_dca_dev_managed
,
393 static int ioat2_dca_count_dca_slots(void __iomem
*iobase
, u16 dca_offset
)
397 u16 global_req_table
;
399 global_req_table
= readw(iobase
+ dca_offset
+ IOAT_DCA_GREQID_OFFSET
);
400 if (global_req_table
== 0)
403 req
= readl(iobase
+ global_req_table
+ (slots
* sizeof(u32
)));
405 } while ((req
& IOAT_DCA_GREQID_LASTID
) == 0);
410 struct dca_provider
*ioat2_dca_init(struct pci_dev
*pdev
, void __iomem
*iobase
)
412 struct dca_provider
*dca
;
413 struct ioat_dca_priv
*ioatdca
;
423 if (!system_has_dca_enabled(pdev
))
426 dca_offset
= readw(iobase
+ IOAT_DCAOFFSET_OFFSET
);
430 slots
= ioat2_dca_count_dca_slots(iobase
, dca_offset
);
434 dca
= alloc_dca_provider(&ioat2_dca_ops
,
436 + (sizeof(struct ioat_dca_slot
) * slots
));
440 ioatdca
= dca_priv(dca
);
441 ioatdca
->iobase
= iobase
;
442 ioatdca
->dca_base
= iobase
+ dca_offset
;
443 ioatdca
->max_requesters
= slots
;
445 /* some bios might not know to turn these on */
446 csi_fsb_control
= readw(ioatdca
->dca_base
+ IOAT_FSB_CAP_ENABLE_OFFSET
);
447 if ((csi_fsb_control
& IOAT_FSB_CAP_ENABLE_PREFETCH
) == 0) {
448 csi_fsb_control
|= IOAT_FSB_CAP_ENABLE_PREFETCH
;
449 writew(csi_fsb_control
,
450 ioatdca
->dca_base
+ IOAT_FSB_CAP_ENABLE_OFFSET
);
452 pcie_control
= readw(ioatdca
->dca_base
+ IOAT_PCI_CAP_ENABLE_OFFSET
);
453 if ((pcie_control
& IOAT_PCI_CAP_ENABLE_MEMWR
) == 0) {
454 pcie_control
|= IOAT_PCI_CAP_ENABLE_MEMWR
;
456 ioatdca
->dca_base
+ IOAT_PCI_CAP_ENABLE_OFFSET
);
460 /* TODO version, compatibility and configuration checks */
462 /* copy out the APIC to DCA tag map */
463 tag_map
= readl(ioatdca
->dca_base
+ IOAT_APICID_TAG_MAP_OFFSET
);
464 for (i
= 0; i
< 5; i
++) {
465 bit
= (tag_map
>> (4 * i
)) & 0x0f;
467 ioatdca
->tag_map
[i
] = bit
| DCA_TAG_MAP_VALID
;
469 ioatdca
->tag_map
[i
] = 0;
472 if (!dca2_tag_map_valid(ioatdca
->tag_map
)) {
473 dev_err(&pdev
->dev
, "APICID_TAG_MAP set incorrectly by BIOS, "
475 free_dca_provider(dca
);
479 err
= register_dca_provider(dca
, &pdev
->dev
);
481 free_dca_provider(dca
);
488 static int ioat3_dca_add_requester(struct dca_provider
*dca
, struct device
*dev
)
490 struct ioat_dca_priv
*ioatdca
= dca_priv(dca
);
491 struct pci_dev
*pdev
;
494 u16 global_req_table
;
496 /* This implementation only supports PCI-Express */
497 if (dev
->bus
!= &pci_bus_type
)
499 pdev
= to_pci_dev(dev
);
500 id
= dcaid_from_pcidev(pdev
);
502 if (ioatdca
->requester_count
== ioatdca
->max_requesters
)
505 for (i
= 0; i
< ioatdca
->max_requesters
; i
++) {
506 if (ioatdca
->req_slots
[i
].pdev
== NULL
) {
507 /* found an empty slot */
508 ioatdca
->requester_count
++;
509 ioatdca
->req_slots
[i
].pdev
= pdev
;
510 ioatdca
->req_slots
[i
].rid
= id
;
512 readw(ioatdca
->dca_base
+ IOAT3_DCA_GREQID_OFFSET
);
513 writel(id
| IOAT_DCA_GREQID_VALID
,
514 ioatdca
->iobase
+ global_req_table
+ (i
* 4));
518 /* Error, ioatdma->requester_count is out of whack */
522 static int ioat3_dca_remove_requester(struct dca_provider
*dca
,
525 struct ioat_dca_priv
*ioatdca
= dca_priv(dca
);
526 struct pci_dev
*pdev
;
528 u16 global_req_table
;
530 /* This implementation only supports PCI-Express */
531 if (dev
->bus
!= &pci_bus_type
)
533 pdev
= to_pci_dev(dev
);
535 for (i
= 0; i
< ioatdca
->max_requesters
; i
++) {
536 if (ioatdca
->req_slots
[i
].pdev
== pdev
) {
538 readw(ioatdca
->dca_base
+ IOAT3_DCA_GREQID_OFFSET
);
539 writel(0, ioatdca
->iobase
+ global_req_table
+ (i
* 4));
540 ioatdca
->req_slots
[i
].pdev
= NULL
;
541 ioatdca
->req_slots
[i
].rid
= 0;
542 ioatdca
->requester_count
--;
549 static u8
ioat3_dca_get_tag(struct dca_provider
*dca
,
555 struct ioat_dca_priv
*ioatdca
= dca_priv(dca
);
556 int i
, apic_id
, bit
, value
;
560 apic_id
= cpu_physical_id(cpu
);
562 for (i
= 0; i
< IOAT_TAG_MAP_LEN
; i
++) {
563 entry
= ioatdca
->tag_map
[i
];
564 if (entry
& DCA3_TAG_MAP_BIT_TO_SEL
) {
566 ~(DCA3_TAG_MAP_BIT_TO_SEL
| DCA3_TAG_MAP_BIT_TO_INV
);
567 value
= (apic_id
& (1 << bit
)) ? 1 : 0;
568 } else if (entry
& DCA3_TAG_MAP_BIT_TO_INV
) {
569 bit
= entry
& ~DCA3_TAG_MAP_BIT_TO_INV
;
570 value
= (apic_id
& (1 << bit
)) ? 0 : 1;
572 value
= (entry
& DCA3_TAG_MAP_LITERAL_VAL
) ? 1 : 0;
580 static struct dca_ops ioat3_dca_ops
= {
581 .add_requester
= ioat3_dca_add_requester
,
582 .remove_requester
= ioat3_dca_remove_requester
,
583 .get_tag
= ioat3_dca_get_tag
,
584 .dev_managed
= ioat_dca_dev_managed
,
587 static int ioat3_dca_count_dca_slots(void *iobase
, u16 dca_offset
)
591 u16 global_req_table
;
593 global_req_table
= readw(iobase
+ dca_offset
+ IOAT3_DCA_GREQID_OFFSET
);
594 if (global_req_table
== 0)
598 req
= readl(iobase
+ global_req_table
+ (slots
* sizeof(u32
)));
600 } while ((req
& IOAT_DCA_GREQID_LASTID
) == 0);
605 struct dca_provider
*ioat3_dca_init(struct pci_dev
*pdev
, void __iomem
*iobase
)
607 struct dca_provider
*dca
;
608 struct ioat_dca_priv
*ioatdca
;
625 if (!system_has_dca_enabled(pdev
))
628 dca_offset
= readw(iobase
+ IOAT_DCAOFFSET_OFFSET
);
632 slots
= ioat3_dca_count_dca_slots(iobase
, dca_offset
);
636 dca
= alloc_dca_provider(&ioat3_dca_ops
,
638 + (sizeof(struct ioat_dca_slot
) * slots
));
642 ioatdca
= dca_priv(dca
);
643 ioatdca
->iobase
= iobase
;
644 ioatdca
->dca_base
= iobase
+ dca_offset
;
645 ioatdca
->max_requesters
= slots
;
647 /* some bios might not know to turn these on */
648 csi_fsb_control
= readw(ioatdca
->dca_base
+ IOAT3_CSI_CONTROL_OFFSET
);
649 if ((csi_fsb_control
& IOAT3_CSI_CONTROL_PREFETCH
) == 0) {
650 csi_fsb_control
|= IOAT3_CSI_CONTROL_PREFETCH
;
651 writew(csi_fsb_control
,
652 ioatdca
->dca_base
+ IOAT3_CSI_CONTROL_OFFSET
);
654 pcie_control
= readw(ioatdca
->dca_base
+ IOAT3_PCI_CONTROL_OFFSET
);
655 if ((pcie_control
& IOAT3_PCI_CONTROL_MEMWR
) == 0) {
656 pcie_control
|= IOAT3_PCI_CONTROL_MEMWR
;
658 ioatdca
->dca_base
+ IOAT3_PCI_CONTROL_OFFSET
);
662 /* TODO version, compatibility and configuration checks */
664 /* copy out the APIC to DCA tag map */
666 readl(ioatdca
->dca_base
+ IOAT3_APICID_TAG_MAP_OFFSET_LOW
);
668 readl(ioatdca
->dca_base
+ IOAT3_APICID_TAG_MAP_OFFSET_HIGH
);
669 for (i
= 0; i
< 8; i
++) {
670 bit
= tag_map
.full
>> (8 * i
);
671 ioatdca
->tag_map
[i
] = bit
& DCA_TAG_MAP_MASK
;
674 err
= register_dca_provider(dca
, &pdev
->dev
);
676 free_dca_provider(dca
);