Code Monkey home page Code Monkey logo

edk2-rk3588's Introduction

EDK2 UEFI firmware for Rockchip RK3588 platforms

This repository contains an UEFI firmware implementation based on EDK2 for various RK3588 boards.

Supported platforms

Supported OSes

In ACPI mode

OS Version Tested/supported hardware Notes
Windows 11 Status
NetBSD 10 Display, UART, USB, PCIe (incl. NVME), SATA, eMMC, GMAC Ethernet
VMware ESXi Arm Fling >= 1.12 Display, USB * PCIe devices will hang at boot, need to disable in settings or leave the ports empty.
* GMAC Ethernet gets detected but does not work.
Linux tested Ubuntu 22.04, kernel 5.15.0-75-generic Display, UART, USB, PCIe (incl. NVME & Ethernet), SATA For full hardware functionality, use a kernel with RK3588 support and switch to Device Tree mode.

Note

ACPI support is only being developed and tested against Windows. There are no plans to further improve functionality for other OSes. Consider using Device Tree instead (where applicable, for instance Linux).

In Device Tree mode

OS Version Tested/supported hardware Notes
Rockchip SDK Linux 5.10 legacy, tested with Armbian rk3588-live-iso Platform-dependent, most peripherals work. If using a different kernel, see Device Tree configuration.

Supported peripherals in UEFI

Note

Applicable to all platforms unless otherwise noted.

Only devices relevant to the firmware itself (not OS) are listed below.

Device Status Notes
USB 3 / 2.0 / 1.1 ๐ŸŸข Working Host-mode only, USB 3 devices connected to a Type-C port only work in one orientation.
PCIe 3.0 (RK3588) ๐ŸŸข Working No bifurcation support
PCIe 2.1 ๐ŸŸข Working
SATA ๐ŸŸข Working
SD/eMMC ๐ŸŸข Working
HDMI output ๐ŸŸก Partial Single display with mode limited at 1080p 60 Hz
DisplayPort output (USB-C) ๐ŸŸก Partial Mode fixed at 1080p 60 Hz, only works in one orientation of the Type-C port. Some displays may not work regardless.
eDP output ๐ŸŸก Partial Disabled, requires manual configuration depending on the platform and panel.
DSI output ๐ŸŸข Working Only enabled on Fydetab Duo. Requires manual configuration depending on the platform and panel.
GMAC Ethernet ๐Ÿ”ด Not working Only brought-up for OS usage
Realtek PCIe Ethernet ๐ŸŸข Working Some platforms don't have MAC addresses set, networking may not work in that case.
UART ๐ŸŸข Working UART2 console available at 1500000 baud rate
GPIO ๐ŸŸก Partial Only read, write and alt function supported
I2C ๐ŸŸข Working
SPI ๐ŸŸข Working
PWM ๐ŸŸข Working
SPI NOR Flash ๐ŸŸข Working
HYM8563 real-time clock ๐ŸŸข Working
RNG ๐ŸŸข Working
Cooling fan ๐ŸŸข Working Supported on most platforms. Fan connector where present, otherwise available at the GPIO header for 3-pin PWM fans (do not connect 2-pin fans there!):
* Orange Pi 5: GPIO4_B2
* Indiedroid Nova: GPIO4_B4
Status LED ๐ŸŸข Working
Voltage regulators (RK806, RK860) ๐ŸŸข Working
FUSB302 USB Type-C Controller ๐Ÿ”ด Not working Required for PD negotiation and connector orientation switching

Getting started

1. Requirements

  • One of the supported devices.

  • Storage for the firmware: SPI NOR flash (included with some devices), SD card or eMMC.

  • Quality power supply that can provide at least 15 W. Depending on the peripherals you use, more may be needed.

    Note: on Mixtile Blade 3, a fixed voltage higher than 5V must be supplied. The board cannot power any external peripherals if the input voltage is just 5V. USB-PD negotiation is not supported by firmware.

  • HDMI or DisplayPort (USB-C) screen capable of at least 1080p 60Hz.

  • Optionally, if display is not available or for debugging purposes, an UART adapter capable of 1500000 baud rate (e.g. USB CH340, CP2104).

2. Download the firmware image

The latest version can be obtained from https://github.com/edk2-porting/edk2-rk3588/releases.

If your platform is not yet supported, using an image meant for another device is not recommended. Although they are generally similar, voltage setup can happen to be different and you may risk damaging the board. External peripherals are unlikely to work either.

3. Flash the firmware

UEFI can be flashed to either a SPI NOR flash, SD card or eMMC module:

  • For removable SD or eMMC (easiest), you can simply use balenaEtcher, RPi Imager or dd.

  • For SPI NOR or soldered eMMC, instructions can be found at: https://wiki.radxa.com/Rock5/install/spi.

    In short, you can flash the image from Linux booted on the device or by using RKDevTool on another computer. The latter requires entering Maskrom mode on the device. The way to do this slightly varies across platforms, refer to your vendor documentation.

Warning: these operations will erase data on the storage device. Make a backup first!

If you wish to have both UEFI and an OS on the same SD or eMMC device: flash UEFI first, then create any additional partitions without touching the first, reserved one. Steps for updating the firmware in this case can be found here.

Note: Using SPI NOR (if present) is recommeded, as it leaves the other storage options free for other purposes. Additionally, SD/eMMC will limit the firmware's ability to access its own storage (variable store) when an OS is running. This feature is mostly used by OS installers to create the boot menu options, it is not mandatory.

4. Connect peripherals and power on the device

If the flashing process has been done correctly, you should see the status LED blinking (if present), and shortly after, the platform's boot logo with a progress bar at the bottom on the connected display.

At this stage, you can press Esc to enter the firmware setup, F1 to launch the UEFI Shell, or, provided you also have an UEFI bootloader/app on a storage device, you can let the system automatically run that, which is the default behavior if no action is taken.

Check the Supported OSes and Supported peripherals in UEFI sections to see what's currently possible with this firmware.

Also check the configuration options described below, some of which may need to be changed depending on the OS used.

If you experience any issues, please see the Troubleshooting section.

Configuration settings

