Dear Pavel Machek, Minor ramblings below :)
> On Wed 2012-08-29 11:26:45, Tom Rini wrote: > > On Wed, Aug 29, 2012 at 03:41:54PM +0200, Pavel Machek wrote: > > > Hi! > > > > > > > > diff --git a/arch/arm/cpu/armv7/socfpga/u-boot-spl.lds > > > > > b/arch/arm/cpu/armv7/socfpga/u-boot-spl.lds > > > > > > > > You should setup MEMORY declarations like the other u-boot-spl linker > > > > scripts do so we get build-time confirmation that we haven't exceeded > > > > our size limitations. > > > > > > Hmm, I tried, but I don't know socfpga memory layout by heart. > > > > > > Dinh, can you help here? > > > > I think once you get the answers you should be able to re-post the > > series cleanly and depend on my v5 (or v6) branch. Thanks! > > Porting it to your v5 was easy :-). Newer patch for review is attached. > > I took oportunity to cleanup whitespace in > arch/arm/cpu/armv7/omap-common/u-boot-spl.lds. Perhaps someone can > merge that... Argh ... what about using git send-email for the patch submission please? NOTE: I really have a great deal of respect for Pavel, so i do have trouble stepping on him properly during the patch review ;-) > Thanks, > Pavel > > commit a7ecaa40d9a02e84ac81da8f49d48595d7f342ad > Author: Pavel <pa...@ucw.cz> > Date: Thu Aug 30 01:28:00 2012 +0200 > > Add changes for socfpga > > diff --git a/MAINTAINERS b/MAINTAINERS > index c5a6f2f..df48dea 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -765,6 +765,11 @@ Nagendra T S <nagen...@mistralsolutions.com> > > am3517_crane ARM ARMV7 (AM35x SoC) > > +Dinh Nguyen <dingu...@altera.com> > +Chin Liang See <cl...@altera.com> > + > + socfpga socfpga_cyclone5 > + > Kyungmin Park <kyungmin.p...@samsung.com> > > apollon ARM1136EJS > diff --git a/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds > b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds index 8867e06..1d8efb2 > 100644 > --- a/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds > +++ b/arch/arm/cpu/armv7/omap-common/u-boot-spl.lds > @@ -37,9 +37,9 @@ SECTIONS > { > .text : > { > - __start = .; > - arch/arm/cpu/armv7/start.o (.text) > - *(.text*) > + __start = .; > + arch/arm/cpu/armv7/start.o (.text) > + *(.text*) > } >.sram Maybe the cleanup should simply be split into separate patch? > . = ALIGN(4); > diff --git a/arch/arm/cpu/armv7/socfpga/Makefile > b/arch/arm/cpu/armv7/socfpga/Makefile new file mode 100644 > index 0000000..376a4bd > --- /dev/null > +++ b/arch/arm/cpu/armv7/socfpga/Makefile > @@ -0,0 +1,51 @@ > +# > +# (C) Copyright 2000-2003 > +# Wolfgang Denk, DENX Software Engineering, w...@denx.de. > +# > +# Copyright (C) 2012 Altera Corporation <www.altera.com> > +# > +# See file CREDITS for list of people who contributed to this > +# project. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation; either version 2 of > +# the License, or (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write to the Free Software > +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, > +# MA 02111-1307 USA > +# > + > + > +include $(TOPDIR)/config.mk > + > +LIB = $(obj)lib$(SOC).o > + > +SOBJS := lowlevel_init.o > +COBJS-y := misc.o timer.o > +COBJS-$(CONFIG_SPL_BUILD) += spl.o > + > +COBJS := $(COBJS-y) > +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) > +OBJS := $(addprefix $(obj),$(COBJS) $(SOBJS)) > + > +all: $(obj).depend $(LIB) > + > +$(LIB): $(OBJS) > + $(call cmd_link_o_target, $(OBJS)) > + > +######################################################################### > + > +# defines $(obj).depend target > +include $(SRCTREE)/rules.mk > + > +sinclude $(obj).depend > + > +######################################################################### > diff --git a/arch/arm/cpu/armv7/socfpga/config.mk > b/arch/arm/cpu/armv7/socfpga/config.mk new file mode 100644 > index 0000000..b72ed1e > --- /dev/null > +++ b/arch/arm/cpu/armv7/socfpga/config.mk > @@ -0,0 +1,16 @@ > +# > +# Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/ > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation; either version 2 of > +# the License, or (at your option) any later version. > +# > +# This program is distributed "as is" WITHOUT ANY WARRANTY of any > +# kind, whether express or implied; without even the implied warranty > +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +ifndef CONFIG_SPL_BUILD > +ALL-y += $(obj)u-boot.img > +endif > diff --git a/arch/arm/cpu/armv7/socfpga/lowlevel_init.S > b/arch/arm/cpu/armv7/socfpga/lowlevel_init.S new file mode 100644 > index 0000000..815073e > --- /dev/null > +++ b/arch/arm/cpu/armv7/socfpga/lowlevel_init.S > @@ -0,0 +1,79 @@ > +/* > + * Copyright (C) 2012 Altera Corporation <www.altera.com> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#include <config.h> > +#include <version.h> > + > +/* Save the parameter pass in by previous boot loader */ > +.global save_boot_params > +save_boot_params: > + /* save the parameter here */ > + > + /* > + * Setup stack for exception, which is located > + * at the end of on-chip RAM. We don't expect exception prior to > + * relocation and if that happens, we won't worry -- it will overide > + * global data region as the code will goto reset. After relocation, > + * this region won't be used by other part of program. > + * Hence it is safe. > + */ > + ldr r0, =CONFIG_SYS_INIT_RAM_ADDR > + ldr r1, =CONFIG_SYS_INIT_RAM_SIZE > + add r0, r0, r1 Won't the preprocessor compute (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_RAM_SIZE) for you? Then you'd only have to do one LDR and no ADD instruction, saving two ticks of CPU :-) > + ldr r1, =IRQ_STACK_START_IN > + str r0, [r1] > + > + bx lr > + > + > +/* Set up the platform, once the cpu has been initialized */ > +.globl lowlevel_init > +lowlevel_init: > + > + /* Remap */ > +#ifdef CONFIG_SPL_BUILD > + /* > + * SPL : configure the remap (L3 NIC-301 GPV) > + * so the on-chip RAM at lower memory instead ROM. > + */ > + ldr r0, =SOCFPGA_L3REGS_ADDRESS > + mov r1, #0x19 > + str r1, [r0] > +#else > + /* > + * U-Boot : configure the remap (L3 NIC-301 GPV) > + * so the SDRAM at lower memory instead on-chip RAM. > + */ > + ldr r0, =SOCFPGA_L3REGS_ADDRESS > + mov r1, #0x2 > + str r1, [r0] > + > + /* Private components security */ > + > + /* > + * U-Boot : configure private timer, global timer and cpu > + * component access as non secure for kernel stage (as required > + * by kernel) > + */ > + mrc p15,4,r0,c15,c0,0 > + add r1, r0, #0x54 > + ldr r2, [r1] > + orr r2, r2, #0xff > + orr r2, r2, #0xf00 > + str r2, [r1] > +#endif /* #ifdef CONFIG_SPL_BUILD */ > + mov pc, lr > diff --git a/arch/arm/cpu/armv7/socfpga/misc.c > b/arch/arm/cpu/armv7/socfpga/misc.c new file mode 100644 > index 0000000..b906701 > --- /dev/null > +++ b/arch/arm/cpu/armv7/socfpga/misc.c > @@ -0,0 +1,54 @@ > +/* > + * Copyright (C) 2012 Altera Corporation <www.altera.com> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#include <common.h> > +#include <asm/io.h> > +#include <asm/arch/reset_manager.h> > + > +DECLARE_GLOBAL_DATA_PTR; > + > +static const struct socfpga_reset_manager *reset_manager_base = > + (void *)SOCFPGA_RSTMGR_ADDRESS; > + > +/* > + * Write the reset manager register to cause reset > + */ You might want to add __attribute__((noreturn)) to this function :-) > +void reset_cpu(ulong addr) > +{ > + /* request a warm reset */ > + writel(RSTMGR_CTRL_SWWARMRSTREQ_LSB, &reset_manager_base->ctrl); > + /* > + * infinite loop here as watchdog will trigger and reset > + * the processor > + */ > + while (1) > + ; > +} [...] > diff --git a/arch/arm/cpu/armv7/socfpga/timer.c > b/arch/arm/cpu/armv7/socfpga/timer.c new file mode 100644 > index 0000000..28da4d0 > --- /dev/null > +++ b/arch/arm/cpu/armv7/socfpga/timer.c > @@ -0,0 +1,149 @@ > +/* > + * Copyright (C) 2012 Altera Corporation <www.altera.com> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#include <common.h> > +#include <asm/io.h> > +#include <asm/arch/timer.h> > + > +DECLARE_GLOBAL_DATA_PTR; > + > +static const struct socfpga_timer *timer_base = (void > *)CONFIG_SYS_TIMERBASE; + > +/* > + * Timer initialization > + */ > +int timer_init(void) > +{ > + writel(TIMER_LOAD_VAL, &timer_base->load_val); > + writel(TIMER_LOAD_VAL, &timer_base->curr_val); > + writel((readl((&timer_base->ctrl)) | 0x3), I think you should stick to programming in C here, not ((((LISP)))), so try cutting down on the ((braces)) :-) btw. what's this 0x3 magic constant ? > + (&timer_base->ctrl)); > + return 0; > +} [...] > +#include <common.h> > +#include <asm/arch/reset_manager.h> > +#include <asm/io.h> > + > +#include <netdev.h> > + > +DECLARE_GLOBAL_DATA_PTR; > + > +void show_boot_progress(int progress) > +{ > + debug("Boot reached stage %d\n", progress); > +} > + > +static inline void delay(unsigned long loops) > +{ > + __asm__ volatile ("1:\n" > + "subs %0, %1, #1\n" > + "bne 1b" : "=r" (loops) : "0" (loops)); > +} Am I flat blind or is this not used here? [...] All in all, the code is nice. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot