2005-04-16 15:20:36 -07:00
/ *
* linux/ a r c h / a r m / b o o t / c o m p r e s s e d / h e a d - s h a r p s l . S
*
* Copyright ( C ) 2 0 0 4 - 2 0 0 5 R i c h a r d P u r d i e < r p u r d i e @rpsys.net>
*
* Sharp' s b o o t l o a d e r d o e s n ' t p a s s a n y k i n d o f m a c h i n e I D
* so w e h a v e t o f i g u r e o u t t h e m a c h i n e f o r o u r s e l v e s . . .
*
* Support f o r P o o d l e , C o r g i ( S L - C 7 0 0 ) , S h e p h e r d ( S L - C 7 5 0 )
2005-09-07 17:24:35 +01:00
* Husky ( S L - C 7 6 0 ) , T o s a ( S L - C 6 0 0 0 ) , S p i t z ( S L - C 3 0 0 0 ) ,
* Akita ( S L - C 1 0 0 0 ) a n d B o r z o i ( S L - C 3 1 0 0 ) .
2005-04-16 15:20:36 -07:00
*
* /
# include < l i n u x / l i n k a g e . h >
# include < a s m / m a c h - t y p e s . h >
# ifndef C O N F I G _ P X A _ S H A R P S L
# error W h a t a m I d o i n g h e r e . . .
# endif
.section " .start " , " ax"
__SharpSL_start :
2005-09-07 17:24:35 +01:00
/* Check for TC6393 - if found we have a Tosa */
ldr r7 , . T O S A I D
mov r1 , #0x10000000 @ Base address of TC6393 chip
mov r6 , #0x03
ldrh r3 , [ r1 , #8 ] @ Load TC6393XB Revison: This is 0x0003
cmp r6 , r3
beq . S H A R P E N D @ Success -> tosa
/* Check for pxa270 - if found, branch */
mrc p15 , 0 , r4 , c0 , c0 @ Get Processor ID
and r4 , r4 , #0xffffff00
ldr r3 , . P X A 2 7 0 I D
cmp r4 , r3
beq . P X A 2 7 0
/* Check for w100 - if not found we have a Poodle */
2005-04-16 15:20:36 -07:00
ldr r1 , . W 1 0 0 A D D R @ Base address of w100 chip + regs offset
mov r6 , #0x31 @ Load Magic Init value
str r6 , [ r1 , #0x280 ] @ to SCRATCH_UMSK
mov r5 , #0x3000
.W100LOOP :
subs r5 , r5 , #1
2005-09-07 17:24:35 +01:00
bne . W 1 0 0 L O O P
2005-04-16 15:20:36 -07:00
mov r6 , #0x30 @ Load 2nd Magic Init value
str r6 , [ r1 , #0x280 ] @ to SCRATCH_UMSK
ldr r6 , [ r1 , #0 ] @ Load Chip ID
ldr r3 , . W 1 0 0 I D
ldr r7 , . P O O D L E I D
cmp r6 , r3
bne . S H A R P E N D @ We have no w100 - Poodle
2005-09-07 17:24:35 +01:00
/* Check for pxa250 - if found we have a Corgi */
2005-04-16 15:20:36 -07:00
ldr r7 , . C O R G I I D
ldr r3 , . P X A 2 5 5 I D
2005-09-07 17:24:35 +01:00
cmp r4 , r3
2005-04-16 15:20:36 -07:00
blo . S H A R P E N D @ We have a PXA250 - Corgi
2005-09-07 17:24:35 +01:00
/* Check for 64MiB flash - if found we have a Shepherd */
bl g e t _ f l a s h _ i d s
2005-04-16 15:20:36 -07:00
ldr r7 , . S H E P H E R D I D
cmp r3 , #0x76 @ 64MiB flash
beq . S H A R P E N D @ We have Shepherd
2005-09-07 17:24:35 +01:00
/* Must be a Husky */
2005-04-16 15:20:36 -07:00
ldr r7 , . H U S K Y I D @ Must be Husky
b . S H A R P E N D
2005-09-07 17:24:35 +01:00
.PXA270 :
/* Check for 16MiB flash - if found we have Spitz */
bl g e t _ f l a s h _ i d s
ldr r7 , . S P I T Z I D
cmp r3 , #0x73 @ 16MiB flash
beq . S H A R P E N D @ We have Spitz
/* Check for a second SCOOP chip - if found we have Borzoi */
ldr r1 , . S C O O P 2 A D D R
ldr r7 , . B O R Z O I I D
mov r6 , #0x0140
strh r6 , [ r1 ]
ldrh r6 , [ r1 ]
cmp r6 , #0x0140
beq . S H A R P E N D @ We have Borzoi
/* Must be Akita */
ldr r7 , . A K I T A I D
b . S H A R P E N D @ We have Borzoi
2005-04-16 15:20:36 -07:00
.PXA255ID :
.word 0x69052d00 @ PXA255 Processor ID
2005-09-07 17:24:35 +01:00
.PXA270ID :
.word 0x69054100 @ PXA270 Processor ID
2005-04-16 15:20:36 -07:00
.W100ID :
.word 0x57411002 @ w100 Chip ID
.W100ADDR :
.word 0x08010000 @ w100 Chip ID Reg Address
2005-09-07 17:24:35 +01:00
.SCOOP2ADDR :
.word 0x08800040
2005-04-16 15:20:36 -07:00
.POODLEID :
.word MACH_TYPE_POODLE
.CORGIID :
.word MACH_TYPE_CORGI
.SHEPHERDID :
.word MACH_TYPE_SHEPHERD
.HUSKYID :
.word MACH_TYPE_HUSKY
2005-09-07 17:24:35 +01:00
.TOSAID :
.word MACH_TYPE_TOSA
.SPITZID :
.word MACH_TYPE_SPITZ
.AKITAID :
.word MACH_TYPE_AKITA
.BORZOIID :
.word MACH_TYPE_BORZOI
2005-04-16 15:20:36 -07:00
2005-09-07 17:24:35 +01:00
/ *
* Return : r2 - N A N D M a n u f a c t u r e r I D
* r3 - N A N D C h i p I D
* Corrupts : r1
* /
get_flash_ids :
mov r1 , #0x0c000000 @ Base address of NAND chip
ldrb r3 , [ r1 , #24 ] @ Load FLASHCTL
bic r3 , r3 , #0x11 @ SET NCE
orr r3 , r3 , #0x0a @ SET CLR + FLWP
strb r3 , [ r1 , #24 ] @ Save to FLASHCTL
mov r2 , #0x90 @ Command "readid"
strb r2 , [ r1 , #20 ] @ Save to FLASHIO
bic r3 , r3 , #2 @ CLR CLE
orr r3 , r3 , #4 @ SET ALE
strb r3 , [ r1 , #24 ] @ Save to FLASHCTL
mov r2 , #0 @ Address 0x00
strb r2 , [ r1 , #20 ] @ Save to FLASHIO
bic r3 , r3 , #4 @ CLR ALE
strb r3 , [ r1 , #24 ] @ Save to FLASHCTL
.fids1 :
ldrb r3 , [ r1 , #24 ] @ Load FLASHCTL
tst r3 , #32 @ Is chip ready?
beq . f i d s1
ldrb r2 , [ r1 , #20 ] @ NAND Manufacturer ID
ldrb r3 , [ r1 , #20 ] @ NAND Chip ID
mov p c , l r
2005-04-16 15:20:36 -07:00
2005-09-07 17:24:35 +01:00
.SHARPEND :