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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

14

主题

102

帖子

821

积分

创龙

Rank: 8Rank: 8

积分
821
楼主
发表于 2014-9-11 18:55:41 | 显示全部楼层
DDR通过检查最大有效地址来识别容量,具体请看uboot的common/memsize.c文件中的检查代码,也可以看如下:
& D5 [4 Y% [; M( D% }9 e- H/*4 B4 w7 v3 N5 R: U* }# `" L- f7 `
* Check memory range for valid RAM. A simple memory test determines2 I( \& k: u- \# J& S
* the actually available RAM size between addresses `base' and7 f( x' c: X( ~! P% w( Z
* `base + maxsize'.
; S, D' Y7 I6 U- v$ q5 o! f*/
' ]* j, J; a1 y1 p  \long get_ram_size(long *base, long maxsize)4 K( Q3 X6 Z9 }2 C  I6 k9 s5 Y7 S9 w
{
! e3 W. T+ q" c9 s& ^        volatile long *addr;
- [5 |) \# r# X) e3 u. ]& p        long           save[32];( O* |4 ^; u1 W2 P7 \+ n% J
        long           cnt;; W4 W' m* q3 l* {7 C
        long           val;: ?/ O! a8 i/ j+ k5 ]; {- S/ u
        long           size;
" K1 Z1 @) I3 s! q* s- M+ J        int            i = 0;5 Z2 W0 V4 R- s5 ]4 \

$ f# F+ o3 O* V        for (cnt = (maxsize / sizeof (long)) >> 1; cnt > 0; cnt >>= 1) {
, `& H. S! h1 u9 U( n                addr = base + cnt;        /* pointer arith! */
* B* {5 T/ `1 h7 I. ~                sync ();
9 b& g1 Y% @/ t! k& m                save[i++] = *addr;
" w9 I4 o$ b( P, K- X                sync ();, ?- b, z& z- }7 A( B' ~! c& ~
                *addr = ~cnt;
' L; i+ k, T4 T7 Y9 v        }( z9 _! ^) @) S4 T

( {, {2 i( ]8 _  g4 {7 o+ W7 L6 }        addr = base;
3 c0 E  \/ x* ?' H7 u- A. Q        sync ();3 R% h. r! c% o2 E
        save = *addr;
0 \' m+ Z7 i/ w        sync ();
' E* k  ?1 i) k, [        *addr = 0;- f8 O! H* y- S9 ]2 s

# P" v7 y  \5 \        sync ();
8 [8 A6 Q) A/ K5 C3 N        if ((val = *addr) != 0) {
( _+ `0 d" G/ j4 Z4 W  v) V) m, e                /* Restore the original data before leaving the function.& t- L2 U2 S1 I9 s, P% C
                 */$ D7 Q3 f' B! h
                sync ();
* j  M" }( O0 y% V: k. }5 M- b$ K                *addr = save;
4 U% [7 Z* J. {; O                for (cnt = 1; cnt < maxsize / sizeof(long); cnt <<= 1) {/ Y7 z: ]; \. b8 j
                        addr  = base + cnt;
2 }+ n7 f# s1 B7 D                        sync ();
& x8 D9 Y$ l7 c6 A/ K. M4 d5 N                        *addr = save[--i];# H" Z1 R$ [! {9 T. c: k7 ~
                }' J4 p, n/ w! u5 H2 B
                return (0);6 Y+ i/ N5 y. `$ x
        }
! [' P+ R: J3 Z
; H$ H  }% E. \! G+ W: J4 k, r# o        for (cnt = 1; cnt < maxsize / sizeof (long); cnt <<= 1) {& @, P+ m) @2 S( N9 u5 l/ a! X& r
                addr = base + cnt;        /* pointer arith! */6 |7 p. r- q3 z; b
                val = *addr;
1 z1 G- l4 w% d: b6 b1 d9 w                *addr = save[--i];2 ?3 v% F" Y( N4 j2 w) \! }
                if (val != ~cnt) {2 G; ^7 z7 R4 k5 V& `! A
                        size = cnt * sizeof (long);5 |  c) R* h0 ?$ H: k/ u
                        /* Restore the original data before leaving the function.; g, B' n% i, `- w! C1 \; X/ l* L! S
                         */) }( O, P; v) ?$ K8 f
                        for (cnt <<= 1; cnt < maxsize / sizeof (long); cnt <<= 1) {
; O1 v0 O. L9 I, Z                                addr  = base + cnt;
1 P& {; }. m  M" ?# Z9 x% V                                *addr = save[--i];
) z8 G' J1 a% `, T                        }- R; t" C8 v" H6 L6 z7 Q5 M8 v6 o
                        return (size);: Q) |( A  `8 Y5 {
                }
. Z0 ^5 L- H0 T' c        }/ x1 `# W9 j& C8 [

/ V7 _- @& Q0 t( w5 t" N" g5 q        return (maxsize);1 H# t5 U4 k* x+ j% r# ^& ~
}
) ], }  W! D7 Kint dram_init(void)$ a- ]: {3 j7 Z- C8 v& h- R
{
9 T; `; A3 U! N' v        /* dram_init must store complete ramsize in gd->ram_size */
. b! c1 g0 ]- |+ C8 E& ~' D+ l        gd->ram_size = get_ram_size(2 o- o" V- z; Q+ n- D7 d
                        (void *)CONFIG_SYS_SDRAM_BASE,
+ r2 ]7 c; ?+ B: y, O3 @  T                        CONFIG_MAX_RAM_BANK_SIZE);
0 i. H$ `! ~8 |2 l        return 0;' \" }2 Z; I( H
}
3 J7 g) e" D. c! H+ t1 i( x5 Z+ X" y- v
  i1 O2 Z* ~6 h5 q2 a
8 J/ Y, e1 m$ H
6 f+ A3 M* j6 G$ B
FLASH是通过检查FLASH内部的ID识别容量,希望对您有帮助!
$ Z) s+ N9 V, y
) n% w* U9 p+ s% a! r+ O& e
8 A! u, Y4 r% R% ?9 W

. F4 @) }9 M! [" g# C
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 08:35 , Processed in 0.033557 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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