mv64x60_win.c 38 KB

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