]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
omap: emif: deal with rams that return duplicate mr data on all byte lanes
authorSteve Sakoman <steve@sakoman.com>
Wed, 30 May 2012 07:38:07 +0000 (07:38 +0000)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Sat, 7 Jul 2012 12:07:35 +0000 (14:07 +0200)
Some rams (Micron for example) return duplicate mr data on all byte lanes.

Users of the get_mr function currently don't deal with this duplicated
data gracefully.  This patch detects the duplicated data and returns only
the expected 8 bit mr data.

Signed-off-by: Steve Sakoman <steve@sakoman.com>
arch/arm/cpu/armv7/omap-common/emif-common.c

index 64427e61dad18b4c02aa139704e79bcb73c2504c..61ade4c598705ed7efb116236e08947c8de0995b 100644 (file)
@@ -77,7 +77,12 @@ static inline u32 get_mr(u32 base, u32 cs, u32 mr_addr)
                mr = readl(&emif->emif_lpddr2_mode_reg_data);
        debug("get_mr: EMIF%d cs %d mr %08x val 0x%x\n", emif_num(base),
              cs, mr_addr, mr);
-       return mr;
+       if (((mr & 0x0000ff00) >>  8) == (mr & 0xff) &&
+           ((mr & 0x00ff0000) >> 16) == (mr & 0xff) &&
+           ((mr & 0xff000000) >> 24) == (mr & 0xff))
+               return mr & 0xff;
+       else
+               return mr;
 }
 
 static inline void set_mr(u32 base, u32 cs, u32 mr_addr, u32 mr_val)