[U-Boot] [PATCH] POST: Added ECC memory test for mpc83xx.

Joakim Tjernlund joakim.tjernlund at transmode.se
Sat Apr 17 11:07:23 CEST 2010


Michael Zaidman <michael.zaidman at gmail.com> wrote on 2010/04/16 18:44:12:
>
> On Fri, Apr 16, 2010 at 1:25 AM, Kim Phillips
> <kim.phillips at freescale.com> wrote:
> > On Thu, 8 Apr 2010 10:37:08 +0200
> > Joakim Tjernlund <joakim.tjernlund at transmode.se> wrote:
> >
> >> Kim Phillips <kim.phillips at freescale.com> wrote on 2010-04-08 10:27:03:

> Although this is good for most of the cases it does not fit in the
> algorithm implemented in the post_ecc_test. The first stw in
> ppcDWstore will generate ecc error (due to read-modify-write) so ecc
> capture data registers will capture only first word as it was written
> with flipped injected error bit or without depending on its position
> in the data_error_inject_hi or data_error_inject_lo injection mask
> registers. The second ecc capture data word will hold the data that
> was in the memory right before the ppcDWstore call. Thus, the test
> validation while working for stfd will fail for stw x 2. So, the
> algorithm need to be reworked...
>
> I also agree with Joakim regarding the routine call overhead and
> replacing it by inline macro. Please review this code.
>
> From 5a64a5c4f480dcea89bc8f13f8464b96b888b73c Mon Sep 17 00:00:00 2001
> From: Michael Zaidman <michael.zaidman at gmail.com>
> Date: Fri, 16 Apr 2010 18:50:43 +0300
> Subject: [U-Boot][PATCH] asm-ppc/io.h - added 64bits I/O accessors for ppc32.
>
> Suggested-by: Joakim Tjernlund <joakim.tjernlund at transmode.se>
> Signed-off-by: Michael Zaidman <michael.zaidman at gmail.com>
> ---
>  include/asm-ppc/io.h |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 49 insertions(+), 0 deletions(-)
>
> diff --git a/include/asm-ppc/io.h b/include/asm-ppc/io.h
> index 4ddad26..0d5e125 100644
> --- a/include/asm-ppc/io.h
> +++ b/include/asm-ppc/io.h
> @@ -231,6 +231,31 @@ extern inline unsigned in_be32(const volatile
> unsigned __iomem *addr)
>     return ret;
>  }
>
> +/* 64 bits I/O read accessor for ppc32 */
> +extern inline void in_be64(volatile unsigned __iomem *addr, volatile
> unsigned __iomem *ret)
> +{
> +/* FIXME: Add other CPUs without FPU here... */
> +#if defined(CONFIG_MPC832x)
> +   __asm__ __volatile__(
> +         "sync\n"
> +         "lwz%U0%X0 0,%0\n"
> +         "stw%U1%X1 0,%1\n"
> +         "lwz%U0%X0 0,4+%0\n"
> +         "stw%U1%X1 0,4+%1\n"
> +         "isync"
> +         :"=m" (*ret)
> +         :"m"  (*addr), "r" (addr), "r" (ret));

To emulate FP better you should do 2 loads first and then 2 stores.
It is also faster.



More information about the U-Boot mailing list