Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * linux/arch/arm/boot/compressed/head-sharpsl.S
0004  *
0005  * Copyright (C) 2004-2005 Richard Purdie <rpurdie@rpsys.net>
0006  *
0007  * Sharp's bootloader doesn't pass any kind of machine ID
0008  * so we have to figure out the machine for ourselves...
0009  *
0010  * Support for Poodle, Corgi (SL-C700), Shepherd (SL-C750)
0011  * Husky (SL-C760), Tosa (SL-C6000), Spitz (SL-C3000),
0012  * Akita (SL-C1000) and Borzoi (SL-C3100).
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 /* Check for TC6393 - if found we have a Tosa */
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 /* Check for pxa270 - if found, branch */
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 /* Check for w100 - if not found we have a Poodle */
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 /* Check for pxa250 - if found we have a Corgi */
0061     ldr r7, .CORGIID
0062     ldr r3, .PXA255ID
0063     cmp r4, r3
0064     blo .SHARPEND           @ We have a PXA250 - Corgi
0065 
0066 /* Check for 64MiB flash - if found we have a Shepherd */
0067     bl  get_flash_ids
0068     ldr r7, .SHEPHERDID
0069     cmp r3, #0x76           @ 64MiB flash
0070     beq .SHARPEND           @ We have Shepherd
0071 
0072 /* Must be a Husky */
0073     ldr r7, .HUSKYID        @ Must be Husky
0074     b .SHARPEND
0075 
0076 .PXA270:
0077 /* Check for 16MiB flash - if found we have Spitz */
0078     bl  get_flash_ids
0079     ldr r7, .SPITZID
0080     cmp r3, #0x73           @ 16MiB flash
0081     beq .SHARPEND           @ We have Spitz
0082 
0083 /* Check for a second SCOOP chip - if found we have Borzoi */
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 /* Must be Akita */
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  * Return: r2 - NAND Manufacturer ID
0125  *         r3 - NAND Chip ID
0126  * Corrupts: r1
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: