From owner-freebsd-arm@freebsd.org Mon Feb 10 06:00:25 2020 Return-Path: Delivered-To: freebsd-arm@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 46AC122E8AA for ; Mon, 10 Feb 2020 06:00:25 +0000 (UTC) (envelope-from marklmi@yahoo.com) Received: from sonic301-20.consmr.mail.gq1.yahoo.com (sonic301-20.consmr.mail.gq1.yahoo.com [98.137.64.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 48GFcm0Vytz427S for ; Mon, 10 Feb 2020 06:00:23 +0000 (UTC) (envelope-from marklmi@yahoo.com) X-YMail-OSG: d6lxq3cVM1mYWmqOeVwrrPEhGpyuiOVtuee1Em2WUXebpqL29hqGltWGA0pKred _Sbe2_8NhZZayuFBGL6KyoyQkA_GdjB2WL6TyqqtZx8hPymj4hyLseqbhB9i3_PZhV7NxZB65UCG tb9ggGL0gcp28M9ViN.No.Nc1EYid0nnyNRW._6N7oKhdezafuyNGHp65QyLnXmr98AQWGx.17.L Yec9_RWfMyZx2myXbxuJ4.RkInLPkYIr4OUt354uTELGNEw1vEHrq13Xf_Itou04PmVfPKDQvBRh AMbHzsKmnjVlBRzKOiEeQ2maEC2GGrJHh2mQyFNin6rX9sxlYziBzIXRlzvtN9wA3em0DGwnmw.S Rh.DrR_npIUSHKHe_gtl.FA9pmxDvDFBKBMgQ8YCIjOLTTrA1qSZUFVtbXFTN61DFTYdj505gKuv uhMeKi8V2D4JidhQXdR4eesHys3WYR7wvAwGUledudQBLpBEjQgt3KFO3.rvD6SkAraM_b02oV2D SdY8HoTny2eDYtm1bAYfNxezWa.KIWlg3cGuasbOa4IpNY_iralvdDuSp7DtdBTfBN2Qa7heeV51 kI__8xwjAjIGvAnB8DjkZ7l3fcK66GxuFvev6EypEy7gyqDGBcAu5sWrVmigKW.2cdgi3NEVUKu_ DRp84TLE9Z5ORC96xlWLRW1F1ZU8qxYhSxTOiFvo0wCyAmYTLAadqz6LUsHDbrynkKlJxm7hWPVT dx.s01ex7_R7iLHqdASlx59siAJFvlkszzoVD7fyPyfnk1LYrHFwfmgUDxrQEgI_tB_e_TSbSeXO 1tv59P95wAhBc5pqUXZL_jcrWlenAYj6m87tzkYJfyJ7bdXmzF.V.engebcdF.8ShoObVrexMpQM JVS0QfEeOjjcsou9RHsYaZ8Fpna0J0ThUCntvcdob7RbvR.TgcEHoyzEWVY1zvVJ08un9JLcOOQC NzKMGLbdlOeQTv13lQ1YW6sgsBMkF8jrc0uDfUtl2KmeE2PXlly97t3DUkJcDlfaWq.VISLYq6yh v61uGEdrMxxGFsf27M6AG6IcjeA4uF6DBx5mOQ_SnO7tzDNBR5ThixO6VCK77IcfZVI153BlTml0 KfGv4FbNrplmcgwzpxTuXR8TBqF8bBVqfiG0u1uQkilF.ylFsdIMMU1F.koFCCPB_IzG5849FBY_ zv_9bArsRAaHkBkfszgjPjxOWW2y71.UdJ7zCoDxLayVFbNRDL8VZOnfnps99gz6E27HRyK7v3vW BsqTyw8Xbqo42fcbbdh_peh9OnSW6pncyoVB2TydsJP8DN0i.Vi0c3syjfFc8UZjFq3jxQ0oMlqD AvLJdTlrsLmLaZnutuASJ5VjbddMngXIfLa5b3RzrYwJVXkulrYnDfWmOH_NL0wMsY4yIIH6W459 GHQ3p.aIuaJ_9j8gFDaA.VJujqhK87onc83mu8A-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic301.consmr.mail.gq1.yahoo.com with HTTP; Mon, 10 Feb 2020 06:00:22 +0000 Received: by smtp418.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 89c5868b817b0252cb40c628e1518b31; Mon, 10 Feb 2020 06:00:20 +0000 (UTC) From: Mark Millard Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Subject: Re: RPi4's memreserve use in fdt not handled by aarch64 fdt_get_reserved_mem (called via its initarm) Date: Sun, 9 Feb 2020 22:00:19 -0800 References: To: freebsd-arm , "jeff@freebsd.org" , Kyle Evans In-Reply-To: Message-Id: <6F4936C9-34A1-4490-8F5A-D1C2B2CE6232@yahoo.com> X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Rspamd-Queue-Id: 48GFcm0Vytz427S X-Spamd-Bar: - X-Spamd-Result: default: False [-1.66 / 15.00]; TO_DN_EQ_ADDR_SOME(0.00)[]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+ptr:yahoo.com]; FREEMAIL_FROM(0.00)[yahoo.com]; MV_CASE(0.50)[]; DKIM_TRACE(0.00)[yahoo.com:+]; DMARC_POLICY_ALLOW(-0.50)[yahoo.com,reject]; FROM_EQ_ENVFROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[yahoo.com]; ASN(0.00)[asn:36647, ipnet:98.137.64.0/21, country:US]; MID_RHS_MATCH_FROM(0.00)[]; DWL_DNSWL_NONE(0.00)[yahoo.com.dwl.dnswl.org : 127.0.5.0]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-0.61)[-0.611,0]; R_DKIM_ALLOW(-0.20)[yahoo.com:s=s2048]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; NEURAL_HAM_LONG(-0.55)[-0.553,0]; MIME_GOOD(-0.10)[text/plain]; IP_SCORE(0.00)[ip: (3.34), ipnet: 98.137.64.0/21(0.83), asn: 36647(0.66), country: US(-0.05)]; IP_SCORE_FREEMAIL(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[146.64.137.98.list.dnswl.org : 127.0.5.0]; RCVD_COUNT_TWO(0.00)[2] X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Feb 2020 06:00:25 -0000 On 2020-Feb-9, at 21:12, Mark Millard wrote: > aarch64 seems to be ignoring the RPi4B's memreserve use. > > My hypothesis is that head -r356776 and later are > allocating RAM areas that overlap with the > memreserve area. > > 1st see separate submittals about the live dts text reported > by fdt print in u-boot on the example RPi4B 4 GiByte machine: > > https://lists.freebsd.org/pipermail/freebsd-arm/2020-February/021207.html > https://lists.freebsd.org/pipermail/freebsd-arm/2020-February/021205.html > > Then: > > aarch64's initarm uses fdt_get_reserved_mem and not > fdt_get_reserved_regions. So, looking at what that > implies: > > int > fdt_get_reserved_mem(struct mem_region *reserved, int *mreserved) > { > pcell_t reg[FDT_REG_CELLS]; > phandle_t child, root; > int addr_cells, size_cells; > int i, rv; > > root = OF_finddevice("/reserved-memory"); > if (root == -1) { > return (ENXIO); > } > . . . (I'll not list it all to show the lack of > memreserve handling) . . . > > This does not check for and handle memreserve. > > By contrast armv7 and armv6 each have an initarm > that uses fdt_get_reserved_regions and that in > turn has: > > int > fdt_get_reserved_regions(struct mem_region *mr, int *mrcnt) > { > pcell_t reserve[FDT_REG_CELLS * FDT_MEM_REGIONS]; > pcell_t *reservep; > phandle_t memory, root; > int addr_cells, size_cells; > int i, res_len, rv, tuple_size, tuples; > > root = OF_finddevice("/"); > memory = OF_finddevice("/memory"); > if (memory == -1) { > rv = ENXIO; > goto out; > } > > if ((rv = fdt_addrsize_cells(OF_parent(memory), &addr_cells, > &size_cells)) != 0) > goto out; > > if (addr_cells > 2) { > rv = ERANGE; > goto out; > } > > tuple_size = sizeof(pcell_t) * (addr_cells + size_cells); > > res_len = OF_getproplen(root, "memreserve"); > if (res_len <= 0 || res_len > sizeof(reserve)) { > rv = ERANGE; > goto out; > } > > if (OF_getprop(root, "memreserve", reserve, res_len) <= 0) { > rv = ENXIO; > goto out; > } > . . . > > So this handles memreserve but not /reserved-memory . > > It appears that for the RPi4B's the 32-bit "normal use" > has lead to aarch64 having memreserve instead of > /reserved-memory . > I managed to make a quick test patch for head -r356529 but it did not make the RPi4B boot attempt behave differently. So, either I messed up or handling memreserve is not sufficient. (Some alternate information might be covering the address range already?) I'm not familiar with the subject matter in the code, so I may have messed up the test. I just used: # svnlite diff /usr/src/sys/dev/fdt/fdt_common.c Index: /usr/src/sys/dev/fdt/fdt_common.c =================================================================== --- /usr/src/sys/dev/fdt/fdt_common.c (revision 357529) +++ /usr/src/sys/dev/fdt/fdt_common.c (working copy) @@ -512,6 +512,11 @@ root = OF_finddevice("/reserved-memory"); if (root == -1) { + // Fail over to checking for and handling memreserve, + // such as for a RPi4B. + if (0 == fdt_get_reserved_regions(reserved,mreserved)) + return (0); + return (ENXIO); } === Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)