aboutsummaryrefslogtreecommitdiff
path: root/tcl/target/am437x.cfg
blob: 8ce0941df0278de0aecdc52f5a22700e9b67e762 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
source [find target/icepick.cfg]
source [find mem_helper.tcl]

###############################################################################
##				AM437x Registers			     ##
###############################################################################
set  PRCM_BASE_ADDR                  0x44df0000
set  REVISION_PRM                    [expr       $PRCM_BASE_ADDR     +  0x0000]
set  PRM_IRQSTATUS_MPU               [expr       $PRCM_BASE_ADDR     +  0x0004]
set  PRM_IRQENABLE_MPU               [expr       $PRCM_BASE_ADDR     +  0x0008]
set  PRM_IRQSTATUS_M3                [expr       $PRCM_BASE_ADDR     +  0x000c]
set  PRM_IRQENABLE_M3                [expr       $PRCM_BASE_ADDR     +  0x0010]
set  PM_MPU_PWRSTCTRL                [expr       $PRCM_BASE_ADDR     +  0x0300]
set  PM_MPU_PWRSTST                  [expr       $PRCM_BASE_ADDR     +  0x0304]
set  RM_MPU_RSTST                    [expr       $PRCM_BASE_ADDR     +  0x0314]
set  RM_MPU_CONTEXT                  [expr       $PRCM_BASE_ADDR     +  0x0324]
set  PM_GFX_PWRSTCTRL                [expr       $PRCM_BASE_ADDR     +  0x0400]
set  PM_GFX_PWRSTST                  [expr       $PRCM_BASE_ADDR     +  0x0404]
set  RM_GFX_RSTCTRL                  [expr       $PRCM_BASE_ADDR     +  0x0410]
set  RM_GFX_RSTST                    [expr       $PRCM_BASE_ADDR     +  0x0414]
set  RM_GFX_CONTEXT                  [expr       $PRCM_BASE_ADDR     +  0x0424]
set  RM_RTC_CONTEXT                  [expr       $PRCM_BASE_ADDR     +  0x0524]
set  RM_WKUP_RSTCTRL                 [expr       $PRCM_BASE_ADDR     +  0x2010]
set  RM_WKUP_RSTST                   [expr       $PRCM_BASE_ADDR     +  0x2014]
set  CM_L3_AON_CLKSTCTRL             [expr       $PRCM_BASE_ADDR     +  0x2800]
set  CM_WKUP_DEBUGSS_CLKCTRL         [expr       $PRCM_BASE_ADDR     +  0x2820]
set  CM_L3S_TSC_CLKSTCTRL            [expr       $PRCM_BASE_ADDR     +  0x2900]
set  CM_WKUP_ADC_TSC_CLKCTRL         [expr       $PRCM_BASE_ADDR     +  0x2920]
set  CM_L4_WKUP_AON_CLKSTCTRL        [expr       $PRCM_BASE_ADDR     +  0x2a00]
set  CM_WKUP_L4WKUP_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x2a20]
set  CM_WKUP_WKUP_M3_CLKCTRL         [expr       $PRCM_BASE_ADDR     +  0x2a28]
set  CM_WKUP_SYNCTIMER_CLKCTRL       [expr       $PRCM_BASE_ADDR     +  0x2a30]
set  CM_WKUP_CLKDIV32K_CLKCTRL       [expr       $PRCM_BASE_ADDR     +  0x2a38]
set  CM_WKUP_USBPHY0_CLKCTRL         [expr       $PRCM_BASE_ADDR     +  0x2a40]
set  CM_WKUP_USBPHY1_CLKCTRL         [expr       $PRCM_BASE_ADDR     +  0x2a48]
set  CM_WKUP_CLKSTCTRL               [expr       $PRCM_BASE_ADDR     +  0x2b00]
set  CM_WKUP_TIMER0_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x2b20]
set  CM_WKUP_TIMER1_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x2b28]
set  CM_WKUP_WDT0_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x2b30]
set  CM_WKUP_WDT1_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x2b38]
set  CM_WKUP_I2C0_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x2b40]
set  CM_WKUP_UART0_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x2b48]
set  CM_WKUP_SMARTREFLEX0_CLKCTRL    [expr       $PRCM_BASE_ADDR     +  0x2b50]
set  CM_WKUP_SMARTREFLEX1_CLKCTRL    [expr       $PRCM_BASE_ADDR     +  0x2b58]
set  CM_WKUP_CONTROL_CLKCTRL         [expr       $PRCM_BASE_ADDR     +  0x2b60]
set  CM_WKUP_GPIO0_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x2b68]
set  CM_CLKMODE_DPLL_CORE            [expr       $PRCM_BASE_ADDR     +  0x2d20]
set  CM_IDLEST_DPLL_CORE             [expr       $PRCM_BASE_ADDR     +  0x2d24]
set  CM_CLKSEL_DPLL_CORE             [expr       $PRCM_BASE_ADDR     +  0x2d2c]
set  CM_DIV_M4_DPLL_CORE             [expr       $PRCM_BASE_ADDR     +  0x2d38]
set  CM_DIV_M5_DPLL_CORE             [expr       $PRCM_BASE_ADDR     +  0x2d3c]
set  CM_DIV_M6_DPLL_CORE             [expr       $PRCM_BASE_ADDR     +  0x2d40]
set  CM_SSC_DELTAMSTEP_DPLL_CORE     [expr       $PRCM_BASE_ADDR     +  0x2d48]
set  CM_SSC_MODFREQDIV_DPLL_CORE     [expr       $PRCM_BASE_ADDR     +  0x2d4c]
set  CM_CLKMODE_DPLL_MPU             [expr       $PRCM_BASE_ADDR     +  0x2d60]
set  CM_IDLEST_DPLL_MPU              [expr       $PRCM_BASE_ADDR     +  0x2d64]
set  CM_CLKSEL_DPLL_MPU              [expr       $PRCM_BASE_ADDR     +  0x2d6c]
set  CM_DIV_M2_DPLL_MPU              [expr       $PRCM_BASE_ADDR     +  0x2d70]
set  CM_SSC_DELTAMSTEP_DPLL_MPU      [expr       $PRCM_BASE_ADDR     +  0x2d88]
set  CM_SSC_MODFREQDIV_DPLL_MPU      [expr       $PRCM_BASE_ADDR     +  0x2d8c]
set  CM_CLKMODE_DPLL_DDR             [expr       $PRCM_BASE_ADDR     +  0x2da0]
set  CM_IDLEST_DPLL_DDR              [expr       $PRCM_BASE_ADDR     +  0x2da4]
set  CM_CLKSEL_DPLL_DDR              [expr       $PRCM_BASE_ADDR     +  0x2dac]
set  CM_DIV_M2_DPLL_DDR              [expr       $PRCM_BASE_ADDR     +  0x2db0]
set  CM_DIV_M4_DPLL_DDR              [expr       $PRCM_BASE_ADDR     +  0x2db8]
set  CM_SSC_DELTAMSTEP_DPLL_DDR      [expr       $PRCM_BASE_ADDR     +  0x2dc8]
set  CM_SSC_MODFREQDIV_DPLL_DDR      [expr       $PRCM_BASE_ADDR     +  0x2dcc]
set  CM_CLKMODE_DPLL_PER             [expr       $PRCM_BASE_ADDR     +  0x2de0]
set  CM_IDLEST_DPLL_PER              [expr       $PRCM_BASE_ADDR     +  0x2de4]
set  CM_CLKSEL_DPLL_PER              [expr       $PRCM_BASE_ADDR     +  0x2dec]
set  CM_DIV_M2_DPLL_PER              [expr       $PRCM_BASE_ADDR     +  0x2df0]
set  CM_CLKSEL2_DPLL_PER             [expr       $PRCM_BASE_ADDR     +  0x2e04]
set  CM_SSC_DELTAMSTEP_DPLL_PER      [expr       $PRCM_BASE_ADDR     +  0x2e08]
set  CM_SSC_MODFREQDIV_DPLL_PER      [expr       $PRCM_BASE_ADDR     +  0x2e0c]
set  CM_CLKDCOLDO_DPLL_PER           [expr       $PRCM_BASE_ADDR     +  0x2e14]
set  CM_CLKMODE_DPLL_DISP            [expr       $PRCM_BASE_ADDR     +  0x2e20]
set  CM_IDLEST_DPLL_DISP             [expr       $PRCM_BASE_ADDR     +  0x2e24]
set  CM_CLKSEL_DPLL_DISP             [expr       $PRCM_BASE_ADDR     +  0x2e2c]
set  CM_DIV_M2_DPLL_DISP             [expr       $PRCM_BASE_ADDR     +  0x2e30]
set  CM_SSC_DELTAMSTEP_DPLL_DISP     [expr       $PRCM_BASE_ADDR     +  0x2e48]
set  CM_SSC_MODFREQDIV_DPLL_DISP     [expr       $PRCM_BASE_ADDR     +  0x2e4c]
set  CM_CLKMODE_DPLL_EXTDEV          [expr       $PRCM_BASE_ADDR     +  0x2e60]
set  CM_IDLEST_DPLL_EXTDEV           [expr       $PRCM_BASE_ADDR     +  0x2e64]
set  CM_CLKSEL_DPLL_EXTDEV           [expr       $PRCM_BASE_ADDR     +  0x2e6c]
set  CM_DIV_M2_DPLL_EXTDEV           [expr       $PRCM_BASE_ADDR     +  0x2e70]
set  CM_CLKSEL2_DPLL_EXTDEV          [expr       $PRCM_BASE_ADDR     +  0x2e84]
set  CM_SSC_DELTAMSTEP_DPLL_EXTDEV   [expr       $PRCM_BASE_ADDR     +  0x2e88]
set  CM_SSC_MODFREQDIV_DPLL_EXTDEV   [expr       $PRCM_BASE_ADDR     +  0x2e8c]
set  CM_SHADOW_FREQ_CONFIG1          [expr       $PRCM_BASE_ADDR     +  0x2fa0]
set  CM_SHADOW_FREQ_CONFIG2          [expr       $PRCM_BASE_ADDR     +  0x2fa4]
set  CM_CLKOUT1_CTRL                 [expr       $PRCM_BASE_ADDR     +  0x4100]
set  CM_DLL_CTRL                     [expr       $PRCM_BASE_ADDR     +  0x4104]
set  CM_CLKOUT2_CTRL                 [expr       $PRCM_BASE_ADDR     +  0x4108]
set  CLKSEL_TIMER1MS_CLK             [expr       $PRCM_BASE_ADDR     +  0x4200]
set  CLKSEL_TIMER2_CLK               [expr       $PRCM_BASE_ADDR     +  0x4204]
set  CLKSEL_TIMER3_CLK               [expr       $PRCM_BASE_ADDR     +  0x4208]
set  CLKSEL_TIMER4_CLK               [expr       $PRCM_BASE_ADDR     +  0x420c]
set  CLKSEL_TIMER5_CLK               [expr       $PRCM_BASE_ADDR     +  0x4210]
set  CLKSEL_TIMER6_CLK               [expr       $PRCM_BASE_ADDR     +  0x4214]
set  CLKSEL_TIMER7_CLK               [expr       $PRCM_BASE_ADDR     +  0x4218]
set  CLKSEL_TIMER8_CLK               [expr       $PRCM_BASE_ADDR     +  0x421c]
set  CLKSEL_TIMER9_CLK               [expr       $PRCM_BASE_ADDR     +  0x4220]
set  CLKSEL_TIMER10_CLK              [expr       $PRCM_BASE_ADDR     +  0x4224]
set  CLKSEL_TIMER11_CLK              [expr       $PRCM_BASE_ADDR     +  0x4228]
set  CLKSEL_WDT1_CLK                 [expr       $PRCM_BASE_ADDR     +  0x422c]
set  CLKSEL_SYNCTIMER_CLK            [expr       $PRCM_BASE_ADDR     +  0x4230]
set  CLKSEL_MAC_CLK                  [expr       $PRCM_BASE_ADDR     +  0x4234]
set  CLKSEL_CPTS_RFT_CLK             [expr       $PRCM_BASE_ADDR     +  0x4238]
set  CLKSEL_GFX_FCLK                 [expr       $PRCM_BASE_ADDR     +  0x423c]
set  CLKSEL_GPIO0_DBCLK              [expr       $PRCM_BASE_ADDR     +  0x4240]
set  CLKSEL_LCDC_PIXEL_CLK           [expr       $PRCM_BASE_ADDR     +  0x4244]
set  CLKSEL_ICSS_OCP_CLK             [expr       $PRCM_BASE_ADDR     +  0x4248]
set  CLKSEL_DLL_AGING_CLK            [expr       $PRCM_BASE_ADDR     +  0x4250]
set  CLKSEL_USBPHY32KHZ_GCLK         [expr       $PRCM_BASE_ADDR     +  0x4260]
set  CM_MPU_CLKSTCTRL                [expr       $PRCM_BASE_ADDR     +  0x8300]
set  CM_MPU_MPU_CLKCTRL              [expr       $PRCM_BASE_ADDR     +  0x8320]
set  CM_GFX_L3_CLKSTCTRL             [expr       $PRCM_BASE_ADDR     +  0x8400]
set  CM_GFX_GFX_CLKCTRL              [expr       $PRCM_BASE_ADDR     +  0x8420]
set  CM_RTC_CLKSTCTRL                [expr       $PRCM_BASE_ADDR     +  0x8500]
set  CM_RTC_RTC_CLKCTRL              [expr       $PRCM_BASE_ADDR     +  0x8520]
set  CM_PER_L3_CLKSTCTRL             [expr       $PRCM_BASE_ADDR     +  0x8800]
set  CM_PER_L3_CLKCTRL               [expr       $PRCM_BASE_ADDR     +  0x8820]
set  CM_PER_AES0_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8828]
set  CM_PER_DES_CLKCTRL              [expr       $PRCM_BASE_ADDR     +  0x8830]
set  CM_PER_CRYPTODMA_CLKCTRL        [expr       $PRCM_BASE_ADDR     +  0x8838]
set  CM_PER_L3_INSTR_CLKCTRL         [expr       $PRCM_BASE_ADDR     +  0x8840]
set  CM_PER_MSTR_EXPS_CLKCTRL        [expr       $PRCM_BASE_ADDR     +  0x8848]
set  CM_PER_OCMCRAM_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x8850]
set  CM_PER_SHA0_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8858]
set  CM_PER_SLV_EXPS_CLKCTRL         [expr       $PRCM_BASE_ADDR     +  0x8860]
set  CM_PER_VPFE0_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8868]
set  CM_PER_VPFE1_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8870]
set  CM_PER_TPCC_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8878]
set  CM_PER_TPTC0_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8880]
set  CM_PER_TPTC1_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8888]
set  CM_PER_TPTC2_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8890]
set  CM_PER_DLL_AGING_CLKCTRL        [expr       $PRCM_BASE_ADDR     +  0x8898]
set  CM_PER_L4HS_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x88a0]
set  CM_PER_L4FW_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x88a8]
set  CM_PER_L3S_CLKSTCTRL            [expr       $PRCM_BASE_ADDR     +  0x8a00]
set  CM_PER_GPMC_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8a20]
set  CM_PER_IEEE5000_CLKCTRL         [expr       $PRCM_BASE_ADDR     +  0x8a28]
set  CM_PER_MCASP0_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8a38]
set  CM_PER_MCASP1_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8a40]
set  CM_PER_MMC2_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8a48]
set  CM_PER_QSPI_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8a58]
set  CM_PER_USB_OTG_SS0_CLKCTRL      [expr       $PRCM_BASE_ADDR     +  0x8a60]
set  CM_PER_USB_OTG_SS1_CLKCTRL      [expr       $PRCM_BASE_ADDR     +  0x8a68]
set  CM_PER_ICSS_CLKSTCTRL           [expr       $PRCM_BASE_ADDR     +  0x8b00]
set  CM_PER_ICSS_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8b20]
set  CM_PER_L4LS_CLKSTCTRL           [expr       $PRCM_BASE_ADDR     +  0x8c00]
set  CM_PER_L4LS_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8c20]
set  CM_PER_DCAN0_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8c28]
set  CM_PER_DCAN1_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8c30]
set  CM_PER_EPWMSS0_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x8c38]
set  CM_PER_EPWMSS1_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x8c40]
set  CM_PER_EPWMSS2_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x8c48]
set  CM_PER_EPWMSS3_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x8c50]
set  CM_PER_EPWMSS4_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x8c58]
set  CM_PER_EPWMSS5_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x8c60]
set  CM_PER_ELM_CLKCTRL              [expr       $PRCM_BASE_ADDR     +  0x8c68]
set  CM_PER_GPIO1_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8c78]
set  CM_PER_GPIO2_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8c80]
set  CM_PER_GPIO3_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8c88]
set  CM_PER_GPIO4_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8c90]
set  CM_PER_GPIO5_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8c98]
set  CM_PER_HDQ1W_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8ca0]
set  CM_PER_I2C1_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8ca8]
set  CM_PER_I2C2_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8cb0]
set  CM_PER_MAILBOX0_CLKCTRL         [expr       $PRCM_BASE_ADDR     +  0x8cb8]
set  CM_PER_MMC0_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8cc0]
set  CM_PER_MMC1_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8cc8]
set  CM_PER_PKA_CLKCTRL              [expr       $PRCM_BASE_ADDR     +  0x8cd0]
set  CM_PER_RNG_CLKCTRL              [expr       $PRCM_BASE_ADDR     +  0x8ce0]
set  CM_PER_SPARE0_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8ce8]
set  CM_PER_SPARE1_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8cf0]
set  CM_PER_SPI0_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8d00]
set  CM_PER_SPI1_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8d08]
set  CM_PER_SPI2_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8d10]
set  CM_PER_SPI3_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8d18]
set  CM_PER_SPI4_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8d20]
set  CM_PER_SPINLOCK_CLKCTRL         [expr       $PRCM_BASE_ADDR     +  0x8d28]
set  CM_PER_TIMER2_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8d30]
set  CM_PER_TIMER3_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8d38]
set  CM_PER_TIMER4_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8d40]
set  CM_PER_TIMER5_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8d48]
set  CM_PER_TIMER6_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8d50]
set  CM_PER_TIMER7_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8d58]
set  CM_PER_TIMER8_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8d60]
set  CM_PER_TIMER9_CLKCTRL           [expr       $PRCM_BASE_ADDR     +  0x8d68]
set  CM_PER_TIMER10_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x8d70]
set  CM_PER_TIMER11_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x8d78]
set  CM_PER_UART1_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8d80]
set  CM_PER_UART2_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8d88]
set  CM_PER_UART3_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8d90]
set  CM_PER_UART4_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8d98]
set  CM_PER_UART5_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x8da0]
set  CM_PER_USBPHYOCP2SCP0_CLKCTRL   [expr       $PRCM_BASE_ADDR     +  0x8db8]
set  CM_PER_USBPHYOCP2SCP1_CLKCTRL   [expr       $PRCM_BASE_ADDR     +  0x8dc0]
set  CM_PER_EMIF_CLKSTCTRL           [expr       $PRCM_BASE_ADDR     +  0x8f00]
set  CM_PER_EMIF_CLKCTRL             [expr       $PRCM_BASE_ADDR     +  0x8f20]
set  CM_PER_DLL_CLKCTRL              [expr       $PRCM_BASE_ADDR     +  0x8f28]
set  CM_PER_EMIF_FW_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x8f30]
set  CM_PER_OTFA_EMIF_CLKCTRL        [expr       $PRCM_BASE_ADDR     +  0x8f38]
set  CM_PER_DSS_CLKSTCTRL            [expr       $PRCM_BASE_ADDR     +  0x9200]
set  CM_PER_DSS_CLKCTRL              [expr       $PRCM_BASE_ADDR     +  0x9220]
set  CM_PER_CPSW_CLKSTCTRL           [expr       $PRCM_BASE_ADDR     +  0x9300]
set  CM_PER_CPGMAC0_CLKCTRL          [expr       $PRCM_BASE_ADDR     +  0x9320]
set  CM_PER_OCPWP_L3_CLKSTCTRL       [expr       $PRCM_BASE_ADDR     +  0x9400]
set  CM_PER_OCPWP_CLKCTRL            [expr       $PRCM_BASE_ADDR     +  0x9420]

