From owner-freebsd-arm@freebsd.org Thu Feb 13 16:50:27 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 186401CCC96 for ; Thu, 13 Feb 2020 16:50:27 +0000 (UTC) (envelope-from marklmi@yahoo.com) Received: from sonic308-55.consmr.mail.gq1.yahoo.com (sonic308-55.consmr.mail.gq1.yahoo.com [98.137.68.31]) (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 48JMvP5GVrz4CyW for ; Thu, 13 Feb 2020 16:50:25 +0000 (UTC) (envelope-from marklmi@yahoo.com) X-YMail-OSG: 4swsG.0VM1kw0pQlVuKKRQbm8E88jos1xJEKNc9BnwFC4EFDMdexjPzvCFDNzQK cJs1FnhPfGnxnpk4EZ2T3ilpKFMUhhg.9DHm8ZKtmnLynUp.1BjiH9f93Mgh_oF6bCBVoAEW3gru AGq41YPT9f4cFia6bOwFLehno9hete2.PQZ5VsebxgWf8wbsF4lUmwVCfGHs94DAO8R3XPgFqsWJ J4wqUpCeWQ00RjeMlbgNUyF_YhLwSN0g2W1UphasLmdctiJd9m9ra4BB9tDAq6aeiCjjzPe6.SNf eWcKquNY_Ibx6nyaMOJdvUvA7aZCE4P3WVnT0HAZgT64y_HuMHp7buhyEvHGPQu9FPQN44X7J9W. efH7urPJyrdF0khtoCEjCkPeeAQHz_u.Wve2MNZYp.Pudd1PxhNpZQg.tl2HwMnPBCAcwD6jD8mZ uvBgdrn5Rrz3asCY7Fpdg0fpK9G78FS23fx3UMaT9cSL_8g7wnb6USajGOk4jbtLnAnf65Zj9mZH ._w7MUCZeraphe1k1KxJ.1X2Mb021CANXkHJOaDeD8GFsFfZ2koq4UfospWR7bIXLwKgncnOkemc 3N.cg5UepVh09to3Zh7LExZ60ww94n0DYHJEaGJbRCoQ3MgUOvf9nPjsW_BzhK8fr7S3At65hoev Lzg8C.UbfHBpAGHjieVeIgLRbW7Sfl2ZaeH_nNZfhvdAFuOEauPjaYTJKxf.joDYFISgYyiI9.9e 8HxRFL7EyOkPGYdF6SNyxswQ8Ro7FMzPbHQGO7C30vOfaZsjoTnj87sCVql_z_VkkIzWNoJENCF1 PRLTcYGM7q.xLw6spGabOWyiJl5YwOirzIWGdp7mgrAjcBjQHM3iLHDL9IYq04T1od2Qe2ekn11W c.Kb83EPTeWbEL15ja9ZUl.UF2gp8S.pLdEyPiA9_TKTj0tdwNYO5OZ.x3DbDh1BqF8Z6HR9k2HC _.AVnisv.aG8IF6dtauWbMovp4L3aYB0tReLKUogiww_iSpMrsEn8t_DW5edjbSscD__56oBaNsh uQ59MRII7dewsZdhYVbiAE8AmZjgNrCrUjZa3GtYkYJ8WjCsPlxTLep1NhjHXCGTX8_a.LhjMyQ0 U_KZ.nB1Rrlwx0kDR0Jjutc0tDAO80gtYbNCs8RE38MbNL263VggbvETOKFf.7wkWnDNaPDm4y6Y zTcWOYeQmPCpsPw.QeAgcEsXW.qpNFlXC4Y_OzftgKcm0ni0Yg0ZKppdDCYof1.oZGZqcj_HXWMj lNpiiHUItfjGJbYBgA8WzZs2LsjboqCAdM6Iff8WdbopReSmeEAkLPafCaPAHLOfNcC5bp_l6.oX KYYV2vlzo2WugtxyiG1_dSK1BEoRhh6qimS823miC5fpgD5B_84Xvk8.SE9qvvofHedxJmd0qH_U JIvJ.F3MlPPn6dI_KdxwhNR_mcYMJaOKe8w-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic308.consmr.mail.gq1.yahoo.com with HTTP; Thu, 13 Feb 2020 16:50:24 +0000 Received: by smtp416.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 46e103adf9fdd5ad37816621d8d85d3a; Thu, 13 Feb 2020 16:50:19 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Subject: Re: A investigative hack that makes (for example) head -r356529 boot and operate normally an RPi4B (finally!): protect all armstub8-gic.bin's loaded content from replacement by the kernel From: Mark Millard In-Reply-To: Date: Thu, 13 Feb 2020 08:50:17 -0800 Cc: Ralf Wenk , Andrew Turner , Oleksandr Tymoshenko , freebsd-arm , Emmanuel Vadot Content-Transfer-Encoding: quoted-printable Message-Id: References: <7E7605DC-021D-448A-8459-8EC26BA9836D.ref@yahoo.com> <7E7605DC-021D-448A-8459-8EC26BA9836D@yahoo.com> To: Kyle Evans X-Mailer: Apple Mail (2.3608.60.0.2.5) X-Rspamd-Queue-Id: 48JMvP5GVrz4CyW X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.45 / 15.00]; R_SPF_ALLOW(-0.20)[+ptr:yahoo.com]; FREEMAIL_FROM(0.00)[yahoo.com]; MV_CASE(0.50)[]; RCPT_COUNT_FIVE(0.00)[6]; TO_DN_ALL(0.00)[]; DKIM_TRACE(0.00)[yahoo.com:+]; SUBJECT_HAS_EXCLAIM(0.00)[]; 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)[]; SH_EMAIL_ZRD(0.00)[0.0.0.0,0.0.0.2,0.0.0.1,0.0.0.3]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-0.97)[-0.968,0]; R_DKIM_ALLOW(-0.20)[yahoo.com:s=s2048]; FROM_HAS_DN(0.00)[]; DWL_DNSWL_NONE(0.00)[yahoo.com.dwl.dnswl.org : 127.0.5.0]; SH_EMAIL_DBL_DONT_QUERY_IPS(0.00)[0.0.0.2,0.0.0.1,0.0.0.0,0.0.0.3]; NEURAL_HAM_LONG(-0.98)[-0.981,0]; MIME_GOOD(-0.10)[text/plain]; IP_SCORE(0.00)[ip: (1.89), ipnet: 98.137.64.0/21(0.82), 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)[31.68.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: Thu, 13 Feb 2020 16:50:27 -0000 On 2020-Feb-13, at 07:22, Kyle Evans wrote: > On Thu, Feb 13, 2020 at 9:05 AM Ralf Wenk = wrote: >>=20 >> On 2020-02-13 at 15:26 +0100 Ralf Wenk wrote: >>> On 2020-02-13 at 7:49 -0600 Kyle Evans wrote: >>>> On Thu, Feb 13, 2020 at 7:43 AM Ralf Wenk = wrote: >>>>>=20 >>>>> On 2020-02-12 at 18:00 -0800 Mark Millard wrote via freebsd-arm: >>>>>> [...] >>>>>>=20 >>>>>> # svnlite diff /usr/src/sys/dev/fdt/fdt_common.c >>>>>> Index: /usr/src/sys/dev/fdt/fdt_common.c >>>>>> = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >>>>>> --- /usr/src/sys/dev/fdt/fdt_common.c (revision 357529) >>>>>> +++ /usr/src/sys/dev/fdt/fdt_common.c (working copy) >>>>>> @@ -485,7 +485,18 @@ >>>>>>=20 >>>>>> tuples =3D res_len / tuple_size; >>>>>> reservep =3D (pcell_t *)&reserve; >>>>>> +#ifdef __aarch64__ >>>>>> + //HACK!!! >>>>>> + // Reserve the first few pages, for example to >>>>>> + // preserve armstub8-gic.bin or armstub.bin >>>>>> + // content. >>>>>> + mr[0].mr_start=3D 0; >>>>>> + mr[0].mr_size=3D 2*4096; >>>>>> + tuples++; >>>>>> + for (i =3D 1; i < tuples; i++) { >>>>>> +#else >>>>>> for (i =3D 0; i < tuples; i++) { >>>>>> +#endif >>>>>>=20 >>>>>> rv =3D fdt_data_to_res(reservep, addr_cells, = size_cells, >>>>>> (u_long *)&mr[i].mr_start, (u_long = *)&mr[i].mr_size); >>>>>> @@ -512,6 +523,11 @@ >>>>>>=20 >>>>>> root =3D OF_finddevice("/reserved-memory"); >>>>>> if (root =3D=3D -1) { >>>>>> + // Fail over to checking for and handling = memreserve, >>>>>> + // such as for a RPi4B. >>>>>> + if (0 =3D=3D = fdt_get_reserved_regions(reserved,mreserved)) >>>>>> + return (0); >>>>>> + >>>>>> return (ENXIO); >>>>>> } >>>>>>=20 >>>>>=20 >>>>> I can confirm that with your patch(es) my RPi3 does not freeze any = more >>>>> when loading mac_ntpd.ko. The patches are applied against = r357853M. >>=20 >> An reboot is working again too. >>=20 >>>> Have you tested the RPi3 with just this second hunk of patch to >>>> fallover to memreserve, or is the first hunk definitely required as >>>> well? >>>=20 >>> Good question. I tested both hunks together. >>> Will try what happens when just applying the second and report back. >>=20 >> Here it is: >> Without the first hunk the system freezes again when loading = mac_ntpd.ko. >> Also the CPU information during boot for CPUs 1 to 3 looks strange = again. >>=20 >=20 > Yeah- I see it now; both armstubs are about 5k. I've raised an > issue[0] with upstream for armstub/rpi bits to work out the proper > solution, because I don't necessarily want to commit the workaround. > I'll throw up the second hunk on phabricator for review by #arm/#arm64 > folks, because that seems to me the proper fallback. >=20 > I also discovered some issues when trying to read /memreserve/ with > our dtc and filed a PR[1] to fix those. >=20 > Thanks, >=20 > Kyle Evans >=20 > [0] https://github.com/raspberrypi/tools/issues/107 > [1] https://github.com/davidchisnall/dtc/pull/59 The DTB information below is from: U-Boot> fdt addr 0x7ef2000=20 U-Boot> fdt print / =20 on a RPi4B 4 GiByte. On at least the RPi4B memreserve is not what causes the first page to be excluded: memreserve =3D <0x3b400000 0x04c00000>; Nor is memory@0 the cause: memory@0 { device_type =3D "memory"; reg =3D <0x00000000 0x00000000 0x3b400000 0x00000000 = 0x40000000 0xbc000000>; }; (That also skips the memreserve area.) I do not find anything in the DTB that indicates to exclude the first page. My hypothesis is that the FreeBSD code excludes the page based on some less obvious relationship that I'm not identifying. There is the cpu-rlease-addr information that seems to refer to some 1st memory page content: cpus { #address-cells =3D <0x00000001>; #size-cells =3D <0x00000000>; enable-method =3D "brcm,bcm2836-smp"; phandle =3D <0x000000be>; cpu@0 { device_type =3D "cpu"; compatible =3D "arm,cortex-a72"; reg =3D <0x00000000>; enable-method =3D "spin-table"; cpu-release-addr =3D <0x00000000 0x000000d8>; phandle =3D <0x0000001d>; }; cpu@1 { device_type =3D "cpu"; compatible =3D "arm,cortex-a72"; reg =3D <0x00000001>; enable-method =3D "spin-table"; cpu-release-addr =3D <0x00000000 0x000000e0>; phandle =3D <0x0000001e>; }; cpu@2 { device_type =3D "cpu"; compatible =3D "arm,cortex-a72"; reg =3D <0x00000002>; enable-method =3D "spin-table"; cpu-release-addr =3D <0x00000000 0x000000e8>; phandle =3D <0x0000001f>; }; cpu@3 { device_type =3D "cpu"; compatible =3D "arm,cortex-a72"; reg =3D <0x00000003>; enable-method =3D "spin-table"; cpu-release-addr =3D <0x00000000 0x000000f0>; phandle =3D <0x00000020>; }; }; =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)