immap_cpm2.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * CPM2 Internal Memory Map
  4. * Copyright (c) 1999 Dan Malek ([email protected])
  5. *
  6. * The Internal Memory Map for devices with CPM2 on them. This
  7. * is the superset of all CPM2 devices (8260, 8266, 8280, 8272,
  8. * 8560).
  9. */
  10. #ifdef __KERNEL__
  11. #ifndef __IMMAP_CPM2__
  12. #define __IMMAP_CPM2__
  13. #include <linux/types.h>
  14. /* System configuration registers.
  15. */
  16. typedef struct sys_82xx_conf {
  17. u32 sc_siumcr;
  18. u32 sc_sypcr;
  19. u8 res1[6];
  20. u16 sc_swsr;
  21. u8 res2[20];
  22. u32 sc_bcr;
  23. u8 sc_ppc_acr;
  24. u8 res3[3];
  25. u32 sc_ppc_alrh;
  26. u32 sc_ppc_alrl;
  27. u8 sc_lcl_acr;
  28. u8 res4[3];
  29. u32 sc_lcl_alrh;
  30. u32 sc_lcl_alrl;
  31. u32 sc_tescr1;
  32. u32 sc_tescr2;
  33. u32 sc_ltescr1;
  34. u32 sc_ltescr2;
  35. u32 sc_pdtea;
  36. u8 sc_pdtem;
  37. u8 res5[3];
  38. u32 sc_ldtea;
  39. u8 sc_ldtem;
  40. u8 res6[163];
  41. } sysconf_82xx_cpm2_t;
  42. typedef struct sys_85xx_conf {
  43. u32 sc_cear;
  44. u16 sc_ceer;
  45. u16 sc_cemr;
  46. u8 res1[70];
  47. u32 sc_smaer;
  48. u8 res2[4];
  49. u32 sc_smevr;
  50. u32 sc_smctr;
  51. u32 sc_lmaer;
  52. u8 res3[4];
  53. u32 sc_lmevr;
  54. u32 sc_lmctr;
  55. u8 res4[144];
  56. } sysconf_85xx_cpm2_t;
  57. typedef union sys_conf {
  58. sysconf_82xx_cpm2_t siu_82xx;
  59. sysconf_85xx_cpm2_t siu_85xx;
  60. } sysconf_cpm2_t;
  61. /* Memory controller registers.
  62. */
  63. typedef struct mem_ctlr {
  64. u32 memc_br0;
  65. u32 memc_or0;
  66. u32 memc_br1;
  67. u32 memc_or1;
  68. u32 memc_br2;
  69. u32 memc_or2;
  70. u32 memc_br3;
  71. u32 memc_or3;
  72. u32 memc_br4;
  73. u32 memc_or4;
  74. u32 memc_br5;
  75. u32 memc_or5;
  76. u32 memc_br6;
  77. u32 memc_or6;
  78. u32 memc_br7;
  79. u32 memc_or7;
  80. u32 memc_br8;
  81. u32 memc_or8;
  82. u32 memc_br9;
  83. u32 memc_or9;
  84. u32 memc_br10;
  85. u32 memc_or10;
  86. u32 memc_br11;
  87. u32 memc_or11;
  88. u8 res1[8];
  89. u32 memc_mar;
  90. u8 res2[4];
  91. u32 memc_mamr;
  92. u32 memc_mbmr;
  93. u32 memc_mcmr;
  94. u8 res3[8];
  95. u16 memc_mptpr;
  96. u8 res4[2];
  97. u32 memc_mdr;
  98. u8 res5[4];
  99. u32 memc_psdmr;
  100. u32 memc_lsdmr;
  101. u8 memc_purt;
  102. u8 res6[3];
  103. u8 memc_psrt;
  104. u8 res7[3];
  105. u8 memc_lurt;
  106. u8 res8[3];
  107. u8 memc_lsrt;
  108. u8 res9[3];
  109. u32 memc_immr;
  110. u32 memc_pcibr0;
  111. u32 memc_pcibr1;
  112. u8 res10[16];
  113. u32 memc_pcimsk0;
  114. u32 memc_pcimsk1;
  115. u8 res11[52];
  116. } memctl_cpm2_t;
  117. /* System Integration Timers.
  118. */
  119. typedef struct sys_int_timers {
  120. u8 res1[32];
  121. u16 sit_tmcntsc;
  122. u8 res2[2];
  123. u32 sit_tmcnt;
  124. u8 res3[4];
  125. u32 sit_tmcntal;
  126. u8 res4[16];
  127. u16 sit_piscr;
  128. u8 res5[2];
  129. u32 sit_pitc;
  130. u32 sit_pitr;
  131. u8 res6[94];
  132. u8 res7[390];
  133. } sit_cpm2_t;
  134. #define PISCR_PIRQ_MASK ((u16)0xff00)
  135. #define PISCR_PS ((u16)0x0080)
  136. #define PISCR_PIE ((u16)0x0004)
  137. #define PISCR_PTF ((u16)0x0002)
  138. #define PISCR_PTE ((u16)0x0001)
  139. /* PCI Controller.
  140. */
  141. typedef struct pci_ctlr {
  142. u32 pci_omisr;
  143. u32 pci_omimr;
  144. u8 res1[8];
  145. u32 pci_ifqpr;
  146. u32 pci_ofqpr;
  147. u8 res2[8];
  148. u32 pci_imr0;
  149. u32 pci_imr1;
  150. u32 pci_omr0;
  151. u32 pci_omr1;
  152. u32 pci_odr;
  153. u8 res3[4];
  154. u32 pci_idr;
  155. u8 res4[20];
  156. u32 pci_imisr;
  157. u32 pci_imimr;
  158. u8 res5[24];
  159. u32 pci_ifhpr;
  160. u8 res6[4];
  161. u32 pci_iftpr;
  162. u8 res7[4];
  163. u32 pci_iphpr;
  164. u8 res8[4];
  165. u32 pci_iptpr;
  166. u8 res9[4];
  167. u32 pci_ofhpr;
  168. u8 res10[4];
  169. u32 pci_oftpr;
  170. u8 res11[4];
  171. u32 pci_ophpr;
  172. u8 res12[4];
  173. u32 pci_optpr;
  174. u8 res13[8];
  175. u32 pci_mucr;
  176. u8 res14[8];
  177. u32 pci_qbar;
  178. u8 res15[12];
  179. u32 pci_dmamr0;
  180. u32 pci_dmasr0;
  181. u32 pci_dmacdar0;
  182. u8 res16[4];
  183. u32 pci_dmasar0;
  184. u8 res17[4];
  185. u32 pci_dmadar0;
  186. u8 res18[4];
  187. u32 pci_dmabcr0;
  188. u32 pci_dmandar0;
  189. u8 res19[86];
  190. u32 pci_dmamr1;
  191. u32 pci_dmasr1;
  192. u32 pci_dmacdar1;
  193. u8 res20[4];
  194. u32 pci_dmasar1;
  195. u8 res21[4];
  196. u32 pci_dmadar1;
  197. u8 res22[4];
  198. u32 pci_dmabcr1;
  199. u32 pci_dmandar1;
  200. u8 res23[88];
  201. u32 pci_dmamr2;
  202. u32 pci_dmasr2;
  203. u32 pci_dmacdar2;
  204. u8 res24[4];
  205. u32 pci_dmasar2;
  206. u8 res25[4];
  207. u32 pci_dmadar2;
  208. u8 res26[4];
  209. u32 pci_dmabcr2;
  210. u32 pci_dmandar2;
  211. u8 res27[88];
  212. u32 pci_dmamr3;
  213. u32 pci_dmasr3;
  214. u32 pci_dmacdar3;
  215. u8 res28[4];
  216. u32 pci_dmasar3;
  217. u8 res29[4];
  218. u32 pci_dmadar3;
  219. u8 res30[4];
  220. u32 pci_dmabcr3;
  221. u32 pci_dmandar3;
  222. u8 res31[344];
  223. u32 pci_potar0;
  224. u8 res32[4];
  225. u32 pci_pobar0;
  226. u8 res33[4];
  227. u32 pci_pocmr0;
  228. u8 res34[4];
  229. u32 pci_potar1;
  230. u8 res35[4];
  231. u32 pci_pobar1;
  232. u8 res36[4];
  233. u32 pci_pocmr1;
  234. u8 res37[4];
  235. u32 pci_potar2;
  236. u8 res38[4];
  237. u32 pci_pobar2;
  238. u8 res39[4];
  239. u32 pci_pocmr2;
  240. u8 res40[50];
  241. u32 pci_ptcr;
  242. u32 pci_gpcr;
  243. u32 pci_gcr;
  244. u32 pci_esr;
  245. u32 pci_emr;
  246. u32 pci_ecr;
  247. u32 pci_eacr;
  248. u8 res41[4];
  249. u32 pci_edcr;
  250. u8 res42[4];
  251. u32 pci_eccr;
  252. u8 res43[44];
  253. u32 pci_pitar1;
  254. u8 res44[4];
  255. u32 pci_pibar1;
  256. u8 res45[4];
  257. u32 pci_picmr1;
  258. u8 res46[4];
  259. u32 pci_pitar0;
  260. u8 res47[4];
  261. u32 pci_pibar0;
  262. u8 res48[4];
  263. u32 pci_picmr0;
  264. u8 res49[4];
  265. u32 pci_cfg_addr;
  266. u32 pci_cfg_data;
  267. u32 pci_int_ack;
  268. u8 res50[756];
  269. } pci_cpm2_t;
  270. /* Interrupt Controller.
  271. */
  272. typedef struct interrupt_controller {
  273. u16 ic_sicr;
  274. u8 res1[2];
  275. u32 ic_sivec;
  276. u32 ic_sipnrh;
  277. u32 ic_sipnrl;
  278. u32 ic_siprr;
  279. u32 ic_scprrh;
  280. u32 ic_scprrl;
  281. u32 ic_simrh;
  282. u32 ic_simrl;
  283. u32 ic_siexr;
  284. u8 res2[88];
  285. } intctl_cpm2_t;
  286. /* Clocks and Reset.
  287. */
  288. typedef struct clk_and_reset {
  289. u32 car_sccr;
  290. u8 res1[4];
  291. u32 car_scmr;
  292. u8 res2[4];
  293. u32 car_rsr;
  294. u32 car_rmr;
  295. u8 res[104];
  296. } car_cpm2_t;
  297. /* Input/Output Port control/status registers.
  298. * Names consistent with processor manual, although they are different
  299. * from the original 8xx names.......
  300. */
  301. typedef struct io_port {
  302. u32 iop_pdira;
  303. u32 iop_ppara;
  304. u32 iop_psora;
  305. u32 iop_podra;
  306. u32 iop_pdata;
  307. u8 res1[12];
  308. u32 iop_pdirb;
  309. u32 iop_pparb;
  310. u32 iop_psorb;
  311. u32 iop_podrb;
  312. u32 iop_pdatb;
  313. u8 res2[12];
  314. u32 iop_pdirc;
  315. u32 iop_pparc;
  316. u32 iop_psorc;
  317. u32 iop_podrc;
  318. u32 iop_pdatc;
  319. u8 res3[12];
  320. u32 iop_pdird;
  321. u32 iop_ppard;
  322. u32 iop_psord;
  323. u32 iop_podrd;
  324. u32 iop_pdatd;
  325. u8 res4[12];
  326. } iop_cpm2_t;
  327. /* Communication Processor Module Timers
  328. */
  329. typedef struct cpm_timers {
  330. u8 cpmt_tgcr1;
  331. u8 res1[3];
  332. u8 cpmt_tgcr2;
  333. u8 res2[11];
  334. u16 cpmt_tmr1;
  335. u16 cpmt_tmr2;
  336. u16 cpmt_trr1;
  337. u16 cpmt_trr2;
  338. u16 cpmt_tcr1;
  339. u16 cpmt_tcr2;
  340. u16 cpmt_tcn1;
  341. u16 cpmt_tcn2;
  342. u16 cpmt_tmr3;
  343. u16 cpmt_tmr4;
  344. u16 cpmt_trr3;
  345. u16 cpmt_trr4;
  346. u16 cpmt_tcr3;
  347. u16 cpmt_tcr4;
  348. u16 cpmt_tcn3;
  349. u16 cpmt_tcn4;
  350. u16 cpmt_ter1;
  351. u16 cpmt_ter2;
  352. u16 cpmt_ter3;
  353. u16 cpmt_ter4;
  354. u8 res3[584];
  355. } cpmtimer_cpm2_t;
  356. /* DMA control/status registers.
  357. */
  358. typedef struct sdma_csr {
  359. u8 res0[24];
  360. u8 sdma_sdsr;
  361. u8 res1[3];
  362. u8 sdma_sdmr;
  363. u8 res2[3];
  364. u8 sdma_idsr1;
  365. u8 res3[3];
  366. u8 sdma_idmr1;
  367. u8 res4[3];
  368. u8 sdma_idsr2;
  369. u8 res5[3];
  370. u8 sdma_idmr2;
  371. u8 res6[3];
  372. u8 sdma_idsr3;
  373. u8 res7[3];
  374. u8 sdma_idmr3;
  375. u8 res8[3];
  376. u8 sdma_idsr4;
  377. u8 res9[3];
  378. u8 sdma_idmr4;
  379. u8 res10[707];
  380. } sdma_cpm2_t;
  381. /* Fast controllers
  382. */
  383. typedef struct fcc {
  384. u32 fcc_gfmr;
  385. u32 fcc_fpsmr;
  386. u16 fcc_ftodr;
  387. u8 res1[2];
  388. u16 fcc_fdsr;
  389. u8 res2[2];
  390. u16 fcc_fcce;
  391. u8 res3[2];
  392. u16 fcc_fccm;
  393. u8 res4[2];
  394. u8 fcc_fccs;
  395. u8 res5[3];
  396. u8 fcc_ftirr_phy[4];
  397. } fcc_t;
  398. /* Fast controllers continued
  399. */
  400. typedef struct fcc_c {
  401. u32 fcc_firper;
  402. u32 fcc_firer;
  403. u32 fcc_firsr_hi;
  404. u32 fcc_firsr_lo;
  405. u8 fcc_gfemr;
  406. u8 res1[15];
  407. } fcc_c_t;
  408. /* TC Layer
  409. */
  410. typedef struct tclayer {
  411. u16 tc_tcmode;
  412. u16 tc_cdsmr;
  413. u16 tc_tcer;
  414. u16 tc_rcc;
  415. u16 tc_tcmr;
  416. u16 tc_fcc;
  417. u16 tc_ccc;
  418. u16 tc_icc;
  419. u16 tc_tcc;
  420. u16 tc_ecc;
  421. u8 res1[12];
  422. } tclayer_t;
  423. /* I2C
  424. */
  425. typedef struct i2c {
  426. u8 i2c_i2mod;
  427. u8 res1[3];
  428. u8 i2c_i2add;
  429. u8 res2[3];
  430. u8 i2c_i2brg;
  431. u8 res3[3];
  432. u8 i2c_i2com;
  433. u8 res4[3];
  434. u8 i2c_i2cer;
  435. u8 res5[3];
  436. u8 i2c_i2cmr;
  437. u8 res6[331];
  438. } i2c_cpm2_t;
  439. typedef struct scc { /* Serial communication channels */
  440. u32 scc_gsmrl;
  441. u32 scc_gsmrh;
  442. u16 scc_psmr;
  443. u8 res1[2];
  444. u16 scc_todr;
  445. u16 scc_dsr;
  446. u16 scc_scce;
  447. u8 res2[2];
  448. u16 scc_sccm;
  449. u8 res3;
  450. u8 scc_sccs;
  451. u8 res4[8];
  452. } scc_t;
  453. typedef struct smc { /* Serial management channels */
  454. u8 res1[2];
  455. u16 smc_smcmr;
  456. u8 res2[2];
  457. u8 smc_smce;
  458. u8 res3[3];
  459. u8 smc_smcm;
  460. u8 res4[5];
  461. } smc_t;
  462. /* Serial Peripheral Interface.
  463. */
  464. typedef struct spi_ctrl {
  465. u16 spi_spmode;
  466. u8 res1[4];
  467. u8 spi_spie;
  468. u8 res2[3];
  469. u8 spi_spim;
  470. u8 res3[2];
  471. u8 spi_spcom;
  472. u8 res4[82];
  473. } spictl_cpm2_t;
  474. /* CPM Mux.
  475. */
  476. typedef struct cpmux {
  477. u8 cmx_si1cr;
  478. u8 res1;
  479. u8 cmx_si2cr;
  480. u8 res2;
  481. u32 cmx_fcr;
  482. u32 cmx_scr;
  483. u8 cmx_smr;
  484. u8 res3;
  485. u16 cmx_uar;
  486. u8 res4[16];
  487. } cpmux_t;
  488. /* SIRAM control
  489. */
  490. typedef struct siram {
  491. u16 si_amr;
  492. u16 si_bmr;
  493. u16 si_cmr;
  494. u16 si_dmr;
  495. u8 si_gmr;
  496. u8 res1;
  497. u8 si_cmdr;
  498. u8 res2;
  499. u8 si_str;
  500. u8 res3;
  501. u16 si_rsr;
  502. } siramctl_t;
  503. typedef struct mcc {
  504. u16 mcc_mcce;
  505. u8 res1[2];
  506. u16 mcc_mccm;
  507. u8 res2[2];
  508. u8 mcc_mccf;
  509. u8 res3[7];
  510. } mcc_t;
  511. typedef struct comm_proc {
  512. u32 cp_cpcr;
  513. u32 cp_rccr;
  514. u8 res1[14];
  515. u16 cp_rter;
  516. u8 res2[2];
  517. u16 cp_rtmr;
  518. u16 cp_rtscr;
  519. u8 res3[2];
  520. u32 cp_rtsr;
  521. u8 res4[12];
  522. } cpm_cpm2_t;
  523. /* USB Controller.
  524. */
  525. typedef struct cpm_usb_ctlr {
  526. u8 usb_usmod;
  527. u8 usb_usadr;
  528. u8 usb_uscom;
  529. u8 res1[1];
  530. __be16 usb_usep[4];
  531. u8 res2[4];
  532. __be16 usb_usber;
  533. u8 res3[2];
  534. __be16 usb_usbmr;
  535. u8 usb_usbs;
  536. u8 res4[7];
  537. } usb_cpm2_t;
  538. /* ...and the whole thing wrapped up....
  539. */
  540. typedef struct immap {
  541. /* Some references are into the unique and known dpram spaces,
  542. * others are from the generic base.
  543. */
  544. #define im_dprambase im_dpram1
  545. u8 im_dpram1[16*1024];
  546. u8 res1[16*1024];
  547. u8 im_dpram2[4*1024];
  548. u8 res2[8*1024];
  549. u8 im_dpram3[4*1024];
  550. u8 res3[16*1024];
  551. sysconf_cpm2_t im_siu_conf; /* SIU Configuration */
  552. memctl_cpm2_t im_memctl; /* Memory Controller */
  553. sit_cpm2_t im_sit; /* System Integration Timers */
  554. pci_cpm2_t im_pci; /* PCI Controller */
  555. intctl_cpm2_t im_intctl; /* Interrupt Controller */
  556. car_cpm2_t im_clkrst; /* Clocks and reset */
  557. iop_cpm2_t im_ioport; /* IO Port control/status */
  558. cpmtimer_cpm2_t im_cpmtimer; /* CPM timers */
  559. sdma_cpm2_t im_sdma; /* SDMA control/status */
  560. fcc_t im_fcc[3]; /* Three FCCs */
  561. u8 res4z[32];
  562. fcc_c_t im_fcc_c[3]; /* Continued FCCs */
  563. u8 res4[32];
  564. tclayer_t im_tclayer[8]; /* Eight TCLayers */
  565. u16 tc_tcgsr;
  566. u16 tc_tcger;
  567. /* First set of baud rate generators.
  568. */
  569. u8 res[236];
  570. u32 im_brgc5;
  571. u32 im_brgc6;
  572. u32 im_brgc7;
  573. u32 im_brgc8;
  574. u8 res5[608];
  575. i2c_cpm2_t im_i2c; /* I2C control/status */
  576. cpm_cpm2_t im_cpm; /* Communication processor */
  577. /* Second set of baud rate generators.
  578. */
  579. u32 im_brgc1;
  580. u32 im_brgc2;
  581. u32 im_brgc3;
  582. u32 im_brgc4;
  583. scc_t im_scc[4]; /* Four SCCs */
  584. smc_t im_smc[2]; /* Couple of SMCs */
  585. spictl_cpm2_t im_spi; /* A SPI */
  586. cpmux_t im_cpmux; /* CPM clock route mux */
  587. siramctl_t im_siramctl1; /* First SI RAM Control */
  588. mcc_t im_mcc1; /* First MCC */
  589. siramctl_t im_siramctl2; /* Second SI RAM Control */
  590. mcc_t im_mcc2; /* Second MCC */
  591. usb_cpm2_t im_usb; /* USB Controller */
  592. u8 res6[1153];
  593. u16 im_si1txram[256];
  594. u8 res7[512];
  595. u16 im_si1rxram[256];
  596. u8 res8[512];
  597. u16 im_si2txram[256];
  598. u8 res9[512];
  599. u16 im_si2rxram[256];
  600. u8 res10[512];
  601. u8 res11[4096];
  602. } cpm2_map_t;
  603. extern cpm2_map_t __iomem *cpm2_immr;
  604. #endif /* __IMMAP_CPM2__ */
  605. #endif /* __KERNEL__ */