Skip site navigation (1)Skip section navigation (2)
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 &lt;<a href="mailto:jrtc27@freebsd.org" class="">jrtc27@freebsd.org</a>&gt; 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 &lt;</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="">&gt; 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: &nbsp;&nbsp;&nbsp;&nbsp;Andrew Turner &lt;<a href="mailto:andrew@FreeBSD.org" class="">andrew@FreeBSD.org</a>&gt;<br class="">AuthorDate: 2022-09-14 16:29:29 +0000<br class="">Commit: &nbsp;&nbsp;&nbsp;&nbsp;Andrew Turner &lt;<a href="mailto:andrew@FreeBSD.org" class="">andrew@FreeBSD.org</a>&gt;<br class="">CommitDate: 2022-09-21 09:59:13 +0000<br class=""><br class="">&nbsp;&nbsp;Teach the GICv3 driver about a vgic child<br class=""><br class="">&nbsp;&nbsp;This will be used by bhyve to attach a virtual GIC driver.<br class=""><br class="">&nbsp;&nbsp;Sponsored by: &nbsp;&nbsp;Innovate UK<br class="">&nbsp;&nbsp;Sponsored by: &nbsp;&nbsp;The FreeBSD Foundation<br class="">&nbsp;&nbsp;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 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;2 ++<br class="">sys/arm64/arm64/gic_v3.c &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;7 +++++++<br class="">sys/arm64/arm64/gic_v3_acpi.c | 36 ++++++++++++++++++++++++++++++++++--<br class="">sys/arm64/arm64/gic_v3_fdt.c &nbsp;| 23 ++++++++++++++++++++++-<br class="">sys/arm64/arm64/gic_v3_var.h &nbsp;| &nbsp;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">&nbsp;</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">&nbsp;</span>&nbsp;&nbsp;&nbsp;("gic_v3_read_ivar: Invalid bus type %u", sc-&gt;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-&gt;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-&gt;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-&gt;parent, madt_data-&gt;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">&nbsp;</span>&nbsp;&nbsp;&nbsp;SYS_RES_MEMORY, madt_data-&gt;count, intr-&gt;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">&nbsp;</span>&nbsp;&nbsp;&nbsp;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-&gt;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-&gt;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-&gt;Header.Length,<br class=""><span class="Apple-tab-span" style="white-space: pre;">	</span><span class="Apple-converted-space">&nbsp;</span>&nbsp;&nbsp;&nbsp;rdist_map, &amp;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">&nbsp;</span>&nbsp;&nbsp;&nbsp;rdist_map, &amp;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-&gt;Version);<br class="">+<span class="Apple-tab-span" style="white-space: pre;">	</span>private = madt_data.dist-&gt;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) &amp; ~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-&gt;Header.Length,<br class=""><span class="Apple-tab-span" style="white-space: pre;">	</span><span class="Apple-converted-space">&nbsp;</span>&nbsp;&nbsp;&nbsp;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) &amp; 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>