4(2)、uboot中内存初始化函数:mem_ctrl_asm_init
来源:互联网 发布:知乎boy scout 编辑:程序博客网 时间:2024/06/05 03:38
#include <config.h>#include <s5pc110.h>.globl mem_ctrl_asm_initmem_ctrl_asm_init:#ifndef CONFIG_EVT1ldr r0, =ASYNC_MSYS_DMC0_BASEldr r1, =0x0str r1, [r0, #0x0]/* This register is removed at EVT1 of C110. */ldr r1, =0x0str r1, [r0, #0xC]#endif#ifdef CONFIG_MCP_SINGLE/* DMC0 Drive Strength (Setting 2X) */ldrr0, =ELFIN_GPIO_BASEldrr1, =0x0000AAAAstrr1, [r0, #MP1_0DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP1_1DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP1_2DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP1_3DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP1_4DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP1_5DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP1_6DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP1_7DRV_SR_OFFSET]ldrr1, =0x00002AAAstrr1, [r0, #MP1_8DRV_SR_OFFSET]/* DMC1 Drive Strength (Setting 2X) */ldrr0, =ELFIN_GPIO_BASEldrr1, =0x0000AAAAstrr1, [r0, #MP2_0DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP2_1DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP2_2DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP2_3DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP2_4DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP2_5DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP2_6DRV_SR_OFFSET]ldrr1, =0x0000AAAAstrr1, [r0, #MP2_7DRV_SR_OFFSET]ldrr1, =0x00002AAAstrr1, [r0, #MP2_8DRV_SR_OFFSET]/* DMC0 initialization at single Type*/ldrr0, =APB_DMC_0_BASEldrr1, =0x00101000@PhyControl0 DLL parameter setting, manual 0x00101000strr1, [r0, #DMC_PHYCONTROL0]ldrr1, =0x00000086@PhyControl1 DLL parameter setting, LPDDR/LPDDR2 Casestrr1, [r0, #DMC_PHYCONTROL1]ldrr1, =0x00101002@PhyControl0 DLL onstrr1, [r0, #DMC_PHYCONTROL0]ldrr1, =0x00101003@PhyControl0 DLL startstrr1, [r0, #DMC_PHYCONTROL0]find_lock_val:ldrr1, [r0, #DMC_PHYSTATUS]@Load Phystatus register valueandr2, r1, #0x7cmpr2, #0x7@Loop until DLL is lockedbnefind_lock_valandr1, #0x3fc0 movr2, r1, LSL #18orrr2, r2, #0x100000orrr2 ,r2, #0x1000orrr1, r2, #0x3@Force Value lockingstrr1, [r0, #DMC_PHYCONTROL0]#if 0/* Memory margin test 10.01.05 */orrr1, r2, #0x1@DLL offstrr1, [r0, #DMC_PHYCONTROL0]#endif/* setting DDR2 */ldrr1, =0x0FFF2010@ConControl auto refresh offstrr1, [r0, #DMC_CONCONTROL]ldrr1, =DMC0_MEMCONTROL@MemControl BL=4, 1 chip, DDR2 type, dynamic self refresh, force precharge, dynamic power down offstrr1, [r0, #DMC_MEMCONTROL]ldrr1, =DMC0_MEMCONFIG_0@MemConfig0 256MB config, 8 banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixedstrr1, [r0, #DMC_MEMCONFIG0]ldrr1, =DMC0_MEMCONFIG_1@MemConfig1strr1, [r0, #DMC_MEMCONFIG1]ldrr1, =0xFF000000@PrechConfigstrr1, [r0, #DMC_PRECHCONFIG]ldrr1, =DMC0_TIMINGA_REF@TimingAref7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4E)strr1, [r0, #DMC_TIMINGAREF]ldrr1, =DMC0_TIMING_ROW@TimingRowfor @200MHzstrr1, [r0, #DMC_TIMINGROW]ldrr1, =DMC0_TIMING_DATA@TimingDataCL=3strr1, [r0, #DMC_TIMINGDATA]ldrr1, =DMC0_TIMING_PWR@TimingPowerstrr1, [r0, #DMC_TIMINGPOWER]ldrr1, =0x07000000@DirectCmdchip0 Deselectstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01000000@DirectCmdchip0 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00020000@DirectCmdchip0 EMRS2strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00030000@DirectCmdchip0 EMRS3strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00010400@DirectCmdchip0 EMRS1 (MEM DLL on, DQS# disable)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00000542@DirectCmdchip0 MRS (MEM DLL reset) CL=4, BL=4strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01000000@DirectCmdchip0 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05000000@DirectCmdchip0 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05000000@DirectCmdchip0 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00000442@DirectCmdchip0 MRS (MEM DLL unreset)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00010780@DirectCmdchip0 EMRS1 (OCD default)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00010400@DirectCmdchip0 EMRS1 (OCD exit)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x07100000@DirectCmdchip1 Deselectstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01100000@DirectCmdchip1 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00120000@DirectCmdchip1 EMRS2strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00130000@DirectCmdchip1 EMRS3strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00110400@DirectCmdchip1 EMRS1 (MEM DLL on, DQS# disable)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00100542@DirectCmdchip1 MRS (MEM DLL reset) CL=4, BL=4strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01100000@DirectCmdchip1 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05100000@DirectCmdchip1 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05100000@DirectCmdchip1 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00100442@DirectCmdchip1 MRS (MEM DLL unreset)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00110780@DirectCmdchip1 EMRS1 (OCD default)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00110400@DirectCmdchip1 EMRS1 (OCD exit)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x0FF02030@ConControlauto refresh onstrr1, [r0, #DMC_CONCONTROL]ldrr1, =0xFFFF00FF@PwrdnConfigstrr1, [r0, #DMC_PWRDNCONFIG]ldrr1, =0x00202400@MemControlBL=4, 2 chip, DDR2 type, dynamic self refresh, force precharge, dynamic power down offstrr1, [r0, #DMC_MEMCONTROL]/* DMC1 initialization */ldrr0, =APB_DMC_1_BASEldrr1, =0x00101000@Phycontrol0 DLL parameter settingstrr1, [r0, #DMC_PHYCONTROL0]ldrr1, =0x00000086@Phycontrol1 DLL parameter settingstrr1, [r0, #DMC_PHYCONTROL1]ldrr1, =0x00101002@PhyControl0 DLL onstrr1, [r0, #DMC_PHYCONTROL0]ldrr1, =0x00101003@PhyControl0 DLL startstrr1, [r0, #DMC_PHYCONTROL0]find_lock_val1:ldrr1, [r0, #DMC_PHYSTATUS]@Load Phystatus register valueandr2, r1, #0x7cmpr2, #0x7@Loop until DLL is lockedbnefind_lock_val1andr1, #0x3fc0 movr2, r1, LSL #18orrr2, r2, #0x100000orrr2, r2, #0x1000orrr1, r2, #0x3@Force Value lockingstrr1, [r0, #DMC_PHYCONTROL0]#if 0/* Memory margin test 10.01.05 */orrr1, r2, #0x1@DLL offstrr1, [r0, #DMC_PHYCONTROL0]#endif/* settinf fot DDR2 */ldrr0, =APB_DMC_1_BASEldrr1, =0x0FFF2010@auto refresh offstrr1, [r0, #DMC_CONCONTROL]ldrr1, =DMC1_MEMCONTROL@MemControlBL=4, 2 chip, DDR2 type, dynamic self refresh, force precharge, dynamic power down offstrr1, [r0, #DMC_MEMCONTROL]ldrr1, =DMC1_MEMCONFIG_0@MemConfig0512MB config, 8 banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixedstrr1, [r0, #DMC_MEMCONFIG0]ldrr1, =DMC1_MEMCONFIG_1@MemConfig1strr1, [r0, #DMC_MEMCONFIG1]ldrr1, =0xFF000000strr1, [r0, #DMC_PRECHCONFIG]ldrr1, =DMC1_TIMINGA_REF@TimingAref7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4strr1, [r0, #DMC_TIMINGAREF]ldrr1, =DMC1_TIMING_ROW@TimingRowfor @200MHzstrr1, [r0, #DMC_TIMINGROW]ldrr1, =DMC1_TIMING_DATA@TimingDataCL=3strr1, [r0, #DMC_TIMINGDATA]ldrr1, =DMC1_TIMING_PWR@TimingPowerstrr1, [r0, #DMC_TIMINGPOWER]ldrr1, =0x07000000@DirectCmdchip0 Deselectstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01000000@DirectCmdchip0 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00020000@DirectCmdchip0 EMRS2strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00030000@DirectCmdchip0 EMRS3strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00010400@DirectCmdchip0 EMRS1 (MEM DLL on, DQS# disable)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00000542@DirectCmdchip0 MRS (MEM DLL reset) CL=4, BL=4strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01000000@DirectCmdchip0 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05000000@DirectCmdchip0 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05000000@DirectCmdchip0 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00000442@DirectCmdchip0 MRS (MEM DLL unreset)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00010780@DirectCmdchip0 EMRS1 (OCD default)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00010400@DirectCmdchip0 EMRS1 (OCD exit)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x07100000@DirectCmdchip1 Deselectstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01100000@DirectCmdchip1 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00120000@DirectCmdchip1 EMRS2strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00130000@DirectCmdchip1 EMRS3strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00110440@DirectCmdchip1 EMRS1 (MEM DLL on, DQS# disable)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00100542@DirectCmdchip1 MRS (MEM DLL reset) CL=4, BL=4strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01100000@DirectCmdchip1 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05100000@DirectCmdchip1 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05100000@DirectCmdchip1 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00100442@DirectCmdchip1 MRS (MEM DLL unreset)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00110780@DirectCmdchip1 EMRS1 (OCD default)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00110400@DirectCmdchip1 EMRS1 (OCD exit)strr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x0FF02030@ConControlauto refresh onstrr1, [r0, #DMC_CONCONTROL]ldrr1, =0xFFFF00FF@PwrdnConfigstrr1, [r0, #DMC_PWRDNCONFIG]ldrr1, =DMC1_MEMCONTROL@MemControlBL=4, 2 chip, DDR2 type, dynamic self refresh, force precharge, dynamic power down offstrr1, [r0, #DMC_MEMCONTROL]#else/* CONFIG_MCP_SINGLE *//* DMC0 initialization */ldrr0, =APB_DMC_0_BASEldrr1, =0x00101000@Phycontrol0 DLL parameter settingstrr1, [r0, #DMC_PHYCONTROL0]ldrr1, =0x00000084@Phycontrol1 DLL parameter settingstrr1, [r0, #DMC_PHYCONTROL1]ldrr1, =0x00101002@Phycontrol2 DLL parameter settingstrr1, [r0, #DMC_PHYCONTROL0]ldrr1, =0x00101003@Dll onstrr1, [r0, #DMC_PHYCONTROL0]find_lock_val:ldrr1, [r0, #DMC_PHYSTATUS]@Load Phystatus register valueand r2, r1, #0x7cmpr2, #0x7@Loop until DLL is lockedbnefind_lock_valandr1, #0x3fc0 movr2, r1, LSL #18orrr2, r2, #0x100000orrr2, r2, #0x1000orrr1, r2, #0x3@Force Value lockingstrr1, [r0, #DMC_PHYCONTROL0]#if 1 /* DRAM margin test 10.01.06 */orrr1, r2, #0x1@DLL offstrr1, [r0, #DMC_PHYCONTROL0]#endifldrr1, =0x0fff1010@auto refresh offstrr1, [r0, #DMC_CONCONTROL]ldrr1, =0x00212100strr1, [r0, #DMC_MEMCONTROL]ldrr1, =DMC0_MEMCONFIG_0strr1, [r0, #DMC_MEMCONFIG0]ldrr1, =DMC0_MEMCONFIG_1strr1, [r0, #DMC_MEMCONFIG1]ldrr1, =0xff000000strr1, [r0, #DMC_PRECHCONFIG]ldrr1, =DMC0_TIMINGA_REFstrr1, [r0, #DMC_TIMINGAREF]ldrr1, =DMC0_TIMING_ROW@TimingRow@133MHzstrr1, [r0, #DMC_TIMINGROW]ldrr1, =DMC0_TIMING_DATAstrr1, [r0, #DMC_TIMINGDATA]ldrr1, =DMC0_TIMING_PWR@Timing Powerstrr1, [r0, #DMC_TIMINGPOWER]ldrr1, =0x07000000@chip0 Deselectstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01000000@chip0 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05000000@chip0 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05000000@chip0 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00000032@chip0 MRSstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x07100000@chip1 Deselectstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01100000@chip1 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05100000@chip1 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05100000@chip1 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00100032@chip1 MRSstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x0FFF20B0@ConControl auto refresh onstrr1, [r0, #DMC_CONCONTROL]ldrr1, =0xFFFF00FF@PwrdnConfigstrr1, [r0, #DMC_PWRDNCONFIG]ldrr1, =0x00212113@MemControlstrr1, [r0, #DMC_MEMCONTROL]/* DMC1 initialization */ldrr0, =APB_DMC_1_BASEldrr1, =0x00101000@Phycontrol0 DLL parameter settingstrr1, [r0, #DMC_PHYCONTROL0]ldrr1, =0x00000084@Phycontrol1 DLL parameter settingstrr1, [r0, #DMC_PHYCONTROL1]ldrr1, =0x00101002@Phycontrol2 DLL parameter settingstrr1, [r0, #DMC_PHYCONTROL0]ldrr1, =0x00101003@Dll onstrr1, [r0, #DMC_PHYCONTROL0]find_lock_val1:ldrr1, [r0, #DMC_PHYSTATUS]@Load Phystatus register valueand r2, r1, #0x7cmpr2, #0x7@Loop until DLL is lockedbnefind_lock_val1andr1, #0x3fc0 movr2, r1, LSL #18orrr2, r2, #0x100000orrr2, r2, #0x1000orrr1, r2, #0x3@Force Value lockingstrr1, [r0, #DMC_PHYCONTROL0]#if 1/* Memory margin test 10.01.05 */orrr1, r2, #0x1@DLL offstrr1, [r0, #DMC_PHYCONTROL0]#endifldrr0, =APB_DMC_1_BASEldrr1, =0x0FFF1010@auto refresh offstrr1, [r0, #DMC_CONCONTROL]ldr r1, =DMC1_MEMCONTROLstrr1, [r0, #DMC_MEMCONTROL]ldrr1, =DMC1_MEMCONFIG_0strr1, [r0, #DMC_MEMCONFIG0]ldrr1, =DMC1_MEMCONFIG_1strr1, [r0, #DMC_MEMCONFIG1]ldrr1, =0xff000000strr1, [r0, #DMC_PRECHCONFIG]ldrr1, =DMC1_TIMINGA_REFstrr1, [r0, #DMC_TIMINGAREF]ldrr1, =DMC1_TIMING_ROW@TimingRow@133MHzstrr1, [r0, #DMC_TIMINGROW]ldrr1, =DMC1_TIMING_DATAstrr1, [r0, #DMC_TIMINGDATA]ldrr1, =DMC1_TIMING_PWR@Timing Powerstrr1, [r0, #DMC_TIMINGPOWER]ldrr1, =0x07000000@chip0 Deselectstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01000000@chip0 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05000000@chip0 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05000000@chip0 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00000032@chip0 MRSstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00020020@chip0 EMRSstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x07100000@chip1 Deselectstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x01100000@chip1 PALLstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05100000@chip1 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x05100000@chip1 REFAstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00100032@chip1 MRSstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x00120020@chip0 EMRSstrr1, [r0, #DMC_DIRECTCMD]ldrr1, =0x0FFF10B0@ConControl auto refresh onstrr1, [r0, #DMC_CONCONTROL]ldrr1, =0xFFFF00FF@PwrdnConfigstrr1, [r0, #DMC_PWRDNCONFIG]ldrr1, =0x00212113@MemControlstrr1, [r0, #DMC_MEMCONTROL]#endif/* CONFIG_MCP_AC / CONFIG_MCP_H / CONFIG_MCP_B / CONFIG_MCP_D / CONFIG_MCP_N */movpc, lr
阅读全文
0 0
- 4(2)、uboot中内存初始化函数:mem_ctrl_asm_init
- 4(1)、uboot中系统时钟初始化函数:system_clock_init
- Uboot 内存初始化(2440)
- 嵌入式学习-uboot-lesson7-内存初始化
- 内存初始化函数memset()
- 内存RAM中调试UBOOT
- Uboot中控制台的前期初始化
- GeekOS源代码学习(3)Main函数中Init_Mem初始化内存
- uboot 中内存测试,内存检测方法
- uboot 中内存测试,内存检测方法
- uboot 中内存测试,内存检测方法
- memset函数: 内存初始化介绍
- 十二,memset函数初始化内存
- page_address_init 高端内存初始化函数
- UBOOT-2010.06 移植 初始化时钟 (三)
- 嵌入式 uboot中mtest测试内存
- uboot初始化中为什么要设置CPU为SVC模式
- bootloader---27.uboot中SD初始化及读写分析
- dubbo+zookeeper+SpringMVC+Spring+Mybatis+Freemarker集成(分布式入门+源码)
- redis+spring+maven构建项目(带有缓存)
- MySQL、Oracle分页查询的SQL语句
- C# 容器详解及其整理
- Hadoop工作流:Oozie与Azkaban
- 4(2)、uboot中内存初始化函数:mem_ctrl_asm_init
- es6 javascript对象方法Object.assign()
- 比较两个Integer的int值是否相等
- 常量
- tools安装后无法使用
- node项目之express-winston , winston
- Linux进程通信之二元信号量
- Android进阶之路
- Eclipse 处理svn:ignore忽略文件同步管理