head-sharpsl.S 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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 <[email protected]>
  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. #include <linux/linkage.h>
  16. #include <asm/mach-types.h>
  17. #ifndef CONFIG_PXA_SHARPSL
  18. #error What am I doing here...
  19. #endif
  20. .section ".start", "ax"
  21. __SharpSL_start:
  22. /* Check for TC6393 - if found we have a Tosa */
  23. ldr r7, .TOSAID
  24. mov r1, #0x10000000 @ Base address of TC6393 chip
  25. mov r6, #0x03
  26. ldrh r3, [r1, #8] @ Load TC6393XB Revison: This is 0x0003
  27. cmp r6, r3
  28. beq .SHARPEND @ Success -> tosa
  29. /* Check for pxa270 - if found, branch */
  30. mrc p15, 0, r4, c0, c0 @ Get Processor ID
  31. and r4, r4, #0xffffff00
  32. ldr r3, .PXA270ID
  33. cmp r4, r3
  34. beq .PXA270
  35. /* Check for w100 - if not found we have a Poodle */
  36. ldr r1, .W100ADDR @ Base address of w100 chip + regs offset
  37. mov r6, #0x31 @ Load Magic Init value
  38. str r6, [r1, #0x280] @ to SCRATCH_UMSK
  39. mov r5, #0x3000
  40. .W100LOOP:
  41. subs r5, r5, #1
  42. bne .W100LOOP
  43. mov r6, #0x30 @ Load 2nd Magic Init value
  44. str r6, [r1, #0x280] @ to SCRATCH_UMSK
  45. ldr r6, [r1, #0] @ Load Chip ID
  46. ldr r3, .W100ID
  47. ldr r7, .POODLEID
  48. cmp r6, r3
  49. bne .SHARPEND @ We have no w100 - Poodle
  50. /* Check for pxa250 - if found we have a Corgi */
  51. ldr r7, .CORGIID
  52. ldr r3, .PXA255ID
  53. cmp r4, r3
  54. blo .SHARPEND @ We have a PXA250 - Corgi
  55. /* Check for 64MiB flash - if found we have a Shepherd */
  56. bl get_flash_ids
  57. ldr r7, .SHEPHERDID
  58. cmp r3, #0x76 @ 64MiB flash
  59. beq .SHARPEND @ We have Shepherd
  60. /* Must be a Husky */
  61. ldr r7, .HUSKYID @ Must be Husky
  62. b .SHARPEND
  63. .PXA270:
  64. /* Check for 16MiB flash - if found we have Spitz */
  65. bl get_flash_ids
  66. ldr r7, .SPITZID
  67. cmp r3, #0x73 @ 16MiB flash
  68. beq .SHARPEND @ We have Spitz
  69. /* Check for a second SCOOP chip - if found we have Borzoi */
  70. ldr r1, .SCOOP2ADDR
  71. ldr r7, .BORZOIID
  72. mov r6, #0x0140
  73. strh r6, [r1]
  74. ldrh r6, [r1]
  75. cmp r6, #0x0140
  76. beq .SHARPEND @ We have Borzoi
  77. /* Must be Akita */
  78. ldr r7, .AKITAID
  79. b .SHARPEND @ We have Borzoi
  80. .PXA255ID:
  81. .word 0x69052d00 @ PXA255 Processor ID
  82. .PXA270ID:
  83. .word 0x69054100 @ PXA270 Processor ID
  84. .W100ID:
  85. .word 0x57411002 @ w100 Chip ID
  86. .W100ADDR:
  87. .word 0x08010000 @ w100 Chip ID Reg Address
  88. .SCOOP2ADDR:
  89. .word 0x08800040
  90. .POODLEID:
  91. .word MACH_TYPE_POODLE
  92. .CORGIID:
  93. .word MACH_TYPE_CORGI
  94. .SHEPHERDID:
  95. .word MACH_TYPE_SHEPHERD
  96. .HUSKYID:
  97. .word MACH_TYPE_HUSKY
  98. .TOSAID:
  99. .word MACH_TYPE_TOSA
  100. .SPITZID:
  101. .word MACH_TYPE_SPITZ
  102. .AKITAID:
  103. .word MACH_TYPE_AKITA
  104. .BORZOIID:
  105. .word MACH_TYPE_BORZOI
  106. /*
  107. * Return: r2 - NAND Manufacturer ID
  108. * r3 - NAND Chip ID
  109. * Corrupts: r1
  110. */
  111. get_flash_ids:
  112. mov r1, #0x0c000000 @ Base address of NAND chip
  113. ldrb r3, [r1, #24] @ Load FLASHCTL
  114. bic r3, r3, #0x11 @ SET NCE
  115. orr r3, r3, #0x0a @ SET CLR + FLWP
  116. strb r3, [r1, #24] @ Save to FLASHCTL
  117. mov r2, #0x90 @ Command "readid"
  118. strb r2, [r1, #20] @ Save to FLASHIO
  119. bic r3, r3, #2 @ CLR CLE
  120. orr r3, r3, #4 @ SET ALE
  121. strb r3, [r1, #24] @ Save to FLASHCTL
  122. mov r2, #0 @ Address 0x00
  123. strb r2, [r1, #20] @ Save to FLASHIO
  124. bic r3, r3, #4 @ CLR ALE
  125. strb r3, [r1, #24] @ Save to FLASHCTL
  126. .fids1:
  127. ldrb r3, [r1, #24] @ Load FLASHCTL
  128. tst r3, #32 @ Is chip ready?
  129. beq .fids1
  130. ldrb r2, [r1, #20] @ NAND Manufacturer ID
  131. ldrb r3, [r1, #20] @ NAND Chip ID
  132. mov pc, lr
  133. .SHARPEND: