immap_cpm2.h 10 KB

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