The UEFI provides a few configuration options, like CPU frequency, PCIe/SATA selection for an M.2 port, fan control, etc. These can be viewed and changed using the UI configuration menu (under Device Manager -> Rockchip Platform Configuration).

Configuration through the user interface is fairly straightforward and help/navigation information is provided around the menus.

Tips

  • CPU clocks are set to 816 MHz (boot default) on platforms without a cooling fan included. If you have adequate cooling, go to the configuration menu -> CPU Performance and set all Cluster Presets to Maximum.

Device Tree configuration

For rich Linux support, it is recommended to enable Device Tree mode. You can do so by going to the configuration menu -> ACPI / Device Tree and setting Config Table Mode to Device Tree.

By default, the firmware installs a DTB compatible with (most) Rockchip SDK Linux 5.10 legacy kernel variants.

Custom Device Tree Blob (DTB) override and overlays

It is also possible to provide a custom DTB and overlays. To enable this, go to the configuration menu -> ACPI / Device Tree and set Support DTB override & overlays to Enabled.

The firmware will now look for overrides in the partition of a selected boot option / OS loader. In most cases this will be the first FAT32 EFI System Partition.

  • The base DTB must be located at \dtb\base\<PLATFORM-DT-NAME>.dtb.

  • The overlays can be placed in:

    • \dtb\overlays - will be applied first, regardless of the platform.
    • \dtb\overlays\<PLATFORM-DT-NAME> - will be applied only to the specified platform.

    and must have the .dtbo extension.

The paths above are relative to the root of the file system. That is, the dtb directory must not be placed in a sub-directory.

<PLATFORM-DT-NAME> can be:

Name Platform
rk3588-rock-5b ROCK 5B
rk3588s-rock-5a ROCK 5A
rk3588-rock-5-itx ROCK 5 ITX
rk3588s-orangepi-5 Orange Pi 5
rk3588-orangepi-5-plus Orange Pi 5 Plus
rk3588s-9tripod-linux Indiedroid Nova
rk3588-firefly-aio-3588q Firefly AIO-3588Q
itx-3588j Firefly ITX-3588J
roc-rk3588s-pc ROC-RK3588S-PC / Station M3
rk3588-blueberry-edge-v12-linux R58X (v1.2)
rk3588-blueberry-minipc-linux R58 Mini
rk3588s-khadas-edge2 Edge2
rk3588-blade3-v101-linux Blade 3
rk3588-nanopc-t6 NanoPC T6
rk3588s-nanopi-r6c NanoPi R6C
rk3588s-nanopi-r6s NanoPi R6S
rk3588-hinlink-h88k H88K

In the absence of a custom base DTB override, the overlays are applied on top of the firmware-provided DTB.

The firmware applies some fix-ups to its own DTB depending on the user settings (e.g. PCIe/SATA/USB selection, making SATA overlays redundant). These fix-ups are not applied to a custom base DTB - overlays must be used instead.

If the application of an overlay fails (e.g. due to it being invalid in regard to the base DTB), all overlays are discarded, including those that got applied up to that point.

If the custom base DTB is invalid, the firmware-provided one will be passed to the OS instead.

This entire process is logged to the serial console. There's currently no other way to see potential errors.

Updating the firmware

If the storage is only used for UEFI and nothing else, simply download the latest image and flash it as described in the Getting started section.

If it is also used by an OS and has additional partitions, only part of the image needs to be applied. This can be done with the dd tool:

dd if=FIRMWARE.img of=DESTINATION bs=512 skip=64 seek=64 conv=notrunc

FIRMWARE.img is the firmware image for your platform. E.g. edge2_UEFI_Release_v0.8.img.

DESTINATION is the destination storage that you wish to update the firmware on. E.g. /dev/sdb.

Here we skip the GPT and copy the firmware starting at offset 0x8000 (64 blocks * 512 bytes block size) until its end. See Flash layout for more details.

Troubleshooting

Important

First of all, make sure your device can only possibly load the UEFI firmware and nothing else.

U-Boot must not present on either SPI NOR, SD or eMMC, otherwise it could take precedence and cause hidden issues.

Below you can find some basic debugging information. If none of this helps, please see the Advanced troubleshooting section.

Meaning of the Status LED

If your device has an activity LED, the firmware will blink it in different patterns to indicate the current system status.

  1. Immediately after power on, the LED should start pulsing quickly. This indicates that the firmware is initializing.

  2. After initialization (usually takes less than 5 seconds), the LED will switch to a short pulsing every 2 seconds or so. This indicates that the firmware is ready and waiting for user action or the countdown to boot automatically. The display output should also be enabled at this point.

  3. When the firmware boots an OS and is about to exit, the LED will stop blinking.

If the LED:

  • does not light up after power on, this means the firmware has not managed to load up at all.

  • gets stuck in either on or off state after blinking a few times and never recovers, something went wrong and the firmware has crashed or frozen.

    Note that it is only expected to stop as described at point 3) above.

Common issues

Nothing shows up on the screen

Make sure you've flashed the firmware correctly and that it is the version designed for your device. In most cases this is the culprit.

Assuming the firmware loads fine:

  • The display must support a resolution of at least 1080p at 60 Hz.
  • If you're using HDMI and the system has two ports, only one will work. Try both.
  • If you're using USB-C to DisplayPort, only one orientation of the USB-C connector will work. Check both.

If you are not able to get any display output, the only way to interact with UEFI is via the serial console.

Configuration settings do not get saved

This has been observed in cases where U-Boot was still present on another boot device (SD, eMMC or SPI NOR). This is not a supported scenario. The solution is to unplug or erase devices that may have other firmware on them.

