From nobody Wed Dec 25 04:36:09 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1511857180716243.3677814711898; Tue, 28 Nov 2017 00:19:40 -0800 (PST) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 858D4220D4C0C; Tue, 28 Nov 2017 00:15:15 -0800 (PST) Received: from mail-lf0-x242.google.com (mail-lf0-x242.google.com [IPv6:2a00:1450:4010:c07::242]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 64925220F3C54 for ; Tue, 28 Nov 2017 00:15:12 -0800 (PST) Received: by mail-lf0-x242.google.com with SMTP id d10so24870625lfj.7 for ; Tue, 28 Nov 2017 00:19:35 -0800 (PST) Received: from gilgamesh.semihalf.com (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id j85sm79732lfh.53.2017.11.28.00.19.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 28 Nov 2017 00:19:32 -0800 (PST) X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: None (no SPF record) identity=mailfrom; client-ip=2a00:1450:4010:c07::242; helo=mail-lf0-x242.google.com; envelope-from=mw@semihalf.com; receiver=edk2-devel@lists.01.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=AW+nupAykgHbAZanQUqzeHrY9yFyQydOMHeUqmi2P6c=; b=uI2DhCgV8S0IkTPVvq3MfYybool+waK/iXUxGAldj9gJZfuJ7Q1wcAT8iHnpWmV/N8 xiq+pmPRc88mqFLNxKodGY3t+2uauZBXxFHFavF6yxnxojhRYg71KfZh3PTHt5l5QYfz U3yPrh/HqdY5V9tQfXGV5RPXbYaNkCVEefVsJIKvoHDWHvLOMPHj1rxRBpZ3b2TJd0p3 rM+Me7iLDYYzuFAgmLOqV7pZAGu2N1Emk5D2ySoml9EjKbul2+MxWwSR0Vh8/81aMbak u6SMkdrTa+bLZHUzmpJpEF17xIN7Hk/c8buLysGMvVuPL+fv3HBlQrEjak6A/CLAqnt9 BJZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=AW+nupAykgHbAZanQUqzeHrY9yFyQydOMHeUqmi2P6c=; b=VjdQQ84PEVs652VBnjgThWy/y4v91hV7MZ1B4iloxBJKScaQNH4zAdipH+stcl3vJQ hvpQCJ+p6MAAKrsT0yJxxU6q826c32eO4lPXKEjPFdbqPyKceJHAzf3sLKkEDlA3PHfy mRLflFyc20o2U9bGpb0WLaK/0CdAaq2wL34eei6/eHpdEEfHlo7kiLxDX9uOGzO6dUs1 3xm9Nm46x6djsBiWMOxxmobP5MP3QnsYaOdSjpZoc0MrTrNDIKoEnAO0baj15uOW8pa3 1vq0PhPw43Pbu44L0qhh2B+0iJj84CLbUdgupaFavwj8ct7THNwAJaoj544tttlIcYHV Ms7Q== X-Gm-Message-State: AJaThX4rC3oPaHbRYvEDVOKTq9yFNQKSgSiBSnVLD4b95KnU1B3bZ9g9 CrdbVjJfbjY/U9bWC+mpkuqzhvsUWiE= X-Google-Smtp-Source: AGs4zMZBi0HkqUNO+8YJUCbdlalYCnfzQNdQet4lxtilA8h3Qs1dbgXeZl/RA1t9sRp8VByzhwaRZA== X-Received: by 10.25.232.17 with SMTP id f17mr13773140lfh.54.1511857173010; Tue, 28 Nov 2017 00:19:33 -0800 (PST) From: Marcin Wojtas To: edk2-devel@lists.01.org Date: Tue, 28 Nov 2017 09:19:12 +0100 Message-Id: <1511857153-9266-4-git-send-email-mw@semihalf.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1511857153-9266-1-git-send-email-mw@semihalf.com> References: <1511857153-9266-1-git-send-email-mw@semihalf.com> Subject: [edk2] [platforms: PATCH v3 3/4] Marvell/Drivers: MvSpiDxe: Enable using driver in RT X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jinghua@marvell.com, ard.biesheuvel@linaro.org, leif.lindholm@linaro.org, nadavh@marvell.com, neta@marvell.com, kostap@marvell.com MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This patch applies necessary modifications, which allow to use MvSpiDxe driver in variable support as a runtime service. The driver's type is modified to DXE_RUNTIME_DRIVER, as well as a new callback is introduced as a part of the SpiMasterProtocol. It configures the memory space for mmio access to the host controller registers. Apply locking in the driver only during boot services. Once at runtime, resource protection is handled by the operating system. Moreover ensure proper execution order before MvSpiFlashDxe (and hence MvFvbDxe) by setting according Depex dependency. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Marcin Wojtas Reviewed-by: Leif Lindholm --- Platform/Marvell/Drivers/Spi/MvSpiDxe.c | 50 ++++++++++++++++++-- Platform/Marvell/Drivers/Spi/MvSpiDxe.h | 2 + Platform/Marvell/Drivers/Spi/MvSpiDxe.inf | 9 +++- Platform/Marvell/Include/Protocol/Spi.h | 7 +++ Platform/Marvell/Marvell.dec | 1 + 5 files changed, 63 insertions(+), 6 deletions(-) diff --git a/Platform/Marvell/Drivers/Spi/MvSpiDxe.c b/Platform/Marvell/Dri= vers/Spi/MvSpiDxe.c index c60a520..bab6cf4 100755 --- a/Platform/Marvell/Drivers/Spi/MvSpiDxe.c +++ b/Platform/Marvell/Drivers/Spi/MvSpiDxe.c @@ -211,7 +211,9 @@ MvSpiTransfer ( =20 Length =3D 8 * DataByteCount; =20 - EfiAcquireLock (&SpiMaster->Lock); + if (!EfiAtRuntime ()) { + EfiAcquireLock (&SpiMaster->Lock); + } =20 if (Flag & SPI_TRANSFER_BEGIN) { SpiActivateCs (Slave); @@ -254,7 +256,9 @@ MvSpiTransfer ( SpiDeactivateCs (Slave); } =20 - EfiReleaseLock (&SpiMaster->Lock); + if (!EfiAtRuntime ()) { + EfiReleaseLock (&SpiMaster->Lock); + } =20 return EFI_SUCCESS; } @@ -338,6 +342,44 @@ MvSpiFreeSlave ( return EFI_SUCCESS; } =20 +EFI_STATUS +EFIAPI +MvSpiConfigRuntime ( + IN SPI_DEVICE *Slave + ) +{ + EFI_STATUS Status; + UINTN AlignedAddress; + + // + // Host register base may be not aligned to the page size, + // which is not accepted when setting memory space attributes. + // Add one aligned page of memory space which covers the host + // controller registers. + // + AlignedAddress =3D Slave->HostRegisterBaseAddress & ~(SIZE_4KB - 1); + + Status =3D gDS->AddMemorySpace (EfiGcdMemoryTypeMemoryMappedIo, + AlignedAddress, + SIZE_4KB, + EFI_MEMORY_UC | EFI_MEMORY_RUNTIME); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Failed to add memory space\n", __FUNCTION__)= ); + return Status; + } + + Status =3D gDS->SetMemorySpaceAttributes (AlignedAddress, + SIZE_4KB, + EFI_MEMORY_UC | EFI_MEMORY_RUNTIME); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: Failed to set memory attributes\n", __FUNCTI= ON__)); + gDS->RemoveMemorySpace (AlignedAddress, SIZE_4KB); + return Status; + } + + return EFI_SUCCESS; +} + STATIC EFI_STATUS SpiMasterInitProtocol ( @@ -350,6 +392,7 @@ SpiMasterInitProtocol ( SpiMasterProtocol->FreeDevice =3D MvSpiFreeSlave; SpiMasterProtocol->Transfer =3D MvSpiTransfer; SpiMasterProtocol->ReadWrite =3D MvSpiReadWrite; + SpiMasterProtocol->ConfigRuntime =3D MvSpiConfigRuntime; =20 return EFI_SUCCESS; } @@ -363,8 +406,7 @@ SpiMasterEntryPoint ( { EFI_STATUS Status; =20 - mSpiMasterInstance =3D AllocateZeroPool (sizeof (SPI_MASTER)); - + mSpiMasterInstance =3D AllocateRuntimeZeroPool (sizeof (SPI_MASTER)); if (mSpiMasterInstance =3D=3D NULL) { return EFI_OUT_OF_RESOURCES; } diff --git a/Platform/Marvell/Drivers/Spi/MvSpiDxe.h b/Platform/Marvell/Dri= vers/Spi/MvSpiDxe.h index e7e280a..50cdc02 100644 --- a/Platform/Marvell/Drivers/Spi/MvSpiDxe.h +++ b/Platform/Marvell/Drivers/Spi/MvSpiDxe.h @@ -38,10 +38,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DA= MAGE. #include #include #include +#include #include #include #include #include +#include =20 #include =20 diff --git a/Platform/Marvell/Drivers/Spi/MvSpiDxe.inf b/Platform/Marvell/D= rivers/Spi/MvSpiDxe.inf index 08c6c04..ac0e407 100644 --- a/Platform/Marvell/Drivers/Spi/MvSpiDxe.inf +++ b/Platform/Marvell/Drivers/Spi/MvSpiDxe.inf @@ -33,7 +33,7 @@ INF_VERSION =3D 0x00010005 BASE_NAME =3D SpiMasterDxe FILE_GUID =3D c19dbc8a-f4f9-43b0-aee5-802e3ed03d15 - MODULE_TYPE =3D DXE_DRIVER + MODULE_TYPE =3D DXE_RUNTIME_DRIVER VERSION_STRING =3D 1.0 ENTRY_POINT =3D SpiMasterEntryPoint =20 @@ -53,8 +53,10 @@ TimerLib UefiLib DebugLib + DxeServicesTableLib MemoryAllocationLib IoLib + UefiRuntimeLib =20 [FixedPcd] gMarvellTokenSpaceGuid.PcdSpiRegBase @@ -65,4 +67,7 @@ gMarvellSpiMasterProtocolGuid =20 [Depex] - TRUE + # + # MvSpiDxe must be loaded prior to MvSpiFlash driver + # + BEFORE gMarvellSpiFlashDxeGuid diff --git a/Platform/Marvell/Include/Protocol/Spi.h b/Platform/Marvell/Inc= lude/Protocol/Spi.h index d993021..abbad19 100644 --- a/Platform/Marvell/Include/Protocol/Spi.h +++ b/Platform/Marvell/Include/Protocol/Spi.h @@ -101,12 +101,19 @@ EFI_STATUS IN SPI_DEVICE *SpiDev ); =20 +typedef +EFI_STATUS +(EFIAPI *MV_SPI_CONFIG_RT) ( + IN SPI_DEVICE *SpiDev + ); + struct _MARVELL_SPI_MASTER_PROTOCOL { MV_SPI_INIT Init; MV_SPI_READ_WRITE ReadWrite; MV_SPI_TRANSFER Transfer; MV_SPI_SETUP_DEVICE SetupDevice; MV_SPI_FREE_DEVICE FreeDevice; + MV_SPI_CONFIG_RT ConfigRuntime; }; =20 #endif // __MARVELL_SPI_MASTER_PROTOCOL_H__ diff --git a/Platform/Marvell/Marvell.dec b/Platform/Marvell/Marvell.dec index e40771b..2eb6238 100644 --- a/Platform/Marvell/Marvell.dec +++ b/Platform/Marvell/Marvell.dec @@ -57,6 +57,7 @@ gShellSfHiiGuid =3D { 0x03a67756, 0x8cde, 0x4638, { 0x82, 0x34, 0x4a, 0x= 0f, 0x6d, 0x58, 0x81, 0x39 } } =20 gMarvellFvbDxeGuid =3D { 0x42903750, 0x7e61, 0x4aaf, { 0x83, 0x29, 0xbf,= 0x42, 0x36, 0x4e, 0x24, 0x85 } } + gMarvellSpiFlashDxeGuid =3D { 0x49d7fb74, 0x306d, 0x42bd, { 0x94, 0xc8, = 0xc0, 0xc5, 0x4b, 0x18, 0x1d, 0xd7 } } =20 [Protocols] # installed as a protocol by PlatInitDxe to force ordering between DXE d= rivers --=20 2.7.4 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel