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

📄 crcek.s

📁 UBOOT 源码
💻 S
字号:
/** * (C) Copyright 2005 * 2N Telekomunikace, Ladislav Michl <michl@2n.cz> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2. * * Image layout looks like following: *	u32 - size *	u32 - version *	... - data *	u32 - crc32 */#include <config.h>#include "crcek.h"/** * do_crc32 - calculate CRC32 of given buffer * r0 - crc * r1 - pointer to buffer * r2 - buffer len */	.macro	do_crc32	ldr	r5, FFFFFFFF	eor	r0, r0, r5	adr	r3, CRC32_TABLE1:	ldrb    r4, [r1], #1	eor	r4, r4, r0	and	r4, r4, #0xff	ldr	r4, [r3, r4, lsl#2]	eor	r0, r4, r0, lsr#8	subs	r2, r2, #0x1	bne 	1b	eor	r0, r0, r5	.endm	.macro crcuj, offset, size	mov	r0, #0	ldr	r1, \offset	ldr	r2, [r1], #4	cmp	r2, r0		@ no data, no problem	beq	2f	tst	r2, #3		@ unaligned size	bne	2f	ldr	r3, \size	cmp	r2, r3		@ bogus size	bhi	2f	do_crc32	ldr	r1, [r1]2:	cmp	r0, r1	.endm	.macro wait, reg	mov	\reg, #0x1000003:	subs	\reg, \reg, #0x1	bne 	3b	.endm.text.globl crcekcrcek:	/* Enable I-cache */	mrc	p15, 0, r1, c0, c0, 0		@ read C15 ID register	mrc	p15, 0, r1, c0, c0, 1		@ read C15 Cache information register	mrc	p15, 0, r1, c1, c0, 0		@ read C15 Control register	orr	r1, r1, #0x1000			@ enable I-cache, map interrupt vector 0xffff0000	mcr	p15, 0, r1, c1, c0, 0		@ write C15 Control register	mov	r1, #0x00	mcr	p15, 0, r1, c7, c5, 0		@ Flush I-cache	nop	nop	nop	nop	/* Setup clocking mode */	ldr	r0, MPU_CLKM_BASE		@ base of CLOCK unit	ldrh	r1, [r0, #0x18]			@ ARM_SYST - get reset status	bic	r1, r1, #(7 << 11)		@ clear clock select	orr	r1, r1, #(2 << 11)		@ set synchronous scalable	mov	r2, #0loop:	cmp	r2, #1				@ this loop will wait for at least 100 cycles	streqh	r1, [r0, #0x18]			@ before issuing next request from MPU	add	r2, r2, #1			@ on the 1st run code is loaded into I-cache	cmp	r2, #16				@ and second run will set clocking mode	bne	loop	nop	/* Setup clock dividers */	ldr	r1, CKCTL_VAL	orr	r1, r1, #0x2000			@ enable DSP clock	strh	r1, [r0]			@ setup clock divisors	/* Setup DPLL to generate requested freq */	ldr	r0, DPLL1_BASE			@ base of DPLL1 register	mov	r1, #0x0010			@ set PLL_ENABLE	orr	r1, r1, #0x2000			@ set IOB to new locking	orr	r1, r1, #(OMAP5910_DPLL_MUL << 7) @ setup multiplier CLKREF	orr	r1, r1, #(OMAP5910_DPLL_DIV << 5) @ setup divider CLKREF	strh	r1, [r0]			@ writelocking:	ldrh	r1, [r0]			@ get DPLL value	tst	r1, #0x01	beq	locking				@ while LOCK not set	/* Enable clock */	ldr	r0, MPU_CLKM_BASE		@ base of CLOCK unit	mov	r1, #(1 << 10)			@ disable idle mode do not check						@ nWAKEUP pin, other remain active	strh	r1, [r0, #0x04]	ldr	r1, EN_CLK_VAL	strh	r1, [r0, #0x08]	mov	r1, #0x003f			@ FLASH.RP not enabled in idle and	strh	r1, [r0, #0x0c]			@ max delayed ( 32 x CLKIN )	mov	r6, #0	crcuj	_LOADER1_OFFSET, _LOADER_SIZE	bne	crc1_bad	orr	r6, r6, #1crc1_bad:	crcuj	_LOADER2_OFFSET, _LOADER_SIZE	bne	crc2_bad	orr	r6, r6, #2crc2_bad:	ldr	r3, _LOADER1_OFFSET	ldr	r4, _LOADER2_OFFSET	teq	r6, #3	bne	one_is_bad	@ one of them (or both) has bad crc	ldr	r1, [r3, #4]	ldr	r2, [r4, #4]	cmp	r1, r2		@ boot 2nd loader if versions differ	beq	boot_1st	b	boot_2ndone_is_bad:	tst	r6, #1	bne	boot_1st	tst	r6, #2	bne	boot_2nd@ We are doomed, so let user know.hell:	ldr	r0, GPIO_BASE	@ configure GPIO pins	ldr	r1, GPIO_DIRECTION	strh	r1, [r0, #0x08]blink_loop:	mov	r1, #0x08	strh    r1, [r0, #0x04]	wait	r3	mov	r1, #0x10	strh    r1, [r0, #0x04]	wait	r3	b blink_loopboot_1st:	add	pc, r3, #8boot_2nd:	add	pc, r4, #8_LOADER_SIZE:	.word LOADER_SIZE - 8	@ minus size and crc32_LOADER1_OFFSET:	.word LOADER1_OFFSET_LOADER2_OFFSET:	.word LOADER2_OFFSETFFFFFFFF:	.word 0xffffffffCRC32_TABLE:	.word 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419	.word 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4	.word 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07	.word 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de	.word 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856	.word 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9	.word 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4	.word 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b	.word 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3	.word 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a	.word 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599	.word 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924	.word 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190	.word 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f	.word 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e	.word 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01	.word 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed	.word 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950	.word 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3	.word 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2	.word 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a	.word 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5	.word 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010	.word 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f	.word 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17	.word 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6	.word 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615	.word 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8	.word 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344	.word 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb	.word 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a	.word 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5	.word 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1	.word 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c	.word 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef	.word 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236	.word 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe	.word 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31	.word 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c	.word 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713	.word 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b	.word 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242	.word 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1	.word 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c	.word 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278	.word 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7	.word 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66	.word 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9	.word 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605	.word 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8	.word 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b	.word 0x2d02ef8dGPIO_BASE:	.word 0xfffce000MPU_CLKM_BASE:	.word 0xfffece00DPLL1_BASE:	.word 0xfffecf00CKCTL_VAL:	.word OMAP5910_ARM_CKCTLEN_CLK_VAL:	.word OMAP5910_ARM_EN_CLKGPIO_DIRECTION:	.word 0x0000ffe7.end

⌨️ 快捷键说明

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