Path: blob/master/arch/arm/boot/compressed/head-sharpsl.S
10819 views
/*1* linux/arch/arm/boot/compressed/head-sharpsl.S2*3* Copyright (C) 2004-2005 Richard Purdie <[email protected]>4*5* Sharp's bootloader doesn't pass any kind of machine ID6* so we have to figure out the machine for ourselves...7*8* Support for Poodle, Corgi (SL-C700), Shepherd (SL-C750)9* Husky (SL-C760), Tosa (SL-C6000), Spitz (SL-C3000),10* Akita (SL-C1000) and Borzoi (SL-C3100).11*12*/1314#include <linux/linkage.h>15#include <asm/mach-types.h>1617#ifndef CONFIG_PXA_SHARPSL18#error What am I doing here...19#endif2021.section ".start", "ax"2223__SharpSL_start:2425/* Check for TC6393 - if found we have a Tosa */26ldr r7, .TOSAID27mov r1, #0x10000000 @ Base address of TC6393 chip28mov r6, #0x0329ldrh r3, [r1, #8] @ Load TC6393XB Revison: This is 0x000330cmp r6, r331beq .SHARPEND @ Success -> tosa3233/* Check for pxa270 - if found, branch */34mrc p15, 0, r4, c0, c0 @ Get Processor ID35and r4, r4, #0xffffff0036ldr r3, .PXA270ID37cmp r4, r338beq .PXA2703940/* Check for w100 - if not found we have a Poodle */41ldr r1, .W100ADDR @ Base address of w100 chip + regs offset4243mov r6, #0x31 @ Load Magic Init value44str r6, [r1, #0x280] @ to SCRATCH_UMSK45mov r5, #0x300046.W100LOOP:47subs r5, r5, #148bne .W100LOOP49mov r6, #0x30 @ Load 2nd Magic Init value50str r6, [r1, #0x280] @ to SCRATCH_UMSK5152ldr r6, [r1, #0] @ Load Chip ID53ldr r3, .W100ID54ldr r7, .POODLEID55cmp r6, r356bne .SHARPEND @ We have no w100 - Poodle5758/* Check for pxa250 - if found we have a Corgi */59ldr r7, .CORGIID60ldr r3, .PXA255ID61cmp r4, r362blo .SHARPEND @ We have a PXA250 - Corgi6364/* Check for 64MiB flash - if found we have a Shepherd */65bl get_flash_ids66ldr r7, .SHEPHERDID67cmp r3, #0x76 @ 64MiB flash68beq .SHARPEND @ We have Shepherd6970/* Must be a Husky */71ldr r7, .HUSKYID @ Must be Husky72b .SHARPEND7374.PXA270:75/* Check for 16MiB flash - if found we have Spitz */76bl get_flash_ids77ldr r7, .SPITZID78cmp r3, #0x73 @ 16MiB flash79beq .SHARPEND @ We have Spitz8081/* Check for a second SCOOP chip - if found we have Borzoi */82ldr r1, .SCOOP2ADDR83ldr r7, .BORZOIID84mov r6, #0x014085strh r6, [r1]86ldrh r6, [r1]87cmp r6, #0x014088beq .SHARPEND @ We have Borzoi8990/* Must be Akita */91ldr r7, .AKITAID92b .SHARPEND @ We have Borzoi9394.PXA255ID:95.word 0x69052d00 @ PXA255 Processor ID96.PXA270ID:97.word 0x69054100 @ PXA270 Processor ID98.W100ID:99.word 0x57411002 @ w100 Chip ID100.W100ADDR:101.word 0x08010000 @ w100 Chip ID Reg Address102.SCOOP2ADDR:103.word 0x08800040104.POODLEID:105.word MACH_TYPE_POODLE106.CORGIID:107.word MACH_TYPE_CORGI108.SHEPHERDID:109.word MACH_TYPE_SHEPHERD110.HUSKYID:111.word MACH_TYPE_HUSKY112.TOSAID:113.word MACH_TYPE_TOSA114.SPITZID:115.word MACH_TYPE_SPITZ116.AKITAID:117.word MACH_TYPE_AKITA118.BORZOIID:119.word MACH_TYPE_BORZOI120121/*122* Return: r2 - NAND Manufacturer ID123* r3 - NAND Chip ID124* Corrupts: r1125*/126get_flash_ids:127mov r1, #0x0c000000 @ Base address of NAND chip128ldrb r3, [r1, #24] @ Load FLASHCTL129bic r3, r3, #0x11 @ SET NCE130orr r3, r3, #0x0a @ SET CLR + FLWP131strb r3, [r1, #24] @ Save to FLASHCTL132mov r2, #0x90 @ Command "readid"133strb r2, [r1, #20] @ Save to FLASHIO134bic r3, r3, #2 @ CLR CLE135orr r3, r3, #4 @ SET ALE136strb r3, [r1, #24] @ Save to FLASHCTL137mov r2, #0 @ Address 0x00138strb r2, [r1, #20] @ Save to FLASHIO139bic r3, r3, #4 @ CLR ALE140strb r3, [r1, #24] @ Save to FLASHCTL141.fids1:142ldrb r3, [r1, #24] @ Load FLASHCTL143tst r3, #32 @ Is chip ready?144beq .fids1145ldrb r2, [r1, #20] @ NAND Manufacturer ID146ldrb r3, [r1, #20] @ NAND Chip ID147mov pc, lr148149.SHARPEND:150151152