From nobody Fri Sep 20 14:54:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+109600+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109600+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=163.com ARC-Seal: i=1; a=rsa-sha256; t=1697216175; cv=none; d=zohomail.com; s=zohoarc; b=H720opP4yk2q1eVG7F5mlNq0pEw52RG6M91GkFgs6nGcC3Koq6pJ4ADEo4w0kbeZ4d725o3PWaZUvAQ5mN24U/SWmC+4WGUoavFivK1vSIWzaQW7iD8ZCHEQSsHKrgYPT1mObZizYrLAypGEaH153D5kGNBedT/GxyTsMJz/5y0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697216175; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=5nC7FV38Bqv0XpYN2vpZwKTGdDcNk4lNJHwq+eisWZc=; b=a6PdhRgc3Ylp/1HdET/+le76s2fDPXxyzo1I/hpDCgcnHAR4auSHD8/w+FKQNY+XBB821UI0dGBgz78xRLBdz97NnD9z/RapgW6ByMIhDISBoZGaUOjEXjmPZ+DblewgB7vEwxO2BMT0jLfuG0I+etaVYmdKW6iuk7cHV6WYZsQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109600+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1697216175589302.5765670125609; Fri, 13 Oct 2023 09:56:15 -0700 (PDT) Return-Path: DKIM-Signature: a=rsa-sha256; bh=kCctFWGlHGKWgWxi+S1Ai5KUdppo9N+0V+jfLu0pl7g=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1697216175; v=1; b=RZKFP1hnei5jgW3/yR/2yr7k8Sr8syf8n98LCrE2qemkT1Ms1pokVPpLhVUx4r1UG8Y3much n2r6iQ7iqFEILrw0O08JwM9cYlpEUGHeu+hHmjZ+PeXR8b9yovEJ/FSchBfGM4Nqy6T6FyFaUbY RhBQLSRChB279qWbhSbep7OA= X-Received: by 127.0.0.2 with SMTP id FpGWYY1788612xgk5s8rvZPM; Fri, 13 Oct 2023 09:56:15 -0700 X-Received: from m12.mail.163.com (m12.mail.163.com [220.181.12.215]) by mx.groups.io with SMTP id smtpd.web11.30834.1697166124362743243 for ; Thu, 12 Oct 2023 20:02:04 -0700 X-Received: from rv-uefi.. (unknown [211.87.236.31]) by zwqz-smtp-mta-g4-4 (Coremail) with SMTP id _____wD3v8kesyhlw3CmAQ--.18739S2; Fri, 13 Oct 2023 11:01:51 +0800 (CST) From: caiyuqing_hz@163.com To: devel@edk2.groups.io Cc: USER0FISH , sunilvl@ventanamicro.com, Leif Lindholm , Michael D Kinney , Inochi Amaoto Subject: [edk2-devel] [PATCH edk2-platforms v5 1/7] Sophgo/SG2042Pkg: Add SmbiosPlatformDxe module. Date: Fri, 13 Oct 2023 11:01:50 +0800 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-CM-TRANSID: _____wD3v8kesyhlw3CmAQ--.18739S2 X-Coremail-Antispam: 1Uf129KBjvAXoWfZFyrtFWkZFWxtr4ruw1UAwb_yoW8KF17Jo W7G3Z29a10gFW8ZrWIkrZ7Gw48Wr4Sgr43tF1Yyw1FqFZ3Zw13KryIvw15Cryvyr18Ka95 C34fXryfGrZ09F18n29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUc9mRUUUUU X-Originating-IP: [211.87.236.31] X-CM-SenderInfo: 5fdl535tlqwslk26il2tof0z/1tbiSAEIxV+FiSiEUQAAsq Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,caiyuqing_hz@163.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: wP7v3LnxUYpCGDXKVJdUSafwx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1697216176048100001 Content-Type: text/plain; charset="utf-8" From: caiyuqing379 This driver installs SMBIOS information for SG2042. Install hardware information by creating an SMBIOS table which includes BIOS version, system manufacturer, product name, processor, memory, slots, storage, and other. Signed-off-by: caiyuqing379 Co-authored-by: USER0FISH Cc: dahogn Cc: meng-cz Cc: yli147 Cc: ChaiEvan Cc: Leif Lindholm Cc: Michael D Kinney Reviewed-by: Sunil V L Acked-by: Sunil V L --- .../SmbiosPlatformDxe/SmbiosPlatformDxe.inf | 39 + .../SmbiosPlatformDxe/SmbiosPlatformDxe.c | 805 ++++++++++++++++++ 2 files changed, 844 insertions(+) create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/SmbiosPlatformDxe/Smbi= osPlatformDxe.inf create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/SmbiosPlatformDxe/Smbi= osPlatformDxe.c diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatf= ormDxe.inf b/Silicon/Sophgo/SG2042Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatf= ormDxe.inf new file mode 100644 index 000000000000..61319d092a46 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.= inf @@ -0,0 +1,39 @@ +#/** @file +# SMBIOS Table for RISC-V Sophgo SG2042 platform +# +# Copyright (c) 2013, Linaro Ltd. All rights reserved.
+# Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Univers= iy, China.P.R. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +#**/ + +[Defines] + INF_VERSION =3D 0x0001001B + BASE_NAME =3D SmbiosPlatformDxe + FILE_GUID =3D 1CAFAAC3-C386-BF0B-7DD1-7EEE514A91B1 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D SmbiosPlatformDriverEntryPoint + +[Sources] + SmbiosPlatformDxe.c + +[Packages] + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + +[LibraryClasses] + BaseLib + BaseMemoryLib + DebugLib + HobLib + PcdLib + UefiBootServicesTableLib + UefiDriverEntryPoint + +[Protocols] + gEfiSmbiosProtocolGuid # PROTOCOL ALWAYS_CONSUMED + +[Depex] + gEfiSmbiosProtocolGuid diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatf= ormDxe.c b/Silicon/Sophgo/SG2042Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatfor= mDxe.c new file mode 100644 index 000000000000..5129dc236f66 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c @@ -0,0 +1,805 @@ +/** @file + This driver installs SMBIOS information for Sophgo SG2042EVB platforms + + Copyright (c) 2015-2020, Arm Limited. All rights reserved.
+ Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +// +// SMBIOS tables often reference each other using +// fixed constants, define a list of these constants +// for our hardcoded tables +// +enum SMBIOS_REFRENCE_HANDLES { + SMBIOS_HANDLE_L1I =3D 0x1000, + SMBIOS_HANDLE_L1D, + SMBIOS_HANDLE_L2, + SMBIOS_HANDLE_L3, + SMBIOS_HANDLE_MOTHERBOARD, + SMBIOS_HANDLE_CHASSIS, + SMBIOS_HANDLE_CLUSTER, + SMBIOS_HANDLE_MEMORY, + SMBIOS_HANDLE_DIMM +}; + +// +// Type definition and contents of the default SMBIOS table. +// This table covers only the minimum structures required by +// the SMBIOS specification (section 6.2, version 3.0) +// + +// BIOS information (section 7.1) +STATIC SMBIOS_TABLE_TYPE0 mSG2042EVBType0 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_BIOS_INFORMATION, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE0), // UINT8 Length + SMBIOS_HANDLE_PI_RESERVED, + }, + 1, // SMBIOS_TABLE_STRING Vendor + 2, // SMBIOS_TABLE_STRING BiosVer= sion + 0xE800, // UINT16 BiosSeg= ment + 3, // SMBIOS_TABLE_STRING BiosRel= easeDate + 0, // UINT8 BiosSize + { // BiosCharacteristics + 0, // Reserved = :2 + 0, // Unknown = :1 + 0, // BiosCharacteristicsNotSupported = :1 + 0, // IsaIsSupported = :1 + 0, // McaIsSupported = :1 + 0, // EisaIsSupported = :1 + 1, // PciIsSupported = :1 + 0, // PcmciaIsSupported = :1 + 0, // PlugAndPlayIsSupported = :1 + 0, // ApmIsSupported = :1 + 1, // BiosIsUpgradable = :1 + 0, // BiosShadowingAllowed = :1 + 0, // VlVesaIsSupported = :1 + 0, // EscdSupportIsAvailable = :1 + 1, // BootFromCdIsSupported = :1 + 1, // SelectableBootIsSupported = :1 + 0, // RomBiosIsSocketed = :1 + 0, // BootFromPcmciaIsSupported = :1 + 0, // EDDSpecificationIsSupported = :1 + 0, // JapaneseNecFloppyIsSupported = :1 + 0, // JapaneseToshibaFloppyIsSupported = :1 + 0, // Floppy525_360IsSupported = :1 + 0, // Floppy525_12IsSupported = :1 + 0, // Floppy35_720IsSupported = :1 + 0, // Floppy35_288IsSupported = :1 + 0, // PrintScreenIsSupported = :1 + 0, // Keyboard8042IsSupported = :1 + 0, // SerialIsSupported = :1 + 0, // PrinterIsSupported = :1 + 0, // CgaMonoIsSupported = :1 + 0, // NecPc98 = :1 + 0 // ReservedForVendor = :3 + }, + { + 0x3, // BIOSCharacteristicsExtensionBytes= [0] + 0xC, // BIOSCharacteristicsExtensionBytes= [1] + }, + 0xFF, // UINT8 SystemB= iosMajorRelease + 0xFF, // UINT8 SystemB= iosMinorRelease + 0xFF, // UINT8 Embedde= dControllerFirmwareMajorRelease + 0xFF, // UINT8 Embedde= dControllerFirmwareMinorRelease +}; + +STATIC CHAR8 CONST *mSG2042EVBType0Strings[] =3D { + "EFI Development Kit II / Sophgo\0", /* Vendor */ + "V1.0\0", /* BiosVersion */ + __DATE__"\0", /* BiosReleaseDate */ + NULL +}; + + +// System information (section 7.2) +STATIC SMBIOS_TABLE_TYPE1 mSG2042EVBType1 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_SYSTEM_INFORMATION, + sizeof (SMBIOS_TABLE_TYPE1), + SMBIOS_HANDLE_PI_RESERVED, + }, + 1, // Manufacturer + 2, // Product Name + 3, // Version + 4, // Serial + { 0x9987FD42, 0x907E, 0x5446, { 0x1D,0x7D,0x7D,0xA0,0x10,0x9F,0x60,0xA1 = }}, //UUID + 6, //Wakeup type + 0, //SKU + 0, //Family +}; + +STATIC CHAR8 CONST *mSG2042EVBType1Strings[] =3D { + "SOPHGO\0", /* Manufacturer */ + "Sophgo SG2042 EVB Board\0", /* Product Name */ + "None\0", /* Version */ + "Not Set\0", /* Serial */ + NULL +}; + + +// Baseboard (section 7.3) +STATIC SMBIOS_TABLE_TYPE2 mSG2042EVBType2 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_BASEBOARD_INFORMATION, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE2), // UINT8 Length + SMBIOS_HANDLE_MOTHERBOARD, + }, + 1, // Manufacturer + 2, // Product Name + 3, // Version + 4, // Serial + 0, // Asset tag + {1}, // motherboard, not replaceable + 5, // location of board + SMBIOS_HANDLE_CHASSIS, + BaseBoardTypeMotherBoard, + 1, + {SMBIOS_HANDLE_CLUSTER}, +}; + +STATIC CHAR8 CONST *mSG2042EVBType2Strings[] =3D { + "SOPHGO\0", /* Manufacturer */ + "Sophgo SG2042 EVB Board\0", /* Product Name */ + "None\0", /* Version */ + "Not Set\0", /* Serial */ + "Not Set\0", /* BaseBoardAssetTag */ + "Not Set\0", /* BaseBoardChassisLocation */ + NULL +}; + + +// Enclosure +STATIC SMBIOS_TABLE_TYPE3 mSG2042EVBType3 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE3), // UINT8 Length + SMBIOS_HANDLE_CHASSIS, + }, + 1, // Manufacturer + 2, // enclosure type + 2, // version + 3, // serial + 0, // asset tag + ChassisStateUnknown, // boot chassis state + ChassisStateSafe, // power supply state + ChassisStateSafe, // thermal state + ChassisSecurityStatusNone, // security state + {0,0,0,0,}, // OEM defined + 1, // 1U height + 1, // number of power cords + 0, // no contained elements +}; + +STATIC CHAR8 CONST *mSG2042EVBType3Strings[] =3D { + "SOPHGO\0", /* Manufacturer */ + "None\0", /* Version */ + "Not Set\0", /* Serial */ + "Not Set\0", /* AssetTag */ + NULL +}; + + +// Processor +STATIC SMBIOS_TABLE_TYPE4 mSG2042EVBType4 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE4), // UINT8 Length + SMBIOS_HANDLE_CLUSTER, + }, + 1, // socket type + 3, // processor type CPU + ProcessorFamilyIndicatorFamily2, // processor family, acquire fr= om field2 + 2, // manufactuer + {{0,},{0.}}, // processor id + 3, // version + {0,0,0,0,0,1}, // voltage + 0, // external clock + 2200, // max speed + 0, // current speed - requires upd= ate + 0x41, // status + ProcessorUpgradeOther, + SMBIOS_HANDLE_L1I, // l1 cache handle + SMBIOS_HANDLE_L2, // l2 cache handle + SMBIOS_HANDLE_L3, // l3 cache handle + 0, // serial not set + 0, // asset not set + 4, // part number + 64, // core count in socket + 64, // enabled core count in socket + 64, // threads per socket + 0xEC, // processor characteristics + ProcessorFamilyRiscVRV64, // RISC-V core + 0, // CoreCount2; + 0, // EnabledCoreCount2; + 0, // ThreadCount2; +}; + +STATIC CHAR8 CONST *mSG2042EVBType4Strings[] =3D { + "Socket type unknown\0", /* Socket type placeholder */ + "SOPHGO\0", /* manufactuer */ + "SG2042\0", /* processor description */ + "Not Set\0", /* SerialNumber */ + NULL +}; + +// Cache +STATIC SMBIOS_TABLE_TYPE7 mSG2042EVBType7_l1i =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_CACHE_INFORMATION, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE7), // UINT8 Length + SMBIOS_HANDLE_L1I, + }, + 1, + 0x380, // L1 enabled, unknown WB + 48, // 48k I-cache max + 48, // 48k installed + {0,1}, // SRAM type + {0,1}, // SRAM type + 0, // speed unknown + CacheErrorParity, // parity checking + CacheTypeInstruction, // instruction cache + CacheAssociativityOther, // three way + // SMBIOS 3.1.0 fields + 48, //48k I-cache max + 48, //48k installed +}; + +STATIC SMBIOS_TABLE_TYPE7 mSG2042EVBType7_l1d =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_CACHE_INFORMATION, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE7), // UINT8 Length + SMBIOS_HANDLE_L1D, + }, + 2, + 0x380, // L1 enabled, unknown WB + 32, // 32k D-cache max + 32, // 32k installed + {0,1}, // SRAM type + {0,1}, // SRAM type + 0, // speed unknown + CacheErrorSingleBit, // ECC checking + CacheTypeData, // data cache + CacheAssociativity2Way, // two way + // SMBIOS 3.1.0 fields + 32, // 32k D-cache max + 32, // 32k installed +}; + +STATIC SMBIOS_TABLE_TYPE7 mSG2042EVBType7_l2 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_CACHE_INFORMATION, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE7), // UINT8 Length + SMBIOS_HANDLE_L2, + }, + 3, + 0x181, // L2 enabled, WB + 512, // 512k D-cache max + 512, // 512k installed + {0,1}, // SRAM type + {0,1}, // SRAM type + 0, // speed unknown + CacheErrorSingleBit, // ECC checking + CacheTypeUnified, // instruction cache + CacheAssociativity16Way, // 16 way associative + // SMBIOS 3.1.0 fields + 512, // 512k D-cache max + 512, // 512k installed +}; + +STATIC SMBIOS_TABLE_TYPE7 mSG2042EVBType7_l3 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_CACHE_INFORMATION, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE7), // UINT8 Length + SMBIOS_HANDLE_L3, + }, + 4, + 0x182, // L3 enabled, WB + 1024, // 1M cache max + 1024, // 1M installed + {0,1}, // SRAM type + {0,1}, // SRAM type + 0, // speed unknown + CacheErrorSingleBit, // ECC checking + CacheTypeUnified, // instruction cache + CacheAssociativity8Way, // 8 way associative + // SMBIOS 3.1.0 fields + 1024, // 1M cache max + 1024, // 1M installed +}; + +STATIC CONST CHAR8 *mSG2042EVBType7Strings[] =3D { + "L1 Instruction\0", /* L1I */ + "L1 Data\0", /* L1D */ + "L2\0", /* L2 */ + "L3\0", /* L3 */ + NULL +}; + +// Slots +STATIC SMBIOS_TABLE_TYPE9 mSG2042EVBType9_0 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_INACTIVE, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length + SMBIOS_HANDLE_PI_RESERVED, + }, + 1, + SlotTypePciExpressX16, + SlotDataBusWidth16X, + SlotUsageUnknown, + SlotLengthLong, + 0, + {1}, // Unknown + {1,0,1}, // PME and SMBUS + 0, + 0, + 1, +}; + +STATIC SMBIOS_TABLE_TYPE9 mSG2042EVBType9_1 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_INACTIVE, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length + SMBIOS_HANDLE_PI_RESERVED, + }, + 2, + SlotTypePciExpressGen2X8, + SlotDataBusWidth8X, + SlotUsageUnknown, + SlotLengthLong, + 0, + {1}, + {1,0,1}, // PME and SMBUS + 0, + 0, + 2, +}; + +STATIC SMBIOS_TABLE_TYPE9 mSG2042EVBType9_2 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_INACTIVE, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE9), // UINT8 Length + SMBIOS_HANDLE_PI_RESERVED, + }, + 3, + SlotTypePciExpressGen2X8, + SlotDataBusWidth8X, + SlotUsageUnknown, + SlotLengthLong, + 0, + {1}, + {1,0,1}, // PME and SMBUS + 0, + 0, + 3, +}; + +STATIC CHAR8 CONST *mSG2042EVBType9Strings[] =3D { + "PCIE0 ExpressX16 \0",/* Slot0 */ + "PCIE1 ExpressGen2X8 \0",/* Slot1 */ + "PCIE1 ExpressGen2X8 \0",/* Slot2 */ + NULL +}; + +// Memory array +STATIC SMBIOS_TABLE_TYPE16 mSG2042EVBType16 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE16), // UINT8 Length + SMBIOS_HANDLE_MEMORY, + }, + MemoryArrayLocationSystemBoard, // on motherboard + MemoryArrayUseSystemMemory, // system RAM + MemoryErrorCorrectionNone, // ECC RAM + 0x1000000, // 16GB + 0xFFFE, // No error information structu= re + 0x1, // soldered memory +}; + +STATIC CHAR8 CONST *mSG2042EVBType16Strings[] =3D { + NULL +}; + +// Memory device +STATIC SMBIOS_TABLE_TYPE17 mSG2042EVBType17 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_MEMORY_DEVICE, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE17), // UINT8 Length + SMBIOS_HANDLE_DIMM, + }, + SMBIOS_HANDLE_MEMORY, // array to which this module belongs + 0xFFFE, // no errors + 64, // single DIMM, no ECC is 64bits (for e= cc this would be 72) + 32, // data width of this device (32-bits) + 0, // Memory size obtained dynamically + MemoryFormFactorRowOfChips, // Memory factor + 0, // Not part of a set + 1, // Location + 2, // Bank 0 + MemoryTypeDdr4, // DDR4 + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, // unbuffered + 0, // DRAM speed - requires update + 0, // varies between diffrent production r= uns + 0, // serial + 0, // asset tag + 0, // part number + 0, // rank + 0, // ExtendedSize; (since Size < 32GB-1) + 0, // ConfiguredMemoryClockSpeed - initial= ized at runtime + 0, // MinimumVoltage; (unknown) + 0, // MaximumVoltage; (unknown) + 0, // ConfiguredVoltage; (unknown) + MemoryTechnologyDram, // MemoryTechnology + {{ // MemoryOperatingModeCapability + 0, // Reserved :1; + 0, // Other :1; + 0, // Unknown :1; + 1, // VolatileMemory :1; + 0, // ByteAccessiblePersistentMemory :1; + 0, // BlockAccessiblePersistentMemory :1; + 0 // Reserved :10; + }}, + 0, // FirwareVersion + 0, // ModuleManufacturerID (unknown) + 0, // ModuleProductID (unknown) + 0, // MemorySubsystemControllerManufacture= rID (unknown) + 0, // MemorySubsystemControllerProductID (= unknown) + 0, // NonVolatileSize + 0, // VolatileSize - initialized at runtime + 0, // CacheSize + 0, // LogicalSize + 0, // ExtendedSpeed, + 0 // ExtendedConfiguredMemorySpeed +}; + +STATIC CHAR8 CONST *mSG2042EVBType17Strings[] =3D { + "DIMM SLOT\0", /* location */ + "BANK 0\0", /* bank description */ + NULL +}; + +// +// Memory array mapped address, this structure +// is overridden by SmbiosInstallMemoryStructure. +// +STATIC SMBIOS_TABLE_TYPE19 mSG2042EVBType19 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE19), // UINT8 Length + SMBIOS_HANDLE_PI_RESERVED, + }, + 0xFFFFFFFF, // invalid, look at exten= ded addr field + 0xFFFFFFFF, + SMBIOS_HANDLE_DIMM, // handle + 1, + 0x080000000, // starting addr of first= 2GB + 0x100000000, // ending addr of first 2= GB +}; + +// System boot infomSG2042EVBType4. +STATIC SMBIOS_TABLE_TYPE32 mSG2042EVBType32 =3D { + { // SMBIOS_STRUCTURE Hdr + EFI_SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION, // UINT8 Type + sizeof (SMBIOS_TABLE_TYPE32), // UINT8 Length + SMBIOS_HANDLE_PI_RESERVED, + }, + {0, 0, 0, 0, 0, 0}, // reserved + BootInformationStatusNoError, +}; + +STATIC CHAR8 CONST *mSG2042EVBType32Strings[] =3D { + NULL +}; + +STATIC CONST VOID *DefaultCommonTables[][2] =3D +{ + { &mSG2042EVBType0, mSG2042EVBType0Strings }, + { &mSG2042EVBType1, mSG2042EVBType1Strings }, + { &mSG2042EVBType2, mSG2042EVBType2Strings }, + { &mSG2042EVBType3, mSG2042EVBType3Strings }, + { &mSG2042EVBType4, mSG2042EVBType4Strings }, + { &mSG2042EVBType7_l1i, mSG2042EVBType7Strings }, + { &mSG2042EVBType7_l1d, mSG2042EVBType7Strings }, + { &mSG2042EVBType7_l2, mSG2042EVBType7Strings }, + { &mSG2042EVBType7_l3, mSG2042EVBType7Strings }, + { &mSG2042EVBType9_0, mSG2042EVBType9Strings }, + { &mSG2042EVBType9_1, mSG2042EVBType9Strings }, + { &mSG2042EVBType9_2, mSG2042EVBType9Strings }, + { &mSG2042EVBType16, mSG2042EVBType16Strings }, + { &mSG2042EVBType17, mSG2042EVBType17Strings }, + { &mSG2042EVBType32, mSG2042EVBType32Strings }, + { NULL, NULL }, +}; + +/** + + Create SMBIOS record. + + Converts a fixed SMBIOS structure and an array of pointers to strings in= to + an SMBIOS record where the strings are cat'ed on the end of the fixed re= cord + and terminated via a double NULL and add to SMBIOS table. + + SMBIOS_TABLE_TYPE32 gSmbiosType12 =3D { + { EFI_SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS, sizeof (SMBIOS_TABLE_T= YPE12), 0 }, + 1 // StringCount + }; + + CHAR8 *gSmbiosType12Strings[] =3D { + "Not Found", + NULL + }; + + ... + + LogSmbiosData ( + (EFI_SMBIOS_TABLE_HEADER*)&gSmbiosType12, + gSmbiosType12Strings + ); + + @param Smbios SMBIOS protocol + @param Template Fixed SMBIOS structure, required. + @param StringArray Array of strings to convert to an SMBIOS string pack. + NULL is OK. +**/ +STATIC +EFI_STATUS +EFIAPI +LogSmbiosData ( + IN EFI_SMBIOS_PROTOCOL *Smbios, + IN EFI_SMBIOS_TABLE_HEADER *Template, + IN CONST CHAR8 * CONST *StringArray + ) +{ + EFI_STATUS Status; + EFI_SMBIOS_TABLE_HEADER *Record; + UINTN Index; + UINTN StringSize; + UINTN Size; + CHAR8 *Str; + + + // Calculate the size of the fixed record and optional string pack + Size =3D Template->Length; + if (StringArray =3D=3D NULL) { + // At least a double null is required + Size +=3D 1; + } else { + for (Index =3D 0; StringArray[Index] !=3D NULL; Index++) { + StringSize =3D AsciiStrSize (StringArray[Index]); + Size +=3D StringSize; + } + if (StringArray[0] =3D=3D NULL) { + // At least a double null is required + Size +=3D 1; + } + + // Don't forget the terminating double null + Size +=3D 1; + } + + // Copy over Template + Record =3D (EFI_SMBIOS_TABLE_HEADER *)AllocateZeroPool (Size); + if (Record =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + CopyMem (Record, Template, Template->Length); + + // Append string pack + Str =3D (CHAR8*)((UINTN)Record + Record->Length); + for (Index =3D 0; StringArray[Index] !=3D NULL; Index++) { + StringSize =3D AsciiStrSize (StringArray[Index]); + CopyMem (Str, StringArray[Index], StringSize); + Str +=3D StringSize; + } + *Str =3D 0; + + Status =3D Smbios->Add (Smbios, + NULL, + &Record->Handle, + Record); + ASSERT_EFI_ERROR (Status); + + FreePool (Record); + + return Status; +} + +/** + Installs a memory descriptor (type19) for the given address range + + @param Smbios SMBIOS protocol. + @param StartingAddress Start address of the memory chunk. + @param RegionLength Memory chunk size. + +**/ +EFI_STATUS +SmbiosInstallMemoryStructure ( + IN EFI_SMBIOS_PROTOCOL *Smbios, + IN UINT64 StartingAddress, + IN UINT64 RegionLength + ) +{ + EFI_SMBIOS_HANDLE SmbiosHandle; + SMBIOS_TABLE_TYPE19 MemoryDescriptor; + EFI_STATUS Status; + + Status =3D EFI_SUCCESS; + + CopyMem (&MemoryDescriptor, + &mSG2042EVBType19, + sizeof (SMBIOS_TABLE_TYPE19)); + + MemoryDescriptor.ExtendedStartingAddress =3D StartingAddress; + MemoryDescriptor.ExtendedEndingAddress =3D StartingAddress + RegionLengt= h; + SmbiosHandle =3D MemoryDescriptor.Hdr.Handle; + + Status =3D Smbios->Add (Smbios, + NULL, + &SmbiosHandle, + (EFI_SMBIOS_TABLE_HEADER*) &MemoryDescriptor); + + return Status; +} + +/** + Install a whole table worth of structructures + + @param Smbios SMBIOS protocol. + @param DefaultTables A pointer to the default SMBIOS table stru= cture. + +**/ +EFI_STATUS +SmbiosInstallStructures ( + IN EFI_SMBIOS_PROTOCOL *Smbios, + IN CONST VOID *DefaultTables[][2] + ) +{ + EFI_STATUS Status; + INTN TableEntry; + + Status =3D EFI_SUCCESS; + + for (TableEntry =3D 0; DefaultTables[TableEntry][0] !=3D NULL; TableEn= try++) { + // Omit disabled tables + if (((EFI_SMBIOS_TABLE_HEADER *)DefaultTables[TableEntry][0])->Type = =3D=3D + EFI_SMBIOS_TYPE_INACTIVE) { + continue; + } + + Status =3D LogSmbiosData (Smbios, + ((EFI_SMBIOS_TABLE_HEADER *)DefaultTables[TableEntry][0]), + DefaultTables[TableEntry][1]); + if (EFI_ERROR (Status)) + break; + } + + return Status; +} + +/** + Update memory information basing on the HOB list. + + @param Smbios SMBIOS protocol + +**/ +STATIC +EFI_STATUS +SmbiosMemoryInstall ( + IN EFI_SMBIOS_PROTOCOL *Smbios + ) +{ + EFI_PEI_HOB_POINTERS Hob; + UINT64 MemorySize; + EFI_STATUS Status; + + MemorySize =3D 0; + + // + // Get the HOB list for processing + // + Hob.Raw =3D GetHobList (); + + // + // Collect memory ranges + // + while (!END_OF_HOB_LIST (Hob)) { + if (Hob.Header->HobType =3D=3D EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) { + if (Hob.ResourceDescriptor->ResourceType =3D=3D EFI_RESOURCE_SYSTEM_= MEMORY) { + MemorySize +=3D (UINT64)(Hob.ResourceDescriptor->ResourceLength); + + Status =3D SmbiosInstallMemoryStructure (Smbios, + Hob.ResourceDescriptor->PhysicalStart, + Hob.ResourceDescriptor->ResourceLength); + if (EFI_ERROR(Status)) { + return Status; + } + } + } + Hob.Raw =3D GET_NEXT_HOB (Hob); + } + + // + // Update TYPE17 memory size fields + // + mSG2042EVBType17.Size =3D (UINT16)(MemorySize >> 20); + mSG2042EVBType17.VolatileSize =3D MemorySize; + + return EFI_SUCCESS; +} + +/** + Install all structures from the DefaultTables structure + + @param Smbios SMBIOS protocol + +**/ +EFI_STATUS +SmbiosInstallAllStructures ( + IN EFI_SMBIOS_PROTOCOL *Smbios + ) +{ + EFI_STATUS Status; + + // + // Generate memory descriptors. + // + Status =3D SmbiosMemoryInstall (Smbios); + ASSERT_EFI_ERROR (Status); + + // + // Install all tables. + // + Status =3D SmbiosInstallStructures (Smbios, DefaultCommonTables); + ASSERT_EFI_ERROR (Status); + + return EFI_SUCCESS; +} + +/** + Installs SMBIOS information for SG2042EVB platforms + + @param ImageHandle Module's image handle + @param SystemTable Pointer of EFI_SYSTEM_TABLE + + @retval EFI_SUCCESS Smbios data successfully installed + @retval Other Smbios data was not installed + +**/ +EFI_STATUS +EFIAPI +SmbiosPlatformDriverEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + EFI_SMBIOS_PROTOCOL *Smbios; + + // + // Find the SMBIOS protocol + // + Status =3D gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, + NULL, + (VOID **)&Smbios); + if (EFI_ERROR (Status)) { + return Status; + } + + Status =3D SmbiosInstallAllStructures (Smbios); + + return Status; +} --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109600): https://edk2.groups.io/g/devel/message/109600 Mute This Topic: https://groups.io/mt/101944464/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri Sep 20 14:54:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+109601+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109601+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=163.com ARC-Seal: i=1; a=rsa-sha256; t=1697216169; cv=none; d=zohomail.com; s=zohoarc; b=Hnez0tfrzHu+52uwT6FDAIN9DNLAm8We3UtiVnEEoDxsjUKF95eLj1zBsehJAaALMiIUoWaKInXkt1dXjfqb3Av4uqOUi7L00aEyFgQamK2KgJ9uoTMTh1ExnpUo3tgCUcTnvCfnKK23mCkzYknYirQUwLi5h9S5O5mVI55kLTs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697216169; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=MqcVcMJURJ7+KTmtPMxnQMVv4ewUXI92ZCamJlEonas=; b=lAXQv32aVmwVKCusPnknuIuv/WoI74mZybVpem71ZgAMHFvL6EqhyPdHH7jCx2PVHMBmcLZo5JmQog4Nq8c4UsDBPDyPtcTfjIXhqp8WwWyAD1b9ha/UOlHTKZqjg+EQxbvl+I8eouCT+hhu7sIdO2nntSO955T7eMuzJ27sarA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109601+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 169721616922736.02070534359291; Fri, 13 Oct 2023 09:56:09 -0700 (PDT) Return-Path: DKIM-Signature: a=rsa-sha256; bh=Az/9awdxoAEz8uBbH6gjjMUiBTd5A+Nll8D+RCz+t7o=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1697216168; v=1; b=pWAxrAiJj5dcF/X1sB66Np4zQkc1auqFztjpydXptVb6jyxRKxWvPGIciad7qxzQDhnT5Nfa ao1taF49c6Af8Po6tZZhmu9V2hYjLva/3rbHaElCEwu45qRxLlsZ/OitZj/EchMMlFoIzONbHT0 cETjfxcFW0xog9LdBm14LSH4= X-Received: by 127.0.0.2 with SMTP id Pw4XYY1788612xLNDSxbz1NJ; Fri, 13 Oct 2023 09:56:08 -0700 X-Received: from m12.mail.163.com (m12.mail.163.com [220.181.12.198]) by mx.groups.io with SMTP id smtpd.web10.30852.1697166137179661463 for ; Thu, 12 Oct 2023 20:02:18 -0700 X-Received: from rv-uefi.. (unknown [211.87.236.31]) by zwqz-smtp-mta-g4-3 (Coremail) with SMTP id _____wDXf98ysyhlyRWnAQ--.9337S2; Fri, 13 Oct 2023 11:02:11 +0800 (CST) From: caiyuqing_hz@163.com To: devel@edk2.groups.io Cc: USER0FISH , sunilvl@ventanamicro.com, Leif Lindholm , Michael D Kinney , Inochi Amaoto Subject: [edk2-devel] [PATCH edk2-platforms v5 2/7] Sophgo/SG2042Pkg: Add Sophgo SDHCI driver. Date: Fri, 13 Oct 2023 11:02:08 +0800 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-CM-TRANSID: _____wDXf98ysyhlyRWnAQ--.9337S2 X-Coremail-Antispam: 1Uf129KBjvAXoWDJr1rXrW5tr4xuw1DWw1ftFb_yoWrKFy5Co Wjqas3Wwn5Jr4Uur1vkwn2gw47XFnYq395XF4Fqry8KFn7JrnagFW5GrWfC34Fq34jyr98 JryfX3s3JrWSyFWUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUcD73DUUUU X-Originating-IP: [211.87.236.31] X-CM-SenderInfo: 5fdl535tlqwslk26il2tof0z/xtbBlxQIxWI0anqNiwAAsO Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,caiyuqing_hz@163.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: JIOm0Bnb2wfPpTel6MqQyLjlx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1697216170084100003 Content-Type: text/plain; charset="utf-8" From: caiyuqing379 This driver implements Sophgo SDHCI controller, which provides the necessary interfaces for handling communication and data transfer with SD cards. Signed-off-by: caiyuqing379 Co-authored-by: USER0FISH Cc: dahogn Cc: meng-cz Cc: yli147 Cc: ChaiEvan Cc: Leif Lindholm Cc: Michael D Kinney Acked-by: Sunil V L --- .../SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.inf | 48 + .../SG2042Pkg/Drivers/SdHostDxe/SdHci.h | 309 ++++++ .../SG2042Pkg/Drivers/SdHostDxe/SdHci.c | 929 ++++++++++++++++++ .../SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.c | 449 +++++++++ 4 files changed, 1735 insertions(+) create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.inf create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHci.h create mode 100755 Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHci.c create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.c diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.inf b/Sil= icon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.inf new file mode 100644 index 000000000000..0a49e8a71e61 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.inf @@ -0,0 +1,48 @@ +## @file +# Component description file for the SD Host Controller DXE driver module. +# +# Copyright (c) 2019, ARM Limited. All rights reserved. +# Copyright (c) 2017, Andrei Warkentin +# Copyright (c) Microsoft Corporation. All rights reserved. +# Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Univers= iy, China.P.R. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# +## + +[Defines] + INF_VERSION =3D 0x0001001B + BASE_NAME =3D SdHostDxe + FILE_GUID =3D 11322596-DD4F-47FA-9E6C-CE787E11E4B1 + MODULE_TYPE =3D UEFI_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D SdHostInitialize + +[Sources] + SdHci.c + SdHci.h + SdHostDxe.c + +[Packages] + EmbeddedPkg/EmbeddedPkg.dec + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + UefiCpuPkg/UefiCpuPkg.dec + Silicon/Sophgo/SG2042Pkg/SG2042Pkg.dec + +[LibraryClasses] + BaseLib + DebugLib + IoLib + MemoryAllocationLib + UefiBootServicesTableLib + UefiDriverEntryPoint + UefiLib + UefiRuntimeServicesTableLib + +[Protocols] + gSophgoMmcHostProtocolGuid ## PRODUCES + +[FixedPcd] + gSophgoSG2042PlatformPkgTokenSpaceGuid.PcdSG2042SDIOBase ## CONSU= MES + gUefiCpuPkgTokenSpaceGuid.PcdCpuRiscVMmuMaxSatpMode ## CONSU= MES diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHci.h b/Silicon/S= ophgo/SG2042Pkg/Drivers/SdHostDxe/SdHci.h new file mode 100644 index 000000000000..e661124666e2 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHci.h @@ -0,0 +1,309 @@ +/** @file + The header file that provides definitions and function declarations + related to the SD Host Controller Interface (SDHCI) for SD card host con= trollers. + + Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserv= ed. + Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef _SD_HCI_H_ +#define _SD_HCI_H_ + +#define SDIO_BASE (FixedPcdGet64(PcdSG2042SDIOBase)) +#define SDHCI_DMA_ADDRESS 0x00 +#define SDHCI_BLOCK_SIZE 0x04 +#define SDHCI_MAKE_BLKSZ(dma, blksz) ((((dma) & 0x7) << 12) | ((blksz) = & 0xFFF)) +#define SDHCI_BLOCK_COUNT 0x06 +#define SDHCI_ARGUMENT 0x08 +#define SDHCI_TRANSFER_MODE 0x0C +#define SDHCI_TRNS_DMA BIT0 +#define SDHCI_TRNS_BLK_CNT_EN BIT1 +#define SDHCI_TRNS_ACMD12 BIT2 +#define SDHCI_TRNS_READ BIT4 +#define SDHCI_TRNS_MULTI BIT5 +#define SDHCI_TRNS_RESP_INT BIT8 +#define SDHCI_COMMAND 0x0E +#define SDHCI_CMD_RESP_MASK 0x03 +#define SDHCI_CMD_CRC 0x08 +#define SDHCI_CMD_INDEX 0x10 +#define SDHCI_CMD_DATA 0x20 +#define SDHCI_CMD_ABORTCMD 0xC0 +#define SDHCI_CMD_RESP_NONE 0x00 +#define SDHCI_CMD_RESP_LONG 0x01 +#define SDHCI_CMD_RESP_SHORT 0x02 +#define SDHCI_CMD_RESP_SHORT_BUSY 0x03 +#define SDHCI_MAKE_CMD(c, f) ((((c) & 0xff) << 8) | ((f) & 0xff= )) +#define SDHCI_RESPONSE_01 0x10 +#define SDHCI_RESPONSE_23 0x14 +#define SDHCI_RESPONSE_45 0x18 +#define SDHCI_RESPONSE_67 0x1C +#define SDHCI_PSTATE 0x24 +#define SDHCI_CMD_INHIBIT BIT0 +#define SDHCI_CMD_INHIBIT_DAT BIT1 +#define SDHCI_BUF_WR_ENABLE BIT10 +#define SDHCI_BUF_RD_ENABLE BIT11 +#define SDHCI_CARD_INSERTED BIT16 +#define SDHCI_HOST_CONTROL 0x28 +#define SDHCI_DAT_XFER_WIDTH BIT1 +#define SDHCI_EXT_DAT_XFER BIT5 +#define SDHCI_CTRL_DMA_MASK 0x18 +#define SDHCI_CTRL_SDMA 0x00 +#define SDHCI_PWR_CONTROL 0x29 +#define SDHCI_BUS_VOL_VDD1_1_8V 0xC +#define SDHCI_BUS_VOL_VDD1_3_0V 0xE +#define SDHCI_BUF_DATA_R 0x20 +#define SDHCI_BLOCK_GAP_CONTROL 0x2A +#define SDHCI_CLK_CTRL 0x2C +#define SDHCI_TOUT_CTRL 0x2E +#define SDHCI_SOFTWARE_RESET 0x2F +#define SDHCI_RESET_CMD 0x02 +#define SDHCI_RESET_DATA 0x04 +#define SDHCI_INT_STATUS 0x30 +#define SDHCI_ERR_INT_STATUS 0x32 +#define SDHCI_INT_CMD_COMPLETE BIT0 +#define SDHCI_INT_XFER_COMPLETE BIT1 +#define SDHCI_INT_DMA_END BIT3 +#define SDHCI_INT_BUF_WR_READY BIT4 +#define SDHCI_INT_BUF_RD_READY BIT5 +#define SDHCI_INT_ERROR BIT15 +#define SDHCI_INT_STATUS_EN 0x34 +#define SDHCI_ERR_INT_STATUS_EN 0x36 +#define SDHCI_INT_CMD_COMPLETE_EN BIT0 +#define SDHCI_INT_XFER_COMPLETE_EN BIT1 +#define SDHCI_INT_DMA_END_EN BIT3 +#define SDHCI_INT_CARD_INSERTION_EN BIT6 +#define SDHCI_INT_ERROR_EN BIT15 +#define SDHCI_SIGNAL_ENABLE 0x38 +#define SDHCI_HOST_CONTROL2 0x3E +#define SDHCI_HOST_VER4_ENABLE BIT12 +#define SDHCI_CAPABILITIES1 0x40 +#define SDHCI_CAPABILITIES2 0x44 +#define SDHCI_ADMA_SA_LOW 0x58 +#define SDHCI_ADMA_SA_HIGH 0x5C +#define SDHCI_HOST_CNTRL_VERS 0xFE +#define SDHCI_UHS_2_TIMER_CNTRL 0xC2 + +#define P_VENDOR_SPECIFIC_AREA 0xE8 +#define P_VENDOR2_SPECIFIC_AREA 0xEA +#define VENDOR_SD_CTRL 0x2C + +#define SDHCI_PHY_R_OFFSET 0x300 + +#define SDHCI_P_PHY_CNFG (SDHCI_PHY_R_OFFSET + 0x00) +#define SDHCI_P_CMDPAD_CNFG (SDHCI_PHY_R_OFFSET + 0x04) +#define SDHCI_P_DATPAD_CNFG (SDHCI_PHY_R_OFFSET + 0x06) +#define SDHCI_P_CLKPAD_CNFG (SDHCI_PHY_R_OFFSET + 0x08) +#define SDHCI_P_STBPAD_CNFG (SDHCI_PHY_R_OFFSET + 0x0A) +#define SDHCI_P_RSTNPAD_CNFG (SDHCI_PHY_R_OFFSET + 0x0C) +#define SDHCI_P_PADTEST_CNFG (SDHCI_PHY_R_OFFSET + 0x0E) +#define SDHCI_P_PADTEST_OUT (SDHCI_PHY_R_OFFSET + 0x10) +#define SDHCI_P_PADTEST_IN (SDHCI_PHY_R_OFFSET + 0x12) +#define SDHCI_P_COMMDL_CNFG (SDHCI_PHY_R_OFFSET + 0x1C) +#define SDHCI_P_SDCLKDL_CNFG (SDHCI_PHY_R_OFFSET + 0x1D) +#define SDHCI_P_SDCLKDL_DC (SDHCI_PHY_R_OFFSET + 0x1E) +#define SDHCI_P_SMPLDL_CNFG (SDHCI_PHY_R_OFFSET + 0x20) +#define SDHCI_P_ATDL_CNFG (SDHCI_PHY_R_OFFSET + 0x21) +#define SDHCI_P_DLL_CTRL (SDHCI_PHY_R_OFFSET + 0x24) +#define SDHCI_P_DLL_CNFG1 (SDHCI_PHY_R_OFFSET + 0x25) +#define SDHCI_P_DLL_CNFG2 (SDHCI_PHY_R_OFFSET + 0x26) +#define SDHCI_P_DLLDL_CNFG (SDHCI_PHY_R_OFFSET + 0x28) +#define SDHCI_P_DLL_OFFST (SDHCI_PHY_R_OFFSET + 0x29) +#define SDHCI_P_DLLMST_TSTDC (SDHCI_PHY_R_OFFSET + 0x2A) +#define SDHCI_P_DLLLBT_CNFG (SDHCI_PHY_R_OFFSET + 0x2C) +#define SDHCI_P_DLL_STATUS (SDHCI_PHY_R_OFFSET + 0x2E) +#define SDHCI_P_DLLDBG_MLKDC (SDHCI_PHY_R_OFFSET + 0x30) +#define SDHCI_P_DLLDBG_SLKDC (SDHCI_PHY_R_OFFSET + 0x32) + +#define PHY_CNFG_PHY_RSTN 0 +#define PHY_CNFG_PHY_PWRGOOD 1 +#define PHY_CNFG_PAD_SP 16 +#define PHY_CNFG_PAD_SP_MSK 0xf +#define PHY_CNFG_PAD_SN 20 +#define PHY_CNFG_PAD_SN_MSK 0xf + +#define PAD_CNFG_RXSEL 0 +#define PAD_CNFG_RXSEL_MSK 0x7 +#define PAD_CNFG_WEAKPULL_EN 3 +#define PAD_CNFG_WEAKPULL_EN_MSK 0x3 +#define PAD_CNFG_TXSLEW_CTRL_P 5 +#define PAD_CNFG_TXSLEW_CTRL_P_MSK 0xf +#define PAD_CNFG_TXSLEW_CTRL_N 9 +#define PAD_CNFG_TXSLEW_CTRL_N_MSK 0xf + +#define COMMDL_CNFG_DLSTEP_SEL 0 +#define COMMDL_CNFG_DLOUT_EN 1 + +#define SDCLKDL_CNFG_EXTDLY_EN 0 +#define SDCLKDL_CNFG_BYPASS_EN 1 +#define SDCLKDL_CNFG_INPSEL_CNFG 2 +#define SDCLKDL_CNFG_INPSEL_CNFG_MSK 0x3 +#define SDCLKDL_CNFG_UPDATE_DC 4 + +#define SMPLDL_CNFG_EXTDLY_EN 0 +#define SMPLDL_CNFG_BYPASS_EN 1 +#define SMPLDL_CNFG_INPSEL_CNFG 2 +#define SMPLDL_CNFG_INPSEL_CNFG_MSK 0x3 +#define SMPLDL_CNFG_INPSEL_OVERRIDE 4 + +#define ATDL_CNFG_EXTDLY_EN 0 +#define ATDL_CNFG_BYPASS_EN 1 +#define ATDL_CNFG_INPSEL_CNFG 2 +#define ATDL_CNFG_INPSEL_CNFG_MSK 0x3 + +#define SD_USE_PIO 0x1 + +/** + card detect status + -1: haven't check the card detect register + 0 : no card detected + 1 : card detected +**/ +#define SDCARD_STATUS_UNKNOWN (-1) +#define SDCARD_STATUS_INSERTED (1) +#define SDCARD_STATUS_NOT_INSERTED (0) + +typedef struct { + UINT32 CmdIdx; + UINT32 CmdArg; + UINT32 ResponseType; + UINT32 Response[4]; +} MMC_CMD; + +typedef struct { + UINTN RegBase; + UINTN VendorBase; + UINTN DescBase; + UINTN DescSize; + INT32 ClkRate; + INT32 BusWidth; + UINT32 Flags; + INT32 CardIn; +} BM_SD_PARAMS; + +extern BM_SD_PARAMS BmParams; + +/** + SD card sends command. + + @param[in] Idx Command ID. + @param[in] Arg Command argument. + @param[in] RespType Type of response data. + @param[out] Response Response data. + + @retval EFI_SUCCESS The command was sent successfully. + @retval EFI_DEVICE_ERROR There was an error during the command t= ransmission or response handling. + @retval EFI_TIMEOUT The command transmission or response ha= ndling timed out. + +**/ +EFI_STATUS +EFIAPI +BmSdSendCmd ( + IN UINT32 Idx, + IN UINT32 Arg, + IN UINT32 RespType, + OUT UINT32 *Response + ); + +/** + Detect the status of the SD card. + + @return The status of the SD card: + - SDCARD_STATUS_INSERTED: The SD card is inserted. + - SDCARD_STATUS_NOT_INSERTED: The SD card is not inserted. + - SDCARD_STATUS_UNKNOWN: The status of the SD card is unkn= own. + +**/ +INT32 +BmSdCardDetect ( + VOID + ); + +/** + Set the input/output settings for the SD card. + + @param[in] Clk The clock frequency for the SD card. + @param[in] Width The bus width for data transfer. + + @retval EFI_SUCCESS The input/output settings were set succe= ssfully. + @retval EFI_UNSUPPORTED The specified bus width is not supported. + +**/ +EFI_STATUS +BmSdSetIos ( + IN UINT32 Clk, + IN UINT32 Width + ); + +/** + Prepare the SD card for data transfer. + Set the number and size of data blocks before sending IO commands to the= SD card. + + @param[in] Lba Logical Block Address. + @param[in] Buf Buffer Address. + @param[in] Size Size of Data Blocks. + + @retval EFI_SUCCESS The SD card was prepared successfully. + @retval Other An error occurred during the preparation= of the SD card. + +**/ +EFI_STATUS +BmSdPrepare ( + IN INT32 Lba, + IN UINTN Buf, + IN UINTN Size + ); + +/** + SD card sends command to read data blocks. + + @param[in] Lba Logical Block Address. + @param[in] Buf Buffer Address. + @param[in] Size Size of Data Blocks. + + @retval EFI_SUCCESS The command to read data blocks was sen= t successfully. + @retval EFI_TIMEOUT The command transmission or data transf= er timed out. + +**/ +EFI_STATUS +BmSdRead ( + IN INT32 Lba, + IN UINT32* Buf, + IN UINTN Size + ); + +/** + SD card sends commands to write data blocks. + + @param[in] Lba Logical Block Address. + @param[in] Buf Buffer Address. + @param[in] Size Size of Data Blocks. + + @retval EFI_SUCCESS The command to write data blocks was se= nt successfully. + @retval EFI_TIMEOUT The command transmission or data transf= er timed out. + +**/ +EFI_STATUS +BmSdWrite ( + IN INT32 Lba, + IN UINT32* Buf, + IN UINTN Size + ); + +/** + Initialize the SD card. + + This function performs the initialization of the SD card hardware and se= ttings. + + @param[in] Flags Initialization flags. + + @retval EFI_SUCCESS The SD card was initialized successfully. + +**/ +EFI_STATUS +SdInit ( + IN UINT32 flags + ); + +#endif diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHci.c b/Silicon/S= ophgo/SG2042Pkg/Drivers/SdHostDxe/SdHci.c new file mode 100755 index 000000000000..dc4b27c453db --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHci.c @@ -0,0 +1,929 @@ +/** @file + The implementation for handling SD card operations using the SD Host Con= troller Interface (SDHCI). + + Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserv= ed. + Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "SdHci.h" + +#define SDCARD_INIT_FREQ (200 * 1000) +#define SDCARD_TRAN_FREQ (6 * 1000 * 1000) + +/** + Return the clock rate of SD card. + + @retval the clock rate of SD card. + +**/ +INT32 +BmGetSdClk ( + VOID + ) +{ + return 100*1000*1000; +} + +/** + SD card sends command with response block data. + + @param Cmd Command sent by SD card. + + @retval EFI_SUCCESS The command with response block data was= sent successfully. + @retval EFI_DEVICE_ERROR There was an error during the command tr= ansmission or response handling. + @retval EFI_TIMEOUT The command transmission or response han= dling timed out. + +**/ +STATIC +EFI_STATUS +SdSendCmdWithData ( + IN OUT MMC_CMD *Cmd + ) +{ + UINTN Base; + UINT32 Mode; + UINT32 State; + UINT32 DmaAddr; + UINT32 Flags; + UINT32 Timeout; + + Base =3D BmParams.RegBase; + Mode =3D 0; + Flags =3D 0; + + // Make sure Cmd line is clear + while (1) { + if (!(MmioRead32 (Base + SDHCI_PSTATE) & SDHCI_CMD_INHIBIT)) + break; + } + + switch (Cmd->CmdIdx) { + case MMC_CMD17: + case MMC_CMD18: + case MMC_ACMD51: + Mode =3D SDHCI_TRNS_BLK_CNT_EN | SDHCI_TRNS_MULTI | SDHCI_TRNS_READ; + if (!(BmParams.Flags & SD_USE_PIO)) + Mode |=3D SDHCI_TRNS_DMA; + break; + case MMC_CMD24: + case MMC_CMD25: + Mode =3D (SDHCI_TRNS_BLK_CNT_EN | SDHCI_TRNS_MULTI) & ~SDHCI_TRNS_RE= AD; + if (!(BmParams.Flags & SD_USE_PIO)) + Mode |=3D SDHCI_TRNS_DMA; + break; + default: + ASSERT(0); + } + + MmioWrite16 (Base + SDHCI_TRANSFER_MODE, Mode); + MmioWrite32 (Base + SDHCI_ARGUMENT, Cmd->CmdArg); + + // set Cmd Flags + if (Cmd->CmdIdx =3D=3D MMC_CMD0) + Flags |=3D SDHCI_CMD_RESP_NONE; + else { + if (Cmd->ResponseType & MMC_RSP_136) + Flags |=3D SDHCI_CMD_RESP_LONG; + else + Flags |=3D SDHCI_CMD_RESP_SHORT; + if (Cmd->ResponseType & MMC_RSP_CRC) + Flags |=3D SDHCI_CMD_CRC; + if (Cmd->ResponseType & MMC_RSP_CMD_IDX) + Flags |=3D SDHCI_CMD_INDEX; + } + + Flags |=3D SDHCI_CMD_DATA; + + // issue the Cmd + MmioWrite16 (Base + SDHCI_COMMAND, SDHCI_MAKE_CMD(Cmd->CmdIdx, Flags)); + + // check Cmd complete if necessary + if ((MmioRead16 (Base + SDHCI_TRANSFER_MODE) & SDHCI_TRNS_RESP_INT) =3D= =3D 0) { + Timeout =3D 100000; + while (1) { + State =3D MmioRead16 (Base + SDHCI_INT_STATUS); + if (State & SDHCI_INT_ERROR) { + DEBUG ((DEBUG_ERROR, "%a: interrupt error: 0x%x 0x%x\n", __func__,= MmioRead16 (Base + SDHCI_INT_STATUS), + MmioRead16 (Base + SDHCI_ERR_INT_STATUS))); + return EFI_DEVICE_ERROR; + } + if (State & SDHCI_INT_CMD_COMPLETE) { + MmioWrite16 (Base + SDHCI_INT_STATUS, State | SDHCI_INT_CMD_COMPLE= TE); + break; + } + + gBS->Stall (1); + if (!Timeout--) { + DEBUG ((DEBUG_ERROR, "%a: Timeout!\n", __func__)); + return EFI_TIMEOUT; + } + } + + // get Cmd respond + if (Flags !=3D SDHCI_CMD_RESP_NONE) + Cmd->Response[0] =3D MmioRead32 (Base + SDHCI_RESPONSE_01); + if (Flags & SDHCI_CMD_RESP_LONG) { + Cmd->Response[1] =3D MmioRead32 (Base + SDHCI_RESPONSE_23); + Cmd->Response[2] =3D MmioRead32 (Base + SDHCI_RESPONSE_45); + Cmd->Response[3] =3D MmioRead32 (Base + SDHCI_RESPONSE_67); + } + } + + // check dma/transfer complete + if (!(BmParams.Flags & SD_USE_PIO)) { + while (1) { + State =3D MmioRead16 (Base + SDHCI_INT_STATUS); + if (State & SDHCI_INT_ERROR) { + DEBUG ((DEBUG_ERROR, "%a: interrupt error: 0x%x 0x%x\n", __func__,= MmioRead16 (Base + SDHCI_INT_STATUS), + MmioRead16 (Base + SDHCI_ERR_INT_STATUS))); + return EFI_DEVICE_ERROR; + } + + if (State & SDHCI_INT_XFER_COMPLETE) { + MmioWrite16 (Base + SDHCI_INT_STATUS, State); + break; + } + + if (State & SDHCI_INT_DMA_END) { + MmioWrite16 (Base + SDHCI_INT_STATUS, State); + if (MmioRead16 (Base + SDHCI_HOST_CONTROL2) & SDHCI_HOST_VER4_ENAB= LE) { + DmaAddr =3D MmioRead32 (Base + SDHCI_ADMA_SA_LOW); + MmioWrite32 (Base + SDHCI_ADMA_SA_LOW, DmaAddr); + MmioWrite32 (Base + SDHCI_ADMA_SA_HIGH, 0); + } else { + DmaAddr =3D MmioRead32 (Base + SDHCI_DMA_ADDRESS); + MmioWrite32 (Base + SDHCI_DMA_ADDRESS, DmaAddr); + } + } + + } + } + + return EFI_SUCCESS; +} + +/** + SD card sends command without response block data. + + @param Cmd Command sent by SD card. + + @retval EFI_SUCCESS The command without response block data = was sent successfully. + @retval EFI_DEVICE_ERROR There was an error during the command tr= ansmission or response handling. + @retval EFI_TIMEOUT The command transmission or response han= dling timed out. + +**/ +STATIC +EFI_STATUS +SdSendCmdWithoutData ( + IN OUT MMC_CMD *Cmd + ) +{ + UINTN Base; + UINT32 State; + UINT32 Flags; + UINT32 Timeout; + + Base =3D BmParams.RegBase; + Flags =3D 0x0; + Timeout =3D 10000; + + // make sure Cmd line is clear + while (1) { + if (!(MmioRead32 (Base + SDHCI_PSTATE) & SDHCI_CMD_INHIBIT)) + break; + } + + // set Cmd Flags + if (Cmd->CmdIdx =3D=3D MMC_CMD0) + Flags |=3D SDHCI_CMD_RESP_NONE; + else if (Cmd->CmdIdx =3D=3D MMC_CMD1) + Flags |=3D SDHCI_CMD_RESP_SHORT; + else if (Cmd->CmdIdx =3D=3D MMC_ACMD41) + Flags |=3D SDHCI_CMD_RESP_SHORT; + else { + if (Cmd->ResponseType & MMC_RSP_136) + Flags |=3D SDHCI_CMD_RESP_LONG; + else + Flags |=3D SDHCI_CMD_RESP_SHORT; + if (Cmd->ResponseType & MMC_RSP_CRC) + Flags |=3D SDHCI_CMD_CRC; + if (Cmd->ResponseType & MMC_RSP_CMD_IDX) + Flags |=3D SDHCI_CMD_INDEX; + } + + // make sure dat line is clear if necessary + if (Flags !=3D SDHCI_CMD_RESP_NONE) { + while (1) { + if (!(MmioRead32 (Base + SDHCI_PSTATE) & SDHCI_CMD_INHIBIT_DAT)) + break; + } + } + + // issue the Cmd + MmioWrite32 (Base + SDHCI_ARGUMENT, Cmd->CmdArg); + MmioWrite16 (Base + SDHCI_COMMAND, SDHCI_MAKE_CMD(Cmd->CmdIdx, Flags)); + + // check Cmd complete + Timeout =3D 100000; + while (1) { + State =3D MmioRead16 (Base + SDHCI_INT_STATUS); + if (State & SDHCI_INT_ERROR) { + DEBUG ((DEBUG_ERROR, "%a: interrupt error: 0x%x 0x%x\n", __func__, = MmioRead16 (Base + SDHCI_INT_STATUS), + MmioRead16 (Base + SDHCI_ERR_INT_STATUS))); + return EFI_DEVICE_ERROR; + } + if (State & SDHCI_INT_CMD_COMPLETE) { + MmioWrite16 (Base + SDHCI_INT_STATUS, State | SDHCI_INT_CMD_COMPLETE= ); + break; + } + + gBS->Stall (1); + if (!Timeout--) { + DEBUG ((DEBUG_ERROR, "%a: Timeout!\n", __func__)); + return EFI_TIMEOUT; + } + } + + // get Cmd respond + if (!(Flags & SDHCI_CMD_RESP_NONE)) + Cmd->Response[0] =3D MmioRead32 (Base + SDHCI_RESPONSE_01); + if (Flags & SDHCI_CMD_RESP_LONG) { + Cmd->Response[1] =3D MmioRead32 (Base + SDHCI_RESPONSE_23); + Cmd->Response[2] =3D MmioRead32 (Base + SDHCI_RESPONSE_45); + Cmd->Response[3] =3D MmioRead32 (Base + SDHCI_RESPONSE_67); + } + + return EFI_SUCCESS; +} + +/** + SD card sends command. + + @param[in] Idx Command ID. + @param[in] Arg Command argument. + @param[in] RespType Type of response data. + @param[out] Response Response data. + + @retval EFI_SUCCESS The command was sent successfully. + @retval EFI_DEVICE_ERROR There was an error during the command t= ransmission or response handling. + @retval EFI_TIMEOUT The command transmission or response ha= ndling timed out. + +**/ +EFI_STATUS +EFIAPI +BmSdSendCmd ( + IN UINT32 Idx, + IN UINT32 Arg, + IN UINT32 RespType, + OUT UINT32 *Response + ) +{ + EFI_STATUS Status; + MMC_CMD Cmd; + + // DEBUG ((DEBUG_INFO, "%a: SDHCI Cmd, Idx=3D%d, Arg=3D0x%x, ResponseTyp= e=3D0x%x\n", __func__, Idx, Arg, RespType)); + + ZeroMem(&Cmd,sizeof(MMC_CMD)); + + Cmd.CmdIdx =3D Idx; + Cmd.CmdArg =3D Arg; + Cmd.ResponseType =3D RespType; + + switch (Cmd.CmdIdx) { + case MMC_CMD17: + case MMC_CMD18: + case MMC_CMD24: + case MMC_CMD25: + case MMC_ACMD51: + Status =3D SdSendCmdWithData(&Cmd); + break; + default: + Status =3D SdSendCmdWithoutData(&Cmd); + } + + if ((Status =3D=3D EFI_SUCCESS) && (Response !=3D NULL)) { + for (INT32 I =3D 0; I < 4; I++) { + *Response =3D Cmd.Response[I]; + Response++; + } + } + return Status; +} + +/** + Set clock frequency of SD card. + + @param[in] Clk The clock frequency of SD card. + +**/ +VOID +SdSetClk ( + IN INT32 Clk + ) +{ + INT32 I; + INT32 Div; + UINTN Base; + + ASSERT (Clk > 0); + + if (BmParams.ClkRate <=3D Clk) { + Div =3D 0; + } else { + for (Div =3D 0x1; Div < 0xFF; Div++) { + if (BmParams.ClkRate / (2 * Div) <=3D Clk) + break; + } + } + ASSERT (Div <=3D 0xFF); + + Base =3D BmParams.RegBase; + if (MmioRead16 (Base + SDHCI_HOST_CONTROL2) & (1 << 15)) { + //verbose("Use SDCLK Preset Value\n"); + } else { + //verbose("Set SDCLK by driver. Div=3D0x%x(%d)\n", Div, Div); + MmioWrite16 (Base + SDHCI_CLK_CTRL, + MmioRead16 (Base + SDHCI_CLK_CTRL) & ~0x9); // disable INTERNA= L_CLK_EN and PLL_ENABLE + MmioWrite16 (Base + SDHCI_CLK_CTRL, + (MmioRead16 (Base + SDHCI_CLK_CTRL) & 0xDF) | Div << 8); // se= t Clk Div + MmioWrite16 (Base + SDHCI_CLK_CTRL, + MmioRead16 (Base + SDHCI_CLK_CTRL) | 0x1); // set INTERNAL_CLK= _EN + + for (I =3D 0; I <=3D 150000; I +=3D 100) { + if (MmioRead16 (Base + SDHCI_CLK_CTRL) & 0x2) + break; + gBS->Stall (100); + } + + if (I > 150000) { + DEBUG ((DEBUG_ERROR, "%a: SD INTERNAL_CLK_EN setting FAILED!\n", __f= unc__)); + ASSERT(0); + } + + MmioWrite16 (Base + SDHCI_CLK_CTRL, MmioRead16 (Base + SDHCI_CLK_CTRL)= | 0x8); // set PLL_ENABLE + + for (I =3D 0; I <=3D 150000; I +=3D 100) { + if (MmioRead16 (Base + SDHCI_CLK_CTRL) & 0x2) + return; + gBS->Stall (100); + } + } + + DEBUG ((DEBUG_INFO, "%a: SD PLL setting FAILED!\n", __func__)); +} + +/** + Change clock frequency of SD card. + + @param[in] Clk The clock frequency of SD card. + +**/ +VOID +SdChangeClk ( + IN INT32 Clk + ) +{ + INT32 I; + INT32 Div; + UINTN Base; + + ASSERT (Clk > 0); + + if (BmParams.ClkRate <=3D Clk) { + Div =3D 0; + } else { + for (Div =3D 0x1; Div < 0xFF; Div++) { + if (BmParams.ClkRate / (2 * Div) <=3D Clk) + break; + } + } + ASSERT (Div <=3D 0xFF); + + Base =3D BmParams.RegBase; + + MmioWrite16 (Base + SDHCI_CLK_CTRL, + MmioRead16 (Base + SDHCI_CLK_CTRL) & ~(0x1 << 2)); // stop SD cl= ock + + MmioWrite16 (Base + SDHCI_CLK_CTRL, + MmioRead16 (Base + SDHCI_CLK_CTRL) & ~0x8); // disable PLL_ENAB= LE + + if (MmioRead16 (Base + SDHCI_HOST_CONTROL2) & (1 << 15)) { + MmioWrite16 (Base + SDHCI_HOST_CONTROL2, + MmioRead16 (Base + SDHCI_HOST_CONTROL2) & ~0x7); // clr UHS_MO= DE_SEL + } else { + MmioWrite16 (Base + SDHCI_CLK_CTRL, + (MmioRead16 (Base + SDHCI_CLK_CTRL) & 0xDF) | Div << 8); // se= t Clk Div + MmioWrite16 (Base + SDHCI_CLK_CTRL, + MmioRead16 (Base + SDHCI_CLK_CTRL) & ~(0x1 << 5)); // CLK_GEN_= SELECT + } + + MmioWrite16 (Base + SDHCI_CLK_CTRL, + MmioRead16 (Base + SDHCI_CLK_CTRL) | 0xc); // enable PLL_ENABLE + + for (I =3D 0; I <=3D 150000; I +=3D 100) { + if (MmioRead16 (Base + SDHCI_CLK_CTRL) & 0x2) + return; + gBS->Stall (100); + } + + DEBUG ((DEBUG_INFO, "%a: SD PLL setting FAILED!\n", __func__)); +} + +/** + Detect the status of the SD card. + + @return The status of the SD card: + - SDCARD_STATUS_INSERTED: The SD card is inserted. + - SDCARD_STATUS_NOT_INSERTED: The SD card is not inserted. + - SDCARD_STATUS_UNKNOWN: The status of the SD card is unkn= own. + +**/ +INT32 +BmSdCardDetect ( + VOID + ) +{ + UINTN Base; + UINTN Reg; + + Base =3D BmParams.RegBase; + + if (BmParams.CardIn !=3D SDCARD_STATUS_UNKNOWN) + return BmParams.CardIn; + + MmioWrite16 (Base + SDHCI_INT_STATUS_EN, + MmioRead16 (Base + SDHCI_INT_STATUS_EN) | SDHCI_INT_CARD_INSERTI= ON_EN); + + Reg =3D MmioRead32 (Base + SDHCI_PSTATE); + + if (Reg & SDHCI_CARD_INSERTED) + BmParams.CardIn =3D SDCARD_STATUS_INSERTED; + else + BmParams.CardIn =3D SDCARD_STATUS_NOT_INSERTED; + + return BmParams.CardIn; +} + +/** + SD card hardware initialization. + +**/ +STATIC +VOID +SdHwInit ( + VOID + ) +{ + UINTN Base; + + Base =3D BmParams.RegBase; + BmParams.VendorBase =3D Base + (MmioRead16 (Base + P_VENDOR_SPECIFIC_ARE= A) & ((1 << 12) - 1)); + + // deasset reset of phy + MmioWrite32 (Base + SDHCI_P_PHY_CNFG, MmioRead32 (Base + SDHCI_P_PHY_CNF= G) | (1 << PHY_CNFG_PHY_RSTN)); + + // reset data & Cmd + MmioWrite8 (Base + SDHCI_SOFTWARE_RESET, 0x6); + + // init common parameters + MmioWrite8 (Base + SDHCI_PWR_CONTROL, (0x7 << 1)); + MmioWrite8 (Base + SDHCI_TOUT_CTRL, 0xe); // for TMCLK 50Khz + MmioWrite16 (Base + SDHCI_HOST_CONTROL2, + MmioRead16 (Base + SDHCI_HOST_CONTROL2) | 1 << 11); // set cmd2= 3 support + MmioWrite16 (Base + SDHCI_CLK_CTRL, MmioRead16 (Base + SDHCI_CLK_CTRL) &= ~(0x1 << 5)); // divided clock Mode + + // set host version 4 parameters + MmioWrite16 (Base + SDHCI_HOST_CONTROL2, + MmioRead16 (Base + SDHCI_HOST_CONTROL2) | (1 << 12)); // set HOS= T_VER4_ENABLE + if (MmioRead32 (Base + SDHCI_CAPABILITIES1) & (0x1 << 27)) { + MmioWrite16 (Base + SDHCI_HOST_CONTROL2, + MmioRead16 (Base + SDHCI_HOST_CONTROL2) | 0x1 << 13); // set 6= 4bit addressing + } + + // if support asynchronous int + if (MmioRead32 (Base + SDHCI_CAPABILITIES1) & (0x1 << 29)) + MmioWrite16 (Base + SDHCI_HOST_CONTROL2, + MmioRead16 (Base + SDHCI_HOST_CONTROL2) | (0x1 << 14)); // ena= ble async int + // give some time to power down card + gBS->Stall (20000); + + MmioWrite16 (Base + SDHCI_HOST_CONTROL2, + MmioRead16 (Base + SDHCI_HOST_CONTROL2) & ~(0x1 << 8)); // clr U= HS2_IF_ENABLE + MmioWrite8 (Base + SDHCI_PWR_CONTROL, + MmioRead8 (Base + SDHCI_PWR_CONTROL) | 0x1); // set SD_BUS_PWR_V= DD1 + MmioWrite16 (Base + SDHCI_HOST_CONTROL2, + MmioRead16 (Base + SDHCI_HOST_CONTROL2) & ~0x7); // clr UHS_MODE= _SEL + SdSetClk (SDCARD_INIT_FREQ); + gBS->Stall (50000); + + MmioWrite16 (Base + SDHCI_CLK_CTRL, + MmioRead16 (Base + SDHCI_CLK_CTRL) | (0x1 << 2)); // supply SD c= lock + gBS->Stall (400); // wait for voltage ramp up time at least 74 cycle, 40= 0us is 80 cycles for 200Khz + + MmioWrite16 (Base + SDHCI_INT_STATUS, MmioRead16 (Base + SDHCI_INT_STATU= S) | (0x1 << 6)); + + // we enable all interrupt Status here for testing + MmioWrite16 (Base + SDHCI_INT_STATUS_EN, MmioRead16 (Base + SDHCI_INT_ST= ATUS_EN) | 0xFFFF); + MmioWrite16 (Base + SDHCI_ERR_INT_STATUS_EN, MmioRead16 (Base + SDHCI_ER= R_INT_STATUS_EN) | 0xFFFF); + + //verbose("SD init done\n"); +} + +/** + Set the input/output settings for the SD card. + + @param[in] Clk The clock frequency for the SD card. + @param[in] Width The bus width for data transfer. + + @retval EFI_SUCCESS The input/output settings were set succe= ssfully. + @retval EFI_UNSUPPORTED The specified bus width is not supported. + +**/ +EFI_STATUS +BmSdSetIos ( + IN UINT32 Clk, + IN UINT32 Width + ) +{ + switch (Width) { + case MMC_BUS_WIDTH_1: + MmioWrite8 (BmParams.RegBase + SDHCI_HOST_CONTROL, + MmioRead8 (BmParams.RegBase + SDHCI_HOST_CONTROL) & + ~SDHCI_DAT_XFER_WIDTH); + break; + case MMC_BUS_WIDTH_4: + MmioWrite8 (BmParams.RegBase + SDHCI_HOST_CONTROL, + MmioRead8 (BmParams.RegBase + SDHCI_HOST_CONTROL) | + SDHCI_DAT_XFER_WIDTH); + break; + default: + ASSERT (0); + } + + SdChangeClk (Clk); + + return EFI_SUCCESS; +} + +/** + Prepare the SD card for data transfer. + Set the number and size of data blocks before sending IO commands to the= SD card. + + @param[in] Lba Logical Block Address. + @param[in] Buf Buffer Address. + @param[in] Size Size of Data Blocks. + + @retval EFI_SUCCESS The SD card was prepared successfully. + @retval Other An error occurred during the preparation= of the SD card. + +**/ +EFI_STATUS +BmSdPrepare ( + IN INT32 Lba, + IN UINTN Buf, + IN UINTN Size + ) +{ + UINTN LoadAddr; + UINTN Base; + UINT32 BlockCnt; + UINT32 BlockSize; + UINT8 Tmp; + + LoadAddr =3D Buf; + + if (Size >=3D MMC_BLOCK_SIZE) { + // CMD17, 18, 24, 25 + // ASSERT (((LoadAddr & MMC_BLOCK_MASK) =3D=3D 0) && ((Size % MMC_BLOC= K_SIZE) =3D=3D 0)); + BlockSize =3D MMC_BLOCK_SIZE; + BlockCnt =3D Size / MMC_BLOCK_SIZE; + } else { + // ACMD51 + ASSERT (((LoadAddr & 8) =3D=3D 0) && ((Size % 8) =3D=3D 0)); + BlockSize =3D 8; + BlockCnt =3D Size / 8; + } + + Base =3D BmParams.RegBase; + + if (!(BmParams.Flags & SD_USE_PIO)) { + if (MmioRead16 (Base + SDHCI_HOST_CONTROL2) & SDHCI_HOST_VER4_ENABLE) { + MmioWrite32 (Base + SDHCI_ADMA_SA_LOW, LoadAddr); + MmioWrite32 (Base + SDHCI_ADMA_SA_HIGH, (LoadAddr >> 32)); + MmioWrite32 (Base + SDHCI_DMA_ADDRESS, BlockCnt); + MmioWrite16 (Base + SDHCI_BLOCK_COUNT, 0); + } else { + ASSERT((LoadAddr >> 32) =3D=3D 0); + MmioWrite32 (Base + SDHCI_DMA_ADDRESS, LoadAddr); + MmioWrite16 (Base + SDHCI_BLOCK_COUNT, BlockCnt); + } + + // 512K bytes SDMA buffer boundary + MmioWrite16 (Base + SDHCI_BLOCK_SIZE, SDHCI_MAKE_BLKSZ(7, BlockSize)); + + // select SDMA + Tmp =3D MmioRead8 (Base + SDHCI_HOST_CONTROL); + Tmp &=3D ~SDHCI_CTRL_DMA_MASK; + Tmp |=3D SDHCI_CTRL_SDMA; + MmioWrite8 (Base + SDHCI_HOST_CONTROL, Tmp); + } else { + MmioWrite16 (Base + SDHCI_BLOCK_SIZE, BlockSize); + MmioWrite16 (Base + SDHCI_BLOCK_COUNT, BlockCnt); + } + + return EFI_SUCCESS; +} + +/** + SD card sends command to read data blocks. + + @param[in] Lba Logical Block Address. + @param[in] Buf Buffer Address. + @param[in] Size Size of Data Blocks. + + @retval EFI_SUCCESS The command to read data blocks was sen= t successfully. + @retval EFI_TIMEOUT The command transmission or data transf= er timed out. + +**/ +EFI_STATUS +BmSdRead ( + IN INT32 Lba, + IN UINT32* Buf, + IN UINTN Size + ) +{ + UINT32 Timeout; + UINTN Base; + UINT32 *Data; + UINT32 BlockSize; + UINT32 BlockCnt; + UINT32 Status; + + Timeout =3D 0; + Base =3D BmParams.RegBase; + Data =3D Buf; + BlockSize =3D 0; + BlockCnt =3D 0; + Status =3D 0; + + if (BmParams.Flags & SD_USE_PIO) { + BlockSize =3D MmioRead16 (Base + SDHCI_BLOCK_SIZE); + BlockCnt =3D Size / BlockSize; + BlockSize /=3D 4; + + for (INT32 I =3D 0; I < BlockCnt; ) { + Status =3D MmioRead16 (Base + SDHCI_INT_STATUS); + if ((Status & SDHCI_INT_BUF_RD_READY) && + (MmioRead32 (Base + SDHCI_PSTATE) & SDHCI_BUF_RD_ENABLE)) { + MmioWrite16 (Base + SDHCI_INT_STATUS, SDHCI_INT_BUF_RD_READY); + for (INT32 j =3D 0; j < BlockSize; j++) { + *(Data++) =3D MmioRead32 (Base + SDHCI_BUF_DATA_R); + } + + Timeout =3D 0; + I++; + } else { + gBS->Stall (1); + Timeout++; + } + + if (Timeout >=3D 10000) { + DEBUG ((DEBUG_INFO, "%a: sdhci read data Timeout\n", __func__)); + goto Timeout; + } + } + + Timeout =3D 0; + while (1) { + Status =3D MmioRead16 (Base + SDHCI_INT_STATUS); + if (Status & SDHCI_INT_XFER_COMPLETE) { + MmioWrite16 (Base + SDHCI_INT_STATUS, + Status | SDHCI_INT_XFER_COMPLETE); + + return EFI_SUCCESS; + } else { + gBS->Stall (1); + Timeout++; + } + + if (Timeout >=3D 10000) { + DEBUG ((DEBUG_INFO, "%a:wait xfer complete Timeout\n", __func__)); + goto Timeout; + } + } + } else { + return EFI_SUCCESS; + } + +Timeout: + return EFI_TIMEOUT; + +} + +/** + SD card sends commands to write data blocks. + + @param[in] Lba Logical Block Address. + @param[in] Buf Buffer Address. + @param[in] Size Size of Data Blocks. + + @retval EFI_SUCCESS The command to write data blocks was se= nt successfully. + @retval EFI_TIMEOUT The command transmission or data transf= er timed out. + +**/ +EFI_STATUS +BmSdWrite ( + IN INT32 Lba, + IN UINT32* Buf, + IN UINTN Size + ) +{ + UINT32 Timeout; + UINTN Base; + UINT32 *Data; + UINT32 BlockSize; + UINT32 BlockCnt; + UINT32 Status; + + Timeout =3D 0; + Base =3D BmParams.RegBase; + Data =3D Buf; + BlockSize =3D 0; + BlockCnt =3D 0; + Status =3D 0; + + if (BmParams.Flags & SD_USE_PIO) { + BlockSize =3D MmioRead16 (Base + SDHCI_BLOCK_SIZE); + BlockCnt =3D Size / BlockSize; + BlockSize /=3D 4; + + for (INT32 j =3D 0; j < BlockSize; j++) { + MmioWrite32 (Base + SDHCI_BUF_DATA_R, *(Data++)); + } + + for (INT32 I =3D 0; I < BlockCnt-1; ) { + Status =3D MmioRead16 (Base + SDHCI_INT_STATUS); + if ((Status & SDHCI_INT_BUF_WR_READY) && + (MmioRead32 (Base + SDHCI_PSTATE) & + SDHCI_BUF_WR_ENABLE)) { + MmioWrite16 (Base + SDHCI_INT_STATUS, SDHCI_INT_BUF_WR_READY); + for (INT32 j =3D 0; j < BlockSize; j++) { + MmioWrite32 (Base + SDHCI_BUF_DATA_R, *(Data++)); + } + + Timeout =3D 0; + I++; + } else { + gBS->Stall (1); + Timeout++; + } + + if (Timeout >=3D 10000000) { + DEBUG ((DEBUG_INFO, "%a:sdhci write data Timeout\n", __func__)); + goto Timeout; + } + } + + Timeout =3D 0; + while (1) { + Status =3D MmioRead16 (Base + SDHCI_INT_STATUS); + if (Status & SDHCI_INT_XFER_COMPLETE) { + MmioWrite16 (Base + SDHCI_INT_STATUS, + Status | SDHCI_INT_XFER_COMPLETE); + + return EFI_SUCCESS; + } else { + gBS->Stall (1); + Timeout++; + } + + if (Timeout >=3D 10000) { + DEBUG ((DEBUG_INFO, "%a:wait xfer complete Timeout\n", __func__)); + goto Timeout; + } + } + } else + return EFI_SUCCESS; + +Timeout: + return EFI_TIMEOUT; +} + +/** + Initialize the SD PHY. + + This function performs the initialization of the SD PHY hardware. + +**/ +VOID +SdPhyInit ( + VOID + ) +{ + UINTN Base; + INT32 RetryCount; + + Base =3D BmParams.RegBase; + RetryCount =3D 100; + + // reset hardware + MmioWrite8 (Base + SDHCI_SOFTWARE_RESET, 0x7); + while (MmioRead8 (Base + SDHCI_SOFTWARE_RESET)) { + if (RetryCount-- > 0) + gBS->Stall (10000); + else + break; + } + + // Wait for the PHY power on ready + RetryCount =3D 100; + while (!(MmioRead32 (Base + SDHCI_P_PHY_CNFG) & (1 << PHY_CNFG_PHY_PWRGO= OD))) { + if (RetryCount-- > 0) + gBS->Stall (10000); + else + break; + } + + // Asset reset of phy + MmioAnd32 (Base + SDHCI_P_PHY_CNFG, ~(1 << PHY_CNFG_PHY_RSTN)); + + // Set PAD_SN PAD_SP + MmioWrite32 (Base + SDHCI_P_PHY_CNFG, + (1 << PHY_CNFG_PHY_PWRGOOD) | (0x9 << PHY_CNFG_PAD_SP) | (0x8 <<= PHY_CNFG_PAD_SN)); + + // Set CMDPAD + MmioWrite16 (Base + SDHCI_P_CMDPAD_CNFG, + (0x2 << PAD_CNFG_RXSEL) | (1 << PAD_CNFG_WEAKPULL_EN) | + (0x3 << PAD_CNFG_TXSLEW_CTRL_P) | (0x2 << PAD_CNFG_TXSLEW_CTRL_N= )); + + // Set DATAPAD + MmioWrite16 (Base + SDHCI_P_DATPAD_CNFG, + (0x2 << PAD_CNFG_RXSEL) | (1 << PAD_CNFG_WEAKPULL_EN) | + (0x3 << PAD_CNFG_TXSLEW_CTRL_P) | (0x2 << PAD_CNFG_TXSLEW_CTRL_N= )); + + // Set CLKPAD + MmioWrite16 (Base + SDHCI_P_CLKPAD_CNFG, + (0x2 << PAD_CNFG_RXSEL) | (0x3 << PAD_CNFG_TXSLEW_CTRL_P) | (0x2= << PAD_CNFG_TXSLEW_CTRL_N)); + + // Set STB_PAD + MmioWrite16 (Base + SDHCI_P_STBPAD_CNFG, + (0x2 << PAD_CNFG_RXSEL) | (0x2 << PAD_CNFG_WEAKPULL_EN) | + (0x3 << PAD_CNFG_TXSLEW_CTRL_P) | (0x2 << PAD_CNFG_TXSLEW_CTRL_N= )); + + // Set RSTPAD + MmioWrite16 (Base + SDHCI_P_RSTNPAD_CNFG, + (0x2 << PAD_CNFG_RXSEL) | (1 << PAD_CNFG_WEAKPULL_EN) | + (0x3 << PAD_CNFG_TXSLEW_CTRL_P) | (0x2 << PAD_CNFG_TXSLEW_CTRL_N= )); + + // Set SDCLKDL_CNFG, EXTDLY_EN =3D 1, fix delay + MmioWrite8 (Base + SDHCI_P_SDCLKDL_CNFG, (1 << SDCLKDL_CNFG_EXTDLY_EN)); + + // Set SMPLDL_CNFG, Bypass + MmioWrite8 (Base + SDHCI_P_SMPLDL_CNFG, (1 << SMPLDL_CNFG_BYPASS_EN)); + + // Set ATDL_CNFG, tuning Clk not use for init + MmioWrite8 (Base + SDHCI_P_ATDL_CNFG, (2 << ATDL_CNFG_INPSEL_CNFG)); + + return; +} + +/** + Initialize the SD card. + + This function performs the initialization of the SD card hardware and se= ttings. + + @param[in] Flags Initialization flags. + + @retval EFI_SUCCESS The SD card was initialized successfully. + +**/ +EFI_STATUS +SdInit ( + IN UINT32 Flags +) +{ + BmParams.ClkRate =3D BmGetSdClk (); + + DEBUG ((DEBUG_INFO, "SD initializing %dHz\n", BmParams.ClkRate)); + + BmParams.Flags =3D Flags; + + SdPhyInit (); + + SdHwInit (); + + return EFI_SUCCESS; +} diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.c b/Silic= on/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.c new file mode 100644 index 000000000000..a59dbb12046d --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.c @@ -0,0 +1,449 @@ +/** @file + This file implements the SD host controller driver for UEFI systems. + The file contains the implementation of the EFI_MMC_HOST_PROTOCOL, which= provides + the necessary interfaces for handling communication and data transfer wi= th SD cards. + + Copyright (c) 2017, Andrei Warkentin + Copyright (c) Microsoft Corporation. All rights reserved. + Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "SdHci.h" + +#define SDHOST_BLOCK_BYTE_LENGTH 512 + +#define DEBUG_MMCHOST_SD DEBUG_VERBOSE +#define DEBUG_MMCHOST_SD_INFO DEBUG_INFO +#define DEBUG_MMCHOST_SD_ERROR DEBUG_ERROR + +STATIC BOOLEAN mCardIsPresent =3D FALSE; +STATIC CARD_DETECT_STATE mCardDetectState =3D CardDetectRequired; +BM_SD_PARAMS BmParams; + +/** + Check if the SD card is read-only. + + @param[in] This Pointer to the EFI_MMC_HOST_PROTOCOL instance. + + @retval FALSE The SD card is not read-only. + +**/ +STATIC +BOOLEAN +SdIsReadOnly ( + IN EFI_MMC_HOST_PROTOCOL *This + ) +{ + return FALSE; +} + +/** + Build the device path for the SD card. + + @param[in] This Pointer to the EFI_MMC_HOST_PROTOCOL instance. + @param[out] DevicePath Pointer to the location to store the newly cr= eated device path. + + @retval EFI_SUCCESS The device path is built successfully. + +**/ +STATIC +EFI_STATUS +SdBuildDevicePath ( + IN EFI_MMC_HOST_PROTOCOL *This, + OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath + ) +{ + EFI_DEVICE_PATH_PROTOCOL *NewDevicePathNode; + EFI_GUID DevicePathGuid =3D EFI_CALLER_ID_GUID; + + DEBUG ((DEBUG_MMCHOST_SD, "SdHost: SdBuildDevicePath ()\n")); + + NewDevicePathNode =3D CreateDeviceNode (HARDWARE_DEVICE_PATH, HW_VENDOR_= DP, sizeof (VENDOR_DEVICE_PATH)); + CopyGuid (&((VENDOR_DEVICE_PATH*)NewDevicePathNode)->Guid, &DevicePathGu= id); + *DevicePath =3D NewDevicePathNode; + + return EFI_SUCCESS; +} + +/** + Send a command to the SD card. + + @param[in] This Pointer to the EFI_MMC_HOST_PROTOCOL instance. + @param[in] MmcCmd The MMC command to send. + @param[in] Argument The argument for the command. + @param[in] Type The type of response expected. + @param[in] Buffer Pointer to the buffer to store the response. + + @retval EFI_SUCCESS The command was sent successfully and the response= was retrieved. + @retval Other An error occurred while sending a command. +**/ +STATIC +EFI_STATUS +SdSendCommand ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN MMC_IDX MmcCmd, + IN UINT32 Argument, + IN MMC_RESPONSE_TYPE Type, + IN UINT32* Buffer + ) +{ + EFI_STATUS Status; + + Status =3D BmSdSendCmd (MmcCmd, Argument, Type, Buffer); + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_MMCHOST_SD_ERROR, "SdSendCommand Error, Status=3D%r.\n",= Status)); + return Status; + } + + return EFI_SUCCESS; +} + +/** + Read block data from an SD card. + + @param[in] This Pointer to the EFI_MMC_HOST_PROTOCOL instance. + @param[in] Lba Logical Block Address of the starting block to rea= d. + @param[in] Length Number of blocks to read. + @param[in] Buffer Pointer to the buffer to store the read data. + + @retval EFI_SUCCESS The operation completed successfully. + @retval Other The operation failed. + +**/ +STATIC +EFI_STATUS +SdReadBlockData ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Length, + OUT UINT32* Buffer + ) +{ + EFI_STATUS Status; + + ASSERT (Buffer !=3D NULL); + ASSERT (Length % 4 =3D=3D 0); + + Status =3D BmSdRead (Lba, Buffer, Length); + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_MMCHOST_SD_ERROR, "SdReadBlockData Error, Status=3D%r.\n= ", Status)); + return Status; + } + + return EFI_SUCCESS; +} + +/** + Write block data to an SD card. + + @param[in] This Pointer to the EFI_MMC_HOST_PROTOCOL instance. + @param[in] Lba Logical Block Address of the starting block to wri= te. + @param[in] Length Number of blocks to write. + @param[in] Buffer Pointer to the buffer containing the data to be wr= itten. + + @retval EFI_SUCCESS The operation completed successfully. + @retval Other The operation failed. + +**/ +STATIC +EFI_STATUS +SdWriteBlockData ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Length, + IN UINT32* Buffer + ) +{ + EFI_STATUS Status; + + ASSERT (Buffer !=3D NULL); + ASSERT (Length % SDHOST_BLOCK_BYTE_LENGTH =3D=3D 0); + + Status =3D BmSdWrite (Lba, Buffer, Length); + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_MMCHOST_SD_ERROR, "SdWriteBlockData Error, Status=3D%r.\= n", Status)); + return Status; + } + + return EFI_SUCCESS; +} + +/** + Set the I/O settings for an SD card. + + @param[in] This Pointer to the EFI_MMC_HOST_PROTOCOL instance. + @param[in] BusClockFreq Bus clock frequency in Hz. + @param[in] BusWidth Bus width setting. + + @retval EFI_SUCCESS The operation completed successfully. + @retval Other The operation failed. + +**/ +STATIC +EFI_STATUS +SdSetIos ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN UINT32 BusClockFreq, + IN UINT32 BusWidth + ) +{ + EFI_STATUS Status; + + DEBUG ((DEBUG_MMCHOST_SD_INFO, "%a: Setting Freq %u Hz\n", __func__, Bus= ClockFreq)); + DEBUG ((DEBUG_MMCHOST_SD_INFO, "%a: Setting BusWidth %u\n", __func__, Bu= sWidth)); + + Status =3D BmSdSetIos (BusClockFreq,BusWidth); + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_MMCHOST_SD_ERROR, "SdSetIos Error, Status=3D%r.\n", Stat= us)); + return Status; + } + + return EFI_SUCCESS; +} + +/** + Prepare the SD card for data transfer. + + @param[in] This Pointer to the EFI_MMC_HOST_PROTOCOL instance. + @param[in] Lba Logical Block Address of the starting block to pr= epare. + @param[in] Length Number of blocks to prepare. + @param[in] Buffer Buffer containing the data to be prepared. + + @retval EFI_SUCCESS The operation completed successfully. + @retval Other The operation failed. + +**/ +STATIC +EFI_STATUS +SdPrepare ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Length, + IN UINTN Buffer + ) +{ + EFI_STATUS Status; + + Status =3D BmSdPrepare (Lba, Buffer, Length); + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_MMCHOST_SD_ERROR, "SdPrepare Error, Status=3D%r.\n", Sta= tus)); + return Status; + } + + return EFI_SUCCESS; +} + +/** + Notify the state of the SD card. + + @param[in] This Pointer to the EFI_MMC_HOST_PROTOCOL instance. + @param[in] State State of the SD card. + + @retval EFI_SUCCESS The operation completed successfully. + @retval EFI_NOT_READY The card detection has not completed yet. + @retval Other The operation failed. + +**/ +STATIC +EFI_STATUS +SdNotifyState ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN MMC_STATE State + ) +{ + // Stall all operations except init until card detection has occurred. + if (State !=3D MmcHwInitializationState && mCardDetectState !=3D CardDet= ectCompleted) { + return EFI_NOT_READY; + } + + switch (State) { + case MmcHwInitializationState: + DEBUG ((DEBUG_MMCHOST_SD, "MmcHwInitializationState\n", State)); + + EFI_STATUS Status =3D SdInit (SD_USE_PIO); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_MMCHOST_SD_ERROR,"SdHost: SdNotifyState(): Fail to i= nitialize!\n")); + return Status; + } + break; + case MmcIdleState: + DEBUG ((DEBUG_MMCHOST_SD, "MmcIdleState\n", State)); + break; + case MmcReadyState: + DEBUG ((DEBUG_MMCHOST_SD, "MmcReadyState\n", State)); + break; + case MmcIdentificationState: + DEBUG ((DEBUG_MMCHOST_SD, "MmcIdentificationState\n", State)); + break; + case MmcStandByState: + DEBUG ((DEBUG_MMCHOST_SD, "MmcStandByState\n", State)); + break; + case MmcTransferState: + DEBUG ((DEBUG_MMCHOST_SD, "MmcTransferState\n", State)); + break; + case MmcSendingDataState: + DEBUG ((DEBUG_MMCHOST_SD, "MmcSendingDataState\n", State)); + break; + case MmcReceiveDataState: + DEBUG ((DEBUG_MMCHOST_SD, "MmcReceiveDataState\n", State)); + break; + case MmcProgrammingState: + DEBUG ((DEBUG_MMCHOST_SD, "MmcProgrammingState\n", State)); + break; + case MmcDisconnectState: + case MmcInvalidState: + default: + DEBUG ((DEBUG_MMCHOST_SD_ERROR, "SdHost: SdNotifyState(): Invalid St= ate: %d\n", State)); + ASSERT (0); + } + + return EFI_SUCCESS; +} + +/** + Check if an SD card is present. + + @param[in] This Pointer to the EFI_MMC_HOST_PROTOCOL instance. + + @retval TRUE An SD card is present. + @retval FALSE No SD card is present. + +**/ +STATIC +BOOLEAN +SdIsCardPresent ( + IN EFI_MMC_HOST_PROTOCOL *This + ) +{ + // + // If we are already in progress (we may get concurrent calls) + // or completed the detection, just return the current value. + // + if (mCardDetectState !=3D CardDetectRequired) { + return mCardIsPresent; + } + + mCardDetectState =3D CardDetectInProgress; + mCardIsPresent =3D FALSE; + + if (BmSdCardDetect () =3D=3D 1) { + mCardIsPresent =3D TRUE; + goto out; + } + else { + DEBUG ((DEBUG_MMCHOST_SD_ERROR, "SdIsCardPresent: Error SdCardDetect.\= n")); + mCardDetectState =3D CardDetectRequired; + return FALSE; + } + + DEBUG ((DEBUG_MMCHOST_SD_INFO, "SdIsCardPresent: Not detected.\n")); + +out: + mCardDetectState =3D CardDetectCompleted; + return mCardIsPresent; +} + +/** + Check if the SD card supports multi-block transfers. + + @param[in] This Pointer to the EFI_MMC_HOST_PROTOCOL instance. + + @retval TRUE The SD card supports multi-block transfers. + +**/ +BOOLEAN +SdIsMultiBlock ( + IN EFI_MMC_HOST_PROTOCOL *This + ) +{ + return TRUE; +} + +EFI_MMC_HOST_PROTOCOL gMmcHost =3D { + MMC_HOST_PROTOCOL_REVISION, + SdIsCardPresent, + SdIsReadOnly, + SdBuildDevicePath, + SdNotifyState, + SdSendCommand, + SdReadBlockData, + SdWriteBlockData, + SdSetIos, + SdPrepare, + SdIsMultiBlock +}; + +/** + Initialize the SD host. + + @param[in] ImageHandle The image handle. + @param[in] SystemTable The system table. + + @retval EFI_SUCCESS The operation completed successfully. + @retval Other The operation failed. +**/ +EFI_STATUS +SdHostInitialize ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + EFI_HANDLE Handle; + UINTN Base; + + DEBUG ((DEBUG_MMCHOST_SD, "SdHost: Initialize\n")); + + Handle =3D NULL; + Base =3D SDIO_BASE; + + if(PcdGet32 (PcdCpuRiscVMmuMaxSatpMode) > 0UL){ + for (INT32 I =3D 39; I < 64; I++) { + if (Base & (1ULL << 38)) { + Base |=3D (1ULL << I); + } else { + Base &=3D ~(1ULL << I); + } + } + } + + BmParams.RegBase =3D Base; + BmParams.ClkRate =3D 50 * 1000 * 1000; + BmParams.BusWidth =3D MMC_BUS_WIDTH_4; + BmParams.Flags =3D 0; + BmParams.CardIn =3D SDCARD_STATUS_UNKNOWN; + + Status =3D gBS->InstallMultipleProtocolInterfaces ( + &Handle, + &gSophgoMmcHostProtocolGuid, + &gMmcHost, + NULL + ); + ASSERT_EFI_ERROR (Status); + + return Status; +} --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109601): https://edk2.groups.io/g/devel/message/109601 Mute This Topic: https://groups.io/mt/101944465/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri Sep 20 14:54:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+109602+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109602+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=163.com ARC-Seal: i=1; a=rsa-sha256; t=1697216171; cv=none; d=zohomail.com; s=zohoarc; b=dKG3AaWtcYBNkzn5JlOMleS5GEQ47QsHIVQ5RasLerwCu/klMEpHFrN2vzV+SQyln+2ZUxrWcJm6n7WBh7vWsR+1zJR9Nhm2H8H79qGVrp8oDYS8OmYWudGY22qEtNGMuNzkLi7V3W2MKly30VOiTPm0PVMqDuPjqjKMzobemOI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697216171; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=38n8YqKeYk3TsnbPUvqxnDgL1PJsbZn1utZUwADEjD4=; b=LjdbL7+xqHMqnz05zyUCBoEUhwl8evaGcIZM3GL9BYc1Ylm1G/qHlzhCu4SgOR45d2ED7fqSD6nWxQfaUR+8nIlfaiymAV11Aeqs+v2nvnHiYmcCUutbFw2yipOKy4PSfWT9zhNfJwgg4EktiePMfmQVVkxOFqcgWUXc58ziulM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109602+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1697216171600322.3592452264845; Fri, 13 Oct 2023 09:56:11 -0700 (PDT) Return-Path: DKIM-Signature: a=rsa-sha256; bh=JvFKbZXqSwebql/Utir0e8Td66ooa+1F8BBfcca6xZ0=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1697216171; v=1; b=hrBQAiVAXj/RaO78VzT6HXBLDXrcVAOATIu/Xrp/bo5cBTVSUs/bK3v5jMh56ec4tMgW5ATr UDNMf96EPyyLvtKj1I1pqf17+O2EERJll3yQLXWOcfegPFNtooNq/QYe6OU4wa+VxU5VTtOWPey fOVtRpSSAbSS7LqyHF1xIgKw= X-Received: by 127.0.0.2 with SMTP id WFJsYY1788612xV1tITxzr1g; Fri, 13 Oct 2023 09:56:11 -0700 X-Received: from m15.mail.163.com (m15.mail.163.com [45.254.50.219]) by mx.groups.io with SMTP id smtpd.web10.30856.1697166154487013366 for ; Thu, 12 Oct 2023 20:02:35 -0700 X-Received: from rv-uefi.. (unknown [211.87.236.31]) by zwqz-smtp-mta-g2-3 (Coremail) with SMTP id _____wD3fydFsyhl+sOpAQ--.27183S2; Fri, 13 Oct 2023 11:02:29 +0800 (CST) From: caiyuqing_hz@163.com To: devel@edk2.groups.io Cc: USER0FISH , sunilvl@ventanamicro.com, Leif Lindholm , Michael D Kinney , Inochi Amaoto Subject: [edk2-devel] [PATCH edk2-platforms v5 3/7] Sophgo/SG2042Pkg: Add base MMC driver. Date: Fri, 13 Oct 2023 11:02:29 +0800 Message-Id: <56bdeb9835b24135492aee977d773a47ee30bc87.1697120122.git.caiyuqing_hz@outlook.com> In-Reply-To: References: MIME-Version: 1.0 X-CM-TRANSID: _____wD3fydFsyhl+sOpAQ--.27183S2 X-Coremail-Antispam: 1Uf129KBjvAXoWkJr4DJr45AF4xurW3uF4fuFg_yoWDAr1rWo W3Z34ftw4kJr1xZrsxCrykW3y7ZF1rWrsIqr4Fvryqv3ZIqwn5KFyIya1xGa43JryIvr9x GryIq3s5JFZayF18n29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUcqg4DUUUU X-Originating-IP: [211.87.236.31] X-CM-SenderInfo: 5fdl535tlqwslk26il2tof0z/1tbiKAYIxV7WNZtyPAAAsL Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,caiyuqing_hz@163.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 9J8o1n0UDj4o3gog0V6kDfQJx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1697216172269100021 Content-Type: text/plain; charset="utf-8" From: caiyuqing379 This driver implements the MMC Host protocol, which is used by SD interface driver that the Sophgo SG2042 EVB supports. Add this driver in Sophgo/SG2042Pkg leveraging the one form Embedded Package. Signed-off-by: caiyuqing379 Co-authored-by: USER0FISH Cc: dahogn Cc: meng-cz Cc: yli147 Cc: ChaiEvan Cc: Leif Lindholm Cc: Michael D Kinney Acked-by: Sunil V L --- .../SG2042Pkg/Drivers/MmcDxe/MmcDxe.inf | 46 ++ Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/Mmc.h | 513 +++++++++++++ Silicon/Sophgo/SG2042Pkg/Include/MmcHost.h | 225 ++++++ .../SG2042Pkg/Drivers/MmcDxe/ComponentName.c | 156 ++++ .../SG2042Pkg/Drivers/MmcDxe/Diagnostics.c | 323 ++++++++ Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/Mmc.c | 527 +++++++++++++ .../SG2042Pkg/Drivers/MmcDxe/MmcBlockIo.c | 646 ++++++++++++++++ .../SG2042Pkg/Drivers/MmcDxe/MmcDebug.c | 194 +++++ .../Drivers/MmcDxe/MmcIdentification.c | 719 ++++++++++++++++++ 9 files changed, 3349 insertions(+) create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcDxe.inf create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/Mmc.h create mode 100644 Silicon/Sophgo/SG2042Pkg/Include/MmcHost.h create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/ComponentName.c create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/Diagnostics.c create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/Mmc.c create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcBlockIo.c create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcDebug.c create mode 100644 Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcIdentificati= on.c diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcDxe.inf b/Silicon/S= ophgo/SG2042Pkg/Drivers/MmcDxe/MmcDxe.inf new file mode 100644 index 000000000000..ab16910160be --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcDxe.inf @@ -0,0 +1,46 @@ +## @file +# Component description file for the MMC DXE driver module. +# +# Copyright (c) 2011-2015, ARM Limited. All rights reserved. +# Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Univers= iy, China.P.R. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x0001001B + BASE_NAME =3D MmcDxe + FILE_GUID =3D B5A53998-42AD-4C66-8D2D-1C5FBD175F25 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D MmcDxeInitialize + +[Sources.common] + ComponentName.c + Mmc.h + Mmc.c + MmcBlockIo.c + MmcIdentification.c + MmcDebug.c + Diagnostics.c + +[Packages] + MdePkg/MdePkg.dec + Silicon/Sophgo/SG2042Pkg/SG2042Pkg.dec + +[LibraryClasses] + BaseLib + UefiLib + UefiDriverEntryPoint + BaseMemoryLib + +[Protocols] + gEfiDiskIoProtocolGuid ## CONSUMES + gEfiBlockIoProtocolGuid ## PRODUCES + gEfiDevicePathProtocolGuid ## PRODUCES + gEfiDriverDiagnostics2ProtocolGuid ## SOMETIMES_PRODUCES + gSophgoMmcHostProtocolGuid ## CONSUMES + +[Depex] + TRUE diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/Mmc.h b/Silicon/Sophgo= /SG2042Pkg/Drivers/MmcDxe/Mmc.h new file mode 100644 index 000000000000..6ac59baa82ef --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/Mmc.h @@ -0,0 +1,513 @@ +/** @file + Main Header file for the MMC DXE driver + + Copyright (c) 2011-2015, ARM Limited. All rights reserved. + Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef __MMC_H +#define __MMC_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BIT_32(nr) (1U << (nr)) +#define BIT_64(nr) (1ULL << (nr)) +#define UINT64_C(c) (c ## UL) +#define GENMASK_64(h,l) (((~UINT64_C(0)) << (l)) & (~UINT64_C(0) >> (6= 4 - 1 - (h)))) +#define GENMASK(h,l) GENMASK_64(h,l) + +#define MMC_TRACE(txt) DEBUG((DEBUG_BLKIO, "MMC: " txt "\n")) + +#define MMC_IOBLOCKS_READ 0 +#define MMC_IOBLOCKS_WRITE 1 + +/* Value randomly chosen for eMMC RCA, it should be > 1 */ +#define MMC_FIX_RCA 6 +#define RCA_SHIFT_OFFSET 16 + +#define MMC_OCR_POWERUP BIT31 +#define MMC_OCR_ACCESS_MASK 0x3 /* bit[30-29] */ +#define MMC_OCR_ACCESS_BYTE 0x1 /* bit[29] */ +#define MMC_OCR_ACCESS_SECTOR 0x2 /* bit[30] */ +#define OCR_HCS BIT30 +#define OCR_BYTE_MODE (0U << 29) +#define OCR_SECTOR_MODE (2U << 29) +#define OCR_ACCESS_MODE_MASK (3U << 29) +#define OCR_VDD_MIN_2V7 GENMASK(23, 15) +#define OCR_VDD_MIN_2V0 GENMASK(14, 8) +#define OCR_VDD_MIN_1V7 BIT7 + +/* Value randomly chosen for eMMC RCA, it should be > 1 */ +#define MMC_FIX_RCA 6 +#define RCA_SHIFT_OFFSET 16 + +#define CMD_EXTCSD_PARTITION_CONFIG 179 +#define CMD_EXTCSD_BUS_WIDTH 183 +#define CMD_EXTCSD_HS_TIMING 185 +#define CMD_EXTCSD_PART_SWITCH_TIME 199 +#define CMD_EXTCSD_SEC_CNT 212 + +#define EXTCSD_SET_CMD (0U << 24) +#define EXTCSD_SET_BITS (1U << 24) +#define EXTCSD_CLR_BITS (2U << 24) +#define EXTCSD_WRITE_BYTES (3U << 24) +#define EXTCSD_CMD(x) (((x) & 0xff) << 16) +#define EXTCSD_VALUE(x) (((x) & 0xff) << 8) +#define EXTCSD_CMD_SET_NORMAL 1U + +#define CSD_TRAN_SPEED_UNIT_MASK GENMASK(2, 0) +#define CSD_TRAN_SPEED_MULT_MASK GENMASK(6, 3) +#define CSD_TRAN_SPEED_MULT_SHIFT 3 + +#define MMC_CSD_GET_CCC(Response) (Response[2] >> 20) +#define MMC_CSD_GET_TRANSPEED(Response) (Response[3] & 0xFF) +#define MMC_CSD_GET_READBLLEN(Response) ((Response[2] >> 16) & 0xF) +#define MMC_CSD_GET_WRITEBLLEN(Response) ((Response[0] >> 22) & 0xF) +#define MMC_CSD_GET_FILEFORMAT(Response) ((Response[0] >> 10) & 0x3) +#define MMC_CSD_GET_FILEFORMATGRP(Response) ((Response[0] >> 15) & 0x1) +#define MMC_CSD_GET_DEVICESIZE(csd) (((Response[1] >> 30) & 0x3) = | ((Response[2] & 0x3FF) << 2)) +#define HC_MMC_CSD_GET_DEVICESIZE(Response) ((Response[1] >> 16) | ((Resp= onse[2] & 0x3F) << 16)); +#define MMC_CSD_GET_DEVICESIZEMULT(csd) ((Response[1] >> 15) & 0x7) + +#define MMC_R0_READY_FOR_DATA (1U << 8) +#define MMC_R0_SWITCH_ERROR (1U << 7) +#define MMC_R0_CURRENTSTATE(Response) ((Response[0] >> 9) & 0xF) +#define MMC_R0_STATE_IDLE 0 +#define MMC_R0_STATE_READY 1 +#define MMC_R0_STATE_IDENT 2 +#define MMC_R0_STATE_STDBY 3 +#define MMC_R0_STATE_TRAN 4 +#define MMC_R0_STATE_DATA 5 +#define MMC_R0_STATE_RECV 6 +#define MMC_R0_STATE_PROG 7 +#define MMC_R0_STATE_DIS 8 + +#define EMMC_CMD6_ARG_ACCESS(x) (((x) & 0x3) << 24) +#define EMMC_CMD6_ARG_INDEX(x) (((x) & 0xFF) << 16) +#define EMMC_CMD6_ARG_VALUE(x) (((x) & 0xFF) << 8) +#define EMMC_CMD6_ARG_CMD_SET(x) (((x) & 0x7) << 0) + +#define SWITCH_CMD_DATA_LENGTH 64 +#define SD_HIGH_SPEED_SUPPORTED 0x200 +#define SD_DEFAULT_SPEED 25000000 +#define SD_HIGH_SPEED 50000000 +#define SWITCH_CMD_SUCCESS_MASK 0xf +#define CMD8_CHECK_PATTERN 0xAAU +#define VHS_2_7_3_6_V BIT8 + +#define SD_SCR_BUS_WIDTH_1 BIT8 +#define SD_SCR_BUS_WIDTH_4 BIT10 + +typedef enum { + UNKNOWN_CARD, + MMC_CARD, //MMC card + MMC_CARD_HIGH, //MMC Card with High capacity + EMMC_CARD, //eMMC 4.41 card + SD_CARD, //SD 1.1 card + SD_CARD_2, //SD 2.0 or above standard card + SD_CARD_2_HIGH //SD 2.0 or above high capacity card +} CARD_TYPE; + +typedef struct { + UINT32 Reserved0: 7; // 0 + UINT32 V170_V195: 1; // 1.70V - 1.95V + UINT32 V200_V260: 7; // 2.00V - 2.60V + UINT32 V270_V360: 9; // 2.70V - 3.60V + UINT32 RESERVED_1: 5; // Reserved + UINT32 AccessMode: 2; // 00b (byte mode), 10b (sector mode) + UINT32 PowerUp: 1; // This bit is set to LOW if the card has not fi= nished the power up routine +} OCR; + +typedef struct { + UINT8 SD_SPEC: 4; // SD Memory Card - Spec. Version [59:= 56] + UINT8 SCR_STRUCTURE: 4; // SCR Structure [63:60] + UINT8 SD_BUS_WIDTHS: 4; // DAT Bus widths supported [51:48] + UINT8 DATA_STAT_AFTER_ERASE: 1; // Data Status after erases [55] + UINT8 SD_SECURITY: 3; // CPRM Security Support [54:52] + UINT8 EX_SECURITY_1: 1; // Extended Security Support [43] + UINT8 SD_SPEC4: 1; // Spec. Version 4.00 or higher [42] + UINT8 RESERVED_1: 2; // Reserved [41:40] + UINT8 SD_SPEC3: 1; // Spec. Version 3.00 or higher [47] + UINT8 EX_SECURITY_2: 3; // Extended Security Support [46:44] + UINT8 CMD_SUPPORT: 4; // Command Support bits [35:32] + UINT8 RESERVED_2: 4; // Reserved [39:36] + UINT32 RESERVED_3; // Manufacturer Usage [31:0] +} SCR; + +typedef struct { + UINT32 NOT_USED; // 1 [0:0] + UINT32 CRC; // CRC7 checksum [7:1] + + UINT32 MDT; // Manufacturing date [19:8] + UINT32 RESERVED_1; // Reserved [23:20] + UINT32 PSN; // Product serial number [55:24] + UINT8 PRV; // Product revision [63:56] + UINT8 PNM[5]; // Product name [64:103] + UINT16 OID; // OEM/Application ID [119:104] + UINT8 MID; // Manufacturer ID [127:120] +} CID; + +/* + * designware can't read out response bit 0-7, it only returns + * bit 8-135, so we shift 8 bits here. + */ +typedef struct { +#ifdef FULL_CSD + UINT8 NOT_USED: 1; // Not used, always 1 [0:0] + UINT8 CRC: 7; // CRC [7:1] +#endif + UINT8 RESERVED_1: 2; // Reserved [9:8] + UINT8 FILE_FORMAT: 2; // File format [11:10] + UINT8 TMP_WRITE_PROTECT: 1; // Temporary write protection [12:12] + UINT8 PERM_WRITE_PROTECT: 1; // Permanent write protection [13:13] + UINT8 COPY: 1; // Copy flag (OTP) [14:14] + UINT8 FILE_FORMAT_GRP: 1; // File format group [15:15] + + UINT16 RESERVED_2: 5; // Reserved [20:16] + UINT16 WRITE_BL_PARTIAL: 1; // Partial blocks for write allowed [21:2= 1] + UINT16 WRITE_BL_LEN: 4; // Max. write data block length [25:22] + UINT16 R2W_FACTOR: 3; // Write speed factor [28:26] + UINT16 RESERVED_3: 2; // Reserved [30:29] + UINT16 WP_GRP_ENABLE: 1; // Write protect group enable [31:31] + + UINT32 WP_GRP_SIZE: 7; // Write protect group size [38:32] + UINT32 SECTOR_SIZE: 7; // Erase sector size [45:39] + UINT32 ERASE_BLK_EN: 1; // Erase single block enable [46:46] + UINT32 C_SIZE_MULT: 3; // Device size multiplier [49:47] + UINT32 VDD_W_CURR_MAX: 3; // Max. write current @ VDD max [52:50] + UINT32 VDD_W_CURR_MIN: 3; // Max. write current @ VDD min [55:53] + UINT32 VDD_R_CURR_MAX: 3; // Max. read current @ VDD max [58:56] + UINT32 VDD_R_CURR_MIN: 3; // Max. read current @ VDD min [61:59] + UINT32 C_SIZELow2: 2; // Device size [63:62] + + UINT32 C_SIZEHigh10: 10;// Device size [73:64] + UINT32 RESERVED_4: 2; // Reserved [75:74] + UINT32 DSR_IMP: 1; // DSR implemented [76:76] + UINT32 READ_BLK_MISALIGN: 1; // Read block misalignment [77:77] + UINT32 WRITE_BLK_MISALIGN: 1; // Write block misalignment [78:78] + UINT32 READ_BL_PARTIAL: 1; // Partial blocks for read allowed [79:79] + UINT32 READ_BL_LEN: 4; // Max. read data block length [83:80] + UINT32 CCC: 12;// Card command classes [95:84] + + UINT8 TRAN_SPEED ; // Max. bus clock frequency [103:96] + UINT8 NSAC ; // Data read access-time 2 in CLK cycles = (NSAC*100) [111:104] + UINT8 TAAC ; // Data read access-time 1 [119:112] + + UINT8 RESERVED_5: 2; // Reserved [121:120] + UINT8 SPEC_VERS: 4; // System specification version [125:122] + UINT8 CSD_STRUCTURE: 2; // CSD structure [127:126] +} CSD; + +typedef struct { +#ifdef FULL_CSD + UINT8 NOT_USED: 1; // Not used, always 1 [0:0] + UINT8 CRC: 7; // CRC [7:1] +#endif + UINT8 RESERVED_1: 2; // Reserved [9:8] + UINT8 FILE_FORMAT: 2; // File format [11:10] + UINT8 TMP_WRITE_PROTECT: 1; // Temporary write protection [12:12] + UINT8 PERM_WRITE_PROTECT: 1; // Permanent write protection [13:13] + UINT8 COPY: 1; // Copy flag (OTP) [14:14] + UINT8 FILE_FORMAT_GRP: 1; // File format group [15:15] + + UINT16 RESERVED_2: 5; // Reserved [20:16] + UINT16 WRITE_BL_PARTIAL: 1; // Partial blocks for write allowed [21:2= 1] + UINT16 WRITE_BL_LEN: 4; // Max. write data block length [25:22] + UINT16 R2W_FACTOR: 3; // Write speed factor [28:26] + UINT16 RESERVED_3: 2; // Reserved [30:29] + UINT16 WP_GRP_ENABLE: 1; // Write protect group enable [31:31] + + UINT32 WP_GRP_SIZE: 7; // Write protect group size [38:32] + UINT32 SECTOR_SIZE: 7; // Erase sector size [45:39] + UINT32 ERASE_BLK_EN: 1; // Erase single block enable [46:46] + UINT32 RESERVED_4: 1; // Reserved [47] + UINT32 C_SIZELow16: 16; // Device size [63:48] + + UINT32 C_SIZEHigh6: 6; // Device size [69:64] + UINT32 RESERVED_5: 6; // Reserved [75:70] + UINT32 DSR_IMP: 1; // DSR implemented [76:76] + UINT32 READ_BLK_MISALIGN: 1; // Read block misalignment [77:77] + UINT32 WRITE_BLK_MISALIGN: 1; // Write block misalignment [78:78] + UINT32 READ_BL_PARTIAL: 1; // Partial blocks for read allowed [79:79] + UINT32 READ_BL_LEN: 4; // Max. read data block length [83:80] + UINT32 CCC: 12;// Card command classes [95:84] + + UINT8 TRAN_SPEED: 8; // Max. bus clock frequency [103:96] + UINT8 NSAC: 8; // Data read access-time 2 in CLK cycles= (NSAC*100) [111:104] + UINT8 TAAC: 8; // Data read access-time 1 [119:112] + + UINT8 RESERVED_6: 6; // Reserved [121:120] + UINT8 CSD_STRUCTURE: 2; // CSD structure [127:126] +} ECSD; + +typedef struct { + UINT16 RCA; + CARD_TYPE CardType; + OCR OCRData; + CID CIDData; + CSD CSDData; + ECSD *ECSDData; // MMC V2 extended card spe= cific +} CARD_INFO; + +typedef struct _MMC_HOST_INSTANCE { + UINTN Signature; + LIST_ENTRY Link; + EFI_HANDLE MmcHandle; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + + MMC_STATE State; + EFI_BLOCK_IO_PROTOCOL BlockIo; + CARD_INFO CardInfo; + EFI_MMC_HOST_PROTOCOL *MmcHost; + + BOOLEAN Initialized; +} MMC_HOST_INSTANCE; + +#define MMC_HOST_INSTANCE_SIGNATURE SIGNATURE_32('m', 'm',= 'c', 'h') +#define MMC_HOST_INSTANCE_FROM_BLOCK_IO_THIS(a) CR (a, MMC_HOST_INSTAN= CE, BlockIo, MMC_HOST_INSTANCE_SIGNATURE) +#define MMC_HOST_INSTANCE_FROM_LINK(a) CR (a, MMC_HOST_INSTAN= CE, Link, MMC_HOST_INSTANCE_SIGNATURE) + + +EFI_STATUS +EFIAPI +MmcGetDriverName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName + ); + +EFI_STATUS +EFIAPI +MmcGetControllerName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle O= PTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName + ); + +extern EFI_COMPONENT_NAME_PROTOCOL gMmcComponentName; +extern EFI_COMPONENT_NAME2_PROTOCOL gMmcComponentName2; + +extern EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gMmcDriverDiagnostics2; + +extern LIST_ENTRY mMmcHostPool; + +/** + Reset the block device. + + This function implements EFI_BLOCK_IO_PROTOCOL.Reset(). + It resets the block device hardware. + ExtendedVerification is ignored in this implementation. + + @param This Indicates a pointer to the calling contex= t. + @param ExtendedVerification Indicates that the driver may perform a m= ore exhaustive + verification operation of the device duri= ng reset. + + @retval EFI_SUCCESS The block device was reset. + @retval EFI_DEVICE_ERROR The block device is not functioning corre= ctly and could not be reset. + +**/ +EFI_STATUS +EFIAPI +MmcReset ( + IN EFI_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification + ); + +/** + Reads the requested number of blocks from the device. + + This function implements EFI_BLOCK_IO_PROTOCOL.ReadBlocks(). + It reads the requested number of blocks from the device. + All the blocks are read, or an error is returned. + + @param This Indicates a pointer to the calling contex= t. + @param MediaId The media ID that the read request is for. + @param Lba The starting logical block address to rea= d from on the device. + @param BufferSize The size of the Buffer in bytes. + This must be a multiple of the intrinsic = block size of the device. + @param Buffer A pointer to the destination buffer for t= he data. The caller is + responsible for either having implicit or= explicit ownership of the buffer. + + @retval EFI_SUCCESS The data was read correctly from the devi= ce. + @retval EFI_DEVICE_ERROR The device reported an error while attemp= ting to perform the read operation. + @retval EFI_NO_MEDIA There is no media in the device. + @retval EFI_MEDIA_CHANGED The MediaId is not for the current media. + @retval EFI_BAD_BUFFER_SIZE The BufferSize parameter is not a multipl= e of the intrinsic block size of the device. + @retval EFI_INVALID_PARAMETER The read request contains LBAs that are n= ot valid, + or the buffer is not on proper alignment. + +**/ +EFI_STATUS +EFIAPI +MmcReadBlocks ( + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + OUT VOID *Buffer + ); + +/** + Writes a specified number of blocks to the device. + + This function implements EFI_BLOCK_IO_PROTOCOL.WriteBlocks(). + It writes a specified number of blocks to the device. + All blocks are written, or an error is returned. + + @param This Indicates a pointer to the calling contex= t. + @param MediaId The media ID that the write request is fo= r. + @param Lba The starting logical block address to be = written. + @param BufferSize The size of the Buffer in bytes. + This must be a multiple of the intrinsic = block size of the device. + @param Buffer Pointer to the source buffer for the data. + + @retval EFI_SUCCESS The data were written correctly to the de= vice. + @retval EFI_WRITE_PROTECTED The device cannot be written to. + @retval EFI_NO_MEDIA There is no media in the device. + @retval EFI_MEDIA_CHANGED The MediaId is not for the current media. + @retval EFI_DEVICE_ERROR The device reported an error while attemp= ting to perform the write operation. + @retval EFI_BAD_BUFFER_SIZE The BufferSize parameter is not a multipl= e of the intrinsic + block size of the device. + @retval EFI_INVALID_PARAMETER The write request contains LBAs that are = not valid, + or the buffer is not on proper alignment. + +**/ +EFI_STATUS +EFIAPI +MmcWriteBlocks ( + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + IN VOID *Buffer + ); + +/** + Flushes all modified data to a physical block device. + + @param This Indicates a pointer to the calling contex= t. + + @retval EFI_SUCCESS All outstanding data were written correct= ly to the device. + @retval EFI_DEVICE_ERROR The device reported an error while attemp= ting to write data. + @retval EFI_NO_MEDIA There is no media in the device. + +**/ +EFI_STATUS +EFIAPI +MmcFlushBlocks ( + IN EFI_BLOCK_IO_PROTOCOL *This + ); + +/** + Sets the state of the MMC host instance and invokes the + NotifyState function of the MMC host, passing the updated state. + + @param MmcHostInstance Pointer to the MMC host instance. + @param State The new state to be set for the MMC host = instance. + + @retval EFI_STATUS + +**/ +EFI_STATUS +MmcNotifyState ( + IN MMC_HOST_INSTANCE *MmcHostInstance, + IN MMC_STATE State + ); + +/** + Initialize the MMC device. + + @param[in] MmcHostInstance MMC host instance + + @retval EFI_SUCCESS MMC device initialized successfully + @retval Other MMC device initialization failed + +**/ +EFI_STATUS +InitializeMmcDevice ( + IN MMC_HOST_INSTANCE *MmcHost + ); + +/** + Callback function to check MMC cards. + + @param[in] Event The event that is being triggered + @param[in] Context The context passed to the event + +**/ +VOID +EFIAPI +CheckCardsCallback ( + IN EFI_EVENT Event, + IN VOID *Context + ); + +/** + Print the Card Specific Data (CSD). + + @param[in] Csd Pointer to the CSD array + +**/ +VOID +PrintCSD ( + IN UINT32* Csd + ); + +/** + Print the Relative Card Address (RCA). + + @param[in] Rca The Relative Card Address (RCA) value + +**/ +VOID +PrintRCA ( + IN UINT32 Rca + ); + +/** + Print the Operation Condition Register (OCR). + + @param[in] Ocr The Operation Condition Register (OCR) value. + +**/ +VOID +PrintOCR ( + IN UINT32 Ocr + ); + +/** + Print the R1 response. + + @param[in] Response The R1 response value. + +**/ +VOID +PrintResponseR1 ( + IN UINT32 Response + ); + +/** + Print the Card Identification (CID) register. + + @param[in] Cid Pointer to the CID array. + +**/ +VOID +PrintCID ( + IN UINT32* Cid + ); + +#endif diff --git a/Silicon/Sophgo/SG2042Pkg/Include/MmcHost.h b/Silicon/Sophgo/SG= 2042Pkg/Include/MmcHost.h new file mode 100644 index 000000000000..d340af155d61 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Include/MmcHost.h @@ -0,0 +1,225 @@ +/** @file + Definition of the MMC Host Protocol + + Copyright (c) 2011-2014, ARM Limited. All rights reserved. + Copyright (c) Academy of Intelligent Innovation. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + + **/ + +#ifndef __MMC_HOST_PROTOCOL_H__ +#define __MMC_HOST_PROTOCOL_H__ + +/* + * Global ID for the MMC Host Protocol + */ +#define MMC_HOST_PROTOCOL_GUID \ + { 0x3e591c00, 0x9e4a, 0x11df, {0x92, 0x44, 0x00, 0x02, 0xA5, 0xF5, 0xF5,= 0x1B } } + +#define MMC_BLOCK_SIZE 512U +#define MMC_BLOCK_MASK (MMC_BLOCK_SIZE - 1U) +#define MMC_BOOT_CLK_RATE (400 * 1000) + +/* Values in EXT CSD register */ +#define MMC_BUS_WIDTH_1 0U +#define MMC_BUS_WIDTH_4 1U +#define MMC_BUS_WIDTH_8 2U +#define MMC_BUS_WIDTH_DDR_4 5U +#define MMC_BUS_WIDTH_DDR_8 6U + +#define MMC_RSP_48 BIT0 +#define MMC_RSP_136 BIT1 /* 136 bit response */ +#define MMC_RSP_CRC BIT2 /* expect valid crc */ +#define MMC_RSP_CMD_IDX BIT3 /* response contains cmd idx */ +#define MMC_RSP_BUSY BIT4 /* device may be busy */ + +/* JEDEC 4.51 chapter 6.12 */ +#define MMC_RESPONSE_R1 (MMC_RSP_48 | MMC_RSP_CMD_IDX | MMC_RSP_CRC) +#define MMC_RESPONSE_R1B (MMC_RESPONSE_R1 | MMC_RSP_BUSY) +#define MMC_RESPONSE_R2 (MMC_RSP_48 | MMC_RSP_136 | MMC_RSP_CRC) +#define MMC_RESPONSE_R3 (MMC_RSP_48) +#define MMC_RESPONSE_R4 (MMC_RSP_48) +#define MMC_RESPONSE_R5 (MMC_RSP_48 | MMC_RSP_CRC | MMC_RSP_CMD_IDX) +#define MMC_RESPONSE_R6 (MMC_RSP_48 | MMC_RSP_CRC | MMC_RSP_CMD_IDX) +#define MMC_RESPONSE_R7 (MMC_RSP_48 | MMC_RSP_CRC | MMC_RSP_CMD_IDX) + +typedef UINT32 MMC_RESPONSE_TYPE; + +typedef UINT32 MMC_IDX; + +#define MMC_CMD_WAIT_RESPONSE (1 << 16) +#define MMC_CMD_LONG_RESPONSE (1 << 17) +#define MMC_CMD_NO_CRC_RESPONSE (1 << 18) + +#define MMC_INDX(Index) ((Index) & 0xFFFF) +#define MMC_GET_INDX(MmcCmd) ((MmcCmd) & 0xFFFF) + +#define MMC_CMD0 (MMC_INDX(0)) +#define MMC_CMD1 (MMC_INDX(1)) +#define MMC_CMD2 (MMC_INDX(2)) +#define MMC_CMD3 (MMC_INDX(3)) +#define MMC_CMD5 (MMC_INDX(5)) +#define MMC_CMD6 (MMC_INDX(6)) +#define MMC_CMD7 (MMC_INDX(7)) +#define MMC_CMD8 (MMC_INDX(8)) +#define MMC_CMD9 (MMC_INDX(9)) +#define MMC_CMD11 (MMC_INDX(11)) +#define MMC_CMD12 (MMC_INDX(12)) +#define MMC_CMD13 (MMC_INDX(13)) +#define MMC_CMD16 (MMC_INDX(16)) +#define MMC_CMD17 (MMC_INDX(17)) +#define MMC_CMD18 (MMC_INDX(18)) +#define MMC_CMD20 (MMC_INDX(20)) +#define MMC_CMD23 (MMC_INDX(23)) +#define MMC_CMD24 (MMC_INDX(24)) +#define MMC_CMD25 (MMC_INDX(25)) +#define MMC_CMD55 (MMC_INDX(55)) +#define MMC_ACMD22 (MMC_INDX(22)) +#define MMC_ACMD41 (MMC_INDX(41)) +#define MMC_ACMD51 (MMC_INDX(51)) + +// Valid responses for CMD1 in eMMC +#define EMMC_CMD1_CAPACITY_LESS_THAN_2GB 0x00FF8080 // Capacity <=3D 2G= B, byte addressing used +#define EMMC_CMD1_CAPACITY_GREATER_THAN_2GB 0x40FF8080 // Capacity > 2GB, = 512-byte sector addressing used + +#define MMC_STATUS_APP_CMD (1 << 5) + +typedef enum _MMC_STATE { + MmcInvalidState =3D 0, + MmcHwInitializationState, + MmcIdleState, + MmcReadyState, + MmcIdentificationState, + MmcStandByState, + MmcTransferState, + MmcSendingDataState, + MmcReceiveDataState, + MmcProgrammingState, + MmcDisconnectState, +} MMC_STATE; + +typedef enum _CARD_DETECT_STATE { + CardDetectRequired =3D 0, + CardDetectInProgress, + CardDetectCompleted +} CARD_DETECT_STATE; + +#define EMMCBACKWARD (0) +#define EMMCHS26 (1 << 0) // High-Speed @26MHz at rated d= evice voltages +#define EMMCHS52 (1 << 1) // High-Speed @52MHz at rated d= evice voltages +#define EMMCHS52DDR1V8 (1 << 2) // High-Speed Dual Data Rate @5= 2MHz 1.8V or 3V I/O +#define EMMCHS52DDR1V2 (1 << 3) // High-Speed Dual Data Rate @5= 2MHz 1.2V I/O +#define EMMCHS200SDR1V8 (1 << 4) // HS200 Single Data Rate @200M= Hz 1.8V I/O +#define EMMCHS200SDR1V2 (1 << 5) // HS200 Single Data Rate @200M= Hz 1.2V I/O +#define EMMCHS400DDR1V8 (1 << 6) // HS400 Dual Data Rate @400MHz= 1.8V I/O +#define EMMCHS400DDR1V2 (1 << 7) // HS400 Dual Data Rate @400MHz= 1.2V I/O + +/// +/// Forward declaration for EFI_MMC_HOST_PROTOCOL +/// +typedef struct _EFI_MMC_HOST_PROTOCOL EFI_MMC_HOST_PROTOCOL; + +typedef +BOOLEAN +(EFIAPI *MMC_ISCARDPRESENT) ( + IN EFI_MMC_HOST_PROTOCOL *This + ); + +typedef +BOOLEAN +(EFIAPI *MMC_ISREADONLY) ( + IN EFI_MMC_HOST_PROTOCOL *This + ); + +typedef +EFI_STATUS +(EFIAPI *MMC_BUILDDEVICEPATH) ( + IN EFI_MMC_HOST_PROTOCOL *This, + OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath + ); + +typedef +EFI_STATUS +(EFIAPI *MMC_NOTIFYSTATE) ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN MMC_STATE State + ); + +typedef +EFI_STATUS +(EFIAPI *MMC_SENDCOMMAND) ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN MMC_IDX Cmd, + IN UINT32 Argument, + IN MMC_RESPONSE_TYPE Type, + IN UINT32 *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *MMC_READBLOCKDATA) ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Length, + OUT UINT32 *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *MMC_WRITEBLOCKDATA) ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Length, + IN UINT32 *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *MMC_SETIOS) ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN UINT32 BusClockFreq, + IN UINT32 BusWidth + ); + +typedef +EFI_STATUS +(EFIAPI *MMC_PREPARE) ( + IN EFI_MMC_HOST_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Length, + IN UINTN Buffer + ); + +typedef +BOOLEAN +(EFIAPI *MMC_ISMULTIBLOCK) ( + IN EFI_MMC_HOST_PROTOCOL *This + ); + +struct _EFI_MMC_HOST_PROTOCOL { + UINT32 Revision; + MMC_ISCARDPRESENT IsCardPresent; + MMC_ISREADONLY IsReadOnly; + MMC_BUILDDEVICEPATH BuildDevicePath; + + MMC_NOTIFYSTATE NotifyState; + + MMC_SENDCOMMAND SendCommand; + + MMC_READBLOCKDATA ReadBlockData; + MMC_WRITEBLOCKDATA WriteBlockData; + + MMC_SETIOS SetIos; + MMC_PREPARE Prepare; + MMC_ISMULTIBLOCK IsMultiBlock; +}; + +#define MMC_HOST_PROTOCOL_REVISION 0x00010002 // 1.2 + +#define MMC_HOST_HAS_SETIOS(Host) (Host->Revision >=3D MMC_HOST_PROT= OCOL_REVISION && \ + Host->SetIos !=3D NULL) +#define MMC_HOST_HAS_ISMULTIBLOCK(Host) (Host->Revision >=3D MMC_HOST_PROT= OCOL_REVISION && \ + Host->IsMultiBlock !=3D NULL) + +#endif /* __MMC_HOST_PROTOCOL_H__ */ diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/ComponentName.c b/Sili= con/Sophgo/SG2042Pkg/Drivers/MmcDxe/ComponentName.c new file mode 100644 index 000000000000..eb66c68a54c7 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/ComponentName.c @@ -0,0 +1,156 @@ +/** @file + Component Name Protocol implementation for the MMC DXE driver + + Copyright (c) 2011, ARM Limited. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "Mmc.h" + +// +// EFI Component Name Protocol +// +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gMmcComponentNa= me =3D { + MmcGetDriverName, + MmcGetControllerName, + "eng" +}; + +// +// EFI Component Name 2 Protocol +// +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gMmcComponentNa= me2 =3D { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)MmcGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)MmcGetControllerName, + "en" +}; + +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE +mMmcDriverNameTable[] =3D { + {"eng;en", L"MMC/SD Card Interface Driver"}, + {NULL, NULL} +}; + +/** + Retrieves a Unicode string that is the user readable name of the driver. + + This function retrieves the user readable name of a driver in the form o= f a + Unicode string. If the driver specified by This has a user readable name= in + the language specified by Language, then a pointer to the driver name is + returned in DriverName, and EFI_SUCCESS is returned. If the driver speci= fied + by This does not support the language specified by Language, + then EFI_UNSUPPORTED is returned. + + @param This A pointer to the EFI_COMPONENT_NAME2_PROTO= COL or + EFI_COMPONENT_NAME_PROTOCOL instance. + @param Language A pointer to a Null-terminated ASCII string + array indicating the language. This is the + language of the driver name that the calle= r is + requesting, and it must match one of the + languages specified in SupportedLanguages.= The + number of languages supported by a driver = is up + to the driver writer. Language is specified + in RFC 4646 or ISO 639-2 language code for= mat. + @param DriverName A pointer to the Unicode string to return. + This Unicode string is the name of the + driver specified by This in the language + specified by Language. + + @retval EFI_SUCCESS The Unicode string for the Driver specifie= d by + This and the language specified by Languag= e was + returned in DriverName. + @retval EFI_INVALID_PARAMETER Language is NULL. + @retval EFI_INVALID_PARAMETER DriverName is NULL. + @retval EFI_UNSUPPORTED The driver specified by This does not supp= ort + the language specified by Language. + +**/ +EFI_STATUS +EFIAPI +MmcGetDriverName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName + ) +{ + return LookupUnicodeString2 ( + Language, + This->SupportedLanguages, + mMmcDriverNameTable, + DriverName, + (BOOLEAN)(This =3D=3D &gMmcComponentName) + ); +} + +/** + Retrieves a Unicode string that is the user readable name of the control= ler + that is being managed by a driver. + + This function retrieves the user readable name of the controller specifi= ed by + ControllerHandle and ChildHandle in the form of a Unicode string. If the + driver specified by This has a user readable name in the language specif= ied by + Language, then a pointer to the controller name is returned in Controlle= rName, + and EFI_SUCCESS is returned. If the driver specified by This is not cur= rently + managing the controller specified by ControllerHandle and ChildHandle, + then EFI_UNSUPPORTED is returned. If the driver specified by This does = not + support the language specified by Language, then EFI_UNSUPPORTED is retu= rned. + + @param This A pointer to the EFI_COMPONENT_NAME2_PROTO= COL or + EFI_COMPONENT_NAME_PROTOCOL instance. + @param ControllerHandle The handle of a controller that the driver + specified by This is managing. This handle + specifies the controller whose name is to = be + returned. + @param ChildHandle The handle of the child controller to retr= ieve + the name of. This is an optional paramete= r that + may be NULL. It will be NULL for device + drivers. It will also be NULL for a bus d= rivers + that wish to retrieve the name of the bus + controller. It will not be NULL for a bus + driver that wishes to retrieve the name of= a + child controller. + @param Language A pointer to a Null-terminated ASCII string + array indicating the language. This is the + language of the driver name that the calle= r is + requesting, and it must match one of the + languages specified in SupportedLanguages.= The + number of languages supported by a driver = is up + to the driver writer. Language is specifie= d in + RFC 4646 or ISO 639-2 language code format. + @param ControllerName A pointer to the Unicode string to return. + This Unicode string is the name of the + controller specified by ControllerHandle a= nd + ChildHandle in the language specified by + Language from the point of view of the dri= ver + specified by This. + + @retval EFI_SUCCESS The Unicode string for the user readable n= ame in + the language specified by Language for the + driver specified by This was returned in + DriverName. + @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. + @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a va= lid + EFI_HANDLE. + @retval EFI_INVALID_PARAMETER Language is NULL. + @retval EFI_INVALID_PARAMETER ControllerName is NULL. + @retval EFI_UNSUPPORTED The driver specified by This is not curren= tly + managing the controller specified by + ControllerHandle and ChildHandle. + @retval EFI_UNSUPPORTED The driver specified by This does not supp= ort + the language specified by Language. + +**/ +EFI_STATUS +EFIAPI +MmcGetControllerName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle O= PTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName + ) +{ + return EFI_UNSUPPORTED; +} diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/Diagnostics.c b/Silico= n/Sophgo/SG2042Pkg/Drivers/MmcDxe/Diagnostics.c new file mode 100644 index 000000000000..e7ea395a9462 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/Diagnostics.c @@ -0,0 +1,323 @@ +/** @file + Diagnostics Protocol implementation for the MMC DXE driver + + Copyright (c) 2011-2014, ARM Limited. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include + +#include "Mmc.h" + +#define DIAGNOSTIC_LOGBUFFER_MAXCHAR 1024 + +CHAR16* mLogBuffer =3D NULL; +UINTN mLogRemainChar =3D 0; + +/** + + Initialize the diagnostic log by allocating memory for the log + buffer and setting the maximum buffer size. + + @param MaxBufferChar The maximum number of CHAR16 characters the log = buffer can hold. + + @retval A pointer to the allocated log buffer. + +**/ +CHAR16* +DiagnosticInitLog ( + UINTN MaxBufferChar + ) +{ + mLogRemainChar =3D MaxBufferChar; + mLogBuffer =3D AllocatePool ((UINTN)MaxBufferChar * sizeof (CHAR16)); + return mLogBuffer; +} + +/** + + Log a diagnostic string by copying it to the log buffer. + + @param Str A pointer to the constant CHAR16 string to be logged. + + @retval The length of the logged string. + +**/ +UINTN +DiagnosticLog ( + CONST CHAR16* Str + ) +{ + UINTN len =3D StrLen (Str); + if (len < mLogRemainChar) { + StrCpyS (mLogBuffer, mLogRemainChar, Str); + mLogRemainChar -=3D len; + mLogBuffer +=3D len; + return len; + } else { + return 0; + } +} + +/** + + Generate a random buffer by filling it with pseudo-random data. + + @param Buffer A pointer to the buffer where the generated data wil= l be stored. + @param BufferSize The size of the buffer in bytes. + +**/ +VOID +GenerateRandomBuffer ( + VOID* Buffer, + UINTN BufferSize + ) +{ + UINT64 i; + UINT64* Buffer64 =3D (UINT64*)Buffer; + + for (i =3D 0; i < (BufferSize >> 3); i++) { + *Buffer64 =3D i | (~i << 32); + Buffer64++; + } +} + +/** + + Compares two buffers by iterating through each 64-bit element in the buf= fers. + + @param BufferA A pointer to the first buffer to compare. + @param BufferB A pointer to the second buffer to compare. + @param BufferSize The size of the buffers in bytes. + + @retval TRUE if the buffers are equal, FALSE if a mismatch is found. + +**/ +BOOLEAN +CompareBuffer ( + VOID *BufferA, + VOID *BufferB, + UINTN BufferSize + ) +{ + UINTN i; + UINT64* BufferA64 =3D (UINT64*)BufferA; + UINT64* BufferB64 =3D (UINT64*)BufferB; + + for (i =3D 0; i < (BufferSize >> 3); i++) { + if (*BufferA64 !=3D *BufferB64) { + DEBUG ((DEBUG_ERROR, "CompareBuffer: Error at %i", i)); + DEBUG ((DEBUG_ERROR, "(0x%lX) !=3D (0x%lX)\n", *BufferA64, *BufferB6= 4)); + return FALSE; + } + BufferA64++; + BufferB64++; + } + return TRUE; +} + +/** + Performs a read/write data test on an MMC device. + + @param MmcHostInstance A pointer to the MMC host instance. + @param Lba The logical block address to perform the test o= n. + @param BufferSize The size of the buffer in bytes. + + @retval EFI_SUCCESS The test completes successfully. + @retval EFI_NO_MEDIA No media (MMC device) is detected. + @retval EFI_NOT_READY The MMC device is not in the transfer sta= te. + @retval EFI_INVALID_PARAMETER The written data does not match the read = data. + +**/ +EFI_STATUS +MmcReadWriteDataTest ( + MMC_HOST_INSTANCE *MmcHostInstance, + EFI_LBA Lba, + UINTN BufferSize + ) +{ + VOID *BackBuffer; + VOID *WriteBuffer; + VOID *ReadBuffer; + EFI_STATUS Status; + + // Check if a Media is Present + if (!MmcHostInstance->BlockIo.Media->MediaPresent) { + DiagnosticLog (L"ERROR: No Media Present\n"); + return EFI_NO_MEDIA; + } + + if (MmcHostInstance->State !=3D MmcTransferState) { + DiagnosticLog (L"ERROR: Not ready for Transfer state\n"); + return EFI_NOT_READY; + } + + BackBuffer =3D AllocatePool (BufferSize); + WriteBuffer =3D AllocatePool (BufferSize); + ReadBuffer =3D AllocatePool (BufferSize); + + // Read (and save) buffer at a specific location + Status =3D MmcReadBlocks (&(MmcHostInstance->BlockIo), + MmcHostInstance->BlockIo.Media->MediaId, Lba, BufferSize, Bac= kBuffer); + if (Status !=3D EFI_SUCCESS) { + DiagnosticLog (L"ERROR: Fail to Read Block (1)\n"); + return Status; + } + + // Write buffer at the same location + GenerateRandomBuffer (WriteBuffer, BufferSize); + Status =3D MmcWriteBlocks (&(MmcHostInstance->BlockIo), + MmcHostInstance->BlockIo.Media->MediaId, Lba, BufferSize, Wri= teBuffer); + if (Status !=3D EFI_SUCCESS) { + DiagnosticLog (L"ERROR: Fail to Write Block (1)\n"); + return Status; + } + + // Read the buffer at the same location + Status =3D MmcReadBlocks (&(MmcHostInstance->BlockIo), + MmcHostInstance->BlockIo.Media->MediaId, Lba, BufferSize, Rea= dBuffer); + if (Status !=3D EFI_SUCCESS) { + DiagnosticLog (L"ERROR: Fail to Read Block (2)\n"); + return Status; + } + + // Check that is conform + if (!CompareBuffer (ReadBuffer, WriteBuffer, BufferSize)) { + DiagnosticLog (L"ERROR: Fail to Read/Write Block (1)\n"); + return EFI_INVALID_PARAMETER; + } + + // Restore content at the original location + Status =3D MmcWriteBlocks (&(MmcHostInstance->BlockIo), + MmcHostInstance->BlockIo.Media->MediaId, Lba, BufferSize, Bac= kBuffer); + if (Status !=3D EFI_SUCCESS) { + DiagnosticLog (L"ERROR: Fail to Write Block (2)\n"); + return Status; + } + + // Read the restored content + Status =3D MmcReadBlocks (&(MmcHostInstance->BlockIo), + MmcHostInstance->BlockIo.Media->MediaId, Lba, BufferSize, Rea= dBuffer); + if (Status !=3D EFI_SUCCESS) { + DiagnosticLog (L"ERROR: Fail to Read Block (3)\n"); + return Status; + } + + // Check the content is correct + if (!CompareBuffer (ReadBuffer, BackBuffer, BufferSize)) { + DiagnosticLog (L"ERROR: Fail to Read/Write Block (2)\n"); + return EFI_INVALID_PARAMETER; + } + + return EFI_SUCCESS; +} + +/** + Runs diagnostics tests on the MMC driver for the specified controller ha= ndle. + + @param This A pointer to the EFI_DRIVER_DIAGNOSTICS_PROTOCO= L instance. + @param ControllerHandle The handle of the controller to run diagnostics= on. + @param ChildHandle The handle of the child controller to run diagn= ostics on (optional). + @param DiagnosticType The type of diagnostics to run. + @param Language The language code (only English is supported). + @param ErrorType The type of error encountered during diagnostic= s (if any). + @param BufferSize The size of the diagnostic buffer. + @param Buffer The diagnostic buffer. + + @retval EFI_SUCCESS The diagnostics completed successfully. + @retval EFI_INVALID_PARAMETER One or more parameters are invalid. + @retval EFI_UNSUPPORTED The specified language or controller is n= ot supported. +*/ +EFI_STATUS +EFIAPI +MmcDriverDiagnosticsRunDiagnostics ( + IN EFI_DRIVER_DIAGNOSTICS_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN EFI_DRIVER_DIAGNOSTIC_TYPE DiagnosticType, + IN CHAR8 *Language, + OUT EFI_GUID **ErrorType, + OUT UINTN *BufferSize, + OUT CHAR16 **Buffer + ) +{ + LIST_ENTRY *CurrentLink; + MMC_HOST_INSTANCE *MmcHostInstance; + EFI_STATUS Status; + + if ((Language =3D=3D NULL) || + (ErrorType =3D=3D NULL) || + (Buffer =3D=3D NULL) || + (ControllerHandle =3D=3D NULL) || + (BufferSize =3D=3D NULL)) { + return EFI_INVALID_PARAMETER; + } + + // Check Language is supported (i.e. is "en-*" - only English is support= ed) + if (AsciiStrnCmp (Language, "en", 2) !=3D 0) { + return EFI_UNSUPPORTED; + } + + Status =3D EFI_SUCCESS; + *ErrorType =3D NULL; + *BufferSize =3D DIAGNOSTIC_LOGBUFFER_MAXCHAR; + *Buffer =3D DiagnosticInitLog (DIAGNOSTIC_LOGBUFFER_MAXCHAR); + + DiagnosticLog (L"MMC Driver Diagnostics\n"); + + // Find the MMC Host instance on which we have been asked to run diagnos= tics + MmcHostInstance =3D NULL; + CurrentLink =3D mMmcHostPool.ForwardLink; + while (CurrentLink !=3D NULL && CurrentLink !=3D &mMmcHostPool && (Statu= s =3D=3D EFI_SUCCESS)) { + MmcHostInstance =3D MMC_HOST_INSTANCE_FROM_LINK (CurrentLink); + ASSERT (MmcHostInstance !=3D NULL); + if (MmcHostInstance->MmcHandle =3D=3D ControllerHandle) { + break; + } + CurrentLink =3D CurrentLink->ForwardLink; + } + + // If we didn't find the controller, return EFI_UNSUPPORTED + if ((MmcHostInstance =3D=3D NULL) + || (MmcHostInstance->MmcHandle !=3D ControllerHandle)) { + return EFI_UNSUPPORTED; + } + + // LBA=3D1 Size=3DBlockSize + DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block\n"); + Status =3D MmcReadWriteDataTest (MmcHostInstance, 1, MmcHostInstance->Bl= ockIo.Media->BlockSize); + + // LBA=3D2 Size=3DBlockSize + DiagnosticLog (L"MMC Driver Diagnostics - Test: Second Block\n"); + Status =3D MmcReadWriteDataTest (MmcHostInstance, 2, MmcHostInstance->Bl= ockIo.Media->BlockSize); + + // LBA=3D10 Size=3DBlockSize + DiagnosticLog (L"MMC Driver Diagnostics - Test: Any Block\n"); + Status =3D MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->Block= Io.Media->LastBlock >> 1, + MmcHostInstance->BlockIo.Media->BlockSize); + + // LBA=3DLastBlock Size=3DBlockSize + DiagnosticLog (L"MMC Driver Diagnostics - Test: Last Block\n"); + Status =3D MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->Block= Io.Media->LastBlock, + MmcHostInstance->BlockIo.Media->BlockSize); + + // LBA=3D1 Size=3D2*BlockSize + DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block / 2 BlockSSi= ze\n"); + Status =3D MmcReadWriteDataTest (MmcHostInstance, 1, 2 * MmcHostInstance= ->BlockIo.Media->BlockSize); + + return Status; +} + +// +// EFI Driver Diagnostics 2 Protocol +// +GLOBAL_REMOVE_IF_UNREFERENCED EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gMmcDriverD= iagnostics2 =3D { + (EFI_DRIVER_DIAGNOSTICS2_RUN_DIAGNOSTICS)MmcDriverDiagnosticsRunDiagnost= ics, + "en" +}; diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/Mmc.c b/Silicon/Sophgo= /SG2042Pkg/Drivers/MmcDxe/Mmc.c new file mode 100644 index 000000000000..401fe698e537 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/Mmc.c @@ -0,0 +1,527 @@ +/** @file + Main file of the MMC Dxe driver. The driver entrypoint is defined into t= his file. + + Copyright (c) 2011-2013, ARM Limited. All rights reserved. + Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +#include +#include +#include +#include +#include + +#include "Mmc.h" + +EFI_BLOCK_IO_MEDIA mMmcMediaTemplate =3D { + SIGNATURE_32 ('m','m','c','o'), // MediaId + TRUE, // RemovableMedia + FALSE, // MediaPresent + FALSE, // LogicalPartition + FALSE, // ReadOnly + FALSE, // WriteCaching + 512, // BlockSize + 4, // IoAlign + 0, // Pad + 0 // LastBlock +}; + +// +// This device structure is serviced as a header. +// Its next field points to the first root bridge device node. +// +LIST_ENTRY mMmcHostPool; + +/** + Event triggered by the timer to check if any cards have been removed + or if new ones have been plugged in +**/ + +EFI_EVENT gCheckCardsEvent; + +/** + Initialize the MMC Host Pool to support multiple MMC devices +**/ +VOID +InitializeMmcHostPool ( + VOID + ) +{ + InitializeListHead (&mMmcHostPool); +} + +/** + Insert a new Mmc Host controller to the pool. + + @param MmcHostInstance The MMC_HOST_INSTANCE to be inserted into the p= ool. + +**/ +VOID +InsertMmcHost ( + IN MMC_HOST_INSTANCE *MmcHostInstance + ) +{ + InsertTailList (&mMmcHostPool, &(MmcHostInstance->Link)); +} + +/** + Remove a new Mmc Host controller to the pool. + + @param MmcHostInstance The MMC_HOST_INSTANCE to be removed from the po= ol. + +**/ +VOID +RemoveMmcHost ( + IN MMC_HOST_INSTANCE *MmcHostInstance + ) +{ + RemoveEntryList (&(MmcHostInstance->Link)); +} + +/** + This function creates a new MMC host controller instance and initializes= its members. + It allocates memory for the instance, sets the necessary fields, + and installs the BlockIO and DevicePath protocols. + + @param MmcHost The EFI_MMC_HOST_PROTOCOL instance representing the MM= C host. + + @return A pointer to the created MMC_HOST_INSTANCE on success, or NULL = on failure. +**/ +MMC_HOST_INSTANCE* +CreateMmcHostInstance ( + IN EFI_MMC_HOST_PROTOCOL* MmcHost + ) +{ + EFI_STATUS Status; + MMC_HOST_INSTANCE* MmcHostInstance; + EFI_DEVICE_PATH_PROTOCOL *NewDevicePathNode; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + + MmcHostInstance =3D AllocateZeroPool (sizeof (MMC_HOST_INSTANCE)); + if (MmcHostInstance =3D=3D NULL) { + return NULL; + } + + MmcHostInstance->Signature =3D MMC_HOST_INSTANCE_SIGNATURE; + + MmcHostInstance->State =3D MmcHwInitializationState; + + MmcHostInstance->BlockIo.Media =3D AllocateCopyPool (sizeof (EFI_BLOCK_I= O_MEDIA), &mMmcMediaTemplate); + if (MmcHostInstance->BlockIo.Media =3D=3D NULL) { + goto FREE_INSTANCE; + } + + MmcHostInstance->BlockIo.Revision =3D EFI_BLOCK_IO_INTERFACE_REVISION; + MmcHostInstance->BlockIo.Reset =3D MmcReset; + MmcHostInstance->BlockIo.ReadBlocks =3D MmcReadBlocks; + MmcHostInstance->BlockIo.WriteBlocks =3D MmcWriteBlocks; + MmcHostInstance->BlockIo.FlushBlocks =3D MmcFlushBlocks; + + MmcHostInstance->MmcHost =3D MmcHost; + + // Create DevicePath for the new MMC Host + Status =3D MmcHost->BuildDevicePath (MmcHost, &NewDevicePathNode); + if (EFI_ERROR (Status)) { + goto FREE_MEDIA; + } + + DevicePath =3D (EFI_DEVICE_PATH_PROTOCOL*)AllocatePool (END_DEVICE_PATH_= LENGTH); + if (DevicePath =3D=3D NULL) { + goto FREE_MEDIA; + } + + SetDevicePathEndNode (DevicePath); + MmcHostInstance->DevicePath =3D AppendDevicePathNode (DevicePath, NewDev= icePathNode); + + // Publish BlockIO protocol interface + Status =3D gBS->InstallMultipleProtocolInterfaces ( + &MmcHostInstance->MmcHandle, + &gEfiBlockIoProtocolGuid, &MmcHostInstance->BlockIo, + &gEfiDevicePathProtocolGuid, MmcHostInstance->DevicePath, + NULL + ); + if (EFI_ERROR (Status)) { + goto FREE_DEVICE_PATH; + } + + return MmcHostInstance; + +FREE_DEVICE_PATH: + FreePool (DevicePath); + +FREE_MEDIA: + FreePool (MmcHostInstance->BlockIo.Media); + +FREE_INSTANCE: + FreePool (MmcHostInstance); + + return NULL; +} + +/** + This function uninstalls the BlockIO and DevicePath protocols from the M= MC host controller instance, + and frees the memory allocated for the instance and its associated resou= rces. + + @param MmcHostInstance The MMC_HOST_INSTANCE to be destroyed. + + @retval EFI_SUCCESS The instance is successfully destroyed. + @retval Other The instance cannot be destroyed. + +**/ +EFI_STATUS +DestroyMmcHostInstance ( + IN MMC_HOST_INSTANCE* MmcHostInstance + ) +{ + EFI_STATUS Status; + + // Uninstall Protocol Interfaces + Status =3D gBS->UninstallMultipleProtocolInterfaces ( + MmcHostInstance->MmcHandle, + &gEfiBlockIoProtocolGuid, &(MmcHostInstance->BlockIo), + &gEfiDevicePathProtocolGuid, MmcHostInstance->DevicePath, + NULL + ); + ASSERT_EFI_ERROR (Status); + + // Free Memory allocated for the instance + if (MmcHostInstance->BlockIo.Media) { + FreePool (MmcHostInstance->BlockIo.Media); + } + if (MmcHostInstance->CardInfo.ECSDData) { + FreePages (MmcHostInstance->CardInfo.ECSDData, EFI_SIZE_TO_PAGES (size= of (ECSD))); + } + FreePool (MmcHostInstance); + + return Status; +} + +/** + This function checks if the controller implement the Mmc Host and the De= vice Path Protocols. + + @param This A pointer to the EFI_DRIVER_BINDING_PROTOCO= L instance. + @param Controller The handle of the controller to check for s= upport. + @param RemainingDevicePath A pointer to the remaining portion of the d= evice path. + + @retval EFI_SUCCESS The controller is supported. + @retval EFI_UNSUPPORTED The controller is unsupported. +**/ +EFI_STATUS +EFIAPI +MmcDriverBindingSupported ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ) +{ + EFI_STATUS Status; + //EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; + EFI_MMC_HOST_PROTOCOL *MmcHost; + EFI_DEV_PATH_PTR Node; + + // + // Check RemainingDevicePath validation + // + if (RemainingDevicePath !=3D NULL) { + // + // Check if RemainingDevicePath is the End of Device Path Node, + // if yes, go on checking other conditions + // + if (!IsDevicePathEnd (RemainingDevicePath)) { + // + // If RemainingDevicePath isn't the End of Device Path Node, + // check its validation + // + Node.DevPath =3D RemainingDevicePath; + if (Node.DevPath->Type !=3D HARDWARE_DEVICE_PATH || + Node.DevPath->SubType !=3D HW_VENDOR_DP || + DevicePathNodeLength (Node.DevPath) !=3D sizeof (VENDOR_DEVICE_P= ATH)) { + return EFI_UNSUPPORTED; + } + } + } + + // + // Check if Mmc Host protocol is installed by platform + // + Status =3D gBS->OpenProtocol ( + Controller, + &gSophgoMmcHostProtocolGuid, + (VOID**)&MmcHost, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); + if (Status =3D=3D EFI_ALREADY_STARTED) { + return EFI_SUCCESS; + } + if (EFI_ERROR (Status)) { + return Status; + } + + // + // Close the Mmc Host used to perform the supported test + // + gBS->CloseProtocol ( + Controller, + &gSophgoMmcHostProtocolGuid, + This->DriverBindingHandle, + Controller + ); + + return EFI_SUCCESS; +} + +/** + This function opens the Mmc Host Protocol, creates an MMC_HOST_INSTANCE,= and adds it to the MMC host pool. + + @param This A pointer to the EFI_DRIVER_BINDING_PROTOCO= L instance. + @param Controller The handle of the controller to start the d= river on. + @param RemainingDevicePath A pointer to the remaining portion of the d= evice path. + + @retval EFI_SUCCESS The driver is successfully started. + @retval Other The driver failed to start. + +**/ +EFI_STATUS +EFIAPI +MmcDriverBindingStart ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + ) +{ + EFI_STATUS Status; + MMC_HOST_INSTANCE *MmcHostInstance; + EFI_MMC_HOST_PROTOCOL *MmcHost; + + // + // Check RemainingDevicePath validation + // + if (RemainingDevicePath !=3D NULL) { + // + // Check if RemainingDevicePath is the End of Device Path Node, + // if yes, return EFI_SUCCESS + // + if (IsDevicePathEnd (RemainingDevicePath)) { + return EFI_SUCCESS; + } + } + + // + // Get the Mmc Host protocol + // + Status =3D gBS->OpenProtocol ( + Controller, + &gSophgoMmcHostProtocolGuid, + (VOID**)&MmcHost, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); + if (EFI_ERROR (Status)) { + if (Status =3D=3D EFI_ALREADY_STARTED) { + return EFI_SUCCESS; + } + return Status; + } + + MmcHostInstance =3D CreateMmcHostInstance (MmcHost); + + if (MmcHostInstance !=3D NULL) { + // Add the handle to the pool + InsertMmcHost (MmcHostInstance); + + MmcHostInstance->Initialized =3D FALSE; + + // Detect card presence now + CheckCardsCallback (NULL, NULL); + } + + return EFI_SUCCESS; +} + +/** + This function closes the Mmc Host Protocol, removes the MMC_HOST_INSTANC= E from the pool, and destroys the instance. + + @param This A pointer to the EFI_DRIVER_BINDING_PROTOCOL = instance. + @param Controller The handle of the controller to stop the driv= er on. + @param NumberOfChildren The number of children handles. + @param ChildHandleBuffer An array of child handles. + + @retval EFI_SUCCESS The driver is successfully stopped. + @retval Other The driver failed to stop. + +**/ +EFI_STATUS +EFIAPI +MmcDriverBindingStop ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer + ) +{ + EFI_STATUS Status =3D EFI_SUCCESS; + LIST_ENTRY *CurrentLink; + MMC_HOST_INSTANCE *MmcHostInstance; + + MMC_TRACE ("MmcDriverBindingStop()"); + + // For each MMC instance + CurrentLink =3D mMmcHostPool.ForwardLink; + while (CurrentLink !=3D NULL && CurrentLink !=3D &mMmcHostPool && (Statu= s =3D=3D EFI_SUCCESS)) { + MmcHostInstance =3D MMC_HOST_INSTANCE_FROM_LINK (CurrentLink); + ASSERT (MmcHostInstance !=3D NULL); + + // Close gSophgoMmcHostProtocolGuid + Status =3D gBS->CloseProtocol ( + Controller, + &gSophgoMmcHostProtocolGuid, + (VOID**)&MmcHostInstance->MmcHost, + This->DriverBindingHandle + ); + + // Remove MMC Host Instance from the pool + RemoveMmcHost (MmcHostInstance); + + // Destroy MmcHostInstance + DestroyMmcHostInstance (MmcHostInstance); + } + + return Status; +} + +/** + Callback function to check MMC cards. + + @param[in] Event The event that is being triggered + @param[in] Context The context passed to the event + +**/ +VOID +EFIAPI +CheckCardsCallback ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + LIST_ENTRY *CurrentLink; + MMC_HOST_INSTANCE *MmcHostInstance; + EFI_STATUS Status; + + CurrentLink =3D mMmcHostPool.ForwardLink; + while (CurrentLink !=3D NULL && CurrentLink !=3D &mMmcHostPool) { + MmcHostInstance =3D MMC_HOST_INSTANCE_FROM_LINK (CurrentLink); + ASSERT (MmcHostInstance !=3D NULL); + + if (MmcHostInstance->MmcHost->IsCardPresent (MmcHostInstance->MmcHost)= =3D=3D !MmcHostInstance->Initialized) { + MmcHostInstance->State =3D MmcHwInitializationState; + MmcHostInstance->BlockIo.Media->MediaPresent =3D !MmcHostInstance->I= nitialized; + MmcHostInstance->Initialized =3D !MmcHostInstance->Initialized; + + if (MmcHostInstance->BlockIo.Media->MediaPresent) { + Status =3D InitializeMmcDevice (MmcHostInstance); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "CheckCardsCallback: Error InitializeMmcDev= ice, Status=3D%r.\n", Status)); + MmcHostInstance->Initialized =3D !MmcHostInstance->Initialized; + continue; + } + } + + Status =3D gBS->ReinstallProtocolInterface ( + (MmcHostInstance->MmcHandle), + &gEfiBlockIoProtocolGuid, + &(MmcHostInstance->BlockIo), + &(MmcHostInstance->BlockIo) + ); + + if (EFI_ERROR (Status)) { + Print (L"MMC Card: Error reinstalling BlockIo interface\n"); + } + } + + CurrentLink =3D CurrentLink->ForwardLink; + } +} + + +EFI_DRIVER_BINDING_PROTOCOL gMmcDriverBinding =3D { + MmcDriverBindingSupported, + MmcDriverBindingStart, + MmcDriverBindingStop, + 0xa, + NULL, + NULL +}; + +/** + This function is the entry point of the MMC DXE driver. + It initializes the MMC host pool, installs driver model protocols, + driver diagnostics, and sets up a timer for card detection. + + @param ImageHandle The image handle of the driver. + @param SystemTable A pointer to the EFI system table. + + @retval EFI_SUCCESS The driver is successfully initialized. + @retval Other The driver failed to initialize. + +**/ +EFI_STATUS +EFIAPI +MmcDxeInitialize ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + // + // Initializes MMC Host pool + // + InitializeMmcHostPool (); + + // + // Install driver model protocol(s). + // + Status =3D EfiLibInstallDriverBindingComponentName2 ( + ImageHandle, + SystemTable, + &gMmcDriverBinding, + ImageHandle, + &gMmcComponentName, + &gMmcComponentName2 + ); + ASSERT_EFI_ERROR (Status); + + // Install driver diagnostics + Status =3D gBS->InstallMultipleProtocolInterfaces ( + &ImageHandle, + &gEfiDriverDiagnostics2ProtocolGuid, + &gMmcDriverDiagnostics2, + NULL + ); + ASSERT_EFI_ERROR (Status); + + // Use a timer to detect if a card has been plugged in or removed + Status =3D gBS->CreateEvent ( + EVT_NOTIFY_SIGNAL | EVT_TIMER, + TPL_CALLBACK, + CheckCardsCallback, + NULL, + &gCheckCardsEvent + ); + ASSERT_EFI_ERROR (Status); + + Status =3D gBS->SetTimer (gCheckCardsEvent, + TimerPeriodic, + (UINT64)(10 * 1000 * 200)); // 200 ms + ASSERT_EFI_ERROR (Status); + + return Status; +} diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcBlockIo.c b/Silicon= /Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcBlockIo.c new file mode 100644 index 000000000000..31d2534402e0 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcBlockIo.c @@ -0,0 +1,646 @@ +/** @file + Block I/O Protocol implementation for MMC/SD cards. + + Copyright (c) 2011-2015, ARM Limited. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +#include "Mmc.h" + +#define MMCI0_BLOCKLEN 512 +#define MMCI0_TIMEOUT 1000 +#define MAX_BUF_LEN 0x1D00000 +#define MAX_BLK_CNT 0xE800 + +/** + Check if the R1 response indicates that the card is in the "Tran" state = and ready for data. + + @param[in] Response Pointer to the R1 response. + + @retval EFI_SUCCESS The card is in the "Tran" state and ready for da= ta. + @retval EFI_NOT_READY The card is not in the expected state. +**/ +STATIC +EFI_STATUS +R1TranAndReady ( + UINT32 *Response + ) +{ + if ((*Response & MMC_R0_READY_FOR_DATA) !=3D 0 && MMC_R0_CURRENTSTATE (R= esponse) =3D=3D MMC_R0_STATE_TRAN) { + return EFI_SUCCESS; + } + + return EFI_NOT_READY; +} + +/** + Validate the number of blocks written during a write operation. + + @param[in] MmcHostInstance Pointer to the MMC host instance. + @param[in] Count Expected number of blocks written. + @param[out] TransferredBlocks Actual number of blocks written. + + @retval EFI_SUCCESS The number of blocks written is valid. + @retval EFI_NOT_READY The card is not in the expected state. + @retval EFI_DEVICE_ERROR The number of blocks written is incorre= ct. + @retval Other An error occurred during the validation= process. + +**/ +STATIC +EFI_STATUS +ValidateWrittenBlockCount ( + IN MMC_HOST_INSTANCE *MmcHostInstance, + IN UINTN Count, + OUT UINTN *TransferredBlocks + ) +{ + UINT32 R1; + UINT8 Data[4]; + EFI_STATUS Status; + UINT32 BlocksWritten; + EFI_MMC_HOST_PROTOCOL *MmcHost; + + if (MmcHostInstance->CardInfo.CardType =3D=3D MMC_CARD || + MmcHostInstance->CardInfo.CardType =3D=3D MMC_CARD_HIGH || + MmcHostInstance->CardInfo.CardType =3D=3D EMMC_CARD) { + /* + * Not on MMC. + */ + *TransferredBlocks =3D Count; + return EFI_SUCCESS; + } + + MmcHost =3D MmcHostInstance->MmcHost; + + Status =3D MmcHost->SendCommand (MmcHost, MMC_CMD55, + MmcHostInstance->CardInfo.RCA << 16, MMC_RESPONSE_R1= , &R1); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a(%u): error: %r\n", __func__, __LINE__, Status= )); + return Status; + } + + Status =3D MmcHost->SendCommand (MmcHost, MMC_ACMD22, 0, MMC_RESPONSE_R1= , &R1); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a(%u): error: %r\n", + __func__, __LINE__, Status)); + return Status; + } + + Status =3D R1TranAndReady (&R1); + if (EFI_ERROR (Status)) { + return Status; + } + + // Read Data + Status =3D MmcHost->ReadBlockData (MmcHost, 0, sizeof (Data), + (VOID*)Data); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a(%u): error: %r\n", __func__, __LINE__, Status= )); + return Status; + } + + /* + * Big Endian. + */ + BlocksWritten =3D ((UINT32)Data[0] << 24) | + ((UINT32)Data[1] << 16) | + ((UINT32)Data[2] << 8) | + ((UINT32)Data[3] << 0); + if (BlocksWritten !=3D Count) { + DEBUG ((DEBUG_ERROR, "%a(%u): expected %u !=3D gotten %u\n", + __func__, __LINE__, Count, BlocksWritten)); + if (BlocksWritten =3D=3D 0) { + return EFI_DEVICE_ERROR; + } + } + + *TransferredBlocks =3D BlocksWritten; + return EFI_SUCCESS; +} + +/** + Wait until the card is in the "Tran" state. + + @param[in] MmcHostInstance Pointer to the MMC host instance. + + @retval EFI_SUCCESS The card is in the "Tran" state. + @retval EFI_NOT_READY The card is not in the expected state or t= imed out. + @retval Other An error occurred during the waiting proce= ss. + +**/ +STATIC +EFI_STATUS +WaitUntilTran ( + IN MMC_HOST_INSTANCE *MmcHostInstance + ) +{ + INTN Timeout; + UINT32 Response[1]; + EFI_STATUS Status; + EFI_MMC_HOST_PROTOCOL *MmcHost; + + Timeout =3D MMCI0_TIMEOUT; + Status =3D EFI_SUCCESS; + MmcHost =3D MmcHostInstance->MmcHost; + + while (Timeout--) { + /* + * We expect CMD13 to timeout while card is programming, + * because the card holds DAT0 low (busy). + */ + Status =3D MmcHost->SendCommand (MmcHost, MMC_CMD13, + MmcHostInstance->CardInfo.RCA << 16, MMC_RESPONSE_= R1, Response); + if (EFI_ERROR (Status) && Status !=3D EFI_TIMEOUT) { + DEBUG ((DEBUG_ERROR, "%a(%u) CMD13 failed: %r\n", __func__, __LINE= __, Status)); + return Status; + } + + if (Status =3D=3D EFI_SUCCESS) { + Status =3D R1TranAndReady (Response); + if (!EFI_ERROR (Status)) { + break; + } + } + gBS->Stall(1000); + } + + if (0 =3D=3D Timeout) { + DEBUG ((DEBUG_ERROR, "%a(%u) card is busy\n", __func__, __LINE__)); + return EFI_NOT_READY; + } + + return Status; +} + +/** + Sets the state of the MMC host instance and invokes the + NotifyState function of the MMC host, passing the updated state. + + @param MmcHostInstance Pointer to the MMC host instance. + @param State The new state to be set for the MMC host = instance. + + @retval EFI_STATUS + +**/ +EFI_STATUS +MmcNotifyState ( + IN MMC_HOST_INSTANCE *MmcHostInstance, + IN MMC_STATE State + ) +{ + MmcHostInstance->State =3D State; + return MmcHostInstance->MmcHost->NotifyState (MmcHostInstance->MmcHost, = State); +} + +/** + Reset the block device. + + This function implements EFI_BLOCK_IO_PROTOCOL.Reset(). + It resets the block device hardware. + ExtendedVerification is ignored in this implementation. + + @param This Indicates a pointer to the calling contex= t. + @param ExtendedVerification Indicates that the driver may perform a m= ore exhaustive + verification operation of the device duri= ng reset. + + @retval EFI_SUCCESS The block device was reset. + @retval EFI_DEVICE_ERROR The block device is not functioning corre= ctly and could not be reset. + +**/ +EFI_STATUS +EFIAPI +MmcReset ( + IN EFI_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification + ) +{ + MMC_HOST_INSTANCE *MmcHostInstance; + + MmcHostInstance =3D MMC_HOST_INSTANCE_FROM_BLOCK_IO_THIS (This); + + if (MmcHostInstance->MmcHost =3D=3D NULL) { + // Nothing to do + return EFI_SUCCESS; + } + + // If a card is not present then clear all media settings + if (!MmcHostInstance->MmcHost->IsCardPresent (MmcHostInstance->MmcHost))= { + MmcHostInstance->BlockIo.Media->MediaPresent =3D FALSE; + MmcHostInstance->BlockIo.Media->LastBlock =3D 0; + MmcHostInstance->BlockIo.Media->BlockSize =3D 512; // Should be ze= ro but there is a bug in DiskIo + MmcHostInstance->BlockIo.Media->ReadOnly =3D FALSE; + + // Indicate that the driver requires initialization + MmcHostInstance->State =3D MmcHwInitializationState; + + return EFI_SUCCESS; + } + + // Implement me. Either send a CMD0 (could not work for some MMC host) + // or just turn off/turn on power and restart Identification mode. + return EFI_SUCCESS; +} + +/** + Detect if an MMC card is present. + + @param[in] MmcHost Pointer to the EFI_MMC_HOST_PROTOCOL instance. + + @retval EFI_NO_MEDIA No MMC card is present. + @retval EFI_SUCCESS An MMC card is present. + +**/ +EFI_STATUS +MmcDetectCard ( + EFI_MMC_HOST_PROTOCOL *MmcHost + ) +{ + if (!MmcHost->IsCardPresent (MmcHost)) { + return EFI_NO_MEDIA; + } else { + return EFI_SUCCESS; + } +} + +/** + Stop the current transmission on the MMC bus. + + @param[in] MmcHost Pointer to the EFI_MMC_HOST_PROTOCOL instance. + + @retval EFI_SUCCESS The transmission was successfully stopped. + @retval Other An error occurred while stopping the transmission. + +**/ +EFI_STATUS +MmcStopTransmission ( + EFI_MMC_HOST_PROTOCOL *MmcHost + ) +{ + EFI_STATUS Status; + UINT32 Response[4]; + // Command 12 - Stop transmission (ends read or write) + // Normally only needed for streaming transfers or after error. + Status =3D MmcHost->SendCommand (MmcHost, MMC_CMD12, 0, MMC_RESPONSE_R1B= , Response); + return Status; +} + +/** + Transfer a block of data to or from the MMC device. + + @param[in] This Pointer to the EFI_BLOCK_IO_PROTOCOL in= stance. + @param[in] Cmd Command to be sent to the MMC device. + @param[in] Transfer Transfer type (MMC_IOBLOCKS_READ or MMC= _IOBLOCKS_WRITE). + @param[in] MediaId Media ID of the MMC device. + @param[in] Lba Logical Block Address. + @param[in] BufferSize Size of the data buffer. + @param[out] Buffer Pointer to the data buffer. + @param[out] TransferredSize Number of bytes transferred. + + @retval EFI_SUCCESS The data transfer was successful. + @retval EFI_NOT_READY The MMC device is not ready for the tra= nsfer. + @retval EFI_DEVICE_ERROR An error occurred during the data trans= fer. + @retval Other An error occurred during the data trans= fer. + +**/ +STATIC +EFI_STATUS +MmcTransferBlock ( + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINTN Cmd, + IN UINTN Transfer, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + OUT VOID *Buffer, + OUT UINTN *TransferredSize + ) +{ + EFI_STATUS Status; + MMC_HOST_INSTANCE *MmcHostInstance; + EFI_MMC_HOST_PROTOCOL *MmcHost; + UINTN CmdArg; + + DEBUG ((DEBUG_VERBOSE, "%a(): Lba: %lx\n", __func__, Lba)); + DEBUG ((DEBUG_VERBOSE, "%a(): BufferSize: %lx\n", __func__, BufferSize)); + + MmcHostInstance =3D MMC_HOST_INSTANCE_FROM_BLOCK_IO_THIS (This); + MmcHost =3D MmcHostInstance->MmcHost; + + //Set command argument based on the card access mode (Byte mode or Block= mode) + if ((MmcHostInstance->CardInfo.OCRData.AccessMode & MMC_OCR_ACCESS_MASK)= =3D=3D MMC_OCR_ACCESS_SECTOR) { + CmdArg =3D Lba; + } else { + CmdArg =3D Lba * This->Media->BlockSize; + } + + Status =3D MmcHost->SendCommand (MmcHost, Cmd, CmdArg, MMC_RESPONSE_R1, = NULL); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a(MMC_CMD%d): Error %r\n", __func__, MMC_INDX (= Cmd), Status)); + return Status; + } + + if (Transfer =3D=3D MMC_IOBLOCKS_READ) { + Status =3D MmcHost->ReadBlockData (MmcHost, Lba, BufferSize, Buffer); + } else { + Status =3D MmcHost->WriteBlockData (MmcHost, Lba, BufferSize, Buffer); + if (!EFI_ERROR (Status)) { + Status =3D MmcNotifyState (MmcHostInstance, MmcProgrammingState); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a(): Error MmcProgrammingState\n", __func__= )); + return Status; + } + } + } + + if (EFI_ERROR (Status) || + BufferSize > This->Media->BlockSize) { + /* + * CMD12 needs to be set for multiblock (to transition from + * RECV to PROG) or for errors. + */ + EFI_STATUS Status2 =3D MmcStopTransmission (MmcHost); + if (EFI_ERROR (Status2)) { + DEBUG ((DEBUG_ERROR, "MmcIoBlocks(): CMD12 error on Status %r: %r\n", + Status, Status2)); + return Status2; + } + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_BLKIO, "%a(): Error %a Block Data and Status =3D %r\n", + __func__, Transfer =3D=3D MMC_IOBLOCKS_READ ? "Read" : "Write", St= atus)); + return Status; + } + + ASSERT (Cmd =3D=3D MMC_CMD25 || Cmd =3D=3D MMC_CMD18); + } + + // + // For reads, should be already in TRAN. For writes, wait + // until programming finishes. + // + Status =3D WaitUntilTran (MmcHostInstance); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "WaitUntilTran after write failed\n")); + return Status; + } + + Status =3D MmcNotifyState (MmcHostInstance, MmcTransferState); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "MmcIoBlocks() : Error MmcTransferState\n")); + return Status; + } + + if (Transfer !=3D MMC_IOBLOCKS_READ) { + UINTN BlocksWritten =3D 0; + + Status =3D ValidateWrittenBlockCount (MmcHostInstance, + BufferSize / + This->Media->BlockSize, + &BlocksWritten); + *TransferredSize =3D BlocksWritten * This->Media->BlockSize; + } else { + *TransferredSize =3D BufferSize; + } + + return Status; +} + +/** + Perform read or write operations on the MMC device. + + @param[in] This Pointer to the EFI_BLOCK_IO_PROTO= COL instance. + @param[in] Transfer Transfer type (MMC_IOBLOCKS_READ = or MMC_IOBLOCKS_WRITE). + @param[in] MediaId Media ID of the MMC device. + @param[in] Lba Logical Block Address. + @param[in] BufferSize Size of the data buffer. + @param[out] Buffer Pointer to the data buffer. + + @retval EFI_SUCCESS The operation completed successfu= lly. + @retval EFI_MEDIA_CHANGED The MediaId is not the current me= dia. + @retval EFI_INVALID_PARAMETER Invalid parameter passed to the f= unction. + @retval EFI_NO_MEDIA There is no media present in the = MMC device. + @retval EFI_WRITE_PROTECTED The MMC device is write-protected. + @retval EFI_BAD_BUFFER_SIZE The buffer size is not an exact m= ultiple of the block size. + @retval Other An error occurred during the data= transfer. + +**/ +EFI_STATUS +MmcIoBlocks ( + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINTN Transfer, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + OUT VOID *Buffer + ) +{ + EFI_STATUS Status; + UINTN Cmd; + MMC_HOST_INSTANCE *MmcHostInstance; + EFI_MMC_HOST_PROTOCOL *MmcHost; + UINTN BytesRemainingToBeTransfered; + UINTN BlockCount; + UINTN ConsumeSize; + + BlockCount =3D 1; + MmcHostInstance =3D MMC_HOST_INSTANCE_FROM_BLOCK_IO_THIS (This); + ASSERT (MmcHostInstance !=3D NULL); + + MmcHost =3D MmcHostInstance->MmcHost; + ASSERT (MmcHost); + + if (This->Media->MediaId !=3D MediaId) { + return EFI_MEDIA_CHANGED; + } + + if ((MmcHost =3D=3D NULL) || (Buffer =3D=3D NULL)) { + return EFI_INVALID_PARAMETER; + } + + // Check if a Card is Present + if (!MmcHostInstance->BlockIo.Media->MediaPresent) { + return EFI_NO_MEDIA; + } + + if (MMC_HOST_HAS_ISMULTIBLOCK (MmcHost) && + MmcHost->IsMultiBlock (MmcHost)) { + BlockCount =3D (BufferSize + This->Media->BlockSize - 1) / This->Media= ->BlockSize; + } + + // All blocks must be within the device + if ((Lba + (BufferSize / This->Media->BlockSize)) > (This->Media->LastBl= ock + 1)) { + return EFI_INVALID_PARAMETER; + } + + if ((Transfer =3D=3D MMC_IOBLOCKS_WRITE) && (This->Media->ReadOnly =3D= =3D TRUE)) { + return EFI_WRITE_PROTECTED; + } + + // Reading 0 Byte is valid + if (BufferSize =3D=3D 0) { + return EFI_SUCCESS; + } + + // The buffer size must be an exact multiple of the block size + if ((BufferSize % This->Media->BlockSize) !=3D 0) { + return EFI_BAD_BUFFER_SIZE; + } + + // Check the alignment + if ((This->Media->IoAlign > 2) && (((UINTN)Buffer & (This->Media->IoAlig= n - 1)) !=3D 0)) { + return EFI_INVALID_PARAMETER; + } + + BytesRemainingToBeTransfered =3D BufferSize; + while (BytesRemainingToBeTransfered > 0) { + Status =3D WaitUntilTran (MmcHostInstance); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "WaitUntilTran before IO failed")); + return Status; + } + + if (Transfer =3D=3D MMC_IOBLOCKS_READ) { + if (BlockCount =3D=3D 1) { + // Read a single block + Cmd =3D MMC_CMD17; + } else { + // Read multiple blocks + Cmd =3D MMC_CMD18; + } + } else { + if (BlockCount =3D=3D 1) { + // Write a single block + Cmd =3D MMC_CMD24; + } else { + // Write multiple blocks + Cmd =3D MMC_CMD25; + } + } + + ConsumeSize =3D BlockCount * This->Media->BlockSize; + if (BytesRemainingToBeTransfered < ConsumeSize) { + ConsumeSize =3D BytesRemainingToBeTransfered; + } + + if (ConsumeSize > MAX_BUF_LEN) { + ConsumeSize =3D MAX_BUF_LEN; + BlockCount =3D MAX_BLK_CNT; + } else { + BlockCount =3D ConsumeSize / This->Media->BlockSize; + } + + MmcHost->Prepare (MmcHost, Lba, ConsumeSize, (UINTN)Buffer); + + Status =3D MmcTransferBlock (This, Cmd, Transfer, MediaId, Lba, Consum= eSize, Buffer, &ConsumeSize); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a(): Failed to transfer block and Status:%r\n= ", __func__, Status)); + return Status; + } + + BytesRemainingToBeTransfered -=3D ConsumeSize; + if (BytesRemainingToBeTransfered > 0) { + Lba +=3D BlockCount; + Buffer =3D (UINT8*)Buffer + ConsumeSize; + } + } + + return EFI_SUCCESS; +} + +/** + Reads the requested number of blocks from the device. + + This function implements EFI_BLOCK_IO_PROTOCOL.ReadBlocks(). + It reads the requested number of blocks from the device. + All the blocks are read, or an error is returned. + + @param This Indicates a pointer to the calling contex= t. + @param MediaId The media ID that the read request is for. + @param Lba The starting logical block address to rea= d from on the device. + @param BufferSize The size of the Buffer in bytes. + This must be a multiple of the intrinsic = block size of the device. + @param Buffer A pointer to the destination buffer for t= he data. The caller is + responsible for either having implicit or= explicit ownership of the buffer. + + @retval EFI_SUCCESS The data was read correctly from the devi= ce. + @retval EFI_DEVICE_ERROR The device reported an error while attemp= ting to perform the read operation. + @retval EFI_NO_MEDIA There is no media in the device. + @retval EFI_MEDIA_CHANGED The MediaId is not for the current media. + @retval EFI_BAD_BUFFER_SIZE The BufferSize parameter is not a multipl= e of the intrinsic block size of the device. + @retval EFI_INVALID_PARAMETER The read request contains LBAs that are n= ot valid, + or the buffer is not on proper alignment. + +**/ +EFI_STATUS +EFIAPI +MmcReadBlocks ( + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + OUT VOID *Buffer + ) +{ + return MmcIoBlocks (This, MMC_IOBLOCKS_READ, MediaId, Lba, BufferSize, B= uffer); +} + +/** + Writes a specified number of blocks to the device. + + This function implements EFI_BLOCK_IO_PROTOCOL.WriteBlocks(). + It writes a specified number of blocks to the device. + All blocks are written, or an error is returned. + + @param This Indicates a pointer to the calling contex= t. + @param MediaId The media ID that the write request is fo= r. + @param Lba The starting logical block address to be = written. + @param BufferSize The size of the Buffer in bytes. + This must be a multiple of the intrinsic = block size of the device. + @param Buffer Pointer to the source buffer for the data. + + @retval EFI_SUCCESS The data were written correctly to the de= vice. + @retval EFI_WRITE_PROTECTED The device cannot be written to. + @retval EFI_NO_MEDIA There is no media in the device. + @retval EFI_MEDIA_CHANGED The MediaId is not for the current media. + @retval EFI_DEVICE_ERROR The device reported an error while attemp= ting to perform the write operation. + @retval EFI_BAD_BUFFER_SIZE The BufferSize parameter is not a multipl= e of the intrinsic + block size of the device. + @retval EFI_INVALID_PARAMETER The write request contains LBAs that are = not valid, + or the buffer is not on proper alignment. + +**/ +EFI_STATUS +EFIAPI +MmcWriteBlocks ( + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + IN VOID *Buffer + ) +{ + return MmcIoBlocks (This, MMC_IOBLOCKS_WRITE, MediaId, Lba, BufferSize, = Buffer); +} + +/** + Flushes all modified data to a physical block device. + + @param This Indicates a pointer to the calling contex= t. + + @retval EFI_SUCCESS All outstanding data were written correct= ly to the device. + @retval EFI_DEVICE_ERROR The device reported an error while attemp= ting to write data. + @retval EFI_NO_MEDIA There is no media in the device. + +**/ +EFI_STATUS +EFIAPI +MmcFlushBlocks ( + IN EFI_BLOCK_IO_PROTOCOL *This + ) +{ + return EFI_SUCCESS; +} diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcDebug.c b/Silicon/S= ophgo/SG2042Pkg/Drivers/MmcDxe/MmcDebug.c new file mode 100644 index 000000000000..62386d7b0373 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcDebug.c @@ -0,0 +1,194 @@ +/** @file + Provides debug functions for MMC/SD card operations. + + Copyright (c) 2011-2013, ARM Limited. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "Mmc.h" + +#if !defined(MDEPKG_NDEBUG) +CONST CHAR8* mStrUnit[] =3D { "100kbit/s", "1Mbit/s", "10Mbit/s", "100MBit= /s", + "Unknown", "Unknown", "Unknown", "Unknown" }; +CONST CHAR8* mStrValue[] =3D { "1.0", "1.2", "1.3", "1.5", "2.0", "2.5", + "3.0", "3.5", "4.0", "4.5", "5.0", "5.5", + "6.0", "7.0", "8.0" }; +#endif + +/** + Print the Card Identification (CID) register. + + @param[in] Cid Pointer to the CID array. + +**/ +VOID +PrintCID ( + IN UINT32* Cid + ) +{ + DEBUG ((DEBUG_ERROR, "- PrintCID\n")); + DEBUG ((DEBUG_ERROR, "\t- Manufacturing date: %d/%d\n", (Cid[0] >> 8) & = 0xF, (Cid[0] >> 12) & 0xFF)); + DEBUG ((DEBUG_ERROR, "\t- Product serial number: 0x%X%X\n", Cid[1] & 0xF= FFFFF, (Cid[0] >> 24) & 0xFF)); + DEBUG ((DEBUG_ERROR, "\t- Product revision: %d\n", Cid[1] >> 24)); + //DEBUG ((DEBUG_ERROR, "\t- Product name: %s\n", (char*)(Cid + 2))); + DEBUG ((DEBUG_ERROR, "\t- OEM ID: %c%c\n", (Cid[3] >> 8) & 0xFF, (Cid[3]= >> 16) & 0xFF)); +} + +/** + Print the Card Specific Data (CSD). + + @param[in] Csd Pointer to the CSD array + +**/ +VOID +PrintCSD ( + IN UINT32* Csd + ) +{ + UINTN Value; + + if (((Csd[2] >> 30) & 0x3) =3D=3D 0) { + DEBUG ((DEBUG_ERROR, "- PrintCSD Version 1.01-1.10/Version 2.00/Standa= rd Capacity\n")); + } else if (((Csd[2] >> 30) & 0x3) =3D=3D 1) { + DEBUG ((DEBUG_ERROR, "- PrintCSD Version 2.00/High Capacity\n")); + } else { + DEBUG ((DEBUG_ERROR, "- PrintCSD Version Higher than v3.3\n")); + } + + DEBUG ((DEBUG_ERROR, "\t- Supported card command class: 0x%X\n", MMC_CSD= _GET_CCC (Csd))); + DEBUG ((DEBUG_ERROR, "\t- Max Speed: %a * %a\n", mStrValue[(MMC_CSD_GET_= TRANSPEED (Csd) >> 3) & 0xF], + mStrUnit[MMC_CSD_GET_TRANSPEED (Csd) & 7])); + DEBUG ((DEBUG_ERROR, "\t- Maximum Read Data Block: %d\n", 2 << (MMC_CSD_= GET_READBLLEN (Csd) - 1))); + DEBUG ((DEBUG_ERROR, "\t- Maximum Write Data Block: %d\n", 2 << (MMC_CSD= _GET_WRITEBLLEN (Csd) - 1))); + + if (!MMC_CSD_GET_FILEFORMATGRP (Csd)) { + Value =3D MMC_CSD_GET_FILEFORMAT (Csd); + if (Value =3D=3D 0) { + DEBUG ((DEBUG_ERROR, "\t- Format (0): Hard disk-like file system wit= h partition table\n")); + } else if (Value =3D=3D 1) { + DEBUG ((DEBUG_ERROR, "\t- Format (1): DOS FAT (floppy-like) with boo= t sector only (no partition table)\n")); + } else if (Value =3D=3D 2) { + DEBUG ((DEBUG_ERROR, "\t- Format (2): Universal File Format\n")); + } else { + DEBUG ((DEBUG_ERROR, "\t- Format (3): Others/Unknown\n")); + } + } else { + DEBUG ((DEBUG_ERROR, "\t- Format: Reserved\n")); + } +} + +/** + Print the Relative Card Address (RCA). + + @param[in] Rca The Relative Card Address (RCA) value + +**/ +VOID +PrintRCA ( + IN UINT32 Rca + ) +{ + DEBUG ((DEBUG_ERROR, "- PrintRCA: 0x%X\n", Rca)); + DEBUG ((DEBUG_ERROR, "\t- Status: 0x%X\n", Rca & 0xFFFF)); + DEBUG ((DEBUG_ERROR, "\t- RCA: 0x%X\n", (Rca >> 16) & 0xFFFF)); +} + +/** + Print the Operation Condition Register (OCR). + + @param[in] Ocr The Operation Condition Register (OCR) value + +**/ +VOID +PrintOCR ( + IN UINT32 Ocr + ) +{ + UINTN MinV; + UINTN MaxV; + UINTN Volts; + UINTN Loop; + + MinV =3D 36; // 3.6 + MaxV =3D 20; // 2.0 + Volts =3D 20; // 2.0 + + // The MMC register bits [23:8] indicate the working range of the card + for (Loop =3D 8; Loop < 24; Loop++) { + if (Ocr & (1 << Loop)) { + if (MinV > Volts) { + MinV =3D Volts; + } + if (MaxV < Volts) { + MaxV =3D Volts + 1; + } + } + Volts++; + } + + DEBUG ((DEBUG_ERROR, "- PrintOCR Ocr (0x%X)\n", Ocr)); + DEBUG ((DEBUG_ERROR, "\t- Card operating voltage: %d.%d to %d.%d\n", Min= V / 10, MinV % 10, MaxV / 10, MaxV % 10)); + if (((Ocr >> 29) & 3) =3D=3D 0) { + DEBUG ((DEBUG_ERROR, "\t- AccessMode: Byte Mode\n")); + } else { + DEBUG ((DEBUG_ERROR, "\t- AccessMode: Block Mode (0x%X)\n", ((Ocr >> 2= 9) & 3))); + } + + if (Ocr & MMC_OCR_POWERUP) { + DEBUG ((DEBUG_ERROR, "\t- PowerUp\n")); + } else { + DEBUG ((DEBUG_ERROR, "\t- Voltage Not Supported\n")); + } +} + +/** + Print the R1 response. + + @param[in] Response The R1 response value. + +**/ +VOID +PrintResponseR1 ( + IN UINT32 Response + ) +{ + DEBUG ((DEBUG_INFO, "Response: 0x%X\n", Response)); + if (Response & MMC_R0_READY_FOR_DATA) { + DEBUG ((DEBUG_INFO, "\t- READY_FOR_DATA\n")); + } + + switch ((Response >> 9) & 0xF) { + case 0: + DEBUG ((DEBUG_INFO, "\t- State: Idle\n")); + break; + case 1: + DEBUG ((DEBUG_INFO, "\t- State: Ready\n")); + break; + case 2: + DEBUG ((DEBUG_INFO, "\t- State: Ident\n")); + break; + case 3: + DEBUG ((DEBUG_INFO, "\t- State: StandBy\n")); + break; + case 4: + DEBUG ((DEBUG_INFO, "\t- State: Tran\n")); + break; + case 5: + DEBUG ((DEBUG_INFO, "\t- State: Data\n")); + break; + case 6: + DEBUG ((DEBUG_INFO, "\t- State: Rcv\n")); + break; + case 7: + DEBUG ((DEBUG_INFO, "\t- State: Prg\n")); + break; + case 8: + DEBUG ((DEBUG_INFO, "\t- State: Dis\n")); + break; + default: + DEBUG ((DEBUG_INFO, "\t- State: Reserved\n")); + break; + } +} diff --git a/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcIdentification.c b/= Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcIdentification.c new file mode 100644 index 000000000000..67257a3f9755 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcIdentification.c @@ -0,0 +1,719 @@ +/** @file + Define a simple and generic interface to access SD-card devices. + + Copyright (c) 2018-2021, ARM Limited and Contributors. All rights reserv= ed. + Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include + +#include "Mmc.h" + +#define MMC_DEFAULT_MAX_RETRIES 5 +#define SEND_OP_COND_MAX_RETRIES 100 + +#define MULT_BY_512K_SHIFT 19 + +STATIC UINT32 MmcOCR; +STATIC CSD MmcCsd; +STATIC UINT8 MmcExtCsd[512] __attribute__ ((aligned(16))); +STATIC UINT32 MmcRCA; +STATIC UINT32 MmcSCR[2] __attribute__ ((aligned(16))) =3D { 0 }; + +typedef enum _MMC_DEVICE_TYPE { + MMC_IS_EMMC, + MMC_IS_SD, + MMC_IS_SD_HC, +} MMC_DEVICE_TYPE; + +typedef struct { + UINT64 DeviceSize; /* Size of device in bytes */ + UINT32 BlockSize; /* Block size in bytes */ + UINT32 MaxBusFreq; /* Max bus freq in Hz */ + UINT32 OCRVoltage; /* OCR voltage */ + MMC_DEVICE_TYPE MmcDevType; /* Type of MMC */ +} MMC_DEVICE_INFO; + +STATIC MMC_DEVICE_INFO MmcDevInfo =3D { + .MmcDevType =3D MMC_IS_SD_HC, + .OCRVoltage =3D 0x00300000, // OCR 3.2~3.3 3.3~3.4 +}; + +STATIC CONST UINT8 TranSpeedBase[16] =3D { + 0, 10, 12, 13, 15, 20, 26, 30, 35, 40, 45, 52, 55, 60, 70, 80 +}; + +STATIC CONST UINT8 SdTranSpeedBase[16] =3D { + 0, 10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80 +}; + +/** + Get the current state of the MMC device. + + @param[in] MmcHostInstance Pointer to the MMC_HOST_INSTANCE st= ructure. + @param[out] State Pointer to the variable to store th= e device state. + + @retval EFI_SUCCESS The device state was retrieved succ= essfully. + @retval EFI_DEVICE_ERROR Failed to retrieve the device state. + +**/ +STATIC +EFI_STATUS +MmcDeviceState ( + IN MMC_HOST_INSTANCE *MmcHostInstance, + IN UINT32 *State + ) +{ + EFI_STATUS Status; + INT32 RetryCount; + UINT32 Response[4]; + + RetryCount =3D MMC_DEFAULT_MAX_RETRIES; + + do { + if (RetryCount =3D=3D 0) { + DEBUG ((DEBUG_ERROR, "%a: CMD13 failed after %d retries\n", __func__= , MMC_DEFAULT_MAX_RETRIES)); + return EFI_DEVICE_ERROR; + } + + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->Mmc= Host, MMC_CMD13, MmcRCA << RCA_SHIFT_OFFSET, + MMC_RESPONSE_R1, Response); + if (EFI_ERROR (Status)) { + RetryCount--; + continue; + } + + if ((Response[0] & MMC_R0_SWITCH_ERROR) !=3D 0U) { + return EFI_DEVICE_ERROR; + } + + RetryCount--; + } while ((Response[0] & MMC_R0_READY_FOR_DATA) =3D=3D 0U); + + // DEBUG ((DEBUG_INFO, "%a: sd state %x\n", __func__, MMC_R0_CURRENTSTAT= E(Response))); + *State =3D MMC_R0_CURRENTSTATE (Response); + + return EFI_SUCCESS; +} + +/** + Set the value of the specified MMC extended CSD register. + + @param[in] MmcHostInstance Pointer to the MMC_HOST_INSTANCE st= ructure. + @param[in] ExtCmd The extended CSD command. + @param[in] Value The value to set. + + @retval EFI_SUCCESS The value was successfully set. + @retval Other An error occurred while setting the= value. + +**/ +STATIC +EFI_STATUS +MmcSetExtCsd ( + IN MMC_HOST_INSTANCE *MmcHostInstance, + IN UINT32 ExtCmd, + IN UINT32 Value + ) +{ + EFI_STATUS Status; + UINT32 State; + + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->MmcHo= st, MMC_CMD6, + EXTCSD_WRITE_BYTES | EXTCSD_CMD(ExtCmd) | + EXTCSD_VALUE(Value) | EXTCSD_CMD_SET_NORMAL, + MMC_RESPONSE_R1B, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + do { + Status =3D MmcDeviceState (MmcHostInstance, &State); + if (EFI_ERROR (Status)) { + return Status; + } + } while (State =3D=3D MMC_R0_STATE_PROG); + + return EFI_SUCCESS; +} + +/** + Perform an SD switch to set the bus width for the MMC/SD device. + + @param[in] MmcHostInstance Pointer to the MMC_HOST_INSTANCE st= ructure. + @param[in] BusWidth The desired bus width. + + @retval EFI_SUCCESS The bus width was successfully set. + @retval Other An error occurred while setting th= e bus width. + +**/ +STATIC +EFI_STATUS +MmcSdSwitch ( + IN MMC_HOST_INSTANCE *MmcHostInstance, + IN UINT32 BusWidth + ) +{ + EFI_STATUS Status; + UINT32 State; + INT32 RetryCount; + UINT32 BusWidthArg; + + RetryCount =3D MMC_DEFAULT_MAX_RETRIES; + BusWidthArg =3D 0; + + Status =3D MmcHostInstance->MmcHost->Prepare (MmcHostInstance->MmcHost, = 0, sizeof(MmcSCR), (UINTN)&MmcSCR); + if (EFI_ERROR (Status)) { + return Status; + } + + // CMD55: Application Specific Command + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->MmcHo= st, MMC_CMD55, MmcRCA << RCA_SHIFT_OFFSET, + MMC_RESPONSE_R5, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + // ACMD51: SEND_SCR + do { + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->Mmc= Host, MMC_ACMD51, 0, MMC_RESPONSE_R1, NULL); + if ((EFI_ERROR (Status)) && (RetryCount =3D=3D 0)) { + DEBUG ((DEBUG_ERROR, "%a: ACMD51 failed after %d retries (Status=3D%= r)\n", __func__, MMC_DEFAULT_MAX_RETRIES, Status)); + return Status; + } + + RetryCount--; + } while (EFI_ERROR (Status)); + + Status =3D MmcHostInstance->MmcHost->ReadBlockData (MmcHostInstance->Mmc= Host, 0, sizeof(MmcSCR), MmcSCR); + if (EFI_ERROR (Status)) { + return Status; + } + + if (((MmcSCR[0] & SD_SCR_BUS_WIDTH_4) !=3D 0U) && (BusWidth =3D=3D MMC_B= US_WIDTH_4)) { + BusWidthArg =3D 2; + } + + // CMD55: Application Specific Command + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->MmcHo= st, MMC_CMD55, MmcRCA << RCA_SHIFT_OFFSET, + MMC_RESPONSE_R5, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + // ACMD6: SET_BUS_WIDTH + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->MmcHo= st, MMC_CMD6, BusWidthArg, MMC_RESPONSE_R1, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + do { + Status =3D MmcDeviceState (MmcHostInstance, &State); + if (EFI_ERROR (Status)) { + return Status; + } + } while (State =3D=3D MMC_R0_STATE_PROG); + + return EFI_SUCCESS; +} + +/** + Set the I/O settings for the MMC/SD device. + + @param[in] MmcHostInstance Pointer to the MMC_HOST_INSTANCE st= ructure. + @param[in] Clk The desired clock frequency. + @param[in] BusWidth The desired bus width. + + @retval EFI_SUCCESS The I/O settings were successfully= set. + @retval Other An error occurred while setting th= e I/O settings. + +**/ +STATIC +EFI_STATUS +MmcSetIos ( + IN MMC_HOST_INSTANCE *MmcHostInstance, + IN UINT32 Clk, + IN UINT32 BusWidth + ) +{ + EFI_STATUS Status; + UINT32 Width; + + Width =3D BusWidth; + + if (MmcDevInfo.MmcDevType !=3D MMC_IS_EMMC) { + if (Width =3D=3D MMC_BUS_WIDTH_8) { + DEBUG ((DEBUG_INFO, "%a: Wrong bus config for SD-card, force to 4\n"= , __func__)); + Width =3D MMC_BUS_WIDTH_4; + } + + Status =3D MmcSdSwitch (MmcHostInstance, Width); + if (EFI_ERROR (Status)) { + return Status; + } + } else if (MmcCsd.SPEC_VERS =3D=3D 4U) { + Status =3D MmcSetExtCsd (MmcHostInstance, CMD_EXTCSD_BUS_WIDTH, (UINT3= 2)Width); + if (EFI_ERROR (Status)) { + return Status; + } + } else { + DEBUG ((DEBUG_INFO, "%a: Wrong MMC type or spec version\n", __func__)); + } + + return MmcHostInstance->MmcHost->SetIos (MmcHostInstance->MmcHost, Clk, = Width); +} + +/** + Fill the MMC device information. + + @param[in] MmcHostInstance Pointer to the MMC_HOST_INSTANCE st= ructure. + + @retval EFI_SUCCESS The MMC device information was suc= cessfully filled. + @retval EFI_DEVICE_ERROR Failed to fill the MMC device info= rmation. + @retval Other An error occurred while filling th= e MMC device information. + +**/ +STATIC +EFI_STATUS +MmcFillDeviceInfo ( + IN MMC_HOST_INSTANCE *MmcHostInstance + ) +{ + EFI_STATUS Status; + UINTN CardSize; + UINT32 SpeedIdx; + UINT32 NumBlocks; + UINT32 FreqUnit; + UINT32 State; + ECSD *CsdSdV2; + + Status =3D EFI_SUCCESS; + + switch (MmcDevInfo.MmcDevType) { + case MMC_IS_EMMC: + MmcDevInfo.BlockSize =3D MMC_BLOCK_SIZE; + + Status =3D MmcHostInstance->MmcHost->Prepare (MmcHostInstance->MmcHo= st, 0, sizeof(MmcExtCsd), (UINTN)&MmcExtCsd); + + if (EFI_ERROR (Status)) { + return Status; + } + + /* MMC CMD8: SEND_EXT_CSD */ + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->M= mcHost, MMC_CMD8, 0, MMC_RESPONSE_R1, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + Status =3D MmcHostInstance->MmcHost->ReadBlockData (MmcHostInstance-= >MmcHost, 0, sizeof(MmcExtCsd), (UINT32*)MmcExtCsd); + if (EFI_ERROR (Status)) { + return Status; + } + + do { + Status =3D MmcDeviceState (MmcHostInstance, &State); + if (EFI_ERROR (Status)) { + return Status; + } + } while (State !=3D MMC_R0_STATE_TRAN); + + NumBlocks =3D (MmcExtCsd[CMD_EXTCSD_SEC_CNT] << 0) | + (MmcExtCsd[CMD_EXTCSD_SEC_CNT + 1] << 8) | + (MmcExtCsd[CMD_EXTCSD_SEC_CNT + 2] << 16) | + (MmcExtCsd[CMD_EXTCSD_SEC_CNT + 3] << 24); + + MmcDevInfo.DeviceSize =3D (UINT64)NumBlocks * MmcDevInfo.BlockSize; + + break; + + case MMC_IS_SD: + /* + * Use the same MmcCsd struct, as required fields here + * (READ_BL_LEN, C_SIZE, CSIZE_MULT) are common with eMMC. + */ + MmcDevInfo.BlockSize =3D BIT_32(MmcCsd.READ_BL_LEN); + + CardSize =3D ((UINT64)MmcCsd.C_SIZEHigh10 << 2U) | + (UINT64)MmcCsd.C_SIZELow2; + ASSERT(CardSize !=3D 0xFFFU); + + MmcDevInfo.DeviceSize =3D (CardSize + 1U) * + BIT_64(MmcCsd.C_SIZE_MULT + 2U) * + MmcDevInfo.BlockSize; + + break; + + case MMC_IS_SD_HC: + MmcHostInstance->CardInfo.CardType =3D SD_CARD_2_HIGH; + + ASSERT (MmcCsd.CSD_STRUCTURE =3D=3D 1U); + + MmcDevInfo.BlockSize =3D MMC_BLOCK_SIZE; + + /* Need to use ECSD struct */ + CsdSdV2 =3D (ECSD *)&MmcCsd; + CardSize =3D ((UINT64)CsdSdV2->C_SIZEHigh6 << 16) | + (UINT64)CsdSdV2->C_SIZELow16; + + MmcDevInfo.DeviceSize =3D (CardSize + 1U) << MULT_BY_512K_SHIFT; + break; + + default: + Status =3D EFI_DEVICE_ERROR; + break; + } + + if (EFI_ERROR (Status)) { + return Status; + } + + SpeedIdx =3D (MmcCsd.TRAN_SPEED & CSD_TRAN_SPEED_MULT_MASK) >> + CSD_TRAN_SPEED_MULT_SHIFT; + + ASSERT (SpeedIdx > 0U); + + if (MmcDevInfo.MmcDevType =3D=3D MMC_IS_EMMC) { + MmcDevInfo.MaxBusFreq =3D TranSpeedBase[SpeedIdx]; + } else { + MmcDevInfo.MaxBusFreq =3D SdTranSpeedBase[SpeedIdx]; + } + + FreqUnit =3D MmcCsd.TRAN_SPEED & CSD_TRAN_SPEED_UNIT_MASK; + while (FreqUnit !=3D 0U) { + MmcDevInfo.MaxBusFreq *=3D 10U; + --FreqUnit; + } + + MmcDevInfo.MaxBusFreq *=3D 10000U; + + return EFI_SUCCESS; +} + +/** + Send the SD_SEND_OP_COND command to initialize the SD card. + + @param[in] MmcHostInstance Pointer to the MMC_HOST_INSTANCE st= ructure. + + @retval EFI_SUCCESS The SD_SEND_OP_COND command was su= ccessfully sent. + @retval EFI_DEVICE_ERROR Failed to send the SD_SEND_OP_COND= command. + @retval Other An error occurred while sending th= e SD_SEND_OP_COND command. + +**/ +STATIC +EFI_STATUS +SdSendOpCond ( + IN MMC_HOST_INSTANCE *MmcHostInstance + ) +{ + EFI_STATUS Status; + INT32 I; + UINT32 Response[4]; + + for (I =3D 0; I < SEND_OP_COND_MAX_RETRIES; I++) { + // CMD55: Application Specific Command + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->Mmc= Host, MMC_CMD55, 0, MMC_RESPONSE_R1, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + // ACMD41: SD_SEND_OP_COND + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->Mmc= Host, MMC_ACMD41, OCR_HCS | + MmcDevInfo.OCRVoltage, MMC_RESPONSE_R3, Response); + if (EFI_ERROR (Status)) { + return Status; + } + + if ((Response[0] & MMC_OCR_POWERUP) !=3D 0U) { + MmcOCR =3D Response[0]; + + if ((MmcOCR & OCR_HCS) !=3D 0U) { + MmcDevInfo.MmcDevType =3D MMC_IS_SD_HC; + MmcHostInstance->CardInfo.OCRData.AccessMode =3D 0x2; + } else { + MmcDevInfo.MmcDevType =3D MMC_IS_SD; + MmcHostInstance->CardInfo.OCRData.AccessMode =3D 0x0; + } + + return EFI_SUCCESS; + } + + gBS->Stall (10000); + } + + DEBUG ((DEBUG_ERROR, "%a: ACMD41 failed after %d retries\n", __func__, S= END_OP_COND_MAX_RETRIES)); + + return EFI_DEVICE_ERROR; +} + +/** + Reset the MMC/SD card to the idle state. + + @param[in] MmcHostInstance Pointer to the MMC_HOST_INSTANCE st= ructure. + + @retval EFI_SUCCESS The MMC/SD card was successfully r= eset to the idle state. + @retval Other An error occurred while resetting = the MMC/SD card to the idle state. + +**/ +STATIC +EFI_STATUS +MmcResetToIdle( + IN MMC_HOST_INSTANCE *MmcHostInstance + ) +{ + EFI_STATUS Status; + + /* CMD0: reset to IDLE */ + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->MmcHo= st, MMC_CMD0, 0, 0, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + gBS->Stall (2000); + + return EFI_SUCCESS; +} + +/** + Send the Operation Condition (CMD1) to the MMC/SD card. + + @param[in] MmcHostInstance Pointer to the MMC_HOST_INSTANCE st= ructure. + + @retval EFI_SUCCESS The Operation Condition was succes= sfully sent to the MMC/SD card. + @retval EFI_DEVICE_ERROR Failed to send the Operation Condi= tion to the MMC/SD card. + @retval Other An error occurred while sending th= e Operation Condition to the MMC/SD card. + +**/ +STATIC +EFI_STATUS +MmcSendOpCond ( + IN MMC_HOST_INSTANCE *MmcHostInstance + ) +{ + INT32 I; + EFI_STATUS Status; + UINT32 Response[4]; + + Status =3D MmcResetToIdle (MmcHostInstance); + if (EFI_ERROR (Status)) { + return Status; + } + + for (I =3D 0; I < SEND_OP_COND_MAX_RETRIES; I++) { + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->Mmc= Host, MMC_CMD1, OCR_SECTOR_MODE | + OCR_VDD_MIN_2V7 | OCR_VDD_MIN_1V7, + MMC_RESPONSE_R3, Response); + if (EFI_ERROR (Status)) { + return Status; + } + + if ((Response[0] & MMC_OCR_POWERUP) !=3D 0U) { + MmcOCR =3D Response[0]; + return EFI_SUCCESS; + } + + gBS->Stall (10000); + } + + DEBUG ((DEBUG_ERROR, "%a: CMD1 failed after %d retries\n", __func__, SEN= D_OP_COND_MAX_RETRIES)); + + return EFI_DEVICE_ERROR; +} + +/** + Enumerate and initialize the MMC/SD card. + + @param[in] MmcHostInstance Pointer to the MMC_HOST_INSTANCE st= ructure. + @param[in] Clk Clock frequency for the MMC/SD card. + @param[in] BusWidth Bus width for the MMC/SD card. + + @retval EFI_SUCCESS The MMC/SD card was successfully e= numerated and initialized. + @retval Other An error occurred while enumeratin= g and initializing the MMC/SD card. + +**/ +STATIC +EFI_STATUS +MmcEnumerte ( + IN MMC_HOST_INSTANCE *MmcHostInstance, + IN UINT32 Clk, + IN UINT32 BusWidth + ) +{ + EFI_STATUS Status; + UINT32 State; + UINT32 Response[4]; + + Status =3D MmcResetToIdle (MmcHostInstance); + if (EFI_ERROR (Status)) { + return Status; + } + + if (MmcDevInfo.MmcDevType =3D=3D MMC_IS_EMMC) { + Status =3D MmcSendOpCond (MmcHostInstance); + } else { + // CMD8: Send Interface Condition Command + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->Mmc= Host, MMC_CMD8, VHS_2_7_3_6_V | CMD8_CHECK_PATTERN, + MMC_RESPONSE_R5, Response); + + if ((Status =3D=3D EFI_SUCCESS) && ((Response[0] & 0xffU) =3D=3D CMD8_= CHECK_PATTERN)) { + Status =3D SdSendOpCond (MmcHostInstance); + } + } + if (EFI_ERROR (Status)) { + return Status; + } + + // CMD2: Card Identification + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->MmcHo= st, MMC_CMD2, 0, MMC_RESPONSE_R2, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + // CMD3: Set Relative Address + if (MmcDevInfo.MmcDevType =3D=3D MMC_IS_EMMC) { + MmcRCA =3D MMC_FIX_RCA; + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->Mmc= Host, MMC_CMD3, MmcRCA << RCA_SHIFT_OFFSET, + MMC_RESPONSE_R1, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + } else { + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->Mmc= Host, MMC_CMD3, 0, + MMC_RESPONSE_R6, Response); + if (EFI_ERROR (Status)) { + return Status; + } + + MmcRCA =3D (Response[0] & 0xFFFF0000U) >> 16; + } + + // CMD9: CSD Register + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->MmcHo= st, MMC_CMD9, MmcRCA << RCA_SHIFT_OFFSET, + MMC_RESPONSE_R2, Response); + if (EFI_ERROR (Status)) { + return Status; + } + + CopyMem(&MmcCsd, &Response, sizeof(Response)); + + // CMD7: Select Card + Status =3D MmcHostInstance->MmcHost->SendCommand (MmcHostInstance->MmcHo= st, MMC_CMD7, MmcRCA << RCA_SHIFT_OFFSET, + MMC_RESPONSE_R1, NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + do { + Status =3D MmcDeviceState (MmcHostInstance, &State); + if (EFI_ERROR (Status)) { + return Status; + } + } while (State !=3D MMC_R0_STATE_TRAN); + + Status =3D MmcSetIos (MmcHostInstance, Clk, BusWidth); + if (EFI_ERROR (Status)) { + return Status; + } + + return MmcFillDeviceInfo (MmcHostInstance); +} + +/** + Perform the MMC Identification Mode. + + @param[in] MmcHostInstance Pointer to the MMC_HOST_INSTANCE st= ructure. + + @retval EFI_SUCCESS The MMC Identification Mode was pe= rformed successfully. + @retval EFI_INVALID_PARAMETER MmcHost is NULL. + @retval Other An error occurred while performing= the MMC Identification Mode. + +**/ +STATIC +EFI_STATUS +EFIAPI +MmcIdentificationMode ( + IN MMC_HOST_INSTANCE *MmcHostInstance + ) +{ + EFI_STATUS Status; + UINTN CmdArg; + BOOLEAN IsHCS; + EFI_MMC_HOST_PROTOCOL *MmcHost; + + MmcHost =3D MmcHostInstance->MmcHost; + CmdArg =3D 0; + IsHCS =3D FALSE; + + if (MmcHost =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + // We can get into this function if we restart the identification mode + if (MmcHostInstance->State =3D=3D MmcHwInitializationState) { + // Initialize the MMC Host HW + Status =3D MmcNotifyState (MmcHostInstance, MmcHwInitializationState); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "MmcIdentificationMode() : Error MmcHwInitializ= ationState, Status=3D%r.\n", Status)); + return Status; + } + } + + Status =3D MmcEnumerte (MmcHostInstance, 50 * 1000 * 1000, MMC_BUS_WIDTH= _4); + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "MmcIdentificationMode() : Error MmcEnumerte, S= tatus=3D%r.\n", Status)); + return Status; + } + + MmcHostInstance->CardInfo.RCA =3D MmcRCA; + MmcHostInstance->BlockIo.Media->LastBlock =3D ((MmcDevInfo.DeviceSize= >> 9) - 1); + MmcHostInstance->BlockIo.Media->BlockSize =3D MmcDevInfo.BlockSize; + MmcHostInstance->BlockIo.Media->ReadOnly =3D MmcHost->IsReadOnly (Mm= cHost); + MmcHostInstance->BlockIo.Media->MediaPresent =3D TRUE; + MmcHostInstance->BlockIo.Media->MediaId++; + + return EFI_SUCCESS; +} + +/** + Initialize the MMC device. + + @param[in] MmcHostInstance MMC host instance + + @retval EFI_SUCCESS MMC device initialized successfully + @retval Other MMC device initialization failed + +**/ +EFI_STATUS +InitializeMmcDevice ( + IN MMC_HOST_INSTANCE *MmcHostInstance + ) +{ + EFI_STATUS Status; + EFI_MMC_HOST_PROTOCOL *MmcHost; + UINTN BlockCount; + + BlockCount =3D 1; + MmcHost =3D MmcHostInstance->MmcHost; + + Status =3D MmcIdentificationMode (MmcHostInstance); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "InitializeMmcDevice(): Error in Identification M= ode, Status=3D%r\n", Status)); + return Status; + } + + Status =3D MmcNotifyState (MmcHostInstance, MmcTransferState); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "InitializeMmcDevice(): Error MmcTransferState, S= tatus=3D%r\n", Status)); + return Status; + } + + return EFI_SUCCESS; +} --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109602): https://edk2.groups.io/g/devel/message/109602 Mute This Topic: https://groups.io/mt/101944466/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri Sep 20 14:54:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+109603+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109603+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=163.com ARC-Seal: i=1; a=rsa-sha256; t=1697216170; cv=none; d=zohomail.com; s=zohoarc; b=j9v3uHsMh7na0hvoegGt6m7Ef4LSk8FE2zitbsoM1O3CchZnSguIc8XBsZK484FU/XlhdmFfTwLzn2Rr6xu8Aw+Ig09Vz20X9f8LsI/qpcKeWC0KIC9s+UlRaiOvNGGR1+m7Tnyj2k8yn/9Kc+yAa3pDAcnnkK0yoir/rCDdoR8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697216170; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=Jpv3StbutOUbIVyZyfLdxmHpIc8BlQWaSQ3v9VwNRYQ=; b=LWfq/NtgkGyWpIpw14Ql9Ct4ZJWWtgPc8dB1JRJW+RLe18lkpv6Bv+tB0K2SD0z7fIihhRWx2CyZX+wjH5Svbb13CfmlGOK1JW9n5wGMUGY2Dh+wV8Lh1uhW2R+T9Sy4HTJJI8ruEecM2xhV4klBTZyPBOrMJ2XknJGG30FvzlI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109603+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1697216170181635.0744994377885; Fri, 13 Oct 2023 09:56:10 -0700 (PDT) Return-Path: DKIM-Signature: a=rsa-sha256; bh=OkcGRgXMntZoeHj0S+mNE4t/X72WLX1qFgTriBSsFqU=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1697216169; v=1; b=e9fYk4P4ZE76HUjpkBi2lX4c+rUf0/XGKQwdTGwtOJ9O+B1iykNfXPln4rB8tOEmvdU+U3Kd K8fDBPqpeWXHJtOdNR2Jy+p1+G1TsWaatsXObJVj9TOJGP25cneuycXsNN8ITHPWROmvbkYNatl 9dWFPlrfixe0u7FBv+Oth5JI= X-Received: by 127.0.0.2 with SMTP id EabLYY1788612xTbxDmzrOK6; Fri, 13 Oct 2023 09:56:09 -0700 X-Received: from m15.mail.163.com (m15.mail.163.com [45.254.50.219]) by mx.groups.io with SMTP id smtpd.web10.30859.1697166168677821682 for ; Thu, 12 Oct 2023 20:02:49 -0700 X-Received: from rv-uefi.. (unknown [211.87.236.31]) by zwqz-smtp-mta-g0-2 (Coremail) with SMTP id _____wD3v6FTsyhlo02nAQ--.33906S2; Fri, 13 Oct 2023 11:02:43 +0800 (CST) From: caiyuqing_hz@163.com To: devel@edk2.groups.io Cc: USER0FISH , sunilvl@ventanamicro.com, Leif Lindholm , Michael D Kinney , Inochi Amaoto Subject: [edk2-devel] [PATCH edk2-platforms v5 4/7] Sophgo/SG2042Pkg: Add SEC module. Date: Fri, 13 Oct 2023 11:02:43 +0800 Message-Id: <73f493046d9ec69a4a29a5d06d0dbd648fbc1360.1697120122.git.caiyuqing_hz@outlook.com> In-Reply-To: References: MIME-Version: 1.0 X-CM-TRANSID: _____wD3v6FTsyhlo02nAQ--.33906S2 X-Coremail-Antispam: 1Uf129KBjvAXoWfWF43urW8JFWUWr18Xr17Awb_yoW8tw47to Z7KFZ2yr48Gws8ur1IkwnrGw47WFnIgay3Xr1rtFWqvF4vvrnIvayxXa45G3s8Ar18G3yD Ww4fX3s7JFZIqrykn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUcSdyUUUUU X-Originating-IP: [211.87.236.31] X-CM-SenderInfo: 5fdl535tlqwslk26il2tof0z/1tbiKAYIxV7WNZtyPAABsK Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,caiyuqing_hz@163.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: dMhon8EPNOj9cwWUHQbIrk14x1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1697216172204100018 Content-Type: text/plain; charset="utf-8" From: caiyuqing379 This module supports Sophgo SG2042 EVB platform. It uses the PEI less design. Add this module in SG2042Pkg leveraging the one from OvmfPkg/RiscVVirt. Add only lowest memory node in SEC module. Currently, RISC-V with a multi-range memory layout hits relocation overflow problems, so only one DDR can be inserted if you want to boot the Linux OS via GRUB2. Referring to [1], this seems to be an issue with GRUB2. When using the no-map attribute in dt, OpenSBI 1.3/1.3.1 should be used which fixed its no-map issue. Otherwise, maybe get into some issues in linux kernel. [1]https://lore.kernel.org/all/55d68176-bbf4-4310-e718-6127c3de497e@intel.c= om/T/ Signed-off-by: caiyuqing379 Co-authored-by: USER0FISH Cc: dahogn Cc: meng-cz Cc: yli147 Cc: ChaiEvan Cc: Leif Lindholm Cc: Michael D Kinney Cc: Sunil V L Acked-by: Sunil V L --- Silicon/Sophgo/SG2042Pkg/Sec/SecMain.inf | 68 +++++ Silicon/Sophgo/SG2042Pkg/Sec/SecMain.h | 104 +++++++ Silicon/Sophgo/SG2042Pkg/Sec/Cpu.c | 29 ++ Silicon/Sophgo/SG2042Pkg/Sec/Memory.c | 327 +++++++++++++++++++++++ Silicon/Sophgo/SG2042Pkg/Sec/Platform.c | 130 +++++++++ Silicon/Sophgo/SG2042Pkg/Sec/SecMain.c | 115 ++++++++ Silicon/Sophgo/SG2042Pkg/Sec/SecEntry.S | 18 ++ 7 files changed, 791 insertions(+) create mode 100644 Silicon/Sophgo/SG2042Pkg/Sec/SecMain.inf create mode 100644 Silicon/Sophgo/SG2042Pkg/Sec/SecMain.h create mode 100644 Silicon/Sophgo/SG2042Pkg/Sec/Cpu.c create mode 100644 Silicon/Sophgo/SG2042Pkg/Sec/Memory.c create mode 100644 Silicon/Sophgo/SG2042Pkg/Sec/Platform.c create mode 100644 Silicon/Sophgo/SG2042Pkg/Sec/SecMain.c create mode 100644 Silicon/Sophgo/SG2042Pkg/Sec/SecEntry.S diff --git a/Silicon/Sophgo/SG2042Pkg/Sec/SecMain.inf b/Silicon/Sophgo/SG20= 42Pkg/Sec/SecMain.inf new file mode 100644 index 000000000000..3b4d6d6b86bc --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Sec/SecMain.inf @@ -0,0 +1,68 @@ +## @file +# SEC Driver for RISC-V +# +# Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.
+# Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Univers= iy, China.P.R. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x0001001B + BASE_NAME =3D SecMainRiscV64 + FILE_GUID =3D 125E1236-9D4F-457B-BF7E-6311C88A1621 + MODULE_TYPE =3D SEC + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D SecMain + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D RISCV64 +# + +[Sources] + SecEntry.S + SecMain.c + SecMain.h + Cpu.c + Memory.c + Platform.c + +[Packages] + EmbeddedPkg/EmbeddedPkg.dec + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + UefiCpuPkg/UefiCpuPkg.dec + Silicon/Sophgo/SG2042Pkg/SG2042Pkg.dec + Platform/RISC-V/PlatformPkg/RiscVPlatformPkg.dec + +[LibraryClasses] + BaseLib + DebugLib + PcdLib + IoLib + PeCoffLib + LzmaDecompressLib + RiscVSbiLib + PrePiLib + FdtLib + MemoryAllocationLib + HobLib + SerialPortLib + +[FixedPcd] + gUefiRiscVPlatformPkgTokenSpaceGuid.PcdRiscVDxeFvBase = ## CONSUMES + gUefiRiscVPlatformPkgTokenSpaceGuid.PcdRiscVDxeFvSize = ## CONSUMES + gUefiRiscVPlatformPkgTokenSpaceGuid.PcdVariableFirmwareRegionBaseAddress= ## CONSUMES + gUefiRiscVPlatformPkgTokenSpaceGuid.PcdVariableFirmwareRegionSize = ## CONSUMES + gUefiRiscVPlatformPkgTokenSpaceGuid.PcdTemporaryRamBase = ## CONSUMES + gUefiRiscVPlatformPkgTokenSpaceGuid.PcdTemporaryRamSize = ## CONSUMES + +[Guids] + gFdtHobGuid ## PRODUCES + +[BuildOptions] + GCC:*_*_*_PP_FLAGS =3D -D__ASSEMBLY__ + diff --git a/Silicon/Sophgo/SG2042Pkg/Sec/SecMain.h b/Silicon/Sophgo/SG2042= Pkg/Sec/SecMain.h new file mode 100644 index 000000000000..9d615e9fa6a1 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Sec/SecMain.h @@ -0,0 +1,104 @@ +/** @file + Master header file for SecCore. + + Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.
+ Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef SEC_MAIN_H_ +#define SEC_MAIN_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + Entry point to the C language phase of SEC. After the SEC assembly + code has initialized some temporary memory and set up the stack, + the control is transferred to this function. + + @param SizeOfRam Size of the temporary memory available for us= e. + @param TempRamBase Base address of temporary ram + @param BootFirmwareVolume Base address of the Boot Firmware Volume. +**/ +VOID +NORETURN +EFIAPI +SecStartup ( + IN UINTN BootHartId, + IN VOID *DeviceTreeAddress + ); + +/** + Auto-generated function that calls the library constructors for all of t= he module's + dependent libraries. This function must be called by the SEC Core once = a stack has + been established. + +**/ +VOID +EFIAPI +ProcessLibraryConstructorList ( + VOID + ); + +/** + Perform Platform PEIM initialization. + + @return EFI_SUCCESS The platform initialized successfully. + @retval Others - As the error code indicates + +**/ +EFI_STATUS +EFIAPI +PlatformPeimInitialization ( + IN VOID *DeviceTreeAddress + ); + +/** + Perform Memory PEIM initialization. + + @param DeviceTreeAddress Pointer to FDT. + @return EFI_SUCCESS The platform initialized successfully. + @retval Others - As the error code indicates + +**/ +EFI_STATUS +EFIAPI +MemoryPeimInitialization ( + IN VOID *DeviceTreeAddress + ); + +/** + Perform CPU PEIM initialization. + + @return EFI_SUCCESS The platform initialized successfully. + @retval Others - As the error code indicates + +**/ +EFI_STATUS +EFIAPI +CpuPeimInitialization ( + VOID + ); + +#endif diff --git a/Silicon/Sophgo/SG2042Pkg/Sec/Cpu.c b/Silicon/Sophgo/SG2042Pkg/= Sec/Cpu.c new file mode 100644 index 000000000000..c72bafdcc478 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Sec/Cpu.c @@ -0,0 +1,29 @@ +/** @file +The library call to pass the device tree to DXE via HOB. + +Copyright (c) 2021, Hewlett Packard Enterprise Development LP. All rights = reserved.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +/** + Cpu Peim initialization. + +**/ +EFI_STATUS +CpuPeimInitialization ( + VOID + ) +{ + // + // for MMU type >=3D sv39 + // + BuildCpuHob (40, 39); + + return EFI_SUCCESS; +} diff --git a/Silicon/Sophgo/SG2042Pkg/Sec/Memory.c b/Silicon/Sophgo/SG2042P= kg/Sec/Memory.c new file mode 100644 index 000000000000..e2b624000987 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Sec/Memory.c @@ -0,0 +1,327 @@ +/** @file + Memory Detection for SG2042 EVB. + + Copyright (c) 2021, Hewlett Packard Enterprise Development LP. All right= s reserved.
+ Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
+ Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +Module Name: + + MemDetect.c + +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +VOID +BuildMemoryTypeInformationHob ( + VOID + ); + +/** + Create memory range resource HOB using the memory base + address and size. + + @param MemoryBase Memory range base address. + @param MemorySize Memory range size. + +**/ +STATIC +VOID +AddMemoryBaseSizeHob ( + IN EFI_PHYSICAL_ADDRESS MemoryBase, + IN UINT64 MemorySize + ) +{ + BuildResourceDescriptorHob ( + EFI_RESOURCE_SYSTEM_MEMORY, + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_TESTED, + MemoryBase, + MemorySize + ); +} + +/** + Create memory range resource HOB using memory base + address and top address of the memory range. + + @param MemoryBase Memory range base address. + @param MemoryLimit Memory range size. + +**/ +STATIC +VOID +AddMemoryRangeHob ( + IN EFI_PHYSICAL_ADDRESS MemoryBase, + IN EFI_PHYSICAL_ADDRESS MemoryLimit + ) +{ + AddMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase)); +} + +/** + Publish system RAM and reserve memory regions. + +**/ +STATIC +VOID +InitializeRamRegions ( + IN EFI_PHYSICAL_ADDRESS SystemMemoryBase, + IN UINT64 SystemMemorySize + ) +{ + AddMemoryRangeHob ( + SystemMemoryBase, + SystemMemoryBase + SystemMemorySize + ); +} + +/** Get the number of cells for a given property + + @param[in] Fdt Pointer to Device Tree (DTB) + @param[in] Node Node + @param[in] Name Name of the property + + @return Number of cells. +**/ +STATIC +INT32 +GetNumCells ( + IN VOID *Fdt, + IN INT32 Node, + IN CONST CHAR8 *Name + ) +{ + CONST INT32 *Prop; + INT32 Len; + UINT32 Val; + + Prop =3D fdt_getprop (Fdt, Node, Name, &Len); + if (Prop =3D=3D NULL) { + return Len; + } + + if (Len !=3D sizeof (*Prop)) { + return -FDT_ERR_BADNCELLS; + } + + Val =3D fdt32_to_cpu (*Prop); + if (Val > FDT_MAX_NCELLS) { + return -FDT_ERR_BADNCELLS; + } + + return (INT32)Val; +} + +/** Mark reserved memory ranges in the EFI memory map + + * As per DT spec v0.4 Section 3.5.4, + * "Reserved regions with the no-map property must be listed in the + * memory map with type EfiReservedMemoryType. All other reserved + * regions must be listed with type EfiBootServicesData." + + @param FdtPointer Pointer to FDT + +**/ +STATIC +VOID +AddReservedMemoryMap ( + IN VOID *FdtPointer + ) +{ + CONST INT32 *RegProp; + INT32 Node; + INT32 SubNode; + INT32 Len; + EFI_PHYSICAL_ADDRESS Addr; + UINT64 Size; + INTN NumRsv, i; + INT32 NumAddrCells, NumSizeCells; + + NumRsv =3D fdt_num_mem_rsv (FdtPointer); + + /* Look for an existing entry and add it to the efi mem map. */ + for (i =3D 0; i < NumRsv; i++) { + if (fdt_get_mem_rsv (FdtPointer, i, &Addr, &Size) !=3D 0) { + continue; + } + + BuildMemoryAllocationHob ( + Addr, + Size, + EfiReservedMemoryType + ); + } + + /* process reserved-memory */ + Node =3D fdt_subnode_offset (FdtPointer, 0, "reserved-memory"); + if (Node >=3D 0) { + NumAddrCells =3D GetNumCells (FdtPointer, Node, "#address-cells"); + if (NumAddrCells <=3D 0) { + return; + } + + NumSizeCells =3D GetNumCells (FdtPointer, Node, "#size-cells"); + if (NumSizeCells <=3D 0) { + return; + } + + fdt_for_each_subnode (SubNode, FdtPointer, Node) { + RegProp =3D fdt_getprop (FdtPointer, SubNode, "reg", &Len); + + if ((RegProp !=3D 0) && (Len =3D=3D ((NumAddrCells + NumSizeCells) *= sizeof (INT32)))) { + Addr =3D fdt32_to_cpu (RegProp[0]); + + if (NumAddrCells > 1) { + Addr =3D (Addr << 32) | fdt32_to_cpu (RegProp[1]); + } + + RegProp +=3D NumAddrCells; + Size =3D fdt32_to_cpu (RegProp[0]); + + if (NumSizeCells > 1) { + Size =3D (Size << 32) | fdt32_to_cpu (RegProp[1]); + } + + DEBUG (( + DEBUG_INFO, + "%a: Adding Reserved Memory Addr =3D 0x%llx, Size =3D 0x%llx\n", + __func__, + Addr, + Size + )); + + // OpenSBI 1.3/1.3.1 should be used which fixed its no-map issue. + if (fdt_getprop (FdtPointer, SubNode, "no-map", &Len)) { + BuildMemoryAllocationHob ( + Addr, + Size, + EfiReservedMemoryType + ); + } else { + BuildMemoryAllocationHob ( + Addr, + Size, + EfiBootServicesData + ); + } + } + } + } +} + +/** + Initialize memory hob based on the DTB information. + + NOTE: The memory space size of SG2042 EVB is determined by the number + and size of DDRs inserted on the board. There is an error with initializ= ing + the system ram space of each memory node separately using InitializeRamR= egions, + so InitializeRamRegions is only called once for total system ram initial= ization. + + @param DeviceTreeAddress Pointer to FDT. + @return EFI_SUCCESS The memory hob added successfully. + +**/ +EFI_STATUS +MemoryPeimInitialization ( + IN VOID *DeviceTreeAddress + ) +{ + CONST UINT64 *RegProp; + CONST CHAR8 *Type; + UINT64 UefiMemoryBase; + UINT64 CurBase; + UINT64 CurSize; + UINT64 LowestMemBase; + UINT64 LowestMemSize; + INT32 Node; + INT32 Prev; + INT32 Len; + + UefiMemoryBase =3D (UINT64)FixedPcdGet32 (PcdTemporaryRamBase) + FixedPc= dGet32 (PcdTemporaryRamSize) - SIZE_32MB; + LowestMemBase =3D 0; + LowestMemSize =3D 0; + + // Look for the lowest memory node + for (Prev =3D 0; ; Prev =3D Node) { + Node =3D fdt_next_node (DeviceTreeAddress, Prev, NULL); + if (Node < 0) { + break; + } + + // Check for memory node + Type =3D fdt_getprop (DeviceTreeAddress, Node, "device_type", &Len); + if (Type && (AsciiStrnCmp (Type, "memory", Len) =3D=3D 0)) { + // Get the 'reg' property of this node. For now, we will assume + // two 8 byte quantities for base and size, respectively. + RegProp =3D fdt_getprop (DeviceTreeAddress, Node, "reg", &Len); + if ((RegProp !=3D 0) && (Len =3D=3D (2 * sizeof (UINT64)))) { + CurBase =3D fdt64_to_cpu (ReadUnaligned64 (RegProp)); + CurSize =3D fdt64_to_cpu (ReadUnaligned64 (RegProp + 1)); + + DEBUG (( + DEBUG_INFO, + "%a: System RAM @ 0x%lx - 0x%lx\n", + __func__, + CurBase, + CurBase + CurSize - 1 + )); + + if ((LowestMemBase =3D=3D 0) || (CurBase <=3D LowestMemBase)) { + LowestMemBase =3D CurBase; + LowestMemSize =3D CurSize; + } + + } else { + DEBUG (( + DEBUG_ERROR, + "%a: Failed to parse FDT memory node\n", + __func__ + )); + } + } + } + + if (UefiMemoryBase > LowestMemBase) { + LowestMemBase =3D UefiMemoryBase; + LowestMemSize -=3D UefiMemoryBase; + } + + DEBUG (( + DEBUG_INFO, + "%a: Total System RAM @ 0x%lx - 0x%lx\n", + __func__, + LowestMemBase, + LowestMemBase + LowestMemSize - 1 + )); + + InitializeRamRegions (LowestMemBase, LowestMemSize); + + AddReservedMemoryMap (DeviceTreeAddress); + + /* Make sure SEC is booting with bare mode */ + ASSERT ((RiscVGetSupervisorAddressTranslationRegister () & SATP64_MODE) = =3D=3D (SATP_MODE_OFF << SATP64_MODE_SHIFT)); + + BuildMemoryTypeInformationHob (); + + return EFI_SUCCESS; +} diff --git a/Silicon/Sophgo/SG2042Pkg/Sec/Platform.c b/Silicon/Sophgo/SG204= 2Pkg/Sec/Platform.c new file mode 100644 index 000000000000..21885a956088 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Sec/Platform.c @@ -0,0 +1,130 @@ +/** @file +The library call to pass the device tree to DXE via HOB. + +Copyright (c) 2021, Hewlett Packard Enterprise Development LP. All rights = reserved.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include +#include + +/** + Build memory map I/O range resource HOB using the + base address and size. + + @param MemoryBase Memory map I/O base. + @param MemorySize Memory map I/O size. + +**/ +STATIC +VOID +AddIoMemoryBaseSizeHob ( + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize + ) +{ + /* Align to EFI_PAGE_SIZE */ + MemorySize =3D ALIGN_VALUE (MemorySize, EFI_PAGE_SIZE); + BuildResourceDescriptorHob ( + EFI_RESOURCE_MEMORY_MAPPED_IO, + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + EFI_RESOURCE_ATTRIBUTE_TESTED, + MemoryBase, + MemorySize + ); +} + +/** + Populate IO resources from FDT that not added to GCD by its + driver in the DXE phase. + + @param FdtBase Fdt base address + @param Compatible Compatible string + +**/ +STATIC +VOID +PopulateIoResources ( + VOID *FdtBase, + CONST CHAR8 *Compatible + ) +{ + UINT64 *Reg; + INT32 Node, LenP; + + Node =3D fdt_node_offset_by_compatible (FdtBase, -1, Compatible); + while (Node !=3D -FDT_ERR_NOTFOUND) { + Reg =3D (UINT64 *)fdt_getprop (FdtBase, Node, "reg", &LenP); + if (Reg) { + ASSERT (LenP =3D=3D (2 * sizeof (UINT64))); + AddIoMemoryBaseSizeHob (SwapBytes64 (Reg[0]), SwapBytes64 (Reg[1])); + } + + Node =3D fdt_node_offset_by_compatible (FdtBase, Node, Compatible); + } +} + +/** + @param DeviceTreeAddress Pointer to FDT. + @retval EFI_SUCCESS The address of FDT is passed in HOB. + EFI_UNSUPPORTED Can't locate FDT. +**/ +EFI_STATUS +EFIAPI +PlatformPeimInitialization ( + IN VOID *DeviceTreeAddress + ) +{ + VOID *Base; + VOID *NewBase; + UINTN FdtSize; + UINTN FdtPages; + UINT64 *FdtHobData; + + if (DeviceTreeAddress =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Invalid FDT pointer\n", __func__)); + return EFI_UNSUPPORTED; + } + + DEBUG ((DEBUG_INFO, "%a: Build FDT HOB - FDT at address: 0x%x \n", __fun= c__, DeviceTreeAddress)); + Base =3D DeviceTreeAddress; + if (fdt_check_header (Base) !=3D 0) { + DEBUG ((DEBUG_ERROR, "%a: Corrupted DTB\n", __func__)); + return EFI_UNSUPPORTED; + } + + FdtSize =3D fdt_totalsize (Base); + FdtPages =3D EFI_SIZE_TO_PAGES (FdtSize); + NewBase =3D AllocatePages (FdtPages); + if (NewBase =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Could not allocate memory for DTB\n", __func= __)); + return EFI_UNSUPPORTED; + } + + fdt_open_into (Base, NewBase, EFI_PAGES_TO_SIZE (FdtPages)); + + FdtHobData =3D BuildGuidHob (&gFdtHobGuid, sizeof *FdtHobData); + if (FdtHobData =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a: Could not build FDT Hob\n", __func__)); + return EFI_UNSUPPORTED; + } + + *FdtHobData =3D (UINTN)NewBase; + + BuildFvHob (PcdGet32 (PcdRiscVDxeFvBase), PcdGet32 (PcdRiscVDxeFvSize)); + + PopulateIoResources (Base, "bitmain,bm-sd"); + PopulateIoResources (Base, "snps,dw-apb-uart"); + + return EFI_SUCCESS; +} diff --git a/Silicon/Sophgo/SG2042Pkg/Sec/SecMain.c b/Silicon/Sophgo/SG2042= Pkg/Sec/SecMain.c new file mode 100644 index 000000000000..a75b8b819737 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Sec/SecMain.c @@ -0,0 +1,115 @@ +/** @file + RISC-V SEC phase module for SG2042 EVB. + + Copyright (c) 2008 - 2023, Intel Corporation. All rights reserved.
+ Copyright (c) 2022, Ventana Micro Systems Inc. All rights reserved.
+ Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "SecMain.h" + +/** + Initialize the memory and CPU, setting the boot mode, and platform + initialization. It also builds the core information HOB. + + @return EFI_SUCCESS Status. +**/ +STATIC +EFI_STATUS +EFIAPI +SecInitializePlatform ( + IN VOID *DeviceTreeAddress + ) +{ + EFI_STATUS Status; + + MemoryPeimInitialization (DeviceTreeAddress); + + CpuPeimInitialization (); + + // Set the Boot Mode + SetBootMode (BOOT_WITH_FULL_CONFIGURATION); + + Status =3D PlatformPeimInitialization (DeviceTreeAddress); + ASSERT_EFI_ERROR (Status); + + return EFI_SUCCESS; +} + +/** + + Entry point to the C language phase of SEC. After the SEC assembly + code has initialized some temporary memory and set up the stack, + the control is transferred to this function. + + + @param[in] BootHartId Hardware thread ID of boot hart. + @param[in] DeviceTreeAddress Pointer to Device Tree (DTB) +**/ +VOID +NORETURN +EFIAPI +SecStartup ( + IN UINTN BootHartId, + IN VOID *DeviceTreeAddress + ) +{ + EFI_HOB_HANDOFF_INFO_TABLE *HobList; + EFI_RISCV_FIRMWARE_CONTEXT FirmwareContext; + EFI_STATUS Status; + UINT64 UefiMemoryBase; + UINT64 StackBase; + UINT32 StackSize; + + SerialPortInitialize (); + + // + // Report Status Code to indicate entering SEC core + // + DEBUG (( + DEBUG_INFO, + "%a() BootHartId: 0x%x, DeviceTreeAddress=3D0x%x\n", + __func__, + BootHartId, + DeviceTreeAddress + )); + + FirmwareContext.BootHartId =3D BootHartId; + SetFirmwareContextPointer (&FirmwareContext); + + StackBase =3D (UINT64)FixedPcdGet32 (PcdTemporaryRamBase); + StackSize =3D FixedPcdGet32 (PcdTemporaryRamSize); + UefiMemoryBase =3D StackBase + StackSize - SIZE_32MB; + + // Declare the PI/UEFI memory region + HobList =3D HobConstructor ( + (VOID *)UefiMemoryBase, + SIZE_32MB, + (VOID *)UefiMemoryBase, + (VOID *)StackBase // The top of the UEFI Memory is reserved = for the stacks + ); + PrePeiSetHobList (HobList); + + SecInitializePlatform (DeviceTreeAddress); + + BuildStackHob (StackBase, StackSize); + + // + // Process all libraries constructor function linked to SecMain. + // + ProcessLibraryConstructorList (); + + // Assume the FV that contains the SEC (our code) also contains a compre= ssed FV. + Status =3D DecompressFirstFv (); + ASSERT_EFI_ERROR (Status); + + // Load the DXE Core and transfer control to it + Status =3D LoadDxeCoreFromFv (NULL, 0); + ASSERT_EFI_ERROR (Status); + // + // Should not come here. + // + UNREACHABLE (); +} diff --git a/Silicon/Sophgo/SG2042Pkg/Sec/SecEntry.S b/Silicon/Sophgo/SG204= 2Pkg/Sec/SecEntry.S new file mode 100644 index 000000000000..ee02317a6bc8 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/Sec/SecEntry.S @@ -0,0 +1,18 @@ +/* + Copyright (c) 2022 Ventana Micro Systems Inc. + + SPDX-License-Identifier: BSD-2-Clause-Patent + + */ + +#include "SecMain.h" + +ASM_FUNC (_ModuleEntryPoint) + /* Use Temp memory as the stack for calling to C code */ + li a4, FixedPcdGet32 (PcdTemporaryRamBase) + li a5, FixedPcdGet32 (PcdTemporaryRamSize) + + /* Use Temp memory as the stack for calling to C code */ + add sp, a4, a5 + + call SecStartup -- 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109603): https://edk2.groups.io/g/devel/message/109603 Mute This Topic: https://groups.io/mt/101944467/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri Sep 20 14:54:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+109604+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109604+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=163.com ARC-Seal: i=1; a=rsa-sha256; t=1697216175; cv=none; d=zohomail.com; s=zohoarc; b=ST7/MAZkfkVeUofgC4xekI5nVlvMarj99PXi7XZeIT7YkC2+0AW24IViLEgw/PnZ65mw7AdXNSn/bJdDFx42pNIy9SG7r4hBIzUgHAD3kNMKPB54eWW8wp8T5illHPZ47oWGTBo/s5flQjHjF5E3Equ68vZfGNRWpHA5tkQRIb4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697216175; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=ZwFcV9JCUfz6BognF21SFbCseJ8xad7KsjvuY43XHes=; b=Hsal4lA6LxzzwOLKOFi2AC6ZiHxLs2dT707ff7+MLMF4YKkMSt/FvMtnmGxz+efnaFWMK88W2q74WZV1vW9LGMHjeFmLtEoUaRohXN0H/YKKhA0V7SjD+HYAZs6LLaB2NmN02gmFBFcM3X4UAQ6emLmqvQ4pah1VrvGI1CHQ5Ew= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109604+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1697216175411915.8257462131527; Fri, 13 Oct 2023 09:56:15 -0700 (PDT) Return-Path: DKIM-Signature: a=rsa-sha256; bh=VTtF8t1yutLyAp92aU6YvT2QDzJCupuO5DL4NZRyOu8=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1697216175; v=1; b=pLigpHbFIQyHAgY6YiBuFiNFkLRzTCcDDJ0Jq7nV0/vtagYQin5OdKuU+Ls8OXsBj+TrBw9x L80iFNAOluyeoZHNpx8axJA1W8hdgOiz6GrWzMgUFQonlmIoEadxKP99N0e5aV7C0W6phEQkIoF 14HjOqlRU0Ddq1+D/A8F5+Mw= X-Received: by 127.0.0.2 with SMTP id 1wvxYY1788612xF5QosmlvhH; Fri, 13 Oct 2023 09:56:15 -0700 X-Received: from m15.mail.163.com (m15.mail.163.com [45.254.50.219]) by mx.groups.io with SMTP id smtpd.web11.30846.1697166189011191200 for ; Thu, 12 Oct 2023 20:03:10 -0700 X-Received: from rv-uefi.. (unknown [211.87.236.31]) by zwqz-smtp-mta-g1-1 (Coremail) with SMTP id _____wDXXwVmsyhlTaSdAQ--.6677S2; Fri, 13 Oct 2023 11:03:02 +0800 (CST) From: caiyuqing_hz@163.com To: devel@edk2.groups.io Cc: USER0FISH , sunilvl@ventanamicro.com, Leif Lindholm , Michael D Kinney , Inochi Amaoto Subject: [edk2-devel] [PATCH edk2-platforms v5 5/7] Sophgo/SG2042_EVB_Board: Add Sophgo SG2042 platform. Date: Fri, 13 Oct 2023 11:03:01 +0800 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-CM-TRANSID: _____wDXXwVmsyhlTaSdAQ--.6677S2 X-Coremail-Antispam: 1Uf129KBjvAXoWDWF45WrWUAFWUGw4fXw1rtFb_yoWrtw4UGo Z7Jr10qr43Kr1kJ3ykGF9rt34xZwsIqrs8Zr1ruw18AF4vqr1a9rWDtwsxXrs0yw1DAr1D G3yrAay8KFW7twn7n29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUcfHUDUUUU X-Originating-IP: [211.87.236.31] X-CM-SenderInfo: 5fdl535tlqwslk26il2tof0z/xtbBlwoIxWI0anqSyQAAsN Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,caiyuqing_hz@163.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: MRcZG8h2YRuLyrkopqVaE8Dfx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1697216176094100002 Content-Type: text/plain; charset="utf-8" From: caiyuqing379 Add infrastructure files to build edk2-platforms for Sophgo SG2042 platform. It follows PEI less design. Signed-off-by: caiyuqing379 Co-authored-by: USER0FISH Cc: dahogn Cc: meng-cz Cc: yli147 Cc: ChaiEvan Cc: Leif Lindholm Cc: Michael D Kinney Acked-by: Sunil V L --- Platform/Sophgo/SG2042_EVB_Board/SG2042.dec | 19 + Platform/Sophgo/SG2042_EVB_Board/SG2042.dsc | 557 ++++++++++++++++++ Platform/Sophgo/SG2042_EVB_Board/SG2042.fdf | 248 ++++++++ .../Sophgo/SG2042_EVB_Board/SG2042.fdf.inc | 61 ++ .../Sophgo/SG2042_EVB_Board/VarStore.fdf.inc | 77 +++ 5 files changed, 962 insertions(+) create mode 100644 Platform/Sophgo/SG2042_EVB_Board/SG2042.dec create mode 100644 Platform/Sophgo/SG2042_EVB_Board/SG2042.dsc create mode 100644 Platform/Sophgo/SG2042_EVB_Board/SG2042.fdf create mode 100644 Platform/Sophgo/SG2042_EVB_Board/SG2042.fdf.inc create mode 100644 Platform/Sophgo/SG2042_EVB_Board/VarStore.fdf.inc diff --git a/Platform/Sophgo/SG2042_EVB_Board/SG2042.dec b/Platform/Sophgo/= SG2042_EVB_Board/SG2042.dec new file mode 100644 index 000000000000..b0ea250a997e --- /dev/null +++ b/Platform/Sophgo/SG2042_EVB_Board/SG2042.dec @@ -0,0 +1,19 @@ +## @file SG2042.dec +# This Package provides Sophgo SG2042 modules and libraries. +# +# Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + DEC_SPECIFICATION =3D 0x0001001b + PACKAGE_NAME =3D SG2042 + PACKAGE_GUID =3D BBF86176-C58B-4EC5-8D76-B8D458A2548E + PACKAGE_VERSION =3D 1.0 + +[LibraryClasses] + +[Guids] + gUefiRiscVPlatformSG2042PkgTokenSpaceGuid =3D {0xD0D80952, 0x8371, 0x4D8= D, { 0x8E, 0x65, 0x27, 0x52, 0x63, 0xF3, 0xD9, 0x27 }} diff --git a/Platform/Sophgo/SG2042_EVB_Board/SG2042.dsc b/Platform/Sophgo/= SG2042_EVB_Board/SG2042.dsc new file mode 100644 index 000000000000..ad164bc314f5 --- /dev/null +++ b/Platform/Sophgo/SG2042_EVB_Board/SG2042.dsc @@ -0,0 +1,557 @@ +## @file +# RISC-V EFI on Sophgo SG2042 EVB RISC-V platform +# +# Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Univers= iy, China.P.R. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +##########################################################################= ###### +# +# Defines Section - statements that will be processed to create a Makefile. +# +##########################################################################= ###### +[Defines] + PLATFORM_NAME =3D SG2042_EVB + PLATFORM_GUID =3D 8014637B-6999-4110-9762-464BE11E935F + PLATFORM_VERSION =3D 0.1 + DSC_SPECIFICATION =3D 0x0001001c + OUTPUT_DIRECTORY =3D Build/$(PLATFORM_NAME) + SUPPORTED_ARCHITECTURES =3D RISCV64 + BUILD_TARGETS =3D DEBUG|RELEASE|NOOPT + SKUID_IDENTIFIER =3D DEFAULT + FLASH_DEFINITION =3D Platform/Sophgo/SG2042_EVB_Board/SG20= 42.fdf + + # + # Enable below options may cause build error or may not work on + # the initial version of RISC-V package + # Defines for default states. These can be changed on the command line. + # -D FLAG=3DVALUE + # + DEFINE SECURE_BOOT_ENABLE =3D FALSE + DEFINE DEBUG_ON_SERIAL_PORT =3D TRUE + + # + # Network definition + # + DEFINE NETWORK_SNP_ENABLE =3D FALSE + DEFINE NETWORK_IP6_ENABLE =3D FALSE + DEFINE NETWORK_TLS_ENABLE =3D FALSE + DEFINE NETWORK_HTTP_BOOT_ENABLE =3D FALSE + DEFINE NETWORK_ISCSI_ENABLE =3D FALSE + +[BuildOptions] + GCC:RELEASE_*_*_CC_FLAGS =3D -DMDEPKG_NDEBUG +!ifdef $(SOURCE_DEBUG_ENABLE) + GCC:*_*_RISCV64_GENFW_FLAGS =3D --keepexceptiontable +!endif + +##########################################################################= ###### +# +# SKU Identification section - list of all SKU IDs supported by this Platf= orm. +# +##########################################################################= ###### +[SkuIds] + 0|DEFAULT + +##########################################################################= ###### +# +# Library Class section - list of all Library Classes needed by this Platf= orm. +# +##########################################################################= ###### + +!include MdePkg/MdeLibs.dsc.inc + +[LibraryClasses] + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf + SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf + SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchroniza= tionLib.inf + CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf + PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibN= ull.inf + PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf + CacheMaintenanceLib|MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMain= tenanceLib.inf + UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompres= sLib.inf + UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServic= esLib.inf + HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf + CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf + DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf + DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableL= ib.inf + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeC= offGetEntryPointLib.inf + PciCf8Lib|MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf + PciLib|MdePkg/Library/BasePciLibCf8/BasePciLibCf8.inf + IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf + OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHo= okStatusCodeLibNull.inf + SerialPortLib|MdePkg/Library/BaseSerialPortLibRiscVSbiLib/BaseSerialPort= LibRiscVSbiLibRam.inf + UefiLib|MdePkg/Library/UefiLib/UefiLib.inf + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBoo= tServicesTableLib.inf + UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/U= efiRuntimeServicesTableLib.inf + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntry= Point.inf + UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiA= pplicationEntryPoint.inf + DevicePathLib|MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDev= icePathLibDevicePathProtocol.inf + FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf + SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeS= ecurityManagementLib.inf + UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf + CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/Customize= dDisplayLib.inf + SortLib|MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf + ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf + UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag= erLib.inf + FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf + VariableFlashInfoLib|MdeModulePkg/Library/BaseVariableFlashInfoLib/BaseV= ariableFlashInfoLib.inf + VariablePolicyHelperLib|MdeModulePkg/Library/VariablePolicyHelperLib/Var= iablePolicyHelperLib.inf + +!ifdef $(SOURCE_DEBUG_ENABLE) + PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDeb= ug/PeCoffExtraActionLibDebug.inf + DebugCommunicationLib|SourceLevelDebugPkg/Library/DebugCommunicationLibS= erialPort/DebugCommunicationLibSerialPort.inf +!else + PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeC= offExtraActionLibNull.inf + DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.i= nf +!endif + + DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseD= ebugPrintErrorLevelLib.inf + +!if $(SECURE_BOOT_ENABLE) =3D=3D TRUE + IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf + OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf + TpmMeasurementLib|SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasure= mentLib.inf + AuthVariableLib|SecurityPkg/Library/AuthVariableLib/AuthVariableLib.inf + SecureBootVariableLib|SecurityPkg/Library/SecureBootVariableLib/SecureBo= otVariableLib.inf + SecureBootVariableProvisionLib|SecurityPkg/Library/SecureBootVariablePro= visionLib/SecureBootVariableProvisionLib.inf + PlatformPKProtectionLib|SecurityPkg/Library/PlatformPKProtectionLibVarPo= licy/PlatformPKProtectionLibVarPolicy.inf +!else + TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurem= entLibNull.inf + AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLib= Null.inf +!endif + VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf + +!if $(HTTP_BOOT_ENABLE) =3D=3D TRUE + HttpLib|MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.inf +!endif + + # ACPI not supported yet. + # S3BootScriptLib|MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScr= iptLib.inf + SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf + OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib= /BaseOrderedCollectionRedBlackTreeLib.inf + +[LibraryClasses.common] +!if $(SECURE_BOOT_ENABLE) =3D=3D TRUE + BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf +!endif + + # RISC-V Architectural Libraries + RiscVSbiLib|MdePkg/Library/BaseRiscVSbiLib/BaseRiscVSbiLib.inf + RiscVMmuLib|UefiCpuPkg/Library/BaseRiscVMmuLib/BaseRiscVMmuLib.inf + CpuExceptionHandlerLib|UefiCpuPkg/Library/BaseRiscV64CpuExceptionHandler= Lib/BaseRiscV64CpuExceptionHandlerLib.inf + + TimerLib|UefiCpuPkg/Library/BaseRiscV64CpuTimerLib/BaseRiscV64CpuTimerLi= b.inf + TimeBaseLib|EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.inf + RealTimeClockLib|EmbeddedPkg//Library/VirtualRealTimeClockLib/VirtualRea= lTimeClockLib.inf + + # Flattened Device Tree (FDT) access library + FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf + +[LibraryClasses.common.SEC] +!ifdef $(DEBUG_ON_SERIAL_PORT) + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf +!else + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf +!endif + + ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiRepor= tStatusCodeLib.inf + ExtractGuidedSectionLib|MdePkg/Library/BaseExtractGuidedSectionLib/BaseE= xtractGuidedSectionLib.inf + PlatformSecLib|UefiCpuPkg/Library/PlatformSecLibNull/PlatformSecLibNull.= inf + HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf + PrePiHobListPointerLib|OvmfPkg/RiscVVirt/Library/PrePiHobListPointerLib/= PrePiHobListPointerLib.inf + MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMe= moryAllocationLib.inf + +!ifdef $(SOURCE_DEBUG_ENABLE) + DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib= .inf +!endif + +[LibraryClasses.common.DXE_CORE] + HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf + DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf + MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeC= oreMemoryAllocationLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeRepor= tStatusCodeLib.inf +!ifdef $(DEBUG_ON_SERIAL_PORT) + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf +!else + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf +!endif + ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExt= ractGuidedSectionLib.inf +!ifdef $(SOURCE_DEBUG_ENABLE) + DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf +!endif + +[LibraryClasses.common.DXE_RUNTIME_DRIVER] + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/R= untimeDxeReportStatusCodeLib.inf + ResetSystemLib|OvmfPkg/RiscVVirt/Library/ResetSystemLib/BaseResetSystemL= ib.inf + UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf +!ifdef $(DEBUG_ON_SERIAL_PORT) + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf +!else + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf +!endif +!if $(SECURE_BOOT_ENABLE) =3D=3D TRUE + BaseCryptLib|CryptoPkg/Library/BaseCryptLib/RuntimeCryptLib.inf +!endif + UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag= erLib.inf + VariablePolicyLib|MdeModulePkg/Library/VariablePolicyLib/VariablePolicyL= ibRuntimeDxe.inf + +[LibraryClasses.common.UEFI_DRIVER] + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeRepor= tStatusCodeLib.inf +!ifdef $(DEBUG_ON_SERIAL_PORT) + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf +!else + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf +!endif + UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf + VariablePolicyLib|MdeModulePkg/Library/VariablePolicyLib/VariablePolicyL= ib.inf + +[LibraryClasses.common.DXE_DRIVER] + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeRepor= tStatusCodeLib.inf + UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf +!ifdef $(DEBUG_ON_SERIAL_PORT) + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf +!else + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf +!endif +!ifdef $(SOURCE_DEBUG_ENABLE) + DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf +!endif + UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag= erLib.inf + PlatformBootManagerLib|Platform/RISC-V/PlatformPkg/Library/PlatformBootM= anagerLib/PlatformBootManagerLib.inf + PlatformMemoryTestLib|Platform/RISC-V/PlatformPkg/Library/PlatformMemory= TestLibNull/PlatformMemoryTestLibNull.inf + PlatformUpdateProgressLib|Platform/RISC-V/PlatformPkg/Library/PlatformUp= dateProgressLibNull/PlatformUpdateProgressLibNull.inf + +[LibraryClasses.common.UEFI_APPLICATION] + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf +!ifdef $(DEBUG_ON_SERIAL_PORT) + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf +!else + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf +!endif + ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeRepor= tStatusCodeLib.inf + +##########################################################################= ###### +# +# Pcd Section - list of all EDK II PCD Entries defined by this Platform. +# +##########################################################################= ###### +[PcdsFeatureFlag] + gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSupportUefiDecompress|FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE + +[PcdsFixedAtBuild] + gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|TRUE + gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeMemorySize|1 + gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FAL= SE + gEfiMdePkgTokenSpaceGuid.PcdMaximumGuidedExtractHandler|0x10 + gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x2000 + gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize|0x8000 + gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0xe000 + + gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress|0x0 + + gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x07 + gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F +!ifdef $(SOURCE_DEBUG_ENABLE) + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 +!else + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2F +!endif + +!ifdef $(SOURCE_DEBUG_ENABLE) + gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdDebugLoadImageMethod|0x2 +!endif + +!if $(SECURE_BOOT_ENABLE) =3D=3D TRUE + # override the default values from SecurityPkg to ensure images from all= sources are verified in secure boot + gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x04 + gEfiSecurityPkgTokenSpaceGuid.PcdFixedMediaImageVerificationPolicy|0x04 + gEfiSecurityPkgTokenSpaceGuid.PcdRemovableMediaImageVerificationPolicy|0= x04 +!endif + + # + # F2 for UI APP + # + gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c= , 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0= x31 } + + # + # Optional feature to help prevent EFI memory map fragments + # Turned on and off via: PcdPrePiProduceMemoryTypeInformationHob + # Values are in EFI Pages (4K). DXE Core will make sure that + # at least this much of each type of memory can be allocated + # from a single memory range. This way you only end up with + # maximum of two fragments for each type in the memory map + # (the memory used, and the free memory that was prereserved + # but not used). + # + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory|0 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS|0 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType|0 +!if $(SECURE_BOOT_ENABLE) =3D=3D TRUE + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData|600 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode|400 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesCode|1500 +!else + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData|300 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode|150 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesCode|1000 +!endif + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData|6000 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode|20 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData|0 + + # + # Enable strict image permissions for all images. (This applies + # only to images that were built with >=3D 4 KB section alignment.) + # + gEfiMdeModulePkgTokenSpaceGuid.PcdImageProtectionPolicy|0x3 + + # + # Enable NX memory protection for all non-code regions, including OEM an= d OS + # reserved ones, with the exception of LoaderData regions, of which OS l= oaders + # (i.e., GRUB) may assume that its contents are executable. + # + gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy|0xC0000000= 00007FD5 + + # + # Control the maximum SATP mode that MMU allowed to use. + # 0 - Bare mode. + # 8 - 39bit mode. + # 9 - 48bit mode. + # 10 - 57bit mode. + # + gUefiCpuPkgTokenSpaceGuid.PcdCpuRiscVMmuMaxSatpMode|0 + +##########################################################################= ###### +# +# Pcd Dynamic Section - list of all EDK II PCD Entries defined by this Pla= tform +# +##########################################################################= ###### + +[PcdsDynamicDefault] + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|800 + gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|600 + + gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|0x0001 + + # Set video resolution for text setup. + gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution|640 + gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution|480 + + gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion|0x0208 + gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosDocRev|0x0 + +[PcdsDynamicHii] + gUefiOvmfPkgTokenSpaceGuid.PcdForceNoAcpi|L"ForceNoAcpi"|gOvmfVariableGu= id|0x0|TRUE|NV,BS + +##########################################################################= ###### +# +# Components Section - list of all EDK II Modules needed by this Platform. +# +##########################################################################= ###### +[Components] + + # + # SEC Phase modules + # + Silicon/Sophgo/SG2042Pkg/Sec/SecMain.inf { + + ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectio= nLib/PrePiExtractGuidedSectionLib.inf + LzmaDecompressLib|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaC= ustomDecompressLib.inf + PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf + HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf + PrePiHobListPointerLib|OvmfPkg/RiscVVirt/Library/PrePiHobListPointer= Lib/PrePiHobListPointerLib.inf + MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/Pre= PiMemoryAllocationLib.inf + } + + # + # DXE Phase modules + # + MdeModulePkg/Core/Dxe/DxeMain.inf { + + NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32Gu= idedSectionExtractLib.inf + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf + } + + MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCod= eRouterRuntimeDxe.inf + MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRun= timeDxe.inf + MdeModulePkg/Universal/PCD/Dxe/Pcd.inf { + + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + } + + ArmVirtPkg/CloudHvPlatformHasAcpiDtDxe/CloudHvHasAcpiDtDxe.inf + EmbeddedPkg/Drivers/FdtClientDxe/FdtClientDxe.inf { + + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf + } + OvmfPkg/Fdt/HighMemDxe/HighMemDxe.inf + + MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf + +!if $(SECURE_BOOT_ENABLE) =3D=3D TRUE + MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf { + + NULL|SecurityPkg/Library/DxeImageVerificationLib/DxeImageVerificatio= nLib.inf + } +!else + MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf +!endif + + UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf + MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf { + + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + } + MdeModulePkg/Universal/Metronome/Metronome.inf + MdeModulePkg/Universal/BdsDxe/BdsDxe.inf + MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf { + + ResetSystemLib|MdeModulePkg/Library/BaseResetSystemLibNull/BaseReset= SystemLibNull.inf + } + EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf + + # + # RISC-V Platform module + # + Platform/SiFive/U5SeriesPkg/Universal/Dxe/RamFvbServicesRuntimeDxe/FvbSe= rvicesRuntimeDxe.inf { + + SerialPortLib|Silicon/Hisilicon/Library/Dw8250SerialPortLib/Dw8250Se= rialPortLib.inf + } + Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcDxe.inf + Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.inf + + # + # RISC-V Core module + # + UefiCpuPkg/CpuTimerDxeRiscV64/CpuTimerDxeRiscV64.inf + UefiCpuPkg/CpuDxeRiscV64/CpuDxeRiscV64.inf + MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf + + MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf { + + NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf + VariablePolicyHelperLib|MdeModulePkg/Library/VariablePolicyHelperLib= /VariablePolicyHelperLib.inf + } + MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf + MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntim= eDxe.inf + MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf + MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf + MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf + + # No graphic console supported yet. + # MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.= inf { + # + # PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + # } + MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf + MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf { + + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + } + MdeModulePkg/Universal/PrintDxe/PrintDxe.inf + MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf + MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf + MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf + MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf + MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf + MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf + MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf + MdeModulePkg/Universal/SerialDxe/SerialDxe.inf + + # + # SMBIOS Support + # + MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf + Silicon/Sophgo/SG2042Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf + + # + # Network Support + # + !include NetworkPkg/Network.dsc.inc + + # + # Usb Support + # + MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf + MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf + MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf + MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf + MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf + MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf + + # + # FAT filesystem + GPT/MBR partitioning + UDF filesystem + # + FatPkg/EnhancedFatDxe/Fat.inf + MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf + + OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.in= f { + + gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE + + ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf + SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf + } + + ShellPkg/Application/Shell/Shell.inf { + + ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellComman= dLib.inf + NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2Comm= andsLib.inf + NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1Comm= andsLib.inf + NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3Comm= andsLib.inf + NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1Co= mmandsLib.inf + NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1Comm= andsLib.inf + NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1= CommandsLib.inf + NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1= CommandsLib.inf + HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandlePar= singLib.inf + FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf + SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + BcfgCommandLib|ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcf= gCommandLib.inf + + + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0xFF + gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE + gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000 + } + +!if $(SECURE_BOOT_ENABLE) =3D=3D TRUE + SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDx= e.inf +!endif + + MdeModulePkg/Application/UiApp/UiApp.inf { + + NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf + NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf + } diff --git a/Platform/Sophgo/SG2042_EVB_Board/SG2042.fdf b/Platform/Sophgo/= SG2042_EVB_Board/SG2042.fdf new file mode 100644 index 000000000000..08f8e1ec4635 --- /dev/null +++ b/Platform/Sophgo/SG2042_EVB_Board/SG2042.fdf @@ -0,0 +1,248 @@ +# @file +# Flash definition file on Sophgo SG2042 EVB RISC-V platform +# +# Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Univers= iy, China.P.R. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# Platform definitions +# +!include SG2042.fdf.inc + +# +# Build the variable store and the firmware code as one unified flash devi= ce +# image. +# +[FD.SG2042] +BaseAddress =3D $(FW_BASE_ADDRESS) +Size =3D $(FW_SIZE) +ErasePolarity =3D 1 +BlockSize =3D $(BLOCK_SIZE) +NumBlocks =3D $(FW_BLOCKS) + + +$(FVMAIN_OFFSET)|$(FVMAIN_SIZE) +gUefiRiscVPlatformPkgTokenSpaceGuid.PcdRiscVDxeFvBase|gUefiRiscVPlatformPk= gTokenSpaceGuid.PcdRiscVDxeFvSize +FV =3D FVMAIN_COMPACT + +!include VarStore.fdf.inc +##########################################################################= ###### + +[FV.DXEFV] +BlockSize =3D 0x10000 +FvAlignment =3D 16 +ERASE_POLARITY =3D 1 +MEMORY_MAPPED =3D TRUE +STICKY_WRITE =3D TRUE +LOCK_CAP =3D TRUE +LOCK_STATUS =3D TRUE +WRITE_DISABLED_CAP =3D TRUE +WRITE_ENABLED_CAP =3D TRUE +WRITE_STATUS =3D TRUE +WRITE_LOCK_CAP =3D TRUE +WRITE_LOCK_STATUS =3D TRUE +READ_DISABLED_CAP =3D TRUE +READ_ENABLED_CAP =3D TRUE +READ_STATUS =3D TRUE +READ_LOCK_CAP =3D TRUE +READ_LOCK_STATUS =3D TRUE + +APRIORI DXE { + INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf + INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf + INF Platform/SiFive/U5SeriesPkg/Universal/Dxe/RamFvbServicesRuntimeDxe/= FvbServicesRuntimeDxe.inf + INF UefiCpuPkg/CpuDxeRiscV64/CpuDxeRiscV64.inf +} + +# +# DXE Phase modules +# +INF MdeModulePkg/Core/Dxe/DxeMain.inf + +INF MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatus= CodeRouterRuntimeDxe.inf +INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandler= RuntimeDxe.inf +INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf +INF ArmVirtPkg/CloudHvPlatformHasAcpiDtDxe/CloudHvHasAcpiDtDxe.inf +INF EmbeddedPkg/Drivers/FdtClientDxe/FdtClientDxe.inf +INF OvmfPkg/Fdt/HighMemDxe/HighMemDxe.inf + +INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf +INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf +INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf +INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf +INF MdeModulePkg/Universal/Metronome/Metronome.inf +INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf + +# RISC-V Platform Drivers +INF Platform/SiFive/U5SeriesPkg/Universal/Dxe/RamFvbServicesRuntimeDxe/Fv= bServicesRuntimeDxe.inf +INF Silicon/Sophgo/SG2042Pkg/Drivers/MmcDxe/MmcDxe.inf +INF Silicon/Sophgo/SG2042Pkg/Drivers/SdHostDxe/SdHostDxe.inf + +# RISC-V Core Drivers +INF UefiCpuPkg/CpuTimerDxeRiscV64/CpuTimerDxeRiscV64.inf +INF UefiCpuPkg/CpuDxeRiscV64/CpuDxeRiscV64.inf + +INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf +INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf +!if $(SECURE_BOOT_ENABLE) =3D=3D TRUE + INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootCon= figDxe.inf +!endif + +INF MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf +INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf +INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRun= timeDxe.inf +INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf +INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf +INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf +INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf +INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf +INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf +INF MdeModulePkg/Universal/PrintDxe/PrintDxe.inf +INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf +INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf +INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf +INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf +INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf +INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf +INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf +INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf +INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe= .inf +INF FatPkg/EnhancedFatDxe/Fat.inf +INF MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf + +!ifndef $(SOURCE_DEBUG_ENABLE) +INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf +!endif + +# +# SMBIOS Support +# +INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf +INF Silicon/Sophgo/SG2042Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.= inf + +INF OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand= .inf +INF ShellPkg/Application/Shell/Shell.inf + +# +# Network modules +# +!if $(E1000_ENABLE) + FILE DRIVER =3D 5D695E11-9B3F-4b83-B25F-4A8D5D69BE07 { + SECTION PE32 =3D Intel3.5/EFIX64/E3507X2.EFI + } +!endif + +!include NetworkPkg/Network.fdf.inc + +# +# Usb Support +# +INF MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf +INF MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf +INF MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf +INF MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf +INF MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf +INF MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf + +INF MdeModulePkg/Application/UiApp/UiApp.inf + +##########################################################################= ###### + +[FV.FVMAIN_COMPACT] +FvAlignment =3D 16 +ERASE_POLARITY =3D 1 +MEMORY_MAPPED =3D TRUE +STICKY_WRITE =3D TRUE +LOCK_CAP =3D TRUE +LOCK_STATUS =3D TRUE +WRITE_DISABLED_CAP =3D TRUE +WRITE_ENABLED_CAP =3D TRUE +WRITE_STATUS =3D TRUE +WRITE_LOCK_CAP =3D TRUE +WRITE_LOCK_STATUS =3D TRUE +READ_DISABLED_CAP =3D TRUE +READ_ENABLED_CAP =3D TRUE +READ_STATUS =3D TRUE +READ_LOCK_CAP =3D TRUE +READ_LOCK_STATUS =3D TRUE +FvNameGuid =3D 27A72E80-3118-4c0c-8673-AA5B4EFA9613 + +INF Silicon/Sophgo/SG2042Pkg/Sec/SecMain.inf + +FILE FV_IMAGE =3D 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 { + SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED= =3D TRUE { + # + # These firmware volumes will have files placed in them uncompressed, + # and then both firmware volumes will be compressed in a single + # compression operation in order to achieve better overall compressio= n. + # + SECTION FV_IMAGE =3D DXEFV + } + } + +[Rule.Common.SEC] + FILE SEC =3D $(NAMED_GUID) RELOCS_STRIPPED FIXED { + PE32 PE32 Align =3D Auto $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING =3D"$(MODULE_NAME)" Optional + VERSION STRING =3D"$(INF_VERSION)" Optional BUILD_NUM=3D$(BUILD_NUMBE= R) + } + +[Rule.Common.DXE_CORE] + FILE DXE_CORE =3D $(NAMED_GUID) { + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING=3D"$(MODULE_NAME)" Optional + VERSION STRING=3D"$(INF_VERSION)" Optional BUILD_NUM=3D$(BUILD_NUMBER) + } + +[Rule.Common.DXE_DRIVER] + FILE DRIVER =3D $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING=3D"$(MODULE_NAME)" Optional + VERSION STRING=3D"$(INF_VERSION)" Optional BUILD_NUM=3D$(BUILD_NUMBER) + } + +[Rule.Common.DXE_RUNTIME_DRIVER] + FILE DRIVER =3D $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING=3D"$(MODULE_NAME)" Optional + VERSION STRING=3D"$(INF_VERSION)" Optional BUILD_NUM=3D$(BUILD_NUMBER) + } + +[Rule.Common.UEFI_DRIVER] + FILE DRIVER =3D $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING=3D"$(MODULE_NAME)" Optional + VERSION STRING=3D"$(INF_VERSION)" Optional BUILD_NUM=3D$(BUILD_NUMBER) + } + +[Rule.Common.UEFI_DRIVER.BINARY] + FILE DRIVER =3D $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional |.depex + PE32 PE32 |.efi + UI STRING=3D"$(MODULE_NAME)" Optional + VERSION STRING=3D"$(INF_VERSION)" Optional BUILD_NUM=3D$(BUILD_NUMBE= R) + } + +[Rule.Common.UEFI_APPLICATION] + FILE APPLICATION =3D $(NAMED_GUID) { + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING=3D"$(MODULE_NAME)" Optional + VERSION STRING=3D"$(INF_VERSION)" Optional BUILD_NUM=3D$(BUILD_NUMBER) + } + +[Rule.Common.UEFI_APPLICATION.BINARY] + FILE APPLICATION =3D $(NAMED_GUID) { + PE32 PE32 |.efi + UI STRING=3D"$(MODULE_NAME)" Optional + VERSION STRING=3D"$(INF_VERSION)" Optional BUILD_NUM=3D$(BUILD_NUMBE= R) + } + +[Rule.Common.USER_DEFINED.ACPITABLE] + FILE FREEFORM =3D $(NAMED_GUID) { + RAW ACPI |.acpi + RAW ASL |.aml + UI STRING=3D"$(MODULE_NAME)" Optional + } diff --git a/Platform/Sophgo/SG2042_EVB_Board/SG2042.fdf.inc b/Platform/Sop= hgo/SG2042_EVB_Board/SG2042.fdf.inc new file mode 100644 index 000000000000..6eaae1d5d3da --- /dev/null +++ b/Platform/Sophgo/SG2042_EVB_Board/SG2042.fdf.inc @@ -0,0 +1,61 @@ +## @file +# Definitions of Flash definition file on Sophgo SG2042 EVB RISC-V platfo= rm +# +# Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Univers= iy, China.P.R. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## +[Defines] +DEFINE BLOCK_SIZE =3D 0x1000 + +DEFINE FW_BASE_ADDRESS =3D 0x02000000 +DEFINE FW_SIZE =3D 0x00800000 +DEFINE FW_BLOCKS =3D 0x800 + +# +# 0x000000-0x7DFFFF code +# 0x7E0000-0x800000 variables +# +DEFINE CODE_BASE_ADDRESS =3D $(FW_BASE_ADDRESS) +DEFINE CODE_SIZE =3D 0x00780000 +DEFINE CODE_BLOCKS =3D 0x780 +DEFINE VARS_BLOCKS =3D 0x20 + +# +# Other FV regions are in the second FW domain. +# The size of memory region must be power of 2. +# The base address must be aligned with the size. +# +# FW memory region +# +DEFINE FVMAIN_OFFSET =3D 0x00000000 +DEFINE FVMAIN_SIZE =3D 0x00780000 + +# +# EFI Variable memory region. +# The total size of EFI Variable FD must include +# all of sub regions of EFI Variable +# +DEFINE VARS_OFFSET =3D 0x00780000 +DEFINE VARS_SIZE =3D 0x00007000 +DEFINE VARS_FTW_WORKING_OFFSET =3D $(VARS_OFFSET) + $(VARS_SIZE) +DEFINE VARS_FTW_WORKING_SIZE =3D 0x00001000 +DEFINE VARS_FTW_SPARE_OFFSET =3D $(VARS_FTW_WORKING_OFFSET) + $(VA= RS_FTW_WORKING_SIZE) +DEFINE VARS_FTW_SPARE_SIZE =3D 0x00018000 + +DEFINE VARIABLE_FW_SIZE =3D $(VARS_FTW_SPARE_OFFSET) + $(VARS_FTW_SPARE_S= IZE) - $(VARS_OFFSET) + +SET gUefiRiscVPlatformPkgTokenSpaceGuid.PcdVariableFdBaseAddress = =3D $(FW_BASE_ADDRESS) + $(VARS_OFFSET) +SET gUefiRiscVPlatformPkgTokenSpaceGuid.PcdVariableFdSize = =3D $(VARS_SIZE) + $(VARS_FTW_WORKING_SIZE) + $(VARS_FTW_SPARE_SIZE) +SET gUefiRiscVPlatformPkgTokenSpaceGuid.PcdVariableFdBlockSize = =3D $(BLOCK_SIZE) +SET gUefiRiscVPlatformPkgTokenSpaceGuid.PcdVariableFirmwareRegionBaseAddre= ss =3D $(CODE_BASE_ADDRESS) + $(VARS_OFFSET) +SET gUefiRiscVPlatformPkgTokenSpaceGuid.PcdVariableFirmwareRegionSize = =3D $(VARIABLE_FW_SIZE) +SET gUefiRiscVPlatformPkgTokenSpaceGuid.PcdTemporaryRamBase = =3D $(CODE_BASE_ADDRESS) + $(FW_SIZE) + 0x1FF0000 +SET gUefiRiscVPlatformPkgTokenSpaceGuid.PcdTemporaryRamSize = =3D 0x10000 + +SET gSophgoSG2042PlatformPkgTokenSpaceGuid.PcdSG2042SDIOBase =3D = 0x704002B000 +SET gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase =3D = 0x7040000000 +SET gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate =3D = 115200 +SET gHisiTokenSpaceGuid.PcdSerialPortSendDelay =3D = 10000000 +SET gHisiTokenSpaceGuid.PcdUartClkInHz =3D = 500000000 diff --git a/Platform/Sophgo/SG2042_EVB_Board/VarStore.fdf.inc b/Platform/S= ophgo/SG2042_EVB_Board/VarStore.fdf.inc new file mode 100644 index 000000000000..fcc6c2c9584f --- /dev/null +++ b/Platform/Sophgo/SG2042_EVB_Board/VarStore.fdf.inc @@ -0,0 +1,77 @@ +## @file +# FDF include file with Layout Regions that define an empty variable stor= e. +# +# Copyright (C) 2014, Red Hat, Inc. +# Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +$(VARS_OFFSET)|$(VARS_SIZE) +gUefiRiscVPlatformPkgTokenSpaceGuid.PcdPlatformFlashNvStorageVariableBase|= gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize +# +# NV_VARIABLE_STORE +# +DATA =3D { + ## This is the EFI_FIRMWARE_VOLUME_HEADER + # ZeroVector [] + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + # FileSystemGuid: gEfiSystemNvDataFvGuid =3D + # { 0xFFF12B8D, 0x7696, 0x4C8B, + # { 0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50 }} + 0x8D, 0x2B, 0xF1, 0xFF, 0x96, 0x76, 0x8B, 0x4C, + 0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50, + # FvLength: 0x20000 + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + # Signature "_FVH" # Attributes + 0x5f, 0x46, 0x56, 0x48, 0xff, 0xfe, 0x04, 0x00, + # HeaderLength # CheckSum # ExtHeaderOffset #Reserved #Revision + 0x48, 0x00, 0x39, 0xF1, 0x00, 0x00, 0x00, 0x02, + # Blockmap[0]: 0x20 Blocks * 0x1000 Bytes / Block + 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + # Blockmap[1]: End + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ## This is the VARIABLE_STORE_HEADER +!if $(SECURE_BOOT_ENABLE) =3D=3D TRUE + # Signature: gEfiAuthenticatedVariableGuid =3D + # { 0xaaf32c78, 0x947b, 0x439a, + # { 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92 }} + 0x78, 0x2c, 0xf3, 0xaa, 0x7b, 0x94, 0x9a, 0x43, + 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92, +!else + # Signature: gEfiVariableGuid =3D + # { 0xddcf3616, 0x3275, 0x4164, + # { 0x98, 0xb6, 0xfe, 0x85, 0x70, 0x7f, 0xfe, 0x7d }} + 0x16, 0x36, 0xcf, 0xdd, 0x75, 0x32, 0x64, 0x41, + 0x98, 0xb6, 0xfe, 0x85, 0x70, 0x7f, 0xfe, 0x7d, +!endif + # Size: 0x7000 (gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariable= Size) - + # 0x48 (size of EFI_FIRMWARE_VOLUME_HEADER) =3D 0x6fb8 + # This can speed up the Variable Dispatch a bit. + 0xB8, 0x6F, 0x00, 0x00, + # FORMATTED: 0x5A #HEALTHY: 0xFE #Reserved: UINT16 #Reserved1: UINT32 + 0x5A, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +} + +$(VARS_FTW_WORKING_OFFSET)|$(VARS_FTW_WORKING_SIZE) +gUefiRiscVPlatformPkgTokenSpaceGuid.PcdPlatformFlashNvStorageFtwWorkingBas= e|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize +# +#NV_FTW_WROK +# +DATA =3D { + # EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER->Signature =3D gEdkiiWorkingBl= ockSignatureGuid =3D + # { 0x9e58292b, 0x7c68, 0x497d, { 0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0= x1b, 0x95 }} + 0x2b, 0x29, 0x58, 0x9e, 0x68, 0x7c, 0x7d, 0x49, + 0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95, + # Crc:UINT32 #WorkingBlockValid:1, WorkingBlockInvalid:1, Res= erved + 0x2c, 0xaf, 0x2c, 0x64, 0xFE, 0xFF, 0xFF, 0xFF, + # WriteQueueSize: UINT64 + 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +} + +$(VARS_FTW_SPARE_OFFSET)|$(VARS_FTW_SPARE_SIZE) +gUefiRiscVPlatformPkgTokenSpaceGuid.PcdPlatformFlashNvStorageFtwSpareBase|= gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize +# +#NV_FTW_SPARE --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109604): https://edk2.groups.io/g/devel/message/109604 Mute This Topic: https://groups.io/mt/101944469/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri Sep 20 14:54:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+109605+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109605+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=163.com ARC-Seal: i=1; a=rsa-sha256; t=1697216175; cv=none; d=zohomail.com; s=zohoarc; b=OV2j4JEWX0TQoBcSgP9lAxcTZX4z832eseL8QnnM6PwoBXzF71ZyfDSo9kTSOBKKEMpYBzeHR69c0xHDyfrDZNhngeK+ijERp6VCjS9ADfjim6lEpF4xZnfoYvd9AXKL5QzybTWJpFu3kfI1QtSJB5vRowp4TguV4lKRTcEkJk0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697216175; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=xBHDfA7QUZUnG2TMXAPPRjkWI48A1jimaInpqspY3Wk=; b=QenHIi5CNotxGrnVyw1a3gwOMx6CkG7/3BULF7LDhXATHeBrQ1GGlcxgq49j3ogopd4T9Yed2bI72KUR8Dyjc65rO6YCOHhElAT1tRTDrEyZTHWlOKJTC7L9PNz1A3t0rWmFu8zwO+CD0MmTL0Jv2PK/0aleBj3HXPLWvKDrMPM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109605+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1697216175855124.69642300679789; Fri, 13 Oct 2023 09:56:15 -0700 (PDT) Return-Path: DKIM-Signature: a=rsa-sha256; bh=Ev4p/QqCR+xF1REoUqqP+O9HXmTcki5LgUyyaaDFw98=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1697216175; v=1; b=eeemwwM81p8C88bHOeLbnkeh00eXHI4RElQWuMa4q+vmpd/xWVnxCJJ0w5uhlP7twat0pQ30 ZDtxi+K6+T2Ff6EdnOzX2r0nevqv+fDy5ghxrCDTKces4KiUkWqPMvgtrxGbxkaiJbAnCQOZmci TOlgBu3kGgFW8EqlJdK9iZws= X-Received: by 127.0.0.2 with SMTP id gZCNYY1788612xZNOGFiuqQw; Fri, 13 Oct 2023 09:56:15 -0700 X-Received: from m12.mail.163.com (m12.mail.163.com [220.181.12.199]) by mx.groups.io with SMTP id smtpd.web10.30872.1697166203379450727 for ; Thu, 12 Oct 2023 20:03:24 -0700 X-Received: from rv-uefi.. (unknown [211.87.236.31]) by zwqz-smtp-mta-g4-2 (Coremail) with SMTP id _____wD338p3syhlrR6sAQ--.42280S2; Fri, 13 Oct 2023 11:03:19 +0800 (CST) From: caiyuqing_hz@163.com To: devel@edk2.groups.io Cc: USER0FISH , sunilvl@ventanamicro.com, Leif Lindholm , Michael D Kinney , Inochi Amaoto Subject: [edk2-devel] [PATCH edk2-platforms v5 6/7] Sophgo/SG2042Pkg: Add SG2042Pkg. Date: Fri, 13 Oct 2023 11:03:19 +0800 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-CM-TRANSID: _____wD338p3syhlrR6sAQ--.42280S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxAryUKw1DWryfAw1UZrWfAFb_yoWrXryrpr 4rZFnxKr4xG34xtr43Kayj9r15JF1FkF1DA3srCw15Z393Ja1fZ3WUKFyxJFWxJr4xCw1j gr4aqFWFkas0qaUanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jYXdbUUUUU= X-Originating-IP: [211.87.236.31] X-CM-SenderInfo: 5fdl535tlqwslk26il2tof0z/xtbBohkIxVaEJ0drGQAAs2 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,caiyuqing_hz@163.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: MNLjCvdCZHUEgcHM85PkYgymx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1697216178017100013 Content-Type: text/plain; charset="utf-8" From: caiyuqing379 Add SG2042Pkg for Sophgo SG2042 platform. Provides PCD tokens. Signed-off-by: caiyuqing379 Co-authored-by: USER0FISH Cc: dahogn Cc: meng-cz Cc: yli147 Cc: ChaiEvan Cc: Sunil V L Cc: Leif Lindholm Cc: Michael D Kinney Acked-by: Sunil V L --- Silicon/Sophgo/SG2042Pkg/SG2042Pkg.dec | 34 +++++++++++++++++++++ Silicon/Sophgo/SG2042Pkg/SG2042Pkg.uni | 13 ++++++++ Silicon/Sophgo/SG2042Pkg/SG2042PkgExtra.uni | 12 ++++++++ 3 files changed, 59 insertions(+) create mode 100644 Silicon/Sophgo/SG2042Pkg/SG2042Pkg.dec create mode 100644 Silicon/Sophgo/SG2042Pkg/SG2042Pkg.uni create mode 100644 Silicon/Sophgo/SG2042Pkg/SG2042PkgExtra.uni diff --git a/Silicon/Sophgo/SG2042Pkg/SG2042Pkg.dec b/Silicon/Sophgo/SG2042= Pkg/SG2042Pkg.dec new file mode 100644 index 000000000000..ef92ef5dd3b6 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/SG2042Pkg.dec @@ -0,0 +1,34 @@ +## @file SG2042Pkg.dec +# This Package provides modules and libraries.for Sophgo SG2042 platform. +# +# Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Universi= y, China.P.R. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + DEC_SPECIFICATION =3D 0x0001001b + PACKAGE_NAME =3D SG2042Pkg + PACKAGE_UNI_FILE =3D SG2042Pkg.uni + PACKAGE_GUID =3D A10E7DF0-B8AB-4DD0-B383-46358139D313 + PACKAGE_VERSION =3D 1.0 + +[Includes] + Include + +[Protocols] + gSophgoMmcHostProtocolGuid =3D { 0x3E591C00, 0x9E4A, 0x11DF, {0x92, 0x44= , 0x00, 0x02, 0xA5, 0xF5, 0xF5, 0x1B } } + +[Guids] + gSophgoSG2042PlatformPkgTokenSpaceGuid =3D {0x779E9346, 0x3C24, 0x478C,= { 0xB1, 0x60, 0xB6, 0x09, 0xFC, 0xED, 0xA0, 0x72 }} + +[PcdsFixedAtBuild] + gSophgoSG2042PlatformPkgTokenSpaceGuid.PcdSG2042SDIOBase|0x0|UINT64|0x00= 001001 + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x0|UINT64|0x000010= 04 + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|0x0|UINT64|0x00001005 + gHisiTokenSpaceGuid.PcdSerialPortSendDelay|0x0|UINT32|0x00001006 + gHisiTokenSpaceGuid.PcdUartClkInHz|0x0|UINT32|0x00001007 + +[UserExtensions.TianoCore."ExtraFiles"] + SG2042PkgExtra.uni diff --git a/Silicon/Sophgo/SG2042Pkg/SG2042Pkg.uni b/Silicon/Sophgo/SG2042= Pkg/SG2042Pkg.uni new file mode 100644 index 000000000000..c7a606cbb2f3 --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/SG2042Pkg.uni @@ -0,0 +1,13 @@ +// /** @file +// Sophgo SG2042 Package Localized Strings and Content. +// +// Copyright (c) 2023, Academy of Intelligent Innovation, Shandong Univers= iy, China.P.R. All rights reserved.
+// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + + +#string STR_PACKAGE_ABSTRACT #language en-US "Provides Sophgo R= ISC-V SG2042 platform modules and libraries" + +#string STR_PACKAGE_DESCRIPTION #language en-US "This Package Soph= go RISC-V SG2042 platform modules and libraries." diff --git a/Silicon/Sophgo/SG2042Pkg/SG2042PkgExtra.uni b/Silicon/Sophgo/S= G2042Pkg/SG2042PkgExtra.uni new file mode 100644 index 000000000000..b14545b214eb --- /dev/null +++ b/Silicon/Sophgo/SG2042Pkg/SG2042PkgExtra.uni @@ -0,0 +1,12 @@ +// /** @file +// SiFive U5 Series Package Localized Strings and Content. +// +// Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All righ= ts reserved.
+// +// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + +#string STR_PROPERTIES_PACKAGE_NAME +#language en-US +"SG2042 platform package" --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109605): https://edk2.groups.io/g/devel/message/109605 Mute This Topic: https://groups.io/mt/101944470/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri Sep 20 14:54:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+109606+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109606+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=163.com ARC-Seal: i=1; a=rsa-sha256; t=1697216176; cv=none; d=zohomail.com; s=zohoarc; b=YNZxXKUOPP/p8gEbrGFEa11BTnnGe3ssrdxRgPwShlqznXYAjpBm+8ltKlr9c4yloVHCJHWtBuuEVnNRLUk3FqJZ/flzNqyL6RO+fz5ADmZENyZ39s3He1l7wHLJPOOeaEz/r/8N/XovNQ1wFMlbp4m0DJQTqx5nknFLeGuuSqU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697216176; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Sender:Subject:Subject:To:To:Message-Id; bh=n36SLU2CYLZcep2zX5zVdwTW/vF2zbuzgfucjAhlALw=; b=NvQTeY9dVEt2Pb0+KPhItSTmTsMQ/r+YgYXw3oLQJm1Tx4fFfBF+YkMu4Hm13ehhL2LWhzEH950RK/btwP1SscGDN4NKk5YJeV7J2Wj+ajfekbrtTaoakCDJueA+EvClyXThSZqKV1hNetasaEKjmMwbbKQ6VJVjm+gYsqHBh9k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+109606+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1697216176469731.743868651762; Fri, 13 Oct 2023 09:56:16 -0700 (PDT) Return-Path: DKIM-Signature: a=rsa-sha256; bh=h8ZvCS9rRNB6v+4r+vt/jTkHMmYl57JEzRXgYvfjBuk=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type:Content-Transfer-Encoding; s=20140610; t=1697216175; v=1; b=NiUyQEmjpsBVaxZDHDLhsyJ0oT1XU890a1S/xRO+0N2oyIQgOMH0wQMc3C4qT+C9yvfDYpZj vPqd8EFX8D1ZLFmBQh1aypl2kh466dCAEc7VzqQCWHqR9fvO4Pa4iqxJdkavu6zmZ11Lzws+fnI bTFB0C8TP5E3mXUYEa6ugkm0= X-Received: by 127.0.0.2 with SMTP id b67EYY1788612xUR4H57ZP1a; Fri, 13 Oct 2023 09:56:15 -0700 X-Received: from m12.mail.163.com (m12.mail.163.com [220.181.12.196]) by mx.groups.io with SMTP id smtpd.web11.30860.1697166232305690198 for ; Thu, 12 Oct 2023 20:04:03 -0700 X-Received: from rv-uefi.. (unknown [211.87.236.31]) by zwqz-smtp-mta-g5-2 (Coremail) with SMTP id _____wD3H62OsyhlrICoAQ--.16908S2; Fri, 13 Oct 2023 11:03:43 +0800 (CST) From: caiyuqing_hz@163.com To: devel@edk2.groups.io Cc: USER0FISH , sunilvl@ventanamicro.com, Leif Lindholm , Michael D Kinney , Inochi Amaoto Subject: [edk2-devel] [PATCH edk2-platforms v5 7/7] Sophgo/SG2042Pkg: Add platform readme and document. Date: Fri, 13 Oct 2023 11:03:42 +0800 Message-Id: <022a1dd866233cd1d2ae518f91720487f7569b34.1697120122.git.caiyuqing_hz@outlook.com> In-Reply-To: References: MIME-Version: 1.0 X-CM-TRANSID: _____wD3H62OsyhlrICoAQ--.16908S2 X-Coremail-Antispam: 1Uf129KBjv_XoW8Jr4fWw18JFWfZry3Wr45KFyUp5X_Aw43Xw 47pa1UKFs0g34kKa9Iq395GF40kFZ7WF1fua1a9FZ5Z3yfZ3srJFs3tFs7tr45CFZ7Jr1k Jas8JrsFqrW5K3WYy3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nx nvy29KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jsHUDUUUUU= X-Originating-IP: [211.87.236.31] X-CM-SenderInfo: 5fdl535tlqwslk26il2tof0z/xS2BNRQIxVc65fiMQgAAsS Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,caiyuqing_hz@163.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: SJpV9cXbN4ThVProbvJtE3V6x1787277AA= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1697216181001100019 From: caiyuqing379 Add a readme file which provides information regarding how to build and test EDK2 on Sophgo SG2042 platform. And add a about file which provides the details of Sophgo SG2042 EVB Board and SG2042 EDK2 design and the boot process. Signed-off-by: caiyuqing379 Co-authored-by: USER0FISH Cc: dahogn Cc: meng-cz Cc: yli147 Cc: ChaiEvan Cc: Sunil V L Cc: Leif Lindholm Cc: Michael D Kinney Acked-by: Sunil V L --- Platform/Sophgo/About_Sophgo_platform.md | 55 +++++++++ .../Documents/Media/EDK2_SDU_Programme.png | Bin 0 -> 59830 bytes .../Sophgo/Documents/Media/SG2042_CPU.png | Bin 0 -> 806062 bytes .../Documents/Media/Sophgo_SG2042_EVB.png | Bin 0 -> 1445528 bytes Platform/Sophgo/Maintainers.md | 105 ++++++++++++++++++ Platform/Sophgo/SG2042_EVB_Board/Readme.md | 103 +++++++++++++++++ 6 files changed, 263 insertions(+) create mode 100644 Platform/Sophgo/About_Sophgo_platform.md create mode 100644 Platform/Sophgo/Documents/Media/EDK2_SDU_Programme.png create mode 100644 Platform/Sophgo/Documents/Media/SG2042_CPU.png create mode 100644 Platform/Sophgo/Documents/Media/Sophgo_SG2042_EVB.png create mode 100644 Platform/Sophgo/Maintainers.md create mode 100644 Platform/Sophgo/SG2042_EVB_Board/Readme.md diff --git a/Platform/Sophgo/About_Sophgo_platform.md b/Platform/Sophgo/Abo= ut_Sophgo_platform.md new file mode 100644 index 000000000000..11b96238788b --- /dev/null +++ b/Platform/Sophgo/About_Sophgo_platform.md @@ -0,0 +1,55 @@ +# Sophogo SG2042 EDK2 RISC-V Platform Project +## Sophgo SG2042 Platform +The development work for this project was carried out around the Sophgo SG= 2042 EVB development board. +The deployment of EDK2 was completed on the EVB test version. Below is the= external appearance display of the EVB version. +![image](Documents/Media/Sophgo_SG2042_EVB.png) + +SG2042 is a server processor based on the RISC-V architecture.It has 64 RI= SC-V cores and supports up to 2-way SG2042 interconnectivity. +Each SG2042 CPU can be configured with a maximum of 4 DIMM memory slots (R= DIMM & UDIMM), supporting a maximum memory capacity of 256GB. It also suppo= rts a maximum of 32 PCIe 4.0 channels. +![image](Documents/Media/SG2042_CPU.png) + +## SG2042 EDK2 RISC-V Design and the Boot Processes +The SG2042 RISC-V EDK2 project is developed based on the original Sophgo S= G2042 project.SG2042 RISC-V edk2 is designed and optimized based on the edk= 2 startup phase. The startup process can be roughly divided into the follow= ing stages:**ZSBL+FSBL+OpenSBI+EDK2+GRUB2+OS**.The design diagram and start= -up process are shown in the figure below. + +**SG2042 RISC-V EDK2 startup flowchart** +![image](Documents/Media/EDK2_SDU_Programme.png) + +**ZSBL Phase** + +ZSBL is the first stage of chip initialization, Code provided by Sophgo.th= e main work is to initialize DDR. + +**FSBL Phase** + +**Note:** The FSBL here corresponds to the ZSBL stage code provided by Sop= hgo. +The ZSBL stage works for the following: +1. Initialize the serial port of the ZSBL stage for DEBUG. +2. Establish a memory mapping table for initializing and configuring the m= emory management of the operating system or firmware. +3. Initialization of some CPU functions. + +**OpenSBI Phase** + +OpenSBI provides the conditions for platform initialization of SG2042, whi= ch runs as an independent firmware and an environment of an initialization = link before edk2, which exists in the form of FW_PAYLOAD, which initializes= the system in M-mode and initializes some functions of SG2042 , and put th= e subsequent edk2 operating environment in S-mode. + +**PrePI Phase** + +The PrePI phase builds some HOBs on Memory, CPU, FV, Stack and processor s= mbios information, eventually loading the DXE Core and transferring control. + +**DXE Phase** + +edk2 DXE OpenSBI protocol provides the unified interface for all DXE drive= rs to invoke SBI services=EF=BC=8Cthe DXE stage mainly adds the SG2042 SD c= ard reading driver to read the contents of the SD card. + +**BDS Phase** + +The BDS stage runs under S-mode,The implementation of the RISC-V edk2 port= in the BDS stage is executed with the PcdDxeCorePrivilegeMode PCD configur= ation permission, because OpenSBI converts the mode to S-mode, when BDS han= ds over the power to the operating system, it must be S-mode, avoiding anot= her mode switch. + +**TSL Phase** + +The work at this stage is mainly to use edk2 Shell to boot and start the G= RUB2 program code in the SD card, and use GRUB to load different OS operati= ng systems in the partition. + +**RT Phase** + +No work done. + +**AL Phase** + +No work done. diff --git a/Platform/Sophgo/Documents/Media/EDK2_SDU_Programme.png b/Platf= orm/Sophgo/Documents/Media/EDK2_SDU_Programme.png new file mode 100644 index 0000000000000000000000000000000000000000..c5fbfaa238976f3fb74d3608f6f= 053665191e5f4 GIT binary patch literal 59830 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

RL%Xdj;5i(S4Pv3ni4v6b_U@dKB^n^eUORbC*V* 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 V%ysm73WB=3D|a<^r3Z`^zO{{evwdszSg literal 0 HcmV?d00001 diff --git a/Platform/Sophgo/Documents/Media/SG2042_CPU.png b/Platform/Soph= go/Documents/Media/SG2042_CPU.png new file mode 100644 index 0000000000000000000000000000000000000000..684c39a8c6b61ea364d99e5ea32= cfb7a20829d25 GIT binary patch literal 806062 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�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 =3D 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%0A+RmHFR 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

+(MkIoeUC{Puyba|OJ8>K4&BMPaMmVo_! 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¥V%4AzrI7d8@sJZ~7UZ^o8 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%0Dnuak30Dk9q%W@UDHkz`ik>Ev>XRI(%OHc0MFWbC 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

E<6t3e3j;1ztT@+^haa-p;(U*;QYhIy?X8 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