Date: Fri, 23 Sep 2022 15:46:45 +0100 From: Andrew Turner <andrew@FreeBSD.org> To: Jessica Clarke <jrtc27@freebsd.org> Cc: "src-committers@freebsd.org" <src-committers@FreeBSD.org>, "dev-commits-src-all@freebsd.org" <dev-commits-src-all@FreeBSD.org>, "dev-commits-src-main@freebsd.org" <dev-commits-src-main@FreeBSD.org> Subject: Re: git: e13c6a6fca71 - main - Teach the GICv3 driver about a vgic child Message-ID: <BD5DB3A1-10A4-4144-985A-0C434F501D69@FreeBSD.org> In-Reply-To: <1C9075B5-7757-467D-AE61-33AB45DEBB2D@freebsd.org> References: <202209211000.28LA00ck091449@gitrepo.freebsd.org> <1C9075B5-7757-467D-AE61-33AB45DEBB2D@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --] > On 21 Sep 2022, at 15:10, Jessica Clarke <jrtc27@freebsd.org> wrote: > > On 21 Sept 2022, at 11:00, Andrew Turner <andrew@FreeBSD.org <mailto:andrew@FreeBSD.org>> wrote: >> >> The branch main has been updated by andrew: >> >> URL: https://cgit.FreeBSD.org/src/commit/?id=e13c6a6fca7177fb9143ce629c2e33b35b6c4219 >> >> commit e13c6a6fca7177fb9143ce629c2e33b35b6c4219 >> Author: Andrew Turner <andrew@FreeBSD.org> >> AuthorDate: 2022-09-14 16:29:29 +0000 >> Commit: Andrew Turner <andrew@FreeBSD.org> >> CommitDate: 2022-09-21 09:59:13 +0000 >> >> Teach the GICv3 driver about a vgic child >> >> This will be used by bhyve to attach a virtual GIC driver. >> >> Sponsored by: Innovate UK >> Sponsored by: The FreeBSD Foundation >> Differential Revision: https://reviews.freebsd.org/D36590 >> --- >> sys/arm/arm/gic_common.h | 2 ++ >> sys/arm64/arm64/gic_v3.c | 7 +++++++ >> sys/arm64/arm64/gic_v3_acpi.c | 36 ++++++++++++++++++++++++++++++++++-- >> sys/arm64/arm64/gic_v3_fdt.c | 23 ++++++++++++++++++++++- >> sys/arm64/arm64/gic_v3_var.h | 1 + >> 5 files changed, 66 insertions(+), 3 deletions(-) >> >> diff --git a/sys/arm/arm/gic_common.h b/sys/arm/arm/gic_common.h >> index 9e8fb19300ca..42ec44bb7fab 100644 >> --- a/sys/arm/arm/gic_common.h >> +++ b/sys/arm/arm/gic_common.h >> @@ -33,6 +33,7 @@ >> >> #define GIC_IVAR_HW_REV 500 >> #define GIC_IVAR_BUS 501 >> +#define GIC_IVAR_VGIC 502 >> >> /* GIC_IVAR_BUS values */ >> #define GIC_BUS_UNKNOWN 0 >> @@ -42,6 +43,7 @@ >> >> __BUS_ACCESSOR(gic, hw_rev, GIC, HW_REV, u_int); >> __BUS_ACCESSOR(gic, bus, GIC, BUS, u_int); >> +__BUS_ACCESSOR(gic, vgic, GIC, VGIC, u_int); >> >> /* Software Generated Interrupts */ >> #define GIC_FIRST_SGI 0 /* Irqs 0-15 are SGIs/IPIs. */ >> diff --git a/sys/arm64/arm64/gic_v3.c b/sys/arm64/arm64/gic_v3.c >> index 27f41c58fe92..b4678d95fee5 100644 >> --- a/sys/arm64/arm64/gic_v3.c >> +++ b/sys/arm64/arm64/gic_v3.c >> @@ -456,6 +456,7 @@ static int >> gic_v3_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) >> { >> struct gic_v3_softc *sc; >> + struct gic_v3_devinfo *di; >> >> sc = device_get_softc(dev); >> >> @@ -481,6 +482,12 @@ gic_v3_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) >> ("gic_v3_read_ivar: Invalid bus type %u", sc->gic_bus)); >> *result = sc->gic_bus; >> return (0); >> + case GIC_IVAR_VGIC: >> + di = device_get_ivars(child); >> + if (di == NULL) >> + return (EINVAL); >> + *result = di->is_vgic; >> + return (0); >> } >> >> return (ENOENT); >> diff --git a/sys/arm64/arm64/gic_v3_acpi.c b/sys/arm64/arm64/gic_v3_acpi.c >> index cbe4d5989ec2..cc24b7824ff1 100644 >> --- a/sys/arm64/arm64/gic_v3_acpi.c >> +++ b/sys/arm64/arm64/gic_v3_acpi.c >> @@ -48,6 +48,9 @@ __FBSDID("$FreeBSD$"); >> #include "gic_v3_reg.h" >> #include "gic_v3_var.h" >> >> +#define GICV3_PRIV_VGIC 0x80000000 >> +#define GICV3_PRIV_FLAGS 0x80000000 >> + >> struct gic_v3_acpi_devinfo { >> struct gic_v3_devinfo di_gic_dinfo; >> struct resource_list di_rl; >> @@ -86,6 +89,7 @@ struct madt_table_data { >> ACPI_MADT_GENERIC_DISTRIBUTOR *dist; >> int count; >> bool rdist_use_gicc; >> + bool have_vgic; >> }; >> >> static void >> @@ -152,6 +156,8 @@ rdist_map(ACPI_SUBTABLE_HEADER *entry, void *arg) >> BUS_SET_RESOURCE(madt_data->parent, madt_data->dev, >> SYS_RES_MEMORY, madt_data->count, intr->GicrBaseAddress, >> count); >> + if (intr->VgicInterrupt == 0) >> + madt_data->have_vgic = false; >> >> default: >> break; >> @@ -164,6 +170,7 @@ gic_v3_acpi_identify(driver_t *driver, device_t parent) >> struct madt_table_data madt_data; >> ACPI_TABLE_MADT *madt; >> vm_paddr_t physaddr; >> + uintptr_t private; >> device_t dev; >> >> physaddr = acpi_find_table(ACPI_SIG_MADT); >> @@ -210,6 +217,7 @@ gic_v3_acpi_identify(driver_t *driver, device_t parent) >> >> madt_data.dev = dev; >> madt_data.rdist_use_gicc = false; >> + madt_data.have_vgic = true; >> acpi_walk_subtables(madt + 1, (char *)madt + madt->Header.Length, >> rdist_map, &madt_data); >> if (madt_data.count == 0) { >> @@ -222,7 +230,12 @@ gic_v3_acpi_identify(driver_t *driver, device_t parent) >> rdist_map, &madt_data); >> } >> >> - acpi_set_private(dev, (void *)(uintptr_t)madt_data.dist->Version); >> + private = madt_data.dist->Version; >> + /* Flag that the VGIC is in use */ >> + if (madt_data.have_vgic) >> + private |= GICV3_PRIV_VGIC; >> + >> + acpi_set_private(dev, (void *)private); >> >> out: >> acpi_unmap_table(madt); >> @@ -232,7 +245,7 @@ static int >> gic_v3_acpi_probe(device_t dev) >> { >> >> - switch((uintptr_t)acpi_get_private(dev)) { >> + switch((uintptr_t)acpi_get_private(dev) & ~GICV3_PRIV_FLAGS) { >> case ACPI_MADT_GIC_VERSION_V3: >> case ACPI_MADT_GIC_VERSION_V4: >> break; >> @@ -390,9 +403,14 @@ gic_v3_add_children(ACPI_SUBTABLE_HEADER *entry, void *arg) >> static void >> gic_v3_acpi_bus_attach(device_t dev) >> { >> + struct gic_v3_acpi_devinfo *di; >> + struct gic_v3_softc *sc; >> ACPI_TABLE_MADT *madt; >> + device_t child; >> vm_paddr_t physaddr; >> >> + sc = device_get_softc(dev); >> + >> physaddr = acpi_find_table(ACPI_SIG_MADT); >> if (physaddr == 0) >> return; >> @@ -405,6 +423,20 @@ gic_v3_acpi_bus_attach(device_t dev) >> >> acpi_walk_subtables(madt + 1, (char *)madt + madt->Header.Length, >> gic_v3_add_children, dev); >> + /* Add the vgic child if needed */ >> + if (((uintptr_t)acpi_get_private(dev) & GICV3_PRIV_FLAGS) != 0) { >> + child = device_add_child(dev, "vgic", -1); > > Do we have anything to attach to this, or is this just creating > children that will never do anything? This will be used by Bhyve to attach a virtual gic driver so we can use standard methods to handle interacting with the hardware. Andrew [-- Attachment #2 --] <html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 21 Sep 2022, at 15:10, Jessica Clarke <<a href="mailto:jrtc27@freebsd.org" class="">jrtc27@freebsd.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta charset="UTF-8" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">On 21 Sept 2022, at 11:00, Andrew Turner <</span><a href="mailto:andrew@FreeBSD.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">andrew@FreeBSD.org</a><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">> wrote:</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class="">The branch main has been updated by andrew:<br class=""><br class="">URL: <a href="https://cgit.FreeBSD.org/src/commit/?id=e13c6a6fca7177fb9143ce629c2e33b35b6c4219" class="">https://cgit.FreeBSD.org/src/commit/?id=e13c6a6fca7177fb9143ce629c2e33b35b6c4219</a><br class=""><br class="">commit e13c6a6fca7177fb9143ce629c2e33b35b6c4219<br class="">Author: Andrew Turner <<a href="mailto:andrew@FreeBSD.org" class="">andrew@FreeBSD.org</a>><br class="">AuthorDate: 2022-09-14 16:29:29 +0000<br class="">Commit: Andrew Turner <<a href="mailto:andrew@FreeBSD.org" class="">andrew@FreeBSD.org</a>><br class="">CommitDate: 2022-09-21 09:59:13 +0000<br class=""><br class=""> Teach the GICv3 driver about a vgic child<br class=""><br class=""> This will be used by bhyve to attach a virtual GIC driver.<br class=""><br class=""> Sponsored by: Innovate UK<br class=""> Sponsored by: The FreeBSD Foundation<br class=""> Differential Revision: <a href="https://reviews.freebsd.org/D36590" class="">https://reviews.freebsd.org/D36590</a><br class="">---<br class="">sys/arm/arm/gic_common.h | 2 ++<br class="">sys/arm64/arm64/gic_v3.c | 7 +++++++<br class="">sys/arm64/arm64/gic_v3_acpi.c | 36 ++++++++++++++++++++++++++++++++++--<br class="">sys/arm64/arm64/gic_v3_fdt.c | 23 ++++++++++++++++++++++-<br class="">sys/arm64/arm64/gic_v3_var.h | 1 +<br class="">5 files changed, 66 insertions(+), 3 deletions(-)<br class=""><br class="">diff --git a/sys/arm/arm/gic_common.h b/sys/arm/arm/gic_common.h<br class="">index 9e8fb19300ca..42ec44bb7fab 100644<br class="">--- a/sys/arm/arm/gic_common.h<br class="">+++ b/sys/arm/arm/gic_common.h<br class="">@@ -33,6 +33,7 @@<br class=""><br class="">#define<span class="Apple-tab-span" style="white-space: pre;"> </span>GIC_IVAR_HW_REV<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>500<br class="">#define<span class="Apple-tab-span" style="white-space: pre;"> </span>GIC_IVAR_BUS<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>501<br class="">+#define<span class="Apple-tab-span" style="white-space: pre;"> </span>GIC_IVAR_VGIC<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>502<br class=""><br class="">/* GIC_IVAR_BUS values */<br class="">#define<span class="Apple-tab-span" style="white-space: pre;"> </span>GIC_BUS_UNKNOWN<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>0<br class="">@@ -42,6 +43,7 @@<br class=""><br class="">__BUS_ACCESSOR(gic, hw_rev, GIC, HW_REV, u_int);<br class="">__BUS_ACCESSOR(gic, bus, GIC, BUS, u_int);<br class="">+__BUS_ACCESSOR(gic, vgic, GIC, VGIC, u_int);<br class=""><br class="">/* Software Generated Interrupts */<br class="">#define<span class="Apple-tab-span" style="white-space: pre;"> </span>GIC_FIRST_SGI<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span>0<span class="Apple-tab-span" style="white-space: pre;"> </span>/* Irqs 0-15 are SGIs/IPIs. */<br class="">diff --git a/sys/arm64/arm64/gic_v3.c b/sys/arm64/arm64/gic_v3.c<br class="">index 27f41c58fe92..b4678d95fee5 100644<br class="">--- a/sys/arm64/arm64/gic_v3.c<br class="">+++ b/sys/arm64/arm64/gic_v3.c<br class="">@@ -456,6 +456,7 @@ static int<br class="">gic_v3_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)<br class="">{<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>struct gic_v3_softc *sc;<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>struct gic_v3_devinfo *di;<br class=""><br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>sc = device_get_softc(dev);<br class=""><br class="">@@ -481,6 +482,12 @@ gic_v3_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span> ("gic_v3_read_ivar: Invalid bus type %u", sc->gic_bus));<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>*result = sc->gic_bus;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>return (0);<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>case GIC_IVAR_VGIC:<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>di = device_get_ivars(child);<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>if (di == NULL)<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>return (EINVAL);<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>*result = di->is_vgic;<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>return (0);<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>}<br class=""><br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>return (ENOENT);<br class="">diff --git a/sys/arm64/arm64/gic_v3_acpi.c b/sys/arm64/arm64/gic_v3_acpi.c<br class="">index cbe4d5989ec2..cc24b7824ff1 100644<br class="">--- a/sys/arm64/arm64/gic_v3_acpi.c<br class="">+++ b/sys/arm64/arm64/gic_v3_acpi.c<br class="">@@ -48,6 +48,9 @@ __FBSDID("$FreeBSD$");<br class="">#include "gic_v3_reg.h"<br class="">#include "gic_v3_var.h"<br class=""><br class="">+#define<span class="Apple-tab-span" style="white-space: pre;"> </span>GICV3_PRIV_VGIC<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>0x80000000<br class="">+#define<span class="Apple-tab-span" style="white-space: pre;"> </span>GICV3_PRIV_FLAGS<span class="Apple-tab-span" style="white-space: pre;"> </span>0x80000000<br class="">+<br class="">struct gic_v3_acpi_devinfo {<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>struct gic_v3_devinfo<span class="Apple-tab-span" style="white-space: pre;"> </span>di_gic_dinfo;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>struct resource_list<span class="Apple-tab-span" style="white-space: pre;"> </span>di_rl;<br class="">@@ -86,6 +89,7 @@ struct madt_table_data {<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>ACPI_MADT_GENERIC_DISTRIBUTOR *dist;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>int count;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>bool rdist_use_gicc;<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>bool have_vgic;<br class="">};<br class=""><br class="">static void<br class="">@@ -152,6 +156,8 @@ rdist_map(ACPI_SUBTABLE_HEADER *entry, void *arg)<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>BUS_SET_RESOURCE(madt_data->parent, madt_data->dev,<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span> SYS_RES_MEMORY, madt_data->count, intr->GicrBaseAddress,<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span> count);<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>if (intr->VgicInterrupt == 0)<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>madt_data->have_vgic = false;<br class=""><br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>default:<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>break;<br class="">@@ -164,6 +170,7 @@ gic_v3_acpi_identify(driver_t *driver, device_t parent)<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>struct madt_table_data madt_data;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>ACPI_TABLE_MADT *madt;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>vm_paddr_t physaddr;<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>uintptr_t private;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>device_t dev;<br class=""><br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>physaddr = acpi_find_table(ACPI_SIG_MADT);<br class="">@@ -210,6 +217,7 @@ gic_v3_acpi_identify(driver_t *driver, device_t parent)<br class=""><br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>madt_data.dev = dev;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>madt_data.rdist_use_gicc = false;<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>madt_data.have_vgic = true;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>acpi_walk_subtables(madt + 1, (char *)madt + madt->Header.Length,<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span> rdist_map, &madt_data);<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>if (madt_data.count == 0) {<br class="">@@ -222,7 +230,12 @@ gic_v3_acpi_identify(driver_t *driver, device_t parent)<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span> rdist_map, &madt_data);<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>}<br class=""><br class="">-<span class="Apple-tab-span" style="white-space: pre;"> </span>acpi_set_private(dev, (void *)(uintptr_t)madt_data.dist->Version);<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>private = madt_data.dist->Version;<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>/* Flag that the VGIC is in use */<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>if (madt_data.have_vgic)<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>private |= GICV3_PRIV_VGIC;<br class="">+<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>acpi_set_private(dev, (void *)private);<br class=""><br class="">out:<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>acpi_unmap_table(madt);<br class="">@@ -232,7 +245,7 @@ static int<br class="">gic_v3_acpi_probe(device_t dev)<br class="">{<br class=""><br class="">-<span class="Apple-tab-span" style="white-space: pre;"> </span>switch((uintptr_t)acpi_get_private(dev)) {<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>switch((uintptr_t)acpi_get_private(dev) & ~GICV3_PRIV_FLAGS) {<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>case ACPI_MADT_GIC_VERSION_V3:<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>case ACPI_MADT_GIC_VERSION_V4:<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>break;<br class="">@@ -390,9 +403,14 @@ gic_v3_add_children(ACPI_SUBTABLE_HEADER *entry, void *arg)<br class="">static void<br class="">gic_v3_acpi_bus_attach(device_t dev)<br class="">{<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>struct gic_v3_acpi_devinfo *di;<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>struct gic_v3_softc *sc;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>ACPI_TABLE_MADT *madt;<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>device_t child;<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>vm_paddr_t physaddr;<br class=""><br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>sc = device_get_softc(dev);<br class="">+<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>physaddr = acpi_find_table(ACPI_SIG_MADT);<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>if (physaddr == 0)<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>return;<br class="">@@ -405,6 +423,20 @@ gic_v3_acpi_bus_attach(device_t dev)<br class=""><br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span>acpi_walk_subtables(madt + 1, (char *)madt + madt->Header.Length,<br class=""><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span> gic_v3_add_children, dev);<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>/* Add the vgic child if needed */<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>if (((uintptr_t)acpi_get_private(dev) & GICV3_PRIV_FLAGS) != 0) {<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>child = device_add_child(dev, "vgic", -1);<br class=""></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Do we have anything to attach to this, or is this just creating</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">children that will never do anything?</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""></div></blockquote><div><br class=""></div><div>This will be used by Bhyve to attach a virtual gic driver so we can use standard methods to handle interacting with the hardware.</div><div><br class=""></div><div>Andrew</div></div><br class=""></body></html>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BD5DB3A1-10A4-4144-985A-0C434F501D69>
