mv64x60_win.c 38 KB

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