emulation: qemu-sbsa: Fill in correct ITS ID

The ACPI IORT and ACPI MADT needs to use the same IDs when referencing
GIC ITS. The GIC-v3 ITS driver uses dev_seq(dev) to generate a unique ID
for the MADT, but qemu sbsa-ref hardcodes it.
Currently it's not the same ID, breaking interrupt routing on the OS.

Don't assume it's 0 and fetch it from the device instead.

TEST: Fixes non working IRQs in QEMU sbsa-ref.

Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
This commit is contained in:
Patrick Rudolph 2025-03-20 13:51:58 +01:00 committed by Tom Rini
parent d5a060b01b
commit 65504478fe

View File

@ -10,9 +10,9 @@
#include <asm/acpi_table.h>
#include <asm/armv8/sec_firmware.h>
#include <configs/qemu-sbsa.h>
#include <dm/uclass.h>
#include <dm/device.h>
#include "qemu-sbsa.h"
#include <dm/read.h>
#include <dm/uclass.h>
#define SBSAQEMU_MADT_GIC_VBASE 0x2c020000
#define SBSAQEMU_MADT_GIC_HBASE 0x2c010000
@ -45,13 +45,18 @@
int acpi_fill_iort(struct acpi_ctx *ctx)
{
u32 its_offset, smmu_offset;
u64 gic_its_base = 0;
struct udevice *dev;
int ret;
smc_get_gic_its_base(&gic_its_base);
if (gic_its_base == 0)
return 0;
ret = uclass_get_device_by_driver(UCLASS_IRQ,
DM_DRIVER_GET(arm_gic_v3_its), &dev);
if (ret) {
pr_err("%s: failed to get %s irq device\n", __func__,
DM_DRIVER_GET(arm_gic_v3_its)->name);
return ret;
}
u32 identifiers[] = { 0 };
u32 identifiers[] = { dev_seq(dev) };
its_offset = acpi_iort_add_its_group(ctx, ARRAY_SIZE(identifiers),
identifiers);