From nobody Tue Feb 10 09:57:41 2026 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+99288+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+99288+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1675064265; cv=none; d=zohomail.com; s=zohoarc; b=dYOYGW8ahccocc+BN4OlaprTIsINGPKwk0cbVk9sTw2yg5iAevsGCxZL5w0/tdkEu3N7Tq2Z4hgG8UZMqx7b80kQafyae9SDCqLO/zHbzTdjPcZAumWQSgqzAhtDusIj9uaDUV9KkteeIxDf0LFRI9VCvdmwrgv//EsjJjbjkP0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1675064265; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=4mc41wsYFIgRW/i8eoU06j59OjU8Bi0xh580sM1JxEE=; b=aoEZZzVdX5RndjQzfaN1wiU0whRMISqWqpvv8piIB/oes+jl8FSyhheGJjmCWzDU/fFR/yNCMDnFRh3fhjHsSluqDnfB96nP7A19+agr0UlUaJkKQ+HWHrULOOEHuK6CKi++XQY1bGZpnBMKsCFpRfzL07SrkYjf9KD639H0Op0= 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+99288+1787277+3901457@groups.io Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1675064265075972.4896400042636; Sun, 29 Jan 2023 23:37:45 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id vLy5YY1788612x7WnoTqaDTy; Sun, 29 Jan 2023 23:37:44 -0800 X-Received: from azure-sdnproxy.icoremail.net (azure-sdnproxy.icoremail.net [20.228.234.168]) by mx.groups.io with SMTP id smtpd.web10.35960.1675064261634224389 for ; Sun, 29 Jan 2023 23:37:42 -0800 X-Received: from prodtpl.icoremail.net (unknown [10.12.1.20]) by hzbj-icmmx-6 (Coremail) with SMTP id AQAAfwDnie0QdNdjK72SBA--.61759S2; Mon, 30 Jan 2023 15:38:56 +0800 (CST) X-Received: from localhost.localdomain (unknown [117.136.89.78]) by mail (Coremail) with SMTP id AQAAfwBnZB26c9djDDUAAA--.158S6; Mon, 30 Jan 2023 15:37:38 +0800 (CST) From: "Ling Jia" To: devel@edk2.groups.io Cc: Leif Lindholm , Liming Gao , Michael D Kinney , Yiqi Shu , Peng Xie , Ling Jia Subject: [edk2-devel] [PATCH v8 4/4] Silicon/Phytium: Added runtime support to spi master Date: Mon, 30 Jan 2023 15:34:20 +0800 Message-Id: <20230130073420.135519-5-jialing@phytium.com.cn> In-Reply-To: <20230130073420.135519-1-jialing@phytium.com.cn> References: <20230130073420.135519-1-jialing@phytium.com.cn> MIME-Version: 1.0 X-CM-TRANSID: AQAAfwBnZB26c9djDDUAAA--.158S6 X-CM-SenderInfo: xmldzxdqj61x51wl3zoofrzhdfq/ X-Coremail-Antispam: 1Uk129KBjvJXoWxKw15Gw4rGw4kGF1DuFy8Zrb_yoWxtF45pa 18trs0qr4UJr43Z3yrZw1kur95A39xKFyDtrZxWa4ruF4agry0ganxZr1rJF97tr9Fy348 WrnYqw47urZ0yw7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj DUYxn0WfASr-VFAU7a7-sFnT9fnUUIcSsGvfJ3UbIYCTnIWIevJa73UjIFyTuYvj4RJUUU UUUUU Precedence: Bulk List-Unsubscribe: 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,jialing@phytium.com.cn X-Gm-Message-State: CdrWb4AHG8X6qpqtYplWYKNRx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1675064264; bh=Z0XTc84I/isSQh8IQCzDtYfEItZpnRg+nsvfWq2643Q=; h=Cc:Date:From:Reply-To:Subject:To; b=JIQwcJU/wVA1utEQIjpBOf86uhdvOTFC0L1VdelnMk9cPTxMOJ38oeIfPiOiMNsbnNu e96cYN+50fFLVllHCHv185cDhYZaw5B3cQb9MxHYLPWV70hDObW9flxbnIZwMZhJSJbp4 ZrhS8VcoqOfePqGfm2aRjHBU9H4afwTMa5s= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1675064266445100006 Content-Type: text/plain; charset="utf-8" From: Ling Jia Solved the problem of virtual address translation in runtime access under OS. Signed-off-by: Ling Jia --- Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.inf | 11 ++- Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.h | 4 +- Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.c | 88 +++++++++++++++= ++--- 3 files changed, 86 insertions(+), 17 deletions(-) diff --git a/Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.inf b/Silico= n/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.inf index 21d75f268da4..d7ee1999c4ed 100644 --- a/Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.inf +++ b/Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.inf @@ -1,11 +1,11 @@ -#/** @file +## @file # Phytium Spi Master Drivers. # -# Copyright (C) 2020, Phytium Technology Co, Ltd. All rights reserved.
+# Copyright (C) 2020-2023, Phytium Technology Co., Ltd. All rights reserv= ed.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # -#**/ +# =20 [Defines] INF_VERSION =3D 0x0001001b @@ -27,18 +27,23 @@ [Packages] [LibraryClasses] BaseLib DebugLib + DxeServicesTableLib IoLib UefiLib UefiBootServicesTableLib UefiDriverEntryPoint + UefiRuntimeLib + UefiRuntimeServicesTableLib =20 [Guids] + gEfiEventVirtualAddressChangeGuid =20 [Protocols] gSpiMasterProtocolGuid =20 [FixedPcd] gPhytiumPlatformTokenSpaceGuid.PcdSpiControllerBase + gPhytiumPlatformTokenSpaceGuid.PcdSpiControllerSize =20 [Depex] TRUE diff --git a/Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.h b/Silicon/= Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.h index 8795ea238d83..80d1db79ebbc 100644 --- a/Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.h +++ b/Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.h @@ -1,7 +1,7 @@ /** @file Phytium Spi Drivers Header =20 - Copyright (C) 2020, Phytium Technology Co Ltd. All rights reserved.
+ Copyright (C) 2020-2023, Phytium Technology Co., Ltd. All rights reserve= d.
=20 SPDX-License-Identifier: BSD-2-Clause-Patent =20 @@ -10,6 +10,8 @@ #ifndef SPI_DXE_H_ #define SPI_DXE_H_ =20 +#include +#include #include =20 #define SPI_MASTER_SIGNATURE SIGNATURE_32 ('M', 'S', 'P', 'I') diff --git a/Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.c b/Silicon/= Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.c index 7602a3e0cd63..6915c95f40b0 100644 --- a/Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.c +++ b/Silicon/Phytium/FT2000-4Pkg/Drivers/SpiDxe/SpiDxe.c @@ -1,7 +1,7 @@ /** @file Phytium Spi Master Drivers. =20 - Copyright (C) 2020, Phytium Technology Co Ltd. All rights reserved.
+ Copyright (C) 2020-2023, Phytium Technology Co., Ltd. All rights reserve= d.
=20 SPDX-License-Identifier: BSD-2-Clause-Patent =20 @@ -13,8 +13,9 @@ #include #include "SpiDxe.h" =20 -PHYT_SPI_MASTER *pSpiMasterInstance; -static UINTN mSpiControlBase; +STATIC EFI_EVENT mSpiMasterVirtualAddrChangeEvent; +STATIC UINTN mSpiMasterControlBase; +PHYT_SPI_MASTER *mSpiMasterInstance; =20 /** This function inited a spi driver. @@ -66,7 +67,7 @@ SpiMasterSetConfig ( Value =3D Config; } =20 - SpiAddr =3D mSpiControlBase + RegAddr; + SpiAddr =3D mSpiMasterControlBase + RegAddr; MmioWrite32 (SpiAddr, Value); =20 return EFI_SUCCESS; @@ -78,7 +79,7 @@ SpiMasterSetConfig ( =20 @param[in] CmdId The id of command. =20 - @param[out] Config The pointer of the config. + @param[out] Config The pointer to the config. =20 @param[in] RegAddr The address of spi registers. =20 @@ -99,7 +100,7 @@ SpiMasterGetConfig ( SpiAddr =3D 0; Value =3D 0; =20 - SpiAddr =3D mSpiControlBase + RegAddr; + SpiAddr =3D mSpiMasterControlBase + RegAddr; Value =3D MmioRead32 (SpiAddr); =20 if (CmdId !=3D 0) { @@ -157,6 +158,34 @@ SpiMasterInitProtocol ( return EFI_SUCCESS; } =20 +/** + Fixup internal data so that EFI can be call in virtual mode. + Call the passed in Child Notify event and convert any pointers + in lib to virtual mode. + + @param[in] Event The Event that is being processed. + + @param[in] Context Event Context. + + @retval None. + +**/ +STATIC +VOID +EFIAPI +SpiMasterVirtualNotifyEvent ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + EfiConvertPointer (0x0, (VOID **)&(mSpiMasterControlBase)); + EfiConvertPointer (0x0, (VOID **)&(mSpiMasterInstance->SpiMasterProtocol= .SpiGetConfig)); + EfiConvertPointer (0x0, (VOID **)&(mSpiMasterInstance->SpiMasterProtocol= .SpiSetConfig)); + EfiConvertPointer (0x0, (VOID **)&(mSpiMasterInstance->SpiMasterProtocol= )); + EfiConvertPointer (0x0, (VOID **)&(mSpiMasterInstance)); + + return; +} =20 /** This function is the entrypoint of the spi driver. @@ -178,25 +207,58 @@ SpiMasterDrvEntryPoint ( ) { EFI_STATUS Status; + UINTN SpiMasterControlSize; =20 - pSpiMasterInstance =3D AllocateRuntimeZeroPool (sizeof (PHYT_SPI_MASTER)= ); - if (pSpiMasterInstance =3D=3D NULL) { + mSpiMasterControlBase =3D FixedPcdGet64 (PcdSpiControllerBase); + SpiMasterControlSize =3D FixedPcdGet64 (PcdSpiControllerSize); + + mSpiMasterInstance =3D AllocateRuntimeZeroPool (sizeof (PHYT_SPI_MASTER)= ); + if (mSpiMasterInstance =3D=3D NULL) { return EFI_OUT_OF_RESOURCES; } =20 - mSpiControlBase =3D FixedPcdGet64 (PcdSpiControllerBase); + mSpiMasterControlBase =3D FixedPcdGet64 (PcdSpiControllerBase); =20 - SpiMasterInitProtocol (&pSpiMasterInstance->SpiMasterProtocol); + SpiMasterInitProtocol (&mSpiMasterInstance->SpiMasterProtocol); =20 - pSpiMasterInstance->Signature =3D SPI_MASTER_SIGNATURE; + mSpiMasterInstance->Signature =3D SPI_MASTER_SIGNATURE; =20 Status =3D gBS->InstallMultipleProtocolInterfaces ( - &(pSpiMasterInstance->Handle), + &(mSpiMasterInstance->Handle), &gSpiMasterProtocolGuid, - &(pSpiMasterInstance->SpiMasterProtocol), + &(mSpiMasterInstance->SpiMasterProtocol), NULL ); ASSERT_EFI_ERROR (Status); =20 + // + // Declare the SPI Controller Space as EFI_MEMORY_RUNTIME + // + Status =3D gDS->AddMemorySpace ( + EfiGcdMemoryTypeMemoryMappedIo, + (mSpiMasterControlBase >> EFI_PAGE_SHIFT) << EFI_PAGE_SH= IFT, EFI_PAGES_TO_SIZE(EFI_SIZE_TO_PAGES(SpiMasterControlSize)), + EFI_MEMORY_UC | EFI_MEMORY_RUNTIME + ); + ASSERT_EFI_ERROR (Status); + + Status =3D gDS->SetMemorySpaceAttributes ( + (mSpiMasterControlBase >> EFI_PAGE_SHIFT) << EFI_PAGE_SH= IFT, EFI_PAGES_TO_SIZE(EFI_SIZE_TO_PAGES(SpiMasterControlSize)), + EFI_MEMORY_UC | EFI_MEMORY_RUNTIME + ); + ASSERT_EFI_ERROR (Status); + + // + // Register for the virtual address change event + // + Status =3D gBS->CreateEventEx ( + EVT_NOTIFY_SIGNAL, + TPL_NOTIFY, + SpiMasterVirtualNotifyEvent, + NULL, + &gEfiEventVirtualAddressChangeGuid, + &mSpiMasterVirtualAddrChangeEvent + ); + ASSERT_EFI_ERROR (Status); + return EFI_SUCCESS; } --=20 2.25.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 (#99288): https://edk2.groups.io/g/devel/message/99288 Mute This Topic: https://groups.io/mt/96623621/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-