mpc52xx_devices.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. /*
  2. * arch/ppc/syslib/mpc52xx_devices.c
  3. *
  4. * Freescale MPC52xx device descriptions
  5. *
  6. *
  7. * Maintainer : Sylvain Munaut <tnt@246tNt.com>
  8. *
  9. * Copyright (C) 2005 Sylvain Munaut <tnt@246tNt.com>
  10. *
  11. * This file is licensed under the terms of the GNU General Public License
  12. * version 2. This program is licensed "as is" without any warranty of any
  13. * kind, whether express or implied.
  14. */
  15. #include <linux/fsl_devices.h>
  16. #include <linux/resource.h>
  17. #include <linux/platform_device.h>
  18. #include <asm/mpc52xx.h>
  19. #include <asm/ppc_sys.h>
  20. static u64 mpc52xx_dma_mask = 0xffffffffULL;
  21. static struct fsl_i2c_platform_data mpc52xx_fsl_i2c_pdata = {
  22. .device_flags = FSL_I2C_DEV_CLOCK_5200,
  23. };
  24. /* We use relative offsets for IORESOURCE_MEM to be independent from the
  25. * MBAR location at compile time
  26. */
  27. /* TODO Add the BestComm initiator channel to the device definitions,
  28. possibly using IORESOURCE_DMA. But that's when BestComm is ready ... */
  29. struct platform_device ppc_sys_platform_devices[] = {
  30. [MPC52xx_MSCAN1] = {
  31. .name = "mpc52xx-mscan",
  32. .id = 0,
  33. .num_resources = 2,
  34. .resource = (struct resource[]) {
  35. {
  36. .start = 0x0900,
  37. .end = 0x097f,
  38. .flags = IORESOURCE_MEM,
  39. },
  40. {
  41. .start = MPC52xx_MSCAN1_IRQ,
  42. .end = MPC52xx_MSCAN1_IRQ,
  43. .flags = IORESOURCE_IRQ,
  44. },
  45. },
  46. },
  47. [MPC52xx_MSCAN2] = {
  48. .name = "mpc52xx-mscan",
  49. .id = 1,
  50. .num_resources = 2,
  51. .resource = (struct resource[]) {
  52. {
  53. .start = 0x0980,
  54. .end = 0x09ff,
  55. .flags = IORESOURCE_MEM,
  56. },
  57. {
  58. .start = MPC52xx_MSCAN2_IRQ,
  59. .end = MPC52xx_MSCAN2_IRQ,
  60. .flags = IORESOURCE_IRQ,
  61. },
  62. },
  63. },
  64. [MPC52xx_SPI] = {
  65. .name = "mpc52xx-spi",
  66. .id = -1,
  67. .num_resources = 3,
  68. .resource = (struct resource[]) {
  69. {
  70. .start = 0x0f00,
  71. .end = 0x0f1f,
  72. .flags = IORESOURCE_MEM,
  73. },
  74. {
  75. .name = "modf",
  76. .start = MPC52xx_SPI_MODF_IRQ,
  77. .end = MPC52xx_SPI_MODF_IRQ,
  78. .flags = IORESOURCE_IRQ,
  79. },
  80. {
  81. .name = "spif",
  82. .start = MPC52xx_SPI_SPIF_IRQ,
  83. .end = MPC52xx_SPI_SPIF_IRQ,
  84. .flags = IORESOURCE_IRQ,
  85. },
  86. },
  87. },
  88. [MPC52xx_USB] = {
  89. .name = "ppc-soc-ohci",
  90. .id = -1,
  91. .num_resources = 2,
  92. .dev.dma_mask = &mpc52xx_dma_mask,
  93. .dev.coherent_dma_mask = 0xffffffffULL,
  94. .resource = (struct resource[]) {
  95. {
  96. .start = 0x1000,
  97. .end = 0x10ff,
  98. .flags = IORESOURCE_MEM,
  99. },
  100. {
  101. .start = MPC52xx_USB_IRQ,
  102. .end = MPC52xx_USB_IRQ,
  103. .flags = IORESOURCE_IRQ,
  104. },
  105. },
  106. },
  107. [MPC52xx_BDLC] = {
  108. .name = "mpc52xx-bdlc",
  109. .id = -1,
  110. .num_resources = 2,
  111. .resource = (struct resource[]) {
  112. {
  113. .start = 0x1300,
  114. .end = 0x130f,
  115. .flags = IORESOURCE_MEM,
  116. },
  117. {
  118. .start = MPC52xx_BDLC_IRQ,
  119. .end = MPC52xx_BDLC_IRQ,
  120. .flags = IORESOURCE_IRQ,
  121. },
  122. },
  123. },
  124. [MPC52xx_PSC1] = {
  125. .name = "mpc52xx-psc",
  126. .id = 0,
  127. .num_resources = 2,
  128. .resource = (struct resource[]) {
  129. {
  130. .start = 0x2000,
  131. .end = 0x209f,
  132. .flags = IORESOURCE_MEM,
  133. },
  134. {
  135. .start = MPC52xx_PSC1_IRQ,
  136. .end = MPC52xx_PSC1_IRQ,
  137. .flags = IORESOURCE_IRQ,
  138. },
  139. },
  140. },
  141. [MPC52xx_PSC2] = {
  142. .name = "mpc52xx-psc",
  143. .id = 1,
  144. .num_resources = 2,
  145. .resource = (struct resource[]) {
  146. {
  147. .start = 0x2200,
  148. .end = 0x229f,
  149. .flags = IORESOURCE_MEM,
  150. },
  151. {
  152. .start = MPC52xx_PSC2_IRQ,
  153. .end = MPC52xx_PSC2_IRQ,
  154. .flags = IORESOURCE_IRQ,
  155. },
  156. },
  157. },
  158. [MPC52xx_PSC3] = {
  159. .name = "mpc52xx-psc",
  160. .id = 2,
  161. .num_resources = 2,
  162. .resource = (struct resource[]) {
  163. {
  164. .start = 0x2400,
  165. .end = 0x249f,
  166. .flags = IORESOURCE_MEM,
  167. },
  168. {
  169. .start = MPC52xx_PSC3_IRQ,
  170. .end = MPC52xx_PSC3_IRQ,
  171. .flags = IORESOURCE_IRQ,
  172. },
  173. },
  174. },
  175. [MPC52xx_PSC4] = {
  176. .name = "mpc52xx-psc",
  177. .id = 3,
  178. .num_resources = 2,
  179. .resource = (struct resource[]) {
  180. {
  181. .start = 0x2600,
  182. .end = 0x269f,
  183. .flags = IORESOURCE_MEM,
  184. },
  185. {
  186. .start = MPC52xx_PSC4_IRQ,
  187. .end = MPC52xx_PSC4_IRQ,
  188. .flags = IORESOURCE_IRQ,
  189. },
  190. },
  191. },
  192. [MPC52xx_PSC5] = {
  193. .name = "mpc52xx-psc",
  194. .id = 4,
  195. .num_resources = 2,
  196. .resource = (struct resource[]) {
  197. {
  198. .start = 0x2800,
  199. .end = 0x289f,
  200. .flags = IORESOURCE_MEM,
  201. },
  202. {
  203. .start = MPC52xx_PSC5_IRQ,
  204. .end = MPC52xx_PSC5_IRQ,
  205. .flags = IORESOURCE_IRQ,
  206. },
  207. },
  208. },
  209. [MPC52xx_PSC6] = {
  210. .name = "mpc52xx-psc",
  211. .id = 5,
  212. .num_resources = 2,
  213. .resource = (struct resource[]) {
  214. {
  215. .start = 0x2c00,
  216. .end = 0x2c9f,
  217. .flags = IORESOURCE_MEM,
  218. },
  219. {
  220. .start = MPC52xx_PSC6_IRQ,
  221. .end = MPC52xx_PSC6_IRQ,
  222. .flags = IORESOURCE_IRQ,
  223. },
  224. },
  225. },
  226. [MPC52xx_FEC] = {
  227. .name = "mpc52xx-fec",
  228. .id = -1,
  229. .num_resources = 2,
  230. .resource = (struct resource[]) {
  231. {
  232. .start = 0x3000,
  233. .end = 0x33ff,
  234. .flags = IORESOURCE_MEM,
  235. },
  236. {
  237. .start = MPC52xx_FEC_IRQ,
  238. .end = MPC52xx_FEC_IRQ,
  239. .flags = IORESOURCE_IRQ,
  240. },
  241. },
  242. },
  243. [MPC52xx_ATA] = {
  244. .name = "mpc52xx-ata",
  245. .id = -1,
  246. .num_resources = 2,
  247. .resource = (struct resource[]) {
  248. {
  249. .start = 0x3a00,
  250. .end = 0x3aff,
  251. .flags = IORESOURCE_MEM,
  252. },
  253. {
  254. .start = MPC52xx_ATA_IRQ,
  255. .end = MPC52xx_ATA_IRQ,
  256. .flags = IORESOURCE_IRQ,
  257. },
  258. },
  259. },
  260. [MPC52xx_I2C1] = {
  261. .name = "fsl-i2c",
  262. .id = 0,
  263. .dev.platform_data = &mpc52xx_fsl_i2c_pdata,
  264. .num_resources = 2,
  265. .resource = (struct resource[]) {
  266. {
  267. .start = 0x3d00,
  268. .end = 0x3d1f,
  269. .flags = IORESOURCE_MEM,
  270. },
  271. {
  272. .start = MPC52xx_I2C1_IRQ,
  273. .end = MPC52xx_I2C1_IRQ,
  274. .flags = IORESOURCE_IRQ,
  275. },
  276. },
  277. },
  278. [MPC52xx_I2C2] = {
  279. .name = "fsl-i2c",
  280. .id = 1,
  281. .dev.platform_data = &mpc52xx_fsl_i2c_pdata,
  282. .num_resources = 2,
  283. .resource = (struct resource[]) {
  284. {
  285. .start = 0x3d40,
  286. .end = 0x3d5f,
  287. .flags = IORESOURCE_MEM,
  288. },
  289. {
  290. .start = MPC52xx_I2C2_IRQ,
  291. .end = MPC52xx_I2C2_IRQ,
  292. .flags = IORESOURCE_IRQ,
  293. },
  294. },
  295. },
  296. };
  297. static int __init mach_mpc52xx_fixup(struct platform_device *pdev)
  298. {
  299. ppc_sys_fixup_mem_resource(pdev, MPC52xx_MBAR);
  300. return 0;
  301. }
  302. static int __init mach_mpc52xx_init(void)
  303. {
  304. ppc_sys_device_fixup = mach_mpc52xx_fixup;
  305. return 0;
  306. }
  307. postcore_initcall(mach_mpc52xx_init);