xpedite1000.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /*
  2. * Copyright (C) 2003 Travis B. Sawyer <travis.sawyer@sandburst.com>
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #include <common.h>
  7. #include <console.h>
  8. #include <asm/processor.h>
  9. #include <spd_sdram.h>
  10. #include <i2c.h>
  11. #include <net.h>
  12. DECLARE_GLOBAL_DATA_PTR;
  13. int board_early_init_f(void)
  14. {
  15. unsigned long sdrreg;
  16. /*
  17. * Enable GPIO for pins 18 - 24
  18. * 18 = SEEPROM_WP
  19. * 19 = #M_RST
  20. * 20 = #MONARCH
  21. * 21 = #LED_ALARM
  22. * 22 = #LED_ACT
  23. * 23 = #LED_STATUS1
  24. * 24 = #LED_STATUS2
  25. */
  26. mfsdr(SDR0_PFC0, sdrreg);
  27. mtsdr(SDR0_PFC0, (sdrreg & ~SDR0_PFC0_TRE_ENABLE) | 0x00003e00);
  28. out32(CONFIG_SYS_GPIO_BASE + 0x018, (USR_LED0 | USR_LED1 | USR_LED2 | USR_LED3));
  29. LED0_OFF();
  30. LED1_OFF();
  31. LED2_OFF();
  32. LED3_OFF();
  33. /* Setup the external bus controller/chip selects */
  34. mtebc(PB0AP, 0x04055200); /* 16MB Strata FLASH */
  35. mtebc(PB0CR, 0xff098000); /* BAS=0xff0 16MB R/W 8-bit */
  36. mtebc(PB1AP, 0x04055200); /* 512KB Socketed AMD FLASH */
  37. mtebc(PB1CR, 0xfe018000); /* BAS=0xfe0 1MB R/W 8-bit */
  38. mtebc(PB6AP, 0x05006400); /* 32-64MB AMD MirrorBit FLASH */
  39. mtebc(PB6CR, 0xf00da000); /* BAS=0xf00 64MB R/W i6-bit */
  40. mtebc(PB7AP, 0x05006400); /* 32-64MB AMD MirrorBit FLASH */
  41. mtebc(PB7CR, 0xf40da000); /* BAS=0xf40 64MB R/W 16-bit */
  42. /*
  43. * Setup the interrupt controller polarities, triggers, etc.
  44. *
  45. * Because of the interrupt handling rework to handle 440GX interrupts
  46. * with the common code, we needed to change names of the UIC registers.
  47. * Here the new relationship:
  48. *
  49. * U-Boot name 440GX name
  50. * -----------------------
  51. * UIC0 UICB0
  52. * UIC1 UIC0
  53. * UIC2 UIC1
  54. * UIC3 UIC2
  55. */
  56. mtdcr(UIC1SR, 0xffffffff); /* clear all */
  57. mtdcr(UIC1ER, 0x00000000); /* disable all */
  58. mtdcr(UIC1CR, 0x00000003); /* SMI & UIC1 crit are critical */
  59. mtdcr(UIC1PR, 0xfffffe00); /* per ref-board manual */
  60. mtdcr(UIC1TR, 0x01c00000); /* per ref-board manual */
  61. mtdcr(UIC1VR, 0x00000001); /* int31 highest, base=0x000 */
  62. mtdcr(UIC1SR, 0xffffffff); /* clear all */
  63. mtdcr(UIC2SR, 0xffffffff); /* clear all */
  64. mtdcr(UIC2ER, 0x00000000); /* disable all */
  65. mtdcr(UIC2CR, 0x00000000); /* all non-critical */
  66. mtdcr(UIC2PR, 0xffffc0ff); /* per ref-board manual */
  67. mtdcr(UIC2TR, 0x00ff8000); /* per ref-board manual */
  68. mtdcr(UIC2VR, 0x00000001); /* int31 highest, base=0x000 */
  69. mtdcr(UIC2SR, 0xffffffff); /* clear all */
  70. mtdcr(UIC3SR, 0xffffffff); /* clear all */
  71. mtdcr(UIC3ER, 0x00000000); /* disable all */
  72. mtdcr(UIC3CR, 0x00000000); /* all non-critical */
  73. mtdcr(UIC3PR, 0xffffffff); /* per ref-board manual */
  74. mtdcr(UIC3TR, 0x00ff8c0f); /* per ref-board manual */
  75. mtdcr(UIC3VR, 0x00000001); /* int31 highest, base=0x000 */
  76. mtdcr(UIC3SR, 0xffffffff); /* clear all */
  77. mtdcr(UIC0SR, 0xfc000000); /* clear all */
  78. mtdcr(UIC0ER, 0x00000000); /* disable all */
  79. mtdcr(UIC0CR, 0x00000000); /* all non-critical */
  80. mtdcr(UIC0PR, 0xfc000000); /* */
  81. mtdcr(UIC0TR, 0x00000000); /* */
  82. mtdcr(UIC0VR, 0x00000001); /* */
  83. LED0_ON();
  84. return 0;
  85. }
  86. int checkboard(void)
  87. {
  88. char buf[64];
  89. int i;
  90. printf("Board: X-ES %s PMC SBC\n", CONFIG_SYS_BOARD_NAME);
  91. printf(" ");
  92. i = getenv_f("board_rev", buf, sizeof(buf));
  93. if (i > 0)
  94. printf("Rev %s, ", buf);
  95. i = getenv_f("serial#", buf, sizeof(buf));
  96. if (i > 0)
  97. printf("Serial# %s, ", buf);
  98. i = getenv_f("board_cfg", buf, sizeof(buf));
  99. if (i > 0)
  100. printf("Cfg %s", buf);
  101. printf("\n");
  102. return 0;
  103. }
  104. phys_size_t initdram(int board_type)
  105. {
  106. return spd_sdram();
  107. }
  108. /*
  109. * Override weak pci_pre_init()
  110. *
  111. * This routine is called just prior to registering the hose and gives
  112. * the board the opportunity to check things. Returning a value of zero
  113. * indicates that things are bad & PCI initialization should be aborted.
  114. *
  115. * Different boards may wish to customize the pci controller structure
  116. * (add regions, override default access routines, etc) or perform
  117. * certain pre-initialization actions.
  118. */
  119. #if defined(CONFIG_PCI)
  120. int pci_pre_init(struct pci_controller * hose)
  121. {
  122. unsigned long strap;
  123. /* See if we're supposed to setup the pci */
  124. mfsdr(SDR0_SDSTP1, strap);
  125. if ((strap & 0x00010000) == 0)
  126. return 0;
  127. #if defined(CONFIG_SYS_PCI_FORCE_PCI_CONV)
  128. /* Setup System Device Register PCIL0_XCR */
  129. mfsdr(SDR0_XCR, strap);
  130. strap &= 0x0f000000;
  131. mtsdr(SDR0_XCR, strap);
  132. #endif
  133. return 1;
  134. }
  135. #endif /* defined(CONFIG_PCI) */
  136. #if defined(CONFIG_PCI)
  137. /*
  138. * Override weak is_pci_host()
  139. *
  140. * This routine is called to determine if a pci scan should be
  141. * performed. With various hardware environments (especially cPCI and
  142. * PPMC) it's insufficient to depend on the state of the arbiter enable
  143. * bit in the strap register, or generic host/adapter assumptions.
  144. *
  145. * Rather than hard-code a bad assumption in the general 440 code, the
  146. * 440 pci code requires the board to decide at runtime.
  147. *
  148. * Return 0 for adapter mode, non-zero for host (monarch) mode.
  149. */
  150. int is_pci_host(struct pci_controller *hose)
  151. {
  152. return ((in32(CONFIG_SYS_GPIO_BASE + 0x1C) & 0x00000800) == 0);
  153. }
  154. #endif /* defined(CONFIG_PCI) */
  155. #ifdef CONFIG_POST
  156. /*
  157. * Returns 1 if keys pressed to start the power-on long-running tests
  158. * Called from board_init_f().
  159. */
  160. int post_hotkeys_pressed(void)
  161. {
  162. return ctrlc();
  163. }
  164. #endif