From: Stefan Roese <sr@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] Antw: Re: [PATCH] Add first Netstal board HCU4
Date: Tue, 10 Apr 2007 10:30:20 +0200 [thread overview]
Message-ID: <200704101030.21228.sr@denx.de> (raw)
In-Reply-To: <ev5roc$qoo$1@sea.gmane.org>
Hi Niklaus,
please find some comments below:
On Friday 06 April 2007 18:16, Niklaus Giger wrote:
> diff --git a/cpu/ppc4xx/40x_spd_sdram.c b/cpu/ppc4xx/40x_spd_sdram.c
> index 19c4f76..f1e9b38 100644
> --- a/cpu/ppc4xx/40x_spd_sdram.c
> +++ b/cpu/ppc4xx/40x_spd_sdram.c
> @@ -104,6 +104,7 @@
>
> /* function prototypes */
> int spd_read(uint addr);
> +void program_ecc (void *bank_base_addr, unsigned long num_bytes, int bank);
>
>
> /*
> @@ -306,6 +307,10 @@ long int spd_sdram(int(read_spd)(uint addr))
> sdram0_ecccfg = 0xf << SDRAM0_ECCCFG_SHIFT;
> ecc_on = 1;
> } else {
> +#if defined(CONFIG_ECC)
> + debug("%s: no ECC as spd 11: %d 6: %d 14: %d\n", __FUNCTION__,
> + read_spd(11), read_spd(6), read_spd(14));
> +#endif
> sdram0_ecccfg = 0;
> ecc_on = 0;
> }
> @@ -426,7 +431,9 @@ long int spd_sdram(int(read_spd)(uint addr))
> * program all the registers.
> * -------------------------------------------------------------------*/
>
> -#define mtsdram0(reg, data) mtdcr(memcfga,reg);mtdcr(memcfgd,data)
> +#define mfsdram0(reg, data) { mtdcr(memcfga,reg);data = mfdcr(memcfgd); }
> +#define mtsdram0(reg, data) mtdcr(memcfga,reg);mtdcr(memcfgd,data)
> +
As Wolfgang already mentioned, this needs to be implemented differently.
I know, the current implementation lacks this too. I suggest to remove
these #defines from this file completely and move them to
include/ppc405.h (as done in include/ppc440.h already):
/*
* Macros for accessing the indirect SDRAM controller registers
*/
#define mtsdram(reg, data) do { mtdcr(memcfga,reg);mtdcr(memcfgd,data); } while (0)
#define mfsdram(reg, data) do { mtdcr(memcfga,reg);data = mfdcr(memcfgd); } while (0)
And please change the name from "mtsdram0" to "mtsdram" so they match
the defines done in include/ppc440.h.
> /* disable memcontroller so updates work */
> mtsdram0( mem_mcopt1, 0 );
>
> @@ -449,9 +456,11 @@ long int spd_sdram(int(read_spd)(uint addr))
> /* SDRAM have a power on delay, 500 micro should do */
> udelay(500);
> sdram0_cfg = SDRAM0_CFG_DCE | SDRAM0_CFG_BRPF(1) | SDRAM0_CFG_ECCDD |
> SDRAM0_CFG_EMDULR;
Your patch is line wrapped. Please make sure this doesn't happen with
the next version.
> - if (ecc_on)
> - sdram0_cfg |= SDRAM0_CFG_MEMCHK;
> mtsdram0(mem_mcopt1, sdram0_cfg);
> +#ifdef CONFIG_ECC
> + if (ecc_on)
> + program_ecc(0, total_size, 0);
> +#endif
>
> return (total_size);
> }
> @@ -466,4 +475,75 @@ int spd_read(uint addr)
> return 0;
> }
>
> +#define SDRAM_ECCCFG_CE0 0x00800000 /* ECC Correction Enable for Bank 0 */
> +#define SDRAM_ECCCFG_CE1 0x00400000 /* ECC Correction Enable for Bank 1 */
> +#define SDRAM_ECCCFG_CE2 0x00200000 /* ECC Correction Enable for Bank 2 */
> +#define SDRAM_ECCCFG_CE3 0x00100000 /* ECC Correction Enable for Bank 3 */
> +
> +#define SDRAM_ECCESR_ERROR_MASK 0xFFF0F000 /* All possible ECC errors */
Please move these defines to the include/ppc405.h header.
> +#define ECC_TEST_VALUE 0xaffeaffe
> +
> +/*
> + * Prepare for ECC operation
> + * Step 1: Enable ECC generation but not checks
> + * Step 2: Fill all memory
> + * Step 3: Enable ECC generation and checks
> + * Only programmed for and tested on a PPC405GPr board using:
> + * bank 0 and 32 bit wide !!!
> + */
> +void program_ecc (void *bank_base_addr, unsigned long num_bytes, int bank)
> +{
> + unsigned long current_address;
> + unsigned long end_address;
> + unsigned long address_increment;
> + unsigned long cfg0;
Please insert a blank line after the variable declarations.
> + if (bank != 0)
> + {
> + printf("\n%s: only bank 0 supported", __FUNCTION__);
> + return;
> + }
> +
> + /*
> + * get Memory Controller Options 0 data
> + */
> + mfsdram0(mem_mcopt1, cfg0);
> +
> + cfg0 &= ~SDRAM0_CFG_EMDULR & ~SDRAM0_CFG_MEMCHK;
I find this better readable:
cfg0 &= ~(SDRAM0_CFG_EMDULR | SDRAM0_CFG_MEMCHK);
> + debug("%s: length 0x%x bytes bank_base_addr %p\n", __FUNCTION__,
> + num_bytes, bank_base_addr);
> + debug("%s: cfg0 disable checking -> 0x%08x\n", __FUNCTION__, cfg0);
> + /*
> + * reset the bank_base address
> + */
> + mtsdram0(mem_ecccf, 0); /* disable correction */
> + mtsdram0(mem_eccerr, SDRAM_ECCESR_ERROR_MASK); /* Clear all errors */
> + mtsdram0(mem_mcopt1, cfg0);
> +
> + address_increment = 4;
> + current_address = (unsigned long)(bank_base_addr);
> + end_address = (unsigned long)(bank_base_addr) + num_bytes;
> +
> + while (current_address < end_address) {
> + *((unsigned long*)current_address) = 0;
> + current_address += address_increment;
> + }
> +
> + mtsdram0(mem_eccerr, SDRAM_ECCESR_ERROR_MASK); /* Clear all errors */
> +
> + debug("%s: cfg0 enable checking\n", __FUNCTION__);
> + mtsdram0(mem_ecccf, SDRAM_ECCCFG_CE0); /* enable correction */
> + printf("ECC ");
> +
> +#ifdef DEBUG
> + { /* A small sanity check */
> + unsigned long *check;
> + check= (unsigned long *)bank_base_addr;
> + *check=ECC_TEST_VALUE;
Spaces before and after the "=" please.
> + if (*check != ECC_TEST_VALUE)
> + debug("%s: checking at %p is 0x%x failed\n",
> + __FUNCTION__, check, *check);
> + }
> +#endif
> +}
> +
> #endif /* CONFIG_SPD_EEPROM */
>
> Best regards
>
> Stefan Roese wrote:
> > Hi Niklaus,
> >
> > On Wednesday 14 February 2007 18:10, Niklaus Giger wrote:
> >> Here it is:
> >>
> >> diff --git a/cpu/ppc4xx/spd_sdram.c b/cpu/ppc4xx/spd_sdram.c
> >
> > Could you please generate a new patch against the current git
> > repository? I reorganized the SPD files. "40x_spd_sdram.c" is now
> > the file you want.
> >
next prev parent reply other threads:[~2007-04-10 8:30 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-09 20:37 [U-Boot-Users] [PATCH] Add first Netstal board HCU4 Niklaus Giger
2007-02-10 7:59 ` Stefan Roese
2007-02-10 9:01 ` Niklaus Giger
2007-02-10 19:15 ` Stefan Roese
2007-02-12 18:13 ` [U-Boot-Users] Antw: " Niklaus Giger
2007-02-12 19:25 ` Stefan Roese
2007-02-14 17:10 ` Niklaus Giger
2007-04-04 15:30 ` Stefan Roese
2007-04-06 16:16 ` Niklaus Giger
2007-04-06 16:58 ` Stefan Roese
2007-04-06 19:31 ` Wolfgang Denk
2007-04-06 19:39 ` Wolfgang Denk
2007-04-10 6:55 ` Stefan Roese
2007-04-10 8:30 ` Stefan Roese [this message]
2007-04-04 15:40 ` [U-Boot-Users] " Stefan Roese
2007-04-06 16:22 ` Niklaus Giger
2007-04-10 12:36 ` Stefan Roese
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200704101030.21228.sr@denx.de \
--to=sr@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox