From e1f689699d11904199935f7b9b080f6eb9d14809 Mon Sep 17 00:00:00 2001 From: Joshua Navarro Date: Thu, 4 Jul 2024 14:04:24 -0400 Subject: [PATCH] CM3588-nas support Co-Authored-By: Joshua Navarro --- .github/workflows/build.yml | 1 + README.md | 1 + configs/nanopc-cm3588-nas.conf | 3 + .../DeviceTree/rk3588-nanopc-cm3588-nas.dtb | Bin 0 -> 274453 bytes .../AcpiTables/AcpiTables.inf | 58 +++ .../NanoPC-CM3588-NAS/AcpiTables/Dsdt.asl | 44 ++ .../RockchipPlatformLib/RockchipPlatformLib.c | 376 ++++++++++++++++++ .../RockchipPlatformLib.inf | 35 ++ .../NanoPC-CM3588-NAS.Modules.fdf.inc | 18 + .../NanoPC-CM3588-NAS/NanoPC-CM3588-NAS.dsc | 117 ++++++ 10 files changed, 653 insertions(+) create mode 100644 configs/nanopc-cm3588-nas.conf create mode 100755 edk2-rockchip-non-osi/Platform/Rockchip/DeviceTree/rk3588-nanopc-cm3588-nas.dtb create mode 100644 edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/AcpiTables/AcpiTables.inf create mode 100755 edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/AcpiTables/Dsdt.asl create mode 100644 edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/Library/RockchipPlatformLib/RockchipPlatformLib.c create mode 100644 edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/Library/RockchipPlatformLib/RockchipPlatformLib.inf create mode 100644 edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/NanoPC-CM3588-NAS.Modules.fdf.inc create mode 100644 edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/NanoPC-CM3588-NAS.dsc diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 65a5fa293..790c2f822 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,6 +40,7 @@ jobs: - nanopi-r6c - nanopi-r6s - nanopc-t6 + - nanopc-cm3588-nas - blade3 - h88k CONFIGURATION: ${{ fromJSON(format('[{0}]', inputs.build-configs || '"Debug"')) }} diff --git a/README.md b/README.md index 7a555d469..c04db158e 100644 --- a/README.md +++ b/README.md @@ -156,6 +156,7 @@ The paths above are relative to the root of the file system. That is, the `dtb` | `rk3588s-khadas-edge2` | Edge2 | | `rk3588-blade3-v101-linux` | Blade 3 | | `rk3588-nanopc-t6` | NanoPC T6 | +| `rk3588-nanopc-cm3588-nas` | NanoPC CM3588-NAS | | `rk3588s-nanopi-r6c` | NanoPi R6C | | `rk3588s-nanopi-r6s` | NanoPi R6S | | `rk3588-hinlink-h88k` | H88K | diff --git a/configs/nanopc-cm3588-nas.conf b/configs/nanopc-cm3588-nas.conf new file mode 100644 index 000000000..b5dc5b4b9 --- /dev/null +++ b/configs/nanopc-cm3588-nas.conf @@ -0,0 +1,3 @@ +DSC_FILE=edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/NanoPC-CM3588-NAS.dsc +PLATFORM_NAME=NanoPC-CM3588-NAS +SOC=RK3588 diff --git a/edk2-rockchip-non-osi/Platform/Rockchip/DeviceTree/rk3588-nanopc-cm3588-nas.dtb b/edk2-rockchip-non-osi/Platform/Rockchip/DeviceTree/rk3588-nanopc-cm3588-nas.dtb new file mode 100755 index 0000000000000000000000000000000000000000..44a11555b22d11a3c0fd2a7ab3116d5c43a09f41 GIT binary patch literal 274453 zcmeEv37lm`b^g7tXNI1AhE)-zSyTw~m|kX85?c^K1x4HyX8C;u1 z1VtS+?nY6>pePcJTZ}pi7`N!ClZeJ>yGEiWL=i}I@c(_MPTi`zysf(j)Ias>>e^17 zbLyN^r|Qg& zD&_Ig=*8vHa&cX8Y+&P-EkSLfxT82ysjjQ-kTSpszX)+TB5~OAQOM`K@=0F#P~W?9uSDjI^~HLn zKVK?VM=tJFSn|cTbG^1cuWbeL&(}8FjeS_Z-PKDMTYr(O?@TV z>nr_5vbrT|5_z+2uW2h6wx-+u#kRR2M*Y5P+lJHqeqh_2_@aJ4v2CSvzuUE~n8D|N z*|rQme`DJceA52!Szp^xtZd7VRjQTz=yXYp9rcv)!I*YSlkIBQw*AOtyI8C1e^Rnt ztk$$24*aK}eY#XG=8F@xGIUTJ;NUdwJMdzu|-JS9Z_G`R$&n%<<*L&?*{NLoY zCuL3kKjF1|Qz^o~$7}bdleA<0hF@G?uforjrLSjKZ2M>1*5?LBn`7HIZJTpV5zcSh zHs_L}w(n_M(PP%){Gqn>C)!qn-p|&LU`>IR%T9~z$F^TaZB7Gh!($XwqzuHzJzB7>va4Lm3ndm=4}7^dvw&dB*PZz78)me;80{ZT;9{RI zg2Zir5#D!I#s~U$pfm?sK`>+c9Yk6QT$a{%0Ay+PZx~~j&c_vwZ?gR?EgzSq^<4l7 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 + * 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" + +DefinitionBlock ("Dsdt.aml", "DSDT", 2, "RKCP ", "RK3588 ", 2) +{ + Scope (\_SB_) + { + include ("DsdtCommon.asl") + + 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") + } +} diff --git a/edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/Library/RockchipPlatformLib/RockchipPlatformLib.c b/edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/Library/RockchipPlatformLib/RockchipPlatformLib.c new file mode 100644 index 000000000..3a4ffb696 --- /dev/null +++ b/edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/Library/RockchipPlatformLib/RockchipPlatformLib.c @@ -0,0 +1,376 @@ +/** @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: + break; + case 2: + break; + case 3: + break; + case 4: + GpioPinSetFunction(1, GPIO_PIN_PA3, 9); //i2c4_scl_m3 + GpioPinSetFunction(1, GPIO_PIN_PA2, 9); //i2c4_sda_m3 + break; + case 5: + GpioPinSetFunction(3, GPIO_PIN_PC7, 9); //i2c5_scl_m0 + GpioPinSetFunction(3, GPIO_PIN_PD0, 9); //i2c5_sda_m0 + break; + case 6: + GpioPinSetFunction(0, GPIO_PIN_PD0, 9); //i2c6_scl_m0 + GpioPinSetFunction(0, GPIO_PIN_PC7, 9); //i2c6_sda_m0 + break; + case 7: + break; + case 8: + GpioPinSetFunction(1, GPIO_PIN_PD6, 9); //i2c8_scl_m2 + GpioPinSetFunction(1, GPIO_PIN_PD7, 9); //i2c8_sda_m2 + break; + default: + break; + } +} + +VOID +EFIAPI +UsbPortPowerEnable ( + VOID + ) +{ + DEBUG((DEBUG_INFO, "UsbPortPowerEnable called\n")); + /* The "pinctrl/usb" section in the dts lists three _en pins for power. + They appear to correspond to the three usb ports on the NAS carrier board. */ + GpioPinWrite (1, GPIO_PIN_PA4, TRUE); + GpioPinSetDirection (1, GPIO_PIN_PA4, GPIO_PIN_OUTPUT); + GpioPinWrite (4, GPIO_PIN_PB0, TRUE); + GpioPinSetDirection (4, GPIO_PIN_PB0, GPIO_PIN_OUTPUT); + GpioPinWrite (3, GPIO_PIN_PA5, TRUE); + GpioPinSetDirection (3, GPIO_PIN_PA5, GPIO_PIN_OUTPUT); + + /* Set GPIO1 PD2 (TYPEC5V_PWREN) output high to power the type-c port */ + GpioPinWrite (1, GPIO_PIN_PD2, TRUE); + GpioPinSetDirection (1, GPIO_PIN_PD2, GPIO_PIN_OUTPUT); + + // DEBUG((DEBUG_INFO, "Trying to enable on-board LED1\n")); + // GpioPinWrite (2, GPIO_PIN_PC0, TRUE); + // GpioPinSetDirection (2, GPIO_PIN_PC0, 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); + break; + case PCIE_SEGMENT_PCIE30X2: + GpioPinSetDirection (4, GPIO_PIN_PB3, GPIO_PIN_OUTPUT); + break; + case PCIE_SEGMENT_PCIE20L0: // rtl8152b + GpioPinSetDirection (4, GPIO_PIN_PB4, GPIO_PIN_OUTPUT); + break; + case PCIE_SEGMENT_PCIE20L1: // m.2 a+e key + GpioPinSetDirection (4, GPIO_PIN_PA2, GPIO_PIN_OUTPUT); + break; + case PCIE_SEGMENT_PCIE20L2: //rtl8152b + GpioPinSetDirection (4, GPIO_PIN_PA4, GPIO_PIN_OUTPUT); + break; + default: + break; + } +} + +VOID +EFIAPI +PciePowerEn ( + UINT32 Segment, + BOOLEAN Enable + ) +{ + /* output high to enable power */ + + switch(Segment) { + case PCIE_SEGMENT_PCIE30X4: + break; + case PCIE_SEGMENT_PCIE20L0: + break; + case PCIE_SEGMENT_PCIE20L1: + 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_PCIE30X2: + GpioPinWrite (4, GPIO_PIN_PB3, !Enable); + break; + case PCIE_SEGMENT_PCIE20L0: + GpioPinWrite (4, GPIO_PIN_PB4, !Enable); + break; + case PCIE_SEGMENT_PCIE20L1: + GpioPinWrite (4, GPIO_PIN_PA2, !Enable); + break; + case PCIE_SEGMENT_PCIE20L2: + GpioPinWrite (4, GPIO_PIN_PA4, !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 (1, GPIO_PIN_PD3, 0xB); // PWM1_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 (1, GPIO_PIN_PC6, FALSE); + GpioPinSetDirection (1, GPIO_PIN_PC6, GPIO_PIN_OUTPUT); +} + +VOID +EFIAPI +PlatformSetStatusLed ( + IN BOOLEAN Enable + ) +{ + GpioPinWrite (1, GPIO_PIN_PC6, Enable); +} + +VOID +EFIAPI +PlatformEarlyInit ( + VOID + ) +{ + // Configure various things specific to this platform + // GpioPinSetFunction(1, GPIO_PIN_PC4, 0); //jdet +} diff --git a/edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/Library/RockchipPlatformLib/RockchipPlatformLib.inf b/edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/Library/RockchipPlatformLib/RockchipPlatformLib.inf new file mode 100644 index 000000000..b0ca9550e --- /dev/null +++ b/edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/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/FriendlyElec/NanoPC-CM3588-NAS/NanoPC-CM3588-NAS.Modules.fdf.inc b/edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/NanoPC-CM3588-NAS.Modules.fdf.inc new file mode 100644 index 000000000..e1c7826dd --- /dev/null +++ b/edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/NanoPC-CM3588-NAS.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-nanopc-cm3588-nas.dtb + } + + # Splash screen logo + INF $(VENDOR_DIRECTORY)/Drivers/LogoDxe/LogoDxe.inf diff --git a/edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/NanoPC-CM3588-NAS.dsc b/edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/NanoPC-CM3588-NAS.dsc new file mode 100644 index 000000000..3d7464fbb --- /dev/null +++ b/edk2-rockchip/Platform/FriendlyElec/NanoPC-CM3588-NAS/NanoPC-CM3588-NAS.dsc @@ -0,0 +1,117 @@ +## @file +# +# Copyright (c) 2014-2018, Linaro Limited. All rights reserved. +# Copyright (c) 2023, Molly Sophia +# 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 = NanoPC-CM3588-NAS + PLATFORM_VENDOR = FriendlyElec + PLATFORM_GUID = e5022309-24e1-46e0-9d40-dcbc7293e609 + 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|"NanoPC CM3588-NAS" + gRockchipTokenSpaceGuid.PcdPlatformVendorName|"FriendlyElec" + gRockchipTokenSpaceGuid.PcdFamilyName|"NanoPi CM3588" + gRockchipTokenSpaceGuid.PcdProductUrl|"https://wiki.friendlyelec.com/wiki/index.php/CM3588_NAS_Kit" + gRockchipTokenSpaceGuid.PcdDeviceTreeName|"rk3588-nanopc-cm3588-nas" + + # I2C + gRockchipTokenSpaceGuid.PcdI2cSlaveAddresses|{ 0x42, 0x43, 0x51 } + gRockchipTokenSpaceGuid.PcdI2cSlaveBuses|{ 0x0, 0x0, 0x6 } + gRockchipTokenSpaceGuid.PcdI2cSlaveBusesRuntimeSupport|{ FALSE, FALSE, TRUE } + gRockchipTokenSpaceGuid.PcdRk860xRegulatorAddresses|{ 0x42, 0x43 } + gRockchipTokenSpaceGuid.PcdRk860xRegulatorBuses|{ 0x0, 0x0 } + gRockchipTokenSpaceGuid.PcdRk860xRegulatorTags|{ $(SCMI_CLK_CPUB01), $(SCMI_CLK_CPUB23) } + gPcf8563RealTimeClockLibTokenSpaceGuid.PcdI2cSlaveAddress|0x51 + gRockchipTokenSpaceGuid.PcdRtc8563Bus|0x6 + + # + # 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 + # NanoPC CM3588 has one 2.5 GBE wired to the first PCIE2 port + # + gRK3588TokenSpaceGuid.PcdComboPhy0Switchable|FALSE + gRK3588TokenSpaceGuid.PcdComboPhy0ModeDefault|$(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