From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:400c:c0c::232; helo=mail-wr0-x232.google.com; envelope-from=leif.lindholm@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-wr0-x232.google.com (mail-wr0-x232.google.com [IPv6:2a00:1450:400c:c0c::232]) (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 0186221A10968 for ; Tue, 12 Dec 2017 09:46:16 -0800 (PST) Received: by mail-wr0-x232.google.com with SMTP id s66so22036283wrc.9 for ; Tue, 12 Dec 2017 09:50:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=Lnmf0PwEB5gHqGoGWOKe8ufW7o9i7LyfJ0yVHvY2VzM=; b=k0i5mCSqEG/bPxOnkWQ5kFYCLdLvVp/bp7GyqR02eZJ86shH6kCvSt6rwIDE+tdFaL jIjZQ6WT8iMjZ/Jc61zjxZbf5sSIx5UhmzJ+/I9t/b83Gi4u0iYH4e1dO+P3rJJ4HZdj WsgdC+09afzxjUpjJqOzaeghlO9lmWqQaIgDI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=Lnmf0PwEB5gHqGoGWOKe8ufW7o9i7LyfJ0yVHvY2VzM=; b=bE6S8YTa5PmtpbxjnqeEzZLGx97mchD6EUwKQ5Yd8fWLrcs7ntIGeUViHiBTsrz/gk mt0tzXcthYFrXBnOMNbmJkenR9b4gg5eXd5vSzP8uiwXewCx8Ysa44n/lpmaTF1X/nKv k96OVMDT9r6VTaEVw+dbhTV7OQ+Ib9N1UT6brQlUGsZMXqQo2dz328mkJn3ULo6fSD+l h+GFRNM4dFT2C0S00D7mmwozMDDktXetdRn3Imr+iQj0/3GO/nkxQGqHZOUB1MvKYOr+ 7fpPOBTE/kH1HwjMBmFxx16JDqWgRE5FCI9CT7i/g55n9f9P1Tp2pOhxg0/Pu8MBP1l+ c91Q== X-Gm-Message-State: AKGB3mI74c1VBjE2cdWJaTIHqS+ZgfItAPFfoqfp5jXcdTxehbPgrfCz J9qbLzhO/BfT+xvwtWSet2C9wg== X-Google-Smtp-Source: ACJfBovPCm8N6UzwyEjFTl7gPuW5wZBTL3nPP5Zg6IVnUwt1n5tRQC/yvpNlmyHNMKV8CfN+q0xxBg== X-Received: by 10.223.188.3 with SMTP id s3mr4850952wrg.270.1513101054491; Tue, 12 Dec 2017 09:50:54 -0800 (PST) Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id l31sm27047296wrc.50.2017.12.12.09.50.53 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 12 Dec 2017 09:50:53 -0800 (PST) Date: Tue, 12 Dec 2017 17:50:51 +0000 From: Leif Lindholm To: Ard Biesheuvel Cc: "edk2-devel@lists.01.org" , Daniel Thompson , Masami Hiramatsu Message-ID: <20171212175051.264agxxzdt5vsfof@bivouac.eciton.net> References: <20171212103807.18836-1-ard.biesheuvel@linaro.org> <20171212103807.18836-6-ard.biesheuvel@linaro.org> <20171212173230.bcm2osdd4iw5auyd@bivouac.eciton.net> MIME-Version: 1.0 In-Reply-To: User-Agent: NeoMutt/20170113 (1.7.2) Subject: Re: [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: , X-List-Received-Date: Tue, 12 Dec 2017 17:46:17 -0000 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Tue, Dec 12, 2017 at 05:35:15PM +0000, Ard Biesheuvel wrote: > On 12 December 2017 at 17:32, Leif Lindholm wrote: > > Suggested subject tweak: > > Silicon/SynQuacer: disable PCI RC #0 DT node if disabled -> > > Silicon/SynQuacer: disable PCI RC DT node if RC disabled. > > > > Ack. It's out of date, as you probably suspected > > > The code below will disable either #0 or #1 node if not enabled by > > Pcd. > > > > On Tue, Dec 12, 2017 at 10:38:04AM +0000, Ard Biesheuvel wrote: > >> 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(-) > >> > >> 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 > > > > If there isn't a simplish way of determining this value > > arithmetically, can you add a comment explaining why 64 is sufficient? > > > > Something like > > // add enough space for two instances of 'status = "disabled"' > > ? Good enough for me. Reviewed-by: Leif Lindholm > > >> +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 > >> -- > >> 2.11.0 > >>