From patchwork Wed Oct 25 17:59:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 117134 Delivered-To: patch@linaro.org Received: by 10.140.22.164 with SMTP id 33csp1119070qgn; Wed, 25 Oct 2017 11:00:07 -0700 (PDT) X-Google-Smtp-Source: ABhQp+Sj6dMXq6D2IS6okXJHjTQocZ30RVBZGxYfNAM2IOYEE49DDO5b1depMepwi0sd1PVO4WeR X-Received: by 10.99.181.67 with SMTP id u3mr2751495pgo.118.1508954407342; Wed, 25 Oct 2017 11:00:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508954407; cv=none; d=google.com; s=arc-20160816; b=t1Axr+JioDa0Moo2kSZnDYR2m65Bp0SIXJW3ZRm+iGvYbxOF1Uioz8c5asTkUdizgo u/TsjNCtandApECneGD986B/IJ4+DZ8mPEEyABLlC2EJAkhDs3CyNeF1c9TBN8XoachX eWSkW93xtCOBJ854wBKoNR2qtKmLxrPNbJEeJNDtau7RsYi4F0sQwIlRwgpRcb2XKXqZ YkcjSbjlRAX9lE0OTQlEExDXLBrA5GsHaNmMCaKMy5wQ0I6hKaImB4ZE2dV2ADadWFKl QfTFDHZ8xXsYRZYUAHFioENyNpLrT4Rxy9ulj3CDUKSricLjPSpfvUWhB55pOzIxmE2a PzGA== 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=Cw+JwykHideVah+kEX+/Q8EgF+acYD20dCFv+lt1Md4=; b=CIFc4DiF7imDmWndv7MzdfMeG0CaZj9+dShDdQ3Y3iu46clhp4gI+EAUTy+zWTWG7E 68ijiaKD69U6U1a2d1EIPsZHFHG7H8XwBIs44f5wFCSkCMAql3qwMrFsl0eT3vidHr91 jlcvHsCHCuf00qWyxqfEeTJpGNg43/3y0xHaFeXbYDz/1N2pF8a/hdsZ6eGZRwTGymBJ gpF94Nk1Xh01NFxah/TCw15m6yZJRqye9KlvUS4F15WZ6mtIt4Orw2hT0rqbaHalnDMH YAwInljQCt7zGSNxjt/B2CrdoIRm+NRtxisJkU3CXKbfaVW0Sp/5+oBu3Dq/trBpzOHj +ceg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=XqeYMFJ2; 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 sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from ml01.01.org (ml01.01.org. [2001:19d0:306:5::1]) by mx.google.com with ESMTPS id h83si2296798pfk.250.2017.10.25.11.00.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Oct 2017 11:00:07 -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 header.s=google header.b=XqeYMFJ2; 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 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 374D72034CF84; Wed, 25 Oct 2017 10:56:21 -0700 (PDT) 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:c09::243; helo=mail-wm0-x243.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::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 472C5202E617B for ; Wed, 25 Oct 2017 10:56:19 -0700 (PDT) Received: by mail-wm0-x243.google.com with SMTP id 196so16651824wma.1 for ; Wed, 25 Oct 2017 11:00:04 -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=yBTWALKeSMafyP6LIApfq8cHJPRjNTXv8I8hYw8qPYo=; b=XqeYMFJ24LaRWAAClJCPcl8SAWqsf7jj7d1JvVVHony0yQmhcLz2kqerTcD7rZrY4t 6YVs8HRKmBjFrPPk846fZNsi+h6jJDD84Y3iP8z3iaiLitkPQmvkZbLIR+ssNaiZEc9o RLKhDm6RuPCn2LpNZYua6We/spisFOhh96/yY= 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=yBTWALKeSMafyP6LIApfq8cHJPRjNTXv8I8hYw8qPYo=; b=XknU0IdGu6X6k4ebUPIJ2RziM4yVcBfzE46qQkasO+1/7mP0XGkL0YkCFx20j6p1r7 ZXkOclVD4aAw3gaQ4ISqTGkbSZSkyAaCU683Oyrs4i18IAnEcZzJv5nzAG86dmZbEJmD dlLBbw0y6pD3P8XfROg9u0RwvP3HY81hOc8n8ZadO/VK8HAqIJ9jTDrdnIzaUQqv3Le/ iMHbNy+SefdkmeVztMo5M1sFaGVE8P+xqsB1jKTWHBXjFJBUhjTB0R2ZFZhY3vIWrkEG Iv74fUCmQfJntxAJzoHhvh36YKwvSTyU27rjV+irmYd/bVWsSyYCzlrCSspT0qLgi9zL 5qRg== X-Gm-Message-State: AMCzsaUb+B90fKl7zYTo56ubPNzPvvGfNRxVyQTVtwlgFAwkdAwOhVvO APsB17R4Nj8wxS6sjz/M7ixYOX22xmI= X-Received: by 10.28.109.220 with SMTP id b89mr2725391wmi.30.1508954402640; Wed, 25 Oct 2017 11:00:02 -0700 (PDT) Received: from localhost.localdomain ([160.161.173.60]) by smtp.gmail.com with ESMTPSA id y29sm3255305wrd.3.2017.10.25.11.00.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Oct 2017 11:00:01 -0700 (PDT) From: Ard Biesheuvel To: edk2-devel@lists.01.org, leif.lindholm@linaro.org Date: Wed, 25 Oct 2017 18:59:27 +0100 Message-Id: <20171025175947.22798-4-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171025175947.22798-1-ard.biesheuvel@linaro.org> References: <20171025175947.22798-1-ard.biesheuvel@linaro.org> Subject: [edk2] [PATCH edk2-platforms v2 03/23] Silicon/SynQuacer: add MemoryInitPeiLib implementation 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 MIME-Version: 1.0 Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" Replace the common MemoryInitPeiLib implementation with one that does not remove the primary FV from the memory map. This is a waste of memory and TLB entries, given that the OS can no longer use a 1 GB block mapping to map this memory. Since we have our own implementation now, there is no point in using ArmPlatformLib's GetVirtualMemoryMap() implementation, and we can simply declare and map the regions directly. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel --- Silicon/Socionext/SynQuacer/Library/SynQuacerMemoryInitPeiLib/SynQuacerMemoryInitPeiLib.c | 142 ++++++++++++++++++++ Silicon/Socionext/SynQuacer/Library/SynQuacerMemoryInitPeiLib/SynQuacerMemoryInitPeiLib.inf | 52 +++++++ 2 files changed, 194 insertions(+) -- 2.11.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel diff --git a/Silicon/Socionext/SynQuacer/Library/SynQuacerMemoryInitPeiLib/SynQuacerMemoryInitPeiLib.c b/Silicon/Socionext/SynQuacer/Library/SynQuacerMemoryInitPeiLib/SynQuacerMemoryInitPeiLib.c new file mode 100644 index 000000000000..dfd98a45aca5 --- /dev/null +++ b/Silicon/Socionext/SynQuacer/Library/SynQuacerMemoryInitPeiLib/SynQuacerMemoryInitPeiLib.c @@ -0,0 +1,142 @@ +/** @file +* +* Copyright (c) 2011-2015, ARM Limited. All rights reserved. +* 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 +#include + +#define ARM_MEMORY_REGION(Base, Size) \ + { (Base), (Base), (Size), ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK } + +#define ARM_UNCACHED_REGION(Base, Size) \ + { (Base), (Base), (Size), ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED } + +#define ARM_DEVICE_REGION(Base, Size) \ + { (Base), (Base), (Size), ARM_MEMORY_REGION_ATTRIBUTE_DEVICE } + +VOID +BuildMemoryTypeInformationHob ( + VOID + ); + +STATIC ARM_MEMORY_REGION_DESCRIPTOR mVirtualMemoryTable[] = { + // Memory mapped SPI NOR flash + ARM_UNCACHED_REGION (SYNQUACER_SPI_NOR_BASE, SYNQUACER_SPI_NOR_BASE), + + // DDR - 2 GB + ARM_MEMORY_REGION (SYNQUACER_SYSTEM_MEMORY_1_BASE, + SYNQUACER_SYSTEM_MEMORY_1_SZ), + + // DDR - 30 GB + ARM_MEMORY_REGION (SYNQUACER_SYSTEM_MEMORY_2_BASE, + SYNQUACER_SYSTEM_MEMORY_2_SZ), + + // DDR - 32 GB +// ARM_MEMORY_REGION (SYNQUACER_SYSTEM_MEMORY_3_BASE, +// SYNQUACER_SYSTEM_MEMORY_3_SZ), + + // SynQuacer OnChip peripherals + ARM_DEVICE_REGION (SYNQUACER_PERIPHERALS_BASE, + SYNQUACER_PERIPHERALS_SZ), + + // SynQuacer OnChip non-secure SRAM + ARM_UNCACHED_REGION (SYNQUACER_NON_SECURE_SRAM_BASE, + SYNQUACER_NON_SECURE_SRAM_SZ), + + // SynQuacer GIC-500 + ARM_DEVICE_REGION (SYNQUACER_GIC500_DIST_BASE, SYNQUACER_GIC500_DIST_SIZE), + ARM_DEVICE_REGION (SYNQUACER_GIC500_RDIST_BASE, SYNQUACER_GIC500_RDIST_SIZE), + + // SynQuacer eMMC(SDH30) + ARM_DEVICE_REGION (SYNQUACER_EMMC_BASE, SYNQUACER_EMMC_BASE_SZ), + + // SynQuacer EEPROM - could point to NOR flash as well + ARM_DEVICE_REGION (FixedPcdGet32 (PcdEepRomBase), SIZE_64KB), + + // SynQuacer NETSEC + ARM_DEVICE_REGION (SYNQUACER_NETSEC_BASE, SYNQUACER_NETSEC_BASE_SZ), + + // PCIe control registers + ARM_DEVICE_REGION (SYNQUACER_PCIE_BASE, SYNQUACER_PCIE_SIZE), + + // PCIe config space + ARM_DEVICE_REGION (SYNQUACER_PCI_SEG0_CONFIG_BASE, + SYNQUACER_PCI_SEG0_CONFIG_SIZE), + ARM_DEVICE_REGION (SYNQUACER_PCI_SEG1_CONFIG_BASE, + SYNQUACER_PCI_SEG1_CONFIG_SIZE), + + // PCIe I/O space + ARM_DEVICE_REGION (SYNQUACER_PCI_SEG0_PORTIO_MEMBASE, + SYNQUACER_PCI_SEG0_PORTIO_MEMSIZE), + ARM_DEVICE_REGION (SYNQUACER_PCI_SEG1_PORTIO_MEMBASE, + SYNQUACER_PCI_SEG1_PORTIO_MEMSIZE), + + { } +}; + +EFI_STATUS +EFIAPI +MemoryPeim ( + IN EFI_PHYSICAL_ADDRESS UefiMemoryBase, + IN UINT64 UefiMemorySize + ) +{ + EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttributes; + RETURN_STATUS Status; + + ResourceAttributes = + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_TESTED; + + BuildResourceDescriptorHob ( + EFI_RESOURCE_SYSTEM_MEMORY, + ResourceAttributes, + SYNQUACER_SYSTEM_MEMORY_1_BASE, + SYNQUACER_SYSTEM_MEMORY_1_SZ); + + BuildResourceDescriptorHob ( + EFI_RESOURCE_SYSTEM_MEMORY, + ResourceAttributes, + SYNQUACER_SYSTEM_MEMORY_2_BASE, + SYNQUACER_SYSTEM_MEMORY_2_SZ); + +// BuildResourceDescriptorHob ( +// EFI_RESOURCE_SYSTEM_MEMORY, +// ResourceAttributes, +// SYNQUACER_SYSTEM_MEMORY_3_BASE, +// SYNQUACER_SYSTEM_MEMORY_3_SZ); + + Status = ArmConfigureMmu (mVirtualMemoryTable, NULL, NULL); + ASSERT_EFI_ERROR (Status); + if (EFI_ERROR (Status)) { + return Status; + } + + if (FeaturePcdGet (PcdPrePiProduceMemoryTypeInformationHob)) { + // Optional feature that helps prevent EFI memory map fragmentation. + BuildMemoryTypeInformationHob (); + } + return EFI_SUCCESS; +} diff --git a/Silicon/Socionext/SynQuacer/Library/SynQuacerMemoryInitPeiLib/SynQuacerMemoryInitPeiLib.inf b/Silicon/Socionext/SynQuacer/Library/SynQuacerMemoryInitPeiLib/SynQuacerMemoryInitPeiLib.inf new file mode 100644 index 000000000000..c699510d7db7 --- /dev/null +++ b/Silicon/Socionext/SynQuacer/Library/SynQuacerMemoryInitPeiLib/SynQuacerMemoryInitPeiLib.inf @@ -0,0 +1,52 @@ +#/** @file +# +# Copyright (c) 2011-2014, ARM Ltd. All rights reserved.
+# 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 = 0x00010019 + BASE_NAME = SynQuacerMemoryInitPeiLib + FILE_GUID = c69d3ce7-098c-4fcd-afb4-15fb05a39308 + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = MemoryInitPeiLib|SEC PEIM + +[Sources] + SynQuacerMemoryInitPeiLib.c + +[Packages] + ArmPkg/ArmPkg.dec + EmbeddedPkg/EmbeddedPkg.dec + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + Silicon/Socionext/SynQuacer/SynQuacer.dec + Silicon/Socionext/SynQuacer/Drivers/Net/NetsecDxe/NetsecDxe.dec + +[LibraryClasses] + ArmLib + ArmMmuLib + DebugLib + +[FeaturePcd] + gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob + +[FixedPcd] + gArmTokenSpaceGuid.PcdGicDistributorBase + gArmTokenSpaceGuid.PcdGicRedistributorsBase + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize + gNetsecDxeTokenSpaceGuid.PcdEepRomBase