pxa910.c 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /*
  2. * linux/arch/arm/mach-mmp/pxa910.c
  3. *
  4. * Code specific to PXA910
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License version 2 as
  8. * published by the Free Software Foundation.
  9. */
  10. #include <linux/module.h>
  11. #include <linux/kernel.h>
  12. #include <linux/init.h>
  13. #include <linux/list.h>
  14. #include <linux/io.h>
  15. #include <asm/mach/time.h>
  16. #include <mach/addr-map.h>
  17. #include <mach/regs-apbc.h>
  18. #include <mach/regs-apmu.h>
  19. #include <mach/cputype.h>
  20. #include <mach/irqs.h>
  21. #include <mach/gpio.h>
  22. #include <mach/dma.h>
  23. #include <mach/mfp.h>
  24. #include <mach/devices.h>
  25. #include "common.h"
  26. #include "clock.h"
  27. #define MFPR_VIRT_BASE (APB_VIRT_BASE + 0x1e000)
  28. static struct mfp_addr_map pxa910_mfp_addr_map[] __initdata =
  29. {
  30. MFP_ADDR_X(GPIO0, GPIO54, 0xdc),
  31. MFP_ADDR_X(GPIO67, GPIO98, 0x1b8),
  32. MFP_ADDR_X(GPIO100, GPIO109, 0x238),
  33. MFP_ADDR(GPIO123, 0xcc),
  34. MFP_ADDR(GPIO124, 0xd0),
  35. MFP_ADDR(DF_IO0, 0x40),
  36. MFP_ADDR(DF_IO1, 0x3c),
  37. MFP_ADDR(DF_IO2, 0x38),
  38. MFP_ADDR(DF_IO3, 0x34),
  39. MFP_ADDR(DF_IO4, 0x30),
  40. MFP_ADDR(DF_IO5, 0x2c),
  41. MFP_ADDR(DF_IO6, 0x28),
  42. MFP_ADDR(DF_IO7, 0x24),
  43. MFP_ADDR(DF_IO8, 0x20),
  44. MFP_ADDR(DF_IO9, 0x1c),
  45. MFP_ADDR(DF_IO10, 0x18),
  46. MFP_ADDR(DF_IO11, 0x14),
  47. MFP_ADDR(DF_IO12, 0x10),
  48. MFP_ADDR(DF_IO13, 0xc),
  49. MFP_ADDR(DF_IO14, 0x8),
  50. MFP_ADDR(DF_IO15, 0x4),
  51. MFP_ADDR(DF_nCS0_SM_nCS2, 0x44),
  52. MFP_ADDR(DF_nCS1_SM_nCS3, 0x48),
  53. MFP_ADDR(SM_nCS0, 0x4c),
  54. MFP_ADDR(SM_nCS1, 0x50),
  55. MFP_ADDR(DF_WEn, 0x54),
  56. MFP_ADDR(DF_REn, 0x58),
  57. MFP_ADDR(DF_CLE_SM_OEn, 0x5c),
  58. MFP_ADDR(DF_ALE_SM_WEn, 0x60),
  59. MFP_ADDR(SM_SCLK, 0x64),
  60. MFP_ADDR(DF_RDY0, 0x68),
  61. MFP_ADDR(SM_BE0, 0x6c),
  62. MFP_ADDR(SM_BE1, 0x70),
  63. MFP_ADDR(SM_ADV, 0x74),
  64. MFP_ADDR(DF_RDY1, 0x78),
  65. MFP_ADDR(SM_ADVMUX, 0x7c),
  66. MFP_ADDR(SM_RDY, 0x80),
  67. MFP_ADDR_X(MMC1_DAT7, MMC1_WP, 0x84),
  68. MFP_ADDR_END,
  69. };
  70. #define APMASK(i) (GPIO_REGS_VIRT + BANK_OFF(i) + 0x09c)
  71. static void __init pxa910_init_gpio(void)
  72. {
  73. int i;
  74. /* enable GPIO clock */
  75. __raw_writel(APBC_APBCLK | APBC_FNCLK, APBC_PXA910_GPIO);
  76. /* unmask GPIO edge detection for all 4 banks - APMASKx */
  77. for (i = 0; i < 4; i++)
  78. __raw_writel(0xffffffff, APMASK(i));
  79. pxa_init_gpio(IRQ_PXA910_AP_GPIO, 0, 127, NULL);
  80. }
  81. void __init pxa910_init_irq(void)
  82. {
  83. icu_init_irq();
  84. pxa910_init_gpio();
  85. }
  86. /* APB peripheral clocks */
  87. static APBC_CLK(uart1, PXA910_UART0, 1, 14745600);
  88. static APBC_CLK(uart2, PXA910_UART1, 1, 14745600);
  89. static APBC_CLK(twsi0, PXA168_TWSI0, 1, 33000000);
  90. static APBC_CLK(twsi1, PXA168_TWSI1, 1, 33000000);
  91. static APBC_CLK(pwm1, PXA910_PWM1, 1, 13000000);
  92. static APBC_CLK(pwm2, PXA910_PWM2, 1, 13000000);
  93. static APBC_CLK(pwm3, PXA910_PWM3, 1, 13000000);
  94. static APBC_CLK(pwm4, PXA910_PWM4, 1, 13000000);
  95. static APMU_CLK(nand, NAND, 0x19b, 156000000);
  96. static APMU_CLK(u2o, USB, 0x1b, 480000000);
  97. /* device and clock bindings */
  98. static struct clk_lookup pxa910_clkregs[] = {
  99. INIT_CLKREG(&clk_uart1, "pxa2xx-uart.0", NULL),
  100. INIT_CLKREG(&clk_uart2, "pxa2xx-uart.1", NULL),
  101. INIT_CLKREG(&clk_twsi0, "pxa2xx-i2c.0", NULL),
  102. INIT_CLKREG(&clk_twsi1, "pxa2xx-i2c.1", NULL),
  103. INIT_CLKREG(&clk_pwm1, "pxa910-pwm.0", NULL),
  104. INIT_CLKREG(&clk_pwm2, "pxa910-pwm.1", NULL),
  105. INIT_CLKREG(&clk_pwm3, "pxa910-pwm.2", NULL),
  106. INIT_CLKREG(&clk_pwm4, "pxa910-pwm.3", NULL),
  107. INIT_CLKREG(&clk_nand, "pxa3xx-nand", NULL),
  108. INIT_CLKREG(&clk_u2o, "pxa-u2o", "U2OCLK"),
  109. };
  110. static int __init pxa910_init(void)
  111. {
  112. if (cpu_is_pxa910()) {
  113. mfp_init_base(MFPR_VIRT_BASE);
  114. mfp_init_addr(pxa910_mfp_addr_map);
  115. pxa_init_dma(IRQ_PXA910_DMA_INT0, 32);
  116. clkdev_add_table(ARRAY_AND_SIZE(pxa910_clkregs));
  117. }
  118. return 0;
  119. }
  120. postcore_initcall(pxa910_init);
  121. /* system timer - clock enabled, 3.25MHz */
  122. #define TIMER_CLK_RST (APBC_APBCLK | APBC_FNCLK | APBC_FNCLKSEL(3))
  123. static void __init pxa910_timer_init(void)
  124. {
  125. /* reset and configure */
  126. __raw_writel(APBC_APBCLK | APBC_RST, APBC_PXA910_TIMERS);
  127. __raw_writel(TIMER_CLK_RST, APBC_PXA910_TIMERS);
  128. timer_init(IRQ_PXA910_AP1_TIMER1);
  129. }
  130. struct sys_timer pxa910_timer = {
  131. .init = pxa910_timer_init,
  132. };
  133. /* on-chip devices */
  134. /* NOTE: there are totally 3 UARTs on PXA910:
  135. *
  136. * UART1 - Slow UART (can be used both by AP and CP)
  137. * UART2/3 - Fast UART
  138. *
  139. * To be backward compatible with the legacy FFUART/BTUART/STUART sequence,
  140. * they are re-ordered as:
  141. *
  142. * pxa910_device_uart1 - UART2 as FFUART
  143. * pxa910_device_uart2 - UART3 as BTUART
  144. *
  145. * UART1 is not used by AP for the moment.
  146. */
  147. PXA910_DEVICE(uart1, "pxa2xx-uart", 0, UART2, 0xd4017000, 0x30, 21, 22);
  148. PXA910_DEVICE(uart2, "pxa2xx-uart", 1, UART3, 0xd4018000, 0x30, 23, 24);
  149. PXA910_DEVICE(twsi0, "pxa2xx-i2c", 0, TWSI0, 0xd4011000, 0x28);
  150. PXA910_DEVICE(twsi1, "pxa2xx-i2c", 1, TWSI1, 0xd4025000, 0x28);
  151. PXA910_DEVICE(pwm1, "pxa910-pwm", 0, NONE, 0xd401a000, 0x10);
  152. PXA910_DEVICE(pwm2, "pxa910-pwm", 1, NONE, 0xd401a400, 0x10);
  153. PXA910_DEVICE(pwm3, "pxa910-pwm", 2, NONE, 0xd401a800, 0x10);
  154. PXA910_DEVICE(pwm4, "pxa910-pwm", 3, NONE, 0xd401ac00, 0x10);
  155. PXA910_DEVICE(nand, "pxa3xx-nand", -1, NAND, 0xd4283000, 0x80, 97, 99);