TL138 uboot是怎么区分配置两款核心板的 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4211|回复: 1
打印 上一主题 下一主题

TL138 uboot是怎么区分配置两款核心板的

[复制链接]

14

主题

102

帖子

821

积分

创龙

Rank: 8Rank: 8

积分
821
楼主
发表于 2014-9-11 18:55:41 | 显示全部楼层
DDR通过检查最大有效地址来识别容量,具体请看uboot的common/memsize.c文件中的检查代码,也可以看如下:
5 x% ~3 O* g& ^/*) W5 S, }6 n; X8 W4 l
* Check memory range for valid RAM. A simple memory test determines
- b: e, Y- t% O# I* the actually available RAM size between addresses `base' and
5 ~+ r3 [' }0 R  _3 g# x* `base + maxsize'.+ a1 F1 u1 [3 ?7 x( g7 R9 G
*/
  G! i1 F& g; Z2 c/ flong get_ram_size(long *base, long maxsize)8 w. E+ m: H; G( |( v, z, u
{
8 ]) C2 R, B) Z: g4 Q        volatile long *addr;( s. t" ]  C$ W8 U3 }: N2 m7 `
        long           save[32];
8 x# j; z5 u3 @& y% F; P. B6 D% h        long           cnt;  p# V9 k) i1 d$ S% F7 Z$ Q
        long           val;$ u2 o3 m% E" u$ P% g+ I3 S
        long           size;
# `2 m, O. {1 u+ T# ]* Q. Z$ v2 q        int            i = 0;, T  p% h  J, k" |" i
& h' U- r; T; [' F* J  }* Y0 y
        for (cnt = (maxsize / sizeof (long)) >> 1; cnt > 0; cnt >>= 1) {. U! q. B, [& e; V2 g% W& [! F3 @
                addr = base + cnt;        /* pointer arith! */
! i* u& c: }  o7 D: R, @" ]$ f                sync ();
" i# B! N0 G  a3 n                save[i++] = *addr;
4 Q$ ?! b5 r+ Q/ \$ u3 k                sync ();# `3 K' u2 \$ ^+ E
                *addr = ~cnt;
9 j$ z* c1 d: y! |( c4 `        }% }! v: c8 H& c
/ j) `; J" ]8 g
        addr = base;
( k% F; \1 O* M, r/ M5 [        sync ();
1 _+ I7 n- _% z2 x9 o5 X8 V        save = *addr;' x; t4 Y  w, b) U. s1 G0 ]* Z5 p
        sync ();
  q, O& v2 L4 I! K        *addr = 0;
7 ~6 E" Z- Q9 b! u4 @; C
5 r# ~% E( T' L6 q. B4 @8 l        sync ();8 ?; X+ t1 |; C/ b& ~3 f/ O6 R. M
        if ((val = *addr) != 0) {
3 t' I/ l) d$ M( t& _- m, S                /* Restore the original data before leaving the function.
8 u, G4 c; U4 c/ v' ?7 Z+ p                 */' s# W, n. R5 s, G& W9 B
                sync ();
  R. W. A- k. a, S; f/ Z0 w                *addr = save;
! R% j/ q+ `' P                for (cnt = 1; cnt < maxsize / sizeof(long); cnt <<= 1) {( ]$ J3 O* R0 b
                        addr  = base + cnt;
0 d  i0 a- x5 I) I4 H                        sync ();# Q8 r5 P* _6 K+ D) ?
                        *addr = save[--i];
/ `  M4 F5 E, P. }  K4 F                }2 ^$ O( A, A8 {0 T
                return (0);
: h9 Z# W" k4 G# ^- S) x        }
! X1 X, J1 K3 U* \3 \. a: x8 i' C. |/ ^( a) n- b. r- {0 ?. B
        for (cnt = 1; cnt < maxsize / sizeof (long); cnt <<= 1) {& y$ I  z7 j! s2 f% x% M$ l
                addr = base + cnt;        /* pointer arith! */) s) r$ l* S4 q( x4 F! B& e
                val = *addr;
2 l) [/ i1 M' O/ s1 P7 V5 X3 a                *addr = save[--i];
0 R. y( A- c/ o( ?$ z, J                if (val != ~cnt) {
2 H+ T, C( x! y% B) z) p8 Q                        size = cnt * sizeof (long);
! }; {8 k$ F& q/ s6 H( L                        /* Restore the original data before leaving the function.
1 N( k; P/ B1 x6 c6 y& v                         */; p4 n; n9 d+ T( z- I
                        for (cnt <<= 1; cnt < maxsize / sizeof (long); cnt <<= 1) {  L; ~6 q" H% j  @/ k
                                addr  = base + cnt;2 v: j1 V/ q# T
                                *addr = save[--i];- f  @1 l% b: L. k
                        }
- S- K( b2 m$ Q* S7 X                        return (size);" r- N. g# f3 F$ j
                }
- a+ J; S1 O) T( @# `        }9 y4 c" R" S+ I9 A5 J7 v: q
) e3 I/ a+ j. _0 M
        return (maxsize);
9 J1 G& Y' J6 |5 b# z}
7 w3 t9 C: E: Z9 o0 Kint dram_init(void)
6 {) e- [& C- U8 ^/ \{
; a8 F9 G; f8 |: p# b) v0 J        /* dram_init must store complete ramsize in gd->ram_size */
4 [" w( a+ @0 m# Y        gd->ram_size = get_ram_size(
6 j& Z! ^0 `; P: z" G1 s                        (void *)CONFIG_SYS_SDRAM_BASE,/ ^3 s" S( F+ X7 k# o3 o
                        CONFIG_MAX_RAM_BANK_SIZE);7 ]+ w, r5 p  U: Q5 W) H
        return 0;& ], ~' t# g" k2 @7 d9 _  O
}, d$ U/ S  M- w* W% J9 i
* Z& h3 o( W- {0 {# G
6 U4 Z6 @8 g8 @. o3 N, k

( x* m( v  Z. [9 v  E, ?8 s
; B( x5 j% r1 |* ?$ j( S1 q( wFLASH是通过检查FLASH内部的ID识别容量,希望对您有帮助!
" p' ^2 ]# d# m
8 w/ `( L% Z/ A4 Q+ w2 Q
2 Q5 d5 A9 ]) I$ U; b' p
: o, H/ @, v! U  _
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-14 16:47 , Processed in 0.033688 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表