set  CONTROL_BASE_ADDR               0x44e10000
set  CONTROL_STATUS                  [expr       $CONTROL_BASE_ADDR  +  0x0040]
set  DEVICE_ID                       [expr       $CONTROL_BASE_ADDR  +  0x0600]
set  DEV_FEATURE                     [expr       $CONTROL_BASE_ADDR  +  0x0604]
set  DEV_ATTRIBUTE                   [expr       $CONTROL_BASE_ADDR  +  0x0610]
set  MAC_ID0_LO                      [expr       $CONTROL_BASE_ADDR  +  0x0630]
set  MAC_ID0_HI                      [expr       $CONTROL_BASE_ADDR  +  0x0634]
set  MAC_ID1_LO                      [expr       $CONTROL_BASE_ADDR  +  0x0638]
set  MAC_ID1_HI                      [expr       $CONTROL_BASE_ADDR  +  0x063c]
set  USB_VID_PID                     [expr       $CONTROL_BASE_ADDR  +  0x07f4]
set  CONTROL_CONF_ECAP0_IN_PWM0_OUT  [expr       $CONTROL_BASE_ADDR  +  0x0964]
set  CONTROL_CONF_SPI4_CS0           [expr       $CONTROL_BASE_ADDR  +  0x0a5c]
set  CONTROL_CONF_SPI2_SCLK          [expr       $CONTROL_BASE_ADDR  +  0x0a60]
set  CONTROL_CONF_SPI2_D0            [expr       $CONTROL_BASE_ADDR  +  0x0a64]
set  CONTROL_CONF_XDMA_EVENT_INTR0   [expr       $CONTROL_BASE_ADDR  +  0x0a70]
set  CONTROL_CONF_XDMA_EVENT_INTR1   [expr       $CONTROL_BASE_ADDR  +  0x0a74]
set  CONTROL_CONF_GPMC_A0            [expr       $CONTROL_BASE_ADDR  +  0x0840]
set  DDR_IO_CTRL                     [expr       $CONTROL_BASE_ADDR  +  0x0e04]
set  VTP_CTRL_REG                    [expr       $CONTROL_BASE_ADDR  +  0x0e0c]
set  VREF_CTRL                       [expr       $CONTROL_BASE_ADDR  +  0x0e14]
set  DDR_CKE_CTRL                    [expr       $CONTROL_BASE_ADDR  +  0x131c]
set  DDR_ADDRCTRL_IOCTRL             [expr       $CONTROL_BASE_ADDR  +  0x1404]
set  DDR_ADDRCTRL_WD0_IOCTRL         [expr       $CONTROL_BASE_ADDR  +  0x1408]
set  DDR_ADDRCTRL_WD1_IOCTRL         [expr       $CONTROL_BASE_ADDR  +  0x140c]
set  DDR_DATA0_IOCTRL                [expr       $CONTROL_BASE_ADDR  +  0x1440]
set  DDR_DATA1_IOCTRL                [expr       $CONTROL_BASE_ADDR  +  0x1444]
set  DDR_DATA2_IOCTRL                [expr       $CONTROL_BASE_ADDR  +  0x1448]
set  DDR_DATA3_IOCTRL                [expr       $CONTROL_BASE_ADDR  +  0x144c]
set  EMIF_SDRAM_CONFIG_EXT           [expr       $CONTROL_BASE_ADDR  +  0x1460]
set  EMIF_SDRAM_STATUS_EXT           [expr       $CONTROL_BASE_ADDR  +  0x1464]

set  GPIO0_BASE_ADDR                 0x44e07000
set  GPIO0_SYSCONFIG                 [expr       $GPIO0_BASE_ADDR    +  0x0010]
set  GPIO0_SYSSTATUS                 [expr       $GPIO0_BASE_ADDR    +  0x0114]
set  GPIO0_CTRL                      [expr       $GPIO0_BASE_ADDR    +  0x0130]
set  GPIO0_OE                        [expr       $GPIO0_BASE_ADDR    +  0x0134]
set  GPIO0_CLEARDATAOUT              [expr       $GPIO0_BASE_ADDR    +  0x0190]
set  GPIO0_SETDATAOUT                [expr       $GPIO0_BASE_ADDR    +  0x0194]

set  GPIO5_BASE_ADDR                 0x48322000
set  GPIO5_SYSCONFIG                 [expr       $GPIO5_BASE_ADDR    +  0x0010]
set  GPIO5_SYSSTATUS                 [expr       $GPIO5_BASE_ADDR    +  0x0114]
set  GPIO5_CTRL                      [expr       $GPIO5_BASE_ADDR    +  0x0130]
set  GPIO5_OE                        [expr       $GPIO5_BASE_ADDR    +  0x0134]
set  GPIO5_CLEARDATAOUT              [expr       $GPIO5_BASE_ADDR    +  0x0190]
set  GPIO5_SETDATAOUT                [expr       $GPIO5_BASE_ADDR    +  0x0194]

set  GPIO1_BASE_ADDR                 0x4804c000
set  GPIO1_SYSCONFIG                 [expr       $GPIO1_BASE_ADDR    +  0x0010]
set  GPIO1_SYSSTATUS                 [expr       $GPIO1_BASE_ADDR    +  0x0114]
set  GPIO1_CTRL                      [expr       $GPIO1_BASE_ADDR    +  0x0130]
set  GPIO1_OE                        [expr       $GPIO1_BASE_ADDR    +  0x0134]
set  GPIO1_CLEARDATAOUT              [expr       $GPIO1_BASE_ADDR    +  0x0190]
set  GPIO1_SETDATAOUT                [expr       $GPIO1_BASE_ADDR    +  0x0194]

set  EMIF_BASE_ADDR                  0x4c000000
set  EMIF_STATUS                     [expr       $EMIF_BASE_ADDR     +  0x0004]
set  EMIF_SDRAM_CONFIG               [expr       $EMIF_BASE_ADDR     +  0x0008]
set  EMIF_SDRAM_CONFIG_2             [expr       $EMIF_BASE_ADDR     +  0x000c]
set  EMIF_SDRAM_REF_CTRL             [expr       $EMIF_BASE_ADDR     +  0x0010]
set  EMIF_SDRAM_REF_CTRL_SHDW        [expr       $EMIF_BASE_ADDR     +  0x0014]
set  EMIF_SDRAM_TIM_1                [expr       $EMIF_BASE_ADDR     +  0x0018]
set  EMIF_SDRAM_TIM_1_SHDW           [expr       $EMIF_BASE_ADDR     +  0x001c]
set  EMIF_SDRAM_TIM_2                [expr       $EMIF_BASE_ADDR     +  0x0020]
set  EMIF_SDRAM_TIM_2_SHDW           [expr       $EMIF_BASE_ADDR     +  0x0024]
set  EMIF_SDRAM_TIM_3                [expr       $EMIF_BASE_ADDR     +  0x0028]
set  EMIF_SDRAM_TIM_3_SHDW           [expr       $EMIF_BASE_ADDR     +  0x002c]
set  EMIF_LPDDR2_NVM_TIM             [expr       $EMIF_BASE_ADDR     +  0x0030]
set  EMIF_LPDDR2_NVM_TIM_SHDW        [expr       $EMIF_BASE_ADDR     +  0x0034]
set  EMIF_PWR_MGMT_CTRL              [expr       $EMIF_BASE_ADDR     +  0x0038]
set  EMIF_PWR_MGMT_CTRL_SHDW         [expr       $EMIF_BASE_ADDR     +  0x003c]
set  EMIF_LPDDR2_MODE_REG_DATA       [expr       $EMIF_BASE_ADDR     +  0x0040]
set  EMIF_LPDDR2_MODE_REG_CFG        [expr       $EMIF_BASE_ADDR     +  0x0050]
set  EMIF_OCP_CONFIG                 [expr       $EMIF_BASE_ADDR     +  0x0054]
set  EMIF_OCP_CFG_VAL_1              [expr       $EMIF_BASE_ADDR     +  0x0058]
set  EMIF_OCP_CFG_VAL_2              [expr       $EMIF_BASE_ADDR     +  0x005c]
set  EMIF_IODFT_TLGC                 [expr       $EMIF_BASE_ADDR     +  0x0060]
set  EMIF_IODFT_CTRL_MISR_RSLT       [expr       $EMIF_BASE_ADDR     +  0x0064]
set  EMIF_IODFT_ADDR_MISR_RSLT       [expr       $EMIF_BASE_ADDR     +  0x0068]
set  EMIF_IODFT_DATA_MISR_RSLT_1     [expr       $EMIF_BASE_ADDR     +  0x006c]
set  EMIF_IODFT_DATA_MISR_RSLT_2     [expr       $EMIF_BASE_ADDR     +  0x0070]
set  EMIF_IODFT_DATA_MISR_RSLT_3     [expr       $EMIF_BASE_ADDR     +  0x0074]
set  EMIF_PERF_CNT_1                 [expr       $EMIF_BASE_ADDR     +  0x0080]
set  EMIF_PERF_CNT_2                 [expr       $EMIF_BASE_ADDR     +  0x0084]
set  EMIF_PERF_CNT_CFG               [expr       $EMIF_BASE_ADDR     +  0x0088]
set  EMIF_PERF_CNT_SEL               [expr       $EMIF_BASE_ADDR     +  0x008c]
set  EMIF_PERF_CNT_TIM               [expr       $EMIF_BASE_ADDR     +  0x0090]
set  EMIF_MISC_REG                   [expr       $EMIF_BASE_ADDR     +  0x0094]
set  EMIF_DLL_CALIB_CTRL             [expr       $EMIF_BASE_ADDR     +  0x0098]
set  EMIF_DLL_CALIB_CTRL_SHDW        [expr       $EMIF_BASE_ADDR     +  0x009c]
set  EMIF_IRQ_EOI                    [expr       $EMIF_BASE_ADDR     +  0x00a0]
set  EMIF_IRQSTATUS_RAW_SYS          [expr       $EMIF_BASE_ADDR     +  0x00a4]
set  EMIF_IRQSTATUS_SYS              [expr       $EMIF_BASE_ADDR     +  0x00ac]
set  EMIF_IRQENABLE_SET_SYS          [expr       $EMIF_BASE_ADDR     +  0x00b4]
set  EMIF_IRQENABLE_CLR_SYS          [expr       $EMIF_BASE_ADDR     +  0x00bc]
set  EMIF_ZQ_CONFIG                  [expr       $EMIF_BASE_ADDR     +  0x00c8]
set  EMIF_TEMP_ALERT_CONFIG          [expr       $EMIF_BASE_ADDR     +  0x00cc]
set  EMIF_OCP_ERR_LOG                [expr       $EMIF_BASE_ADDR     +  0x00d0]
set  EMIF_RDWR_LVL_RMP_WIN           [expr       $EMIF_BASE_ADDR     +  0x00d4]
set  EMIF_RDWR_LVL_RMP_CTRL          [expr       $EMIF_BASE_ADDR     +  0x00d8]
set  EMIF_RDWR_LVL_CTRL              [expr       $EMIF_BASE_ADDR     +  0x00dc]
set  EMIF_DDR_PHY_CTRL_1             [expr       $EMIF_BASE_ADDR     +  0x00e4]
set  EMIF_DDR_PHY_CTRL_1_SHDW        [expr       $EMIF_BASE_ADDR     +  0x00e8]
set  EMIF_DDR_PHY_CTRL_2             [expr       $EMIF_BASE_ADDR     +  0x00ec]
set  EMIF_PRI_COS_MAP                [expr       $EMIF_BASE_ADDR     +  0x0100]
set  EMIF_CONNID_COS_1_MAP           [expr       $EMIF_BASE_ADDR     +  0x0104]
set  EMIF_CONNID_COS_2_MAP           [expr       $EMIF_BASE_ADDR     +  0x0108]
set  ECC_CTRL                        [expr       $EMIF_BASE_ADDR     +  0x0110]
set  ECC_ADDR_RNG_1                  [expr       $EMIF_BASE_ADDR     +  0x0114]
set  ECC_ADDR_RNG_2                  [expr       $EMIF_BASE_ADDR     +  0x0118]
set  EMIF_RD_WR_EXEC_THRSH           [expr       $EMIF_BASE_ADDR     +  0x0120]
set  COS_CONFIG                      [expr       $EMIF_BASE_ADDR     +  0x0124]

set  PHY_STATUS_1                    [expr       $EMIF_BASE_ADDR     +  0x0144]
set  PHY_STATUS_2                    [expr       $EMIF_BASE_ADDR     +  0x0148]
set  PHY_STATUS_3                    [expr       $EMIF_BASE_ADDR     +  0x014c]
set  PHY_STATUS_4                    [expr       $EMIF_BASE_ADDR     +  0x0150]
set  PHY_STATUS_5                    [expr       $EMIF_BASE_ADDR     +  0x0154]
set  PHY_STATUS_6                    [expr       $EMIF_BASE_ADDR     +  0x0158]
set  PHY_STATUS_7                    [expr       $EMIF_BASE_ADDR     +  0x015c]
set  PHY_STATUS_8                    [expr       $EMIF_BASE_ADDR     +  0x0160]
set  PHY_STATUS_9                    [expr       $EMIF_BASE_ADDR     +  0x0164]
set  PHY_STATUS_10                   [expr       $EMIF_BASE_ADDR     +  0x0168]
set  PHY_STATUS_11                   [expr       $EMIF_BASE_ADDR     +  0x016c]
set  PHY_STATUS_12                   [expr       $EMIF_BASE_ADDR     +  0x0170]
set  PHY_STATUS_13                   [expr       $EMIF_BASE_ADDR     +  0x0174]
set  PHY_STATUS_14                   [expr       $EMIF_BASE_ADDR     +  0x0178]
set  PHY_STATUS_15                   [expr       $EMIF_BASE_ADDR     +  0x017c]
set  PHY_STATUS_16                   [expr       $EMIF_BASE_ADDR     +  0x0180]
set  PHY_STATUS_17                   [expr       $EMIF_BASE_ADDR     +  0x0184]
set  PHY_STATUS_18                   [expr       $EMIF_BASE_ADDR     +  0x0188]
set  PHY_STATUS_19                   [expr       $EMIF_BASE_ADDR     +  0x018c]
set  PHY_STATUS_20                   [expr       $EMIF_BASE_ADDR     +  0x0190]
set  PHY_STATUS_21                   [expr       $EMIF_BASE_ADDR     +  0x0194]
set  PHY_STATUS_22                   [expr       $EMIF_BASE_ADDR     +  0x0198]
set  PHY_STATUS_23                   [expr       $EMIF_BASE_ADDR     +  0x019c]
set  PHY_STATUS_24                   [expr       $EMIF_BASE_ADDR     +  0x01a0]
set  PHY_STATUS_25                   [expr       $EMIF_BASE_ADDR     +  0x01a4]
set  PHY_STATUS_26                   [expr       $EMIF_BASE_ADDR     +  0x01a8]
set  PHY_STATUS_27                   [expr       $EMIF_BASE_ADDR     +  0x01ac]
set  PHY_STATUS_28                   [expr       $EMIF_BASE_ADDR     +  0x01b0]

