From mboxrd@z Thu Jan 1 00:00:00 1970 From: Albert ARIBAUD Date: Thu, 5 Feb 2015 15:15:49 +0100 Subject: [U-Boot] [PATCH 3/5] arm: Allow lr to be saved by board code In-Reply-To: References: <1423023534-4318-1-git-send-email-sjg@chromium.org> <1423023534-4318-3-git-send-email-sjg@chromium.org> <20150204095916.5c5cbb31@lilith> Message-ID: <20150205151549.4cc1a6aa@lilith> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Simon, On Wed, 4 Feb 2015 19:51:36 -0700, Simon Glass wrote: > Hi Albert, > > On 4 February 2015 at 01:59, Albert ARIBAUD wrote: > > Hello Simon, > > > > On Tue, 3 Feb 2015 21:18:52 -0700, Simon Glass > > wrote: > >> The link register value can be required on some boards (e.g. FEL mode on > >> sunxi) so stash it to r4 before jumping to save_boot_params(). > > > > I'd rather not make this there; I would like save_boot_params to start > > with as unmodified a core state as possible, because r4 might > > actually, now or in the future, contain important data. > > > > I'd even go as far as saying that save_boot_params should be branched > > into rather than called, and should branch back to a fixed label right > > after reset, so that even lr is preserved. For SoCs which do not need > > to save any boot parameters, a weak version of save_boot_params would > > just do the branching back. > > > > (this should help merging all start.S instances into a singe one, > > which I still want to achieve one day) > > I did consider this but was worried that some save_boot_params() > functions are written in C (OMAP) so this would not work. But if we > can require it to be written in assembler, or provide an asm macro to > return from the C function, then I can do that. What do you think? I think that save_boot_params runs right at reset and cannot rely on any C environment at all, and should indeed be written in asm and only deal with *very urgent* savings; only those registers that would be lost almost immediately, like r0-r14 and some system registers. Anything else is less urgent and can be processed later, possibly even in board_init_f(). That being said, OMAP does not have save_boot_params in C that I can find; actualy, doing a 'git grep save_boot_param -- *.c' shows only one occurrence, in arch/arm/cpu/armv7/exynos/spl_boot.c, ar line 312, and it's an empty function. OMAP has an s_init C implementation, though. > Regards, > Simon Amicalement, -- Albert.