Path: blob/master/arch/arm/boot/compressed/head-sharpsl.S
29269 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* linux/arch/arm/boot/compressed/head-sharpsl.S3*4* Copyright (C) 2004-2005 Richard Purdie <[email protected]>5*6* Sharp's bootloader doesn't pass any kind of machine ID7* 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*/1415#include <linux/linkage.h>16#include <asm/mach-types.h>1718#ifndef CONFIG_PXA_SHARPSL19#error What am I doing here...20#endif2122.section ".start", "ax"2324__SharpSL_start:2526/* Check for TC6393 - if found we have a Tosa */27ldr r7, .TOSAID28mov r1, #0x10000000 @ Base address of TC6393 chip29mov r6, #0x0330ldrh r3, [r1, #8] @ Load TC6393XB Revison: This is 0x000331cmp r6, r332beq .SHARPEND @ Success -> tosa3334/* Check for pxa270 - if found, branch */35mrc p15, 0, r4, c0, c0 @ Get Processor ID36and r4, r4, #0xffffff0037ldr r3, .PXA270ID38cmp r4, r339beq .PXA2704041/* Check for w100 - if not found we have a Poodle */42ldr r1, .W100ADDR @ Base address of w100 chip + regs offset4344mov r6, #0x31 @ Load Magic Init value45str r6, [r1, #0x280] @ to SCRATCH_UMSK46mov r5, #0x300047.W100LOOP:48subs r5, r5, #149bne .W100LOOP50mov r6, #0x30 @ Load 2nd Magic Init value51str r6, [r1, #0x280] @ to SCRATCH_UMSK5253ldr r6, [r1, #0] @ Load Chip ID54ldr r3, .W100ID55ldr r7, .POODLEID56cmp r6, r357bne .SHARPEND @ We have no w100 - Poodle5859/* Check for pxa250 - if found we have a Corgi */60ldr r7, .CORGIID61ldr r3, .PXA255ID62cmp r4, r363blo .SHARPEND @ We have a PXA250 - Corgi6465/* Check for 64MiB flash - if found we have a Shepherd */66bl get_flash_ids67ldr r7, .SHEPHERDID68cmp r3, #0x76 @ 64MiB flash69beq .SHARPEND @ We have Shepherd7071/* Must be a Husky */72ldr r7, .HUSKYID @ Must be Husky73b .SHARPEND7475.PXA270:76/* Check for 16MiB flash - if found we have Spitz */77bl get_flash_ids78ldr r7, .SPITZID79cmp r3, #0x73 @ 16MiB flash80beq .SHARPEND @ We have Spitz8182/* Check for a second SCOOP chip - if found we have Borzoi */83ldr r1, .SCOOP2ADDR84ldr r7, .BORZOIID85mov r6, #0x014086strh r6, [r1]87ldrh r6, [r1]88cmp r6, #0x014089beq .SHARPEND @ We have Borzoi9091/* Must be Akita */92ldr r7, .AKITAID93b .SHARPEND @ We have Borzoi9495.PXA255ID:96.word 0x69052d00 @ PXA255 Processor ID97.PXA270ID:98.word 0x69054100 @ PXA270 Processor ID99.W100ID:100.word 0x57411002 @ w100 Chip ID101.W100ADDR:102.word 0x08010000 @ w100 Chip ID Reg Address103.SCOOP2ADDR:104.word 0x08800040105.POODLEID:106.word MACH_TYPE_POODLE107.CORGIID:108.word MACH_TYPE_CORGI109.SHEPHERDID:110.word MACH_TYPE_SHEPHERD111.HUSKYID:112.word MACH_TYPE_HUSKY113.TOSAID:114.word MACH_TYPE_TOSA115.SPITZID:116.word MACH_TYPE_SPITZ117.AKITAID:118.word MACH_TYPE_AKITA119.BORZOIID:120.word MACH_TYPE_BORZOI121122/*123* Return: r2 - NAND Manufacturer ID124* r3 - NAND Chip ID125* Corrupts: r1126*/127get_flash_ids:128mov r1, #0x0c000000 @ Base address of NAND chip129ldrb r3, [r1, #24] @ Load FLASHCTL130bic r3, r3, #0x11 @ SET NCE131orr r3, r3, #0x0a @ SET CLR + FLWP132strb r3, [r1, #24] @ Save to FLASHCTL133mov r2, #0x90 @ Command "readid"134strb r2, [r1, #20] @ Save to FLASHIO135bic r3, r3, #2 @ CLR CLE136orr r3, r3, #4 @ SET ALE137strb r3, [r1, #24] @ Save to FLASHCTL138mov r2, #0 @ Address 0x00139strb r2, [r1, #20] @ Save to FLASHIO140bic r3, r3, #4 @ CLR ALE141strb r3, [r1, #24] @ Save to FLASHCTL142.fids1:143ldrb r3, [r1, #24] @ Load FLASHCTL144tst r3, #32 @ Is chip ready?145beq .fids1146ldrb r2, [r1, #20] @ NAND Manufacturer ID147ldrb r3, [r1, #20] @ NAND Chip ID148mov pc, lr149150.SHARPEND:151152153