mv64x60_win.c 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168
  1. /*
  2. * arch/ppc/syslib/mv64x60_win.c
  3. *
  4. * Tables with info on how to manipulate the 32 & 64 bit windows on the
  5. * various types of Marvell bridge chips.
  6. *
  7. * Author: Mark A. Greer <mgreer@mvista.com>
  8. *
  9. * 2004 (c) MontaVista, Software, Inc. This file is licensed under
  10. * the terms of the GNU General Public License version 2. This program
  11. * is licensed "as is" without any warranty of any kind, whether express
  12. * or implied.
  13. */
  14. #include <linux/kernel.h>
  15. #include <linux/init.h>
  16. #include <linux/pci.h>
  17. #include <linux/slab.h>
  18. #include <linux/module.h>
  19. #include <linux/string.h>
  20. #include <linux/bootmem.h>
  21. #include <linux/mv643xx.h>
  22. #include <asm/byteorder.h>
  23. #include <asm/io.h>
  24. #include <asm/irq.h>
  25. #include <asm/uaccess.h>
  26. #include <asm/machdep.h>
  27. #include <asm/pci-bridge.h>
  28. #include <asm/delay.h>
  29. #include <asm/mv64x60.h>
  30. /*
  31. *****************************************************************************
  32. *
  33. * Tables describing how to set up windows on each type of bridge
  34. *
  35. *****************************************************************************
  36. */
  37. struct mv64x60_32bit_window
  38. gt64260_32bit_windows[MV64x60_32BIT_WIN_COUNT] __initdata = {
  39. /* CPU->MEM Windows */
  40. [MV64x60_CPU2MEM_0_WIN] = {
  41. .base_reg = MV64x60_CPU2MEM_0_BASE,
  42. .size_reg = MV64x60_CPU2MEM_0_SIZE,
  43. .base_bits = 12,
  44. .size_bits = 12,
  45. .get_from_field = mv64x60_shift_left,
  46. .map_to_field = mv64x60_shift_right,
  47. .extra = 0 },
  48. [MV64x60_CPU2MEM_1_WIN] = {
  49. .base_reg = MV64x60_CPU2MEM_1_BASE,
  50. .size_reg = MV64x60_CPU2MEM_1_SIZE,
  51. .base_bits = 12,
  52. .size_bits = 12,
  53. .get_from_field = mv64x60_shift_left,
  54. .map_to_field = mv64x60_shift_right,
  55. .extra = 0 },
  56. [MV64x60_CPU2MEM_2_WIN] = {
  57. .base_reg = MV64x60_CPU2MEM_2_BASE,
  58. .size_reg = MV64x60_CPU2MEM_2_SIZE,
  59. .base_bits = 12,
  60. .size_bits = 12,
  61. .get_from_field = mv64x60_shift_left,
  62. .map_to_field = mv64x60_shift_right,
  63. .extra = 0 },
  64. [MV64x60_CPU2MEM_3_WIN] = {
  65. .base_reg = MV64x60_CPU2MEM_3_BASE,
  66. .size_reg = MV64x60_CPU2MEM_3_SIZE,
  67. .base_bits = 12,
  68. .size_bits = 12,
  69. .get_from_field = mv64x60_shift_left,
  70. .map_to_field = mv64x60_shift_right,
  71. .extra = 0 },
  72. /* CPU->Device Windows */
  73. [MV64x60_CPU2DEV_0_WIN] = {
  74. .base_reg = MV64x60_CPU2DEV_0_BASE,
  75. .size_reg = MV64x60_CPU2DEV_0_SIZE,
  76. .base_bits = 12,
  77. .size_bits = 12,
  78. .get_from_field = mv64x60_shift_left,
  79. .map_to_field = mv64x60_shift_right,
  80. .extra = 0 },
  81. [MV64x60_CPU2DEV_1_WIN] = {
  82. .base_reg = MV64x60_CPU2DEV_1_BASE,
  83. .size_reg = MV64x60_CPU2DEV_1_SIZE,
  84. .base_bits = 12,
  85. .size_bits = 12,
  86. .get_from_field = mv64x60_shift_left,
  87. .map_to_field = mv64x60_shift_right,
  88. .extra = 0 },
  89. [MV64x60_CPU2DEV_2_WIN] = {
  90. .base_reg = MV64x60_CPU2DEV_2_BASE,
  91. .size_reg = MV64x60_CPU2DEV_2_SIZE,
  92. .base_bits = 12,
  93. .size_bits = 12,
  94. .get_from_field = mv64x60_shift_left,
  95. .map_to_field = mv64x60_shift_right,
  96. .extra = 0 },
  97. [MV64x60_CPU2DEV_3_WIN] = {
  98. .base_reg = MV64x60_CPU2DEV_3_BASE,
  99. .size_reg = MV64x60_CPU2DEV_3_SIZE,
  100. .base_bits = 12,
  101. .size_bits = 12,
  102. .get_from_field = mv64x60_shift_left,
  103. .map_to_field = mv64x60_shift_right,
  104. .extra = 0 },
  105. /* CPU->Boot Window */
  106. [MV64x60_CPU2BOOT_WIN] = {
  107. .base_reg = MV64x60_CPU2BOOT_0_BASE,
  108. .size_reg = MV64x60_CPU2BOOT_0_SIZE,
  109. .base_bits = 12,
  110. .size_bits = 12,
  111. .get_from_field = mv64x60_shift_left,
  112. .map_to_field = mv64x60_shift_right,
  113. .extra = 0 },
  114. /* CPU->PCI 0 Windows */
  115. [MV64x60_CPU2PCI0_IO_WIN] = {
  116. .base_reg = MV64x60_CPU2PCI0_IO_BASE,
  117. .size_reg = MV64x60_CPU2PCI0_IO_SIZE,
  118. .base_bits = 12,
  119. .size_bits = 12,
  120. .get_from_field = mv64x60_shift_left,
  121. .map_to_field = mv64x60_shift_right,
  122. .extra = 0 },
  123. [MV64x60_CPU2PCI0_MEM_0_WIN] = {
  124. .base_reg = MV64x60_CPU2PCI0_MEM_0_BASE,
  125. .size_reg = MV64x60_CPU2PCI0_MEM_0_SIZE,
  126. .base_bits = 12,
  127. .size_bits = 12,
  128. .get_from_field = mv64x60_shift_left,
  129. .map_to_field = mv64x60_shift_right,
  130. .extra = 0 },
  131. [MV64x60_CPU2PCI0_MEM_1_WIN] = {
  132. .base_reg = MV64x60_CPU2PCI0_MEM_1_BASE,
  133. .size_reg = MV64x60_CPU2PCI0_MEM_1_SIZE,
  134. .base_bits = 12,
  135. .size_bits = 12,
  136. .get_from_field = mv64x60_shift_left,
  137. .map_to_field = mv64x60_shift_right,
  138. .extra = 0 },
  139. [MV64x60_CPU2PCI0_MEM_2_WIN] = {
  140. .base_reg = MV64x60_CPU2PCI0_MEM_2_BASE,
  141. .size_reg = MV64x60_CPU2PCI0_MEM_2_SIZE,
  142. .base_bits = 12,
  143. .size_bits = 12,
  144. .get_from_field = mv64x60_shift_left,
  145. .map_to_field = mv64x60_shift_right,
  146. .extra = 0 },
  147. [MV64x60_CPU2PCI0_MEM_3_WIN] = {
  148. .base_reg = MV64x60_CPU2PCI0_MEM_3_BASE,
  149. .size_reg = MV64x60_CPU2PCI0_MEM_3_SIZE,
  150. .base_bits = 12,
  151. .size_bits = 12,
  152. .get_from_field = mv64x60_shift_left,
  153. .map_to_field = mv64x60_shift_right,
  154. .extra = 0 },
  155. /* CPU->PCI 1 Windows */
  156. [MV64x60_CPU2PCI1_IO_WIN] = {
  157. .base_reg = MV64x60_CPU2PCI1_IO_BASE,
  158. .size_reg = MV64x60_CPU2PCI1_IO_SIZE,
  159. .base_bits = 12,
  160. .size_bits = 12,
  161. .get_from_field = mv64x60_shift_left,
  162. .map_to_field = mv64x60_shift_right,
  163. .extra = 0 },
  164. [MV64x60_CPU2PCI1_MEM_0_WIN] = {
  165. .base_reg = MV64x60_CPU2PCI1_MEM_0_BASE,
  166. .size_reg = MV64x60_CPU2PCI1_MEM_0_SIZE,
  167. .base_bits = 12,
  168. .size_bits = 12,
  169. .get_from_field = mv64x60_shift_left,
  170. .map_to_field = mv64x60_shift_right,
  171. .extra = 0 },
  172. [MV64x60_CPU2PCI1_MEM_1_WIN] = {
  173. .base_reg = MV64x60_CPU2PCI1_MEM_1_BASE,
  174. .size_reg = MV64x60_CPU2PCI1_MEM_1_SIZE,
  175. .base_bits = 12,
  176. .size_bits = 12,
  177. .get_from_field = mv64x60_shift_left,
  178. .map_to_field = mv64x60_shift_right,
  179. .extra = 0 },
  180. [MV64x60_CPU2PCI1_MEM_2_WIN] = {
  181. .base_reg = MV64x60_CPU2PCI1_MEM_2_BASE,
  182. .size_reg = MV64x60_CPU2PCI1_MEM_2_SIZE,
  183. .base_bits = 12,
  184. .size_bits = 12,
  185. .get_from_field = mv64x60_shift_left,
  186. .map_to_field = mv64x60_shift_right,
  187. .extra = 0 },
  188. [MV64x60_CPU2PCI1_MEM_3_WIN] = {
  189. .base_reg = MV64x60_CPU2PCI1_MEM_3_BASE,
  190. .size_reg = MV64x60_CPU2PCI1_MEM_3_SIZE,
  191. .base_bits = 12,
  192. .size_bits = 12,
  193. .get_from_field = mv64x60_shift_left,
  194. .map_to_field = mv64x60_shift_right,
  195. .extra = 0 },
  196. /* CPU->SRAM Window (64260 has no integrated SRAM) */
  197. /* CPU->PCI 0 Remap I/O Window */
  198. [MV64x60_CPU2PCI0_IO_REMAP_WIN] = {
  199. .base_reg = MV64x60_CPU2PCI0_IO_REMAP,
  200. .size_reg = 0,
  201. .base_bits = 12,
  202. .size_bits = 0,
  203. .get_from_field = mv64x60_shift_left,
  204. .map_to_field = mv64x60_shift_right,
  205. .extra = 0 },
  206. /* CPU->PCI 1 Remap I/O Window */
  207. [MV64x60_CPU2PCI1_IO_REMAP_WIN] = {
  208. .base_reg = MV64x60_CPU2PCI1_IO_REMAP,
  209. .size_reg = 0,
  210. .base_bits = 12,
  211. .size_bits = 0,
  212. .get_from_field = mv64x60_shift_left,
  213. .map_to_field = mv64x60_shift_right,
  214. .extra = 0 },
  215. /* CPU Memory Protection Windows */
  216. [MV64x60_CPU_PROT_0_WIN] = {
  217. .base_reg = MV64x60_CPU_PROT_BASE_0,
  218. .size_reg = MV64x60_CPU_PROT_SIZE_0,
  219. .base_bits = 12,
  220. .size_bits = 12,
  221. .get_from_field = mv64x60_shift_left,
  222. .map_to_field = mv64x60_shift_right,
  223. .extra = 0 },
  224. [MV64x60_CPU_PROT_1_WIN] = {
  225. .base_reg = MV64x60_CPU_PROT_BASE_1,
  226. .size_reg = MV64x60_CPU_PROT_SIZE_1,
  227. .base_bits = 12,
  228. .size_bits = 12,
  229. .get_from_field = mv64x60_shift_left,
  230. .map_to_field = mv64x60_shift_right,
  231. .extra = 0 },
  232. [MV64x60_CPU_PROT_2_WIN] = {
  233. .base_reg = MV64x60_CPU_PROT_BASE_2,
  234. .size_reg = MV64x60_CPU_PROT_SIZE_2,
  235. .base_bits = 12,
  236. .size_bits = 12,
  237. .get_from_field = mv64x60_shift_left,
  238. .map_to_field = mv64x60_shift_right,
  239. .extra = 0 },
  240. [MV64x60_CPU_PROT_3_WIN] = {
  241. .base_reg = MV64x60_CPU_PROT_BASE_3,
  242. .size_reg = MV64x60_CPU_PROT_SIZE_3,
  243. .base_bits = 12,
  244. .size_bits = 12,
  245. .get_from_field = mv64x60_shift_left,
  246. .map_to_field = mv64x60_shift_right,
  247. .extra = 0 },
  248. /* CPU Snoop Windows */
  249. [MV64x60_CPU_SNOOP_0_WIN] = {
  250. .base_reg = GT64260_CPU_SNOOP_BASE_0,
  251. .size_reg = GT64260_CPU_SNOOP_SIZE_0,
  252. .base_bits = 12,
  253. .size_bits = 12,
  254. .get_from_field = mv64x60_shift_left,
  255. .map_to_field = mv64x60_shift_right,
  256. .extra = 0 },
  257. [MV64x60_CPU_SNOOP_1_WIN] = {
  258. .base_reg = GT64260_CPU_SNOOP_BASE_1,
  259. .size_reg = GT64260_CPU_SNOOP_SIZE_1,
  260. .base_bits = 12,
  261. .size_bits = 12,
  262. .get_from_field = mv64x60_shift_left,
  263. .map_to_field = mv64x60_shift_right,
  264. .extra = 0 },
  265. [MV64x60_CPU_SNOOP_2_WIN] = {
  266. .base_reg = GT64260_CPU_SNOOP_BASE_2,
  267. .size_reg = GT64260_CPU_SNOOP_SIZE_2,
  268. .base_bits = 12,
  269. .size_bits = 12,
  270. .get_from_field = mv64x60_shift_left,
  271. .map_to_field = mv64x60_shift_right,
  272. .extra = 0 },
  273. [MV64x60_CPU_SNOOP_3_WIN] = {
  274. .base_reg = GT64260_CPU_SNOOP_BASE_3,
  275. .size_reg = GT64260_CPU_SNOOP_SIZE_3,
  276. .base_bits = 12,
  277. .size_bits = 12,
  278. .get_from_field = mv64x60_shift_left,
  279. .map_to_field = mv64x60_shift_right,
  280. .extra = 0 },
  281. /* PCI 0->System Memory Remap Windows */
  282. [MV64x60_PCI02MEM_REMAP_0_WIN] = {
  283. .base_reg = MV64x60_PCI0_SLAVE_MEM_0_REMAP,
  284. .size_reg = 0,
  285. .base_bits = 20,
  286. .size_bits = 0,
  287. .get_from_field = mv64x60_mask,
  288. .map_to_field = mv64x60_mask,
  289. .extra = 0 },
  290. [MV64x60_PCI02MEM_REMAP_1_WIN] = {
  291. .base_reg = MV64x60_PCI0_SLAVE_MEM_1_REMAP,
  292. .size_reg = 0,
  293. .base_bits = 20,
  294. .size_bits = 0,
  295. .get_from_field = mv64x60_mask,
  296. .map_to_field = mv64x60_mask,
  297. .extra = 0 },
  298. [MV64x60_PCI02MEM_REMAP_2_WIN] = {
  299. .base_reg = MV64x60_PCI0_SLAVE_MEM_1_REMAP,
  300. .size_reg = 0,
  301. .base_bits = 20,
  302. .size_bits = 0,
  303. .get_from_field = mv64x60_mask,
  304. .map_to_field = mv64x60_mask,
  305. .extra = 0 },
  306. [MV64x60_PCI02MEM_REMAP_3_WIN] = {
  307. .base_reg = MV64x60_PCI0_SLAVE_MEM_1_REMAP,
  308. .size_reg = 0,
  309. .base_bits = 20,
  310. .size_bits = 0,
  311. .get_from_field = mv64x60_mask,
  312. .map_to_field = mv64x60_mask,
  313. .extra = 0 },
  314. /* PCI 1->System Memory Remap Windows */
  315. [MV64x60_PCI12MEM_REMAP_0_WIN] = {
  316. .base_reg = MV64x60_PCI1_SLAVE_MEM_0_REMAP,
  317. .size_reg = 0,
  318. .base_bits = 20,
  319. .size_bits = 0,
  320. .get_from_field = mv64x60_mask,
  321. .map_to_field = mv64x60_mask,
  322. .extra = 0 },
  323. [MV64x60_PCI12MEM_REMAP_1_WIN] = {
  324. .base_reg = MV64x60_PCI1_SLAVE_MEM_1_REMAP,
  325. .size_reg = 0,
  326. .base_bits = 20,
  327. .size_bits = 0,
  328. .get_from_field = mv64x60_mask,
  329. .map_to_field = mv64x60_mask,
  330. .extra = 0 },
  331. [MV64x60_PCI12MEM_REMAP_2_WIN] = {
  332. .base_reg = MV64x60_PCI1_SLAVE_MEM_1_REMAP,
  333. .size_reg = 0,
  334. .base_bits = 20,
  335. .size_bits = 0,
  336. .get_from_field = mv64x60_mask,
  337. .map_to_field = mv64x60_mask,
  338. .extra = 0 },
  339. [MV64x60_PCI12MEM_REMAP_3_WIN] = {
  340. .base_reg = MV64x60_PCI1_SLAVE_MEM_1_REMAP,
  341. .size_reg = 0,
  342. .base_bits = 20,
  343. .size_bits = 0,
  344. .get_from_field = mv64x60_mask,
  345. .map_to_field = mv64x60_mask,
  346. .extra = 0 },
  347. /* ENET->SRAM Window (64260 doesn't have separate windows) */
  348. /* MPSC->SRAM Window (64260 doesn't have separate windows) */
  349. /* IDMA->SRAM Window (64260 doesn't have separate windows) */
  350. };
  351. struct mv64x60_64bit_window
  352. gt64260_64bit_windows[MV64x60_64BIT_WIN_COUNT] __initdata = {
  353. /* CPU->PCI 0 MEM Remap Windows */
  354. [MV64x60_CPU2PCI0_MEM_0_REMAP_WIN] = {
  355. .base_hi_reg = MV64x60_CPU2PCI0_MEM_0_REMAP_HI,
  356. .base_lo_reg = MV64x60_CPU2PCI0_MEM_0_REMAP_LO,
  357. .size_reg = 0,
  358. .base_lo_bits = 12,
  359. .size_bits = 0,
  360. .get_from_field = mv64x60_shift_left,
  361. .map_to_field = mv64x60_shift_right,
  362. .extra = 0 },
  363. [MV64x60_CPU2PCI0_MEM_1_REMAP_WIN] = {
  364. .base_hi_reg = MV64x60_CPU2PCI0_MEM_1_REMAP_HI,
  365. .base_lo_reg = MV64x60_CPU2PCI0_MEM_1_REMAP_LO,
  366. .size_reg = 0,
  367. .base_lo_bits = 12,
  368. .size_bits = 0,
  369. .get_from_field = mv64x60_shift_left,
  370. .map_to_field = mv64x60_shift_right,
  371. .extra = 0 },
  372. [MV64x60_CPU2PCI0_MEM_2_REMAP_WIN] = {
  373. .base_hi_reg = MV64x60_CPU2PCI0_MEM_2_REMAP_HI,
  374. .base_lo_reg = MV64x60_CPU2PCI0_MEM_2_REMAP_LO,
  375. .size_reg = 0,
  376. .base_lo_bits = 12,
  377. .size_bits = 0,
  378. .get_from_field = mv64x60_shift_left,
  379. .map_to_field = mv64x60_shift_right,
  380. .extra = 0 },
  381. [MV64x60_CPU2PCI0_MEM_3_REMAP_WIN] = {
  382. .base_hi_reg = MV64x60_CPU2PCI0_MEM_3_REMAP_HI,
  383. .base_lo_reg = MV64x60_CPU2PCI0_MEM_3_REMAP_LO,
  384. .size_reg = 0,
  385. .base_lo_bits = 12,
  386. .size_bits = 0,
  387. .get_from_field = mv64x60_shift_left,
  388. .map_to_field = mv64x60_shift_right,
  389. .extra = 0 },
  390. /* CPU->PCI 1 MEM Remap Windows */
  391. [MV64x60_CPU2PCI1_MEM_0_REMAP_WIN] = {
  392. .base_hi_reg = MV64x60_CPU2PCI1_MEM_0_REMAP_HI,
  393. .base_lo_reg = MV64x60_CPU2PCI1_MEM_0_REMAP_LO,
  394. .size_reg = 0,
  395. .base_lo_bits = 12,
  396. .size_bits = 0,
  397. .get_from_field = mv64x60_shift_left,
  398. .map_to_field = mv64x60_shift_right,
  399. .extra = 0 },
  400. [MV64x60_CPU2PCI1_MEM_1_REMAP_WIN] = {
  401. .base_hi_reg = MV64x60_CPU2PCI1_MEM_1_REMAP_HI,
  402. .base_lo_reg = MV64x60_CPU2PCI1_MEM_1_REMAP_LO,
  403. .size_reg = 0,
  404. .base_lo_bits = 12,
  405. .size_bits = 0,
  406. .get_from_field = mv64x60_shift_left,
  407. .map_to_field = mv64x60_shift_right,
  408. .extra = 0 },
  409. [MV64x60_CPU2PCI1_MEM_2_REMAP_WIN] = {
  410. .base_hi_reg = MV64x60_CPU2PCI1_MEM_2_REMAP_HI,
  411. .base_lo_reg = MV64x60_CPU2PCI1_MEM_2_REMAP_LO,
  412. .size_reg = 0,
  413. .base_lo_bits = 12,
  414. .size_bits = 0,
  415. .get_from_field = mv64x60_shift_left,
  416. .map_to_field = mv64x60_shift_right,
  417. .extra = 0 },
  418. [MV64x60_CPU2PCI1_MEM_3_REMAP_WIN] = {
  419. .base_hi_reg = MV64x60_CPU2PCI1_MEM_3_REMAP_HI,
  420. .base_lo_reg = MV64x60_CPU2PCI1_MEM_3_REMAP_LO,
  421. .size_reg = 0,
  422. .base_lo_bits = 12,
  423. .size_bits = 0,
  424. .get_from_field = mv64x60_shift_left,
  425. .map_to_field = mv64x60_shift_right,
  426. .extra = 0 },
  427. /* PCI 0->MEM Access Control Windows */
  428. [MV64x60_PCI02MEM_ACC_CNTL_0_WIN] = {
  429. .base_hi_reg = MV64x60_PCI0_ACC_CNTL_0_BASE_HI,
  430. .base_lo_reg = MV64x60_PCI0_ACC_CNTL_0_BASE_LO,
  431. .size_reg = MV64x60_PCI0_ACC_CNTL_0_SIZE,
  432. .base_lo_bits = 12,
  433. .size_bits = 12,
  434. .get_from_field = mv64x60_shift_left,
  435. .map_to_field = mv64x60_shift_right,
  436. .extra = 0 },
  437. [MV64x60_PCI02MEM_ACC_CNTL_1_WIN] = {
  438. .base_hi_reg = MV64x60_PCI0_ACC_CNTL_1_BASE_HI,
  439. .base_lo_reg = MV64x60_PCI0_ACC_CNTL_1_BASE_LO,
  440. .size_reg = MV64x60_PCI0_ACC_CNTL_1_SIZE,
  441. .base_lo_bits = 12,
  442. .size_bits = 12,
  443. .get_from_field = mv64x60_shift_left,
  444. .map_to_field = mv64x60_shift_right,
  445. .extra = 0 },
  446. [MV64x60_PCI02MEM_ACC_CNTL_2_WIN] = {
  447. .base_hi_reg = MV64x60_PCI0_ACC_CNTL_2_BASE_HI,
  448. .base_lo_reg = MV64x60_PCI0_ACC_CNTL_2_BASE_LO,
  449. .size_reg = MV64x60_PCI0_ACC_CNTL_2_SIZE,
  450. .base_lo_bits = 12,
  451. .size_bits = 12,
  452. .get_from_field = mv64x60_shift_left,
  453. .map_to_field = mv64x60_shift_right,
  454. .extra = 0 },
  455. [MV64x60_PCI02MEM_ACC_CNTL_3_WIN] = {
  456. .base_hi_reg = MV64x60_PCI0_ACC_CNTL_3_BASE_HI,
  457. .base_lo_reg = MV64x60_PCI0_ACC_CNTL_3_BASE_LO,
  458. .size_reg = MV64x60_PCI0_ACC_CNTL_3_SIZE,
  459. .base_lo_bits = 12,
  460. .size_bits = 12,
  461. .get_from_field = mv64x60_shift_left,
  462. .map_to_field = mv64x60_shift_right,
  463. .extra = 0 },
  464. /* PCI 1->MEM Access Control Windows */
  465. [MV64x60_PCI12MEM_ACC_CNTL_0_WIN] = {
  466. .base_hi_reg = MV64x60_PCI1_ACC_CNTL_0_BASE_HI,
  467. .base_lo_reg = MV64x60_PCI1_ACC_CNTL_0_BASE_LO,
  468. .size_reg = MV64x60_PCI1_ACC_CNTL_0_SIZE,
  469. .base_lo_bits = 12,
  470. .size_bits = 12,
  471. .get_from_field = mv64x60_shift_left,
  472. .map_to_field = mv64x60_shift_right,
  473. .extra = 0 },
  474. [MV64x60_PCI12MEM_ACC_CNTL_1_WIN] = {
  475. .base_hi_reg = MV64x60_PCI1_ACC_CNTL_1_BASE_HI,
  476. .base_lo_reg = MV64x60_PCI1_ACC_CNTL_1_BASE_LO,
  477. .size_reg = MV64x60_PCI1_ACC_CNTL_1_SIZE,
  478. .base_lo_bits = 12,
  479. .size_bits = 12,
  480. .get_from_field = mv64x60_shift_left,
  481. .map_to_field = mv64x60_shift_right,
  482. .extra = 0 },
  483. [MV64x60_PCI12MEM_ACC_CNTL_2_WIN] = {
  484. .base_hi_reg = MV64x60_PCI1_ACC_CNTL_2_BASE_HI,
  485. .base_lo_reg = MV64x60_PCI1_ACC_CNTL_2_BASE_LO,
  486. .size_reg = MV64x60_PCI1_ACC_CNTL_2_SIZE,
  487. .base_lo_bits = 12,
  488. .size_bits = 12,
  489. .get_from_field = mv64x60_shift_left,
  490. .map_to_field = mv64x60_shift_right,
  491. .extra = 0 },
  492. [MV64x60_PCI12MEM_ACC_CNTL_3_WIN] = {
  493. .base_hi_reg = MV64x60_PCI1_ACC_CNTL_3_BASE_HI,
  494. .base_lo_reg = MV64x60_PCI1_ACC_CNTL_3_BASE_LO,
  495. .size_reg = MV64x60_PCI1_ACC_CNTL_3_SIZE,
  496. .base_lo_bits = 12,
  497. .size_bits = 12,
  498. .get_from_field = mv64x60_shift_left,
  499. .map_to_field = mv64x60_shift_right,
  500. .extra = 0 },
  501. /* PCI 0->MEM Snoop Windows */
  502. [MV64x60_PCI02MEM_SNOOP_0_WIN] = {
  503. .base_hi_reg = GT64260_PCI0_SNOOP_0_BASE_HI,
  504. .base_lo_reg = GT64260_PCI0_SNOOP_0_BASE_LO,
  505. .size_reg = GT64260_PCI0_SNOOP_0_SIZE,
  506. .base_lo_bits = 12,
  507. .size_bits = 12,
  508. .get_from_field = mv64x60_shift_left,
  509. .map_to_field = mv64x60_shift_right,
  510. .extra = 0 },
  511. [MV64x60_PCI02MEM_SNOOP_1_WIN] = {
  512. .base_hi_reg = GT64260_PCI0_SNOOP_1_BASE_HI,
  513. .base_lo_reg = GT64260_PCI0_SNOOP_1_BASE_LO,
  514. .size_reg = GT64260_PCI0_SNOOP_1_SIZE,
  515. .base_lo_bits = 12,
  516. .size_bits = 12,
  517. .get_from_field = mv64x60_shift_left,
  518. .map_to_field = mv64x60_shift_right,
  519. .extra = 0 },
  520. [MV64x60_PCI02MEM_SNOOP_2_WIN] = {
  521. .base_hi_reg = GT64260_PCI0_SNOOP_2_BASE_HI,
  522. .base_lo_reg = GT64260_PCI0_SNOOP_2_BASE_LO,
  523. .size_reg = GT64260_PCI0_SNOOP_2_SIZE,
  524. .base_lo_bits = 12,
  525. .size_bits = 12,
  526. .get_from_field = mv64x60_shift_left,
  527. .map_to_field = mv64x60_shift_right,
  528. .extra = 0 },
  529. [MV64x60_PCI02MEM_SNOOP_3_WIN] = {
  530. .base_hi_reg = GT64260_PCI0_SNOOP_3_BASE_HI,
  531. .base_lo_reg = GT64260_PCI0_SNOOP_3_BASE_LO,
  532. .size_reg = GT64260_PCI0_SNOOP_3_SIZE,
  533. .base_lo_bits = 12,
  534. .size_bits = 12,
  535. .get_from_field = mv64x60_shift_left,
  536. .map_to_field = mv64x60_shift_right,
  537. .extra = 0 },
  538. /* PCI 1->MEM Snoop Windows */
  539. [MV64x60_PCI12MEM_SNOOP_0_WIN] = {
  540. .base_hi_reg = GT64260_PCI1_SNOOP_0_BASE_HI,
  541. .base_lo_reg = GT64260_PCI1_SNOOP_0_BASE_LO,
  542. .size_reg = GT64260_PCI1_SNOOP_0_SIZE,
  543. .base_lo_bits = 12,
  544. .size_bits = 12,
  545. .get_from_field = mv64x60_shift_left,
  546. .map_to_field = mv64x60_shift_right,
  547. .extra = 0 },
  548. [MV64x60_PCI12MEM_SNOOP_1_WIN] = {
  549. .base_hi_reg = GT64260_PCI1_SNOOP_1_BASE_HI,
  550. .base_lo_reg = GT64260_PCI1_SNOOP_1_BASE_LO,
  551. .size_reg = GT64260_PCI1_SNOOP_1_SIZE,
  552. .base_lo_bits = 12,
  553. .size_bits = 12,
  554. .get_from_field = mv64x60_shift_left,
  555. .map_to_field = mv64x60_shift_right,
  556. .extra = 0 },
  557. [MV64x60_PCI12MEM_SNOOP_2_WIN] = {
  558. .base_hi_reg = GT64260_PCI1_SNOOP_2_BASE_HI,
  559. .base_lo_reg = GT64260_PCI1_SNOOP_2_BASE_LO,
  560. .size_reg = GT64260_PCI1_SNOOP_2_SIZE,
  561. .base_lo_bits = 12,
  562. .size_bits = 12,
  563. .get_from_field = mv64x60_shift_left,
  564. .map_to_field = mv64x60_shift_right,
  565. .extra = 0 },
  566. [MV64x60_PCI12MEM_SNOOP_3_WIN] = {
  567. .base_hi_reg = GT64260_PCI1_SNOOP_3_BASE_HI,
  568. .base_lo_reg = GT64260_PCI1_SNOOP_3_BASE_LO,
  569. .size_reg = GT64260_PCI1_SNOOP_3_SIZE,
  570. .base_lo_bits = 12,
  571. .size_bits = 12,
  572. .get_from_field = mv64x60_shift_left,
  573. .map_to_field = mv64x60_shift_right,
  574. .extra = 0 },
  575. };
  576. struct mv64x60_32bit_window
  577. mv64360_32bit_windows[MV64x60_32BIT_WIN_COUNT] __initdata = {
  578. /* CPU->MEM Windows */
  579. [MV64x60_CPU2MEM_0_WIN] = {
  580. .base_reg = MV64x60_CPU2MEM_0_BASE,
  581. .size_reg = MV64x60_CPU2MEM_0_SIZE,
  582. .base_bits = 16,
  583. .size_bits = 16,
  584. .get_from_field = mv64x60_shift_left,
  585. .map_to_field = mv64x60_shift_right,
  586. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 0 },
  587. [MV64x60_CPU2MEM_1_WIN] = {
  588. .base_reg = MV64x60_CPU2MEM_1_BASE,
  589. .size_reg = MV64x60_CPU2MEM_1_SIZE,
  590. .base_bits = 16,
  591. .size_bits = 16,
  592. .get_from_field = mv64x60_shift_left,
  593. .map_to_field = mv64x60_shift_right,
  594. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 1 },
  595. [MV64x60_CPU2MEM_2_WIN] = {
  596. .base_reg = MV64x60_CPU2MEM_2_BASE,
  597. .size_reg = MV64x60_CPU2MEM_2_SIZE,
  598. .base_bits = 16,
  599. .size_bits = 16,
  600. .get_from_field = mv64x60_shift_left,
  601. .map_to_field = mv64x60_shift_right,
  602. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 2 },
  603. [MV64x60_CPU2MEM_3_WIN] = {
  604. .base_reg = MV64x60_CPU2MEM_3_BASE,
  605. .size_reg = MV64x60_CPU2MEM_3_SIZE,
  606. .base_bits = 16,
  607. .size_bits = 16,
  608. .get_from_field = mv64x60_shift_left,
  609. .map_to_field = mv64x60_shift_right,
  610. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 3 },
  611. /* CPU->Device Windows */
  612. [MV64x60_CPU2DEV_0_WIN] = {
  613. .base_reg = MV64x60_CPU2DEV_0_BASE,
  614. .size_reg = MV64x60_CPU2DEV_0_SIZE,
  615. .base_bits = 16,
  616. .size_bits = 16,
  617. .get_from_field = mv64x60_shift_left,
  618. .map_to_field = mv64x60_shift_right,
  619. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 4 },
  620. [MV64x60_CPU2DEV_1_WIN] = {
  621. .base_reg = MV64x60_CPU2DEV_1_BASE,
  622. .size_reg = MV64x60_CPU2DEV_1_SIZE,
  623. .base_bits = 16,
  624. .size_bits = 16,
  625. .get_from_field = mv64x60_shift_left,
  626. .map_to_field = mv64x60_shift_right,
  627. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 5 },
  628. [MV64x60_CPU2DEV_2_WIN] = {
  629. .base_reg = MV64x60_CPU2DEV_2_BASE,
  630. .size_reg = MV64x60_CPU2DEV_2_SIZE,
  631. .base_bits = 16,
  632. .size_bits = 16,
  633. .get_from_field = mv64x60_shift_left,
  634. .map_to_field = mv64x60_shift_right,
  635. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 6 },
  636. [MV64x60_CPU2DEV_3_WIN] = {
  637. .base_reg = MV64x60_CPU2DEV_3_BASE,
  638. .size_reg = MV64x60_CPU2DEV_3_SIZE,
  639. .base_bits = 16,
  640. .size_bits = 16,
  641. .get_from_field = mv64x60_shift_left,
  642. .map_to_field = mv64x60_shift_right,
  643. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 7 },
  644. /* CPU->Boot Window */
  645. [MV64x60_CPU2BOOT_WIN] = {
  646. .base_reg = MV64x60_CPU2BOOT_0_BASE,
  647. .size_reg = MV64x60_CPU2BOOT_0_SIZE,
  648. .base_bits = 16,
  649. .size_bits = 16,
  650. .get_from_field = mv64x60_shift_left,
  651. .map_to_field = mv64x60_shift_right,
  652. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 8 },
  653. /* CPU->PCI 0 Windows */
  654. [MV64x60_CPU2PCI0_IO_WIN] = {
  655. .base_reg = MV64x60_CPU2PCI0_IO_BASE,
  656. .size_reg = MV64x60_CPU2PCI0_IO_SIZE,
  657. .base_bits = 16,
  658. .size_bits = 16,
  659. .get_from_field = mv64x60_shift_left,
  660. .map_to_field = mv64x60_shift_right,
  661. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 9 },
  662. [MV64x60_CPU2PCI0_MEM_0_WIN] = {
  663. .base_reg = MV64x60_CPU2PCI0_MEM_0_BASE,
  664. .size_reg = MV64x60_CPU2PCI0_MEM_0_SIZE,
  665. .base_bits = 16,
  666. .size_bits = 16,
  667. .get_from_field = mv64x60_shift_left,
  668. .map_to_field = mv64x60_shift_right,
  669. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 10 },
  670. [MV64x60_CPU2PCI0_MEM_1_WIN] = {
  671. .base_reg = MV64x60_CPU2PCI0_MEM_1_BASE,
  672. .size_reg = MV64x60_CPU2PCI0_MEM_1_SIZE,
  673. .base_bits = 16,
  674. .size_bits = 16,
  675. .get_from_field = mv64x60_shift_left,
  676. .map_to_field = mv64x60_shift_right,
  677. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 11 },
  678. [MV64x60_CPU2PCI0_MEM_2_WIN] = {
  679. .base_reg = MV64x60_CPU2PCI0_MEM_2_BASE,
  680. .size_reg = MV64x60_CPU2PCI0_MEM_2_SIZE,
  681. .base_bits = 16,
  682. .size_bits = 16,
  683. .get_from_field = mv64x60_shift_left,
  684. .map_to_field = mv64x60_shift_right,
  685. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 12 },
  686. [MV64x60_CPU2PCI0_MEM_3_WIN] = {
  687. .base_reg = MV64x60_CPU2PCI0_MEM_3_BASE,
  688. .size_reg = MV64x60_CPU2PCI0_MEM_3_SIZE,
  689. .base_bits = 16,
  690. .size_bits = 16,
  691. .get_from_field = mv64x60_shift_left,
  692. .map_to_field = mv64x60_shift_right,
  693. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 13 },
  694. /* CPU->PCI 1 Windows */
  695. [MV64x60_CPU2PCI1_IO_WIN] = {
  696. .base_reg = MV64x60_CPU2PCI1_IO_BASE,
  697. .size_reg = MV64x60_CPU2PCI1_IO_SIZE,
  698. .base_bits = 16,
  699. .size_bits = 16,
  700. .get_from_field = mv64x60_shift_left,
  701. .map_to_field = mv64x60_shift_right,
  702. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 14 },
  703. [MV64x60_CPU2PCI1_MEM_0_WIN] = {
  704. .base_reg = MV64x60_CPU2PCI1_MEM_0_BASE,
  705. .size_reg = MV64x60_CPU2PCI1_MEM_0_SIZE,
  706. .base_bits = 16,
  707. .size_bits = 16,
  708. .get_from_field = mv64x60_shift_left,
  709. .map_to_field = mv64x60_shift_right,
  710. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 15 },
  711. [MV64x60_CPU2PCI1_MEM_1_WIN] = {
  712. .base_reg = MV64x60_CPU2PCI1_MEM_1_BASE,
  713. .size_reg = MV64x60_CPU2PCI1_MEM_1_SIZE,
  714. .base_bits = 16,
  715. .size_bits = 16,
  716. .get_from_field = mv64x60_shift_left,
  717. .map_to_field = mv64x60_shift_right,
  718. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 16 },
  719. [MV64x60_CPU2PCI1_MEM_2_WIN] = {
  720. .base_reg = MV64x60_CPU2PCI1_MEM_2_BASE,
  721. .size_reg = MV64x60_CPU2PCI1_MEM_2_SIZE,
  722. .base_bits = 16,
  723. .size_bits = 16,
  724. .get_from_field = mv64x60_shift_left,
  725. .map_to_field = mv64x60_shift_right,
  726. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 17 },
  727. [MV64x60_CPU2PCI1_MEM_3_WIN] = {
  728. .base_reg = MV64x60_CPU2PCI1_MEM_3_BASE,
  729. .size_reg = MV64x60_CPU2PCI1_MEM_3_SIZE,
  730. .base_bits = 16,
  731. .size_bits = 16,
  732. .get_from_field = mv64x60_shift_left,
  733. .map_to_field = mv64x60_shift_right,
  734. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 18 },
  735. /* CPU->SRAM Window */
  736. [MV64x60_CPU2SRAM_WIN] = {
  737. .base_reg = MV64360_CPU2SRAM_BASE,
  738. .size_reg = 0,
  739. .base_bits = 16,
  740. .size_bits = 0,
  741. .get_from_field = mv64x60_shift_left,
  742. .map_to_field = mv64x60_shift_right,
  743. .extra = MV64x60_EXTRA_CPUWIN_ENAB | 19 },
  744. /* CPU->PCI 0 Remap I/O Window */
  745. [MV64x60_CPU2PCI0_IO_REMAP_WIN] = {
  746. .base_reg = MV64x60_CPU2PCI0_IO_REMAP,
  747. .size_reg = 0,
  748. .base_bits = 16,
  749. .size_bits = 0,
  750. .get_from_field = mv64x60_shift_left,
  751. .map_to_field = mv64x60_shift_right,
  752. .extra = 0 },
  753. /* CPU->PCI 1 Remap I/O Window */
  754. [MV64x60_CPU2PCI1_IO_REMAP_WIN] = {
  755. .base_reg = MV64x60_CPU2PCI1_IO_REMAP,
  756. .size_reg = 0,
  757. .base_bits = 16,
  758. .size_bits = 0,
  759. .get_from_field = mv64x60_shift_left,
  760. .map_to_field = mv64x60_shift_right,
  761. .extra = 0 },
  762. /* CPU Memory Protection Windows */
  763. [MV64x60_CPU_PROT_0_WIN] = {
  764. .base_reg = MV64x60_CPU_PROT_BASE_0,
  765. .size_reg = MV64x60_CPU_PROT_SIZE_0,
  766. .base_bits = 16,
  767. .size_bits = 16,
  768. .get_from_field = mv64x60_shift_left,
  769. .map_to_field = mv64x60_shift_right,
  770. .extra = MV64x60_EXTRA_CPUPROT_ENAB | 31 },
  771. [MV64x60_CPU_PROT_1_WIN] = {
  772. .base_reg = MV64x60_CPU_PROT_BASE_1,
  773. .size_reg = MV64x60_CPU_PROT_SIZE_1,
  774. .base_bits = 16,
  775. .size_bits = 16,
  776. .get_from_field = mv64x60_shift_left,
  777. .map_to_field = mv64x60_shift_right,
  778. .extra = MV64x60_EXTRA_CPUPROT_ENAB | 31 },
  779. [MV64x60_CPU_PROT_2_WIN] = {
  780. .base_reg = MV64x60_CPU_PROT_BASE_2,
  781. .size_reg = MV64x60_CPU_PROT_SIZE_2,
  782. .base_bits = 16,
  783. .size_bits = 16,
  784. .get_from_field = mv64x60_shift_left,
  785. .map_to_field = mv64x60_shift_right,
  786. .extra = MV64x60_EXTRA_CPUPROT_ENAB | 31 },
  787. [MV64x60_CPU_PROT_3_WIN] = {
  788. .base_reg = MV64x60_CPU_PROT_BASE_3,
  789. .size_reg = MV64x60_CPU_PROT_SIZE_3,
  790. .base_bits = 16,
  791. .size_bits = 16,
  792. .get_from_field = mv64x60_shift_left,
  793. .map_to_field = mv64x60_shift_right,
  794. .extra = MV64x60_EXTRA_CPUPROT_ENAB | 31 },
  795. /* CPU Snoop Windows -- don't exist on 64360 */
  796. /* PCI 0->System Memory Remap Windows */
  797. [MV64x60_PCI02MEM_REMAP_0_WIN] = {
  798. .base_reg = MV64x60_PCI0_SLAVE_MEM_0_REMAP,
  799. .size_reg = 0,
  800. .base_bits = 20,
  801. .size_bits = 0,
  802. .get_from_field = mv64x60_mask,
  803. .map_to_field = mv64x60_mask,
  804. .extra = 0 },
  805. [MV64x60_PCI02MEM_REMAP_1_WIN] = {
  806. .base_reg = MV64x60_PCI0_SLAVE_MEM_1_REMAP,
  807. .size_reg = 0,
  808. .base_bits = 20,
  809. .size_bits = 0,
  810. .get_from_field = mv64x60_mask,
  811. .map_to_field = mv64x60_mask,
  812. .extra = 0 },
  813. [MV64x60_PCI02MEM_REMAP_2_WIN] = {
  814. .base_reg = MV64x60_PCI0_SLAVE_MEM_1_REMAP,
  815. .size_reg = 0,
  816. .base_bits = 20,
  817. .size_bits = 0,
  818. .get_from_field = mv64x60_mask,
  819. .map_to_field = mv64x60_mask,
  820. .extra = 0 },
  821. [MV64x60_PCI02MEM_REMAP_3_WIN] = {
  822. .base_reg = MV64x60_PCI0_SLAVE_MEM_1_REMAP,
  823. .size_reg = 0,
  824. .base_bits = 20,
  825. .size_bits = 0,
  826. .get_from_field = mv64x60_mask,
  827. .map_to_field = mv64x60_mask,
  828. .extra = 0 },
  829. /* PCI 1->System Memory Remap Windows */
  830. [MV64x60_PCI12MEM_REMAP_0_WIN] = {
  831. .base_reg = MV64x60_PCI1_SLAVE_MEM_0_REMAP,
  832. .size_reg = 0,
  833. .base_bits = 20,
  834. .size_bits = 0,
  835. .get_from_field = mv64x60_mask,
  836. .map_to_field = mv64x60_mask,
  837. .extra = 0 },
  838. [MV64x60_PCI12MEM_REMAP_1_WIN] = {
  839. .base_reg = MV64x60_PCI1_SLAVE_MEM_1_REMAP,
  840. .size_reg = 0,
  841. .base_bits = 20,
  842. .size_bits = 0,
  843. .get_from_field = mv64x60_mask,
  844. .map_to_field = mv64x60_mask,
  845. .extra = 0 },
  846. [MV64x60_PCI12MEM_REMAP_2_WIN] = {
  847. .base_reg = MV64x60_PCI1_SLAVE_MEM_1_REMAP,
  848. .size_reg = 0,
  849. .base_bits = 20,
  850. .size_bits = 0,
  851. .get_from_field = mv64x60_mask,
  852. .map_to_field = mv64x60_mask,
  853. .extra = 0 },
  854. [MV64x60_PCI12MEM_REMAP_3_WIN] = {
  855. .base_reg = MV64x60_PCI1_SLAVE_MEM_1_REMAP,
  856. .size_reg = 0,
  857. .base_bits = 20,
  858. .size_bits = 0,
  859. .get_from_field = mv64x60_mask,
  860. .map_to_field = mv64x60_mask,
  861. .extra = 0 },
  862. /* ENET->System Memory Windows */
  863. [MV64x60_ENET2MEM_0_WIN] = {
  864. .base_reg = MV64360_ENET2MEM_0_BASE,
  865. .size_reg = MV64360_ENET2MEM_0_SIZE,
  866. .base_bits = 16,
  867. .size_bits = 16,
  868. .get_from_field = mv64x60_mask,
  869. .map_to_field = mv64x60_mask,
  870. .extra = MV64x60_EXTRA_ENET_ENAB | 0 },
  871. [MV64x60_ENET2MEM_1_WIN] = {
  872. .base_reg = MV64360_ENET2MEM_1_BASE,
  873. .size_reg = MV64360_ENET2MEM_1_SIZE,
  874. .base_bits = 16,
  875. .size_bits = 16,
  876. .get_from_field = mv64x60_mask,
  877. .map_to_field = mv64x60_mask,
  878. .extra = MV64x60_EXTRA_ENET_ENAB | 1 },
  879. [MV64x60_ENET2MEM_2_WIN] = {
  880. .base_reg = MV64360_ENET2MEM_2_BASE,
  881. .size_reg = MV64360_ENET2MEM_2_SIZE,
  882. .base_bits = 16,
  883. .size_bits = 16,
  884. .get_from_field = mv64x60_mask,
  885. .map_to_field = mv64x60_mask,
  886. .extra = MV64x60_EXTRA_ENET_ENAB | 2 },
  887. [MV64x60_ENET2MEM_3_WIN] = {
  888. .base_reg = MV64360_ENET2MEM_3_BASE,
  889. .size_reg = MV64360_ENET2MEM_3_SIZE,
  890. .base_bits = 16,
  891. .size_bits = 16,
  892. .get_from_field = mv64x60_mask,
  893. .map_to_field = mv64x60_mask,
  894. .extra = MV64x60_EXTRA_ENET_ENAB | 3 },
  895. [MV64x60_ENET2MEM_4_WIN] = {
  896. .base_reg = MV64360_ENET2MEM_4_BASE,
  897. .size_reg = MV64360_ENET2MEM_4_SIZE,
  898. .base_bits = 16,
  899. .size_bits = 16,
  900. .get_from_field = mv64x60_mask,
  901. .map_to_field = mv64x60_mask,
  902. .extra = MV64x60_EXTRA_ENET_ENAB | 4 },
  903. [MV64x60_ENET2MEM_5_WIN] = {
  904. .base_reg = MV64360_ENET2MEM_5_BASE,
  905. .size_reg = MV64360_ENET2MEM_5_SIZE,
  906. .base_bits = 16,
  907. .size_bits = 16,
  908. .get_from_field = mv64x60_mask,
  909. .map_to_field = mv64x60_mask,
  910. .extra = MV64x60_EXTRA_ENET_ENAB | 5 },
  911. /* MPSC->System Memory Windows */
  912. [MV64x60_MPSC2MEM_0_WIN] = {
  913. .base_reg = MV64360_MPSC2MEM_0_BASE,
  914. .size_reg = MV64360_MPSC2MEM_0_SIZE,
  915. .base_bits = 16,
  916. .size_bits = 16,
  917. .get_from_field = mv64x60_mask,
  918. .map_to_field = mv64x60_mask,
  919. .extra = MV64x60_EXTRA_MPSC_ENAB | 0 },
  920. [MV64x60_MPSC2MEM_1_WIN] = {
  921. .base_reg = MV64360_MPSC2MEM_1_BASE,
  922. .size_reg = MV64360_MPSC2MEM_1_SIZE,
  923. .base_bits = 16,
  924. .size_bits = 16,
  925. .get_from_field = mv64x60_mask,
  926. .map_to_field = mv64x60_mask,
  927. .extra = MV64x60_EXTRA_MPSC_ENAB | 1 },
  928. [MV64x60_MPSC2MEM_2_WIN] = {
  929. .base_reg = MV64360_MPSC2MEM_2_BASE,
  930. .size_reg = MV64360_MPSC2MEM_2_SIZE,
  931. .base_bits = 16,
  932. .size_bits = 16,
  933. .get_from_field = mv64x60_mask,
  934. .map_to_field = mv64x60_mask,
  935. .extra = MV64x60_EXTRA_MPSC_ENAB | 2 },
  936. [MV64x60_MPSC2MEM_3_WIN] = {
  937. .base_reg = MV64360_MPSC2MEM_3_BASE,
  938. .size_reg = MV64360_MPSC2MEM_3_SIZE,
  939. .base_bits = 16,
  940. .size_bits = 16,
  941. .get_from_field = mv64x60_mask,
  942. .map_to_field = mv64x60_mask,
  943. .extra = MV64x60_EXTRA_MPSC_ENAB | 3 },
  944. /* IDMA->System Memory Windows */
  945. [MV64x60_IDMA2MEM_0_WIN] = {
  946. .base_reg = MV64360_IDMA2MEM_0_BASE,
  947. .size_reg = MV64360_IDMA2MEM_0_SIZE,
  948. .base_bits = 16,
  949. .size_bits = 16,
  950. .get_from_field = mv64x60_mask,
  951. .map_to_field = mv64x60_mask,
  952. .extra = MV64x60_EXTRA_IDMA_ENAB | 0 },
  953. [MV64x60_IDMA2MEM_1_WIN] = {
  954. .base_reg = MV64360_IDMA2MEM_1_BASE,
  955. .size_reg = MV64360_IDMA2MEM_1_SIZE,
  956. .base_bits = 16,
  957. .size_bits = 16,
  958. .get_from_field = mv64x60_mask,
  959. .map_to_field = mv64x60_mask,
  960. .extra = MV64x60_EXTRA_IDMA_ENAB | 1 },
  961. [MV64x60_IDMA2MEM_2_WIN] = {
  962. .base_reg = MV64360_IDMA2MEM_2_BASE,
  963. .size_reg = MV64360_IDMA2MEM_2_SIZE,
  964. .base_bits = 16,
  965. .size_bits = 16,
  966. .get_from_field = mv64x60_mask,
  967. .map_to_field = mv64x60_mask,
  968. .extra = MV64x60_EXTRA_IDMA_ENAB | 2 },
  969. [MV64x60_IDMA2MEM_3_WIN] = {
  970. .base_reg = MV64360_IDMA2MEM_3_BASE,
  971. .size_reg = MV64360_IDMA2MEM_3_SIZE,
  972. .base_bits = 16,
  973. .size_bits = 16,
  974. .get_from_field = mv64x60_mask,
  975. .map_to_field = mv64x60_mask,
  976. .extra = MV64x60_EXTRA_IDMA_ENAB | 3 },
  977. [MV64x60_IDMA2MEM_4_WIN] = {
  978. .base_reg = MV64360_IDMA2MEM_4_BASE,
  979. .size_reg = MV64360_IDMA2MEM_4_SIZE,
  980. .base_bits = 16,
  981. .size_bits = 16,
  982. .get_from_field = mv64x60_mask,
  983. .map_to_field = mv64x60_mask,
  984. .extra = MV64x60_EXTRA_IDMA_ENAB | 4 },
  985. [MV64x60_IDMA2MEM_5_WIN] = {
  986. .base_reg = MV64360_IDMA2MEM_5_BASE,
  987. .size_reg = MV64360_IDMA2MEM_5_SIZE,
  988. .base_bits = 16,
  989. .size_bits = 16,
  990. .get_from_field = mv64x60_mask,
  991. .map_to_field = mv64x60_mask,
  992. .extra = MV64x60_EXTRA_IDMA_ENAB | 5 },
  993. [MV64x60_IDMA2MEM_6_WIN] = {
  994. .base_reg = MV64360_IDMA2MEM_6_BASE,
  995. .size_reg = MV64360_IDMA2MEM_6_SIZE,
  996. .base_bits = 16,
  997. .size_bits = 16,
  998. .get_from_field = mv64x60_mask,
  999. .map_to_field = mv64x60_mask,
  1000. .extra = MV64x60_EXTRA_IDMA_ENAB | 6 },
  1001. [MV64x60_IDMA2MEM_7_WIN] = {
  1002. .base_reg = MV64360_IDMA2MEM_7_BASE,
  1003. .size_reg = MV64360_IDMA2MEM_7_SIZE,
  1004. .base_bits = 16,
  1005. .size_bits = 16,
  1006. .get_from_field = mv64x60_mask,
  1007. .map_to_field = mv64x60_mask,
  1008. .extra = MV64x60_EXTRA_IDMA_ENAB | 7 },
  1009. };
  1010. struct mv64x60_64bit_window
  1011. mv64360_64bit_windows[MV64x60_64BIT_WIN_COUNT] __initdata = {
  1012. /* CPU->PCI 0 MEM Remap Windows */
  1013. [MV64x60_CPU2PCI0_MEM_0_REMAP_WIN] = {
  1014. .base_hi_reg = MV64x60_CPU2PCI0_MEM_0_REMAP_HI,
  1015. .base_lo_reg = MV64x60_CPU2PCI0_MEM_0_REMAP_LO,
  1016. .size_reg = 0,
  1017. .base_lo_bits = 16,
  1018. .size_bits = 0,
  1019. .get_from_field = mv64x60_shift_left,
  1020. .map_to_field = mv64x60_shift_right,
  1021. .extra = 0 },
  1022. [MV64x60_CPU2PCI0_MEM_1_REMAP_WIN] = {
  1023. .base_hi_reg = MV64x60_CPU2PCI0_MEM_1_REMAP_HI,
  1024. .base_lo_reg = MV64x60_CPU2PCI0_MEM_1_REMAP_LO,
  1025. .size_reg = 0,
  1026. .base_lo_bits = 16,
  1027. .size_bits = 0,
  1028. .get_from_field = mv64x60_shift_left,
  1029. .map_to_field = mv64x60_shift_right,
  1030. .extra = 0 },
  1031. [MV64x60_CPU2PCI0_MEM_2_REMAP_WIN] = {
  1032. .base_hi_reg = MV64x60_CPU2PCI0_MEM_2_REMAP_HI,
  1033. .base_lo_reg = MV64x60_CPU2PCI0_MEM_2_REMAP_LO,
  1034. .size_reg = 0,
  1035. .base_lo_bits = 16,
  1036. .size_bits = 0,
  1037. .get_from_field = mv64x60_shift_left,
  1038. .map_to_field = mv64x60_shift_right,
  1039. .extra = 0 },
  1040. [MV64x60_CPU2PCI0_MEM_3_REMAP_WIN] = {
  1041. .base_hi_reg = MV64x60_CPU2PCI0_MEM_3_REMAP_HI,
  1042. .base_lo_reg = MV64x60_CPU2PCI0_MEM_3_REMAP_LO,
  1043. .size_reg = 0,
  1044. .base_lo_bits = 16,
  1045. .size_bits = 0,
  1046. .get_from_field = mv64x60_shift_left,
  1047. .map_to_field = mv64x60_shift_right,
  1048. .extra = 0 },
  1049. /* CPU->PCI 1 MEM Remap Windows */
  1050. [MV64x60_CPU2PCI1_MEM_0_REMAP_WIN] = {
  1051. .base_hi_reg = MV64x60_CPU2PCI1_MEM_0_REMAP_HI,
  1052. .base_lo_reg = MV64x60_CPU2PCI1_MEM_0_REMAP_LO,
  1053. .size_reg = 0,
  1054. .base_lo_bits = 16,
  1055. .size_bits = 0,
  1056. .get_from_field = mv64x60_shift_left,
  1057. .map_to_field = mv64x60_shift_right,
  1058. .extra = 0 },
  1059. [MV64x60_CPU2PCI1_MEM_1_REMAP_WIN] = {
  1060. .base_hi_reg = MV64x60_CPU2PCI1_MEM_1_REMAP_HI,
  1061. .base_lo_reg = MV64x60_CPU2PCI1_MEM_1_REMAP_LO,
  1062. .size_reg = 0,
  1063. .base_lo_bits = 16,
  1064. .size_bits = 0,
  1065. .get_from_field = mv64x60_shift_left,
  1066. .map_to_field = mv64x60_shift_right,
  1067. .extra = 0 },
  1068. [MV64x60_CPU2PCI1_MEM_2_REMAP_WIN] = {
  1069. .base_hi_reg = MV64x60_CPU2PCI1_MEM_2_REMAP_HI,
  1070. .base_lo_reg = MV64x60_CPU2PCI1_MEM_2_REMAP_LO,
  1071. .size_reg = 0,
  1072. .base_lo_bits = 16,
  1073. .size_bits = 0,
  1074. .get_from_field = mv64x60_shift_left,
  1075. .map_to_field = mv64x60_shift_right,
  1076. .extra = 0 },
  1077. [MV64x60_CPU2PCI1_MEM_3_REMAP_WIN] = {
  1078. .base_hi_reg = MV64x60_CPU2PCI1_MEM_3_REMAP_HI,
  1079. .base_lo_reg = MV64x60_CPU2PCI1_MEM_3_REMAP_LO,
  1080. .size_reg = 0,
  1081. .base_lo_bits = 16,
  1082. .size_bits = 0,
  1083. .get_from_field = mv64x60_shift_left,
  1084. .map_to_field = mv64x60_shift_right,
  1085. .extra = 0 },
  1086. /* PCI 0->MEM Access Control Windows */
  1087. [MV64x60_PCI02MEM_ACC_CNTL_0_WIN] = {
  1088. .base_hi_reg = MV64x60_PCI0_ACC_CNTL_0_BASE_HI,
  1089. .base_lo_reg = MV64x60_PCI0_ACC_CNTL_0_BASE_LO,
  1090. .size_reg = MV64x60_PCI0_ACC_CNTL_0_SIZE,
  1091. .base_lo_bits = 20,
  1092. .size_bits = 20,
  1093. .get_from_field = mv64x60_mask,
  1094. .map_to_field = mv64x60_mask,
  1095. .extra = MV64x60_EXTRA_PCIACC_ENAB | 0 },
  1096. [MV64x60_PCI02MEM_ACC_CNTL_1_WIN] = {
  1097. .base_hi_reg = MV64x60_PCI0_ACC_CNTL_1_BASE_HI,
  1098. .base_lo_reg = MV64x60_PCI0_ACC_CNTL_1_BASE_LO,
  1099. .size_reg = MV64x60_PCI0_ACC_CNTL_1_SIZE,
  1100. .base_lo_bits = 20,
  1101. .size_bits = 20,
  1102. .get_from_field = mv64x60_mask,
  1103. .map_to_field = mv64x60_mask,
  1104. .extra = MV64x60_EXTRA_PCIACC_ENAB | 0 },
  1105. [MV64x60_PCI02MEM_ACC_CNTL_2_WIN] = {
  1106. .base_hi_reg = MV64x60_PCI0_ACC_CNTL_2_BASE_HI,
  1107. .base_lo_reg = MV64x60_PCI0_ACC_CNTL_2_BASE_LO,
  1108. .size_reg = MV64x60_PCI0_ACC_CNTL_2_SIZE,
  1109. .base_lo_bits = 20,
  1110. .size_bits = 20,
  1111. .get_from_field = mv64x60_mask,
  1112. .map_to_field = mv64x60_mask,
  1113. .extra = MV64x60_EXTRA_PCIACC_ENAB | 0 },
  1114. [MV64x60_PCI02MEM_ACC_CNTL_3_WIN] = {
  1115. .base_hi_reg = MV64x60_PCI0_ACC_CNTL_3_BASE_HI,
  1116. .base_lo_reg = MV64x60_PCI0_ACC_CNTL_3_BASE_LO,
  1117. .size_reg = MV64x60_PCI0_ACC_CNTL_3_SIZE,
  1118. .base_lo_bits = 20,
  1119. .size_bits = 20,
  1120. .get_from_field = mv64x60_mask,
  1121. .map_to_field = mv64x60_mask,
  1122. .extra = MV64x60_EXTRA_PCIACC_ENAB | 0 },
  1123. /* PCI 1->MEM Access Control Windows */
  1124. [MV64x60_PCI12MEM_ACC_CNTL_0_WIN] = {
  1125. .base_hi_reg = MV64x60_PCI1_ACC_CNTL_0_BASE_HI,
  1126. .base_lo_reg = MV64x60_PCI1_ACC_CNTL_0_BASE_LO,
  1127. .size_reg = MV64x60_PCI1_ACC_CNTL_0_SIZE,
  1128. .base_lo_bits = 20,
  1129. .size_bits = 20,
  1130. .get_from_field = mv64x60_mask,
  1131. .map_to_field = mv64x60_mask,
  1132. .extra = MV64x60_EXTRA_PCIACC_ENAB | 0 },
  1133. [MV64x60_PCI12MEM_ACC_CNTL_1_WIN] = {
  1134. .base_hi_reg = MV64x60_PCI1_ACC_CNTL_1_BASE_HI,
  1135. .base_lo_reg = MV64x60_PCI1_ACC_CNTL_1_BASE_LO,
  1136. .size_reg = MV64x60_PCI1_ACC_CNTL_1_SIZE,
  1137. .base_lo_bits = 20,
  1138. .size_bits = 20,
  1139. .get_from_field = mv64x60_mask,
  1140. .map_to_field = mv64x60_mask,
  1141. .extra = MV64x60_EXTRA_PCIACC_ENAB | 0 },
  1142. [MV64x60_PCI12MEM_ACC_CNTL_2_WIN] = {
  1143. .base_hi_reg = MV64x60_PCI1_ACC_CNTL_2_BASE_HI,
  1144. .base_lo_reg = MV64x60_PCI1_ACC_CNTL_2_BASE_LO,
  1145. .size_reg = MV64x60_PCI1_ACC_CNTL_2_SIZE,
  1146. .base_lo_bits = 20,
  1147. .size_bits = 20,
  1148. .get_from_field = mv64x60_mask,
  1149. .map_to_field = mv64x60_mask,
  1150. .extra = MV64x60_EXTRA_PCIACC_ENAB | 0 },
  1151. [MV64x60_PCI12MEM_ACC_CNTL_3_WIN] = {
  1152. .base_hi_reg = MV64x60_PCI1_ACC_CNTL_3_BASE_HI,
  1153. .base_lo_reg = MV64x60_PCI1_ACC_CNTL_3_BASE_LO,
  1154. .size_reg = MV64x60_PCI1_ACC_CNTL_3_SIZE,
  1155. .base_lo_bits = 20,
  1156. .size_bits = 20,
  1157. .get_from_field = mv64x60_mask,
  1158. .map_to_field = mv64x60_mask,
  1159. .extra = MV64x60_EXTRA_PCIACC_ENAB | 0 },
  1160. /* PCI 0->MEM Snoop Windows -- don't exist on 64360 */
  1161. /* PCI 1->MEM Snoop Windows -- don't exist on 64360 */
  1162. };