set  EXT_PHY_CTRL_1                  [expr       $EMIF_BASE_ADDR     +  0x0200]
set  EXT_PHY_CTRL_1_SHDW             [expr       $EMIF_BASE_ADDR     +  0x0204]
set  EXT_PHY_CTRL_2                  [expr       $EMIF_BASE_ADDR     +  0x0208]
set  EXT_PHY_CTRL_2_SHDW             [expr       $EMIF_BASE_ADDR     +  0x020c]
set  EXT_PHY_CTRL_3                  [expr       $EMIF_BASE_ADDR     +  0x0210]
set  EXT_PHY_CTRL_3_SHDW             [expr       $EMIF_BASE_ADDR     +  0x0214]
set  EXT_PHY_CTRL_4                  [expr       $EMIF_BASE_ADDR     +  0x0218]
set  EXT_PHY_CTRL_4_SHDW             [expr       $EMIF_BASE_ADDR     +  0x021c]
set  EXT_PHY_CTRL_5                  [expr       $EMIF_BASE_ADDR     +  0x0220]
set  EXT_PHY_CTRL_5_SHDW             [expr       $EMIF_BASE_ADDR     +  0x0224]
set  EXT_PHY_CTRL_6                  [expr       $EMIF_BASE_ADDR     +  0x0228]
set  EXT_PHY_CTRL_6_SHDW             [expr       $EMIF_BASE_ADDR     +  0x022c]
set  EXT_PHY_CTRL_7                  [expr       $EMIF_BASE_ADDR     +  0x0230]
set  EXT_PHY_CTRL_7_SHDW             [expr       $EMIF_BASE_ADDR     +  0x0234]
set  EXT_PHY_CTRL_8                  [expr       $EMIF_BASE_ADDR     +  0x0238]
set  EXT_PHY_CTRL_8_SHDW             [expr       $EMIF_BASE_ADDR     +  0x023c]
set  EXT_PHY_CTRL_9                  [expr       $EMIF_BASE_ADDR     +  0x0240]
set  EXT_PHY_CTRL_9_SHDW             [expr       $EMIF_BASE_ADDR     +  0x0244]
set  EXT_PHY_CTRL_10                 [expr       $EMIF_BASE_ADDR     +  0x0248]
set  EXT_PHY_CTRL_10_SHDW            [expr       $EMIF_BASE_ADDR     +  0x024c]
set  EXT_PHY_CTRL_11                 [expr       $EMIF_BASE_ADDR     +  0x0250]
set  EXT_PHY_CTRL_11_SHDW            [expr       $EMIF_BASE_ADDR     +  0x0254]
set  EXT_PHY_CTRL_12                 [expr       $EMIF_BASE_ADDR     +  0x0258]
set  EXT_PHY_CTRL_12_SHDW            [expr       $EMIF_BASE_ADDR     +  0x025c]
set  EXT_PHY_CTRL_13                 [expr       $EMIF_BASE_ADDR     +  0x0260]
set  EXT_PHY_CTRL_13_SHDW            [expr       $EMIF_BASE_ADDR     +  0x0264]
set  EXT_PHY_CTRL_14                 [expr       $EMIF_BASE_ADDR     +  0x0268]
set  EXT_PHY_CTRL_14_SHDW            [expr       $EMIF_BASE_ADDR     +  0x026c]
set  EXT_PHY_CTRL_15                 [expr       $EMIF_BASE_ADDR     +  0x0270]
set  EXT_PHY_CTRL_15_SHDW            [expr       $EMIF_BASE_ADDR     +  0x0274]
set  EXT_PHY_CTRL_16                 [expr       $EMIF_BASE_ADDR     +  0x0278]
set  EXT_PHY_CTRL_16_SHDW            [expr       $EMIF_BASE_ADDR     +  0x027c]
set  EXT_PHY_CTRL_17                 [expr       $EMIF_BASE_ADDR     +  0x0280]
set  EXT_PHY_CTRL_17_SHDW            [expr       $EMIF_BASE_ADDR     +  0x0284]
set  EXT_PHY_CTRL_18                 [expr       $EMIF_BASE_ADDR     +  0x0288]
set  EXT_PHY_CTRL_18_SHDW            [expr       $EMIF_BASE_ADDR     +  0x028c]
set  EXT_PHY_CTRL_19                 [expr       $EMIF_BASE_ADDR     +  0x0290]
set  EXT_PHY_CTRL_19_SHDW            [expr       $EMIF_BASE_ADDR     +  0x0294]
set  EXT_PHY_CTRL_20                 [expr       $EMIF_BASE_ADDR     +  0x0298]
set  EXT_PHY_CTRL_20_SHDW            [expr       $EMIF_BASE_ADDR     +  0x029c]
set  EXT_PHY_CTRL_21                 [expr       $EMIF_BASE_ADDR     +  0x02a0]
set  EXT_PHY_CTRL_21_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02a4]
set  EXT_PHY_CTRL_22                 [expr       $EMIF_BASE_ADDR     +  0x02a8]
set  EXT_PHY_CTRL_22_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02ac]
set  EXT_PHY_CTRL_23                 [expr       $EMIF_BASE_ADDR     +  0x02b0]
set  EXT_PHY_CTRL_23_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02b4]
set  EXT_PHY_CTRL_24                 [expr       $EMIF_BASE_ADDR     +  0x02b8]
set  EXT_PHY_CTRL_24_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02bc]
set  EXT_PHY_CTRL_25                 [expr       $EMIF_BASE_ADDR     +  0x02c0]
set  EXT_PHY_CTRL_25_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02c4]
set  EXT_PHY_CTRL_26                 [expr       $EMIF_BASE_ADDR     +  0x02c8]
set  EXT_PHY_CTRL_26_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02cc]
set  EXT_PHY_CTRL_27                 [expr       $EMIF_BASE_ADDR     +  0x02d0]
set  EXT_PHY_CTRL_27_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02d4]
set  EXT_PHY_CTRL_28                 [expr       $EMIF_BASE_ADDR     +  0x02d8]
set  EXT_PHY_CTRL_28_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02dc]
set  EXT_PHY_CTRL_29                 [expr       $EMIF_BASE_ADDR     +  0x02e0]
set  EXT_PHY_CTRL_29_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02e4]
set  EXT_PHY_CTRL_30                 [expr       $EMIF_BASE_ADDR     +  0x02e8]
set  EXT_PHY_CTRL_30_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02ec]
set  EXT_PHY_CTRL_31                 [expr       $EMIF_BASE_ADDR     +  0x02f0]
set  EXT_PHY_CTRL_31_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02f4]
set  EXT_PHY_CTRL_32                 [expr       $EMIF_BASE_ADDR     +  0x02f8]
set  EXT_PHY_CTRL_32_SHDW            [expr       $EMIF_BASE_ADDR     +  0x02fc]
set  EXT_PHY_CTRL_33                 [expr       $EMIF_BASE_ADDR     +  0x0300]
set  EXT_PHY_CTRL_33_SHDW            [expr       $EMIF_BASE_ADDR     +  0x0304]
set  EXT_PHY_CTRL_34                 [expr       $EMIF_BASE_ADDR     +  0x0308]
set  EXT_PHY_CTRL_34_SHDW            [expr       $EMIF_BASE_ADDR     +  0x030c]
set  EXT_PHY_CTRL_35                 [expr       $EMIF_BASE_ADDR     +  0x0310]
set  EXT_PHY_CTRL_35_SHDW            [expr       $EMIF_BASE_ADDR     +  0x0314]
set  EXT_PHY_CTRL_36                 [expr       $EMIF_BASE_ADDR     +  0x0318]
set  EXT_PHY_CTRL_36_SHDW            [expr       $EMIF_BASE_ADDR     +  0x031c]

set  WDT1_BASE_ADDR                  0x44e35000
set  WDT1_W_PEND_WSPR                [expr       $WDT1_BASE_ADDR     +  0x0034]
set  WDT1_WSPR                       [expr       $WDT1_BASE_ADDR     +  0x0048]

set  RTC_BASE_ADDR                   0x44e3e000
set  RTC_KICK0R                      [expr       $RTC_BASE_ADDR      +  0x6c]
set  RTC_KICK1R                      [expr       $RTC_BASE_ADDR      +  0x70]


if { [info exists CHIPNAME] } {
   set _CHIPNAME $CHIPNAME
} else {
   set _CHIPNAME am437x
}

set JRC_MODULE		icepick_d
set DEBUGSS_MODULE	debugss
set M3_MODULE		m3_wakeupss

set JRC_NAME		$_CHIPNAME.$JRC_MODULE
set DEBUGSS_NAME	$_CHIPNAME.$DEBUGSS_MODULE
set M3_NAME		$_CHIPNAME.$M3_MODULE
set _TARGETNAME		$_CHIPNAME.mpuss

#
# M3 WakeupSS DAP
#
if { [info exists M3_DAP_TAPID] } {
	set _M3_DAP_TAPID $M3_DAP_TAPID
} else {
	set _M3_DAP_TAPID 0x4b6b902f
}
jtag newtap $_CHIPNAME $M3_MODULE -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_M3_DAP_TAPID -disable
jtag configure $M3_NAME -event tap-enable "icepick_d_tapenable $JRC_NAME 11 0"
dap create $M3_NAME.dap -chain-position $M3_NAME

#
# DebugSS DAP
#
if { [info exists DAP_TAPID] } {
   set _DAP_TAPID $DAP_TAPID
} else {
   set _DAP_TAPID 0x46b6902f
}
jtag newtap $_CHIPNAME $DEBUGSS_MODULE -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_DAP_TAPID -disable
jtag configure $DEBUGSS_NAME -event tap-enable "icepick_d_tapenable $JRC_NAME 12 0"
dap create $DEBUGSS_NAME.dap -chain-position $DEBUGSS_NAME

#
# ICEpick-D (JTAG route controller)
#
if { [info exists JRC_TAPID] } {
   set _JRC_TAPID $JRC_TAPID
} else {
   set _JRC_TAPID 0x0b98c02f
}
jtag newtap $_CHIPNAME $JRC_MODULE -irlen 6 -ircapture 0x1 -irmask 0x3f -expected-id $_JRC_TAPID -ignore-version
jtag configure $JRC_NAME -event setup "jtag tapenable $DEBUGSS_NAME"
 # some TCK tycles are required to activate the DEBUG power domain
jtag configure $JRC_NAME -event post-reset "runtest 100"

#
# Cortex-A9 target
#
target create $_TARGETNAME cortex_a -dap $DEBUGSS_NAME.dap -coreid 0 -dbgbase 0x80000000


# SRAM: 256K at 0x4030.0000
$_TARGETNAME configure -work-area-phys 0x40300000 -work-area-size 0x40000

# Disables watchdog timer after reset otherwise board won't stay in
# halted state.
proc disable_watchdog { } {
	global WDT1_WSPR
	global WDT1_W_PEND_WSPR
	global _TARGETNAME

	set curstate [$_TARGETNAME curstate]

	if { [string compare $curstate halted] == 0 } {
		set WDT_DISABLE_SEQ1	0xaaaa
		set WDT_DISABLE_SEQ2	0x5555

		mww phys $WDT1_WSPR $WDT_DISABLE_SEQ1

		# Empty body to make sure this executes as fast as possible.
		# We don't want any delays here otherwise romcode might start
		# executing and end up changing state of certain IPs.
		while { [expr [mrw $WDT1_W_PEND_WSPR] & 0x10] } { }

		mww phys $WDT1_WSPR $WDT_DISABLE_SEQ2
		while { [expr [mrw $WDT1_W_PEND_WSPR] & 0x10] } { }
	}
}

proc ceil { x y } {
	return [ expr ($x + $y - 1) / $y ]
}

proc device_type { } {
	global CONTROL_STATUS

	set tmp [ mrw $CONTROL_STATUS ]
	set tmp [ expr $tmp & 0x700 ]
	set tmp [ expr $tmp >> 8 ]

	return $tmp
}

proc get_input_clock_frequency { } {
	global CONTROL_STATUS

	if { [ device_type ] != 3 } {
		error "Unknown device type\n"
		return -1
	}

	set freq [ mrw $CONTROL_STATUS ]
	set freq [ expr $freq & 0x00c00000 ]
	set freq [ expr $freq >> 22 ]

	switch $freq {
		0 {
			set CLKIN 19200000
		}

		1 {
			set CLKIN 24000000
		}

		2 {
			set CLKIN 25000000
		}

		3 {
			set CLKIN 26000000
		}
	}

	return $CLKIN
}

proc mpu_pll_config { CLKIN N M M2 } {
	global CM_CLKMODE_DPLL_MPU
	global CM_CLKSEL_DPLL_MPU
	global CM_DIV_M2_DPLL_MPU
	global CM_IDLEST_DPLL_MPU

	set clksel [ mrw $CM_CLKSEL_DPLL_MPU ]
	set div_m2 [ mrw $CM_DIV_M2_DPLL_MPU ]

	mww $CM_CLKMODE_DPLL_MPU 0x4
	while { !([ mrw $CM_IDLEST_DPLL_MPU ] & 0x0100) } { }

	set clksel [ expr $clksel & (~0x7ffff) ]
	set clksel [ expr $clksel | ($M << 0x8) | $N ]
	mww $CM_CLKSEL_DPLL_MPU $clksel

	set div_m2 [ expr $div_m2 & (~0x1f) ]
	set div_m2 [ expr $div_m2 | $M2 ]
	mww $CM_DIV_M2_DPLL_MPU $div_m2

	mww $CM_CLKMODE_DPLL_MPU 0x7
	while { [ mrw $CM_IDLEST_DPLL_MPU ] != 1 } { }

	echo "MPU DPLL locked"
}

proc core_pll_config { CLKIN N M M4 M5 M6 } {
	global CM_CLKMODE_DPLL_CORE
	global CM_CLKSEL_DPLL_CORE
	global CM_DIV_M4_DPLL_CORE
	global CM_DIV_M5_DPLL_CORE
	global CM_DIV_M6_DPLL_CORE
	global CM_IDLEST_DPLL_CORE

	set clksel [ mrw $CM_CLKSEL_DPLL_CORE ]

	mww $CM_CLKMODE_DPLL_CORE 0x4
	while { !([ mrw $CM_IDLEST_DPLL_CORE ] & 0x0100) } { }

	set clksel [ expr $clksel & (~0x7ffff) ]
	set clksel [ expr $clksel | ($M << 0x8) | $N ]
	mww $CM_CLKSEL_DPLL_CORE $clksel
	mww $CM_DIV_M4_DPLL_CORE $M4
	mww $CM_DIV_M5_DPLL_CORE $M5
	mww $CM_DIV_M6_DPLL_CORE $M6

	mww $CM_CLKMODE_DPLL_CORE 0x7
	while { !([ mrw $CM_IDLEST_DPLL_CORE ] & 0x01) } { }

	echo "CORE DPLL locked"
}

proc per_pll_config { CLKIN N M M2 } {
	global CM_CLKMODE_DPLL_PER
	global CM_CLKSEL_DPLL_PER
	global CM_DIV_M2_DPLL_PER
	global CM_IDLEST_DPLL_PER

	set x [ expr $M * $CLKIN / 1000000 ]
	set y [ expr ($N + 1) * 250 ]
	set sd [ ceil $x $y ]

	set clksel [ mrw $CM_CLKSEL_DPLL_PER ]
	set div_m2 [ mrw $CM_DIV_M2_DPLL_PER ]

	mww $CM_CLKMODE_DPLL_PER 0x4
	while { !([ mrw $CM_IDLEST_DPLL_PER ] & 0x0100) } { }

	set clksel [ expr $clksel & (~0xff0fffff) ]
	set clksel [ expr $clksel | ($M << 0x8) | $N ]
	set clksel [ expr $clksel | ($sd << 24) ]
	mww $CM_CLKSEL_DPLL_PER $clksel

	set div_m2 [ expr 0xffffff80 | $M2 ]

	mww $CM_CLKMODE_DPLL_PER 0x7
	while { !([ mrw $CM_IDLEST_DPLL_PER ] & 0x01) } { }

	echo "PER DPLL locked"
}

proc ddr_pll_config { CLKIN N M M2 M4 } {
	global CM_CLKMODE_DPLL_DDR
	global CM_CLKSEL_DPLL_DDR
	global CM_DIV_M2_DPLL_DDR
	global CM_DIV_M4_DPLL_DDR
	global CM_IDLEST_DPLL_DDR

	set clksel [ mrw $CM_CLKSEL_DPLL_DDR ]
	set div_m2 [ mrw $CM_DIV_M2_DPLL_DDR ]

	mww $CM_CLKMODE_DPLL_DDR 0x4
	while { !([ mrw $CM_IDLEST_DPLL_DDR ] & 0x0100) } { }

	set clksel [ expr $clksel & (~0x7ffff) ]
	set clksel [ expr $clksel | ($M << 8) | $N ]
	mww $CM_CLKSEL_DPLL_DDR $clksel

	set div_m2 [ expr ($div_m2 & 0xffffffe0) | $M2 ]
	mww $CM_DIV_M2_DPLL_DDR $div_m2
	mww $CM_DIV_M4_DPLL_DDR $M4

	mww $CM_CLKMODE_DPLL_DDR 0x7
	while { !([ mrw $CM_IDLEST_DPLL_DDR ] & 0x01) } { }

	echo "DDR DPLL Locked"
}

proc config_opp100 { } {
	set CLKIN [ get_input_clock_frequency ]

	if { $CLKIN == -1 } {
		return -1
	}

	switch $CLKIN {
		24000000 {
			mpu_pll_config   $CLKIN  0  25   1
			core_pll_config  $CLKIN  2  125  10  8  4
			per_pll_config   $CLKIN  9  400  5
			ddr_pll_config   $CLKIN  2  50   1   2
		}

		25000000 {
			mpu_pll_config   $CLKIN  0  24   1
			core_pll_config  $CLKIN  0  40   10  8  4
			per_pll_config   $CLKIN  9  384  5
			ddr_pll_config   $CLKIN  0  16   1   2
		}

		26000000 {
			mpu_pll_config   $CLKIN  12  300  1
			core_pll_config  $CLKIN  12  500  10  8  4
			per_pll_config   $CLKIN  12  480  5
			ddr_pll_config   $CLKIN  12  200  1   2
		}

		19200000 {
			mpu_pll_config   $CLKIN  3   125  1
			core_pll_config  $CLKIN  11  625  10  8  4
			per_pll_config   $CLKIN  7   400  5
			ddr_pll_config   $CLKIN  2   125  1   2
		}
	}
}

proc emif_prcm_clk_enable { } {
	global CM_PER_EMIF_FW_CLKCTRL
	global CM_PER_EMIF_CLKCTRL

	mww $CM_PER_EMIF_FW_CLKCTRL 0x02
	mww $CM_PER_EMIF_CLKCTRL 0x02

	while { [ mrw $CM_PER_EMIF_CLKCTRL ] != 0x02 } { }
}

proc vtp_enable { } {
	global VTP_CTRL_REG

	set vtp [ expr [ mrw $VTP_CTRL_REG ] | 0x40 ]
	mww $VTP_CTRL_REG $vtp

	set vtp [ expr [ mrw $VTP_CTRL_REG ] & ~0x01 ]
	mww $VTP_CTRL_REG $vtp

	set vtp [ expr [ mrw $VTP_CTRL_REG ] | 0x01 ]
	mww $VTP_CTRL_REG $vtp

}

proc config_ddr_ioctrl { } {
	global DDR_ADDRCTRL_IOCTRL
	global DDR_ADDRCTRL_WD0_IOCTRL
	global DDR_ADDRCTRL_WD1_IOCTRL
	global DDR_CKE_CTRL
	global DDR_DATA0_IOCTRL
	global DDR_DATA1_IOCTRL
	global DDR_DATA2_IOCTRL
	global DDR_DATA3_IOCTRL
	global DDR_IO_CTRL

	mww $DDR_ADDRCTRL_IOCTRL	0x84
	mww $DDR_ADDRCTRL_WD0_IOCTRL	0x00
	mww $DDR_ADDRCTRL_WD1_IOCTRL	0x00
	mww $DDR_DATA0_IOCTRL		0x84
	mww $DDR_DATA1_IOCTRL		0x84
	mww $DDR_DATA2_IOCTRL		0x84
	mww $DDR_DATA3_IOCTRL		0x84

	mww $DDR_IO_CTRL		0x00
	mww $DDR_CKE_CTRL		0x03
}

proc config_ddr_phy { } {
	global EMIF_DDR_PHY_CTRL_1
	global EMIF_DDR_PHY_CTRL_1_SHDW

	global EXT_PHY_CTRL_1
	global EXT_PHY_CTRL_1_SHDW
	global EXT_PHY_CTRL_2
	global EXT_PHY_CTRL_2_SHDW
	global EXT_PHY_CTRL_3
	global EXT_PHY_CTRL_3_SHDW
	global EXT_PHY_CTRL_4
	global EXT_PHY_CTRL_4_SHDW
	global EXT_PHY_CTRL_5
	global EXT_PHY_CTRL_5_SHDW
	global EXT_PHY_CTRL_6
	global EXT_PHY_CTRL_6_SHDW
	global EXT_PHY_CTRL_7
	global EXT_PHY_CTRL_7_SHDW
	global EXT_PHY_CTRL_8
	global EXT_PHY_CTRL_8_SHDW
	global EXT_PHY_CTRL_9
	global EXT_PHY_CTRL_9_SHDW
	global EXT_PHY_CTRL_10
	global EXT_PHY_CTRL_10_SHDW
	global EXT_PHY_CTRL_11
	global EXT_PHY_CTRL_11_SHDW
	global EXT_PHY_CTRL_12
	global EXT_PHY_CTRL_12_SHDW
	global EXT_PHY_CTRL_13
	global EXT_PHY_CTRL_13_SHDW
	global EXT_PHY_CTRL_14
	global EXT_PHY_CTRL_14_SHDW
	global EXT_PHY_CTRL_15
	global EXT_PHY_CTRL_15_SHDW
	global EXT_PHY_CTRL_16
	global EXT_PHY_CTRL_16_SHDW
	global EXT_PHY_CTRL_17
	global EXT_PHY_CTRL_17_SHDW
	global EXT_PHY_CTRL_18
	global EXT_PHY_CTRL_18_SHDW
	global EXT_PHY_CTRL_19
	global EXT_PHY_CTRL_19_SHDW
	global EXT_PHY_CTRL_20
	global EXT_PHY_CTRL_20_SHDW
	global EXT_PHY_CTRL_21
	global EXT_PHY_CTRL_21_SHDW
	global EXT_PHY_CTRL_22
	global EXT_PHY_CTRL_22_SHDW
	global EXT_PHY_CTRL_23
	global EXT_PHY_CTRL_23_SHDW
	global EXT_PHY_CTRL_24
	global EXT_PHY_CTRL_24_SHDW
	global EXT_PHY_CTRL_25
	global EXT_PHY_CTRL_25_SHDW
	global EXT_PHY_CTRL_26
	global EXT_PHY_CTRL_26_SHDW
	global EXT_PHY_CTRL_27
	global EXT_PHY_CTRL_27_SHDW
	global EXT_PHY_CTRL_28
	global EXT_PHY_CTRL_28_SHDW
	global EXT_PHY_CTRL_29
	global EXT_PHY_CTRL_29_SHDW
	global EXT_PHY_CTRL_30
	global EXT_PHY_CTRL_30_SHDW
	global EXT_PHY_CTRL_31
	global EXT_PHY_CTRL_31_SHDW
	global EXT_PHY_CTRL_32
	global EXT_PHY_CTRL_32_SHDW
	global EXT_PHY_CTRL_33
	global EXT_PHY_CTRL_33_SHDW
	global EXT_PHY_CTRL_34
	global EXT_PHY_CTRL_34_SHDW
	global EXT_PHY_CTRL_35
	global EXT_PHY_CTRL_35_SHDW
	global EXT_PHY_CTRL_36
	global EXT_PHY_CTRL_36_SHDW

	mww $EMIF_DDR_PHY_CTRL_1	0x8009
	mww $EMIF_DDR_PHY_CTRL_1_SHDW	0x8009

	set slave_ratio		0x80
	set gatelvl_init_ratio	0x20
	set wr_dqs_slave_delay	0x60
	set rd_dqs_slave_delay	0x60
	set dq_offset		0x40
	set gatelvl_init_mode	0x01
	set wr_data_slave_delay	0x80
	set gatelvl_num_dq0 0x0f
	set wrlvl_num_dq0 0x0f

	mww $EXT_PHY_CTRL_1        [ expr ($slave_ratio << 20) | ($slave_ratio << 10) | $slave_ratio ]
	mww $EXT_PHY_CTRL_1_SHDW   [ expr ($slave_ratio << 20) | ($slave_ratio << 10) | $slave_ratio ]
	mww $EXT_PHY_CTRL_26       [ expr ($gatelvl_init_ratio << 16) | $gatelvl_init_ratio ]
	mww $EXT_PHY_CTRL_26_SHDW  [ expr ($gatelvl_init_ratio << 16) | $gatelvl_init_ratio ]
	mww $EXT_PHY_CTRL_27       [ expr ($gatelvl_init_ratio << 16) | $gatelvl_init_ratio ]
	mww $EXT_PHY_CTRL_27_SHDW  [ expr ($gatelvl_init_ratio << 16) | $gatelvl_init_ratio ]
	mww $EXT_PHY_CTRL_28       [ expr ($gatelvl_init_ratio << 16) | $gatelvl_init_ratio ]
	mww $EXT_PHY_CTRL_28_SHDW  [ expr ($gatelvl_init_ratio << 16) | $gatelvl_init_ratio ]
	mww $EXT_PHY_CTRL_29       [ expr ($gatelvl_init_ratio << 16) | $gatelvl_init_ratio ]
	mww $EXT_PHY_CTRL_29_SHDW  [ expr ($gatelvl_init_ratio << 16) | $gatelvl_init_ratio ]
	mww $EXT_PHY_CTRL_30       [ expr ($gatelvl_init_ratio << 16) | $gatelvl_init_ratio ]
	mww $EXT_PHY_CTRL_30_SHDW  [ expr ($gatelvl_init_ratio << 16) | $gatelvl_init_ratio ]
	mww $EXT_PHY_CTRL_31       0x00
	mww $EXT_PHY_CTRL_31_SHDW  0x00
	mww $EXT_PHY_CTRL_32       0x00
	mww $EXT_PHY_CTRL_32_SHDW  0x00
	mww $EXT_PHY_CTRL_33       0x00
	mww $EXT_PHY_CTRL_33_SHDW  0x00
	mww $EXT_PHY_CTRL_34       0x00
	mww $EXT_PHY_CTRL_34_SHDW  0x00
	mww $EXT_PHY_CTRL_35       0x00
	mww $EXT_PHY_CTRL_35_SHDW  0x00
	mww $EXT_PHY_CTRL_22       0x00
	mww $EXT_PHY_CTRL_22_SHDW  0x00
	mww $EXT_PHY_CTRL_23       [ expr ($wr_dqs_slave_delay  <<  16) | $rd_dqs_slave_delay ]
	mww $EXT_PHY_CTRL_23_SHDW  [ expr ($wr_dqs_slave_delay  <<  16) | $rd_dqs_slave_delay ]
	mww $EXT_PHY_CTRL_24       [ expr ($dq_offset << 24) | ($gatelvl_init_mode << 16) | $wr_data_slave_delay ]
	mww $EXT_PHY_CTRL_24_SHDW  [ expr ($dq_offset << 24) | ($gatelvl_init_mode << 16) | $wr_data_slave_delay << 0 ]
	mww $EXT_PHY_CTRL_25       [ expr ($dq_offset << 21) | ($dq_offset << 14) | ($dq_offset << 7) | $dq_offset ]
	mww $EXT_PHY_CTRL_25_SHDW  [ expr ($dq_offset << 21) | ($dq_offset << 14) | ($dq_offset << 7) | $dq_offset ]
	mww $EXT_PHY_CTRL_36       [ expr ($wrlvl_num_dq0 << 4) | $gatelvl_num_dq0 ]
	mww $EXT_PHY_CTRL_36_SHDW  [ expr ($wrlvl_num_dq0 << 4) | $gatelvl_num_dq0 ]
}

proc config_ddr_timing { } {
	global EMIF_SDRAM_TIM_1
	global EMIF_SDRAM_TIM_2
	global EMIF_SDRAM_TIM_3
	global EMIF_SDRAM_TIM_1_SHDW
	global EMIF_SDRAM_TIM_2_SHDW
	global EMIF_SDRAM_TIM_3_SHDW
	global EMIF_ZQ_CONFIG

	mww $EMIF_SDRAM_TIM_1		0xeaaad4db
	mww $EMIF_SDRAM_TIM_1_SHDW	0xeaaad4db

	mww $EMIF_SDRAM_TIM_2		0x266b7fda
	mww $EMIF_SDRAM_TIM_2_SHDW	0x266b7fda

	mww $EMIF_SDRAM_TIM_3		0x107f8678
	mww $EMIF_SDRAM_TIM_3_SHDW	0x107f8678

	mww $EMIF_ZQ_CONFIG		0x50074be4
}

proc config_ddr_pm { } {
	global EMIF_PWR_MGMT_CTRL
	global EMIF_PWR_MGMT_CTRL_SHDW
	global EMIF_DLL_CALIB_CTRL
	global EMIF_DLL_CALIB_CTRL_SHDW
	global EMIF_TEMP_ALERT_CONFIG

	mww $EMIF_PWR_MGMT_CTRL		0x00
	mww $EMIF_PWR_MGMT_CTRL_SHDW	0x00
	mww $EMIF_DLL_CALIB_CTRL	0x00050000
	mww $EMIF_DLL_CALIB_CTRL_SHDW	0x00050000
	mww $EMIF_TEMP_ALERT_CONFIG	0x00
}

proc config_ddr_priority { } {
	global EMIF_PRI_COS_MAP
	global EMIF_CONNID_COS_1_MAP
	global EMIF_CONNID_COS_2_MAP
	global EMIF_RD_WR_EXEC_THRSH
	global COS_CONFIG

	mww $EMIF_PRI_COS_MAP       0x00
	mww $EMIF_CONNID_COS_1_MAP  0x00
	mww $EMIF_CONNID_COS_2_MAP  0x0
	mww $EMIF_RD_WR_EXEC_THRSH  0x0405
	mww $COS_CONFIG             0x00ffffff
}

proc config_ddr3 { SDRAM_CONFIG } {
	global CM_DLL_CTRL
	global EMIF_IODFT_TLGC
	global EMIF_RDWR_LVL_CTRL
	global EMIF_RDWR_LVL_RMP_CTRL
	global EMIF_SDRAM_CONFIG
	global EMIF_SDRAM_CONFIG_EXT
	global EMIF_SDRAM_REF_CTRL
	global EMIF_SDRAM_REF_CTRL_SHDW
	global EMIF_STATUS
	global EXT_PHY_CTRL_36
	global EXT_PHY_CTRL_36_SHDW

	emif_prcm_clk_enable
	vtp_enable

	set dll [ expr [ mrw $CM_DLL_CTRL ] & ~0x01 ]
	mww $CM_DLL_CTRL $dll
	while { !([ mrw $CM_DLL_CTRL ] & 0x04) } { }

	config_ddr_ioctrl

	mww $EMIF_SDRAM_CONFIG_EXT	0xc163
	mww $EMIF_IODFT_TLGC		0x2011
	mww $EMIF_IODFT_TLGC		0x2411
	mww $EMIF_IODFT_TLGC		0x2011
	mww $EMIF_SDRAM_REF_CTRL	0x80003000

	config_ddr_phy

	mww $EMIF_IODFT_TLGC		0x2011
	mww $EMIF_IODFT_TLGC		0x2411
	mww $EMIF_IODFT_TLGC		0x2011

	config_ddr_timing
	config_ddr_pm
	config_ddr_priority

	mww $EMIF_SDRAM_REF_CTRL	0x3000
	mww $EMIF_SDRAM_CONFIG		$SDRAM_CONFIG

	mww $EMIF_SDRAM_REF_CTRL	0x0c30
	mww $EMIF_SDRAM_REF_CTRL_SHDW	0x0c30

	sleep 10

	set tmp [ expr [ mrw $EXT_PHY_CTRL_36 ] | 0x0100 ]
	mww $EXT_PHY_CTRL_36		$tmp
	mww $EXT_PHY_CTRL_36_SHDW	$tmp

	mww $EMIF_RDWR_LVL_RMP_CTRL	0x80000000
	mww $EMIF_RDWR_LVL_CTRL		0x80000000

	while { [ mrw $EMIF_RDWR_LVL_CTRL ] & 0x80000000 } { }

	if { [ mrw $EMIF_STATUS ]  & 0x70 } {
		error "DDR3 Hardware Leveling incomplete!!!"
	}
}

proc init_platform { SDRAM_CONFIG } {
	config_opp100
	config_ddr3 $SDRAM_CONFIG
}

$_TARGETNAME configure -event reset-init { init_platform 0x61a013b2 }
$_TARGETNAME configure -event reset-end { disable_watchdog }