From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-it0-x22a.google.com (mail-it0-x22a.google.com [IPv6:2607:f8b0:4001:c0b::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 4BF8D1A1E1B for ; Mon, 8 Aug 2016 02:25:03 -0700 (PDT) Received: by mail-it0-x22a.google.com with SMTP id x130so69318078ite.1 for ; Mon, 08 Aug 2016 02:25:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=zXFCrkU1JXwPBln//UpoDf0Dtqlv8OW2lVjL0sqomz8=; b=h5Qk1EG5TyCy2SNupZYGNPe2l6iIA6HwFCgrS2/g75fGqyxG5hkVVBlm/tUF/c+8Oe bzNduHbXKWV4ZTbB7JsiKVWQjsQ1uaFEj54PoqxQOEXF/coJn8y7tN+1v+MampO1hy+/ k+zHez1ewmip+FKBS9O0nAeTjC24N9hrt2a5s= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=zXFCrkU1JXwPBln//UpoDf0Dtqlv8OW2lVjL0sqomz8=; b=ln20khqqt43U+pFkpk6DGJA397xCL7VouluTBglYZkyg3jfYUVx4qTvHGuQ4X3FZdO QdJ8ak1Xf1SUpPR7+UNRzPKY9IrC8hfkGpXknAAIpXrYYV6C7fX1i2q+pF3h/Ppljfek VWIdYKihHZSbArumhS6+7NFgywwSFzMJ8bGVV/rv2Al8sDXhX2b6rftLqrSX+BNZwHxM tNX6ijogE2lMt8kNpGWLilD3amNY19GSuxgtCJWTRZsunUtb8hgN+Tfat4zThcrcTqlX /J4izYxpvt2xiOFR6rZ23VKW7YbsDCu8LLoueQcupJG6z4eF2Rsvi6axy15/B893zaYr 0L7w== X-Gm-Message-State: AEkoouv2GlJeTRHVHrB48MQcbeY4KwcyI5VZObTYVubgn4yQTVgDQvSo9zu0yI5F0bHnMg1ttD9x9ckTOF1sDvL2 X-Received: by 10.36.107.211 with SMTP id v202mr16167022itc.51.1470648302473; Mon, 08 Aug 2016 02:25:02 -0700 (PDT) MIME-Version: 1.0 Received: by 10.36.204.195 with HTTP; Mon, 8 Aug 2016 02:25:02 -0700 (PDT) In-Reply-To: References: From: Ard Biesheuvel Date: Mon, 8 Aug 2016 11:25:02 +0200 Message-ID: To: Michael Zimmermann Cc: edk2-devel-01 Subject: Re: ARM PrePI Memory setup recommendations X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Aug 2016 09:25:03 -0000 Content-Type: text/plain; charset=UTF-8 On 8 August 2016 at 11:18, Michael Zimmermann wrote: > I'm using the defaults from the (now deleted) 2ndstage sample dsc: > gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory|0 > gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS|0 > gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType|0 > gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData|50 > gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode|20 > gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesCode|400 > gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData|20000 20000 pages == 80 MB, so this value makes little sense if you have 32 MB of memory. Dropping this to a sane value fixed some problems we saw with QEMU when running with the default 128 MB > gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode|20 > gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData|0 > > I figured that the PrePi's stack setup may cause this, especially since I'm > using all the memory up to 0xFFFFFFFF+1 which causes the logic to ignore the > last page(I think). > I'm now using PcdSystemMemorySize - PcdFdSize - EFI_PAGE_SIZE which seems to > work pretty good even though the "missing" memory was just like 900bytes and > not 4096. > > Thanks > Michael > > On Mon, Aug 8, 2016 at 10:50 AM, Ard Biesheuvel > wrote: >> >> On 6 August 2016 at 13:05, Michael Zimmermann >> wrote: >> > Hi, >> > >> > I have some problems with my current setup and would like to ask you for >> > the >> > best way to configure the following setup: >> > - I'm using PrePi, I don't need relocations because the loading address >> > is >> > fixed(0xfe000000) >> > - The SystemMemory address range is unknown at compile time >> > - the system-memory consists of multiple ranges with holes so providing >> > just >> > a base and a size is not enough >> > - There's no NOR, edk2 gets loaded into dram >> > >> > my current setup: >> > PcdSystemMemoryBase = loading addr(0xfe000000) >> > PcdSystemMemorySize = 32MB >> > FD_BASE = PcdSystemMemoryBase >> > FD_SIZE = 4MB >> > in ArmPlatformGetVirtualMemoryMap I call BuildResourceDescriptorHob for >> > all >> > DRAM memory ranges. >> > In PrePiMain after MemoryPeim I call BuildMemoryAllocationHob for some >> > reserved memory ranges >> > >> > After running into out-of-memory errors during PrePi when using bigger >> > FV's >> > I revisited everything and came across a PCD I somehow never looked at >> > when >> > setting up my platform a year ago: PcdSystemMemoryUefiRegionSize. >> > this was hardcoded to 0x00e00000 which obviously caused allocation >> > errors >> > while extracting big FV's even though PcdSystemMemorySize was big >> > enough. >> > >> > Since there already was this nice comment 'PcdSystemMemorySize - >> > PcdFdSize' >> > I did exactly that: 32MB-4MB = 28MB. >> > Unfortunately after doing that MdeModulePkg/Core/Dxe/Gcd/Gcd.c starts >> > bugging that he can't find a resource hob that contains the PHIT Hob. >> > >> >> Could you check the >> >> gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiXXX|nnnn >> >> definitions in your .DSC? Fairly recently, the core code was modified >> to use the sum of these definitions as an estimate of the minimally >> required allocation size, and it broke some other platforms in a >> similar way. >> >> > So now that my setup and problems are clear, the questions: >> > - Is it ok to define ResourceHob's that cover the PcdSystemMemory range? >> > - what can I do to fix the PHIT Hob problem? should PcdFdSize + >> > PcdSystemMemoryUefiRegionSize be smaller than PcdSystemMemorySize ? >> > - I took a quick look at ArmVirt where they change the PcdSystemMemory >> > range >> > at runtime, but they use lots of custom code like their own >> > MemoryPeiLib, >> > and I think everything but Xen uses PEIM instead of PrePi. Also as I >> > said I >> > have more than one range so this would work anyway. >> > >> >> ArmVirtQemu uses PEIM, since it runs from [emulated] NOR flash. >> ArmVirtQemuKernel and ArmVirtXen use PrePi (the former is simply >> ArmVirtQemu with the FD executing from DRAM, using the QEMU '-kernel' >> option) > >