Message ID | 1344881442-22671-4-git-send-email-msm@freescale.com |
---|---|
State | Superseded |
Delegated to: | Andy Fleming |
Headers | show |
On 08/13/2012 01:10 PM, Matthew McClintock wrote: > Let's use the more appropriate udelay for the nand_spl. While we > can't make use of u-boot's full udelay we can atl east use a for > loop that won't get optimized away .Since we have the bus clock > we can use the timebase to calculate wall time. > > Looked at reusing the u-boot udelay functions but it pulls in a lot > of code as well as depends on the gd struct and would require a lot > of rework What's wrong with depending on the gd struct? > +extern u32 bus_clk; Change to gd->bus_clk as mentioned in patch 5/6. > +void udelay(unsigned long usec) { > + u32 ticks_per_usec = bus_clk / (8 * 1000000); > + u32 ticks = ticks_per_usec * usec; > + u32 s = mfspr(SPRN_TBRL); > + > + while ((mfspr(SPRN_TBRL)-s) < ticks); > +} Opening brace goes on its own line for function definitions. Use spaces around that '-'. Dividing the bus clock by 8 only works for e500v1/v2, but this isn't labelled as specific to those cores. > diff --git a/nand_spl/board/freescale/p1010rdb/Makefile b/nand_spl/board/freescale/p1010rdb/Makefile > index 8d240ea..cdbd492 100644 > --- a/nand_spl/board/freescale/p1010rdb/Makefile > +++ b/nand_spl/board/freescale/p1010rdb/Makefile > @@ -39,7 +39,8 @@ CFLAGS += -DCONFIG_NAND_SPL > > SOBJS = start.o resetvec.o ticks.o > COBJS = cache.o cpu_init_early.o cpu_init_nand.o fsl_law.o law.o \ > - nand_boot.o nand_boot_fsl_ifc.o ns16550.o tlb.o tlb_table.o > + nand_boot.o nand_boot_fsl_ifc.o ns16550.o tlb.o tlb_table.o \ > + ../common.o > > SRCS := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c)) > OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) > @@ -123,6 +124,9 @@ ifneq ($(OBJTREE), $(SRCTREE)) > $(obj)nand_boot.c: > @rm -f $(obj)nand_boot.c > ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $(obj)nand_boot.c > +$(obj)../common.c: > + @rm -f $(obj)../common.c > + ln -s $(SRCTREE)/nand_spl/board/freescale/common.c $(obj)../common.c > endif Why are you creating a link in the parent directory? -Scott
On Mon, Aug 13, 2012 at 5:56 PM, Scott Wood <scottwood@freescale.com> wrote: > On 08/13/2012 01:10 PM, Matthew McClintock wrote: >> Let's use the more appropriate udelay for the nand_spl. While we >> can't make use of u-boot's full udelay we can atl east use a for >> loop that won't get optimized away .Since we have the bus clock >> we can use the timebase to calculate wall time. >> >> Looked at reusing the u-boot udelay functions but it pulls in a lot >> of code as well as depends on the gd struct and would require a lot >> of rework > > What's wrong with depending on the gd struct? Perhaps the wording is wrong a bit off. It's just pulling in other stuff and as you know we are very space constrained. >> +extern u32 bus_clk; > > Change to gd->bus_clk as mentioned in patch 5/6. Yes, v2 was already sent: http://patchwork.ozlabs.org/patch/177047/ >> +void udelay(unsigned long usec) { >> + u32 ticks_per_usec = bus_clk / (8 * 1000000); >> + u32 ticks = ticks_per_usec * usec; >> + u32 s = mfspr(SPRN_TBRL); >> + >> + while ((mfspr(SPRN_TBRL)-s) < ticks); >> +} > > Opening brace goes on its own line for function definitions. Use spaces > around that '-'. Will fix. > Dividing the bus clock by 8 only works for e500v1/v2, but this isn't > labelled as specific to those cores. Updated to use CONFIG_SYS_FSL_TBCLK_DIV > >> diff --git a/nand_spl/board/freescale/p1010rdb/Makefile b/nand_spl/board/freescale/p1010rdb/Makefile >> index 8d240ea..cdbd492 100644 >> --- a/nand_spl/board/freescale/p1010rdb/Makefile >> +++ b/nand_spl/board/freescale/p1010rdb/Makefile >> @@ -39,7 +39,8 @@ CFLAGS += -DCONFIG_NAND_SPL >> >> SOBJS = start.o resetvec.o ticks.o >> COBJS = cache.o cpu_init_early.o cpu_init_nand.o fsl_law.o law.o \ >> - nand_boot.o nand_boot_fsl_ifc.o ns16550.o tlb.o tlb_table.o >> + nand_boot.o nand_boot_fsl_ifc.o ns16550.o tlb.o tlb_table.o \ >> + ../common.o >> >> SRCS := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c)) >> OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) >> @@ -123,6 +124,9 @@ ifneq ($(OBJTREE), $(SRCTREE)) >> $(obj)nand_boot.c: >> @rm -f $(obj)nand_boot.c >> ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $(obj)nand_boot.c >> +$(obj)../common.c: >> + @rm -f $(obj)../common.c >> + ln -s $(SRCTREE)/nand_spl/board/freescale/common.c $(obj)../common.c >> endif > > Why are you creating a link in the parent directory? The typical build process picks out files needed for the build and symlinks them to nand_spl folder - or if building out of tree then it symlinks to the out of tree folder. This is true for all files in nand_spl as it currently exists not just this new file. -M
On 08/13/2012 06:14 PM, McClintock Matthew-B29882 wrote: > On Mon, Aug 13, 2012 at 5:56 PM, Scott Wood <scottwood@freescale.com> wrote: >> On 08/13/2012 01:10 PM, Matthew McClintock wrote: >>> Let's use the more appropriate udelay for the nand_spl. While we >>> can't make use of u-boot's full udelay we can atl east use a for >>> loop that won't get optimized away .Since we have the bus clock >>> we can use the timebase to calculate wall time. >>> >>> Looked at reusing the u-boot udelay functions but it pulls in a lot >>> of code as well as depends on the gd struct and would require a lot >>> of rework >> >> What's wrong with depending on the gd struct? > > Perhaps the wording is wrong a bit off. It's just pulling in other > stuff and as you know we are very space constrained. A struct definition doesn't take up space. Maybe you meant a dependency on certain specific code that puts things in the gd struct? >>> @@ -123,6 +124,9 @@ ifneq ($(OBJTREE), $(SRCTREE)) >>> $(obj)nand_boot.c: >>> @rm -f $(obj)nand_boot.c >>> ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $(obj)nand_boot.c >>> +$(obj)../common.c: >>> + @rm -f $(obj)../common.c >>> + ln -s $(SRCTREE)/nand_spl/board/freescale/common.c $(obj)../common.c >>> endif >> >> Why are you creating a link in the parent directory? > > The typical build process picks out files needed for the build and > symlinks them to nand_spl folder - or if building out of tree then it > symlinks to the out of tree folder. This is true for all files in > nand_spl as it currently exists not just this new file. This is the first time I've seen a link go in $(obj)../ rather than $(obj) -Scott
On Mon, Aug 13, 2012 at 6:22 PM, Scott Wood <scottwood@freescale.com> wrote: > On 08/13/2012 06:14 PM, McClintock Matthew-B29882 wrote: >> On Mon, Aug 13, 2012 at 5:56 PM, Scott Wood <scottwood@freescale.com> wrote: >>> On 08/13/2012 01:10 PM, Matthew McClintock wrote: >>>> Let's use the more appropriate udelay for the nand_spl. While we >>>> can't make use of u-boot's full udelay we can atl east use a for >>>> loop that won't get optimized away .Since we have the bus clock >>>> we can use the timebase to calculate wall time. >>>> >>>> Looked at reusing the u-boot udelay functions but it pulls in a lot >>>> of code as well as depends on the gd struct and would require a lot >>>> of rework >>> >>> What's wrong with depending on the gd struct? >> >> Perhaps the wording is wrong a bit off. It's just pulling in other >> stuff and as you know we are very space constrained. > > A struct definition doesn't take up space. Maybe you meant a dependency > on certain specific code that puts things in the gd struct? Correct. >>>> @@ -123,6 +124,9 @@ ifneq ($(OBJTREE), $(SRCTREE)) >>>> $(obj)nand_boot.c: >>>> @rm -f $(obj)nand_boot.c >>>> ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $(obj)nand_boot.c >>>> +$(obj)../common.c: >>>> + @rm -f $(obj)../common.c >>>> + ln -s $(SRCTREE)/nand_spl/board/freescale/common.c $(obj)../common.c >>>> endif >>> >>> Why are you creating a link in the parent directory? >> >> The typical build process picks out files needed for the build and >> symlinks them to nand_spl folder - or if building out of tree then it >> symlinks to the out of tree folder. This is true for all files in >> nand_spl as it currently exists not just this new file. > > This is the first time I've seen a link go in $(obj)../ rather than $(obj) It's because that's where the includes reference it. When building in tree, it does nothing because it can just reference the C file in the parent directory. When it's out of tree - we need to install the symlink in the proper location in the build folder. -M
On 08/13/2012 06:28 PM, McClintock Matthew-B29882 wrote: > On Mon, Aug 13, 2012 at 6:22 PM, Scott Wood <scottwood@freescale.com> wrote: >> On 08/13/2012 06:14 PM, McClintock Matthew-B29882 wrote: >>> On Mon, Aug 13, 2012 at 5:56 PM, Scott Wood <scottwood@freescale.com> wrote: >>>> On 08/13/2012 01:10 PM, Matthew McClintock wrote: >>>>> Let's use the more appropriate udelay for the nand_spl. While we >>>>> can't make use of u-boot's full udelay we can atl east use a for >>>>> loop that won't get optimized away .Since we have the bus clock >>>>> we can use the timebase to calculate wall time. >>>>> >>>>> Looked at reusing the u-boot udelay functions but it pulls in a lot >>>>> of code as well as depends on the gd struct and would require a lot >>>>> of rework >>>> >>>> What's wrong with depending on the gd struct? >>> >>> Perhaps the wording is wrong a bit off. It's just pulling in other >>> stuff and as you know we are very space constrained. >> >> A struct definition doesn't take up space. Maybe you meant a dependency >> on certain specific code that puts things in the gd struct? > > Correct. > >>>>> @@ -123,6 +124,9 @@ ifneq ($(OBJTREE), $(SRCTREE)) >>>>> $(obj)nand_boot.c: >>>>> @rm -f $(obj)nand_boot.c >>>>> ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $(obj)nand_boot.c >>>>> +$(obj)../common.c: >>>>> + @rm -f $(obj)../common.c >>>>> + ln -s $(SRCTREE)/nand_spl/board/freescale/common.c $(obj)../common.c >>>>> endif >>>> >>>> Why are you creating a link in the parent directory? >>> >>> The typical build process picks out files needed for the build and >>> symlinks them to nand_spl folder - or if building out of tree then it >>> symlinks to the out of tree folder. This is true for all files in >>> nand_spl as it currently exists not just this new file. >> >> This is the first time I've seen a link go in $(obj)../ rather than $(obj) > > It's because that's where the includes reference it. When building in > tree, it does nothing because it can just reference the C file in the > parent directory. When it's out of tree - we need to install the > symlink in the proper location in the build folder. I'm not thrilled with it, but it shouldn't have long to live since new-spl doesn't do the symlink thing. -Scott
diff --git a/nand_spl/board/freescale/common.c b/nand_spl/board/freescale/common.c new file mode 100644 index 0000000..9008cf4 --- /dev/null +++ b/nand_spl/board/freescale/common.c @@ -0,0 +1,36 @@ +/* + * Copyright 2012 Freescale Semiconductor, Inc. + * Author: Matthew McClintock <msm@freescale.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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + */ + + + +#include <common.h> +#include <asm/processor.h> + +extern u32 bus_clk; + +void udelay(unsigned long usec) { + u32 ticks_per_usec = bus_clk / (8 * 1000000); + u32 ticks = ticks_per_usec * usec; + u32 s = mfspr(SPRN_TBRL); + + while ((mfspr(SPRN_TBRL)-s) < ticks); +} diff --git a/nand_spl/board/freescale/p1010rdb/Makefile b/nand_spl/board/freescale/p1010rdb/Makefile index 8d240ea..cdbd492 100644 --- a/nand_spl/board/freescale/p1010rdb/Makefile +++ b/nand_spl/board/freescale/p1010rdb/Makefile @@ -39,7 +39,8 @@ CFLAGS += -DCONFIG_NAND_SPL SOBJS = start.o resetvec.o ticks.o COBJS = cache.o cpu_init_early.o cpu_init_nand.o fsl_law.o law.o \ - nand_boot.o nand_boot_fsl_ifc.o ns16550.o tlb.o tlb_table.o + nand_boot.o nand_boot_fsl_ifc.o ns16550.o tlb.o tlb_table.o \ + ../common.o SRCS := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c)) OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) @@ -123,6 +124,9 @@ ifneq ($(OBJTREE), $(SRCTREE)) $(obj)nand_boot.c: @rm -f $(obj)nand_boot.c ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $(obj)nand_boot.c +$(obj)../common.c: + @rm -f $(obj)../common.c + ln -s $(SRCTREE)/nand_spl/board/freescale/common.c $(obj)../common.c endif ######################################################################### diff --git a/nand_spl/board/freescale/p1010rdb/nand_boot.c b/nand_spl/board/freescale/p1010rdb/nand_boot.c index f5294d0..931e562 100644 --- a/nand_spl/board/freescale/p1010rdb/nand_boot.c +++ b/nand_spl/board/freescale/p1010rdb/nand_boot.c @@ -28,8 +28,6 @@ #include <asm/fsl_ddr_sdram.h> #include <asm/fsl_law.h> -#define udelay(x) { int j; for (j = 0; j < x * 10000; j++) isync(); } - unsigned long ddr_freq_mhz; void sdram_init(void) @@ -82,8 +80,7 @@ void sdram_init(void) __raw_writel((CONFIG_SYS_DDR_CS0_BNDS >> 1) & 0x0fff0fff, &ddr->cs0_bnds); } - /* mimic 500us delay, with busy isync() loop */ - udelay(100); + udelay(500); /* Let the controller go */ out_be32(&ddr->sdram_cfg, in_be32(&ddr->sdram_cfg) | SDRAM_CFG_MEM_EN); @@ -91,10 +88,11 @@ void sdram_init(void) set_next_law(CONFIG_SYS_NAND_DDR_LAW, LAW_SIZE_1G, LAW_TRGT_IF_DDR_1); } +u32 bus_clk; + void board_init_f(ulong bootflag) { u32 plat_ratio, ddr_ratio; - unsigned long bus_clk; ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR; /* initialize selected port with appropriate baud rate */ diff --git a/nand_spl/board/freescale/p1_p2_rdb_pc/Makefile b/nand_spl/board/freescale/p1_p2_rdb_pc/Makefile index 475cc49..46cf709 100644 --- a/nand_spl/board/freescale/p1_p2_rdb_pc/Makefile +++ b/nand_spl/board/freescale/p1_p2_rdb_pc/Makefile @@ -39,7 +39,8 @@ CFLAGS += -DCONFIG_NAND_SPL SOBJS = start.o resetvec.o COBJS = cache.o cpu_init_early.o cpu_init_nand.o fsl_law.o law.o \ - nand_boot.o nand_boot_fsl_elbc.o ns16550.o tlb.o tlb_table.o + nand_boot.o nand_boot_fsl_elbc.o ns16550.o tlb.o tlb_table.o \ + ../common.o SRCS := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c)) OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) @@ -119,6 +120,9 @@ ifneq ($(OBJTREE), $(SRCTREE)) $(obj)nand_boot.c: @rm -f $(obj)nand_boot.c ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $(obj)nand_boot.c +$(obj)../common.c: + @rm -f $(obj)../common.c + ln -s $(SRCTREE)/nand_spl/board/freescale/common.c $(obj)../common.c endif ######################################################################### diff --git a/nand_spl/board/freescale/p1_p2_rdb_pc/nand_boot.c b/nand_spl/board/freescale/p1_p2_rdb_pc/nand_boot.c index b9796ea..e7906e8 100644 --- a/nand_spl/board/freescale/p1_p2_rdb_pc/nand_boot.c +++ b/nand_spl/board/freescale/p1_p2_rdb_pc/nand_boot.c @@ -26,11 +26,6 @@ #include <asm/fsl_law.h> #include <asm/fsl_ddr_sdram.h> -#define udelay(x) {int i, j; \ - for (i = 0; i < x; i++) \ - for (j = 0; j < 10000; j++) \ - ; } - /* * Fixed sdram init -- doesn't use serial presence detect. */ @@ -74,9 +69,11 @@ void sdram_init(void) set_next_law(0, CONFIG_SYS_SDRAM_SIZE_LAW, LAW_TRGT_IF_DDR_1); } +u32 bus_clk; + void board_init_f(ulong bootflag) { - u32 plat_ratio, bus_clk; + u32 plat_ratio; ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR; #ifndef CONFIG_QE ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR);
Let's use the more appropriate udelay for the nand_spl. While we can't make use of u-boot's full udelay we can atl east use a for loop that won't get optimized away .Since we have the bus clock we can use the timebase to calculate wall time. Looked at reusing the u-boot udelay functions but it pulls in a lot of code as well as depends on the gd struct and would require a lot of rework Signed-off-by: Matthew McClintock <msm@freescale.com> --- nand_spl/board/freescale/common.c | 36 +++++++++++++++++++++ nand_spl/board/freescale/p1010rdb/Makefile | 6 +++- nand_spl/board/freescale/p1010rdb/nand_boot.c | 8 ++--- nand_spl/board/freescale/p1_p2_rdb_pc/Makefile | 6 +++- nand_spl/board/freescale/p1_p2_rdb_pc/nand_boot.c | 9 ++---- 5 files changed, 52 insertions(+), 13 deletions(-) create mode 100644 nand_spl/board/freescale/common.c