Date: Thu, 28 Feb 2013 09:44:51 -0800 From: Tim Kientzle <tim@kientzle.com> To: Tim Kientzle <kientzle@freebsd.org> Cc: freebsd-arm@freebsd.org, Ian Lepore <ian@freebsd.org> Subject: Re: PHYSADDR Message-ID: <8FEA3237-8ABF-4564-B672-4B4C0C6EF291@kientzle.com> In-Reply-To: <674A08B3-6600-4B77-8511-9EF54E4B9B1F@FreeBSD.org> References: <E886046B-1612-425B-902B-72D4B0E93618@freebsd.org> <1362068453.1195.40.camel@revolution.hippie.lan> <674A08B3-6600-4B77-8511-9EF54E4B9B1F@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Feb 28, 2013, at 8:58 AM, Tim Kientzle wrote: >=20 > On Feb 28, 2013, at 8:20 AM, Ian Lepore wrote: >=20 >> On Wed, 2013-02-27 at 22:27 -0800, Tim Kientzle wrote: >>> Starting to look at what is needed for a Generic ARM kernel. >>> There's a lot here; I sincerely hope I'm not the only one=85 ;-) >>>=20 >>> First up: Can we get rid of PHYSADDR? >>>=20 >>=20 >> If you mean, can we get rid of it within the runtime kernel, I'd say >> yes, because we can use a global variable instead which is easily >> settable in the entry code. >=20 > It doesn't seem to be used in the runtime kernel. As far as > I can see, it's purely a bootstrap concept. >=20 >> On the other hand, I've been working >> towards getting that value set correctly in the kernel elf headers at >> link time. A-ha! I think I just figured something out. How would the following work: * Rename PHYSADDR to KERNPHYSADDR_BASE * in the top of locore.s, we have a single conditional: #ifdef KERNPHYSADDR_BASE _kpa_base =3D KERNPHYSADDR_BASE; #else _kpa_base =3D pc & 0xF0000000; #endif I think this would DTRT on all of the configurations we currently have in SVN. * We redefine KERNPHYSADDR to be an *offset* against _kpa_base. Then we could negotiate a single offset (64k?) that works well on many platforms and use that for the GENERIC kernel. Boot loaders would be responsible for loading the kernel at an address that preserves the KPA_OFFSET. The KPA_OFFSET would be used in the ELF headers. Then there are routine code transformations to use _kpa_base instead of the compile-time symbol and to use _kpa_base + KERNPHYSADDR instead of KERNPHYSADDR. Does this sound reasonable as a starting point? It doesn't solve the trampoline problem, but I'm willing to defer that. Tim
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8FEA3237-8ABF-4564-B672-4B4C0C6EF291>