All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Cc: u-boot@lists.denx.de
Subject: Re: [PATCH 1/1] acpi: cannot have RSDT above 4 GiB
Date: Sun, 12 Nov 2023 13:01:32 -0700	[thread overview]
Message-ID: <CAPnjgZ0J+HDnEh+pHJCZNsqqhwP33Xi+8=rUOJPG1m1WBXU+9g@mail.gmail.com> (raw)
In-Reply-To: <20231111142846.180442-1-heinrich.schuchardt@canonical.com>

Hi Heinrich,

On Sat, 11 Nov 2023 at 07:28, Heinrich Schuchardt
<heinrich.schuchardt@canonical.com> wrote:
>
> The field RsdtAddress has only 32 bit. The RSDT table cannot be located
> beyond 4 GiB.
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
> ---
>  lib/acpi/base.c | 26 +++++++++++++++++++-------
>  1 file changed, 19 insertions(+), 7 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

nits / question below

>
> diff --git a/lib/acpi/base.c b/lib/acpi/base.c
> index 2057bd2bef..128a76ad39 100644
> --- a/lib/acpi/base.c
> +++ b/lib/acpi/base.c
> @@ -21,10 +21,17 @@ void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt,
>         memcpy(rsdp->signature, RSDP_SIG, 8);
>         memcpy(rsdp->oem_id, OEM_ID, 6);
>
> -       rsdp->length = sizeof(struct acpi_rsdp);
> -       rsdp->rsdt_address = map_to_sysmem(rsdt);
> +       if (rsdt)
> +               rsdp->rsdt_address = map_to_sysmem(rsdt);
> +       else
> +               rsdp->rsdt_address = 0;

There is a memset() at the top so this line (and the one below) should
not be needed.

> +
> +       if (xsdt)
> +               rsdp->xsdt_address = map_to_sysmem(xsdt);
> +       else
> +               rsdp->xsdt_address = 0;
>
> -       rsdp->xsdt_address = map_to_sysmem(xsdt);
> +       rsdp->length = sizeof(struct acpi_rsdp);
>         rsdp->revision = ACPI_RSDP_REV_ACPI_2_0;
>
>         /* Calculate checksums */
> @@ -68,11 +75,15 @@ static void acpi_write_xsdt(struct acpi_xsdt *xsdt)
>  static int acpi_write_base(struct acpi_ctx *ctx,
>                            const struct acpi_writer *entry)
>  {
> -       /* We need at least an RSDP and an RSDT Table */
> +       /* We need at least an RSDP and an XSDT Table */
>         ctx->rsdp = ctx->current;
>         acpi_inc_align(ctx, sizeof(struct acpi_rsdp));
> -       ctx->rsdt = ctx->current;
> -       acpi_inc_align(ctx, sizeof(struct acpi_rsdt));
> +       if (map_to_sysmem(ctx->current) < UINT_MAX - 0x10000) {

Won't that do something different on 64-bit machines? It seems that
you want to check against SZ_4G ?

> +               ctx->rsdt = ctx->current;
> +               acpi_inc_align(ctx, sizeof(struct acpi_rsdt));
> +       } else {
> +               ctx->rsdt = 0;
> +       }
>         ctx->xsdt = ctx->current;
>         acpi_inc_align(ctx, sizeof(struct acpi_xsdt));
>
> @@ -80,7 +91,8 @@ static int acpi_write_base(struct acpi_ctx *ctx,
>         memset(ctx->base, '\0', ctx->current - ctx->base);
>
>         acpi_write_rsdp(ctx->rsdp, ctx->rsdt, ctx->xsdt);
> -       acpi_write_rsdt(ctx->rsdt);
> +       if (ctx->rsdt)
> +               acpi_write_rsdt(ctx->rsdt);
>         acpi_write_xsdt(ctx->xsdt);
>
>         return 0;
> --
> 2.40.1
>

Regards,
Simon

  reply	other threads:[~2023-11-12 20:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-11 14:28 [PATCH 1/1] acpi: cannot have RSDT above 4 GiB Heinrich Schuchardt
2023-11-12 20:01 ` Simon Glass [this message]
2023-11-12 20:16   ` Heinrich Schuchardt
2023-11-12 21:23     ` Simon Glass

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='CAPnjgZ0J+HDnEh+pHJCZNsqqhwP33Xi+8=rUOJPG1m1WBXU+9g@mail.gmail.com' \
    --to=sjg@chromium.org \
    --cc=heinrich.schuchardt@canonical.com \
    --cc=u-boot@lists.denx.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.