soc/intel/cannonlake: Fix DMAR when no iGPU is present
Don't emit RMRR for the iGPU if it's not present. This is done on other platforms as well. Fixes an DMAR error seen in dmesg on platforms without iGPU. Change-Id: Iafe86e6938a120b707aaae935cb8168f790bb22f Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/43994 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
25ec615408
commit
a9eec2cc2f
|
@ -285,8 +285,8 @@ static unsigned long soc_fill_dmar(unsigned long current)
|
||||||
struct device *const igfx_dev = pcidev_path_on_root(SA_DEVFN_IGD);
|
struct device *const igfx_dev = pcidev_path_on_root(SA_DEVFN_IGD);
|
||||||
uint64_t gfxvtbar = MCHBAR64(GFXVTBAR) & VTBAR_MASK;
|
uint64_t gfxvtbar = MCHBAR64(GFXVTBAR) & VTBAR_MASK;
|
||||||
bool gfxvten = MCHBAR32(GFXVTBAR) & VTBAR_ENABLED;
|
bool gfxvten = MCHBAR32(GFXVTBAR) & VTBAR_ENABLED;
|
||||||
|
const bool emit_igd = igfx_dev && igfx_dev->enabled && gfxvtbar && gfxvten;
|
||||||
if (igfx_dev && igfx_dev->enabled && gfxvtbar && gfxvten) {
|
if (emit_igd) {
|
||||||
unsigned long tmp = current;
|
unsigned long tmp = current;
|
||||||
|
|
||||||
current += acpi_create_dmar_drhd(current, 0, 0, gfxvtbar);
|
current += acpi_create_dmar_drhd(current, 0, 0, gfxvtbar);
|
||||||
|
@ -326,12 +326,15 @@ static unsigned long soc_fill_dmar(unsigned long current)
|
||||||
acpi_dmar_drhd_fixup(tmp, current);
|
acpi_dmar_drhd_fixup(tmp, current);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add RMRR entry */
|
/* Add RMRR entry after all DRHD entries */
|
||||||
|
if (emit_igd) {
|
||||||
const unsigned long tmp = current;
|
const unsigned long tmp = current;
|
||||||
|
|
||||||
current += acpi_create_dmar_rmrr(current, 0,
|
current += acpi_create_dmar_rmrr(current, 0,
|
||||||
sa_get_gsm_base(), sa_get_tolud_base() - 1);
|
sa_get_gsm_base(), sa_get_tolud_base() - 1);
|
||||||
current += acpi_create_dmar_ds_pci(current, 0, 2, 0);
|
current += acpi_create_dmar_ds_pci(current, 0, 2, 0);
|
||||||
acpi_dmar_rmrr_fixup(tmp, current);
|
acpi_dmar_rmrr_fixup(tmp, current);
|
||||||
|
}
|
||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue