head-sharpsl.S 3.5 KB

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