What's happening:

  1. Board loads U-Boot from a storage device that has higher priority (let's say eMMC).
  2. That U-Boot image in turn loads UEFI and its settings from another device with lower priority (let's say SD).
  3. UEFI cannot accurately determine to which device it belongs. The parameter used to verify this points to eMMC (U-Boot), while UEFI actually got loaded from SD.
  4. Consequently, UEFI mistakenly saves the user settings to eMMC. On reboot, U-Boot loads UEFI and the original/unchanged settings from SD and the cycle repeats.

USB 3 devices do not work

  • Try a different port.
  • If you're using USB-C, 3.0 devices will only work in one orientation of the connector. Check both.
  • Make sure the power supply and cable are good.

Networking does not work

  • Only Realtek PCIe and USB controllers are supported. Native Gigabit provided by RK3588 isn't.

  • Some boards with Realtek NICs do not have a MAC address set at factory and will show-up as being all zeros in UEFI, possibly preventing the adapter from obtaining an IP address.

    You can easily fix this by writing the MAC address manually:

    1. Boot into Linux and open up a terminal. The commands below apply to Armbian with legacy kernel.

    2. Install the headers for your kernel version:

      sudo apt install -y linux-headers-legacy-rk35xx
    3. Clone Realtek PGTool and build the driver:

      git clone https://github.com/redchenjs/rtnicpg
      cd rtnicpg
      make
    4. Unload all Realtek modules and load the driver built above:

      sudo rmmod pgdrv
      sudo ./pgload.sh

      Note: make sure there aren't any remaining Realtek modules loaded after this, except for the new pgdrv.
      If you have r8125 built-in, you might have to reboot with initcall_blacklist=rtl8125_init_module as a kernel parameter (in Grub).

    5. Burn a MAC address into the eFuses:

      For only one NIC:

      sudo ./rtnicpg-aarch64-linux-gnu /efuse /nodeid 00E04C001234

      For two or more:

      sudo ./rtnicpg-aarch64-linux-gnu /efuse /# 1 /nodeid 00E04C001234
      sudo ./rtnicpg-aarch64-linux-gnu /efuse /# 2 /nodeid 00E04C001235

      00E04C001234 is an example address. You can generate random and unique ones using: https://www.macvendorlookup.com/mac-address-generator

    Note: the number of eFuses is limited, thus MAC addresses can only be changed a few times.

Advanced troubleshooting

The firmware will log detailed information to the serial console when using a debug version. See the release notes for details on how to obtain this version.

  1. The debug image needs to be flashed in place of the existing one.

  2. Connect the UART2 RX, TX and GND pins on your device (check vendor documentation) to the UART adapter on your other computer.

  3. Open up a serial terminal (PuTTY on Windows, stty on Linux) set to 1500000 baud rate and 8n1 (default).

  4. Power on the device.

You should be able to see many debug messages being printed to the console. If that's not the case, double check the connections (swap RX/TX), make sure the adapter is functional and configured correctly.

The logs should give an insight of what's going on. If you need help analyzing them, feel free to open an issue ticket.

Reporting issues

You can open issues related to UEFI at https://github.com/edk2-porting/edk2-rk3588/issues.

Please include as many details as possible: expected behavior, what actually happens, steps to reproduce, serial logs, etc.

Also check the existing issues in case yours might be already reported.

Building

The firmware can only be built on Linux currently. For Windows use WSL.

  1. Install required packages:

    For Ubuntu/Debian:

    sudo apt install git gcc g++ build-essential gcc-aarch64-linux-gnu iasl python3-pyelftools uuid-dev

    For Arch Linux:

    sudo pacman -Syu
    sudo pacman -S git base-devel gcc dtc aarch64-linux-gnu-binutils aarch64-linux-gnu-gcc aarch64-linux-gnu-glibc python python-pyelftools iasl --needed
  2. Clone the repository:

    git clone https://github.com/edk2-porting/edk2-rk3588.git --recursive
    cd edk2-rk3588
  3. Build UEFI (ROCK 5B for example, check list of platform configs):

    ./build.sh --device rock-5b --release Release # (or Debug)

If you get build errors, it is very likely that you're still missing some dependencies. The list of packages above is not complete and depending on the distro you may need to install additional ones. In most cases, looking up the error messages on the internet will point you at the right packages.

Notes

Flash layout

Address Size Desc File
0x00000000 0x00004400 GPT Table rk3588_spi_nor_gpt.img
0x00008000 IDBlock idblock.bin
0x00100000 0x00500000 BL33_AP_UEFI FV ${DEVICE}_EFI.itb
0x007C0000 0x00010000 NV_VARIABLE_STORE
0x007D0000 0x00010000 NV_FTW_WORKING
0x007E0000 0x00010000 NV_FTW_SPARE

The variable store is not included in the flash image, in order to prevent overwriting it and to maintain the user settings across updates.

The firmware expects these exact offsets, do not change them.

Memory Map

Address Size Desc File
0x00040000 ATF bl31_0x00040000.bin
0x000f0000 ATF bl31_0x000f0000.bin
0x00200000 0x00500000 UEFI FV BL33_AP_UEFI.Fv
0x007C0000 0x00010000 NV_VARIABLE_STORE
0x007D0000 0x00010000 NV_FTW_WORKING
0x007E0000 0x00010000 NV_FTW_SPARE
0x08400000 OP-TEE bl32.bin
0xff100000 ATF (PMU_MEM) bl31_0xff100000.bin

Licenses

Most of the UEFI code is licensed under the default EDK2 license, which is BSD-2-Clause-Patent.

Some non-critical components have been ported from Rockchip's U-Boot fork and are licensed as GPL-2.0-or-later:

  • UsbDpPhy
  • DwDpLib

The files in edk2-rockchip-non-osi are licensed as GPL-2.0-only.

The license for some of the blobs in the misc/rkbin/ directory can be found at: https://github.com/rockchip-linux/rkbin/blob/master/LICENSE. Note that it also contains binaries built from open-source projects such as U-Boot (SPL), Arm Trusted Firmware and OP-TEE, having a different license.

Community

Credits & alternatives

This firmware is based on Rockchip's initial efforts at https://gitlab.com/rk3588_linux/rk/uefi-monorepo.

For RK356x, check out the Quartz64-UEFI project at https://github.com/jaredmcneill/quartz64_uefi, from which we also reused some code.

edk2-rk3588's People

Contributors

amazingfate avatar coolstar avatar danct12 avatar googulator avatar idigdoug avatar initdc avatar mariobalanica avatar mollysophia avatar prokn1fe avatar rpardini avatar s199pwa1k9r avatar shimmyshai00 avatar silime avatar strongtz avatar willzenzou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

edk2-rk3588's Issues

Implement CPPC in ACPI

This is quite tricky to achieve as it needs to control the PMIC and voltage regulators behind SPI and I2C respectively.

Since doing this entirely in AML is crazy, all OSes that wish to support CPPC would also need to have I2C and SPI bus drivers, and most importantly bind to the ACPI device + also handle accesses from AML via the standard I2cSerialBus, SpiSerialBus resources.

Not great.

Fortunately, Rockchip have started open sourcing their ATF implementation, giving us the opportunity to abstract all of the power stuff there behind an SMC call. Much better :)

RK3588 has a Cortex-M0 MCU too, but that is likely already running some other power management code.

SD card preloaded with Windows 11 not visible to UEFI

I prepared an SD card with an installation of Windows 11 22H2 for ARM64 (GPT partitioning, bootmgfw.efi installed on FAT32 EFIESP).
When plugged in directly to the Rock 5B's SD card slot, the card is not detected by UEFI (not offered for boot, not browsable in UEFI shell). The same SD card plugged into the bottom USB 3.0 port through an adapter boots fine (the black USB 2.0 ports also detect the card, but boot fails with INACCESSIBLE_BOOT_DEVICE, probably due to an ACPI configuration issue),

Checking the code, it looks like pin muxing is never set up correctly to route the SDHCI controller to the SD socket.

Time is lost across reboots / power cycles

Most platforms have a HYM8563 RTC chip connected to I2C.

Unlike the other RK80x PMICs, 806 does not seem to include a RTC. Would've been useful for platforms that don't have a dedicated one, such as the Mixtile Blade 3.

Implement fan control in UEFI

PWM code is already there, just need to expose some user options to configure the speed and (maybe) GPIO pin.

On Khadas Edge2 this is done by the onboard STM32 MCU, which can be controlled through I2C.

HDMI output may not work properly on ROCK 5A

In fact I can't get it to work at all in UEFI. Tried with two different screens, does not occur on any other board.
It does work fine in Linux however.

Other people have not been able to reproduce it.

(yes, the HDMI port next to USB-C is actually a DP-HDMI converter, that one is not supported)

USB-PD negotiation

Some platforms implement USB-PD via FUSB302.
Would be a good idea to negotiate voltage during the boot phase, since one may have various power-hungry peripherals connected (NVME, SATA, USB 3 hard drives, etc.) and 5V 3A could turn out to not be enough.

This must be done really early in the DXE phase (can also be done in PEI but it brings unnecessary complexity IMO).

It is currently a showstopper on Mixtile Blade 3 as this board can't properly power any external peripherals when it's supplied with just 5V.

MSI support for PCIe

Not possible to have MSIs through ITS due to Rockchip erratum 3588001, but the OSes we're interested in do support SPI-based MSI by having a V2M entry in MADT.

The definition is already there but commented out as it needs more testing.

Native build ?

Is there a way to make a native build ?

  • _pack
  • _build_idblock
  • echo ' => Building idblock.bin'
    => Building idblock.bin
  • pushd /home/woc/BUILD/edk2-rk35xx/workspace
    ~/BUILD/edk2-rk35xx/workspace ~/BUILD/edk2-rk35xx
  • FLASHFILES='FlashHead.bin FlashData.bin FlashBoot.bin'
  • rm -f 'rk35*spl_loader.bin' idblock.bin 'rk35ddr.bin' 'rk35_usbplug*.bin' UsbHead.bin FlashHead.bin FlashData.bin FlashBoot.bin
  • /home/woc/BUILD/edk2-rk35xx/misc/tools/mkimage -n rk3588 -T rksd -d /home/woc/BUILD/edk2-rk35xx/misc/rkbin/bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.11.bin:/home/woc/BUILD/edk2-rk35xx/misc/rkbin/bin/rk35/rk3588_spl_v1.12.bin idblock.bin
    ./build.sh: line 32: /home/woc/BUILD/edk2-rk35xx/misc/tools/mkimage: cannot execute binary file: Exec format error

Linux 6.2 (pancsf-midstream) booted via this UEFI + matching DT bootloops on USB-PD

My most recent build of the pancsf-midstream kernel goes into a bootloop when loaded by UEFI, using the same DTB and boot options that work well with the stock u-boot.

The cause of the bootloop is a USB-PD hard reset received when the FUSB driver gets loaded. This issue is reproducible with all of my PD power supplies, including ones that work with u-boot.

This could simply be a timeout (as UEFI is much slower than u-boot at handing off to the kernel, by design), however the UEFI I2C code may also be writing to the FUSB and mangle its state before handoff.

Realtek network adapter has all-zero MAC address

The onboard Realtek PCIe NIC(s) on many platforms don't have a MAC address burnt in the eFuses (or external EEPROM). Linux and other OSes may generate a random one, but this is not ideal at all and the UEFI driver can't do it.

I've tried writing an address into the MAC registers starting at 0x0, but neither UEFI or Linux use it.
I'm going to try again later and check if it actually sticks, but if nothing comes out if this then we've got two options:

  1. Figure out how and write an EFI app that can conveniently program a given MAC address into the eFuses. It's up to the user to generate an address and manually run this app.

  2. Explain in the README how one can download and use the (rather obscure) Realtek PGtool app for Linux (also has aarch64 binaries!) to burn the MAC.

In both cases it's going to be a one-time, permanent action.

Incorrect CPU topology in ACPI

Each core gets identified as having its own socket (8 in total), when there's only one "socket" and cores are split into 3 clusters: 4 x A55 + 2 x A76 + 2 x A76.

L3 cache size is also guessed incorrectly.

Linux EFISTUB seems to think Secure Boot is enabled

When trying to boot the Linux 6.3.7 kernel, loading the DTB for the device with the dtb= command line argument fails with the rather vague error: EFI stub: ERROR: Ignoring DTB fron command line.

Looking in the code, this error is found in drivers/firmware/efi/firmware/libstub/fdt.c on line 252, and happens because the check for secure boot returns that it is enabled.

Is this intentionally set up like this or an oversight/bug somewhere? Is there a way to disable secure boot if it is, in fact, enabled?

Edit: never mind, my kernel config had CONFIG_EFI_ARMSTUB_DTB_LOADER disabled, and the error message don't distinguish between those two conditions.

Blink the activity LED to provide basic system status info

It would be nice to blink the LED (if present) at different boot stages or events to let the user know what's going on, without display or serial output.

We could take this one step further and report error patterns too from PI Status Codes, but there's only so much info you can give with a single little LED, so I'm not sure I want to implement this.

Blink pattern should be different from what U-Boot or Linux does.

USB-C and some USB-A 3.0 ports are limited to 2.0 speed

This is due to lack of USB/DP PHY configuration.

USB-C will also need some help from FUSB302 to detect orientation and mux the SuperSpeed lane accordingly.

Some USB 3.0 hubs (like on the OPi 5 Plus) confusingly send SS signals to connected devices even if the host port doesn't, which does not allow them to function properly.

SD card is slow

  • Bus is capped to default speed.
  • DMA is not enabled. The driver does have it implemented, but enabling it makes things even slower for some reason.

Synchronous Exception at 0x00000000E20CDBC4

On my most recent build and on older builds/releases when an USB storage (tried with USB card reader and pendrive) is inserted and an NVME drive is present, after a few seconds, most of the time at 3 seconds left out of 10 it throws 'Synchronous Exception at 0x00000000E20CDBC4' message. Also happens if I press F3 or select Simple Init from boot manager menu.
I can reproduce the issue without an USB storage if I boot to Simple Init and wait 7 seconds.

Logs

Boot without any interrupt when USB inserted
Simple Init from boot manager menu without USB inserted

Non-Storage Devices on PCIe Gen 3.0 Slot

I attached a graphics device to the PCIe 3.0 slot using an M.2 adapter to full size slot with an external PSU for power, and I noticed extreme slowdowns with EFI, to the point where loading an image was impossible. However, the PCI device was recognized in the EFI shell. Any ideas on what's causing this?

SD Card Boot Error with Armbian EFI Image

Hello, after booting into the image once, I get an error that the filesystem cannot be mounted, and then after I try to reboot again into this image on my SD card, I get the following synchronous exception:

conf: no logfs or esp found
conf: loaded uefi://[VenHw(8500EF02-317D-11EC-95B4-F42A7DCB925D) /HD(1,GPT,478B363E-77D5-4641-9B94-A6C419A5A65C,0x2000,0x80000)]/uefi:/[VenHw(8500EF02-317D-11EC-95B4-F42A7DCB925D) /HD(1,GPT,478B363E-77D5-4641-9B94-A6C419A5A65C,0x2000,0x80000)]/ as default config path

Synchronous Exception at 0x00000000E2112F4

Any ideas would be greatly appreciated, or any pointers to any confirmed working Debian'ish images for this would be most useful.

Also, the other error I got was something like this:

Begin: Running /scripts/local-block ... done

For like twenty or so attempts and then the following line:

Gave up waiting for root file system device.

and

ALERT! UUID=9231d7a4-f805-4ec2-93ff-7110f09c6dc3 does not exist. Dropping to a shell!

and it opens an (initramfs) shell.

Any way to pass devicetree name to grub-efi?

I'm working on uefi bootable iso. Now I can boot one with manually set command in grub like devicetree /live/dtb/rockchip/rk3588-rock-5b.dtb. I want to build an iso for all rk3588 boards, which will get devicetree name from efi vars with grub command like efivar_get.

PCIe does not detect switches

The current PCIe driver used in edk2 is quite problematic. PCIe won't even work properly in mainline Linux booted with device tree.

In the example below, four NVMe drives are behind an ASM2824 PCIe switch, which is connected to pcie3x4 controller. But only one NVMe drive works properly in both UEFI and Linux.

However, if we remove PCIe DXE from edk2, PCIe will work prefectly fine in Linux.

dmesg with PCIe DXE:

 rockchip-dw-pcie fe150000.pcie: host bridge /pcie@fe150000 ranges:
 rockchip-dw-pcie fe150000.pcie:       IO 0x00f0100000..0x00f01fffff -> 0x00f0100000
 rockchip-dw-pcie fe150000.pcie:      MEM 0x00f0200000..0x00f0ffffff -> 0x00f0200000
 rockchip-dw-pcie fe150000.pcie:      MEM 0x0900000000..0x093fffffff -> 0x0900000000
 rockchip-dw-pcie fe150000.pcie: iATU: unroll T, 8 ob, 8 ib, align 64K, limit 8G
 rockchip-dw-pcie fe150000.pcie: PCIe Gen.3 x4 link up
 rockchip-dw-pcie fe150000.pcie: PCI host bridge to bus 0000:00
 pci_bus 0000:00: root bus resource [bus 00-0f]
 pci_bus 0000:00: root bus resource [io  0x100000-0x1fffff] (bus address [0xf0100000-0xf01fffff])
 pci_bus 0000:00: root bus resource [mem 0xf0200000-0xf0ffffff]
 pci_bus 0000:00: root bus resource [mem 0x900000000-0x93fffffff pref]
 pci 0000:00:00.0: [1d87:3588] type 01 class 0x060400
 pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x3fffffff]
 pci 0000:00:00.0: reg 0x14: [mem 0x00000000-0x3fffffff]
 pci 0000:00:00.0: reg 0x38: [mem 0x00000000-0x0000ffff pref]
 pci 0000:00:00.0: supports D1 D2
 pci 0000:00:00.0: PME# supported from D0 D1 D3hot
 pci_bus 0000:01: busn_res: can not insert [bus 01-ff] under [bus 00-0f] (conflicts with (null) [bus 00-0f])
 pci 0000:01:00.0: [1b21:2824] type 01 class 0x060400
 pci 0000:01:00.0: enabling Extended Tags
 pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
 pci 0000:01:00.0: 31.504 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x4 link at 0000:00:00.0 (capable of 63.008 Gb/s with 8.0 GT/s PCIe x8 link)
 pci 0000:01:00.0: disabling ASPM on pre-1.1 PCIe device.  You can enable it with 'pcie_aspm=force'
 pci 0000:01:00.0: bridge configuration invalid ([bus ff-ff]), reconfiguring
 pci 0000:02:00.0: [1b21:2824] type 01 class 0x060400
 pci 0000:02:00.0: enabling Extended Tags
 pci 0000:02:04.0: [1b21:2824] type 01 class 0x060400
 pci 0000:02:04.0: enabling Extended Tags
 pci 0000:02:04.0: PME# supported from D0 D3hot D3cold
 pci 0000:02:08.0: [1b21:2824] type 01 class 0x060400
 pci 0000:02:08.0: enabling Extended Tags
 pci 0000:02:0c.0: [1b21:2824] type 01 class 0xffffff
 pci 0000:02:0c.0: enabling Extended Tags
 pci 0000:02:0c.0: PME# supported from D0 D3hot D3cold
 pci 0000:02:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
 pci 0000:02:04.0: bridge configuration invalid ([bus 00-00]), reconfiguring
 pci 0000:02:08.0: bridge configuration invalid ([bus 00-00]), reconfiguring
 pci 0000:02:0c.0: bridge configuration invalid ([bus 00-00]), reconfiguring
 pci 0000:03:00.0: [1e4b:1202] type 00 class 0x010802
 pci 0000:03:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
 pci_bus 0000:03: busn_res: [bus 03-ff] end is updated to 03
 pci 0000:04:00.0: [1e4b:1202] type 00 class 0x010802
 pci 0000:04:00.0: PME# supported from D0 D3hot D3cold
 pci 0000:04:00.0: disabling ASPM on pre-1.1 PCIe device.  You can enable it with 'pcie_aspm=force'
 pci_bus 0000:04: busn_res: [bus 04-ff] end is updated to 04
 pci 0000:05:00.0: [1e4b:1202] type 00 class 0x010802
 pci 0000:05:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
 pci 0000:05:00.0: PME# supported from D0 D3hot D3cold
 pci_bus 0000:05: busn_res: [bus 05-ff] end is updated to 05
 pci_bus 0000:02: busn_res: [bus 02-ff] end is updated to 05
 pci 0000:00:00.0: BAR 0: no space for [mem size 0x40000000]
 pci 0000:00:00.0: BAR 0: failed to assign [mem size 0x40000000]
 pci 0000:00:00.0: BAR 1: no space for [mem size 0x40000000]
 pci 0000:00:00.0: BAR 1: failed to assign [mem size 0x40000000]
 pci 0000:00:00.0: BAR 14: assigned [mem 0xf0200000-0xf03fffff]
 pci 0000:00:00.0: BAR 6: assigned [mem 0xf0400000-0xf040ffff pref]
 pci 0000:01:00.0: BAR 14: assigned [mem 0xf0200000-0xf03fffff]
 pci 0000:02:00.0: BAR 14: assigned [mem 0xf0200000-0xf02fffff]
 pci 0000:02:08.0: BAR 14: assigned [mem 0xf0300000-0xf03fffff]
 pci 0000:03:00.0: BAR 0: assigned [mem 0xf0200000-0xf0203fff 64bit]
 pci 0000:02:00.0: PCI bridge to [bus 03]
 pci 0000:02:00.0:   bridge window [mem 0xf0200000-0xf02fffff]
 pci 0000:02:04.0: PCI bridge to [bus 04]
 pci 0000:05:00.0: BAR 0: assigned [mem 0xf0300000-0xf0303fff 64bit]
 pci 0000:02:08.0: PCI bridge to [bus 05]
 pci 0000:02:08.0:   bridge window [mem 0xf0300000-0xf03fffff]
 pci 0000:01:00.0: PCI bridge to [bus 02-05]
 pci 0000:01:00.0:   bridge window [mem 0xf0200000-0xf03fffff]
 pci 0000:00:00.0: PCI bridge to [bus 01-ff]
 pci 0000:00:00.0:   bridge window [mem 0xf0200000-0xf03fffff]
 pcieport 0000:00:00.0: PME: Signaling with IRQ 87
 pcieport 0000:00:00.0: AER: enabled with IRQ 88
 pcieport 0000:01:00.0: enabling device (0000 -> 0002)
 pcieport 0000:02:00.0: enabling device (0000 -> 0002)
 pcieport 0000:02:00.0: no suspend buffer for LTR; ASPM issues possible after resume
 pcieport 0000:02:04.0: of_irq_parse_pci: failed with rc=134
 pcieport 0000:02:08.0: enabling device (0000 -> 0002)
 pcieport 0000:02:08.0: buffer not found in pci_save_pcie_state
 nvme nvme0: pci function 0000:03:00.0
 nvme nvme0: pci function 0000:05:00.0
 scsi host0: uas
 nvme nvme0: missing or invalid SUBNQN field.
 nvme nvme0: allocated 32 MiB host memory buffer.
 nvme nvme0: 8/0/0 default/read/poll queues
 nvme nvme0: Ignoring bogus Namespace Identifiers
  nvme0n1: p1 p2 p3

[root@sakuramist-nas-3588 ~]# lspci
0000:00:00.0 PCI bridge: Rockchip Electronics Co., Ltd RK3588 (rev 01)
0000:01:00.0 PCI bridge: ASMedia Technology Inc. ASM2824 PCIe Gen3 Packet Switch (rev 01)
0000:02:00.0 PCI bridge: ASMedia Technology Inc. ASM2824 PCIe Gen3 Packet Switch (rev 01)
0000:02:04.0 PCI bridge: ASMedia Technology Inc. ASM2824 PCIe Gen3 Packet Switch (rev 01)
0000:02:08.0 PCI bridge: ASMedia Technology Inc. ASM2824 PCIe Gen3 Packet Switch (rev 01)
0000:02:0c.0 Unassigned class [ffff]: ASMedia Technology Inc. ASM2824 PCIe Gen3 Packet Switch (rev ff)
0000:03:00.0 Non-Volatile memory controller: MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202 (rev 01)
0000:04:00.0 Non-Volatile memory controller: MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202 (rev 01)
0000:05:00.0 Non-Volatile memory controller: MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202 (rev 01)
0004:40:00.0 PCI bridge: Rockchip Electronics Co., Ltd RK3588 (rev 01)
0004:41:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 04)

dmesg without PCIe DXE:

 rockchip-dw-pcie fe150000.pcie: host bridge /pcie@fe150000 ranges:
 rockchip-dw-pcie fe150000.pcie:       IO 0x00f0100000..0x00f01fffff -> 0x00f0100000
 rockchip-dw-pcie fe150000.pcie:      MEM 0x00f0200000..0x00f0ffffff -> 0x00f0200000
 rockchip-dw-pcie fe150000.pcie:      MEM 0x0900000000..0x093fffffff -> 0x0900000000
 rockchip-dw-pcie fe150000.pcie: iATU: unroll T, 8 ob, 8 ib, align 64K, limit 8G
 rockchip-dw-pcie fe150000.pcie: PCIe Gen.3 x4 link up
 rockchip-dw-pcie fe150000.pcie: PCI host bridge to bus 0000:00
 pci_bus 0000:00: root bus resource [bus 00-0f]
 pci_bus 0000:00: root bus resource [io  0x100000-0x1fffff] (bus address [0xf0100000-0xf01fffff])
 pci_bus 0000:00: root bus resource [mem 0xf0200000-0xf0ffffff]
 pci_bus 0000:00: root bus resource [mem 0x900000000-0x93fffffff pref]
 pci 0000:00:00.0: [1d87:3588] type 01 class 0x060400
 pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x3fffffff]
 pci 0000:00:00.0: reg 0x14: [mem 0x00000000-0x3fffffff]
 pci 0000:00:00.0: reg 0x38: [mem 0x00000000-0x0000ffff pref]
 pci 0000:00:00.0: supports D1 D2
 pci 0000:00:00.0: PME# supported from D0 D1 D3hot
 pci_bus 0000:01: busn_res: can not insert [bus 01-ff] under [bus 00-0f] (conflicts with (null) [bus 00-0f])
 pci 0000:01:00.0: [1b21:2824] type 01 class 0x060400
 pci 0000:01:00.0: enabling Extended Tags
 pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
 pci 0000:01:00.0: 31.504 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x4 link at 0000:00:00.0 (capable of 63.008 Gb/s with 8.0 GT/s PCIe x8 link)
 pci 0000:01:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
 pci 0000:02:00.0: [1b21:2824] type 01 class 0x060400
 pci 0000:02:00.0: enabling Extended Tags
 pci 0000:02:00.0: PME# supported from D0 D3hot D3cold
 pci 0000:02:04.0: [1b21:2824] type 01 class 0x060400
 pci 0000:02:04.0: enabling Extended Tags
 pci 0000:02:04.0: PME# supported from D0 D3hot D3cold
 pci 0000:02:08.0: [1b21:2824] type 01 class 0x060400
 pci 0000:02:08.0: enabling Extended Tags
 pci 0000:02:08.0: PME# supported from D0 D3hot D3cold
 pci 0000:02:0c.0: [1b21:2824] type 01 class 0x060400
 pci 0000:02:0c.0: enabling Extended Tags
 pci 0000:02:0c.0: PME# supported from D0 D3hot D3cold
 pci 0000:02:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
 pci 0000:02:04.0: bridge configuration invalid ([bus 00-00]), reconfiguring
 pci 0000:02:08.0: bridge configuration invalid ([bus 00-00]), reconfiguring
 pci 0000:02:0c.0: bridge configuration invalid ([bus 00-00]), reconfiguring
 pci 0000:03:00.0: [1e4b:1202] type 00 class 0x010802
 pci 0000:03:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
 pci 0000:03:00.0: PME# supported from D0 D3hot D3cold
 pci_bus 0000:03: busn_res: [bus 03-ff] end is updated to 03
 pci 0000:04:00.0: [1e4b:1202] type 00 class 0x010802
 pci 0000:04:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
 pci 0000:04:00.0: PME# supported from D0 D3hot D3cold
 pci_bus 0000:04: busn_res: [bus 04-ff] end is updated to 04
 pci 0000:05:00.0: [1e4b:1202] type 00 class 0x010802
 pci 0000:05:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
 pci 0000:05:00.0: PME# supported from D0 D3hot D3cold
 pci_bus 0000:05: busn_res: [bus 05-ff] end is updated to 05
 pci 0000:06:00.0: [1e4b:1202] type 00 class 0x010802
 pci 0000:06:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
 pci 0000:06:00.0: PME# supported from D0 D3hot D3cold
 pci_bus 0000:06: busn_res: [bus 06-ff] end is updated to 06
 pci_bus 0000:02: busn_res: [bus 02-ff] end is updated to 06
 pci 0000:00:00.0: BAR 0: no space for [mem size 0x40000000]
 pci 0000:00:00.0: BAR 0: failed to assign [mem size 0x40000000]
 pci 0000:00:00.0: BAR 1: no space for [mem size 0x40000000]
 pci 0000:00:00.0: BAR 1: failed to assign [mem size 0x40000000]
 pci 0000:00:00.0: BAR 14: assigned [mem 0xf0200000-0xf05fffff]
 pci 0000:00:00.0: BAR 6: assigned [mem 0xf0600000-0xf060ffff pref]
 pci 0000:01:00.0: BAR 14: assigned [mem 0xf0200000-0xf05fffff]
 pci 0000:02:00.0: BAR 14: assigned [mem 0xf0200000-0xf02fffff]
 pci 0000:02:04.0: BAR 14: assigned [mem 0xf0300000-0xf03fffff]
 pci 0000:02:08.0: BAR 14: assigned [mem 0xf0400000-0xf04fffff]
 pci 0000:02:0c.0: BAR 14: assigned [mem 0xf0500000-0xf05fffff]
 pci 0000:03:00.0: BAR 0: assigned [mem 0xf0200000-0xf0203fff 64bit]
 pci 0000:02:00.0: PCI bridge to [bus 03]
 pci 0000:02:00.0:   bridge window [mem 0xf0200000-0xf02fffff]
 pci 0000:04:00.0: BAR 0: assigned [mem 0xf0300000-0xf0303fff 64bit]
 pci 0000:02:04.0: PCI bridge to [bus 04]
 pci 0000:02:04.0:   bridge window [mem 0xf0300000-0xf03fffff]
 pci 0000:05:00.0: BAR 0: assigned [mem 0xf0400000-0xf0403fff 64bit]
 pci 0000:02:08.0: PCI bridge to [bus 05]
 pci 0000:02:08.0:   bridge window [mem 0xf0400000-0xf04fffff]
 pci 0000:06:00.0: BAR 0: assigned [mem 0xf0500000-0xf0503fff 64bit]
 pci 0000:02:0c.0: PCI bridge to [bus 06]
 pci 0000:02:0c.0:   bridge window [mem 0xf0500000-0xf05fffff]
 pci 0000:01:00.0: PCI bridge to [bus 02-06]
 pci 0000:01:00.0:   bridge window [mem 0xf0200000-0xf05fffff]
 pci 0000:00:00.0: PCI bridge to [bus 01-ff]
 pci 0000:00:00.0:   bridge window [mem 0xf0200000-0xf05fffff]
 pcieport 0000:00:00.0: PME: Signaling with IRQ 70
 pcieport 0000:00:00.0: AER: enabled with IRQ 71
 pcieport 0000:01:00.0: enabling device (0000 -> 0002)
 pcieport 0000:02:00.0: enabling device (0000 -> 0002)
 pcieport 0000:02:04.0: enabling device (0000 -> 0002)
 pcieport 0000:02:08.0: enabling device (0000 -> 0002)
 pcieport 0000:02:0c.0: enabling device (0000 -> 0002)
 nvme nvme0: pci function 0000:03:00.0
 nvme 0000:03:00.0: enabling device (0000 -> 0002)
 nvme nvme0: missing or invalid SUBNQN field.
 nvme nvme0: allocated 32 MiB host memory buffer.
 nvme nvme0: 8/0/0 default/read/poll queues
 nvme nvme0: Ignoring bogus Namespace Identifiers
  nvme0n1: p1 p2 p3
 nvme nvme1: pci function 0000:04:00.0
 nvme 0000:04:00.0: enabling device (0000 -> 0002)
 nvme nvme1: missing or invalid SUBNQN field.
 nvme nvme1: allocated 32 MiB host memory buffer.
 nvme nvme1: 8/0/0 default/read/poll queues
 nvme nvme1: Ignoring bogus Namespace Identifiers
  nvme1n1: p1 p2 p3
 nvme nvme2: pci function 0000:05:00.0
 nvme 0000:05:00.0: enabling device (0000 -> 0002)
 nvme nvme2: missing or invalid SUBNQN field.
 nvme nvme2: allocated 32 MiB host memory buffer.
 nvme nvme2: 8/0/0 default/read/poll queues
 nvme nvme2: Ignoring bogus Namespace Identifiers
  nvme2n1: p1 p2 p3
 nvme nvme3: pci function 0000:06:00.0
 nvme 0000:06:00.0: enabling device (0000 -> 0002)
 nvme nvme3: missing or invalid SUBNQN field.
 nvme nvme3: allocated 32 MiB host memory buffer.
 nvme nvme3: 8/0/0 default/read/poll queues
 nvme nvme3: Ignoring bogus Namespace Identifiers
  nvme3n1: p1 p2 p3

[root@sakuramist-nas-3588 ~]# lspci
0000:00:00.0 PCI bridge: Rockchip Electronics Co., Ltd RK3588 (rev 01)
0000:01:00.0 PCI bridge: ASMedia Technology Inc. ASM2824 PCIe Gen3 Packet Switch (rev 01)
0000:02:00.0 PCI bridge: ASMedia Technology Inc. ASM2824 PCIe Gen3 Packet Switch (rev 01)
0000:02:04.0 PCI bridge: ASMedia Technology Inc. ASM2824 PCIe Gen3 Packet Switch (rev 01)
0000:02:08.0 PCI bridge: ASMedia Technology Inc. ASM2824 PCIe Gen3 Packet Switch (rev 01)
0000:02:0c.0 PCI bridge: ASMedia Technology Inc. ASM2824 PCIe Gen3 Packet Switch (rev 01)
0000:03:00.0 Non-Volatile memory controller: MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202 (rev 01)
0000:04:00.0 Non-Volatile memory controller: MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202 (rev 01)
0000:05:00.0 Non-Volatile memory controller: MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202 (rev 01)
0000:06:00.0 Non-Volatile memory controller: MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202 (rev 01)
0004:40:00.0 PCI bridge: Rockchip Electronics Co., Ltd RK3588 (rev 01)
0004:41:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 04)

[root@sakuramist-nas-3588 ~]# uname -a
Linux sakuramist-nas-3588 6.3.0-rc7-next-20230421-NAS+ #6 SMP PREEMPT Tue Apr 25 17:00:30 CST 2023 aarch64 GNU/Linux

No support for PCIe switches when booted with ACPI

Need to investigate and see what workarounds are available in each OS.

At quick glance, Linux does have custom ECAM accessors for Synquacer and Armada. Can this bind to ACPI somehow?

Windows overall support is still a big question mark due to other unknown issues, but it is actually possible to expose both the root port and full config space via separate MCFG entries on the same segment, with "NXPMX6" set as OEMID for FADT. The only drawback seems to be that this forces BAR space allocations to happen in the 32-bit MMIO window, which is much smaller.

DisplayPort output support

Note that support for eDP muxed with HDMI seems to be already there, it (should) just need to be configured accordingly and a passive cable/adapter to be utilized (or an eDP display..).

This issue is about the DP output(s) muxed with USB 3.0, available on USB-C or a classic DP connector (like on the R58-Mini).

No USB 2.0 / 1.1 support in ACPI

It was hidden from ACPI as Windows would otherwise bugcheck, so it should still be disabled by default but configurable in settings.

The port descriptions might also need to be customized for each platform.

WinPE (ramdisk) is not able to boot from eMMC

The progress bar hangs right at the end.
It does boot regular Windows installations (and anything else) just fine.

This is not a regression. The old driver caused it to fail much earlier with a BCD error.

only see 7.8G ram on 16G ram variant.

free outputs

               total        used        free      shared  buff/cache   available
Mem:         7861584      170156     7503528        9664      187900     7466300
Swap:              0           0           0

with uboot, free output

               total        used        free      shared  buff/cache   available
Mem:        16104576     8322160     2042348       18720     5740068     7603336
Swap:              0           0           0

Pass a device tree to the OS

I'm not really sure what device trees to even pick, given that RK3588 is not fully mainlined in Linux yet (supported devices even less so).

Maybe the ones from Armbian for the legacy kernel would be good enough for the time being?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.