From: Manish Jaggi Date: Tue, 10 Oct 2017 12:52:32 +0000 (+0530) Subject: ARM: ITS: Expose ITS in the MADT table X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~1180 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=888ce824f240a29e9ddd9d39b641d8dfae8cc839;p=xen.git ARM: ITS: Expose ITS in the MADT table Add gicv3_its_make_hwdom_madt to update hwdom MADT ITS information. Signed-off-by: Manish Jaggi Reviewed-by: Andre Przywara Reviewed-by: Stefano Stabellini --- diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index bd94308c34..e57ae05771 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -1062,6 +1062,25 @@ void gicv3_its_acpi_init(void) acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR, gicv3_its_acpi_probe, 0); } + +unsigned long gicv3_its_make_hwdom_madt(const struct domain *d, void *base_ptr) +{ + unsigned int i; + void *fw_its; + struct acpi_madt_generic_translator *hwdom_its; + + hwdom_its = base_ptr; + + for ( i = 0; i < vgic_v3_its_count(d); i++ ) + { + fw_its = acpi_table_get_entry_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR, + i); + memcpy(hwdom_its, fw_its, sizeof(struct acpi_madt_generic_translator)); + hwdom_its++; + } + + return sizeof(struct acpi_madt_generic_translator) * vgic_v3_its_count(d); +} #endif /* diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index 6a33a27cce..406bb82a3b 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -1404,6 +1404,8 @@ static int gicv3_make_hwdom_madt(const struct domain *d, u32 offset) table_len += size; } + table_len += gicv3_its_make_hwdom_madt(d, base_ptr + table_len); + return table_len; } diff --git a/xen/include/asm-arm/gic_v3_its.h b/xen/include/asm-arm/gic_v3_its.h index 73ee0ba260..40dffdc0fa 100644 --- a/xen/include/asm-arm/gic_v3_its.h +++ b/xen/include/asm-arm/gic_v3_its.h @@ -138,6 +138,8 @@ void gicv3_its_dt_init(const struct dt_device_node *node); #ifdef CONFIG_ACPI void gicv3_its_acpi_init(void); +unsigned long gicv3_its_make_hwdom_madt(const struct domain *d, + void *base_ptr); #endif /* Deny iomem access for its */ @@ -208,6 +210,12 @@ static inline void gicv3_its_dt_init(const struct dt_device_node *node) static inline void gicv3_its_acpi_init(void) { } + +static inline unsigned long gicv3_its_make_hwdom_madt(const struct domain *d, + void *base_ptr) +{ + return 0; +} #endif static inline int gicv3_its_deny_access(const struct domain *d)