Loading...
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * linux/arch/arm/boot/compressed/head-sharpsl.S
4 *
5 * Copyright (C) 2004-2005 Richard Purdie <rpurdie@rpsys.net>
6 *
7 * Sharp's bootloader doesn't pass any kind of machine ID
8 * so we have to figure out the machine for ourselves...
9 *
10 * Support for Poodle, Corgi (SL-C700), Shepherd (SL-C750)
11 * Husky (SL-C760), Tosa (SL-C6000), Spitz (SL-C3000),
12 * Akita (SL-C1000) and Borzoi (SL-C3100).
13 *
14 */
15
16#include <linux/linkage.h>
17#include <asm/mach-types.h>
18
19#ifndef CONFIG_PXA_SHARPSL
20#error What am I doing here...
21#endif
22
23 .section ".start", "ax"
24
25__SharpSL_start:
26
27/* Check for TC6393 - if found we have a Tosa */
28 ldr r7, .TOSAID
29 mov r1, #0x10000000 @ Base address of TC6393 chip
30 mov r6, #0x03
31 ldrh r3, [r1, #8] @ Load TC6393XB Revison: This is 0x0003
32 cmp r6, r3
33 beq .SHARPEND @ Success -> tosa
34
35/* Check for pxa270 - if found, branch */
36 mrc p15, 0, r4, c0, c0 @ Get Processor ID
37 and r4, r4, #0xffffff00
38 ldr r3, .PXA270ID
39 cmp r4, r3
40 beq .PXA270
41
42/* Check for w100 - if not found we have a Poodle */
43 ldr r1, .W100ADDR @ Base address of w100 chip + regs offset
44
45 mov r6, #0x31 @ Load Magic Init value
46 str r6, [r1, #0x280] @ to SCRATCH_UMSK
47 mov r5, #0x3000
48.W100LOOP:
49 subs r5, r5, #1
50 bne .W100LOOP
51 mov r6, #0x30 @ Load 2nd Magic Init value
52 str r6, [r1, #0x280] @ to SCRATCH_UMSK
53
54 ldr r6, [r1, #0] @ Load Chip ID
55 ldr r3, .W100ID
56 ldr r7, .POODLEID
57 cmp r6, r3
58 bne .SHARPEND @ We have no w100 - Poodle
59
60/* Check for pxa250 - if found we have a Corgi */
61 ldr r7, .CORGIID
62 ldr r3, .PXA255ID
63 cmp r4, r3
64 blo .SHARPEND @ We have a PXA250 - Corgi
65
66/* Check for 64MiB flash - if found we have a Shepherd */
67 bl get_flash_ids
68 ldr r7, .SHEPHERDID
69 cmp r3, #0x76 @ 64MiB flash
70 beq .SHARPEND @ We have Shepherd
71
72/* Must be a Husky */
73 ldr r7, .HUSKYID @ Must be Husky
74 b .SHARPEND
75
76.PXA270:
77/* Check for 16MiB flash - if found we have Spitz */
78 bl get_flash_ids
79 ldr r7, .SPITZID
80 cmp r3, #0x73 @ 16MiB flash
81 beq .SHARPEND @ We have Spitz
82
83/* Check for a second SCOOP chip - if found we have Borzoi */
84 ldr r1, .SCOOP2ADDR
85 ldr r7, .BORZOIID
86 mov r6, #0x0140
87 strh r6, [r1]
88 ldrh r6, [r1]
89 cmp r6, #0x0140
90 beq .SHARPEND @ We have Borzoi
91
92/* Must be Akita */
93 ldr r7, .AKITAID
94 b .SHARPEND @ We have Borzoi
95
96.PXA255ID:
97 .word 0x69052d00 @ PXA255 Processor ID
98.PXA270ID:
99 .word 0x69054100 @ PXA270 Processor ID
100.W100ID:
101 .word 0x57411002 @ w100 Chip ID
102.W100ADDR:
103 .word 0x08010000 @ w100 Chip ID Reg Address
104.SCOOP2ADDR:
105 .word 0x08800040
106.POODLEID:
107 .word MACH_TYPE_POODLE
108.CORGIID:
109 .word MACH_TYPE_CORGI
110.SHEPHERDID:
111 .word MACH_TYPE_SHEPHERD
112.HUSKYID:
113 .word MACH_TYPE_HUSKY
114.TOSAID:
115 .word MACH_TYPE_TOSA
116.SPITZID:
117 .word MACH_TYPE_SPITZ
118.AKITAID:
119 .word MACH_TYPE_AKITA
120.BORZOIID:
121 .word MACH_TYPE_BORZOI
122
123/*
124 * Return: r2 - NAND Manufacturer ID
125 * r3 - NAND Chip ID
126 * Corrupts: r1
127 */
128get_flash_ids:
129 mov r1, #0x0c000000 @ Base address of NAND chip
130 ldrb r3, [r1, #24] @ Load FLASHCTL
131 bic r3, r3, #0x11 @ SET NCE
132 orr r3, r3, #0x0a @ SET CLR + FLWP
133 strb r3, [r1, #24] @ Save to FLASHCTL
134 mov r2, #0x90 @ Command "readid"
135 strb r2, [r1, #20] @ Save to FLASHIO
136 bic r3, r3, #2 @ CLR CLE
137 orr r3, r3, #4 @ SET ALE
138 strb r3, [r1, #24] @ Save to FLASHCTL
139 mov r2, #0 @ Address 0x00
140 strb r2, [r1, #20] @ Save to FLASHIO
141 bic r3, r3, #4 @ CLR ALE
142 strb r3, [r1, #24] @ Save to FLASHCTL
143.fids1:
144 ldrb r3, [r1, #24] @ Load FLASHCTL
145 tst r3, #32 @ Is chip ready?
146 beq .fids1
147 ldrb r2, [r1, #20] @ NAND Manufacturer ID
148 ldrb r3, [r1, #20] @ NAND Chip ID
149 mov pc, lr
150
151.SHARPEND:
1/*
2 * linux/arch/arm/boot/compressed/head-sharpsl.S
3 *
4 * Copyright (C) 2004-2005 Richard Purdie <rpurdie@rpsys.net>
5 *
6 * Sharp's bootloader doesn't pass any kind of machine ID
7 * so we have to figure out the machine for ourselves...
8 *
9 * Support for Poodle, Corgi (SL-C700), Shepherd (SL-C750)
10 * Husky (SL-C760), Tosa (SL-C6000), Spitz (SL-C3000),
11 * Akita (SL-C1000) and Borzoi (SL-C3100).
12 *
13 */
14
15#include <linux/linkage.h>
16#include <asm/mach-types.h>
17
18#ifndef CONFIG_PXA_SHARPSL
19#error What am I doing here...
20#endif
21
22 .section ".start", "ax"
23
24__SharpSL_start:
25
26/* Check for TC6393 - if found we have a Tosa */
27 ldr r7, .TOSAID
28 mov r1, #0x10000000 @ Base address of TC6393 chip
29 mov r6, #0x03
30 ldrh r3, [r1, #8] @ Load TC6393XB Revison: This is 0x0003
31 cmp r6, r3
32 beq .SHARPEND @ Success -> tosa
33
34/* Check for pxa270 - if found, branch */
35 mrc p15, 0, r4, c0, c0 @ Get Processor ID
36 and r4, r4, #0xffffff00
37 ldr r3, .PXA270ID
38 cmp r4, r3
39 beq .PXA270
40
41/* Check for w100 - if not found we have a Poodle */
42 ldr r1, .W100ADDR @ Base address of w100 chip + regs offset
43
44 mov r6, #0x31 @ Load Magic Init value
45 str r6, [r1, #0x280] @ to SCRATCH_UMSK
46 mov r5, #0x3000
47.W100LOOP:
48 subs r5, r5, #1
49 bne .W100LOOP
50 mov r6, #0x30 @ Load 2nd Magic Init value
51 str r6, [r1, #0x280] @ to SCRATCH_UMSK
52
53 ldr r6, [r1, #0] @ Load Chip ID
54 ldr r3, .W100ID
55 ldr r7, .POODLEID
56 cmp r6, r3
57 bne .SHARPEND @ We have no w100 - Poodle
58
59/* Check for pxa250 - if found we have a Corgi */
60 ldr r7, .CORGIID
61 ldr r3, .PXA255ID
62 cmp r4, r3
63 blo .SHARPEND @ We have a PXA250 - Corgi
64
65/* Check for 64MiB flash - if found we have a Shepherd */
66 bl get_flash_ids
67 ldr r7, .SHEPHERDID
68 cmp r3, #0x76 @ 64MiB flash
69 beq .SHARPEND @ We have Shepherd
70
71/* Must be a Husky */
72 ldr r7, .HUSKYID @ Must be Husky
73 b .SHARPEND
74
75.PXA270:
76/* Check for 16MiB flash - if found we have Spitz */
77 bl get_flash_ids
78 ldr r7, .SPITZID
79 cmp r3, #0x73 @ 16MiB flash
80 beq .SHARPEND @ We have Spitz
81
82/* Check for a second SCOOP chip - if found we have Borzoi */
83 ldr r1, .SCOOP2ADDR
84 ldr r7, .BORZOIID
85 mov r6, #0x0140
86 strh r6, [r1]
87 ldrh r6, [r1]
88 cmp r6, #0x0140
89 beq .SHARPEND @ We have Borzoi
90
91/* Must be Akita */
92 ldr r7, .AKITAID
93 b .SHARPEND @ We have Borzoi
94
95.PXA255ID:
96 .word 0x69052d00 @ PXA255 Processor ID
97.PXA270ID:
98 .word 0x69054100 @ PXA270 Processor ID
99.W100ID:
100 .word 0x57411002 @ w100 Chip ID
101.W100ADDR:
102 .word 0x08010000 @ w100 Chip ID Reg Address
103.SCOOP2ADDR:
104 .word 0x08800040
105.POODLEID:
106 .word MACH_TYPE_POODLE
107.CORGIID:
108 .word MACH_TYPE_CORGI
109.SHEPHERDID:
110 .word MACH_TYPE_SHEPHERD
111.HUSKYID:
112 .word MACH_TYPE_HUSKY
113.TOSAID:
114 .word MACH_TYPE_TOSA
115.SPITZID:
116 .word MACH_TYPE_SPITZ
117.AKITAID:
118 .word MACH_TYPE_AKITA
119.BORZOIID:
120 .word MACH_TYPE_BORZOI
121
122/*
123 * Return: r2 - NAND Manufacturer ID
124 * r3 - NAND Chip ID
125 * Corrupts: r1
126 */
127get_flash_ids:
128 mov r1, #0x0c000000 @ Base address of NAND chip
129 ldrb r3, [r1, #24] @ Load FLASHCTL
130 bic r3, r3, #0x11 @ SET NCE
131 orr r3, r3, #0x0a @ SET CLR + FLWP
132 strb r3, [r1, #24] @ Save to FLASHCTL
133 mov r2, #0x90 @ Command "readid"
134 strb r2, [r1, #20] @ Save to FLASHIO
135 bic r3, r3, #2 @ CLR CLE
136 orr r3, r3, #4 @ SET ALE
137 strb r3, [r1, #24] @ Save to FLASHCTL
138 mov r2, #0 @ Address 0x00
139 strb r2, [r1, #20] @ Save to FLASHIO
140 bic r3, r3, #4 @ CLR ALE
141 strb r3, [r1, #24] @ Save to FLASHCTL
142.fids1:
143 ldrb r3, [r1, #24] @ Load FLASHCTL
144 tst r3, #32 @ Is chip ready?
145 beq .fids1
146 ldrb r2, [r1, #20] @ NAND Manufacturer ID
147 ldrb r3, [r1, #20] @ NAND Chip ID
148 mov pc, lr
149
150.SHARPEND: