⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu_init.s

📁 s3c6410的 Uboot 代码, 感兴趣的可以看看呀
💻 S
字号:
/* *  cpu/s3c24xx/s3c2416/cpu_init.S * *  Memory controller and cache code for U-Boot * *  Copyright (c) 2006,  Samsung Electronics *  All rights reserved. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * $Id: cpu_init.S,v 1.1 2008/03/31 23:21:29 boyko Exp $ */#include <config.h>#include <s3c2416.h>/* * sdr_ram_asm_init: Initialize memory controller * * r0: input argument that contains memory setting value * r1: BANKCON1 Value * r2: BANKCON1 Value Modified * r3: Temp value * r4: MEMCON Base Address * r5-r11: setting value * */	.globl sdr_ctrl_asm_initsdr_ctrl_asm_init:	mov	r1, pc	ldr	r2, =0x00000fff	orr	r1, r1, r2	and	r0, r0, r1	mov	r13, #2	/* Set GPK port when using x32 bus width. */	ldr	r2,=GPKCON_REG	ldr	r1,=0xaaaaaaaa	@ set Sdata[31:16]	str	r1, [r2]	/* read setting value from structure */	ldr	r4, =ELFIN_MEMCTL_BASE	ldmia	r0!, {r5-r11}	stmia	r4!, {r5-r9}#ifdef CONFIG_PM	/* compare INFORM2 register to confirm the dram type*/	ldr	r1, =INFORM2_REG	ldr	r1, [r1]	ldr	r2, =0xDA	cmp	r2, r1	ldreq	r4, =ELFIN_MEMCTL_BASE	beq	1002f#endif1000:	ldr	r4, =ELFIN_MEMCTL_BASE	ldr	r1, [r4, #BANKCON1_OFFSET]	ldr	r2, =0x40000000			/* DDR DSQInDLL Value Setting */	orr	r1, r1, r2	bic	r1, r1, #INIT_MASK	/* Step 1: issue PALL */	orr	r2, r1, #INIT_PALL	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 2: write 0xff into the refresh timer */	mov	r3, #0xff	str	r3, [r4, #REFRESH_OFFSET]	/* Step 3: wait more than 120 clk */	mov	r3, #0x1001:	subs	r3, r3, #1	bne	1b	/* Step 4: issue MRS */	orr	r2, r1, #INIT_MRS	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 5: nornal operation value into the refresh timer */	str	r9, [r4, #REFRESH_OFFSET]	/* Step 6: issue EMRS */	orr	r2, r1, #INIT_EMRS	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 7: Normal Mode */	orr	r2, r1, #INIT_NORMAL	str	r2, [r4, #BANKCON1_OFFSET]	ldr	r6, =PHYS_SDRAM_1	ldr	r7, =0x24564236	swp	r8, r7, [r6]	swp	r5, r8, [r6]	cmp	r7, r5	beq	1001f	sub	r13, r13, #1	cmp	r13, #0	beq	1004f1002:	stmia	r4!, {r10-r11}	b	1000b/* boyko : Memory Type DDR2 */1004:	ldr	r4, =ELFIN_MEMCTL_BASE	/* Step 1: BANKCFG Setting */	ldr	r2, =CFG_BANK_CFG_VAL_DDR2	str	r2, [r4, #BANKCFG_OFFSET]	ldr	r2, =0x44000040	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 2: BANKCON2 Setting */	ldr	r2, =CFG_BANK_CON2_VAL_DDR2	str	r2, [r4, #BANKCON2_OFFSET]	/* Step 3: issue PALL */	orr	r2, r1, #INIT_PALL	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 4: Issue a EMRS2 command */	ldr	r2, =0x80000000	str	r2, [r4, #BANKCON3_OFFSET]	orr	r2, r1, #INIT_EMRS	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 5: Issue a EMRS3 command */	ldr	r2, =0xc0000000	str	r2, [r4, #BANKCON3_OFFSET]	orr	r2, r1, #INIT_EMRS	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 6: Issue a EMRS1 command */	ldr	r2, =0x44000000	str	r2, [r4, #BANKCON3_OFFSET]	orr	r2, r1, #INIT_EMRS	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 7: issue MRS */	ldr	r2, =0x44000130	str	r2, [r4, #BANKCON3_OFFSET]	orr	r2, r1, #INIT_MRS	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 8: issue PALL */	orr	r2, r1, #INIT_PALL	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 9: write 0xff into the refresh timer */	mov	r3, #0xff	str	r3, [r4, #REFRESH_OFFSET]	/* Step 10: wait more than 120 clk */	mov	r3, #0x10010:	subs	r3, r3, #1	bne	10b	/* Step 11: issue MRS */	ldr	r2, =0x44000030	str	r2, [r4, #BANKCON3_OFFSET]	orr	r2, r1, #INIT_MRS	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 12: Issue a EMRS1 command */	ldr	r2, =0x47800030	str	r2, [r4, #BANKCON3_OFFSET]	orr	r2, r1, #INIT_EMRS	str	r2, [r4, #BANKCON1_OFFSET]	ldr	r2, =0x44000030	str	r2, [r4, #BANKCON3_OFFSET]	orr	r2, r1, #INIT_EMRS	str	r2, [r4, #BANKCON1_OFFSET]	/* Step 13: write 0x87 into the refresh timer */	mov	r3, #0x87	str	r3, [r4, #REFRESH_OFFSET]	/* Step 14: Normal Mode */	orr	r2, r1, #INIT_NORMAL	str	r2, [r4, #BANKCON1_OFFSET]/* boyko : Memory Type DDR2 */1001:	mov	pc, lr	.ltorg/* Below code is for ARM920T */	.globl cleanDCachecleanDCache:	mcr	p15, 0, r0, c7, c10, 2	add	r0, r0, #(1<<5)	tst	r0, #(1<<7)	beq	cleanDCache	bic	r0, r0, #(1<<7)	adds	r0, r0, #(1<<26)	bcc	cleanDCache	mov	pc, lr	.globl cleanFlushDCachecleanFlushDCache:	mcr	p15, 0, r0, c7, c14, 2	add	r0, r0, #(1<<5)	tst	r0, #(1<<7)	beq	cleanFlushDCache	bic	r0, r0, #(1<<7)	adds	r0, r0, #(1<<26)	bcc	cleanFlushDCache	mov	pc, lr	.globl cleanFlushCachecleanFlushCache:	mrc	p15, 0, pc, c7, c14, 3	/* test/cleanflush D-Cache */	bne	cleanFlushCache	mcr	p15, 0, r0, c7, c5, 0	/* flush I-Cache */	mov	pc, lr	.ltorg

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -