ACPI: usage of sandbox virtual addresses
Heinrich Schuchardt
xypron.glpk at gmx.de
Fri Dec 29 12:09:06 CET 2023
On 12/29/23 09:26, Simon Glass wrote:
> Hi Heinrich,
>
> On Tue, Dec 26, 2023 at 10:03 AM Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>
>> On 12/26/23 10:50, Simon Glass wrote:
>>> Hi Heinrich,
>>>
>>> On Tue, Dec 26, 2023 at 8:56 AM Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>>>
>>>> Hello Simon,
>>>>
>>>> currently we use sandbox virtual addresses in all ACPI tables. This
>>>> means that an application started by the U-Boot sandbox consuming these
>>>> tables will crash due to accessing invalid addresses.
>>>>
>>>> Shouldn't the ACPI tables be migrated to use valid pointers?
>>>
>>> The confusion arises due to the difference between addresses and
>>> pointers. If we store addresses in the ACPI tables, then things should
>>> work.
>>>
>>> My approach has been to avoid using casts, but instead use
>>> map_sysmem() and mem_to_sysmem().
>>>
>>> Which particular piece of code is wrong in this case?
>>
>> Tables DSDT, XSDT, RSDP, FADT in the sandbox contain sandbox virtual
>> addresses instead of pointers to real host memory.
>>
>> All code referring to these tables should be changed.433: *gnvs = map_to_sysmem(ctx->current);
>
> I'm still not quite clear on this...can you point to functions or
> lines of code? When I look at acpi_add_table() it does use memmap, but
> perhaps some parts are wrong?
>
> Regards,
> Simon
Here are some examples where the wrong values are set. We must get rid
of all map_to_sysmem() calls where writing ACPI tables.
lib/acpi/acpi_table.c:
170 rsdt->entry[i] = map_to_sysmem(table);
188 xsdt->entry[i] = map_to_sysmem(table);
lib/acpi/base.c:
27: rsdp->rsdt_address = map_to_sysmem(rsdt);
30: rsdp->xsdt_address = map_to_sysmem(xsdt);
arch/x86/cpu/baytrail/acpi.c:
81: fadt->x_firmware_ctrl = map_to_sysmem(ctx->facs);
82: fadt->x_dsdt = map_to_sysmem(ctx->dsdt);
arch/x86/cpu/quark/acpi.c:
76: fadt->x_firmware_ctrl = map_to_sysmem(ctx->facs);
77: fadt->x_dsdt = map_to_sysmem(ctx->dsdt);
arch/x86/cpu/tangier/acpi.c:
47: fadt->x_firmware_ctrl = map_to_sysmem(ctx->facs);
48: fadt->x_dsdt = map_to_sysmem(ctx->dsdt);
arch/x86/lib/acpi_table.c:
200: tcpa->lasa = map_to_sysmem(log);
271: tpm2->lasa = map_to_sysmem(lasa);
433: *gnvs = map_to_sysmem(ctx->current);
575: fadt->x_firmware_ctrl = map_to_sysmem(facs);
576: fadt->x_dsdt = map_to_sysmem(dsdt);
Best regards
Heinrich
Best regards
Heinrich
More information about the U-Boot
mailing list