drivers/interrupt_controller: Fix IRTE delivery mode on VT-D
Only allow FIXED or LOW_PRIO modes. Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
parent
92884ba44a
commit
811fc76780
1 changed files with 8 additions and 1 deletions
|
@ -350,6 +350,7 @@ static int vtd_ictl_remap(const struct device *dev,
|
||||||
{
|
{
|
||||||
struct vtd_ictl_data *data = dev->data;
|
struct vtd_ictl_data *data = dev->data;
|
||||||
union vtd_irte irte = { 0 };
|
union vtd_irte irte = { 0 };
|
||||||
|
uint32_t delivery_mode;
|
||||||
|
|
||||||
irte.bits.vector = vector;
|
irte.bits.vector = vector;
|
||||||
|
|
||||||
|
@ -361,8 +362,14 @@ static int vtd_ictl_remap(const struct device *dev,
|
||||||
irte.bits.dst_id = 0xFF << 8;
|
irte.bits.dst_id = 0xFF << 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delivery_mode = (flags & IOAPIC_DELIVERY_MODE_MASK);
|
||||||
|
if ((delivery_mode != IOAPIC_FIXED) ||
|
||||||
|
(delivery_mode != IOAPIC_LOW)) {
|
||||||
|
delivery_mode = IOAPIC_LOW;
|
||||||
|
}
|
||||||
|
|
||||||
irte.bits.trigger_mode = (flags & IOAPIC_TRIGGER_MASK) >> 15;
|
irte.bits.trigger_mode = (flags & IOAPIC_TRIGGER_MASK) >> 15;
|
||||||
irte.bits.delivery_mode = (flags & IOAPIC_DELIVERY_MODE_MASK) >> 8;
|
irte.bits.delivery_mode = delivery_mode >> 8;
|
||||||
irte.bits.redirection_hint = 1;
|
irte.bits.redirection_hint = 1;
|
||||||
irte.bits.dst_mode = 1; /* Always logical */
|
irte.bits.dst_mode = 1; /* Always logical */
|
||||||
irte.bits.present = 1;
|
irte.bits.present = 1;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue