From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2607:f8b0:400e:c05::241; helo=mail-pg0-x241.google.com; envelope-from=haojian.zhuang@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-pg0-x241.google.com (mail-pg0-x241.google.com [IPv6:2607:f8b0:400e:c05::241]) (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 190E9207DF47A for ; Fri, 27 Apr 2018 22:24:28 -0700 (PDT) Received: by mail-pg0-x241.google.com with SMTP id l2-v6so2954088pgc.7 for ; Fri, 27 Apr 2018 22:24:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=0RE/xnE0yr8zv0ckO+R9+sOdYbSpPXJBkEzO8xMOQpI=; b=N1GTRlaaoM68kJsoph+E0YKOFX8fq5IZ7jqpQfCZxc02gDgM2Mv6LM2qt17tfqyvmz qQ0C5frcDnHqe1//C3DOTQ7QxRrPHBLEBX9lPGAwR2p3+QsH5NaVI73A+D2CK9Vb7uqD 6WpJ4Do8srRw0QtcCeESgtoX2QakKTMsiAcg4= 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; bh=0RE/xnE0yr8zv0ckO+R9+sOdYbSpPXJBkEzO8xMOQpI=; b=p0KYd+q7LB/6seUEI0y+yF5goS0GBScG/pt2kN3+DgOfOgLqNhKjBOtZg6r9AJHSAE Ik/gNoIWdYFjw8y4vMz8ZzNvbwnk/hkfIyhjN8oan/oohOb/MSlrNtn39rlsq19Jgq8m 3nzPhh5DwI1L8FfQmXLqB+OT1L2YreH/r2V4DjAxpRPBYAoseboz1Y4a+Cq7F6z7kf6h uTCQ9lYsILwnp/FDf9SP7o0wG+LF0nF30Ez3DXcaE9pmgs08p06JHC6XViZrsEgRIyPH IQwYMx7HQvOb5ytERFpGUmRNAs8T8Yq5oY3TT1mDHX+lX1Ql86ZerhNxZK97hVIsAzpO 4+vA== X-Gm-Message-State: ALQs6tAjzdiensugXGxzaJRVehYalolP4YjoU9LYAccuvNjY8ddkfHnZ JWmtRxoRrguoCGW6Z8X2iobx1jZF5aw= X-Google-Smtp-Source: AB8JxZq7Pb/8B5FFxFyyIzuU07eqphCcyRaWc8DWdDhLxUhbSdf0Ypr+s4mtJTmspHO70ZDTJq20bA== X-Received: by 2002:a17:902:5ac1:: with SMTP id g1-v6mr4811730plm.43.1524893068227; Fri, 27 Apr 2018 22:24:28 -0700 (PDT) Received: from localhost.localdomain ([64.64.108.61]) by smtp.gmail.com with ESMTPSA id o64sm5196892pfb.62.2018.04.27.22.24.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 27 Apr 2018 22:24:27 -0700 (PDT) From: Haojian Zhuang To: edk2-devel@lists.01.org Cc: Haojian Zhuang , Leif Lindholm , Ard Biesheuvel Date: Sat, 28 Apr 2018 13:24:20 +0800 Message-Id: <1524893061-3080-1-git-send-email-haojian.zhuang@linaro.org> X-Mailer: git-send-email 2.7.4 Subject: [PATCH edk2-platforms 1/2] Platform/HiKey: enable SD/MMC controller on HiKey X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 28 Apr 2018 05:24:29 -0000 Replace DwEmmcDxe driver by DwMmcHcDxe driver on HiKey platform. Since the new driver could work on both eMMC and SD controller. Cc: Leif Lindholm Cc: Ard Biesheuvel Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Haojian Zhuang --- Platform/Hisilicon/HiKey/HiKey.dsc | 19 ++- Platform/Hisilicon/HiKey/HiKey.fdf | 15 ++- Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.c | 26 ++++ Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.inf | 1 + Platform/Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.c | 139 +++++++++++++++++++++ .../Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.inf | 45 +++++++ 6 files changed, 228 insertions(+), 17 deletions(-) create mode 100644 Platform/Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.c create mode 100644 Platform/Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.inf diff --git a/Platform/Hisilicon/HiKey/HiKey.dsc b/Platform/Hisilicon/HiKey/HiKey.dsc index 9c1fc2e1b40d..0635e16c4141 100644 --- a/Platform/Hisilicon/HiKey/HiKey.dsc +++ b/Platform/Hisilicon/HiKey/HiKey.dsc @@ -69,7 +69,7 @@ [LibraryClasses.common.SEC] PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf [BuildOptions] - GCC:*_*_*_PLATFORM_FLAGS = -I$(WORKSPACE)/Silicon/Hisilicon/Hi6220/Include -I$(WORKSPACE)/Platform/Hisilicon/HiKey/Include + GCC:*_*_*_PLATFORM_FLAGS = -I$(WORKSPACE)/Silicon/Hisilicon/Hi6220/Include -I$(WORKSPACE)/Platform/Hisilicon/HiKey/Include -I$(WORKSPACE)/ArmPkg/Include -I$(WORKSPACE)/EmbeddedPkg/Include ################################################################################ # @@ -126,12 +126,6 @@ [PcdsFixedAtBuild.common] gEmbeddedTokenSpaceGuid.PcdMetronomeTickPeriod|1000 # - # DW MMC/SD card controller - # - gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeBaseAddress|0xF723D000 - gEmbeddedTokenSpaceGuid.PcdDwEmmcDxeClockFrequencyInHz|100000000 - - # # # Fastboot # @@ -204,13 +198,16 @@ [Components.common] # EmbeddedPkg/Drivers/VirtualKeyboardDxe/VirtualKeyboardDxe.inf - Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.inf - # # MMC/SD # - EmbeddedPkg/Universal/MmcDxe/MmcDxe.inf - EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf + Platform/Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.inf + MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.inf + EmbeddedPkg/Drivers/DwMmcHcDxe/DwMmcHcDxe.inf + MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.inf + MdeModulePkg/Bus/Sd/SdDxe/SdDxe.inf + + Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.inf # # USB Host Support diff --git a/Platform/Hisilicon/HiKey/HiKey.fdf b/Platform/Hisilicon/HiKey/HiKey.fdf index 2bca7232b6e5..afc6a1a6e6e1 100644 --- a/Platform/Hisilicon/HiKey/HiKey.fdf +++ b/Platform/Hisilicon/HiKey/HiKey.fdf @@ -128,15 +128,18 @@ [FV.FvMain] # INF EmbeddedPkg/Drivers/VirtualKeyboardDxe/VirtualKeyboardDxe.inf + # + # MMC/SD + # + INF Platform/Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.inf + INF MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.inf + INF EmbeddedPkg/Drivers/DwMmcHcDxe/DwMmcHcDxe.inf + INF MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.inf + INF MdeModulePkg/Bus/Sd/SdDxe/SdDxe.inf + INF Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.inf # - # Multimedia Card Interface - # - INF EmbeddedPkg/Universal/MmcDxe/MmcDxe.inf - INF EmbeddedPkg/Drivers/DwEmmcDxe/DwEmmcDxe.inf - - # # USB Host Support # INF MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf diff --git a/Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.c b/Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.c index fec43f3fb4c1..5f1904cec805 100644 --- a/Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.c +++ b/Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -378,6 +379,31 @@ HiKeyEntryPoint ( return Status; } + Status = RegisterNonDiscoverableMmioDevice ( + NonDiscoverableDeviceTypeSdhci, + NonDiscoverableDeviceDmaTypeNonCoherent, + NULL, + NULL, + 1, + 0xF723D000, // eMMC + SIZE_4KB + ); + if (EFI_ERROR (Status)) { + return Status; + } + Status = RegisterNonDiscoverableMmioDevice ( + NonDiscoverableDeviceTypeSdhci, + NonDiscoverableDeviceDmaTypeNonCoherent, + NULL, + NULL, + 1, + 0xF723E000, // SD + SIZE_4KB + ); + if (EFI_ERROR (Status)) { + return Status; + } + Status = gBS->InstallProtocolInterface ( &ImageHandle, &gPlatformVirtualKeyboardProtocolGuid, diff --git a/Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.inf b/Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.inf index e97afab8785a..a217e2fb7033 100644 --- a/Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.inf +++ b/Platform/Hisilicon/HiKey/HiKeyDxe/HiKeyDxe.inf @@ -37,6 +37,7 @@ [LibraryClasses] DxeServicesTableLib FdtLib IoLib + NonDiscoverableDeviceRegistrationLib PcdLib PrintLib SerialPortLib diff --git a/Platform/Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.c b/Platform/Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.c new file mode 100644 index 000000000000..390c23018bc6 --- /dev/null +++ b/Platform/Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.c @@ -0,0 +1,139 @@ +/** @file +* +* Copyright (c) 2017, Linaro. All rights reserved. +* +* This program and the accompanying materials +* are licensed and made available under the terms and conditions of the BSD License +* which accompanies this distribution. The full text of the license may be found at +* http://opensource.org/licenses/bsd-license.php +* +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +* +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#define DETECT_SD_CARD 8 // GPIO 1_0 + +DW_MMC_HC_SLOT_CAP +DwMmcCapability[2] = { + { + .Ddr50 = 1, + .HighSpeed = 1, + .BusWidth = 8, + .SlotType = EmbeddedSlot, + .CardType = EmmcCardType, + .BaseClkFreq = 100000 + }, { + .HighSpeed = 1, + .BusWidth = 4, + .SlotType = RemovableSlot, + .CardType = SdCardType, + .Voltage30 = 1, + .BaseClkFreq = 100000 + } +}; + +EFI_STATUS +EFIAPI +HiKeyGetCapability ( + IN EFI_HANDLE Controller, + IN UINT8 Slot, + OUT DW_MMC_HC_SLOT_CAP *Capability + ) +{ + if (Capability == NULL) { + return EFI_INVALID_PARAMETER; + } + if (DwMmcCapability[0].Controller == 0) { + DwMmcCapability[0].Controller = Controller; + CopyMem (Capability, &DwMmcCapability[0], sizeof (DW_MMC_HC_SLOT_CAP)); + } else if (DwMmcCapability[0].Controller == Controller) { + CopyMem (Capability, &DwMmcCapability[0], sizeof (DW_MMC_HC_SLOT_CAP)); + } else if (DwMmcCapability[1].Controller == 0) { + DwMmcCapability[1].Controller = Controller; + CopyMem (Capability, &DwMmcCapability[1], sizeof (DW_MMC_HC_SLOT_CAP)); + } else if (DwMmcCapability[1].Controller == Controller) { + CopyMem (Capability, &DwMmcCapability[1], sizeof (DW_MMC_HC_SLOT_CAP)); + } else { + return EFI_INVALID_PARAMETER; + } + return EFI_SUCCESS; +} + +BOOLEAN +EFIAPI +HiKeyCardDetect ( + IN EFI_HANDLE Controller, + IN UINT8 Slot + ) +{ + EFI_STATUS Status; + EMBEDDED_GPIO *Gpio; + UINTN Value; + + if (DwMmcCapability[0].Controller == Controller) { + return TRUE; + } else if (DwMmcCapability[1].Controller == Controller) { + Status = gBS->LocateProtocol (&gEmbeddedGpioProtocolGuid, NULL, (VOID **)&Gpio); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Failed to get GPIO protocol: %r\n", Status)); + return FALSE; + } + Status = Gpio->Set (Gpio, DETECT_SD_CARD, GPIO_MODE_INPUT); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Failed to sed GPIO as input mode: %r\n", Status)); + return FALSE; + } + Status = Gpio->Get (Gpio, DETECT_SD_CARD, &Value); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Failed to get GPIO value: %r\n", Status)); + return FALSE; + } + if (Value == 0) { + return TRUE; + } + return FALSE; + } + return FALSE; +} + +PLATFORM_DW_MMC_PROTOCOL mDwMmcDevice = { + HiKeyGetCapability, + HiKeyCardDetect +}; + +EFI_STATUS +EFIAPI +HiKeyMmcEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + Status = gBS->InstallProtocolInterface ( + &ImageHandle, + &gPlatformDwMmcProtocolGuid, + EFI_NATIVE_INTERFACE, + &mDwMmcDevice + ); + if (EFI_ERROR (Status)) { + return Status; + } + return Status; +} diff --git a/Platform/Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.inf b/Platform/Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.inf new file mode 100644 index 000000000000..1b78d3228ccf --- /dev/null +++ b/Platform/Hisilicon/HiKey/HiKeyMmcDxe/HiKeyMmcDxe.inf @@ -0,0 +1,45 @@ +#/** @file +# +# Copyright (c) 2017, Linaro. All rights reserved. +# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# +#**/ + +[Defines] + INF_VERSION = 0x00010019 + BASE_NAME = HiKeyMmcDxe + FILE_GUID = a4f9bfb1-b3f8-4d4d-8c04-9539173fc1f2 + MODULE_TYPE = UEFI_DRIVER + VERSION_STRING = 1.0 + ENTRY_POINT = HiKeyMmcEntryPoint + +[Sources.common] + HiKeyMmcDxe.c + +[LibraryClasses] + DebugLib + IoLib + TimerLib + UefiBootServicesTableLib + UefiDriverEntryPoint + +[Protocols] + gEfiDriverBindingProtocolGuid + gEmbeddedGpioProtocolGuid + gPlatformDwMmcProtocolGuid + +[Packages] + EmbeddedPkg/EmbeddedPkg.dec + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + OpenPlatformPkg/Drivers/SdMmc/DwMmcHcDxe/DwMmcHcDxe.dec + +[Depex] + TRUE -- 2.7.4