bamboo.c 61 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928
  1. /*
  2. * (C) Copyright 2005-2007
  3. * Stefan Roese, DENX Software Engineering, sr@denx.de.
  4. *
  5. * See file CREDITS for list of people who contributed to this
  6. * project.
  7. *
  8. * This program is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License as
  10. * published by the Free Software Foundation; either version 2 of
  11. * the License, or (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  21. * MA 02111-1307 USA
  22. */
  23. #include <common.h>
  24. #include <asm/processor.h>
  25. #include <asm/gpio.h>
  26. #include <spd_sdram.h>
  27. #include <ppc440.h>
  28. #include "bamboo.h"
  29. void ext_bus_cntlr_init(void);
  30. void configure_ppc440ep_pins(void);
  31. int is_nand_selected(void);
  32. #if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL))
  33. /*************************************************************************
  34. *
  35. * Bamboo has one bank onboard sdram (plus DIMM)
  36. *
  37. * Fixed memory is composed of :
  38. * MT46V16M16TG-75 from Micron (x 2), 256Mb, 16 M x16, DDR266,
  39. * 13 row add bits, 10 column add bits (but 12 row used only).
  40. * ECC device: MT46V16M8TG-75 from Micron (x 1), 128Mb, x8, DDR266,
  41. * 12 row add bits, 10 column add bits.
  42. * Prepare a subset (only the used ones) of SPD data
  43. *
  44. * Note : if the ECC is enabled (SDRAM_ECC_ENABLE) the size of
  45. * the corresponding bank is divided by 2 due to number of Row addresses
  46. * 12 in the ECC module
  47. *
  48. * Assumes: 64 MB, ECC, non-registered
  49. * PLB @ 133 MHz
  50. *
  51. ************************************************************************/
  52. const unsigned char cfg_simulate_spd_eeprom[128] = {
  53. 0x80, /* number of SPD bytes used: 128 */
  54. 0x08, /* total number bytes in SPD device = 256 */
  55. 0x07, /* DDR ram */
  56. #ifdef CONFIG_DDR_ECC
  57. 0x0C, /* num Row Addr: 12 */
  58. #else
  59. 0x0D, /* num Row Addr: 13 */
  60. #endif
  61. 0x09, /* numColAddr: 9 */
  62. 0x01, /* numBanks: 1 */
  63. 0x20, /* Module data width: 32 bits */
  64. 0x00, /* Module data width continued: +0 */
  65. 0x04, /* 2.5 Volt */
  66. 0x75, /* SDRAM Cycle Time (cas latency 2.5) = 7.5 ns */
  67. 0x00, /* SDRAM Access from clock */
  68. #ifdef CONFIG_DDR_ECC
  69. 0x02, /* ECC ON : 02 OFF : 00 */
  70. #else
  71. 0x00, /* ECC ON : 02 OFF : 00 */
  72. #endif
  73. 0x82, /* refresh Rate Type: Normal (7.8us) + Self refresh */
  74. 0,
  75. 0,
  76. 0x01, /* wcsbc = 1 */
  77. 0,
  78. 0,
  79. 0x0C, /* casBit (2,2.5) */
  80. 0,
  81. 0,
  82. 0x00, /* not registered: 0 registered : 0x02*/
  83. 0,
  84. 0xA0, /* SDRAM Cycle Time (cas latency 2) = 10 ns */
  85. 0,
  86. 0x00, /* SDRAM Cycle Time (cas latency 1.5) = N.A */
  87. 0,
  88. 0x50, /* tRpNs = 20 ns */
  89. 0,
  90. 0x50, /* tRcdNs = 20 ns */
  91. 45, /* tRasNs */
  92. #ifdef CONFIG_DDR_ECC
  93. 0x08, /* bankSizeID: 32MB */
  94. #else
  95. 0x10, /* bankSizeID: 64MB */
  96. #endif
  97. 0,
  98. 0,
  99. 0,
  100. 0,
  101. 0,
  102. 0,
  103. 0,
  104. 0,
  105. 0,
  106. 0,
  107. 0,
  108. 0,
  109. 0,
  110. 0,
  111. 0,
  112. 0,
  113. 0,
  114. 0,
  115. 0,
  116. 0,
  117. 0,
  118. 0,
  119. 0,
  120. 0,
  121. 0,
  122. 0,
  123. 0,
  124. 0,
  125. 0,
  126. 0,
  127. 0,
  128. 0,
  129. 0,
  130. 0,
  131. 0,
  132. 0,
  133. 0,
  134. 0,
  135. 0,
  136. 0,
  137. 0,
  138. 0,
  139. 0,
  140. 0,
  141. 0,
  142. 0,
  143. 0,
  144. 0,
  145. 0,
  146. 0,
  147. 0,
  148. 0,
  149. 0,
  150. 0,
  151. 0,
  152. 0,
  153. 0,
  154. 0,
  155. 0,
  156. 0,
  157. 0,
  158. 0,
  159. 0,
  160. 0,
  161. 0,
  162. 0,
  163. 0,
  164. 0,
  165. 0,
  166. 0,
  167. 0,
  168. 0,
  169. 0,
  170. 0,
  171. 0,
  172. 0,
  173. 0,
  174. 0,
  175. 0,
  176. 0,
  177. 0,
  178. 0,
  179. 0,
  180. 0,
  181. 0,
  182. 0,
  183. 0,
  184. 0,
  185. 0,
  186. 0,
  187. 0,
  188. 0,
  189. 0,
  190. 0,
  191. 0,
  192. 0
  193. };
  194. #endif
  195. #if 0
  196. { /* GPIO Alternate1 Alternate2 Alternate3 */
  197. {
  198. /* GPIO Core 0 */
  199. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_0 -> EBC_ADDR(7) DMA_REQ(2) */
  200. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_1 -> EBC_ADDR(6) DMA_ACK(2) */
  201. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_2 -> EBC_ADDR(5) DMA_EOT/TC(2) */
  202. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_3 -> EBC_ADDR(4) DMA_REQ(3) */
  203. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_4 -> EBC_ADDR(3) DMA_ACK(3) */
  204. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_5 ................. */
  205. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_6 -> EBC_CS_N(1) */
  206. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_7 -> EBC_CS_N(2) */
  207. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_8 -> EBC_CS_N(3) */
  208. { GPIO0_BASE, GPIO_DIS, GPIO_ALT1 }, /* GPIO0_9 -> EBC_CS_N(4) */
  209. { GPIO0_BASE, GPIO_OUT, GPIO_ALT1 }, /* GPIO0_10 -> EBC_CS_N(5) */
  210. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_11 -> EBC_BUS_ERR */
  211. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_12 -> ZII_p0Rxd(0) */
  212. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_13 -> ZII_p0Rxd(1) */
  213. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_14 -> ZII_p0Rxd(2) */
  214. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_15 -> ZII_p0Rxd(3) */
  215. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_16 -> ZII_p0Txd(0) */
  216. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_17 -> ZII_p0Txd(1) */
  217. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_18 -> ZII_p0Txd(2) */
  218. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_19 -> ZII_p0Txd(3) */
  219. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_20 -> ZII_p0Rx_er */
  220. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_21 -> ZII_p0Rx_dv */
  221. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_22 -> ZII_p0RxCrs */
  222. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_23 -> ZII_p0Tx_er */
  223. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_24 -> ZII_p0Tx_en */
  224. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_25 -> ZII_p0Col */
  225. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_26 -> USB2D_RXVALID */
  226. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_27 -> EXT_EBC_REQ USB2D_RXERROR */
  227. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_28 -> USB2D_TXVALID */
  228. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_29 -> EBC_EXT_HDLA USB2D_PAD_SUSPNDM */
  229. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_30 -> EBC_EXT_ACK USB2D_XCVRSELECT */
  230. { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_31 -> EBC_EXR_BUSREQ USB2D_TERMSELECT */
  231. },
  232. {
  233. /* GPIO Core 1 */
  234. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_0 -> USB2D_OPMODE0 */
  235. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_1 -> USB2D_OPMODE1 */
  236. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_2 -> UART0_DCD_N UART1_DSR_CTS_N UART2_SOUT */
  237. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_3 -> UART0_8PIN_DSR_N UART1_RTS_DTR_N UART2_SIN */
  238. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_4 -> UART0_8PIN_CTS_N UART3_SIN */
  239. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_5 -> UART0_RTS_N */
  240. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_6 -> UART0_DTR_N UART1_SOUT */
  241. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_7 -> UART0_RI_N UART1_SIN */
  242. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_8 -> UIC_IRQ(0) */
  243. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_9 -> UIC_IRQ(1) */
  244. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_10 -> UIC_IRQ(2) */
  245. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_11 -> UIC_IRQ(3) */
  246. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_12 -> UIC_IRQ(4) DMA_ACK(1) */
  247. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_13 -> UIC_IRQ(6) DMA_EOT/TC(1) */
  248. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_14 -> UIC_IRQ(7) DMA_REQ(0) */
  249. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_15 -> UIC_IRQ(8) DMA_ACK(0) */
  250. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_16 -> UIC_IRQ(9) DMA_EOT/TC(0) */
  251. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_17 -> - */
  252. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_18 -> | */
  253. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_19 -> | */
  254. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_20 -> | */
  255. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_21 -> | */
  256. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_22 -> | */
  257. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_23 -> \ Can be unselected thru TraceSelect Bit */
  258. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_24 -> / in PowerPC440EP Chip */
  259. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_25 -> | */
  260. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_26 -> | */
  261. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_27 -> | */
  262. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_28 -> | */
  263. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_29 -> | */
  264. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_30 -> | */
  265. { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_31 -> - */
  266. }
  267. };
  268. #endif
  269. /*----------------------------------------------------------------------------+
  270. | EBC Devices Characteristics
  271. | Peripheral Bank Access Parameters - EBC0_BnAP
  272. | Peripheral Bank Configuration Register - EBC0_BnCR
  273. +----------------------------------------------------------------------------*/
  274. /* Small Flash */
  275. #define EBC0_BNAP_SMALL_FLASH \
  276. EBC0_BNAP_BME_DISABLED | \
  277. EBC0_BNAP_TWT_ENCODE(6) | \
  278. EBC0_BNAP_CSN_ENCODE(0) | \
  279. EBC0_BNAP_OEN_ENCODE(1) | \
  280. EBC0_BNAP_WBN_ENCODE(1) | \
  281. EBC0_BNAP_WBF_ENCODE(3) | \
  282. EBC0_BNAP_TH_ENCODE(1) | \
  283. EBC0_BNAP_RE_ENABLED | \
  284. EBC0_BNAP_SOR_DELAYED | \
  285. EBC0_BNAP_BEM_WRITEONLY | \
  286. EBC0_BNAP_PEN_DISABLED
  287. #define EBC0_BNCR_SMALL_FLASH_CS0 \
  288. EBC0_BNCR_BAS_ENCODE(0xFFF00000) | \
  289. EBC0_BNCR_BS_1MB | \
  290. EBC0_BNCR_BU_RW | \
  291. EBC0_BNCR_BW_8BIT
  292. #define EBC0_BNCR_SMALL_FLASH_CS4 \
  293. EBC0_BNCR_BAS_ENCODE(0x87F00000) | \
  294. EBC0_BNCR_BS_1MB | \
  295. EBC0_BNCR_BU_RW | \
  296. EBC0_BNCR_BW_8BIT
  297. /* Large Flash or SRAM */
  298. #define EBC0_BNAP_LARGE_FLASH_OR_SRAM \
  299. EBC0_BNAP_BME_DISABLED | \
  300. EBC0_BNAP_TWT_ENCODE(8) | \
  301. EBC0_BNAP_CSN_ENCODE(0) | \
  302. EBC0_BNAP_OEN_ENCODE(1) | \
  303. EBC0_BNAP_WBN_ENCODE(1) | \
  304. EBC0_BNAP_WBF_ENCODE(1) | \
  305. EBC0_BNAP_TH_ENCODE(2) | \
  306. EBC0_BNAP_SOR_DELAYED | \
  307. EBC0_BNAP_BEM_RW | \
  308. EBC0_BNAP_PEN_DISABLED
  309. #define EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS0 \
  310. EBC0_BNCR_BAS_ENCODE(0xFF800000) | \
  311. EBC0_BNCR_BS_8MB | \
  312. EBC0_BNCR_BU_RW | \
  313. EBC0_BNCR_BW_16BIT
  314. #define EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4 \
  315. EBC0_BNCR_BAS_ENCODE(0x87800000) | \
  316. EBC0_BNCR_BS_8MB | \
  317. EBC0_BNCR_BU_RW | \
  318. EBC0_BNCR_BW_16BIT
  319. /* NVRAM - FPGA */
  320. #define EBC0_BNAP_NVRAM_FPGA \
  321. EBC0_BNAP_BME_DISABLED | \
  322. EBC0_BNAP_TWT_ENCODE(9) | \
  323. EBC0_BNAP_CSN_ENCODE(0) | \
  324. EBC0_BNAP_OEN_ENCODE(1) | \
  325. EBC0_BNAP_WBN_ENCODE(1) | \
  326. EBC0_BNAP_WBF_ENCODE(0) | \
  327. EBC0_BNAP_TH_ENCODE(2) | \
  328. EBC0_BNAP_RE_ENABLED | \
  329. EBC0_BNAP_SOR_DELAYED | \
  330. EBC0_BNAP_BEM_WRITEONLY | \
  331. EBC0_BNAP_PEN_DISABLED
  332. #define EBC0_BNCR_NVRAM_FPGA_CS5 \
  333. EBC0_BNCR_BAS_ENCODE(0x80000000) | \
  334. EBC0_BNCR_BS_1MB | \
  335. EBC0_BNCR_BU_RW | \
  336. EBC0_BNCR_BW_8BIT
  337. /* Nand Flash */
  338. #define EBC0_BNAP_NAND_FLASH \
  339. EBC0_BNAP_BME_DISABLED | \
  340. EBC0_BNAP_TWT_ENCODE(3) | \
  341. EBC0_BNAP_CSN_ENCODE(0) | \
  342. EBC0_BNAP_OEN_ENCODE(0) | \
  343. EBC0_BNAP_WBN_ENCODE(0) | \
  344. EBC0_BNAP_WBF_ENCODE(0) | \
  345. EBC0_BNAP_TH_ENCODE(1) | \
  346. EBC0_BNAP_RE_ENABLED | \
  347. EBC0_BNAP_SOR_NOT_DELAYED | \
  348. EBC0_BNAP_BEM_RW | \
  349. EBC0_BNAP_PEN_DISABLED
  350. #define EBC0_BNCR_NAND_FLASH_CS0 0xB8400000
  351. /* NAND0 */
  352. #define EBC0_BNCR_NAND_FLASH_CS1 \
  353. EBC0_BNCR_BAS_ENCODE(0x90000000) | \
  354. EBC0_BNCR_BS_1MB | \
  355. EBC0_BNCR_BU_RW | \
  356. EBC0_BNCR_BW_32BIT
  357. /* NAND1 - Bank2 */
  358. #define EBC0_BNCR_NAND_FLASH_CS2 \
  359. EBC0_BNCR_BAS_ENCODE(0x94000000) | \
  360. EBC0_BNCR_BS_1MB | \
  361. EBC0_BNCR_BU_RW | \
  362. EBC0_BNCR_BW_32BIT
  363. /* NAND1 - Bank3 */
  364. #define EBC0_BNCR_NAND_FLASH_CS3 \
  365. EBC0_BNCR_BAS_ENCODE(0x94000000) | \
  366. EBC0_BNCR_BS_1MB | \
  367. EBC0_BNCR_BU_RW | \
  368. EBC0_BNCR_BW_32BIT
  369. int board_early_init_f(void)
  370. {
  371. ext_bus_cntlr_init();
  372. /*--------------------------------------------------------------------
  373. * Setup the interrupt controller polarities, triggers, etc.
  374. *-------------------------------------------------------------------*/
  375. mtdcr(UIC0SR, 0xffffffff); /* clear all */
  376. mtdcr(UIC0ER, 0x00000000); /* disable all */
  377. mtdcr(UIC0CR, 0x00000009); /* ATI & UIC1 crit are critical */
  378. mtdcr(UIC0PR, 0xfffffe13); /* per ref-board manual */
  379. mtdcr(UIC0TR, 0x01c00008); /* per ref-board manual */
  380. mtdcr(UIC0VR, 0x00000001); /* int31 highest, base=0x000 */
  381. mtdcr(UIC0SR, 0xffffffff); /* clear all */
  382. mtdcr(UIC1SR, 0xffffffff); /* clear all */
  383. mtdcr(UIC1ER, 0x00000000); /* disable all */
  384. mtdcr(UIC1CR, 0x00000000); /* all non-critical */
  385. mtdcr(UIC1PR, 0xffffe0ff); /* per ref-board manual */
  386. mtdcr(UIC1TR, 0x00ffc000); /* per ref-board manual */
  387. mtdcr(UIC1VR, 0x00000001); /* int31 highest, base=0x000 */
  388. mtdcr(UIC1SR, 0xffffffff); /* clear all */
  389. /*--------------------------------------------------------------------
  390. * Setup the GPIO pins
  391. *-------------------------------------------------------------------*/
  392. out32(GPIO0_OSRL, 0x00000400);
  393. out32(GPIO0_OSRH, 0x00000000);
  394. out32(GPIO0_TSRL, 0x00000400);
  395. out32(GPIO0_TSRH, 0x00000000);
  396. out32(GPIO0_ISR1L, 0x00000000);
  397. out32(GPIO0_ISR1H, 0x00000000);
  398. out32(GPIO0_ISR2L, 0x00000000);
  399. out32(GPIO0_ISR2H, 0x00000000);
  400. out32(GPIO0_ISR3L, 0x00000000);
  401. out32(GPIO0_ISR3H, 0x00000000);
  402. out32(GPIO1_OSRL, 0x0C380000);
  403. out32(GPIO1_OSRH, 0x00000000);
  404. out32(GPIO1_TSRL, 0x0C380000);
  405. out32(GPIO1_TSRH, 0x00000000);
  406. out32(GPIO1_ISR1L, 0x0FC30000);
  407. out32(GPIO1_ISR1H, 0x00000000);
  408. out32(GPIO1_ISR2L, 0x0C010000);
  409. out32(GPIO1_ISR2H, 0x00000000);
  410. out32(GPIO1_ISR3L, 0x01400000);
  411. out32(GPIO1_ISR3H, 0x00000000);
  412. configure_ppc440ep_pins();
  413. return 0;
  414. }
  415. int checkboard(void)
  416. {
  417. char *s = getenv("serial#");
  418. printf("Board: Bamboo - AMCC PPC440EP Evaluation Board");
  419. if (s != NULL) {
  420. puts(", serial# ");
  421. puts(s);
  422. }
  423. putc('\n');
  424. return (0);
  425. }
  426. phys_size_t initdram (int board_type)
  427. {
  428. #if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL))
  429. long dram_size;
  430. dram_size = spd_sdram();
  431. return dram_size;
  432. #else
  433. return CONFIG_SYS_MBYTES_SDRAM << 20;
  434. #endif
  435. }
  436. /*----------------------------------------------------------------------------+
  437. | is_powerpc440ep_pass1.
  438. +----------------------------------------------------------------------------*/
  439. int is_powerpc440ep_pass1(void)
  440. {
  441. unsigned long pvr;
  442. pvr = get_pvr();
  443. if (pvr == PVR_POWERPC_440EP_PASS1)
  444. return TRUE;
  445. else if (pvr == PVR_POWERPC_440EP_PASS2)
  446. return FALSE;
  447. else {
  448. printf("brdutil error 3\n");
  449. for (;;)
  450. ;
  451. }
  452. return(FALSE);
  453. }
  454. /*----------------------------------------------------------------------------+
  455. | is_nand_selected.
  456. +----------------------------------------------------------------------------*/
  457. int is_nand_selected(void)
  458. {
  459. #ifdef CONFIG_BAMBOO_NAND
  460. return TRUE;
  461. #else
  462. return FALSE;
  463. #endif
  464. }
  465. /*----------------------------------------------------------------------------+
  466. | config_on_ebc_cs4_is_small_flash => from EPLD
  467. +----------------------------------------------------------------------------*/
  468. unsigned char config_on_ebc_cs4_is_small_flash(void)
  469. {
  470. /* Not implemented yet => returns constant value */
  471. return TRUE;
  472. }
  473. /*----------------------------------------------------------------------------+
  474. | Ext_bus_cntlr_init.
  475. | Initialize the external bus controller
  476. +----------------------------------------------------------------------------*/
  477. void ext_bus_cntlr_init(void)
  478. {
  479. unsigned long sdr0_pstrp0, sdr0_sdstp1;
  480. unsigned long bootstrap_settings, boot_selection, ebc_boot_size;
  481. int computed_boot_device = BOOT_DEVICE_UNKNOWN;
  482. unsigned long ebc0_cs0_bnap_value = 0, ebc0_cs0_bncr_value = 0;
  483. unsigned long ebc0_cs1_bnap_value = 0, ebc0_cs1_bncr_value = 0;
  484. unsigned long ebc0_cs2_bnap_value = 0, ebc0_cs2_bncr_value = 0;
  485. unsigned long ebc0_cs3_bnap_value = 0, ebc0_cs3_bncr_value = 0;
  486. unsigned long ebc0_cs4_bnap_value = 0, ebc0_cs4_bncr_value = 0;
  487. /*-------------------------------------------------------------------------+
  488. |
  489. | PART 1 : Initialize EBC Bank 5
  490. | ==============================
  491. | Bank5 is always associated to the NVRAM/EPLD.
  492. | It has to be initialized prior to other banks settings computation since
  493. | some board registers values may be needed
  494. |
  495. +-------------------------------------------------------------------------*/
  496. /* NVRAM - FPGA */
  497. mtebc(PB5AP, EBC0_BNAP_NVRAM_FPGA);
  498. mtebc(PB5CR, EBC0_BNCR_NVRAM_FPGA_CS5);
  499. /*-------------------------------------------------------------------------+
  500. |
  501. | PART 2 : Determine which boot device was selected
  502. | =========================================
  503. |
  504. | Read Pin Strap Register in PPC440EP
  505. | In case of boot from IIC, read Serial Device Strap Register1
  506. |
  507. | Result can either be :
  508. | - Boot from EBC 8bits => SMALL FLASH
  509. | - Boot from EBC 16bits => Large Flash or SRAM
  510. | - Boot from NAND Flash
  511. | - Boot from PCI
  512. |
  513. +-------------------------------------------------------------------------*/
  514. /* Read Pin Strap Register in PPC440EP */
  515. mfsdr(sdr_pstrp0, sdr0_pstrp0);
  516. bootstrap_settings = sdr0_pstrp0 & SDR0_PSTRP0_BOOTSTRAP_MASK;
  517. /*-------------------------------------------------------------------------+
  518. | PPC440EP Pass1
  519. +-------------------------------------------------------------------------*/
  520. if (is_powerpc440ep_pass1() == TRUE) {
  521. switch(bootstrap_settings) {
  522. case SDR0_PSTRP0_BOOTSTRAP_SETTINGS0:
  523. /* Default Strap Settings 0 : CPU 400 - PLB 133 - Boot EBC 8 bit 33MHz */
  524. /* Boot from Small Flash */
  525. computed_boot_device = BOOT_FROM_SMALL_FLASH;
  526. break;
  527. case SDR0_PSTRP0_BOOTSTRAP_SETTINGS1:
  528. /* Default Strap Settings 1 : CPU 533 - PLB 133 - Boot PCI 66MHz */
  529. /* Boot from PCI */
  530. computed_boot_device = BOOT_FROM_PCI;
  531. break;
  532. case SDR0_PSTRP0_BOOTSTRAP_SETTINGS2:
  533. /* Default Strap Settings 2 : CPU 500 - PLB 100 - Boot NDFC16 66MHz */
  534. /* Boot from Nand Flash */
  535. computed_boot_device = BOOT_FROM_NAND_FLASH0;
  536. break;
  537. case SDR0_PSTRP0_BOOTSTRAP_SETTINGS3:
  538. /* Default Strap Settings 3 : CPU 333 - PLB 133 - Boot EBC 8 bit 66MHz */
  539. /* Boot from Small Flash */
  540. computed_boot_device = BOOT_FROM_SMALL_FLASH;
  541. break;
  542. case SDR0_PSTRP0_BOOTSTRAP_IIC_A8_EN:
  543. case SDR0_PSTRP0_BOOTSTRAP_IIC_A4_EN:
  544. /* Boot Settings in IIC EEprom address 0xA8 or 0xA4 */
  545. /* Read Serial Device Strap Register1 in PPC440EP */
  546. mfsdr(SDR0_SDSTP1, sdr0_sdstp1);
  547. boot_selection = sdr0_sdstp1 & SDR0_SDSTP1_BOOT_SEL_MASK;
  548. ebc_boot_size = sdr0_sdstp1 & SDR0_SDSTP1_EBC_ROM_BS_MASK;
  549. switch(boot_selection) {
  550. case SDR0_SDSTP1_BOOT_SEL_EBC:
  551. switch(ebc_boot_size) {
  552. case SDR0_SDSTP1_EBC_ROM_BS_16BIT:
  553. computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
  554. break;
  555. case SDR0_SDSTP1_EBC_ROM_BS_8BIT:
  556. computed_boot_device = BOOT_FROM_SMALL_FLASH;
  557. break;
  558. }
  559. break;
  560. case SDR0_SDSTP1_BOOT_SEL_PCI:
  561. computed_boot_device = BOOT_FROM_PCI;
  562. break;
  563. case SDR0_SDSTP1_BOOT_SEL_NDFC:
  564. computed_boot_device = BOOT_FROM_NAND_FLASH0;
  565. break;
  566. }
  567. break;
  568. }
  569. }
  570. /*-------------------------------------------------------------------------+
  571. | PPC440EP Pass2
  572. +-------------------------------------------------------------------------*/
  573. else {
  574. switch(bootstrap_settings) {
  575. case SDR0_PSTRP0_BOOTSTRAP_SETTINGS0:
  576. /* Default Strap Settings 0 : CPU 400 - PLB 133 - Boot EBC 8 bit 33MHz */
  577. /* Boot from Small Flash */
  578. computed_boot_device = BOOT_FROM_SMALL_FLASH;
  579. break;
  580. case SDR0_PSTRP0_BOOTSTRAP_SETTINGS1:
  581. /* Default Strap Settings 1 : CPU 333 - PLB 133 - Boot PCI 66MHz */
  582. /* Boot from PCI */
  583. computed_boot_device = BOOT_FROM_PCI;
  584. break;
  585. case SDR0_PSTRP0_BOOTSTRAP_SETTINGS2:
  586. /* Default Strap Settings 2 : CPU 400 - PLB 100 - Boot NDFC16 33MHz */
  587. /* Boot from Nand Flash */
  588. computed_boot_device = BOOT_FROM_NAND_FLASH0;
  589. break;
  590. case SDR0_PSTRP0_BOOTSTRAP_SETTINGS3:
  591. /* Default Strap Settings 3 : CPU 400 - PLB 100 - Boot EBC 16 bit 33MHz */
  592. /* Boot from Large Flash or SRAM */
  593. computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
  594. break;
  595. case SDR0_PSTRP0_BOOTSTRAP_SETTINGS4:
  596. /* Default Strap Settings 4 : CPU 333 - PLB 133 - Boot EBC 16 bit 66MHz */
  597. /* Boot from Large Flash or SRAM */
  598. computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
  599. break;
  600. case SDR0_PSTRP0_BOOTSTRAP_SETTINGS6:
  601. /* Default Strap Settings 6 : CPU 400 - PLB 100 - Boot PCI 33MHz */
  602. /* Boot from PCI */
  603. computed_boot_device = BOOT_FROM_PCI;
  604. break;
  605. case SDR0_PSTRP0_BOOTSTRAP_IIC_A8_EN:
  606. case SDR0_PSTRP0_BOOTSTRAP_IIC_A4_EN:
  607. /* Default Strap Settings 5-7 */
  608. /* Boot Settings in IIC EEprom address 0xA8 or 0xA4 */
  609. /* Read Serial Device Strap Register1 in PPC440EP */
  610. mfsdr(SDR0_SDSTP1, sdr0_sdstp1);
  611. boot_selection = sdr0_sdstp1 & SDR0_SDSTP1_BOOT_SEL_MASK;
  612. ebc_boot_size = sdr0_sdstp1 & SDR0_SDSTP1_EBC_ROM_BS_MASK;
  613. switch(boot_selection) {
  614. case SDR0_SDSTP1_BOOT_SEL_EBC:
  615. switch(ebc_boot_size) {
  616. case SDR0_SDSTP1_EBC_ROM_BS_16BIT:
  617. computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
  618. break;
  619. case SDR0_SDSTP1_EBC_ROM_BS_8BIT:
  620. computed_boot_device = BOOT_FROM_SMALL_FLASH;
  621. break;
  622. }
  623. break;
  624. case SDR0_SDSTP1_BOOT_SEL_PCI:
  625. computed_boot_device = BOOT_FROM_PCI;
  626. break;
  627. case SDR0_SDSTP1_BOOT_SEL_NDFC:
  628. computed_boot_device = BOOT_FROM_NAND_FLASH0;
  629. break;
  630. }
  631. break;
  632. }
  633. }
  634. /*-------------------------------------------------------------------------+
  635. |
  636. | PART 3 : Compute EBC settings depending on selected boot device
  637. | ====== ======================================================
  638. |
  639. | Resulting EBC init will be among following configurations :
  640. |
  641. | - Boot from EBC 8bits => boot from SMALL FLASH selected
  642. | EBC-CS0 = Small Flash
  643. | EBC-CS1,2,3 = NAND Flash or
  644. | Exp.Slot depending on Soft Config
  645. | EBC-CS4 = SRAM/Large Flash or
  646. | Large Flash/SRAM depending on jumpers
  647. | EBC-CS5 = NVRAM / EPLD
  648. |
  649. | - Boot from EBC 16bits => boot from Large Flash or SRAM selected
  650. | EBC-CS0 = SRAM/Large Flash or
  651. | Large Flash/SRAM depending on jumpers
  652. | EBC-CS1,2,3 = NAND Flash or
  653. | Exp.Slot depending on Software Configuration
  654. | EBC-CS4 = Small Flash
  655. | EBC-CS5 = NVRAM / EPLD
  656. |
  657. | - Boot from NAND Flash
  658. | EBC-CS0 = NAND Flash0
  659. | EBC-CS1,2,3 = NAND Flash1
  660. | EBC-CS4 = SRAM/Large Flash or
  661. | Large Flash/SRAM depending on jumpers
  662. | EBC-CS5 = NVRAM / EPLD
  663. |
  664. | - Boot from PCI
  665. | EBC-CS0 = ...
  666. | EBC-CS1,2,3 = NAND Flash or
  667. | Exp.Slot depending on Software Configuration
  668. | EBC-CS4 = SRAM/Large Flash or
  669. | Large Flash/SRAM or
  670. | Small Flash depending on jumpers
  671. | EBC-CS5 = NVRAM / EPLD
  672. |
  673. +-------------------------------------------------------------------------*/
  674. switch(computed_boot_device) {
  675. /*------------------------------------------------------------------------- */
  676. case BOOT_FROM_SMALL_FLASH:
  677. /*------------------------------------------------------------------------- */
  678. ebc0_cs0_bnap_value = EBC0_BNAP_SMALL_FLASH;
  679. ebc0_cs0_bncr_value = EBC0_BNCR_SMALL_FLASH_CS0;
  680. if ((is_nand_selected()) == TRUE) {
  681. /* NAND Flash */
  682. ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
  683. ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
  684. ebc0_cs2_bnap_value = EBC0_BNAP_NAND_FLASH;
  685. ebc0_cs2_bncr_value = EBC0_BNCR_NAND_FLASH_CS2;
  686. ebc0_cs3_bnap_value = 0;
  687. ebc0_cs3_bncr_value = 0;
  688. } else {
  689. /* Expansion Slot */
  690. ebc0_cs1_bnap_value = 0;
  691. ebc0_cs1_bncr_value = 0;
  692. ebc0_cs2_bnap_value = 0;
  693. ebc0_cs2_bncr_value = 0;
  694. ebc0_cs3_bnap_value = 0;
  695. ebc0_cs3_bncr_value = 0;
  696. }
  697. ebc0_cs4_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
  698. ebc0_cs4_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4;
  699. break;
  700. /*------------------------------------------------------------------------- */
  701. case BOOT_FROM_LARGE_FLASH_OR_SRAM:
  702. /*------------------------------------------------------------------------- */
  703. ebc0_cs0_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
  704. ebc0_cs0_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS0;
  705. if ((is_nand_selected()) == TRUE) {
  706. /* NAND Flash */
  707. ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
  708. ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
  709. ebc0_cs2_bnap_value = 0;
  710. ebc0_cs2_bncr_value = 0;
  711. ebc0_cs3_bnap_value = 0;
  712. ebc0_cs3_bncr_value = 0;
  713. } else {
  714. /* Expansion Slot */
  715. ebc0_cs1_bnap_value = 0;
  716. ebc0_cs1_bncr_value = 0;
  717. ebc0_cs2_bnap_value = 0;
  718. ebc0_cs2_bncr_value = 0;
  719. ebc0_cs3_bnap_value = 0;
  720. ebc0_cs3_bncr_value = 0;
  721. }
  722. ebc0_cs4_bnap_value = EBC0_BNAP_SMALL_FLASH;
  723. ebc0_cs4_bncr_value = EBC0_BNCR_SMALL_FLASH_CS4;
  724. break;
  725. /*------------------------------------------------------------------------- */
  726. case BOOT_FROM_NAND_FLASH0:
  727. /*------------------------------------------------------------------------- */
  728. ebc0_cs0_bnap_value = EBC0_BNAP_NAND_FLASH;
  729. ebc0_cs0_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
  730. ebc0_cs1_bnap_value = 0;
  731. ebc0_cs1_bncr_value = 0;
  732. ebc0_cs2_bnap_value = 0;
  733. ebc0_cs2_bncr_value = 0;
  734. ebc0_cs3_bnap_value = 0;
  735. ebc0_cs3_bncr_value = 0;
  736. /* Large Flash or SRAM */
  737. ebc0_cs4_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
  738. ebc0_cs4_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4;
  739. break;
  740. /*------------------------------------------------------------------------- */
  741. case BOOT_FROM_PCI:
  742. /*------------------------------------------------------------------------- */
  743. ebc0_cs0_bnap_value = 0;
  744. ebc0_cs0_bncr_value = 0;
  745. if ((is_nand_selected()) == TRUE) {
  746. /* NAND Flash */
  747. ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
  748. ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
  749. ebc0_cs2_bnap_value = 0;
  750. ebc0_cs2_bncr_value = 0;
  751. ebc0_cs3_bnap_value = 0;
  752. ebc0_cs3_bncr_value = 0;
  753. } else {
  754. /* Expansion Slot */
  755. ebc0_cs1_bnap_value = 0;
  756. ebc0_cs1_bncr_value = 0;
  757. ebc0_cs2_bnap_value = 0;
  758. ebc0_cs2_bncr_value = 0;
  759. ebc0_cs3_bnap_value = 0;
  760. ebc0_cs3_bncr_value = 0;
  761. }
  762. if ((config_on_ebc_cs4_is_small_flash()) == TRUE) {
  763. /* Small Flash */
  764. ebc0_cs4_bnap_value = EBC0_BNAP_SMALL_FLASH;
  765. ebc0_cs4_bncr_value = EBC0_BNCR_SMALL_FLASH_CS4;
  766. } else {
  767. /* Large Flash or SRAM */
  768. ebc0_cs4_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
  769. ebc0_cs4_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4;
  770. }
  771. break;
  772. /*------------------------------------------------------------------------- */
  773. case BOOT_DEVICE_UNKNOWN:
  774. /*------------------------------------------------------------------------- */
  775. /* Error */
  776. break;
  777. }
  778. /*-------------------------------------------------------------------------+
  779. | Initialize EBC CONFIG
  780. +-------------------------------------------------------------------------*/
  781. mtdcr(EBC0_CFGADDR, EBC0_CFG);
  782. mtdcr(EBC0_CFGDATA, EBC0_CFG_EBTC_DRIVEN |
  783. EBC0_CFG_PTD_ENABLED |
  784. EBC0_CFG_RTC_2048PERCLK |
  785. EBC0_CFG_EMPL_LOW |
  786. EBC0_CFG_EMPH_LOW |
  787. EBC0_CFG_CSTC_DRIVEN |
  788. EBC0_CFG_BPF_ONEDW |
  789. EBC0_CFG_EMS_8BIT |
  790. EBC0_CFG_PME_DISABLED |
  791. EBC0_CFG_PMT_ENCODE(0) );
  792. /*-------------------------------------------------------------------------+
  793. | Initialize EBC Bank 0-4
  794. +-------------------------------------------------------------------------*/
  795. /* EBC Bank0 */
  796. mtebc(PB0AP, ebc0_cs0_bnap_value);
  797. mtebc(PB0CR, ebc0_cs0_bncr_value);
  798. /* EBC Bank1 */
  799. mtebc(PB1AP, ebc0_cs1_bnap_value);
  800. mtebc(PB1CR, ebc0_cs1_bncr_value);
  801. /* EBC Bank2 */
  802. mtebc(PB2AP, ebc0_cs2_bnap_value);
  803. mtebc(PB2CR, ebc0_cs2_bncr_value);
  804. /* EBC Bank3 */
  805. mtebc(PB3AP, ebc0_cs3_bnap_value);
  806. mtebc(PB3CR, ebc0_cs3_bncr_value);
  807. /* EBC Bank4 */
  808. mtebc(PB4AP, ebc0_cs4_bnap_value);
  809. mtebc(PB4CR, ebc0_cs4_bncr_value);
  810. return;
  811. }
  812. /*----------------------------------------------------------------------------+
  813. | get_uart_configuration.
  814. +----------------------------------------------------------------------------*/
  815. uart_config_nb_t get_uart_configuration(void)
  816. {
  817. return (L4);
  818. }
  819. /*----------------------------------------------------------------------------+
  820. | set_phy_configuration_through_fpga => to EPLD
  821. +----------------------------------------------------------------------------*/
  822. void set_phy_configuration_through_fpga(zmii_config_t config)
  823. {
  824. unsigned long fpga_selection_reg;
  825. fpga_selection_reg = in8(FPGA_SELECTION_1_REG) & ~FPGA_SEL_1_REG_PHY_MASK;
  826. switch(config)
  827. {
  828. case ZMII_CONFIGURATION_IS_MII:
  829. fpga_selection_reg = fpga_selection_reg | FPGA_SEL_1_REG_MII;
  830. break;
  831. case ZMII_CONFIGURATION_IS_RMII:
  832. fpga_selection_reg = fpga_selection_reg | FPGA_SEL_1_REG_RMII;
  833. break;
  834. case ZMII_CONFIGURATION_IS_SMII:
  835. fpga_selection_reg = fpga_selection_reg | FPGA_SEL_1_REG_SMII;
  836. break;
  837. case ZMII_CONFIGURATION_UNKNOWN:
  838. default:
  839. break;
  840. }
  841. out8(FPGA_SELECTION_1_REG,fpga_selection_reg);
  842. }
  843. /*----------------------------------------------------------------------------+
  844. | scp_selection_in_fpga.
  845. +----------------------------------------------------------------------------*/
  846. void scp_selection_in_fpga(void)
  847. {
  848. unsigned long fpga_selection_2_reg;
  849. fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_IIC1_SCP_SEL_MASK;
  850. fpga_selection_2_reg |= FPGA_SEL2_REG_SEL_SCP;
  851. out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
  852. }
  853. /*----------------------------------------------------------------------------+
  854. | iic1_selection_in_fpga.
  855. +----------------------------------------------------------------------------*/
  856. void iic1_selection_in_fpga(void)
  857. {
  858. unsigned long fpga_selection_2_reg;
  859. fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_IIC1_SCP_SEL_MASK;
  860. fpga_selection_2_reg |= FPGA_SEL2_REG_SEL_IIC1;
  861. out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
  862. }
  863. /*----------------------------------------------------------------------------+
  864. | dma_a_b_selection_in_fpga.
  865. +----------------------------------------------------------------------------*/
  866. void dma_a_b_selection_in_fpga(void)
  867. {
  868. unsigned long fpga_selection_2_reg;
  869. fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) | FPGA_SEL2_REG_SEL_DMA_A_B;
  870. out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
  871. }
  872. /*----------------------------------------------------------------------------+
  873. | dma_a_b_unselect_in_fpga.
  874. +----------------------------------------------------------------------------*/
  875. void dma_a_b_unselect_in_fpga(void)
  876. {
  877. unsigned long fpga_selection_2_reg;
  878. fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_SEL_DMA_A_B;
  879. out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
  880. }
  881. /*----------------------------------------------------------------------------+
  882. | dma_c_d_selection_in_fpga.
  883. +----------------------------------------------------------------------------*/
  884. void dma_c_d_selection_in_fpga(void)
  885. {
  886. unsigned long fpga_selection_2_reg;
  887. fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) | FPGA_SEL2_REG_SEL_DMA_C_D;
  888. out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
  889. }
  890. /*----------------------------------------------------------------------------+
  891. | dma_c_d_unselect_in_fpga.
  892. +----------------------------------------------------------------------------*/
  893. void dma_c_d_unselect_in_fpga(void)
  894. {
  895. unsigned long fpga_selection_2_reg;
  896. fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_SEL_DMA_C_D;
  897. out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
  898. }
  899. /*----------------------------------------------------------------------------+
  900. | usb2_device_selection_in_fpga.
  901. +----------------------------------------------------------------------------*/
  902. void usb2_device_selection_in_fpga(void)
  903. {
  904. unsigned long fpga_selection_1_reg;
  905. fpga_selection_1_reg = in8(FPGA_SELECTION_1_REG) | FPGA_SEL_1_REG_USB2_DEV_SEL;
  906. out8(FPGA_SELECTION_1_REG,fpga_selection_1_reg);
  907. }
  908. /*----------------------------------------------------------------------------+
  909. | usb2_device_reset_through_fpga.
  910. +----------------------------------------------------------------------------*/
  911. void usb2_device_reset_through_fpga(void)
  912. {
  913. /* Perform soft Reset pulse */
  914. unsigned long fpga_reset_reg;
  915. int i;
  916. fpga_reset_reg = in8(FPGA_RESET_REG);
  917. out8(FPGA_RESET_REG,fpga_reset_reg | FPGA_RESET_REG_RESET_USB20_DEV);
  918. for (i=0; i<500; i++)
  919. udelay(1000);
  920. out8(FPGA_RESET_REG,fpga_reset_reg);
  921. }
  922. /*----------------------------------------------------------------------------+
  923. | usb2_host_selection_in_fpga.
  924. +----------------------------------------------------------------------------*/
  925. void usb2_host_selection_in_fpga(void)
  926. {
  927. unsigned long fpga_selection_1_reg;
  928. fpga_selection_1_reg = in8(FPGA_SELECTION_1_REG) | FPGA_SEL_1_REG_USB2_HOST_SEL;
  929. out8(FPGA_SELECTION_1_REG,fpga_selection_1_reg);
  930. }
  931. /*----------------------------------------------------------------------------+
  932. | ndfc_selection_in_fpga.
  933. +----------------------------------------------------------------------------*/
  934. void ndfc_selection_in_fpga(void)
  935. {
  936. unsigned long fpga_selection_1_reg;
  937. fpga_selection_1_reg = in8(FPGA_SELECTION_1_REG) &~FPGA_SEL_1_REG_NF_SELEC_MASK;
  938. fpga_selection_1_reg |= FPGA_SEL_1_REG_NF0_SEL_BY_NFCS1;
  939. fpga_selection_1_reg |= FPGA_SEL_1_REG_NF1_SEL_BY_NFCS2;
  940. out8(FPGA_SELECTION_1_REG,fpga_selection_1_reg);
  941. }
  942. /*----------------------------------------------------------------------------+
  943. | uart_selection_in_fpga.
  944. +----------------------------------------------------------------------------*/
  945. void uart_selection_in_fpga(uart_config_nb_t uart_config)
  946. {
  947. /* FPGA register */
  948. unsigned char fpga_selection_3_reg;
  949. /* Read FPGA Reagister */
  950. fpga_selection_3_reg = in8(FPGA_SELECTION_3_REG);
  951. switch (uart_config)
  952. {
  953. case L1:
  954. /* ----------------------------------------------------------------------- */
  955. /* L1 configuration: UART0 = 8 pins */
  956. /* ----------------------------------------------------------------------- */
  957. /* Configure FPGA */
  958. fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
  959. fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG1;
  960. out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
  961. break;
  962. case L2:
  963. /* ----------------------------------------------------------------------- */
  964. /* L2 configuration: UART0 = 4 pins */
  965. /* UART1 = 4 pins */
  966. /* ----------------------------------------------------------------------- */
  967. /* Configure FPGA */
  968. fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
  969. fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG2;
  970. out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
  971. break;
  972. case L3:
  973. /* ----------------------------------------------------------------------- */
  974. /* L3 configuration: UART0 = 4 pins */
  975. /* UART1 = 2 pins */
  976. /* UART2 = 2 pins */
  977. /* ----------------------------------------------------------------------- */
  978. /* Configure FPGA */
  979. fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
  980. fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG3;
  981. out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
  982. break;
  983. case L4:
  984. /* Configure FPGA */
  985. fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
  986. fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG4;
  987. out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
  988. break;
  989. default:
  990. /* Unsupported UART configuration number */
  991. for (;;)
  992. ;
  993. break;
  994. }
  995. }
  996. /*----------------------------------------------------------------------------+
  997. | init_default_gpio
  998. +----------------------------------------------------------------------------*/
  999. void init_default_gpio(gpio_param_s (*gpio_tab)[GPIO_MAX])
  1000. {
  1001. int i;
  1002. /* Init GPIO0 */
  1003. for(i=0; i<GPIO_MAX; i++)
  1004. {
  1005. gpio_tab[GPIO0][i].add = GPIO0_BASE;
  1006. gpio_tab[GPIO0][i].in_out = GPIO_DIS;
  1007. gpio_tab[GPIO0][i].alt_nb = GPIO_SEL;
  1008. }
  1009. /* Init GPIO1 */
  1010. for(i=0; i<GPIO_MAX; i++)
  1011. {
  1012. gpio_tab[GPIO1][i].add = GPIO1_BASE;
  1013. gpio_tab[GPIO1][i].in_out = GPIO_DIS;
  1014. gpio_tab[GPIO1][i].alt_nb = GPIO_SEL;
  1015. }
  1016. /* EBC_CS_N(5) - GPIO0_10 */
  1017. gpio_tab[GPIO0][10].in_out = GPIO_OUT;
  1018. gpio_tab[GPIO0][10].alt_nb = GPIO_ALT1;
  1019. /* EBC_CS_N(4) - GPIO0_9 */
  1020. gpio_tab[GPIO0][9].in_out = GPIO_OUT;
  1021. gpio_tab[GPIO0][9].alt_nb = GPIO_ALT1;
  1022. }
  1023. /*----------------------------------------------------------------------------+
  1024. | update_uart_ios
  1025. +------------------------------------------------------------------------------
  1026. |
  1027. | Set UART Configuration in PowerPC440EP
  1028. |
  1029. | +---------------------------------------------------------------------+
  1030. | | Configuartion | Connector | Nb of pins | Pins | Associated |
  1031. | | Number | Port Name | available | naming | CORE |
  1032. | +-----------------+---------------+------------+--------+-------------+
  1033. | | L1 | Port_A | 8 | UART | UART core 0 |
  1034. | +-----------------+---------------+------------+--------+-------------+
  1035. | | L2 | Port_A | 4 | UART1 | UART core 0 |
  1036. | | (L2D) | Port_B | 4 | UART2 | UART core 1 |
  1037. | +-----------------+---------------+------------+--------+-------------+
  1038. | | L3 | Port_A | 4 | UART1 | UART core 0 |
  1039. | | (L3D) | Port_B | 2 | UART2 | UART core 1 |
  1040. | | | Port_C | 2 | UART3 | UART core 2 |
  1041. | +-----------------+---------------+------------+--------+-------------+
  1042. | | | Port_A | 2 | UART1 | UART core 0 |
  1043. | | L4 | Port_B | 2 | UART2 | UART core 1 |
  1044. | | (L4D) | Port_C | 2 | UART3 | UART core 2 |
  1045. | | | Port_D | 2 | UART4 | UART core 3 |
  1046. | +-----------------+---------------+------------+--------+-------------+
  1047. |
  1048. | Involved GPIOs
  1049. |
  1050. | +------------------------------------------------------------------------------+
  1051. | | GPIO | Aternate 1 | I/O | Alternate 2 | I/O | Alternate 3 | I/O |
  1052. | +---------+------------------+-----+-----------------+-----+-------------+-----+
  1053. | | GPIO1_2 | UART0_DCD_N | I | UART1_DSR_CTS_N | I | UART2_SOUT | O |
  1054. | | GPIO1_3 | UART0_8PIN_DSR_N | I | UART1_RTS_DTR_N | O | UART2_SIN | I |
  1055. | | GPIO1_4 | UART0_8PIN_CTS_N | I | NA | NA | UART3_SIN | I |
  1056. | | GPIO1_5 | UART0_RTS_N | O | NA | NA | UART3_SOUT | O |
  1057. | | GPIO1_6 | UART0_DTR_N | O | UART1_SOUT | O | NA | NA |
  1058. | | GPIO1_7 | UART0_RI_N | I | UART1_SIN | I | NA | NA |
  1059. | +------------------------------------------------------------------------------+
  1060. |
  1061. |
  1062. +----------------------------------------------------------------------------*/
  1063. void update_uart_ios(uart_config_nb_t uart_config, gpio_param_s (*gpio_tab)[GPIO_MAX])
  1064. {
  1065. switch (uart_config)
  1066. {
  1067. case L1:
  1068. /* ----------------------------------------------------------------------- */
  1069. /* L1 configuration: UART0 = 8 pins */
  1070. /* ----------------------------------------------------------------------- */
  1071. /* Update GPIO Configuration Table */
  1072. gpio_tab[GPIO1][2].in_out = GPIO_IN;
  1073. gpio_tab[GPIO1][2].alt_nb = GPIO_ALT1;
  1074. gpio_tab[GPIO1][3].in_out = GPIO_IN;
  1075. gpio_tab[GPIO1][3].alt_nb = GPIO_ALT1;
  1076. gpio_tab[GPIO1][4].in_out = GPIO_IN;
  1077. gpio_tab[GPIO1][4].alt_nb = GPIO_ALT1;
  1078. gpio_tab[GPIO1][5].in_out = GPIO_OUT;
  1079. gpio_tab[GPIO1][5].alt_nb = GPIO_ALT1;
  1080. gpio_tab[GPIO1][6].in_out = GPIO_OUT;
  1081. gpio_tab[GPIO1][6].alt_nb = GPIO_ALT1;
  1082. gpio_tab[GPIO1][7].in_out = GPIO_IN;
  1083. gpio_tab[GPIO1][7].alt_nb = GPIO_ALT1;
  1084. break;
  1085. case L2:
  1086. /* ----------------------------------------------------------------------- */
  1087. /* L2 configuration: UART0 = 4 pins */
  1088. /* UART1 = 4 pins */
  1089. /* ----------------------------------------------------------------------- */
  1090. /* Update GPIO Configuration Table */
  1091. gpio_tab[GPIO1][2].in_out = GPIO_IN;
  1092. gpio_tab[GPIO1][2].alt_nb = GPIO_ALT2;
  1093. gpio_tab[GPIO1][3].in_out = GPIO_OUT;
  1094. gpio_tab[GPIO1][3].alt_nb = GPIO_ALT2;
  1095. gpio_tab[GPIO1][4].in_out = GPIO_IN;
  1096. gpio_tab[GPIO1][4].alt_nb = GPIO_ALT1;
  1097. gpio_tab[GPIO1][5].in_out = GPIO_OUT;
  1098. gpio_tab[GPIO1][5].alt_nb = GPIO_ALT1;
  1099. gpio_tab[GPIO1][6].in_out = GPIO_OUT;
  1100. gpio_tab[GPIO1][6].alt_nb = GPIO_ALT2;
  1101. gpio_tab[GPIO1][7].in_out = GPIO_IN;
  1102. gpio_tab[GPIO1][7].alt_nb = GPIO_ALT2;
  1103. break;
  1104. case L3:
  1105. /* ----------------------------------------------------------------------- */
  1106. /* L3 configuration: UART0 = 4 pins */
  1107. /* UART1 = 2 pins */
  1108. /* UART2 = 2 pins */
  1109. /* ----------------------------------------------------------------------- */
  1110. /* Update GPIO Configuration Table */
  1111. gpio_tab[GPIO1][2].in_out = GPIO_OUT;
  1112. gpio_tab[GPIO1][2].alt_nb = GPIO_ALT3;
  1113. gpio_tab[GPIO1][3].in_out = GPIO_IN;
  1114. gpio_tab[GPIO1][3].alt_nb = GPIO_ALT3;
  1115. gpio_tab[GPIO1][4].in_out = GPIO_IN;
  1116. gpio_tab[GPIO1][4].alt_nb = GPIO_ALT1;
  1117. gpio_tab[GPIO1][5].in_out = GPIO_OUT;
  1118. gpio_tab[GPIO1][5].alt_nb = GPIO_ALT1;
  1119. gpio_tab[GPIO1][6].in_out = GPIO_OUT;
  1120. gpio_tab[GPIO1][6].alt_nb = GPIO_ALT2;
  1121. gpio_tab[GPIO1][7].in_out = GPIO_IN;
  1122. gpio_tab[GPIO1][7].alt_nb = GPIO_ALT2;
  1123. break;
  1124. case L4:
  1125. /* ----------------------------------------------------------------------- */
  1126. /* L4 configuration: UART0 = 2 pins */
  1127. /* UART1 = 2 pins */
  1128. /* UART2 = 2 pins */
  1129. /* UART3 = 2 pins */
  1130. /* ----------------------------------------------------------------------- */
  1131. /* Update GPIO Configuration Table */
  1132. gpio_tab[GPIO1][2].in_out = GPIO_OUT;
  1133. gpio_tab[GPIO1][2].alt_nb = GPIO_ALT3;
  1134. gpio_tab[GPIO1][3].in_out = GPIO_IN;
  1135. gpio_tab[GPIO1][3].alt_nb = GPIO_ALT3;
  1136. gpio_tab[GPIO1][4].in_out = GPIO_IN;
  1137. gpio_tab[GPIO1][4].alt_nb = GPIO_ALT3;
  1138. gpio_tab[GPIO1][5].in_out = GPIO_OUT;
  1139. gpio_tab[GPIO1][5].alt_nb = GPIO_ALT3;
  1140. gpio_tab[GPIO1][6].in_out = GPIO_OUT;
  1141. gpio_tab[GPIO1][6].alt_nb = GPIO_ALT2;
  1142. gpio_tab[GPIO1][7].in_out = GPIO_IN;
  1143. gpio_tab[GPIO1][7].alt_nb = GPIO_ALT2;
  1144. break;
  1145. default:
  1146. /* Unsupported UART configuration number */
  1147. printf("ERROR - Unsupported UART configuration number.\n\n");
  1148. for (;;)
  1149. ;
  1150. break;
  1151. }
  1152. /* Set input Selection Register on Alt_Receive for UART Input Core */
  1153. out32(GPIO1_IS1L, (in32(GPIO1_IS1L) | 0x0FC30000));
  1154. out32(GPIO1_IS2L, (in32(GPIO1_IS2L) | 0x0C030000));
  1155. out32(GPIO1_IS3L, (in32(GPIO1_IS3L) | 0x03C00000));
  1156. }
  1157. /*----------------------------------------------------------------------------+
  1158. | update_ndfc_ios(void).
  1159. +----------------------------------------------------------------------------*/
  1160. void update_ndfc_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
  1161. {
  1162. /* Update GPIO Configuration Table */
  1163. gpio_tab[GPIO0][6].in_out = GPIO_OUT; /* EBC_CS_N(1) */
  1164. gpio_tab[GPIO0][6].alt_nb = GPIO_ALT1;
  1165. gpio_tab[GPIO0][7].in_out = GPIO_OUT; /* EBC_CS_N(2) */
  1166. gpio_tab[GPIO0][7].alt_nb = GPIO_ALT1;
  1167. #if 0
  1168. gpio_tab[GPIO0][7].in_out = GPIO_OUT; /* EBC_CS_N(3) */
  1169. gpio_tab[GPIO0][7].alt_nb = GPIO_ALT1;
  1170. #endif
  1171. }
  1172. /*----------------------------------------------------------------------------+
  1173. | update_zii_ios(void).
  1174. +----------------------------------------------------------------------------*/
  1175. void update_zii_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
  1176. {
  1177. /* Update GPIO Configuration Table */
  1178. gpio_tab[GPIO0][12].in_out = GPIO_IN; /* ZII_p0Rxd(0) */
  1179. gpio_tab[GPIO0][12].alt_nb = GPIO_ALT1;
  1180. gpio_tab[GPIO0][13].in_out = GPIO_IN; /* ZII_p0Rxd(1) */
  1181. gpio_tab[GPIO0][13].alt_nb = GPIO_ALT1;
  1182. gpio_tab[GPIO0][14].in_out = GPIO_IN; /* ZII_p0Rxd(2) */
  1183. gpio_tab[GPIO0][14].alt_nb = GPIO_ALT1;
  1184. gpio_tab[GPIO0][15].in_out = GPIO_IN; /* ZII_p0Rxd(3) */
  1185. gpio_tab[GPIO0][15].alt_nb = GPIO_ALT1;
  1186. gpio_tab[GPIO0][16].in_out = GPIO_OUT; /* ZII_p0Txd(0) */
  1187. gpio_tab[GPIO0][16].alt_nb = GPIO_ALT1;
  1188. gpio_tab[GPIO0][17].in_out = GPIO_OUT; /* ZII_p0Txd(1) */
  1189. gpio_tab[GPIO0][17].alt_nb = GPIO_ALT1;
  1190. gpio_tab[GPIO0][18].in_out = GPIO_OUT; /* ZII_p0Txd(2) */
  1191. gpio_tab[GPIO0][18].alt_nb = GPIO_ALT1;
  1192. gpio_tab[GPIO0][19].in_out = GPIO_OUT; /* ZII_p0Txd(3) */
  1193. gpio_tab[GPIO0][19].alt_nb = GPIO_ALT1;
  1194. gpio_tab[GPIO0][20].in_out = GPIO_IN; /* ZII_p0Rx_er */
  1195. gpio_tab[GPIO0][20].alt_nb = GPIO_ALT1;
  1196. gpio_tab[GPIO0][21].in_out = GPIO_IN; /* ZII_p0Rx_dv */
  1197. gpio_tab[GPIO0][21].alt_nb = GPIO_ALT1;
  1198. gpio_tab[GPIO0][22].in_out = GPIO_IN; /* ZII_p0Crs */
  1199. gpio_tab[GPIO0][22].alt_nb = GPIO_ALT1;
  1200. gpio_tab[GPIO0][23].in_out = GPIO_OUT; /* ZII_p0Tx_er */
  1201. gpio_tab[GPIO0][23].alt_nb = GPIO_ALT1;
  1202. gpio_tab[GPIO0][24].in_out = GPIO_OUT; /* ZII_p0Tx_en */
  1203. gpio_tab[GPIO0][24].alt_nb = GPIO_ALT1;
  1204. gpio_tab[GPIO0][25].in_out = GPIO_IN; /* ZII_p0Col */
  1205. gpio_tab[GPIO0][25].alt_nb = GPIO_ALT1;
  1206. }
  1207. /*----------------------------------------------------------------------------+
  1208. | update_uic_0_3_irq_ios().
  1209. +----------------------------------------------------------------------------*/
  1210. void update_uic_0_3_irq_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
  1211. {
  1212. gpio_tab[GPIO1][8].in_out = GPIO_IN; /* UIC_IRQ(0) */
  1213. gpio_tab[GPIO1][8].alt_nb = GPIO_ALT1;
  1214. gpio_tab[GPIO1][9].in_out = GPIO_IN; /* UIC_IRQ(1) */
  1215. gpio_tab[GPIO1][9].alt_nb = GPIO_ALT1;
  1216. gpio_tab[GPIO1][10].in_out = GPIO_IN; /* UIC_IRQ(2) */
  1217. gpio_tab[GPIO1][10].alt_nb = GPIO_ALT1;
  1218. gpio_tab[GPIO1][11].in_out = GPIO_IN; /* UIC_IRQ(3) */
  1219. gpio_tab[GPIO1][11].alt_nb = GPIO_ALT1;
  1220. }
  1221. /*----------------------------------------------------------------------------+
  1222. | update_uic_4_9_irq_ios().
  1223. +----------------------------------------------------------------------------*/
  1224. void update_uic_4_9_irq_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
  1225. {
  1226. gpio_tab[GPIO1][12].in_out = GPIO_IN; /* UIC_IRQ(4) */
  1227. gpio_tab[GPIO1][12].alt_nb = GPIO_ALT1;
  1228. gpio_tab[GPIO1][13].in_out = GPIO_IN; /* UIC_IRQ(6) */
  1229. gpio_tab[GPIO1][13].alt_nb = GPIO_ALT1;
  1230. gpio_tab[GPIO1][14].in_out = GPIO_IN; /* UIC_IRQ(7) */
  1231. gpio_tab[GPIO1][14].alt_nb = GPIO_ALT1;
  1232. gpio_tab[GPIO1][15].in_out = GPIO_IN; /* UIC_IRQ(8) */
  1233. gpio_tab[GPIO1][15].alt_nb = GPIO_ALT1;
  1234. gpio_tab[GPIO1][16].in_out = GPIO_IN; /* UIC_IRQ(9) */
  1235. gpio_tab[GPIO1][16].alt_nb = GPIO_ALT1;
  1236. }
  1237. /*----------------------------------------------------------------------------+
  1238. | update_dma_a_b_ios().
  1239. +----------------------------------------------------------------------------*/
  1240. void update_dma_a_b_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
  1241. {
  1242. gpio_tab[GPIO1][12].in_out = GPIO_OUT; /* DMA_ACK(1) */
  1243. gpio_tab[GPIO1][12].alt_nb = GPIO_ALT2;
  1244. gpio_tab[GPIO1][13].in_out = GPIO_BI; /* DMA_EOT/TC(1) */
  1245. gpio_tab[GPIO1][13].alt_nb = GPIO_ALT2;
  1246. gpio_tab[GPIO1][14].in_out = GPIO_IN; /* DMA_REQ(0) */
  1247. gpio_tab[GPIO1][14].alt_nb = GPIO_ALT2;
  1248. gpio_tab[GPIO1][15].in_out = GPIO_OUT; /* DMA_ACK(0) */
  1249. gpio_tab[GPIO1][15].alt_nb = GPIO_ALT2;
  1250. gpio_tab[GPIO1][16].in_out = GPIO_BI; /* DMA_EOT/TC(0) */
  1251. gpio_tab[GPIO1][16].alt_nb = GPIO_ALT2;
  1252. }
  1253. /*----------------------------------------------------------------------------+
  1254. | update_dma_c_d_ios().
  1255. +----------------------------------------------------------------------------*/
  1256. void update_dma_c_d_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
  1257. {
  1258. gpio_tab[GPIO0][0].in_out = GPIO_IN; /* DMA_REQ(2) */
  1259. gpio_tab[GPIO0][0].alt_nb = GPIO_ALT2;
  1260. gpio_tab[GPIO0][1].in_out = GPIO_OUT; /* DMA_ACK(2) */
  1261. gpio_tab[GPIO0][1].alt_nb = GPIO_ALT2;
  1262. gpio_tab[GPIO0][2].in_out = GPIO_BI; /* DMA_EOT/TC(2) */
  1263. gpio_tab[GPIO0][2].alt_nb = GPIO_ALT2;
  1264. gpio_tab[GPIO0][3].in_out = GPIO_IN; /* DMA_REQ(3) */
  1265. gpio_tab[GPIO0][3].alt_nb = GPIO_ALT2;
  1266. gpio_tab[GPIO0][4].in_out = GPIO_OUT; /* DMA_ACK(3) */
  1267. gpio_tab[GPIO0][4].alt_nb = GPIO_ALT2;
  1268. gpio_tab[GPIO0][5].in_out = GPIO_BI; /* DMA_EOT/TC(3) */
  1269. gpio_tab[GPIO0][5].alt_nb = GPIO_ALT2;
  1270. }
  1271. /*----------------------------------------------------------------------------+
  1272. | update_ebc_master_ios().
  1273. +----------------------------------------------------------------------------*/
  1274. void update_ebc_master_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
  1275. {
  1276. gpio_tab[GPIO0][27].in_out = GPIO_IN; /* EXT_EBC_REQ */
  1277. gpio_tab[GPIO0][27].alt_nb = GPIO_ALT1;
  1278. gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* EBC_EXT_HDLA */
  1279. gpio_tab[GPIO0][29].alt_nb = GPIO_ALT1;
  1280. gpio_tab[GPIO0][30].in_out = GPIO_OUT; /* EBC_EXT_ACK */
  1281. gpio_tab[GPIO0][30].alt_nb = GPIO_ALT1;
  1282. gpio_tab[GPIO0][31].in_out = GPIO_OUT; /* EBC_EXR_BUSREQ */
  1283. gpio_tab[GPIO0][31].alt_nb = GPIO_ALT1;
  1284. }
  1285. /*----------------------------------------------------------------------------+
  1286. | update_usb2_device_ios().
  1287. +----------------------------------------------------------------------------*/
  1288. void update_usb2_device_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
  1289. {
  1290. gpio_tab[GPIO0][26].in_out = GPIO_IN; /* USB2D_RXVALID */
  1291. gpio_tab[GPIO0][26].alt_nb = GPIO_ALT2;
  1292. gpio_tab[GPIO0][27].in_out = GPIO_IN; /* USB2D_RXERROR */
  1293. gpio_tab[GPIO0][27].alt_nb = GPIO_ALT2;
  1294. gpio_tab[GPIO0][28].in_out = GPIO_OUT; /* USB2D_TXVALID */
  1295. gpio_tab[GPIO0][28].alt_nb = GPIO_ALT2;
  1296. gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* USB2D_PAD_SUSPNDM */
  1297. gpio_tab[GPIO0][29].alt_nb = GPIO_ALT2;
  1298. gpio_tab[GPIO0][30].in_out = GPIO_OUT; /* USB2D_XCVRSELECT */
  1299. gpio_tab[GPIO0][30].alt_nb = GPIO_ALT2;
  1300. gpio_tab[GPIO0][31].in_out = GPIO_OUT; /* USB2D_TERMSELECT */
  1301. gpio_tab[GPIO0][31].alt_nb = GPIO_ALT2;
  1302. gpio_tab[GPIO1][0].in_out = GPIO_OUT; /* USB2D_OPMODE0 */
  1303. gpio_tab[GPIO1][0].alt_nb = GPIO_ALT1;
  1304. gpio_tab[GPIO1][1].in_out = GPIO_OUT; /* USB2D_OPMODE1 */
  1305. gpio_tab[GPIO1][1].alt_nb = GPIO_ALT1;
  1306. }
  1307. /*----------------------------------------------------------------------------+
  1308. | update_pci_patch_ios().
  1309. +----------------------------------------------------------------------------*/
  1310. void update_pci_patch_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
  1311. {
  1312. gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* EBC_EXT_HDLA */
  1313. gpio_tab[GPIO0][29].alt_nb = GPIO_ALT1;
  1314. }
  1315. /*----------------------------------------------------------------------------+
  1316. | set_chip_gpio_configuration(unsigned char gpio_core,
  1317. | gpio_param_s (*gpio_tab)[GPIO_MAX])
  1318. | Put the core impacted by clock modification and sharing in reset.
  1319. | Config the select registers to resolve the sharing depending of the config.
  1320. | Configure the GPIO registers.
  1321. |
  1322. +----------------------------------------------------------------------------*/
  1323. void set_chip_gpio_configuration(unsigned char gpio_core, gpio_param_s (*gpio_tab)[GPIO_MAX])
  1324. {
  1325. unsigned char i=0, j=0, reg_offset = 0;
  1326. unsigned long gpio_reg, gpio_core_add;
  1327. /* GPIO config of the GPIOs 0 to 31 */
  1328. for (i=0; i<GPIO_MAX; i++, j++)
  1329. {
  1330. if (i == GPIO_MAX/2)
  1331. {
  1332. reg_offset = 4;
  1333. j = i-16;
  1334. }
  1335. gpio_core_add = gpio_tab[gpio_core][i].add;
  1336. if ( (gpio_tab[gpio_core][i].in_out == GPIO_IN) ||
  1337. (gpio_tab[gpio_core][i].in_out == GPIO_BI ))
  1338. {
  1339. switch (gpio_tab[gpio_core][i].alt_nb)
  1340. {
  1341. case GPIO_SEL:
  1342. break;
  1343. case GPIO_ALT1:
  1344. gpio_reg = in32(GPIO_IS1(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
  1345. gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2));
  1346. out32(GPIO_IS1(gpio_core_add+reg_offset), gpio_reg);
  1347. break;
  1348. case GPIO_ALT2:
  1349. gpio_reg = in32(GPIO_IS2(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
  1350. gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2));
  1351. out32(GPIO_IS2(gpio_core_add+reg_offset), gpio_reg);
  1352. break;
  1353. case GPIO_ALT3:
  1354. gpio_reg = in32(GPIO_IS3(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
  1355. gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2));
  1356. out32(GPIO_IS3(gpio_core_add+reg_offset), gpio_reg);
  1357. break;
  1358. }
  1359. }
  1360. if ( (gpio_tab[gpio_core][i].in_out == GPIO_OUT) ||
  1361. (gpio_tab[gpio_core][i].in_out == GPIO_BI ))
  1362. {
  1363. switch (gpio_tab[gpio_core][i].alt_nb)
  1364. {
  1365. case GPIO_SEL:
  1366. break;
  1367. case GPIO_ALT1:
  1368. gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
  1369. gpio_reg = gpio_reg | (GPIO_ALT1_SEL >> (j*2));
  1370. out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg);
  1371. gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
  1372. gpio_reg = gpio_reg | (GPIO_ALT1_SEL >> (j*2));
  1373. out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg);
  1374. break;
  1375. case GPIO_ALT2:
  1376. gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
  1377. gpio_reg = gpio_reg | (GPIO_ALT2_SEL >> (j*2));
  1378. out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg);
  1379. gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
  1380. gpio_reg = gpio_reg | (GPIO_ALT2_SEL >> (j*2));
  1381. out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg);
  1382. break;
  1383. case GPIO_ALT3:
  1384. gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
  1385. gpio_reg = gpio_reg | (GPIO_ALT3_SEL >> (j*2));
  1386. out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg);
  1387. gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
  1388. gpio_reg = gpio_reg | (GPIO_ALT3_SEL >> (j*2));
  1389. out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg);
  1390. break;
  1391. }
  1392. }
  1393. }
  1394. }
  1395. /*----------------------------------------------------------------------------+
  1396. | force_bup_core_selection.
  1397. +----------------------------------------------------------------------------*/
  1398. void force_bup_core_selection(core_selection_t *core_select_P, config_validity_t *config_val_P)
  1399. {
  1400. /* Pointer invalid */
  1401. if (core_select_P == NULL)
  1402. {
  1403. printf("Configuration invalid pointer 1\n");
  1404. for (;;)
  1405. ;
  1406. }
  1407. /* L4 Selection */
  1408. *(core_select_P+UART_CORE0) = CORE_SELECTED;
  1409. *(core_select_P+UART_CORE1) = CORE_SELECTED;
  1410. *(core_select_P+UART_CORE2) = CORE_SELECTED;
  1411. *(core_select_P+UART_CORE3) = CORE_SELECTED;
  1412. /* RMII Selection */
  1413. *(core_select_P+RMII_SEL) = CORE_SELECTED;
  1414. /* External Interrupt 0-9 selection */
  1415. *(core_select_P+UIC_0_3) = CORE_SELECTED;
  1416. *(core_select_P+UIC_4_9) = CORE_SELECTED;
  1417. *(core_select_P+SCP_CORE) = CORE_SELECTED;
  1418. *(core_select_P+DMA_CHANNEL_CD) = CORE_SELECTED;
  1419. *(core_select_P+PACKET_REJ_FUNC_AVAIL) = CORE_SELECTED;
  1420. *(core_select_P+USB1_DEVICE) = CORE_SELECTED;
  1421. if (is_nand_selected()) {
  1422. *(core_select_P+NAND_FLASH) = CORE_SELECTED;
  1423. }
  1424. *config_val_P = CONFIG_IS_VALID;
  1425. }
  1426. /*----------------------------------------------------------------------------+
  1427. | configure_ppc440ep_pins.
  1428. +----------------------------------------------------------------------------*/
  1429. void configure_ppc440ep_pins(void)
  1430. {
  1431. uart_config_nb_t uart_configuration;
  1432. config_validity_t config_val = CONFIG_IS_INVALID;
  1433. /* Create Core Selection Table */
  1434. core_selection_t ppc440ep_core_selection[MAX_CORE_SELECT_NB] =
  1435. {
  1436. CORE_NOT_SELECTED, /* IIC_CORE, */
  1437. CORE_NOT_SELECTED, /* SPC_CORE, */
  1438. CORE_NOT_SELECTED, /* DMA_CHANNEL_AB, */
  1439. CORE_NOT_SELECTED, /* UIC_4_9, */
  1440. CORE_NOT_SELECTED, /* USB2_HOST, */
  1441. CORE_NOT_SELECTED, /* DMA_CHANNEL_CD, */
  1442. CORE_NOT_SELECTED, /* USB2_DEVICE, */
  1443. CORE_NOT_SELECTED, /* PACKET_REJ_FUNC_AVAIL, */
  1444. CORE_NOT_SELECTED, /* USB1_DEVICE, */
  1445. CORE_NOT_SELECTED, /* EBC_MASTER, */
  1446. CORE_NOT_SELECTED, /* NAND_FLASH, */
  1447. CORE_NOT_SELECTED, /* UART_CORE0, */
  1448. CORE_NOT_SELECTED, /* UART_CORE1, */
  1449. CORE_NOT_SELECTED, /* UART_CORE2, */
  1450. CORE_NOT_SELECTED, /* UART_CORE3, */
  1451. CORE_NOT_SELECTED, /* MII_SEL, */
  1452. CORE_NOT_SELECTED, /* RMII_SEL, */
  1453. CORE_NOT_SELECTED, /* SMII_SEL, */
  1454. CORE_NOT_SELECTED, /* PACKET_REJ_FUNC_EN */
  1455. CORE_NOT_SELECTED, /* UIC_0_3 */
  1456. CORE_NOT_SELECTED, /* USB1_HOST */
  1457. CORE_NOT_SELECTED /* PCI_PATCH */
  1458. };
  1459. gpio_param_s gpio_tab[GPIO_GROUP_MAX][GPIO_MAX];
  1460. /* Table Default Initialisation + FPGA Access */
  1461. init_default_gpio(gpio_tab);
  1462. set_chip_gpio_configuration(GPIO0, gpio_tab);
  1463. set_chip_gpio_configuration(GPIO1, gpio_tab);
  1464. /* Update Table */
  1465. force_bup_core_selection(ppc440ep_core_selection, &config_val);
  1466. #if 0 /* test-only */
  1467. /* If we are running PIBS 1, force known configuration */
  1468. update_core_selection_table(ppc440ep_core_selection, &config_val);
  1469. #endif
  1470. /*----------------------------------------------------------------------------+
  1471. | SDR + ios table update + fpga initialization
  1472. +----------------------------------------------------------------------------*/
  1473. unsigned long sdr0_pfc1 = 0;
  1474. unsigned long sdr0_usb0 = 0;
  1475. unsigned long sdr0_mfr = 0;
  1476. /* PCI Always selected */
  1477. /* I2C Selection */
  1478. if (ppc440ep_core_selection[IIC_CORE] == CORE_SELECTED)
  1479. {
  1480. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SIS_MASK) | SDR0_PFC1_SIS_IIC1_SEL;
  1481. iic1_selection_in_fpga();
  1482. }
  1483. /* SCP Selection */
  1484. if (ppc440ep_core_selection[SCP_CORE] == CORE_SELECTED)
  1485. {
  1486. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SIS_MASK) | SDR0_PFC1_SIS_SCP_SEL;
  1487. scp_selection_in_fpga();
  1488. }
  1489. /* UIC 0:3 Selection */
  1490. if (ppc440ep_core_selection[UIC_0_3] == CORE_SELECTED)
  1491. {
  1492. update_uic_0_3_irq_ios(gpio_tab);
  1493. dma_a_b_unselect_in_fpga();
  1494. }
  1495. /* UIC 4:9 Selection */
  1496. if (ppc440ep_core_selection[UIC_4_9] == CORE_SELECTED)
  1497. {
  1498. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_DIS_MASK) | SDR0_PFC1_DIS_UICIRQ5_SEL;
  1499. update_uic_4_9_irq_ios(gpio_tab);
  1500. }
  1501. /* DMA AB Selection */
  1502. if (ppc440ep_core_selection[DMA_CHANNEL_AB] == CORE_SELECTED)
  1503. {
  1504. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_DIS_MASK) | SDR0_PFC1_DIS_DMAR_SEL;
  1505. update_dma_a_b_ios(gpio_tab);
  1506. dma_a_b_selection_in_fpga();
  1507. }
  1508. /* DMA CD Selection */
  1509. if (ppc440ep_core_selection[DMA_CHANNEL_CD] == CORE_SELECTED)
  1510. {
  1511. update_dma_c_d_ios(gpio_tab);
  1512. dma_c_d_selection_in_fpga();
  1513. }
  1514. /* EBC Master Selection */
  1515. if (ppc440ep_core_selection[EBC_MASTER] == CORE_SELECTED)
  1516. {
  1517. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_ERE_MASK) | SDR0_PFC1_ERE_EXTR_SEL;
  1518. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UES_MASK) | SDR0_PFC1_UES_EBCHR_SEL;
  1519. update_ebc_master_ios(gpio_tab);
  1520. }
  1521. /* PCI Patch Enable */
  1522. if (ppc440ep_core_selection[PCI_PATCH] == CORE_SELECTED)
  1523. {
  1524. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UES_MASK) | SDR0_PFC1_UES_EBCHR_SEL;
  1525. update_pci_patch_ios(gpio_tab);
  1526. }
  1527. /* USB2 Host Selection - Not Implemented in PowerPC 440EP Pass1 */
  1528. if (ppc440ep_core_selection[USB2_HOST] == CORE_SELECTED)
  1529. {
  1530. /* Not Implemented in PowerPC 440EP Pass1-Pass2 */
  1531. printf("Invalid configuration => USB2 Host selected\n");
  1532. for (;;)
  1533. ;
  1534. /*usb2_host_selection_in_fpga(); */
  1535. }
  1536. /* USB2.0 Device Selection */
  1537. if (ppc440ep_core_selection[USB2_DEVICE] == CORE_SELECTED)
  1538. {
  1539. update_usb2_device_ios(gpio_tab);
  1540. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UES_MASK) | SDR0_PFC1_UES_USB2D_SEL;
  1541. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UPR_MASK) | SDR0_PFC1_UPR_DISABLE;
  1542. mfsdr(SDR0_USB0, sdr0_usb0);
  1543. sdr0_usb0 = sdr0_usb0 &~SDR0_USB0_USB_DEVSEL_MASK;
  1544. sdr0_usb0 = sdr0_usb0 | SDR0_USB0_USB20D_DEVSEL;
  1545. mtsdr(SDR0_USB0, sdr0_usb0);
  1546. usb2_device_selection_in_fpga();
  1547. }
  1548. /* USB1.1 Device Selection */
  1549. if (ppc440ep_core_selection[USB1_DEVICE] == CORE_SELECTED)
  1550. {
  1551. mfsdr(SDR0_USB0, sdr0_usb0);
  1552. sdr0_usb0 = sdr0_usb0 &~SDR0_USB0_USB_DEVSEL_MASK;
  1553. sdr0_usb0 = sdr0_usb0 | SDR0_USB0_USB11D_DEVSEL;
  1554. mtsdr(SDR0_USB0, sdr0_usb0);
  1555. }
  1556. /* USB1.1 Host Selection */
  1557. if (ppc440ep_core_selection[USB1_HOST] == CORE_SELECTED)
  1558. {
  1559. mfsdr(SDR0_USB0, sdr0_usb0);
  1560. sdr0_usb0 = sdr0_usb0 &~SDR0_USB0_LEEN_MASK;
  1561. sdr0_usb0 = sdr0_usb0 | SDR0_USB0_LEEN_ENABLE;
  1562. mtsdr(SDR0_USB0, sdr0_usb0);
  1563. }
  1564. /* NAND Flash Selection */
  1565. if (ppc440ep_core_selection[NAND_FLASH] == CORE_SELECTED)
  1566. {
  1567. update_ndfc_ios(gpio_tab);
  1568. #if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL))
  1569. mtsdr(SDR0_CUST0, SDR0_CUST0_MUX_NDFC_SEL |
  1570. SDR0_CUST0_NDFC_ENABLE |
  1571. SDR0_CUST0_NDFC_BW_8_BIT |
  1572. SDR0_CUST0_NDFC_ARE_MASK |
  1573. SDR0_CUST0_CHIPSELGAT_EN1 |
  1574. SDR0_CUST0_CHIPSELGAT_EN2);
  1575. #else
  1576. mtsdr(SDR0_CUST0, SDR0_CUST0_MUX_NDFC_SEL |
  1577. SDR0_CUST0_NDFC_ENABLE |
  1578. SDR0_CUST0_NDFC_BW_8_BIT |
  1579. SDR0_CUST0_NDFC_ARE_MASK |
  1580. SDR0_CUST0_CHIPSELGAT_EN0 |
  1581. SDR0_CUST0_CHIPSELGAT_EN2);
  1582. #endif
  1583. ndfc_selection_in_fpga();
  1584. }
  1585. else
  1586. {
  1587. /* Set Mux on EMAC */
  1588. mtsdr(SDR0_CUST0, SDR0_CUST0_MUX_EMAC_SEL);
  1589. }
  1590. /* MII Selection */
  1591. if (ppc440ep_core_selection[MII_SEL] == CORE_SELECTED)
  1592. {
  1593. update_zii_ios(gpio_tab);
  1594. mfsdr(SDR0_MFR, sdr0_mfr);
  1595. sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_ZMII_MODE_MASK) | SDR0_MFR_ZMII_MODE_MII;
  1596. mtsdr(SDR0_MFR, sdr0_mfr);
  1597. set_phy_configuration_through_fpga(ZMII_CONFIGURATION_IS_MII);
  1598. }
  1599. /* RMII Selection */
  1600. if (ppc440ep_core_selection[RMII_SEL] == CORE_SELECTED)
  1601. {
  1602. update_zii_ios(gpio_tab);
  1603. mfsdr(SDR0_MFR, sdr0_mfr);
  1604. sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_ZMII_MODE_MASK) | SDR0_MFR_ZMII_MODE_RMII_10M;
  1605. mtsdr(SDR0_MFR, sdr0_mfr);
  1606. set_phy_configuration_through_fpga(ZMII_CONFIGURATION_IS_RMII);
  1607. }
  1608. /* SMII Selection */
  1609. if (ppc440ep_core_selection[SMII_SEL] == CORE_SELECTED)
  1610. {
  1611. update_zii_ios(gpio_tab);
  1612. mfsdr(SDR0_MFR, sdr0_mfr);
  1613. sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_ZMII_MODE_MASK) | SDR0_MFR_ZMII_MODE_SMII;
  1614. mtsdr(SDR0_MFR, sdr0_mfr);
  1615. set_phy_configuration_through_fpga(ZMII_CONFIGURATION_IS_SMII);
  1616. }
  1617. /* UART Selection */
  1618. uart_configuration = get_uart_configuration();
  1619. switch (uart_configuration)
  1620. {
  1621. case L1: /* L1 Selection */
  1622. /* UART0 8 pins Only */
  1623. /*sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U0ME_DSR_DTR; */
  1624. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) |SDR0_PFC1_U0ME_CTS_RTS; /* Chip Pb */
  1625. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_8PINS;
  1626. break;
  1627. case L2: /* L2 Selection */
  1628. /* UART0 and UART1 4 pins */
  1629. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
  1630. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_4PINS;
  1631. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U1ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
  1632. break;
  1633. case L3: /* L3 Selection */
  1634. /* UART0 4 pins, UART1 and UART2 2 pins */
  1635. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
  1636. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_4PINS;
  1637. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U1ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
  1638. break;
  1639. case L4: /* L4 Selection */
  1640. /* UART0, UART1, UART2 and UART3 2 pins */
  1641. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U0ME_DSR_DTR;
  1642. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_4PINS;
  1643. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U1ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
  1644. break;
  1645. }
  1646. update_uart_ios(uart_configuration, gpio_tab);
  1647. /* UART Selection in all cases */
  1648. uart_selection_in_fpga(uart_configuration);
  1649. /* Packet Reject Function Available */
  1650. if (ppc440ep_core_selection[PACKET_REJ_FUNC_AVAIL] == CORE_SELECTED)
  1651. {
  1652. /* Set UPR Bit in SDR0_PFC1 Register */
  1653. sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UPR_MASK) | SDR0_PFC1_UPR_ENABLE;
  1654. }
  1655. /* Packet Reject Function Enable */
  1656. if (ppc440ep_core_selection[PACKET_REJ_FUNC_EN] == CORE_SELECTED)
  1657. {
  1658. mfsdr(SDR0_MFR, sdr0_mfr);
  1659. sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_PKT_REJ_MASK) | SDR0_MFR_PKT_REJ_EN;;
  1660. mtsdr(SDR0_MFR, sdr0_mfr);
  1661. }
  1662. /* Perform effective access to hardware */
  1663. mtsdr(SDR0_PFC1, sdr0_pfc1);
  1664. set_chip_gpio_configuration(GPIO0, gpio_tab);
  1665. set_chip_gpio_configuration(GPIO1, gpio_tab);
  1666. /* USB2.0 Device Reset must be done after GPIO setting */
  1667. if (ppc440ep_core_selection[USB2_DEVICE] == CORE_SELECTED)
  1668. usb2_device_reset_through_fpga();
  1669. }