[U-Boot] building and updating u-boot on redboot based
Vipul Jain
vipulsj at gmail.com
Mon Feb 22 22:25:01 CET 2010
Hi Matthias,
I did update my board after applying the patch you sent and I found no
problem with booting up
of the board. The only visible change to me was in U-Boot version string
with latest time stamp
and -dirty appended as below.
Before Update:
U-Boot 2009.11-00400-g77e7273 (Feb 21 2010 - 01:15:31)
After Update:
U-Boot 2009.11-00400-g77e7273-dirty (Feb 22 2010 - 13:06:39)
Is there any specific test/command you would like me to execute?
Regards,
Vipul.
On Mon, Feb 22, 2010 at 12:35 PM, Matthias Kaehlcke
<matthias at kaehlcke.net>wrote:
> hi vipul,
>
> something must have gone wrong when copying the patch to the mail ...
> i attached the patch to this mail, i hope this works better
>
> thanks for testing!
>
> matthias
>
>
> El Mon, Feb 22, 2010 at 12:05:29PM -0800 Vipul Jain ha dit:
>
> > I tried to copy paste the diffs into a text file called
> > ep93xx.sdram.patch and ran patch command
> > but it rejected/failed. I did notice that in the email the diff has
> > mingled around the @@ -R +R@@
> > with the source code line as below:
> > @@ -101,6 +120,11 @@ static void setup_refresh_timer(void)
> >
> > I was wondering, if you could send me the diff in text file rather can
> > copy paste it in email.
> >
> > I am attaching the patch file I created the rej report that got
> created in
> > case you would like to
> > have a look.
> >
> > Regards,
> > Vipul.
> >
> > On Mon, Feb 22, 2010 at 1:04 AM, Matthias Kaehlcke <
> matthias at kaehlcke.net>
> > wrote:
> >
> > hi vipul,
> >
> > El Sun, Feb 21, 2010 at 01:13:22PM -0800 Vipul Jain ha dit:
> > > I had two workspaces one which I got from main u-boot source
> base
> > and
> > > other from
> > > git clone git://gitorious.org/u-boot-ep93xx/u-boot-ep93xx.git
> > > and by mistake I used u-boot.bin image build from this ep93xx
> > specific
> > >
> > > source tree which made my board unbootable. This time I build
> the
> > image
> > > from main
> > > u-boot git source while using the download tool and it powered
> up
> > as
> > > smooth as it
> > > can without any issues. so I believe that main u-boot source is
> > perfect.
> > >
> > > Sorry about any confusion. Will have to now figure out how to
> > restore
> > > linux kernel
> > > back? ... :)
> > >
> > > Please kindly let me know if you want me to perform any kind of
> > testing
> > > for ep9302.
> > > I will be more than happy if I could be of any help to you.
> >
> > as i told you in a previous mail the current SDRAM initialization
> > isn't totally correct. it works on most boards, but doesn't follow
> the
> > sequence in the specification. below is a patch that works on my
> > edb9301 and edb9307a boards, it would be good to know if this is
> also
> > true for the edb9302.
> >
> > when you find some time could you please apply it on your tree and
> > tell me if the board boots?
> >
> > thanks
> >
> > Matthias
> >
> > ---
> >
> > diff --git a/board/edb93xx/sdram_cfg.c b/board/edb93xx/sdram_cfg.c
> > index 6155f0e..61950f3 100644
> > --- a/board/edb93xx/sdram_cfg.c
> > +++ b/board/edb93xx/sdram_cfg.c
> > @@ -1,5 +1,6 @@
> > /*
> > - * Copyright (C) 2009 Matthias Kaehlcke <matthias at kaehlcke.net>
> > + * Copyright (C) 2010, 2009
> > + * Matthias Kaehlcke <matthias at kaehlcke.net>
> > *
> > * Copyright (C) 2006 Dominic Rath <Dominic.Rath at gmx.de>
> > *
> > @@ -26,13 +27,13 @@
> > #include "sdram_cfg.h"
> > #include "early_udelay.h"
> >
> > +#define PRECHARGE_BANK(bank) (*(volatile uint32_t *)
> > \
> > + (SDRAM_BASE_ADDR | SDRAM_BANK_SEL_##bank)) = 0
> > +
> > #define PROGRAM_MODE_REG(bank) (*(volatile uint32_t *)
> > \
> > (SDRAM_BASE_ADDR | SDRAM_BANK_SEL_##bank |
> > SDRAM_MODE_REG_VAL))
> >
> > -#define PRECHARGE_BANK(bank) (*(volatile uint32_t *)
> > \
> > - (SDRAM_BASE_ADDR |
> > SDRAM_BANK_SEL_##bank))
> > -
> > -static void force_precharge(void);
> > +static void precharge_all_banks(void);
> > static void setup_refresh_timer(void);
> > static void program_mode_registers(void);
> >
> > @@ -47,7 +48,7 @@ void sdram_cfg(void)
> >
> > early_udelay(200);
> >
> > - force_precharge();
> > + precharge_all_banks();
> >
> > setup_refresh_timer();
> >
> > @@ -57,19 +58,37 @@ void sdram_cfg(void)
> > writel(GLCONFIG_CKE, &sdram->glconfig);
> > }
> >
> > -static void force_precharge(void)
> > +static void precharge_all_banks(void)
> > {
> > + struct sdram_regs *sdram = (struct sdram_regs *)SDRAM_BASE;
> > +
> > + /* Issue PRECHARGE ALL commands */
> > + writel(GLCONFIG_INIT | GLCONFIG_CKE, &sdram->glconfig);
> > +
> > /*
> > - * Errata most EP93xx revisions say that PRECHARGE ALL isn't
> > always
> > - * issued.
> > + * Errata of most EP93xx revisions say that PRECHARGE ALL
> isn't
> > always
> > + * issued
> > *
> > - * Do a read from each bank to make sure they're precharged
> > + * Cirrus proposes a workaround which consists in performing
> a
> > read from
> > + * each bank to force the precharge. This causes some boards
> to
> > hang.
> > + * Writing to the SDRAM banks instead of reading has the
> same
> > + * side-effect (the SDRAM controller issues the necessary
> > precharges),
> > + * but is known to work on all supported boards
> > */
> >
> > PRECHARGE_BANK(0);
> > +
> > +#if (CONFIG_NR_DRAM_BANKS >= 2)
> > PRECHARGE_BANK(1);
> > +#endif
> > +
> > +#if (CONFIG_NR_DRAM_BANKS >= 3)
> > PRECHARGE_BANK(2);
> > +#endif
> > +
> > +#if (CONFIG_NR_DRAM_BANKS == 4)
> > PRECHARGE_BANK(3);
> > +#endif
> > }
> >
> > static void setup_refresh_timer(void)
> > @@ -101,6 +120,11 @@ static void setup_refresh_timer(void)
> >
> > static void program_mode_registers(void)
> > {
> > + struct sdram_regs *sdram = (struct sdram_regs *)SDRAM_BASE;
> > +
> > + /* Select mode register update mode */
> > + writel(GLCONFIG_MRS | GLCONFIG_CKE, &sdram->glconfig);
> > +
> >
> > La guerra es un acto abominable en el que se matan personas que
> no
> > se conocen, dirigidas por personas que se conocen y no se matan
> >
> .''`.
> > using free software / Debian GNU/Linux | http://debian.org : :'
> :
> > `.
> `'`
> > gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4
> `-
>
>
> > --- board/edb93xx/sdram_cfg.c
> > +++ board/edb93xx/sdram_cfg.c
> > @@ -1,5 +1,6 @@
> > /*
> > - * Copyright (C) 2009 Matthias Kaehlcke <matthias at kaehlcke.net>
> > + * Copyright (C) 2010, 2009
> > + * Matthias Kaehlcke <matthias at kaehlcke.net>
> > *
> > * Copyright (C) 2006 Dominic Rath <Dominic.Rath at gmx.de>
> > *
> > @@ -26,13 +27,13 @@
> > #include "sdram_cfg.h"
> > #include "early_udelay.h"
> >
> > +#define PRECHARGE_BANK(bank) (*(volatile uint32_t *) \
> > + (SDRAM_BASE_ADDR | SDRAM_BANK_SEL_##bank)) = 0
> > +
> > #define PROGRAM_MODE_REG(bank) (*(volatile uint32_t *) \
> > (SDRAM_BASE_ADDR | SDRAM_BANK_SEL_##bank |
> SDRAM_MODE_REG_VAL))
> >
> > -#define PRECHARGE_BANK(bank) (*(volatile uint32_t *) \
> > - (SDRAM_BASE_ADDR |
> SDRAM_BANK_SEL_##bank))
> > -
> > -static void force_precharge(void);
> > +static void precharge_all_banks(void);
> > static void setup_refresh_timer(void);
> > static void program_mode_registers(void);
> >
> > @@ -47,7 +48,7 @@ void sdram_cfg(void)
> >
> > early_udelay(200);
> >
> > - force_precharge();
> > + precharge_all_banks();
> >
> > setup_refresh_timer();
> >
> > @@ -57,19 +58,37 @@ void sdram_cfg(void)
> > writel(GLCONFIG_CKE, &sdram->glconfig);
> > }
> >
> > -static void force_precharge(void)
> > +static void precharge_all_banks(void)
> > {
> > + struct sdram_regs *sdram = (struct sdram_regs *)SDRAM_BASE;
> > +
> > + /* Issue PRECHARGE ALL commands */
> > + writel(GLCONFIG_INIT | GLCONFIG_CKE, &sdram->glconfig);
> > +
> > /*
> > - * Errata most EP93xx revisions say that PRECHARGE ALL isn't
> always
> > - * issued.
> > + * Errata of most EP93xx revisions say that PRECHARGE ALL isn't
> always
> > + * issued
> > *
> > - * Do a read from each bank to make sure they're precharged
> > + * Cirrus proposes a workaround which consists in performing a
> read from
> > + * each bank to force the precharge. This causes some boards to
> hang.
> > + * Writing to the SDRAM banks instead of reading has the same
> > + * side-effect (the SDRAM controller issues the necessary
> precharges),
> > + * but is known to work on all supported boards
> > */
> >
> > PRECHARGE_BANK(0);
> > +
> > +#if (CONFIG_NR_DRAM_BANKS >= 2)
> > PRECHARGE_BANK(1);
> > +#endif
> > +
> > +#if (CONFIG_NR_DRAM_BANKS >= 3)
> > PRECHARGE_BANK(2);
> > +#endif
> > +
> > +#if (CONFIG_NR_DRAM_BANKS == 4)
> > PRECHARGE_BANK(3);
> > +#endif
> > }
> >
> > static void setup_refresh_timer(void)
> > @@ -101,6 +120,11 @@ static void setup_refresh_timer(void)
> >
> > static void program_mode_registers(void)
> > {
> > + struct sdram_regs *sdram = (struct sdram_regs *)SDRAM_BASE;
> > +
> > + /* Select mode register update mode */
> > + writel(GLCONFIG_MRS | GLCONFIG_CKE, &sdram->glconfig);
> > +
>
>
> --
> Matthias Kaehlcke
> Embedded Linux Developer
> Barcelona
>
> You must have a plan. If you don't have a plan,
> you'll become part of somebody else's plan
> .''`.
> using free software / Debian GNU/Linux | http://debian.org : :' :
> `. `'`
> gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-
>
More information about the U-Boot
mailing list