From patchwork Tue Dec 12 10:38:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 121505 Delivered-To: patch@linaro.org Received: by 10.80.152.193 with SMTP id j59csp3890723edb; Tue, 12 Dec 2017 02:38:32 -0800 (PST) X-Google-Smtp-Source: ACJfBotZEOO9sIgWMI2X8I9oiMSWgZmkOLGdxC4rSIrb9g37+MGLJobqLnWqgAszqBiBzlyBQ+kz X-Received: by 10.101.97.75 with SMTP id o11mr1582618pgv.363.1513075112751; Tue, 12 Dec 2017 02:38:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1513075112; cv=none; d=google.com; s=arc-20160816; b=p39ldk5Nbm1suYYoBqhLpiu1F6buvZoET+LNJszX6ua3XzZBLqn1wia9cOx64PbOkr FJVysnhjvOAig5EJluwcMlt080axO8dOWh1zEfPncYD0Mjw8hjKPolp9SBDWJpBvWGFl 3t2+XZsTBiD104z6WghVsgLAWvz6SnVOGQyX+KO+jlEz2htlBizhs8SqkoTuN2xjU+4x DDBDY8PShuznji0zuGy8AslNo+V1uDqxtVaJ1aKTVkR+0Zmo9QTabX5MDBeQLlIm6l3D fFompjkbMXwZdkC0tmYu9r7UBhR4CO3vGQU6qYNqW5JAstliaHw3SxmZ2bfucoAsXU3O VORg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=M6CKupF4elwcX3u9r+GMgnxQcgYvyXRKP97bNSjWzhI=; b=Y7U5PkloBkHaQdYqLw9wE7p/IP0aLbkXZVVO2wHSodOtnLc9Ccc2FKTlWa6IT13kW4 Nbdc3r1sfc0v6G3Tk3Q/IfHfWoi+SYbk1VawBEiosw2bTD+AjesLcCTbjqd/eybPLoZS LPvTnB43U18DG4dnnnqJnfe26wEa2U0bmynm7zQAdsxzhmis67Q5wvqzYyxD1rK2vPHY nNyXRpWJJtyr024HC0UqNH/rKZaV3C7a8REU2msBBbjLY46nO3zriFEC9yTicBtHdrnB qck2q0cQtTj8X4sQGj/bnSbUbXEXLQGut6TCYwW81S0XH+yiWks1yEzrzMqHXiVXIbeU Uk1g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=fqR5O+5g; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 198.145.21.10 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from ml01.01.org (ml01.01.org. [198.145.21.10]) by mx.google.com with ESMTPS id j186si11282716pge.645.2017.12.12.02.38.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Dec 2017 02:38:32 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 198.145.21.10 as permitted sender) client-ip=198.145.21.10; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=fqR5O+5g; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 198.145.21.10 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 89EB1220EE107; Tue, 12 Dec 2017 02:33:51 -0800 (PST) X-Original-To: edk2-devel@lists.01.org Delivered-To: edk2-devel@lists.01.org Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:400c:c0c::243; helo=mail-wr0-x243.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-wr0-x243.google.com (mail-wr0-x243.google.com [IPv6:2a00:1450:400c:c0c::243]) (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 A615E220EE107 for ; Tue, 12 Dec 2017 02:33:49 -0800 (PST) Received: by mail-wr0-x243.google.com with SMTP id a41so20597431wra.6 for ; Tue, 12 Dec 2017 02:38:28 -0800 (PST) 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=3TL11bag/iZYHBcdSH5KCpn14J17x6tyE5z4O+tavlw=; b=fqR5O+5gzjsWUkBFGxQdoVWYa/Pt/27gK8DSDpkb/2wEbet0E07gjvRMrQfO9v8O5L WEL7XWm/KBNg76wq2ftVJG/3chsYfoM1OE1b91YmHedT98XSHrOTo7FzflJgMZWG4Qkv LVZbTmARL9fC7QlQgfu6Xn/1yMPW5mtVivzwg= 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=3TL11bag/iZYHBcdSH5KCpn14J17x6tyE5z4O+tavlw=; b=V915iPRuiOfcJeXRPKuAp7u63RNQS2N1wNilFbk1XXh1q3/qh2UdeZEN/B6OclffwU ydj/txOBpUBvn8oGJalJ97DsjY4NaiYhMo/+/gag66xqFdgHeHg81CxLpR/0f5NeJrT7 V9p6/pZShbdY1bnFHOwrwyEhRpVhuF4u1C3lu68VNg08UsdUpiruqi8PwWykas525TId E5Flqwbmpe8uTqKmB+vbFfKc580JaMqIsr+ZNn0zNovJBDjJh51hhh3WETnG69KBXKqP +0kRqWSPsCKBmA88XPDrr1yQMlqKfkGOGQm5KVVlOvHOE/RxtlQSJtuxeq3enVj84g1W koPg== X-Gm-Message-State: AKGB3mIkRHqcGQJTeyGHvO5gIvIvQLwQHaiZ1WYRdU9KcNeWZA/CJJvc GEehf9pk0FD5cixaZPjIw5XIUt6DT2s= X-Received: by 10.223.156.202 with SMTP id h10mr1700685wre.174.1513075106702; Tue, 12 Dec 2017 02:38:26 -0800 (PST) Received: from localhost.localdomain ([160.171.158.223]) by smtp.gmail.com with ESMTPSA id b16sm21279762wrd.69.2017.12.12.02.38.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Dec 2017 02:38:25 -0800 (PST) From: Ard Biesheuvel To: edk2-devel@lists.01.org Date: Tue, 12 Dec 2017 10:38:04 +0000 Message-Id: <20171212103807.18836-6-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171212103807.18836-1-ard.biesheuvel@linaro.org> References: <20171212103807.18836-1-ard.biesheuvel@linaro.org> Subject: [edk2] [PATCH edk2-platforms 5/8] Silicon/SynQuacer: disable PCI RC #0 DT node if disabled 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: daniel.thompson@linaro.org, masami.hiramatsu@linaro.org, leif.lindholm@linaro.org, Ard Biesheuvel MIME-Version: 1.0 Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" If PCIe RC #0 is not enabled (due to the fact that the slot is not populated), set its DT node 'status' property to 'disabled' so that the OS will not attempt to attach to it. This means we will need to switch from the default DtPlatformDtbLoaderLib to a special one for our platform. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel --- Platform/Socionext/DeveloperBox/DeveloperBox.dsc | 8 +- Platform/Socionext/SynQuacerEvalBoard/SynQuacerEvalBoard.dsc | 3 +- Silicon/Socionext/SynQuacer/Library/SynQuacerDtbLoaderLib/SynQuacerDtbLoaderLib.c | 94 ++++++++++++++++++++ Silicon/Socionext/SynQuacer/Library/SynQuacerDtbLoaderLib/SynQuacerDtbLoaderLib.inf | 42 +++++++++ 4 files changed, 141 insertions(+), 6 deletions(-) -- 2.11.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel Reviewed-by: Leif Lindholm diff --git a/Platform/Socionext/DeveloperBox/DeveloperBox.dsc b/Platform/Socionext/DeveloperBox/DeveloperBox.dsc index 5ec26f9cdd34..80728fedbc20 100644 --- a/Platform/Socionext/DeveloperBox/DeveloperBox.dsc +++ b/Platform/Socionext/DeveloperBox/DeveloperBox.dsc @@ -160,7 +160,8 @@ [LibraryClasses.common.DXE_CORE] PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf [LibraryClasses.common.DXE_DRIVER] - DtPlatformDtbLoaderLib|EmbeddedPkg/Library/DxeDtPlatformDtbLoaderLibDefault/DxeDtPlatformDtbLoaderLibDefault.inf + DtPlatformDtbLoaderLib|Silicon/Socionext/SynQuacer/Library/SynQuacerDtbLoaderLib/SynQuacerDtbLoaderLib.inf + FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf @@ -611,10 +612,7 @@ [Components.common] # # Console preference selection # - EmbeddedPkg/Drivers/ConsolePrefDxe/ConsolePrefDxe.inf { - - FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf - } + EmbeddedPkg/Drivers/ConsolePrefDxe/ConsolePrefDxe.inf # # DT support diff --git a/Platform/Socionext/SynQuacerEvalBoard/SynQuacerEvalBoard.dsc b/Platform/Socionext/SynQuacerEvalBoard/SynQuacerEvalBoard.dsc index bc8ddd452d4b..c71425664bdc 100644 --- a/Platform/Socionext/SynQuacerEvalBoard/SynQuacerEvalBoard.dsc +++ b/Platform/Socionext/SynQuacerEvalBoard/SynQuacerEvalBoard.dsc @@ -159,7 +159,8 @@ [LibraryClasses.common.DXE_CORE] PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf [LibraryClasses.common.DXE_DRIVER] - DtPlatformDtbLoaderLib|EmbeddedPkg/Library/DxeDtPlatformDtbLoaderLibDefault/DxeDtPlatformDtbLoaderLibDefault.inf + DtPlatformDtbLoaderLib|Silicon/Socionext/SynQuacer/Library/SynQuacerDtbLoaderLib/SynQuacerDtbLoaderLib.inf + FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf diff --git a/Silicon/Socionext/SynQuacer/Library/SynQuacerDtbLoaderLib/SynQuacerDtbLoaderLib.c b/Silicon/Socionext/SynQuacer/Library/SynQuacerDtbLoaderLib/SynQuacerDtbLoaderLib.c new file mode 100644 index 000000000000..a93a6027e64d --- /dev/null +++ b/Silicon/Socionext/SynQuacer/Library/SynQuacerDtbLoaderLib/SynQuacerDtbLoaderLib.c @@ -0,0 +1,94 @@ +/** @file +* +* Copyright (c) 2017, Linaro, Ltd. 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 + +#define DTB_PADDING 64 + +STATIC +VOID +DisableDtNode ( + IN VOID *Dtb, + IN CONST CHAR8 *NodePath + ) +{ + INT32 Node; + INT32 Rc; + + Node = fdt_path_offset (Dtb, NodePath); + if (Node < 0) { + DEBUG ((DEBUG_ERROR, "%a: failed to locate DT path '%a': %a\n", + __FUNCTION__, NodePath, fdt_strerror (Node))); + return; + } + Rc = fdt_setprop_string (Dtb, Node, "status", "disabled"); + if (Rc < 0) { + DEBUG ((DEBUG_ERROR, "%a: failed to set status to 'disabled' on '%a': %a\n", + __FUNCTION__, NodePath, fdt_strerror (Rc))); + } +} + +/** + Return a pool allocated copy of the DTB image that is appropriate for + booting the current platform via DT. + + @param[out] Dtb Pointer to the DTB copy + @param[out] DtbSize Size of the DTB copy + + @retval EFI_SUCCESS Operation completed successfully + @retval EFI_NOT_FOUND No suitable DTB image could be located + @retval EFI_OUT_OF_RESOURCES No pool memory available + +**/ +EFI_STATUS +EFIAPI +DtPlatformLoadDtb ( + OUT VOID **Dtb, + OUT UINTN *DtbSize + ) +{ + EFI_STATUS Status; + VOID *OrigDtb; + VOID *CopyDtb; + UINTN OrigDtbSize; + + Status = GetSectionFromAnyFv (&gDtPlatformDefaultDtbFileGuid, + EFI_SECTION_RAW, 0, &OrigDtb, &OrigDtbSize); + if (EFI_ERROR (Status)) { + return EFI_NOT_FOUND; + } + + CopyDtb = AllocateCopyPool (OrigDtbSize + DTB_PADDING, OrigDtb); + if (CopyDtb == NULL) { + return EFI_OUT_OF_RESOURCES; + } + + if (!(PcdGet8 (PcdPcieEnableMask) & BIT0)) { + DisableDtNode (CopyDtb, "/pcie@60000000"); + } + if (!(PcdGet8 (PcdPcieEnableMask) & BIT1)) { + DisableDtNode (CopyDtb, "/pcie@70000000"); + } + + *Dtb = CopyDtb; + *DtbSize = OrigDtbSize + DTB_PADDING; + + return EFI_SUCCESS; +} diff --git a/Silicon/Socionext/SynQuacer/Library/SynQuacerDtbLoaderLib/SynQuacerDtbLoaderLib.inf b/Silicon/Socionext/SynQuacer/Library/SynQuacerDtbLoaderLib/SynQuacerDtbLoaderLib.inf new file mode 100644 index 000000000000..e1f564f73078 --- /dev/null +++ b/Silicon/Socionext/SynQuacer/Library/SynQuacerDtbLoaderLib/SynQuacerDtbLoaderLib.inf @@ -0,0 +1,42 @@ +/** @file +* +* Copyright (c) 2017, Linaro, Ltd. 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 = 0x0001001A + BASE_NAME = SynQuacerDtbLoaderLib + FILE_GUID = 59df69c4-8724-4e49-8974-d0691364338c + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = DtPlatformDtbLoaderLib|DXE_DRIVER + +[Sources] + SynQuacerDtbLoaderLib.c + +[Packages] + MdePkg/MdePkg.dec + EmbeddedPkg/EmbeddedPkg.dec + Silicon/Socionext/SynQuacer/SynQuacer.dec + +[LibraryClasses] + BaseLib + DebugLib + DxeServicesLib + FdtLib + MemoryAllocationLib + +[Pcd] + gSynQuacerTokenSpaceGuid.PcdPcieEnableMask + +[Guids] + gDtPlatformDefaultDtbFileGuid