[U-Boot] [PATCH v3 1/3] NAND boot: MPC8536DS support
Hu Mingkai-B21284
Mingkai.Hu at freescale.com
Mon Sep 21 08:40:33 CEST 2009
> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Saturday, September 19, 2009 12:37 AM
> To: Hu Mingkai-B21284
> Cc: u-boot at lists.denx.de; galak at kernel.crashing.org
> Subject: Re: [PATCH v3 1/3] NAND boot: MPC8536DS support
>
> On Fri, Sep 18, 2009 at 11:35:33AM +0800, Mingkai Hu wrote:
> > diff --git a/Makefile b/Makefile
> > index 99837a3..4d18a9f 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -2446,6 +2446,7 @@ vme8349_config: unconfig
> > ATUM8548_config: unconfig
> > @$(MKCONFIG) $(@:_config=) ppc mpc85xx atum8548
> >
> > +MPC8536DS_NAND_config \
> > MPC8536DS_36BIT_config \
> > MPC8536DS_config: unconfig
>
> NAND and 36BIT are orthogonal.
>
> How about changing it to:
>
> # Options: NAND, 36BIT
> MPC8536DS_%_config MPC8536DS_config: unconfig
>
I don't get it. what's the '%'? or how to use it?
> > +#if defined(CONFIG_NAND_BR_PRELIM) \
> > + && defined(CONFIG_NAND_OR_PRELIM)
> > + out_be32(&lbc->br0, CONFIG_NAND_BR_PRELIM);
> > + out_be32(&lbc->or0, CONFIG_NAND_OR_PRELIM);
> > + /* for FPGA */
> > + out_be32(&lbc->br3, CONFIG_SYS_BR3_PRELIM);
> > + out_be32(&lbc->or3, CONFIG_SYS_OR3_PRELIM);
>
> Those last two lines should probably be #ifdef CONFIG_SYS_BR3_PRELIM.
>
Ok.
> > +#if defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_SYS_INIT_L2_ADDR)
> > + ccsr_l2cache_t *l2cache = (void *)CONFIG_SYS_MPC85xx_L2_ADDR;
> > + uint l2srbar;
> > + int i;
> > +
> > + l2srbar = CONFIG_SYS_INIT_L2_ADDR;
> > + out_be32(&l2cache->l2srbar0, l2srbar);
> > +
> > + /* set MBECCDIS=1, SBECCDIS=1 */
> > + out_be32(&l2cache->l2errdis,
> > + (MPC85xx_L2ERRDIS_MBECC |
> > + MPC85xx_L2ERRDIS_SBECC));
> > +
> > + /* set L2E=1 & L2SRAM=001 */
> > + out_be32(&l2cache->l2ctl,
> > + (MPC85xx_L2CTL_L2E |
> > + MPC85xx_L2CTL_L2SRAM_ENTIRE));
> > +
> > + /* Initialize L2 SRAM to zero */
> > + for (i = 0; i < CONFIG_SYS_L2_SIZE; i++)
> > + ((char *)l2srbar)[i] = 0;
>
> "uint" is not a valid type for either virtual or physical addresses.
>
> Use a pointer (or uintptr_t if you must) for the former, and
> phys_addr_t for the latter.
>
> You're using it as char *, so why not just declare it that way?
>
Ok, change to char *.
> > +void board_init_f(ulong bootflag)
> > +{
> > + u8 sysclk_ratio;
>
> You're not saving any space over plain int/uint...
>
> > + uint plat_ratio, bus_clk, sys_clk;
> > + volatile ccsr_gur_t *gur = (void
> *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
> > +
> > + /* initialize selected port with appropriate baud rate */
> > + sysclk_ratio = *((volatile unsigned char *)(PIXIS_BASE
> + PIXIS_SPD));
> > + sysclk_ratio &= 0x7;
> > + switch (sysclk_ratio) {
> > + case 0:
> > + sys_clk = 33333000;
> > + break;
> > + case 1:
> > + sys_clk = 39999600;
> > + break;
> > + case 2:
> > + sys_clk = 49999500;
> > + break;
> > + case 3:
> > + sys_clk = 66666000;
> > + break;
> > + case 4:
> > + sys_clk = 83332500;
> > + break;
> > + case 5:
> > + sys_clk = 99999000;
> > + break;
> > + case 6:
> > + sys_clk = 133332000;
> > + break;
> > + case 7:
> > + sys_clk = 166665000;
> > + break;
> > + default:
> > + sys_clk = 0;
>
> This default: case is impossible to reach.
>
> > + break;
> > + }
>
> We could save some space by putting this in a table.
>
> > + plat_ratio = (gur->porpllsr) & 0x0000003e;
>
> Unnecessary parens.
>
> > + plat_ratio >>= 1;
>
> plat_ratio /= 2 is more readable and should generate identical code.
>
Reshaped this function(board_init_f) by table-driven method.
Thanks,
Mingkai
More information about the U-Boot
mailing list