From ef617b0573791c1b8f0f6ac408536747185f1735 Mon Sep 17 00:00:00 2001 From: amazingfate Date: Sun, 21 Apr 2024 09:06:35 +0800 Subject: [PATCH] Add support for rock-5-itx --- .github/workflows/build.yml | 1 + configs/rock-5-itx.conf | 3 + .../Rockchip/DeviceTree/rk3588-rock-5-itx.dtb | Bin 0 -> 272046 bytes .../Radxa/ROCK5ITX/AcpiTables/AcpiTables.inf | 55 +++ .../Radxa/ROCK5ITX/AcpiTables/Dsdt.asl | 52 +++ .../RockchipPlatformLib/RockchipPlatformLib.c | 388 ++++++++++++++++++ .../RockchipPlatformLib.inf | 35 ++ .../Radxa/ROCK5ITX/ROCK5ITX.Modules.fdf.inc | 18 + .../Platform/Radxa/ROCK5ITX/ROCK5ITX.dsc | 126 ++++++ 9 files changed, 678 insertions(+) create mode 100644 configs/rock-5-itx.conf create mode 100755 edk2-rockchip-non-osi/Platform/Rockchip/DeviceTree/rk3588-rock-5-itx.dtb create mode 100644 edk2-rockchip/Platform/Radxa/ROCK5ITX/AcpiTables/AcpiTables.inf create mode 100755 edk2-rockchip/Platform/Radxa/ROCK5ITX/AcpiTables/Dsdt.asl create mode 100644 edk2-rockchip/Platform/Radxa/ROCK5ITX/Library/RockchipPlatformLib/RockchipPlatformLib.c create mode 100644 edk2-rockchip/Platform/Radxa/ROCK5ITX/Library/RockchipPlatformLib/RockchipPlatformLib.inf create mode 100644 edk2-rockchip/Platform/Radxa/ROCK5ITX/ROCK5ITX.Modules.fdf.inc create mode 100644 edk2-rockchip/Platform/Radxa/ROCK5ITX/ROCK5ITX.dsc diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b456b6ba7..aa7dfdb3a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,6 +25,7 @@ jobs: PLATFORM: - rock-5b - rock-5a + - rock-5-itx - orangepi-5 - orangepi-5plus - indiedroid-nova diff --git a/configs/rock-5-itx.conf b/configs/rock-5-itx.conf new file mode 100644 index 000000000..56dbf4e18 --- /dev/null +++ b/configs/rock-5-itx.conf @@ -0,0 +1,3 @@ +DSC_FILE=edk2-rockchip/Platform/Radxa/ROCK5ITX/ROCK5ITX.dsc +PLATFORM_NAME=ROCK5ITX +SOC=RK3588 diff --git a/edk2-rockchip-non-osi/Platform/Rockchip/DeviceTree/rk3588-rock-5-itx.dtb b/edk2-rockchip-non-osi/Platform/Rockchip/DeviceTree/rk3588-rock-5-itx.dtb new file mode 100755 index 0000000000000000000000000000000000000000..170b261b203cda5610edc4dc182095c0a7df5dbf GIT binary patch literal 272046 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 literal 0 HcmV?d00001 diff --git a/edk2-rockchip/Platform/Radxa/ROCK5ITX/AcpiTables/AcpiTables.inf b/edk2-rockchip/Platform/Radxa/ROCK5ITX/AcpiTables/AcpiTables.inf new file mode 100644 index 000000000..1cfeaf165 --- /dev/null +++ b/edk2-rockchip/Platform/Radxa/ROCK5ITX/AcpiTables/AcpiTables.inf @@ -0,0 +1,55 @@ +#/** @file +# +# ACPI table data and ASL sources required to boot the platform. +# +# Copyright (c) 2019-2021, ARM Limited. All rights reserved. +# Copyright (c) Microsoft Corporation. All rights reserved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +#**/ + +[Defines] + INF_VERSION = 0x0001001A + BASE_NAME = AcpiTables + FILE_GUID = 7E374E25-8E01-4FEE-87F2-390C23C606CD + MODULE_TYPE = USER_DEFINED + VERSION_STRING = 1.0 + RK_COMMON_ACPI_DIR = Silicon/Rockchip/RK3588/AcpiTables + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = AARCH64 +# + +[Sources] + Dsdt.asl + $(RK_COMMON_ACPI_DIR)/Madt.aslc + $(RK_COMMON_ACPI_DIR)/Fadt.aslc + $(RK_COMMON_ACPI_DIR)/Gtdt.aslc + $(RK_COMMON_ACPI_DIR)/Spcr.aslc + $(RK_COMMON_ACPI_DIR)/Mcfg.aslc + $(RK_COMMON_ACPI_DIR)/Dbg2.aslc + $(RK_COMMON_ACPI_DIR)/Pptt.aslc + +[Packages] + ArmPkg/ArmPkg.dec + ArmPlatformPkg/ArmPlatformPkg.dec + EmbeddedPkg/EmbeddedPkg.dec + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + Silicon/Rockchip/RockchipPkg.dec + Silicon/Rockchip/RK3588/RK3588.dec + +[FixedPcd] + gArmTokenSpaceGuid.PcdArmArchTimerIntrNum + gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum + gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum + gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum + gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase + gArmTokenSpaceGuid.PcdGicDistributorBase + gArmTokenSpaceGuid.PcdGicRedistributorsBase + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase + gRK3588TokenSpaceGuid.PcdI2S0Supported + gRK3588TokenSpaceGuid.PcdI2S1Supported diff --git a/edk2-rockchip/Platform/Radxa/ROCK5ITX/AcpiTables/Dsdt.asl b/edk2-rockchip/Platform/Radxa/ROCK5ITX/AcpiTables/Dsdt.asl new file mode 100755 index 000000000..340c3c8fc --- /dev/null +++ b/edk2-rockchip/Platform/Radxa/ROCK5ITX/AcpiTables/Dsdt.asl @@ -0,0 +1,52 @@ +/** @file + * + * Differentiated System Definition Table (DSDT) + * + * Copyright (c) 2020, Pete Batard + * Copyright (c) 2018-2020, Andrey Warkentin + * Copyright (c) Microsoft Corporation. All rights reserved. + * Copyright (c) 2021, ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-2-Clause-Patent + * + **/ + +#include "AcpiTables.h" + +#define BOARD_I2S0_TPLG "i2s-jack" + +#define BOARD_AUDIO_CODEC_HID "ESSX8316" +#define BOARD_CODEC_I2C "\\_SB.I2C7" +#define BOARD_CODEC_I2C_ADDR 0x11 +#define BOARD_CODEC_GPIO "\\_SB.GPI1" +#define BOARD_CODEC_GPIO_PIN GPIO_PIN_PD5 + +DefinitionBlock ("Dsdt.aml", "DSDT", 2, "RKCP ", "RK3588 ", 2) +{ + Scope (\_SB_) + { + include ("Cpu.asl") + + include ("Pcie.asl") + include ("Sata.asl") + include ("Emmc.asl") + include ("Sdhc.asl") + include ("Dma.asl") + // include ("Gmac.asl") + include ("Gpio.asl") + include ("I2c.asl") + include ("Uart.asl") + // include ("Spi.asl") + + include ("I2s.asl") + + include ("Usb2Host.asl") + include ("Usb3Host0.asl") + include ("Usb3Host1.asl") + include ("Usb3Host2.asl") + + Scope (I2C7) { + include ("Es8388.asl") + } + } +} diff --git a/edk2-rockchip/Platform/Radxa/ROCK5ITX/Library/RockchipPlatformLib/RockchipPlatformLib.c b/edk2-rockchip/Platform/Radxa/ROCK5ITX/Library/RockchipPlatformLib/RockchipPlatformLib.c new file mode 100644 index 000000000..53941d42b --- /dev/null +++ b/edk2-rockchip/Platform/Radxa/ROCK5ITX/Library/RockchipPlatformLib/RockchipPlatformLib.c @@ -0,0 +1,388 @@ +/** @file +* +* Copyright (c) 2021, Rockchip Limited. All rights reserved. +* +* SPDX-License-Identifier: BSD-2-Clause-Patent +* +**/ +#include +#include +#include +#include +#include +#include +#include +#include + +static struct regulator_init_data rk806_init_data[] = { + /* Master PMIC */ + RK8XX_VOLTAGE_INIT(MASTER_BUCK1, 750000), + RK8XX_VOLTAGE_INIT(MASTER_BUCK3, 750000), + RK8XX_VOLTAGE_INIT(MASTER_BUCK4, 750000), + RK8XX_VOLTAGE_INIT(MASTER_BUCK5, 850000), + //RK8XX_VOLTAGE_INIT(MASTER_BUCK6, 750000), + RK8XX_VOLTAGE_INIT(MASTER_BUCK7, 2000000), + RK8XX_VOLTAGE_INIT(MASTER_BUCK8, 3300000), + RK8XX_VOLTAGE_INIT(MASTER_BUCK10, 1800000), + + RK8XX_VOLTAGE_INIT(MASTER_NLDO1, 750000), + RK8XX_VOLTAGE_INIT(MASTER_NLDO2, 850000), + RK8XX_VOLTAGE_INIT(MASTER_NLDO3, 750000), + RK8XX_VOLTAGE_INIT(MASTER_NLDO4, 850000), + RK8XX_VOLTAGE_INIT(MASTER_NLDO5, 750000), + + RK8XX_VOLTAGE_INIT(MASTER_PLDO1, 1800000), + RK8XX_VOLTAGE_INIT(MASTER_PLDO2, 1800000), + RK8XX_VOLTAGE_INIT(MASTER_PLDO3, 1200000), + RK8XX_VOLTAGE_INIT(MASTER_PLDO4, 3300000), + RK8XX_VOLTAGE_INIT(MASTER_PLDO5, 3300000), + RK8XX_VOLTAGE_INIT(MASTER_PLDO6, 1800000), + + /* No dual PMICs on this platform */ +}; + +VOID +EFIAPI +SdmmcIoMux ( + VOID + ) +{ + /* sdmmc0 iomux (microSD socket) */ + BUS_IOC->GPIO4D_IOMUX_SEL_L = (0xFFFFUL << 16) | (0x1111); //SDMMC_D0,SDMMC_D1,SDMMC_D2,SDMMC_D3 + BUS_IOC->GPIO4D_IOMUX_SEL_H = (0x00FFUL << 16) | (0x0011); //SDMMC_CLK,SDMMC_CMD + PMU1_IOC->GPIO0A_IOMUX_SEL_H = (0x000FUL << 16) | (0x0001); //SDMMC_DET +} + +VOID +EFIAPI +SdhciEmmcIoMux ( + VOID + ) +{ + /* sdhci0 iomux (eMMC socket) */ + BUS_IOC->GPIO2A_IOMUX_SEL_L = (0xFFFFUL << 16) | (0x1111); //EMMC_CMD,EMMC_CLKOUT,EMMC_DATASTROBE,EMMC_RSTN + BUS_IOC->GPIO2D_IOMUX_SEL_L = (0xFFFFUL << 16) | (0x1111); //EMMC_D0,EMMC_D1,EMMC_D2,EMMC_D3 + BUS_IOC->GPIO2D_IOMUX_SEL_H = (0xFFFFUL << 16) | (0x1111); //EMMC_D4,EMMC_D5,EMMC_D6,EMMC_D7 +} + +#define NS_CRU_BASE 0xFD7C0000 +#define CRU_CLKSEL_CON59 0x03EC +#define CRU_CLKSEL_CON78 0x0438 + +VOID +EFIAPI +Rk806SpiIomux ( + VOID + ) +{ + /* io mux */ + //BUS_IOC->GPIO1A_IOMUX_SEL_H = (0xFFFFUL << 16) | 0x8888; + //BUS_IOC->GPIO1B_IOMUX_SEL_L = (0x000FUL << 16) | 0x0008; + PMU1_IOC->GPIO0A_IOMUX_SEL_H = (0x0FF0UL << 16) | 0x0110; + PMU1_IOC->GPIO0B_IOMUX_SEL_L = (0xF0FFUL << 16) | 0x1011; + MmioWrite32(NS_CRU_BASE + CRU_CLKSEL_CON59, (0x00C0UL << 16) | 0x0080); +} + +VOID +EFIAPI +Rk806Configure ( + VOID + ) +{ + UINTN RegCfgIndex; + + RK806Init(); + + for (RegCfgIndex = 0; RegCfgIndex < ARRAY_SIZE(rk806_init_data); RegCfgIndex++) + RK806RegulatorInit(rk806_init_data[RegCfgIndex]); +} + +VOID +EFIAPI +SetCPULittleVoltage ( + IN UINT32 Microvolts + ) +{ + struct regulator_init_data Rk806CpuLittleSupply = + RK8XX_VOLTAGE_INIT(MASTER_BUCK2, Microvolts); + + RK806RegulatorInit(Rk806CpuLittleSupply); +} + +VOID +EFIAPI +NorFspiIomux ( + VOID + ) +{ + /* io mux */ + MmioWrite32(NS_CRU_BASE + CRU_CLKSEL_CON78, + (((0x3 << 12) | (0x3f << 6)) << 16) | (0x0 << 12) | (0x3f << 6)); +#define FSPI_M1 +#if defined(FSPI_M0) + /*FSPI M0*/ + BUS_IOC->GPIO2A_IOMUX_SEL_L = ((0xF << 0) << 16) | (2 << 0); //FSPI_CLK_M0 + BUS_IOC->GPIO2D_IOMUX_SEL_L = (0xFFFFUL << 16) | (0x2222); //FSPI_D0_M0,FSPI_D1_M0,FSPI_D2_M0,FSPI_D3_M0 + BUS_IOC->GPIO2D_IOMUX_SEL_H = ((0xF << 8) << 16) | (0x2 << 8); //FSPI_CS0N_M0 +#elif defined(FSPI_M1) + /*FSPI M1*/ + BUS_IOC->GPIO2A_IOMUX_SEL_H = (0xFF00UL << 16) | (0x3300); //FSPI_D0_M1,FSPI_D1_M1 + BUS_IOC->GPIO2B_IOMUX_SEL_L = (0xF0FFUL << 16) | (0x3033); //FSPI_D2_M1,FSPI_D3_M1,FSPI_CLK_M1 + BUS_IOC->GPIO2B_IOMUX_SEL_H = (0xF << 16) | (0x3); //FSPI_CS0N_M1 +#else + /*FSPI M2*/ + BUS_IOC->GPIO3A_IOMUX_SEL_L = (0xFFFFUL << 16) | (0x5555); //[FSPI_D0_M2-FSPI_D3_M2] + BUS_IOC->GPIO3A_IOMUX_SEL_H = (0xF0UL << 16) | (0x50); //FSPI_CLK_M2 + BUS_IOC->GPIO3C_IOMUX_SEL_H = (0xF << 16) | (0x2); //FSPI_CS0_M2 +#endif +} + +VOID +EFIAPI +GmacIomux ( + IN UINT32 Id + ) +{ + /* No GMAC here */ +} + +VOID +EFIAPI +NorFspiEnableClock ( + UINT32 *CruBase + ) +{ + UINTN BaseAddr = (UINTN) CruBase; + + MmioWrite32(BaseAddr + 0x087C, 0x0E000000); +} + +VOID +EFIAPI +I2cIomux ( + UINT32 id + ) +{ + switch (id) { + case 0: + GpioPinSetFunction(0, GPIO_PIN_PD1, 3); //i2c0_scl_m2 + GpioPinSetFunction(0, GPIO_PIN_PD2, 3); //i2c0_sda_m2 + break; + case 1: + GpioPinSetFunction(0, GPIO_PIN_PD4, 9); //i2c1_scl_m2 + GpioPinSetFunction(0, GPIO_PIN_PD5, 9); //i2c1_sda_m2 + break; + case 2: + break; + case 3: + break; + case 4: + GpioPinSetFunction(2, GPIO_PIN_PB5, 9); //i2c4_scl_m1 + GpioPinSetFunction(2, GPIO_PIN_PB4, 9); //i2c4_sda_m1 + break; + case 5: + break; + case 6: + GpioPinSetFunction(0, GPIO_PIN_PD0, 9); //i2c6_scl_m0 + GpioPinSetFunction(0, GPIO_PIN_PC7, 9); //i2c6_sda_m0 + break; + case 7: + GpioPinSetFunction(1, GPIO_PIN_PD0, 9); //i2c7_scl_m0 + GpioPinSetFunction(1, GPIO_PIN_PD1, 9); //i2c7_sda_m0 + break; + default: + break; + } +} + +VOID +EFIAPI +UsbPortPowerEnable ( + VOID + ) +{ + DEBUG((DEBUG_INFO, "UsbPortPowerEnable called\n")); + /* Set GPIO4 PB0 (USB_HOST_PWREN) output high to power USB ports */ + GpioPinWrite (3, GPIO_PIN_PB7, TRUE); + GpioPinSetDirection (3, GPIO_PIN_PB7, GPIO_PIN_OUTPUT); + + // DEBUG((DEBUG_INFO, "Trying to enable blue led\n")); + // GpioPinWrite (0, GPIO_PIN_PB7, TRUE); + // GpioPinSetDirection (0, GPIO_PIN_PB7, GPIO_PIN_OUTPUT); +} + +VOID +EFIAPI +Usb2PhyResume ( + VOID + ) +{ + MmioWrite32(0xfd5d0008, 0x20000000); + MmioWrite32(0xfd5d4008, 0x20000000); + MmioWrite32(0xfd5d8008, 0x20000000); + MmioWrite32(0xfd5dc008, 0x20000000); + MmioWrite32(0xfd7f0a10, 0x07000700); + MmioWrite32(0xfd7f0a10, 0x07000000); +} + +VOID +EFIAPI +PcieIoInit ( + UINT32 Segment + ) +{ + /* Set reset and power IO to gpio output mode */ + switch(Segment) { + case PCIE_SEGMENT_PCIE30X4: + GpioPinSetDirection (4, GPIO_PIN_PB6, GPIO_PIN_OUTPUT); + GpioPinSetDirection (1, GPIO_PIN_PA4, GPIO_PIN_OUTPUT); + // PciePinmuxInit(Segment, 1); + break; + case PCIE_SEGMENT_PCIE20L0: + GpioPinSetDirection (4, GPIO_PIN_PA5, GPIO_PIN_OUTPUT); + GpioPinSetDirection (1, GPIO_PIN_PD2, GPIO_PIN_OUTPUT); + // PciePinmuxInit(Segment, 1); // PCIE30x1_0_{CLKREQN,WAKEN,PERSTN}_M1 + break; + case PCIE_SEGMENT_PCIE20L1: + GpioPinSetDirection (4, GPIO_PIN_PA2, GPIO_PIN_OUTPUT); + GpioPinSetDirection (1, GPIO_PIN_PD2, GPIO_PIN_OUTPUT); + break; + case PCIE_SEGMENT_PCIE20L2: + GpioPinSetDirection (3, GPIO_PIN_PB0, GPIO_PIN_OUTPUT); + // PciePinmuxInit(Segment, 0); // PCIE20x1_2_{CLKREQN,WAKEN,PERSTN}_M0 + break; + default: + break; + } +} + +VOID +EFIAPI +PciePowerEn ( + UINT32 Segment, + BOOLEAN Enable + ) +{ + /* output high to enable power */ + + switch(Segment) { + case PCIE_SEGMENT_PCIE30X4: + GpioPinWrite (1, GPIO_PIN_PA4, Enable); + break; + case PCIE_SEGMENT_PCIE20L0: + GpioPinWrite (1, GPIO_PIN_PD2, Enable); + break; + case PCIE_SEGMENT_PCIE20L1: + GpioPinWrite (1, GPIO_PIN_PD2, Enable); + break; + case PCIE_SEGMENT_PCIE20L2: + break; + default: + break; + } +} + +VOID +EFIAPI +PciePeReset ( + UINT32 Segment, + BOOLEAN Enable + ) +{ + switch(Segment) { + case PCIE_SEGMENT_PCIE30X4: + GpioPinWrite (4, GPIO_PIN_PB6, !Enable); + break; + case PCIE_SEGMENT_PCIE20L0: // m.2 a+e key + GpioPinWrite (4, GPIO_PIN_PA5, !Enable); + break; + case PCIE_SEGMENT_PCIE20L1: + GpioPinWrite (4, GPIO_PIN_PA2, !Enable); + break; + case PCIE_SEGMENT_PCIE20L2: // rtl8125b + GpioPinWrite (3, GPIO_PIN_PB0, !Enable); + break; + default: + break; + } +} + +PWM_DATA pwm_data = { + .ControllerID = PWM_CONTROLLER0, + .ChannelID = PWM_CHANNEL1, + .PeriodNs = 4000000, + .DutyNs = 4000000, + .Polarity = FALSE, +}; // PWM0_CH1 + +VOID +EFIAPI +PwmFanIoSetup ( + VOID + ) +{ + GpioPinSetFunction (4, GPIO_PIN_PB2, 0xb); // PWM14_M1 + RkPwmSetConfig (&pwm_data); + RkPwmEnable (&pwm_data); +} + +VOID +EFIAPI +PwmFanSetSpeed ( + IN UINT32 Percentage + ) +{ + pwm_data.DutyNs = pwm_data.PeriodNs * Percentage / 100; + RkPwmSetConfig (&pwm_data); +} + +VOID +EFIAPI +PlatformInitLeds ( + VOID + ) +{ + /* Status indicator */ + GpioPinWrite (0, GPIO_PIN_PC0, FALSE); + GpioPinSetDirection (0, GPIO_PIN_PC0, GPIO_PIN_OUTPUT); +} + +VOID +EFIAPI +PlatformSetStatusLed ( + IN BOOLEAN Enable + ) +{ + GpioPinWrite (0, GPIO_PIN_PC0, Enable); +} + +VOID +EFIAPI +PlatformPcieWiFiEnable ( + IN BOOLEAN Enable + ) +{ + // WiFi - enable + GpioPinWrite (0, GPIO_PIN_PC4, Enable); + GpioPinSetDirection (0, GPIO_PIN_PC4, GPIO_PIN_OUTPUT); + GpioPinWrite (4, GPIO_PIN_PA0, Enable); + GpioPinSetDirection (4, GPIO_PIN_PA0, GPIO_PIN_OUTPUT); + + // bluetooth - enable + GpioPinWrite (4, GPIO_PIN_PC5, Enable); + GpioPinSetDirection (4, GPIO_PIN_PC5, GPIO_PIN_OUTPUT); + GpioPinWrite (2, GPIO_PIN_PC5, Enable); + GpioPinSetDirection (2, GPIO_PIN_PC5, GPIO_PIN_OUTPUT); + +} + +VOID +EFIAPI +PlatformEarlyInit ( + VOID + ) +{ + // Configure various things specific to this platform + PlatformPcieWiFiEnable(TRUE); + GpioPinSetFunction(1, GPIO_PIN_PD5, 0); //jdet +} diff --git a/edk2-rockchip/Platform/Radxa/ROCK5ITX/Library/RockchipPlatformLib/RockchipPlatformLib.inf b/edk2-rockchip/Platform/Radxa/ROCK5ITX/Library/RockchipPlatformLib/RockchipPlatformLib.inf new file mode 100644 index 000000000..b0ca9550e --- /dev/null +++ b/edk2-rockchip/Platform/Radxa/ROCK5ITX/Library/RockchipPlatformLib/RockchipPlatformLib.inf @@ -0,0 +1,35 @@ +# +# Copyright (c) 2021, Rockchip Limited. All rights reserved. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +[Defines] + INF_VERSION = 0x00010019 + BASE_NAME = RockchipPlatformLib + FILE_GUID = 5178fa86-2fec-11ec-95b4-f42a7dcb925d + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = RockchipPlatformLib + RKPLATLIB_COMMON_DIR = Silicon/Rockchip/RK3588/Library/RockchipPlatformLibCommon + +[Packages] + EmbeddedPkg/EmbeddedPkg.dec + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + Silicon/Rockchip/RK3588/RK3588.dec + Silicon/Rockchip/RockchipPkg.dec + +[LibraryClasses] + ArmLib + HobLib + IoLib + MemoryAllocationLib + SerialPortLib + CruLib + GpioLib + PWMLib + +[Sources.common] + RockchipPlatformLib.c + $(RKPLATLIB_COMMON_DIR)/RK3588CruLib.c diff --git a/edk2-rockchip/Platform/Radxa/ROCK5ITX/ROCK5ITX.Modules.fdf.inc b/edk2-rockchip/Platform/Radxa/ROCK5ITX/ROCK5ITX.Modules.fdf.inc new file mode 100644 index 000000000..9182ecbeb --- /dev/null +++ b/edk2-rockchip/Platform/Radxa/ROCK5ITX/ROCK5ITX.Modules.fdf.inc @@ -0,0 +1,18 @@ +## @file +# +# Copyright (c) 2023, Mario Bălănică +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + + # ACPI Support + INF RuleOverride = ACPITABLE $(PLATFORM_DIRECTORY)/AcpiTables/AcpiTables.inf + + # Device Tree Support + FILE FREEFORM = gDtPlatformDefaultDtbFileGuid { + SECTION RAW = Platform/Rockchip/DeviceTree/rk3588-rock-5b.dtb + } + + # Splash screen logo + INF $(VENDOR_DIRECTORY)/Drivers/LogoDxe/LogoDxe.inf diff --git a/edk2-rockchip/Platform/Radxa/ROCK5ITX/ROCK5ITX.dsc b/edk2-rockchip/Platform/Radxa/ROCK5ITX/ROCK5ITX.dsc new file mode 100644 index 000000000..8e4df6cc1 --- /dev/null +++ b/edk2-rockchip/Platform/Radxa/ROCK5ITX/ROCK5ITX.dsc @@ -0,0 +1,126 @@ +## @file +# +# Copyright (c) 2014-2018, Linaro Limited. All rights reserved. +# Copyright (c) 2022, Xilin Wu +# Copyright (c) 2023, Mario Bălănică +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +################################################################################ +# +# Defines Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines] + PLATFORM_NAME = ROCK5ITX + PLATFORM_VENDOR = Radxa + PLATFORM_GUID = cb957236-be75-4077-aa31-0c3eae75c09c + PLATFORM_VERSION = 0.2 + DSC_SPECIFICATION = 0x00010019 + OUTPUT_DIRECTORY = Build/$(PLATFORM_NAME) + VENDOR_DIRECTORY = Platform/$(PLATFORM_VENDOR) + PLATFORM_DIRECTORY = $(VENDOR_DIRECTORY)/$(PLATFORM_NAME) + SUPPORTED_ARCHITECTURES = AARCH64 + BUILD_TARGETS = DEBUG|RELEASE + SKUID_IDENTIFIER = DEFAULT + FLASH_DEFINITION = Silicon/Rockchip/RK3588/RK3588.fdf + RK_PLATFORM_FVMAIN_MODULES = $(PLATFORM_DIRECTORY)/$(PLATFORM_NAME).Modules.fdf.inc + + # + # HYM8563 RTC support + # I2C location configured by PCDs below. + # + DEFINE RK_RTC8563_ENABLE = TRUE + + # + # RK3588-based platform + # +!include Silicon/Rockchip/RK3588/RK3588Platform.dsc.inc + +################################################################################ +# +# Library Class section - list of all Library Classes needed by this Platform. +# +################################################################################ + +[LibraryClasses.common] + RockchipPlatformLib|$(PLATFORM_DIRECTORY)/Library/RockchipPlatformLib/RockchipPlatformLib.inf + +################################################################################ +# +# Pcd Section - list of all EDK II PCD Entries defined by this Platform. +# +################################################################################ + +[PcdsFixedAtBuild.common] + # SMBIOS platform config + gRockchipTokenSpaceGuid.PcdPlatformName|"ROCK 5 ITX" + gRockchipTokenSpaceGuid.PcdPlatformVendorName|"Radxa" + gRockchipTokenSpaceGuid.PcdFamilyName|"ROCK 5" + gRockchipTokenSpaceGuid.PcdProductUrl|"https://docs.radxa.com/rock5/rock5itx" + gRockchipTokenSpaceGuid.PcdDeviceTreeName|"rk3588-rock-5-itx" + + # I2C + gRockchipTokenSpaceGuid.PcdI2cSlaveAddresses|{ 0x42, 0x43, 0x51, 0x11 ,0x22} + gRockchipTokenSpaceGuid.PcdI2cSlaveBuses|{ 0x0, 0x0, 0x6, 0x7 } + gRockchipTokenSpaceGuid.PcdI2cSlaveBusesRuntimeSupport|{ FALSE, FALSE, TRUE, FALSE } + gRockchipTokenSpaceGuid.PcdRk860xRegulatorAddresses|{ 0x42, 0x43 } + gRockchipTokenSpaceGuid.PcdRk860xRegulatorBuses|{ 0x0, 0x0 } + gRockchipTokenSpaceGuid.PcdRk860xRegulatorTags|{ $(SCMI_CLK_CPUB01), $(SCMI_CLK_CPUB23) } + gPcf8563RealTimeClockLibTokenSpaceGuid.PcdI2cSlaveAddress|0x51 + gRockchipTokenSpaceGuid.PcdRtc8563Bus|0x6 + + # + # HDMI1 Display + # + gRockchipTokenSpaceGuid.PcdHdmiId|0x00000001 #hdmi1 + + # + # CPU Performance default values + # + gRK3588TokenSpaceGuid.PcdCPULClusterClockPresetDefault|$(CPU_PERF_CLUSTER_CLOCK_PRESET_BOOTDEFAULT) + gRK3588TokenSpaceGuid.PcdCPUB01ClusterClockPresetDefault|$(CPU_PERF_CLUSTER_CLOCK_PRESET_BOOTDEFAULT) + gRK3588TokenSpaceGuid.PcdCPUB23ClusterClockPresetDefault|$(CPU_PERF_CLUSTER_CLOCK_PRESET_BOOTDEFAULT) + + # + # PCIe/SATA/USB Combo PIPE PHY support flags and default values + # + gRK3588TokenSpaceGuid.PcdComboPhy0Switchable|FALSE + gRK3588TokenSpaceGuid.PcdComboPhy1Switchable|FALSE + gRK3588TokenSpaceGuid.PcdComboPhy2Switchable|FALSE + gRK3588TokenSpaceGuid.PcdComboPhy0ModeDefault|$(COMBO_PHY_MODE_PCIE) + gRK3588TokenSpaceGuid.PcdComboPhy1ModeDefault|$(COMBO_PHY_MODE_PCIE) + gRK3588TokenSpaceGuid.PcdComboPhy2ModeDefault|$(COMBO_PHY_MODE_PCIE) + + # + # USB/DP Combo PHY support flags and default values + # + gRK3588TokenSpaceGuid.PcdUsbDpPhy0Supported|TRUE + gRK3588TokenSpaceGuid.PcdUsbDpPhy1Supported|TRUE + gRK3588TokenSpaceGuid.PcdDp0LaneMux|{ 0x2, 0x3 } + gRK3588TokenSpaceGuid.PcdDp1LaneMux|{ 0x0 } + + # + # I2S + # + gRK3588TokenSpaceGuid.PcdI2S0Supported|TRUE + + # + # On-Board fan output + # + gRK3588TokenSpaceGuid.PcdHasOnBoardFanOutput|TRUE + + +################################################################################ +# +# Components Section - list of all EDK II Modules needed by this Platform. +# +################################################################################ +[Components.common] + # ACPI Support + $(PLATFORM_DIRECTORY)/AcpiTables/AcpiTables.inf + + # Splash screen logo + $(VENDOR_DIRECTORY)/Drivers/LogoDxe/LogoDxe.inf