I believe this issue has something to do with the ACPI Tables for APIC.
Adding noapic results in Xen booting however the device resets, I assume the APIC is required to setup IOMMU.
I'm not sure where to start looking, I can post my ACPI Tables if that would help.
If anyone can point me in the right direction any help would be appreciated.
Apologies if I'm posting in the wrong area.
To provide some more information, Fedora 31 boots perfectly, so I believe it's an issue specifically relating to Xen.
Booting into Fedora 31 I can see some dmesg logs relating to APIC
ACPI: APIC 0x0000000007BFE5000 00012C (v03 MSFT MSFT 00000002 MSFT 20160422)
ACPI: Local APIC address 0xfee00000
IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-119
APIC: Switch to symmetric I/O mode setup
Using ACPI (MADT) for SMP configuration information
ACPI: HPET id: 0x8086a201 base: 0xfed00000
DMAR-IR: x2apic is disabled because BIOS sets x2apic opt out bit.
ACPI: Using IOAPIC for interrupt routing.
Another update, I observed that if I added acpi=noirq, it wouldn't
error out, meaning the issue I'm having is directly related to the
APIC/MADT ACPI Table on this laptop, with this in mind, I've attached
the Surface Laptop 3's APIC ACPI Table.
Comparing the table against a Lenovo P43s (8th Gen Intel, known working with Xen) the differences are as follows
6c6
< * Disassembly of APIC, Sun Dec 15 11:38:46 2019
---
> * Disassembly of APIC, Sun Dec 15 11:43:24 2019
16,21c16,21
< [009h 0009 1] Checksum : 56
< [00Ah 0010 6] Oem ID : "MSFT "
< [010h 0016 8] Oem Table ID : "MSFT "
< [018h 0024 4] Oem Revision : 00000002
< [01Ch 0028 4] Asl Compiler ID : "MSFT"
< [020h 0032 4] Asl Compiler Revision : 20160422
---
> [009h 0009 1] Checksum : CA
> [00Ah 0010 6] Oem ID : "LENOVO"
> [010h 0016 8] Oem Table ID : "TP-N2I "
> [018h 0024 4] Oem Revision : 00001580
> [01Ch 0028 4] Asl Compiler ID : "PTEC"
> [020h 0032 4] Asl Compiler Revision : 00000002
62,64c62,64
< [04Fh 0079 1] Local Apic ID : 01
< [050h 0080 4] Flags (decoded below) : 00000001
< Processor Enabled : 1
---
> [04Fh 0079 1] Local Apic ID : FF
> [050h 0080 4] Flags (decoded below) : 00000000
> Processor Enabled : 0
70,72c70,72
< [057h 0087 1] Local Apic ID : 03
< [058h 0088 4] Flags (decoded below) : 00000001
< Processor Enabled : 1
---
> [057h 0087 1] Local Apic ID : FF
> [058h 0088 4] Flags (decoded below) : 00000000
> Processor Enabled : 0
78,80c78,80
< [05Fh 0095 1] Local Apic ID : 05
< [060h 0096 4] Flags (decoded below) : 00000001
< Processor Enabled : 1
---
> [05Fh 0095 1] Local Apic ID : FF
> [060h 0096 4] Flags (decoded below) : 00000000
> Processor Enabled : 0
86,88c86,88
< [067h 0103 1] Local Apic ID : 07
< [068h 0104 4] Flags (decoded below) : 00000001
< Processor Enabled : 1
---
> [067h 0103 1] Local Apic ID : FF
> [068h 0104 4] Flags (decoded below) : 00000000
> Processor Enabled : 0
310,312c310,312
< 0000: 41 50 49 43 2C 01 00 00 03 56 4D 53 46 54 20 20 // APIC,....VMSFT
< 0010: 4D 53 46 54 20 20 20 20 02 00 00 00 4D 53 46 54 // MSFT ....MSFT
< 0020: 22 04 16 20 00 00 E0 FE 01 00 00 00 00 08 01 00 // ".. ............
---
> 0000: 41 50 49 43 2C 01 00 00 03 CA 4C 45 4E 4F 56 4F // APIC,.....LENOVO
> 0010: 54 50 2D 4E 32 49 20 20 80 15 00 00 50 54 45 43 // TP-N2I ....PTEC
> 0020: 02 00 00 00 00 00 E0 FE 01 00 00 00 00 08 01 00 // ................
314,316c314,316
< 0040: 01 00 00 00 00 08 04 06 01 00 00 00 00 08 05 01 // ................
< 0050: 01 00 00 00 00 08 06 03 01 00 00 00 00 08 07 05 // ................
< 0060: 01 00 00 00 00 08 08 07 01 00 00 00 00 08 09 FF // ................
---
> 0040: 01 00 00 00 00 08 04 06 01 00 00 00 00 08 05 FF // ................
> 0050: 00 00 00 00 00 08 06 FF 00 00 00 00 00 08 07 FF // ................
> 0060: 00 00 00 00 00 08 08 FF 00 00 00 00 00 08 09 FF // ................
A graphical diff:
It looks like Lenovo disables the Local APIC (lapic) where as the SL3 enables it.
Other difference is the OEM ID, OEM Table ID and OEM Revision ID.