From patchwork Wed Apr 6 16:15:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 65197 Delivered-To: patch@linaro.org Received: by 10.112.199.169 with SMTP id jl9csp1147083lbc; Wed, 6 Apr 2016 09:15:56 -0700 (PDT) X-Received: by 10.98.73.69 with SMTP id w66mr39436495pfa.106.1459959353538; Wed, 06 Apr 2016 09:15:53 -0700 (PDT) Return-Path: Received: from ml01.01.org (ml01.01.org. [2001:19d0:306:5::1]) by mx.google.com with ESMTPS id et14si5502683pac.19.2016.04.06.09.15.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 Apr 2016 09:15:53 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) client-ip=2001:19d0:306:5::1; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE dis=NONE) header.from=linaro.org Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id C3E3A1A1FC6; Wed, 6 Apr 2016 09:15:44 -0700 (PDT) X-Original-To: edk2-devel@lists.01.org Delivered-To: edk2-devel@lists.01.org Received: from mail-wm0-x22a.google.com (mail-wm0-x22a.google.com [IPv6:2a00:1450:400c:c09::22a]) (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 AD42F1A1FCB for ; Wed, 6 Apr 2016 09:15:43 -0700 (PDT) Received: by mail-wm0-x22a.google.com with SMTP id n3so70216580wmn.0 for ; Wed, 06 Apr 2016 09:15:43 -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:in-reply-to:references; bh=YMurl/mhYe8UAxmVvl6i4/Kqq8O/d6LT+XmllrNQOKs=; b=MABjLThXq0FLtNQ2XJ9ncX6I0zsRyOIK0HqxtkCgTqvErfBkTOVEBCbsQvIqnfEEM+ YAP2X11ksJMQOSX8lq3valnstuIgVb9B1VAGIZ4MsSvTaIrekRY/QDe7JZ53k6UMcCK5 K1ZCVOtzZzLkQiSuSepVFLksmTkoCMaEAGct4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=YMurl/mhYe8UAxmVvl6i4/Kqq8O/d6LT+XmllrNQOKs=; b=ksvyBEgRi/yr1SzfDWV+Hd57z+LrxzIJJWRJDNiZfRiX1a9Q96iksRZxKnzcgOu9Ai AssSqDmLXfulZzsg9exEt48KAOtMZGUHIGF9YAEcr4nxE/JbE4aMjRBeMuF0HNg+FQli 4/WUt85eun6w4HoIsanUJIoxQzncCkrz89o0wwGDep1oQ7HyQipUpkrGFTs5sAeRMp5H 3FFbL38XeOs4C5gc+E95p1kcRn0nXagjdogqK8vB154YqI36/eJaUh0ey9ZQ5C78FLiK KS0Iu3Eet/Ln5bJhXk5YksaTmjjIARcWlxQl8I/b117SU+QmQswVxEdYHX1mkMVf76sk g+5g== X-Gm-Message-State: AD7BkJKzlvb3o1Dp5jdR0izw8SRmKign68c0M4ZZFYq/P/f5Sjf7WLYly+PshtvNEwH6xTcq X-Received: by 10.28.109.129 with SMTP id b1mr11524946wmi.36.1459959342327; Wed, 06 Apr 2016 09:15:42 -0700 (PDT) Received: from localhost.localdomain ([195.55.142.58]) by smtp.gmail.com with ESMTPSA id om6sm3961219wjc.40.2016.04.06.09.15.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 06 Apr 2016 09:15:41 -0700 (PDT) From: Ard Biesheuvel To: edk2-devel@lists.01.org, lersek@redhat.com Date: Wed, 6 Apr 2016 18:15:06 +0200 Message-Id: <1459959319-19293-9-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1459959319-19293-1-git-send-email-ard.biesheuvel@linaro.org> References: <1459959319-19293-1-git-send-email-ard.biesheuvel@linaro.org> Subject: [edk2] [PATCH 08/21] ArmVirtPkg/ArmVirtPsciResetSystemLib: move to FDT client protocol X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Ard Biesheuvel MIME-Version: 1.0 Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" Instead of relying on VirtFdtDxe to detect the PSCI method, move our EfiResetSystemLib to the FDT client protocol to interrogate the device tree directly. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel --- ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.c | 38 +++++++++++++++++--- ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.inf | 11 +++--- 2 files changed, 41 insertions(+), 8 deletions(-) -- 2.5.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel diff --git a/ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.c b/ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.c index 88332f56fd9c..1cedb943d841 100644 --- a/ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.c +++ b/ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.c @@ -26,19 +26,49 @@ #include #include #include +#include #include +#include + STATIC UINT32 mArmPsciMethod; -RETURN_STATUS +EFI_STATUS EFIAPI ArmPsciResetSystemLibConstructor ( - VOID + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - mArmPsciMethod = PcdGet32 (PcdArmPsciMethod); - return RETURN_SUCCESS; + EFI_STATUS Status; + FDT_CLIENT_PROTOCOL *FdtClient; + CONST VOID *Prop; + + Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL, (VOID **)&FdtClient); + if (EFI_ERROR (Status)) { + return Status; + } + + Status = FdtClient->FindCompatibleNodeProperty (FdtClient, + "arm,psci-0.2", + "method", + &Prop, + NULL); + if (EFI_ERROR (Status)) { + return Status; + } + + if (AsciiStrnCmp (Prop, "hvc", 3) == 0) { + mArmPsciMethod = 1; + } else if (AsciiStrnCmp (Prop, "smc", 3) == 0) { + mArmPsciMethod = 2; + } else { + DEBUG ((EFI_D_ERROR, "%a: Unknown PSCI method \"%a\"\n", __FUNCTION__, + Prop)); + return EFI_NOT_FOUND; + } + return EFI_SUCCESS; } /** diff --git a/ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.inf b/ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.inf index 86d6104ca258..4b1668f54e8f 100644 --- a/ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.inf +++ b/ArmVirtPkg/Library/ArmVirtPsciResetSystemLib/ArmVirtPsciResetSystemLib.inf @@ -18,9 +18,9 @@ [Defines] INF_VERSION = 0x00010005 BASE_NAME = ArmVirtPsciResetSystemLib FILE_GUID = c81d76ed-66fa-44a3-ac4a-f163120187a9 - MODULE_TYPE = BASE + MODULE_TYPE = DXE_DRIVER VERSION_STRING = 1.0 - LIBRARY_CLASS = EfiResetSystemLib + LIBRARY_CLASS = EfiResetSystemLib|DXE_DRIVER DXE_RUNTIME_DRIVER CONSTRUCTOR = ArmPsciResetSystemLibConstructor [Sources] @@ -38,5 +38,8 @@ [LibraryClasses] ArmSmcLib ArmHvcLib -[Pcd] - gArmVirtTokenSpaceGuid.PcdArmPsciMethod +[Protocols] + gFdtClientProtocolGuid + +[Depex] + gFdtClientProtocolGuid