On Fri, Aug 25, 2023 at 02:10:05PM +0300, Andy Shevchenko wrote: > On Fri, Aug 25, 2023 at 02:06:34PM +0300, Andy Shevchenko wrote: > > On Thu, Aug 24, 2023 at 12:23:32PM -0600, Simon Glass wrote: > > > Each board has its own way of creating this table. Rather than calling the > > > acpi_create_fadt() function for each one from a common acpi_write_fadt() > > > function, just move the writer into the board-specific code. > > > > No luck, but I have a bit of time to debug more. > > U-boot: > > Writing tables to e4500: > ACPI: Writing ACPI tables at e4500 > writing acpi tables > 0base: writing table '<NULL>' at 000e4500 > - return code 0 > 1facs: writing table 'FACS' at 000e4740 > - return code 0 > 3dsdt: writing table 'DSDT' at 000e4780 > - return code 0 > 4gnvs: writing table 'GNVS' at 000e5390 > - return code 0 > 5csrt: writing table 'CSRT' at 000e5490 > - return code 0 > 5fadt: writing table 'FADT' at 000e54f0 > - return code 0 > 5mcfg: writing table 'MCFG' at 000e5610 > - return code 0 > 5spcr: writing table 'SPCR' at 000e5650 > - return code 0 > 5tcpa: writing table 'TCPA' at 000e56a0 > 5tcpa: Omitted due to being empty > - return code 0 > 5tpm2: writing table 'TPM2' at 000e56a0 > 5tpm2: Omitted due to being empty > - return code 0 > 5x86: writing table '<NULL>' at 000e56a0 > - return code 0 > 6ssdt: writing table 'SSDT' at 000e56f0 > 6ssdt: Omitted due to being empty > - return code 0 > 8dev: writing table '<NULL>' at 000e56f0 > - return code 0 > writing acpi tables done ok > ACPI current = e56f0 > - wrote 'acpi' to e4500, end e56f0 > - wrote 'smbios' to e56f0, end e584f > - done writing tables
> Linux: > > [ 0.003034] ACPI: RSDP 0x00000000000E4500 000024 (v02 U-BOOT) > [ 0.003090] ACPI: XSDT 0x00000000000E45E0 000044 (v01 U-BOOT U-BOOTBL > 20231001 INTL 00000000) > [ 0.003158] ACPI: CSRT 0x00000000000E5490 000058 (v00 U-BOOT U-BOOTBL > 20231001 INTL 00000000) > [ 0.003219] ACPI: MCFG 0x00000000000E5610 00003C (v01 U-BOOT U-BOOTBL > 20231001 INTL 00000000) > [ 0.003277] ACPI: SPCR 0x00000000000E5650 000050 (v02 U-BOOT U-BOOTBL > 20231001 INTL 00000000) > [ 0.003332] ACPI: APIC 0x00000000000E56A0 000048 (v02 U-BOOT U-BOOTBL > 20231001 INTL 00000000) > [ 0.003382] ACPI: Reserving CSRT table memory at [mem 0xe5490-0xe54e7] > [ 0.003403] ACPI: Reserving MCFG table memory at [mem 0xe5610-0xe564b] > [ 0.003421] ACPI: Reserving SPCR table memory at [mem 0xe5650-0xe569f] > [ 0.003437] ACPI: Reserving APIC table memory at [mem 0xe56a0-0xe56e7] > > As you can see a few tables are missing: > FACS, DSDT, GNVS, FADT I added a debug to the ACPI writer, so with your patch Writing tables to e4500: ACPI: Writing ACPI tables at e4500 writing acpi tables 0base: writing table '<NULL>' at 000e4500 * other: Added type 3, 000e4500, size 240 - return code 0 1facs: writing table 'FACS' at 000e4740 * other: Added type 3, 000e4740, size 40 - return code 0 3dsdt: writing table 'DSDT' at 000e4780 Writing DSDT tables Writing DSDT finished, err=0 Failed to find ordering, leaving as is * other: Added type 3, 000e4780, size c10 - return code 0 4gnvs: writing table 'GNVS' at 000e5390 * other: Added type 3, 000e5390, size 100 - return code 0 5csrt: writing table 'CSRT' at 000e5490 * other: Added type 3, 000e5490, size 60 - return code 0 5fadt: writing table 'FADT' at 000e54f0 * other: Added type 3, 000e54f0, size 120 - return code 0 5mcfg: writing table 'MCFG' at 000e5610 * other: Added type 3, 000e5610, size 40 - return code 0 5spcr: writing table 'SPCR' at 000e5650 * other: Added type 3, 000e5650, size 50 - return code 0 5tcpa: writing table 'TCPA' at 000e56a0 5tcpa: Omitted due to being empty - return code 0 5tpm2: writing table 'TPM2' at 000e56a0 5tpm2: Omitted due to being empty - return code 0 5x86: writing table '<NULL>' at 000e56a0 * other: Added type 3, 000e56a0, size 50 - return code 0 6ssdt: writing table 'SSDT' at 000e56f0 Writing SSDT tables Writing SSDT finished, err=0 Failed to find ordering, leaving as is 6ssdt: Omitted due to being empty - return code 0 8dev: writing table '<NULL>' at 000e56f0 Writing device tables Writing finished, err=0 - return code 0 writing acpi tables done ok ACPI current = e56f0 - wrote 'acpi' to e4500, end e56f0 - wrote 'smbios' to e56f0, end e584f - done writing tables Without your patch (to save your time: there is no single character difference 100% copy): Writing tables to e4500: ACPI: Writing ACPI tables at e4500 writing acpi tables 0base: writing table '<NULL>' at 000e4500 * other: Added type 3, 000e4500, size 240 - return code 0 1facs: writing table 'FACS' at 000e4740 * other: Added type 3, 000e4740, size 40 - return code 0 3dsdt: writing table 'DSDT' at 000e4780 Writing DSDT tables Writing DSDT finished, err=0 Failed to find ordering, leaving as is * other: Added type 3, 000e4780, size c10 - return code 0 4gnvs: writing table 'GNVS' at 000e5390 * other: Added type 3, 000e5390, size 100 - return code 0 5csrt: writing table 'CSRT' at 000e5490 * other: Added type 3, 000e5490, size 60 - return code 0 5fact: writing table 'FADT' at 000e54f0 * other: Added type 3, 000e54f0, size 120 - return code 0 5mcfg: writing table 'MCFG' at 000e5610 * other: Added type 3, 000e5610, size 40 - return code 0 5spcr: writing table 'SPCR' at 000e5650 * other: Added type 3, 000e5650, size 50 - return code 0 5tcpa: writing table 'TCPA' at 000e56a0 5tcpa: Omitted due to being empty - return code 0 5tpm2: writing table 'TPM2' at 000e56a0 5tpm2: Omitted due to being empty - return code 0 5x86: writing table '<NULL>' at 000e56a0 * other: Added type 3, 000e56a0, size 50 - return code 0 6ssdt: writing table 'SSDT' at 000e56f0 Writing SSDT tables Writing SSDT finished, err=0 Failed to find ordering, leaving as is 6ssdt: Omitted due to being empty - return code 0 8dev: writing table '<NULL>' at 000e56f0 Writing device tables Writing finished, err=0 - return code 0 writing acpi tables done ok ACPI current = e56f0 - wrote 'acpi' to e4500, end e56f0 - wrote 'smbios' to e56f0, end e584f - done writing tables But here you see the difference. So, your patch damages something there. Since we lost a few tables, it might be that list of the table pointers is corrupted with your new approach. And current debug is poor enough to not catch that... Linux: [ 0.002557] ACPI: Early table checksum verification disabled [ 0.002582] ACPI: RSDP 0x00000000000E4500 000024 (v02 U-BOOT) [ 0.002637] ACPI: XSDT 0x00000000000E45E0 00004C (v01 U-BOOT U-BOOTBL 20231001 INTL 00000000) [ 0.002704] ACPI: CSRT 0x00000000000E5490 000058 (v00 U-BOOT U-BOOTBL 20231001 INTL 00000000) [ 0.002765] ACPI: FACP 0x00000000000E54F0 000114 (v06 U-BOOT U-BOOTBL 20231001 INTL 00000000) [ 0.002830] ACPI: DSDT 0x00000000000E4780 000C06 (v02 U-BOOT U-BOOTBL 00010000 INTL 20200925) [ 0.002889] ACPI: MCFG 0x00000000000E5610 00003C (v01 U-BOOT U-BOOTBL 20231001 INTL 00000000) [ 0.002945] ACPI: SPCR 0x00000000000E5650 000050 (v02 U-BOOT U-BOOTBL 20231001 INTL 00000000) [ 0.003000] ACPI: APIC 0x00000000000E56A0 000048 (v02 U-BOOT U-BOOTBL 20231001 INTL 00000000) [ 0.003049] ACPI: Reserving CSRT table memory at [mem 0xe5490-0xe54e7] [ 0.003070] ACPI: Reserving FACP table memory at [mem 0xe54f0-0xe5603] [ 0.003087] ACPI: Reserving DSDT table memory at [mem 0xe4780-0xe5385] [ 0.003103] ACPI: Reserving MCFG table memory at [mem 0xe5610-0xe564b] [ 0.003119] ACPI: Reserving SPCR table memory at [mem 0xe5650-0xe569f] [ 0.003135] ACPI: Reserving APIC table memory at [mem 0xe56a0-0xe56e7] -- With Best Regards, Andy Shevchenko

