drivers/interrupt_controller: Add VT-D context cache invalidation
Not sure this is requered as we do not mangle with domains, but let's make sure this cache is clear. Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
parent
f44062a8e6
commit
92884ba44a
2 changed files with 35 additions and 0 deletions
|
@ -171,6 +171,16 @@ static int vtd_qi_send(const struct device *dev,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int vtd_global_cc_invalidate(const struct device *dev)
|
||||||
|
{
|
||||||
|
union qi_icc_descriptor iec_desc = { 0 };
|
||||||
|
|
||||||
|
iec_desc.icc.type = QI_TYPE_ICC;
|
||||||
|
iec_desc.icc.granularity = 1; /* Global Invalidation requested */
|
||||||
|
|
||||||
|
return vtd_qi_send(dev, &iec_desc.desc);
|
||||||
|
}
|
||||||
|
|
||||||
static int vtd_global_iec_invalidate(const struct device *dev)
|
static int vtd_global_iec_invalidate(const struct device *dev)
|
||||||
{
|
{
|
||||||
union qi_iec_descriptor iec_desc = { 0 };
|
union qi_iec_descriptor iec_desc = { 0 };
|
||||||
|
@ -462,6 +472,12 @@ static int vtd_ictl_init(const struct device *dev)
|
||||||
|
|
||||||
vtd_qi_init(dev);
|
vtd_qi_init(dev);
|
||||||
|
|
||||||
|
if (vtd_global_cc_invalidate(dev) != 0) {
|
||||||
|
printk("Could not perform ICC invalidation\n");
|
||||||
|
ret = -EIO;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_X2APIC)) {
|
if (IS_ENABLED(CONFIG_X2APIC)) {
|
||||||
eime = VTD_IRTA_EIME;
|
eime = VTD_IRTA_EIME;
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,25 @@ struct qi_descriptor {
|
||||||
uint64_t high;
|
uint64_t high;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define QI_TYPE_ICC 0x1UL
|
||||||
|
|
||||||
|
union qi_icc_descriptor {
|
||||||
|
struct qi_descriptor desc;
|
||||||
|
|
||||||
|
struct icc_bits {
|
||||||
|
uint64_t type : 4;
|
||||||
|
uint64_t granularity : 2;
|
||||||
|
uint64_t _reserved_0 : 3;
|
||||||
|
uint64_t zero : 3;
|
||||||
|
uint64_t _reserved_1 : 4;
|
||||||
|
uint64_t domain_id : 16;
|
||||||
|
uint64_t source_id : 16;
|
||||||
|
uint64_t function_mask : 2;
|
||||||
|
uint64_t _reserved_2 : 14;
|
||||||
|
uint64_t reserved;
|
||||||
|
} icc __packed;
|
||||||
|
};
|
||||||
|
|
||||||
#define QI_TYPE_IEC 0x4UL
|
#define QI_TYPE_IEC 0x4UL
|
||||||
|
|
||||||
union qi_iec_descriptor {
|
union qi_iec_descriptor {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue