0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include <linux/linkage.h>
0017 #include <asm/mach-types.h>
0018
0019 #ifndef CONFIG_PXA_SHARPSL
0020 #error What am I doing here...
0021 #endif
0022
0023 .section ".start", "ax"
0024
0025 __SharpSL_start:
0026
0027
0028 ldr r7, .TOSAID
0029 mov r1, #0x10000000 @ Base address of TC6393 chip
0030 mov r6, #0x03
0031 ldrh r3, [r1, #8] @ Load TC6393XB Revison: This is 0x0003
0032 cmp r6, r3
0033 beq .SHARPEND @ Success -> tosa
0034
0035
0036 mrc p15, 0, r4, c0, c0 @ Get Processor ID
0037 and r4, r4, #0xffffff00
0038 ldr r3, .PXA270ID
0039 cmp r4, r3
0040 beq .PXA270
0041
0042
0043 ldr r1, .W100ADDR @ Base address of w100 chip + regs offset
0044
0045 mov r6, #0x31 @ Load Magic Init value
0046 str r6, [r1, #0x280] @ to SCRATCH_UMSK
0047 mov r5, #0x3000
0048 .W100LOOP:
0049 subs r5, r5, #1
0050 bne .W100LOOP
0051 mov r6, #0x30 @ Load 2nd Magic Init value
0052 str r6, [r1, #0x280] @ to SCRATCH_UMSK
0053
0054 ldr r6, [r1, #0] @ Load Chip ID
0055 ldr r3, .W100ID
0056 ldr r7, .POODLEID
0057 cmp r6, r3
0058 bne .SHARPEND @ We have no w100 - Poodle
0059
0060
0061 ldr r7, .CORGIID
0062 ldr r3, .PXA255ID
0063 cmp r4, r3
0064 blo .SHARPEND @ We have a PXA250 - Corgi
0065
0066
0067 bl get_flash_ids
0068 ldr r7, .SHEPHERDID
0069 cmp r3, #0x76 @ 64MiB flash
0070 beq .SHARPEND @ We have Shepherd
0071
0072
0073 ldr r7, .HUSKYID @ Must be Husky
0074 b .SHARPEND
0075
0076 .PXA270:
0077
0078 bl get_flash_ids
0079 ldr r7, .SPITZID
0080 cmp r3, #0x73 @ 16MiB flash
0081 beq .SHARPEND @ We have Spitz
0082
0083
0084 ldr r1, .SCOOP2ADDR
0085 ldr r7, .BORZOIID
0086 mov r6, #0x0140
0087 strh r6, [r1]
0088 ldrh r6, [r1]
0089 cmp r6, #0x0140
0090 beq .SHARPEND @ We have Borzoi
0091
0092
0093 ldr r7, .AKITAID
0094 b .SHARPEND @ We have Borzoi
0095
0096 .PXA255ID:
0097 .word 0x69052d00 @ PXA255 Processor ID
0098 .PXA270ID:
0099 .word 0x69054100 @ PXA270 Processor ID
0100 .W100ID:
0101 .word 0x57411002 @ w100 Chip ID
0102 .W100ADDR:
0103 .word 0x08010000 @ w100 Chip ID Reg Address
0104 .SCOOP2ADDR:
0105 .word 0x08800040
0106 .POODLEID:
0107 .word MACH_TYPE_POODLE
0108 .CORGIID:
0109 .word MACH_TYPE_CORGI
0110 .SHEPHERDID:
0111 .word MACH_TYPE_SHEPHERD
0112 .HUSKYID:
0113 .word MACH_TYPE_HUSKY
0114 .TOSAID:
0115 .word MACH_TYPE_TOSA
0116 .SPITZID:
0117 .word MACH_TYPE_SPITZ
0118 .AKITAID:
0119 .word MACH_TYPE_AKITA
0120 .BORZOIID:
0121 .word MACH_TYPE_BORZOI
0122
0123
0124
0125
0126
0127
0128 get_flash_ids:
0129 mov r1, #0x0c000000 @ Base address of NAND chip
0130 ldrb r3, [r1, #24] @ Load FLASHCTL
0131 bic r3, r3, #0x11 @ SET NCE
0132 orr r3, r3, #0x0a @ SET CLR + FLWP
0133 strb r3, [r1, #24] @ Save to FLASHCTL
0134 mov r2, #0x90 @ Command "readid"
0135 strb r2, [r1, #20] @ Save to FLASHIO
0136 bic r3, r3, #2 @ CLR CLE
0137 orr r3, r3, #4 @ SET ALE
0138 strb r3, [r1, #24] @ Save to FLASHCTL
0139 mov r2, #0 @ Address 0x00
0140 strb r2, [r1, #20] @ Save to FLASHIO
0141 bic r3, r3, #4 @ CLR ALE
0142 strb r3, [r1, #24] @ Save to FLASHCTL
0143 .fids1:
0144 ldrb r3, [r1, #24] @ Load FLASHCTL
0145 tst r3, #32 @ Is chip ready?
0146 beq .fids1
0147 ldrb r2, [r1, #20] @ NAND Manufacturer ID
0148 ldrb r3, [r1, #20] @ NAND Chip ID
0149 mov pc, lr
0150
0151 .SHARPEND: