From: Andrew Jones <drjones@redhat.com>
To: Nikos Nikoleris <nikos.nikoleris@arm.com>
Cc: kvm@vger.kernel.org, pbonzini@redhat.com, jade.alglave@arm.com,
alexandru.elisei@arm.com
Subject: Re: [kvm-unit-tests PATCH v2 03/23] lib: Add support for the XSDT ACPI table
Date: Thu, 19 May 2022 15:30:55 +0200 [thread overview]
Message-ID: <20220519133055.zous23go2tkfdlqe@gator> (raw)
In-Reply-To: <20220506205605.359830-4-nikos.nikoleris@arm.com>
On Fri, May 06, 2022 at 09:55:45PM +0100, Nikos Nikoleris wrote:
> XSDT provides pointers to other ACPI tables much like RSDT. However,
> contrary to RSDT that provides 32-bit addresses, XSDT provides 64-bit
> pointers. ACPI requires that if XSDT is valid then it takes precedence
> over RSDT.
>
> Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
> ---
> lib/acpi.h | 6 ++++
> lib/acpi.c | 103 ++++++++++++++++++++++++++++++++---------------------
> 2 files changed, 68 insertions(+), 41 deletions(-)
>
> diff --git a/lib/acpi.h b/lib/acpi.h
> index 42a2c16..d80b983 100644
> --- a/lib/acpi.h
> +++ b/lib/acpi.h
> @@ -13,6 +13,7 @@
>
> #define RSDP_SIGNATURE ACPI_SIGNATURE('R','S','D','P')
> #define RSDT_SIGNATURE ACPI_SIGNATURE('R','S','D','T')
> +#define XSDT_SIGNATURE ACPI_SIGNATURE('X','S','D','T')
> #define FACP_SIGNATURE ACPI_SIGNATURE('F','A','C','P')
> #define FACS_SIGNATURE ACPI_SIGNATURE('F','A','C','S')
>
> @@ -56,6 +57,11 @@ struct rsdt_descriptor_rev1 {
> u32 table_offset_entry[0];
> } __attribute__ ((packed));
>
> +struct acpi_table_xsdt {
> + ACPI_TABLE_HEADER_DEF
> + u64 table_offset_entry[1];
> +} __attribute__ ((packed));
> +
> struct fadt_descriptor_rev1
> {
> ACPI_TABLE_HEADER_DEF /* ACPI common table header */
> diff --git a/lib/acpi.c b/lib/acpi.c
> index de275ca..9b8700c 100644
> --- a/lib/acpi.c
> +++ b/lib/acpi.c
> @@ -38,45 +38,66 @@ static struct rsdp_descriptor *get_rsdp(void)
>
> void* find_acpi_table_addr(u32 sig)
> {
> - struct rsdp_descriptor *rsdp;
> - struct rsdt_descriptor_rev1 *rsdt;
> - void *end;
> - int i;
> -
> - /* FACS is special... */
> - if (sig == FACS_SIGNATURE) {
> - struct fadt_descriptor_rev1 *fadt;
> - fadt = find_acpi_table_addr(FACP_SIGNATURE);
> - if (!fadt) {
> - return NULL;
> - }
> - return (void*)(ulong)fadt->firmware_ctrl;
> - }
> -
> - rsdp = get_rsdp();
> - if (rsdp == NULL) {
> - printf("Can't find RSDP\n");
> - return 0;
> - }
> -
> - if (sig == RSDP_SIGNATURE) {
> - return rsdp;
> - }
> -
> - rsdt = (void*)(ulong)rsdp->rsdt_physical_address;
> - if (!rsdt || rsdt->signature != RSDT_SIGNATURE)
> - return 0;
> -
> - if (sig == RSDT_SIGNATURE) {
> - return rsdt;
> - }
> -
> - end = (void*)rsdt + rsdt->length;
> - for (i=0; (void*)&rsdt->table_offset_entry[i] < end; i++) {
> - struct acpi_table *t = (void*)(ulong)rsdt->table_offset_entry[i];
> - if (t && t->signature == sig) {
> - return t;
> - }
> - }
> - return NULL;
Let's definitely fix the coding style earlier in the series. Either while
moving the file or as another patch right after moving the file. That, or
use the old style for this file when updating it, since we don't want to
mix styles in the same file.
> + struct rsdp_descriptor *rsdp;
> + struct rsdt_descriptor_rev1 *rsdt;
> + struct acpi_table_xsdt *xsdt = NULL;
> + void *end;
> + int i;
> +
> + /* FACS is special... */
> + if (sig == FACS_SIGNATURE) {
> + struct fadt_descriptor_rev1 *fadt;
> +
> + fadt = find_acpi_table_addr(FACP_SIGNATURE);
> + if (!fadt)
> + return NULL;
> +
> + return (void*)(ulong)fadt->firmware_ctrl;
> + }
> +
> + rsdp = get_rsdp();
> + if (rsdp == NULL) {
> + printf("Can't find RSDP\n");
> + return 0;
> + }
> +
> + if (sig == RSDP_SIGNATURE)
> + return rsdp;
> +
> + rsdt = (void *)(ulong)rsdp->rsdt_physical_address;
> + if (!rsdt || rsdt->signature != RSDT_SIGNATURE)
> + rsdt = NULL;
> +
> + if (sig == RSDT_SIGNATURE)
> + return rsdt;
> +
> + if (rsdp->revision > 1)
> + xsdt = (void *)(ulong)rsdp->xsdt_physical_address;
> + if (!xsdt || xsdt->signature != XSDT_SIGNATURE)
> + xsdt = NULL;
> +
> + if (sig == XSDT_SIGNATURE)
> + return xsdt;
> +
> + // APCI requires that we first try to use XSDT if it's valid,
> + // we use to find other tables, otherwise we use RSDT.
/* ... */ style comments please. And the comment looks like it's missing
something like "When it's valid..."
> + if (xsdt) {
> + end = (void *)(ulong)xsdt + xsdt->length;
> + for (i = 0; (void *)&xsdt->table_offset_entry[i] < end; i++) {
> + struct acpi_table *t =
> + (void *)xsdt->table_offset_entry[i];
nit: The kernel's checkpatch allows 100 char line length. Let's use all of them :-)
> + if (t && t->signature == sig)
> + return t;
> + }
> + } else if (rsdt) {
> + end = (void *)rsdt + rsdt->length;
> + for (i = 0; (void *)&rsdt->table_offset_entry[i] < end; i++) {
> + struct acpi_table *t =
> + (void *)(ulong)rsdt->table_offset_entry[i];
Same nit as above.
> + if (t && t->signature == sig)
> + return t;
> + }
> + }
> +
> + return NULL;
> }
> --
> 2.25.1
>
Thanks,
drew
next prev parent reply other threads:[~2022-05-19 13:31 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-06 20:55 [kvm-unit-tests PATCH v2 00/23] EFI and ACPI support for arm64 Nikos Nikoleris
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 01/23] lib: Move acpi header and implementation to lib Nikos Nikoleris
2022-05-19 13:21 ` Andrew Jones
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 02/23] lib: Ensure all struct definition for ACPI tables are packed Nikos Nikoleris
2022-05-19 13:17 ` Andrew Jones
2022-05-19 15:52 ` Nikos Nikoleris
2022-05-19 17:14 ` Andrew Jones
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 03/23] lib: Add support for the XSDT ACPI table Nikos Nikoleris
2022-05-19 13:30 ` Andrew Jones [this message]
2022-06-18 0:38 ` Ricardo Koller
2022-06-20 8:53 ` Alexandru Elisei
2022-06-20 11:06 ` Nikos Nikoleris
2022-06-21 12:25 ` Alexandru Elisei
2022-06-21 11:26 ` Nikos Nikoleris
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 04/23] lib: Extend the definition of the ACPI table FADT Nikos Nikoleris
2022-05-19 13:42 ` Andrew Jones
2022-06-18 1:00 ` Ricardo Koller
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 05/23] arm/arm64: Add support for setting up the PSCI conduit through ACPI Nikos Nikoleris
2022-05-19 13:54 ` Andrew Jones
2022-06-21 16:06 ` Ricardo Koller
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 06/23] arm/arm64: Add support for discovering the UART " Nikos Nikoleris
2022-05-19 13:59 ` Andrew Jones
2022-06-21 16:07 ` Ricardo Koller
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 07/23] arm/arm64: Add support for timer initialization " Nikos Nikoleris
2022-05-19 14:10 ` Andrew Jones
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 08/23] arm/arm64: Add support for cpu " Nikos Nikoleris
2022-05-19 14:23 ` Andrew Jones
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 09/23] lib/printf: Support for precision modifier in printing strings Nikos Nikoleris
2022-05-19 14:52 ` Andrew Jones
2022-05-19 16:02 ` Andrew Jones
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 10/23] lib/printf: Add support for printing wide strings Nikos Nikoleris
2022-06-21 16:11 ` Ricardo Koller
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 11/23] lib/efi: Add support for getting the cmdline Nikos Nikoleris
2022-06-21 16:33 ` Ricardo Koller
2022-06-27 16:12 ` Nikos Nikoleris
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 12/23] arm/arm64: mmu_disable: Clean and invalidate before disabling Nikos Nikoleris
2022-05-13 13:15 ` Alexandru Elisei
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 13/23] arm/arm64: Rename etext to _etext Nikos Nikoleris
2022-06-21 16:42 ` Ricardo Koller
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 14/23] lib: Avoid ms_abi for calls related to EFI on arm64 Nikos Nikoleris
2022-05-20 14:02 ` Andrew Jones
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 15/23] arm64: Add a new type of memory type flag MR_F_RESERVED Nikos Nikoleris
2022-06-21 16:44 ` Ricardo Koller
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 16/23] arm/arm64: Add a setup sequence for systems that boot through EFI Nikos Nikoleris
2022-05-13 13:31 ` Alexandru Elisei
2022-06-27 16:36 ` Nikos Nikoleris
2022-05-06 20:55 ` [kvm-unit-tests PATCH v2 17/23] arm64: Copy code from GNU-EFI Nikos Nikoleris
2022-06-21 17:59 ` Ricardo Koller
2022-05-06 20:56 ` [kvm-unit-tests PATCH v2 18/23] arm64: Change gnu-efi imported file to use defined types Nikos Nikoleris
2022-05-06 20:56 ` [kvm-unit-tests PATCH v2 19/23] arm64: Use code from the gnu-efi when booting with EFI Nikos Nikoleris
2022-06-21 22:32 ` Ricardo Koller
2022-06-27 17:10 ` Nikos Nikoleris
2022-06-30 5:13 ` Ricardo Koller
2022-05-06 20:56 ` [kvm-unit-tests PATCH v2 20/23] lib: Avoid external dependency in libelf Nikos Nikoleris
2022-06-21 22:39 ` Ricardo Koller
2022-05-06 20:56 ` [kvm-unit-tests PATCH v2 21/23] x86: Move x86_64-specific EFI CFLAGS to x86_64 Makefile Nikos Nikoleris
2022-06-21 22:45 ` Ricardo Koller
2022-06-22 13:47 ` Nikos Nikoleris
2022-05-06 20:56 ` [kvm-unit-tests PATCH v2 22/23] arm64: Add support for efi in Makefile Nikos Nikoleris
2022-06-21 22:51 ` Ricardo Koller
2022-06-22 13:52 ` Nikos Nikoleris
2022-06-21 22:52 ` Ricardo Koller
2022-05-06 20:56 ` [kvm-unit-tests PATCH v2 23/23] arm64: Add an efi/run script Nikos Nikoleris
2022-06-21 23:09 ` Ricardo Koller
2022-06-22 14:13 ` Nikos Nikoleris
2022-06-30 5:22 ` Ricardo Koller
2022-05-13 14:09 ` [kvm-unit-tests PATCH v2 00/23] EFI and ACPI support for arm64 Alexandru Elisei
2022-05-18 9:00 ` Nikos Nikoleris
2022-05-20 9:58 ` Alexandru Elisei
2022-05-17 17:56 ` Ricardo Koller
2022-05-18 12:44 ` Nikos Nikoleris
2022-05-18 16:10 ` Ricardo Koller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220519133055.zous23go2tkfdlqe@gator \
--to=drjones@redhat.com \
--cc=alexandru.elisei@arm.com \
--cc=jade.alglave@arm.com \
--cc=kvm@vger.kernel.org \
--cc=nikos.nikoleris@arm.com \
--cc=pbonzini@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).