board_setup.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /*
  2. *
  3. * BRIEF MODULE DESCRIPTION
  4. * Alchemy Pb1200/Db1200 board setup.
  5. *
  6. * This program is free software; you can redistribute it and/or modify it
  7. * under the terms of the GNU General Public License as published by the
  8. * Free Software Foundation; either version 2 of the License, or (at your
  9. * option) any later version.
  10. *
  11. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  12. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  13. * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
  14. * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  15. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  16. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  17. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  18. * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  19. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  20. * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  21. *
  22. * You should have received a copy of the GNU General Public License along
  23. * with this program; if not, write to the Free Software Foundation, Inc.,
  24. * 675 Mass Ave, Cambridge, MA 02139, USA.
  25. */
  26. #include <linux/config.h>
  27. #include <linux/init.h>
  28. #include <linux/sched.h>
  29. #include <linux/ioport.h>
  30. #include <linux/mm.h>
  31. #include <linux/console.h>
  32. #include <linux/mc146818rtc.h>
  33. #include <linux/delay.h>
  34. #if defined(CONFIG_BLK_DEV_IDE_AU1XXX)
  35. #include <linux/ide.h>
  36. #endif
  37. #include <asm/cpu.h>
  38. #include <asm/bootinfo.h>
  39. #include <asm/irq.h>
  40. #include <asm/mipsregs.h>
  41. #include <asm/reboot.h>
  42. #include <asm/pgtable.h>
  43. #include <asm/mach-au1x00/au1000.h>
  44. #include <asm/mach-au1x00/au1xxx_dbdma.h>
  45. #ifdef CONFIG_MIPS_PB1200
  46. #include <asm/mach-pb1x00/pb1200.h>
  47. #endif
  48. #ifdef CONFIG_MIPS_DB1200
  49. #include <asm/mach-db1x00/db1200.h>
  50. #define PB1200_ETH_INT DB1200_ETH_INT
  51. #define PB1200_IDE_INT DB1200_IDE_INT
  52. #endif
  53. extern void _board_init_irq(void);
  54. extern void (*board_init_irq)(void);
  55. #ifdef CONFIG_BLK_DEV_IDE_AU1XXX
  56. extern u32 au1xxx_ide_virtbase;
  57. extern u64 au1xxx_ide_physbase;
  58. extern int au1xxx_ide_irq;
  59. u32 led_base_addr;
  60. /* Ddma */
  61. chan_tab_t *ide_read_ch, *ide_write_ch;
  62. u32 au1xxx_ide_ddma_enable = 0, switch4ddma = 1; // PIO+ddma
  63. dbdev_tab_t new_dbdev_tab_element = { DSCR_CMD0_THROTTLE, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 };
  64. #endif /* end CONFIG_BLK_DEV_IDE_AU1XXX */
  65. void board_reset (void)
  66. {
  67. bcsr->resets = 0;
  68. }
  69. void __init board_setup(void)
  70. {
  71. char *argptr = NULL;
  72. u32 pin_func;
  73. #if 0
  74. /* Enable PSC1 SYNC for AC97. Normaly done in audio driver,
  75. * but it is board specific code, so put it here.
  76. */
  77. pin_func = au_readl(SYS_PINFUNC);
  78. au_sync();
  79. pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1;
  80. au_writel(pin_func, SYS_PINFUNC);
  81. au_writel(0, (u32)bcsr|0x10); /* turn off pcmcia power */
  82. au_sync();
  83. #endif
  84. #if defined( CONFIG_I2C_ALGO_AU1550 )
  85. {
  86. u32 freq0, clksrc;
  87. /* Select SMBUS in CPLD */
  88. bcsr->resets &= ~(BCSR_RESETS_PCS0MUX);
  89. pin_func = au_readl(SYS_PINFUNC);
  90. au_sync();
  91. pin_func &= ~(3<<17 | 1<<4);
  92. /* Set GPIOs correctly */
  93. pin_func |= 2<<17;
  94. au_writel(pin_func, SYS_PINFUNC);
  95. au_sync();
  96. /* The i2c driver depends on 50Mhz clock */
  97. freq0 = au_readl(SYS_FREQCTRL0);
  98. au_sync();
  99. freq0 &= ~(SYS_FC_FRDIV1_MASK | SYS_FC_FS1 | SYS_FC_FE1);
  100. freq0 |= (3<<SYS_FC_FRDIV1_BIT);
  101. /* 396Mhz / (3+1)*2 == 49.5Mhz */
  102. au_writel(freq0, SYS_FREQCTRL0);
  103. au_sync();
  104. freq0 |= SYS_FC_FE1;
  105. au_writel(freq0, SYS_FREQCTRL0);
  106. au_sync();
  107. clksrc = au_readl(SYS_CLKSRC);
  108. au_sync();
  109. clksrc &= ~0x01f00000;
  110. /* bit 22 is EXTCLK0 for PSC0 */
  111. clksrc |= (0x3 << 22);
  112. au_writel(clksrc, SYS_CLKSRC);
  113. au_sync();
  114. }
  115. #endif
  116. #ifdef CONFIG_FB_AU1200
  117. argptr = prom_getcmdline();
  118. #ifdef CONFIG_MIPS_PB1200
  119. strcat(argptr, " video=au1200fb:panel:s11");
  120. #endif
  121. #ifdef CONFIG_MIPS_DB1200
  122. strcat(argptr, " video=au1200fb:panel:s7");
  123. #endif
  124. #endif
  125. #if defined(CONFIG_BLK_DEV_IDE_AU1XXX)
  126. /*
  127. * Iniz IDE parameters
  128. */
  129. au1xxx_ide_irq = PB1200_IDE_INT;
  130. au1xxx_ide_physbase = AU1XXX_ATA_PHYS_ADDR;
  131. au1xxx_ide_virtbase = KSEG1ADDR(AU1XXX_ATA_PHYS_ADDR);
  132. /*
  133. * change PIO or PIO+Ddma
  134. * check the GPIO-5 pin condition. pb1200:s18_dot */
  135. switch4ddma = (au_readl(SYS_PINSTATERD) & (1 << 5)) ? 1 : 0;
  136. #endif
  137. /* The Pb1200 development board uses external MUX for PSC0 to
  138. support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI
  139. */
  140. #if defined(CONFIG_AU1550_PSC_SPI) && defined(CONFIG_I2C_ALGO_AU1550)
  141. #error I2C and SPI are mutually exclusive. Both are physically connected to PSC0.\
  142. Refer to Pb1200/Db1200 documentation.
  143. #elif defined( CONFIG_AU1550_PSC_SPI )
  144. bcsr->resets |= BCSR_RESETS_PCS0MUX;
  145. #elif defined( CONFIG_I2C_ALGO_AU1550 )
  146. bcsr->resets &= (~BCSR_RESETS_PCS0MUX);
  147. #endif
  148. au_sync();
  149. #ifdef CONFIG_MIPS_PB1200
  150. printk("AMD Alchemy Pb1200 Board\n");
  151. #endif
  152. #ifdef CONFIG_MIPS_DB1200
  153. printk("AMD Alchemy Db1200 Board\n");
  154. #endif
  155. /* Setup Pb1200 External Interrupt Controller */
  156. {
  157. extern void (*board_init_irq)(void);
  158. extern void _board_init_irq(void);
  159. board_init_irq = _board_init_irq;
  160. }
  161. }