Bios ACPI table for GPIO

Looking to use the GPIO pins in Windows IOT Enterprise on the OdysseyX86J4105

Following the following document

I would like to enable the RHPROXY driver under Device Manager and access the UART on the 40 pin GPIO header. UWP apps can then access the Virtual Port.

I have spent a lot of time creating different .ASL files, creating the ACPITABL.dat and using
asl.exe ACPITABL.dat to create.

I then copy the ACPITABL.dat to the windows\system32\ folder and place the machine into test mode using the cmd prompt bcdedit /set testsigning on

Here is the .ASL file I am using

DefinitionBlock("ACPITABL.dat", "SSDT", 1, "MSFT", "RHPROXY", 1)
{
    Scope(\_SB)
    {
         Device(RHPX)
    {
        Name(_HID, "MSFT8000")
        Name(_CID, "MSFT8000")
        Name(_UID, 1)

        Name(_CRS, ResourceTemplate() 
        {  

            // Index 2
UARTSerialBus(           // Pin 8, 10 of JP1, for SIO_UART1
    115200,                // InitialBaudRate: in bits ber second
    ,                      // BitsPerByte: default to 8 bits
    ,                      // StopBits: Defaults to one bit
    0xfc,                  // LinesInUse: 8 1-bit flags to declare line enabled
    ,                      // IsBigEndian: default to LittleEndian
    ,                      // Parity: Defaults to no parity
    ,                      // FlowControl: Defaults to no flow control
    32,                    // ReceiveBufferSize
    32,                    // TransmitBufferSize
    "\\_SB.URT1",          // ResourceSource: UART bus controller name
    ,
    ,
    ,
    )             
        })

        Name(_DSD, Package() 
        {
            ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
            Package() 
            {
                Package(2) { "bus-UART-UART1", Package() { 2 }},
            }
        })
    }
    }
}

On reboot, RHPROXY is now listed under Device Manager but it fails to start with Code 12 if I use ACPI SB.URT1 d as the ResourceSource.

If I change it to PCI SB.PCI0.URT1 then RHPROXY starts with no errors.
I can now see the virtual port and open it with UWP applications.
I can also send data out through it, but putting a scope on the TX pin shows no data being sent out.

I am sure I should be using the ACPI format for the ResourceSource.

Are there any plans to add the MSFT8000 to the bios in the future?

You can try to generate ACPI tables by using AcpiGenFx.

see here:
https://docs.microsoft.com/en-us/windows-hardware/drivers/bringup/generate-acpi-tables-by-using-acpigenfx

Thanks Salvathor

You still need to know the exact descriptors to use that method also.

Hi @SeanH I am also interested in accessing the GPIO from Windows. I think you’re onto something with the RHPROXY driver.

I want to get access to the GPIO pins so I was looking at the Appendix A - Raspberry Pi ASL Listing section.

I suggest you run RWEverything and get a ACPI dump of the DSDT tables. You will see there are following entries:

_SB.PCI0.URT1 // Intel(R) HS-UART Controller #1
_SB.PCI0.URT2 // Intel(R) HS-UART Controller #2
_SB.PCI0.URT3 // Intel(R) HS-UART Controller #3
_SB.PCI0.URT4 // Intel(R) HS-UART Controller #4
_SB.PCI0.SPI1 // Intel(R) SPI Controller #1
_SB.PCI0.SPI2 // Intel(R) SPI Controller #2
_SB.PCI0.SPI3 // Intel(R) SPI Controller #3
_SB.PCI0.I2C0 // Intel(R) I2C Controller #0
_SB.PCI0.I2C1 // Intel(R) I2C Controller #1
_SB.PCI0.I2C2 // Intel(R) I2C Controller #2
_SB.PCI0.I2C3 // Intel(R) I2C Controller #3
_SB.PCI0.I2C4 // Intel(R) I2C Controller #4
_SB.PCI0.I2C5 // Intel(R) I2C Controller #5
_SB.PCI0.I2C6 // Intel(R) I2C Controller #6
_SB.PCI0.I2C7 // Intel(R) I2C Controller #7
_SB.PCI0.GPO0 // General Purpose Input/Output (GPIO) Controller - North
_SB.PCI0.GPO1 // General Purpose Input/Output (GPIO) Controller - Northwest
_SB.PCI0.GPO2 // General Purpose Input/Output (GPIO) Controller - Audio
_SB.PCI0.GPO3 // General Purpose Input/Output (GPIO) Controller - SCC

Perhaps this post by @zerrofour4 will help construct an ASL for it?