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 * and Husky (SL-C760).
11 *
12 */
13
14#include <linux/config.h>
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	ldr	r1, .W100ADDR		@ Base address of w100 chip + regs offset
27
28	mov r6, #0x31			@ Load Magic Init value
29	str	r6, [r1, #0x280]	@ to SCRATCH_UMSK
30	mov r5, #0x3000
31.W100LOOP:
32	subs r5, r5, #1
33    bne .W100LOOP
34	mov r6, #0x30			@ Load 2nd Magic Init value
35	str	r6, [r1, #0x280]	@ to SCRATCH_UMSK
36
37	ldr	r6, [r1, #0]		@ Load Chip ID
38	ldr	r3, .W100ID
39	ldr	r7, .POODLEID
40	cmp	r6, r3
41	bne	.SHARPEND			@ We have no w100 - Poodle
42
43	mrc p15, 0, r6, c0, c0	@ Get Processor ID
44	and	r6, r6, #0xffffff00
45	ldr	r7, .CORGIID
46	ldr	r3, .PXA255ID
47	cmp	r6, r3
48	blo	.SHARPEND			@ We have a PXA250 - Corgi
49
50	mov	r1, #0x0c000000		@ Base address of NAND chip
51	ldrb	r3, [r1, #24]	@ Load FLASHCTL
52	bic	r3, r3, #0x11		@ SET NCE
53	orr	r3, r3, #0x0a		@ SET CLR + FLWP
54	strb	r3, [r1, #24]	@ Save to FLASHCTL
55	mov 	r2, #0x90		@ Command "readid"
56	strb	r2, [r1, #20]	@ Save to FLASHIO
57	bic	r3, r3, #2			@ CLR CLE
58	orr	r3, r3, #4			@ SET ALE
59	strb	r3, [r1, #24]	@ Save to FLASHCTL
60	mov		r2, #0			@ Address 0x00
61	strb	r2, [r1, #20]	@ Save to FLASHIO
62	bic	r3, r3, #4			@ CLR ALE
63	strb	r3, [r1, #24]	@ Save to FLASHCTL
64.SHARP1:
65	ldrb	r3, [r1, #24]	@ Load FLASHCTL
66	tst	r3, #32				@ Is chip ready?
67	beq	.SHARP1
68	ldrb	r2, [r1, #20]	@ NAND Manufacturer ID
69	ldrb	r3, [r1, #20]	@ NAND Chip ID
70	ldr	r7, .SHEPHERDID
71	cmp	r3, #0x76			@ 64MiB flash
72	beq	.SHARPEND			@ We have Shepherd
73	ldr	r7, .HUSKYID		@ Must be Husky
74	b .SHARPEND
75
76.PXA255ID:
77	.word	0x69052d00		@ PXA255 Processor ID
78.W100ID:
79	.word	0x57411002		@ w100 Chip ID
80.W100ADDR:
81	.word 	0x08010000		@ w100 Chip ID Reg Address
82.POODLEID:
83	.word	MACH_TYPE_POODLE
84.CORGIID:
85	.word	MACH_TYPE_CORGI
86.SHEPHERDID:
87	.word	MACH_TYPE_SHEPHERD
88.HUSKYID:
89	.word	MACH_TYPE_HUSKY
90.SHARPEND:
91
92
93