/* SPDX-License-Identifier: GPL-2.0-or-later */1/*2* QUICC Engine (QE) Internal Memory Map.3* The Internal Memory Map for devices with QE on them. This4* is the superset of all QE devices (8360, etc.).56* Copyright (C) 2006. Freescale Semiconductor, Inc. All rights reserved.7*8* Authors: Shlomi Gridish <[email protected]>9* Li Yang <[email protected]>10*/11#ifndef _ASM_POWERPC_IMMAP_QE_H12#define _ASM_POWERPC_IMMAP_QE_H13#ifdef __KERNEL__1415#include <linux/types.h>1617#include <asm/io.h>1819#define QE_IMMAP_SIZE (1024 * 1024) /* 1MB from 1MB+IMMR */2021/* QE I-RAM */22struct qe_iram {23__be32 iadd; /* I-RAM Address Register */24__be32 idata; /* I-RAM Data Register */25u8 res0[0x04];26__be32 iready; /* I-RAM Ready Register */27u8 res1[0x70];28} __attribute__ ((packed));2930/* QE Interrupt Controller */31struct qe_ic_regs {32__be32 qicr;33__be32 qivec;34__be32 qripnr;35__be32 qipnr;36__be32 qipxcc;37__be32 qipycc;38__be32 qipwcc;39__be32 qipzcc;40__be32 qimr;41__be32 qrimr;42__be32 qicnr;43u8 res0[0x4];44__be32 qiprta;45__be32 qiprtb;46u8 res1[0x4];47__be32 qricr;48u8 res2[0x20];49__be32 qhivec;50u8 res3[0x1C];51} __attribute__ ((packed));5253/* Communications Processor */54struct cp_qe {55__be32 cecr; /* QE command register */56__be32 ceccr; /* QE controller configuration register */57__be32 cecdr; /* QE command data register */58u8 res0[0xA];59__be16 ceter; /* QE timer event register */60u8 res1[0x2];61__be16 cetmr; /* QE timers mask register */62__be32 cetscr; /* QE time-stamp timer control register */63__be32 cetsr1; /* QE time-stamp register 1 */64__be32 cetsr2; /* QE time-stamp register 2 */65u8 res2[0x8];66__be32 cevter; /* QE virtual tasks event register */67__be32 cevtmr; /* QE virtual tasks mask register */68__be16 cercr; /* QE RAM control register */69u8 res3[0x2];70u8 res4[0x24];71__be16 ceexe1; /* QE external request 1 event register */72u8 res5[0x2];73__be16 ceexm1; /* QE external request 1 mask register */74u8 res6[0x2];75__be16 ceexe2; /* QE external request 2 event register */76u8 res7[0x2];77__be16 ceexm2; /* QE external request 2 mask register */78u8 res8[0x2];79__be16 ceexe3; /* QE external request 3 event register */80u8 res9[0x2];81__be16 ceexm3; /* QE external request 3 mask register */82u8 res10[0x2];83__be16 ceexe4; /* QE external request 4 event register */84u8 res11[0x2];85__be16 ceexm4; /* QE external request 4 mask register */86u8 res12[0x3A];87__be32 ceurnr; /* QE microcode revision number register */88u8 res13[0x244];89} __attribute__ ((packed));9091/* QE Multiplexer */92struct qe_mux {93__be32 cmxgcr; /* CMX general clock route register */94__be32 cmxsi1cr_l; /* CMX SI1 clock route low register */95__be32 cmxsi1cr_h; /* CMX SI1 clock route high register */96__be32 cmxsi1syr; /* CMX SI1 SYNC route register */97__be32 cmxucr[4]; /* CMX UCCx clock route registers */98__be32 cmxupcr; /* CMX UPC clock route register */99u8 res0[0x1C];100} __attribute__ ((packed));101102/* QE Timers */103struct qe_timers {104u8 gtcfr1; /* Timer 1 and Timer 2 global config register*/105u8 res0[0x3];106u8 gtcfr2; /* Timer 3 and timer 4 global config register*/107u8 res1[0xB];108__be16 gtmdr1; /* Timer 1 mode register */109__be16 gtmdr2; /* Timer 2 mode register */110__be16 gtrfr1; /* Timer 1 reference register */111__be16 gtrfr2; /* Timer 2 reference register */112__be16 gtcpr1; /* Timer 1 capture register */113__be16 gtcpr2; /* Timer 2 capture register */114__be16 gtcnr1; /* Timer 1 counter */115__be16 gtcnr2; /* Timer 2 counter */116__be16 gtmdr3; /* Timer 3 mode register */117__be16 gtmdr4; /* Timer 4 mode register */118__be16 gtrfr3; /* Timer 3 reference register */119__be16 gtrfr4; /* Timer 4 reference register */120__be16 gtcpr3; /* Timer 3 capture register */121__be16 gtcpr4; /* Timer 4 capture register */122__be16 gtcnr3; /* Timer 3 counter */123__be16 gtcnr4; /* Timer 4 counter */124__be16 gtevr1; /* Timer 1 event register */125__be16 gtevr2; /* Timer 2 event register */126__be16 gtevr3; /* Timer 3 event register */127__be16 gtevr4; /* Timer 4 event register */128__be16 gtps; /* Timer 1 prescale register */129u8 res2[0x46];130} __attribute__ ((packed));131132/* BRG */133struct qe_brg {134__be32 brgc[16]; /* BRG configuration registers */135u8 res0[0x40];136} __attribute__ ((packed));137138/* SPI */139struct spi {140u8 res0[0x20];141__be32 spmode; /* SPI mode register */142u8 res1[0x2];143u8 spie; /* SPI event register */144u8 res2[0x1];145u8 res3[0x2];146u8 spim; /* SPI mask register */147u8 res4[0x1];148u8 res5[0x1];149u8 spcom; /* SPI command register */150u8 res6[0x2];151__be32 spitd; /* SPI transmit data register (cpu mode) */152__be32 spird; /* SPI receive data register (cpu mode) */153u8 res7[0x8];154} __attribute__ ((packed));155156/* SI */157struct si1 {158__be16 sixmr1[4]; /* SI1 TDMx (x = A B C D) mode register */159u8 siglmr1_h; /* SI1 global mode register high */160u8 res0[0x1];161u8 sicmdr1_h; /* SI1 command register high */162u8 res2[0x1];163u8 sistr1_h; /* SI1 status register high */164u8 res3[0x1];165__be16 sirsr1_h; /* SI1 RAM shadow address register high */166u8 sitarc1; /* SI1 RAM counter Tx TDMA */167u8 sitbrc1; /* SI1 RAM counter Tx TDMB */168u8 sitcrc1; /* SI1 RAM counter Tx TDMC */169u8 sitdrc1; /* SI1 RAM counter Tx TDMD */170u8 sirarc1; /* SI1 RAM counter Rx TDMA */171u8 sirbrc1; /* SI1 RAM counter Rx TDMB */172u8 sircrc1; /* SI1 RAM counter Rx TDMC */173u8 sirdrc1; /* SI1 RAM counter Rx TDMD */174u8 res4[0x8];175__be16 siemr1; /* SI1 TDME mode register 16 bits */176__be16 sifmr1; /* SI1 TDMF mode register 16 bits */177__be16 sigmr1; /* SI1 TDMG mode register 16 bits */178__be16 sihmr1; /* SI1 TDMH mode register 16 bits */179u8 siglmg1_l; /* SI1 global mode register low 8 bits */180u8 res5[0x1];181u8 sicmdr1_l; /* SI1 command register low 8 bits */182u8 res6[0x1];183u8 sistr1_l; /* SI1 status register low 8 bits */184u8 res7[0x1];185__be16 sirsr1_l; /* SI1 RAM shadow address register low 16 bits*/186u8 siterc1; /* SI1 RAM counter Tx TDME 8 bits */187u8 sitfrc1; /* SI1 RAM counter Tx TDMF 8 bits */188u8 sitgrc1; /* SI1 RAM counter Tx TDMG 8 bits */189u8 sithrc1; /* SI1 RAM counter Tx TDMH 8 bits */190u8 sirerc1; /* SI1 RAM counter Rx TDME 8 bits */191u8 sirfrc1; /* SI1 RAM counter Rx TDMF 8 bits */192u8 sirgrc1; /* SI1 RAM counter Rx TDMG 8 bits */193u8 sirhrc1; /* SI1 RAM counter Rx TDMH 8 bits */194u8 res8[0x8];195__be32 siml1; /* SI1 multiframe limit register */196u8 siedm1; /* SI1 extended diagnostic mode register */197u8 res9[0xBB];198} __attribute__ ((packed));199200/* SI Routing Tables */201struct sir {202u8 tx[0x400];203u8 rx[0x400];204u8 res0[0x800];205} __attribute__ ((packed));206207/* USB Controller */208struct qe_usb_ctlr {209u8 usb_usmod;210u8 usb_usadr;211u8 usb_uscom;212u8 res1[1];213__be16 usb_usep[4];214u8 res2[4];215__be16 usb_usber;216u8 res3[2];217__be16 usb_usbmr;218u8 res4[1];219u8 usb_usbs;220__be16 usb_ussft;221u8 res5[2];222__be16 usb_usfrn;223u8 res6[0x22];224} __attribute__ ((packed));225226/* MCC */227struct qe_mcc {228__be32 mcce; /* MCC event register */229__be32 mccm; /* MCC mask register */230__be32 mccf; /* MCC configuration register */231__be32 merl; /* MCC emergency request level register */232u8 res0[0xF0];233} __attribute__ ((packed));234235/* QE UCC Slow */236struct ucc_slow {237__be32 gumr_l; /* UCCx general mode register (low) */238__be32 gumr_h; /* UCCx general mode register (high) */239__be16 upsmr; /* UCCx protocol-specific mode register */240u8 res0[0x2];241__be16 utodr; /* UCCx transmit on demand register */242__be16 udsr; /* UCCx data synchronization register */243__be16 ucce; /* UCCx event register */244u8 res1[0x2];245__be16 uccm; /* UCCx mask register */246u8 res2[0x1];247u8 uccs; /* UCCx status register */248u8 res3[0x24];249__be16 utpt;250u8 res4[0x52];251u8 guemr; /* UCC general extended mode register */252} __attribute__ ((packed));253254/* QE UCC Fast */255struct ucc_fast {256__be32 gumr; /* UCCx general mode register */257__be32 upsmr; /* UCCx protocol-specific mode register */258__be16 utodr; /* UCCx transmit on demand register */259u8 res0[0x2];260__be16 udsr; /* UCCx data synchronization register */261u8 res1[0x2];262__be32 ucce; /* UCCx event register */263__be32 uccm; /* UCCx mask register */264u8 uccs; /* UCCx status register */265u8 res2[0x7];266__be32 urfb; /* UCC receive FIFO base */267__be16 urfs; /* UCC receive FIFO size */268u8 res3[0x2];269__be16 urfet; /* UCC receive FIFO emergency threshold */270__be16 urfset; /* UCC receive FIFO special emergency271threshold */272__be32 utfb; /* UCC transmit FIFO base */273__be16 utfs; /* UCC transmit FIFO size */274u8 res4[0x2];275__be16 utfet; /* UCC transmit FIFO emergency threshold */276u8 res5[0x2];277__be16 utftt; /* UCC transmit FIFO transmit threshold */278u8 res6[0x2];279__be16 utpt; /* UCC transmit polling timer */280u8 res7[0x2];281__be32 urtry; /* UCC retry counter register */282u8 res8[0x4C];283u8 guemr; /* UCC general extended mode register */284} __attribute__ ((packed));285286struct ucc {287union {288struct ucc_slow slow;289struct ucc_fast fast;290u8 res[0x200]; /* UCC blocks are 512 bytes each */291};292} __attribute__ ((packed));293294/* MultiPHY UTOPIA POS Controllers (UPC) */295struct upc {296__be32 upgcr; /* UTOPIA/POS general configuration register */297__be32 uplpa; /* UTOPIA/POS last PHY address */298__be32 uphec; /* ATM HEC register */299__be32 upuc; /* UTOPIA/POS UCC configuration */300__be32 updc1; /* UTOPIA/POS device 1 configuration */301__be32 updc2; /* UTOPIA/POS device 2 configuration */302__be32 updc3; /* UTOPIA/POS device 3 configuration */303__be32 updc4; /* UTOPIA/POS device 4 configuration */304__be32 upstpa; /* UTOPIA/POS STPA threshold */305u8 res0[0xC];306__be32 updrs1_h; /* UTOPIA/POS device 1 rate select */307__be32 updrs1_l; /* UTOPIA/POS device 1 rate select */308__be32 updrs2_h; /* UTOPIA/POS device 2 rate select */309__be32 updrs2_l; /* UTOPIA/POS device 2 rate select */310__be32 updrs3_h; /* UTOPIA/POS device 3 rate select */311__be32 updrs3_l; /* UTOPIA/POS device 3 rate select */312__be32 updrs4_h; /* UTOPIA/POS device 4 rate select */313__be32 updrs4_l; /* UTOPIA/POS device 4 rate select */314__be32 updrp1; /* UTOPIA/POS device 1 receive priority low */315__be32 updrp2; /* UTOPIA/POS device 2 receive priority low */316__be32 updrp3; /* UTOPIA/POS device 3 receive priority low */317__be32 updrp4; /* UTOPIA/POS device 4 receive priority low */318__be32 upde1; /* UTOPIA/POS device 1 event */319__be32 upde2; /* UTOPIA/POS device 2 event */320__be32 upde3; /* UTOPIA/POS device 3 event */321__be32 upde4; /* UTOPIA/POS device 4 event */322__be16 uprp1;323__be16 uprp2;324__be16 uprp3;325__be16 uprp4;326u8 res1[0x8];327__be16 uptirr1_0; /* Device 1 transmit internal rate 0 */328__be16 uptirr1_1; /* Device 1 transmit internal rate 1 */329__be16 uptirr1_2; /* Device 1 transmit internal rate 2 */330__be16 uptirr1_3; /* Device 1 transmit internal rate 3 */331__be16 uptirr2_0; /* Device 2 transmit internal rate 0 */332__be16 uptirr2_1; /* Device 2 transmit internal rate 1 */333__be16 uptirr2_2; /* Device 2 transmit internal rate 2 */334__be16 uptirr2_3; /* Device 2 transmit internal rate 3 */335__be16 uptirr3_0; /* Device 3 transmit internal rate 0 */336__be16 uptirr3_1; /* Device 3 transmit internal rate 1 */337__be16 uptirr3_2; /* Device 3 transmit internal rate 2 */338__be16 uptirr3_3; /* Device 3 transmit internal rate 3 */339__be16 uptirr4_0; /* Device 4 transmit internal rate 0 */340__be16 uptirr4_1; /* Device 4 transmit internal rate 1 */341__be16 uptirr4_2; /* Device 4 transmit internal rate 2 */342__be16 uptirr4_3; /* Device 4 transmit internal rate 3 */343__be32 uper1; /* Device 1 port enable register */344__be32 uper2; /* Device 2 port enable register */345__be32 uper3; /* Device 3 port enable register */346__be32 uper4; /* Device 4 port enable register */347u8 res2[0x150];348} __attribute__ ((packed));349350/* SDMA */351struct sdma {352__be32 sdsr; /* Serial DMA status register */353__be32 sdmr; /* Serial DMA mode register */354__be32 sdtr1; /* SDMA system bus threshold register */355__be32 sdtr2; /* SDMA secondary bus threshold register */356__be32 sdhy1; /* SDMA system bus hysteresis register */357__be32 sdhy2; /* SDMA secondary bus hysteresis register */358__be32 sdta1; /* SDMA system bus address register */359__be32 sdta2; /* SDMA secondary bus address register */360__be32 sdtm1; /* SDMA system bus MSNUM register */361__be32 sdtm2; /* SDMA secondary bus MSNUM register */362u8 res0[0x10];363__be32 sdaqr; /* SDMA address bus qualify register */364__be32 sdaqmr; /* SDMA address bus qualify mask register */365u8 res1[0x4];366__be32 sdebcr; /* SDMA CAM entries base register */367u8 res2[0x38];368} __attribute__ ((packed));369370/* Debug Space */371struct dbg {372__be32 bpdcr; /* Breakpoint debug command register */373__be32 bpdsr; /* Breakpoint debug status register */374__be32 bpdmr; /* Breakpoint debug mask register */375__be32 bprmrr0; /* Breakpoint request mode risc register 0 */376__be32 bprmrr1; /* Breakpoint request mode risc register 1 */377u8 res0[0x8];378__be32 bprmtr0; /* Breakpoint request mode trb register 0 */379__be32 bprmtr1; /* Breakpoint request mode trb register 1 */380u8 res1[0x8];381__be32 bprmir; /* Breakpoint request mode immediate register */382__be32 bprmsr; /* Breakpoint request mode serial register */383__be32 bpemr; /* Breakpoint exit mode register */384u8 res2[0x48];385} __attribute__ ((packed));386387/*388* RISC Special Registers (Trap and Breakpoint). These are described in389* the QE Developer's Handbook.390*/391struct rsp {392__be32 tibcr[16]; /* Trap/instruction breakpoint control regs */393u8 res0[64];394__be32 ibcr0;395__be32 ibs0;396__be32 ibcnr0;397u8 res1[4];398__be32 ibcr1;399__be32 ibs1;400__be32 ibcnr1;401__be32 npcr;402__be32 dbcr;403__be32 dbar;404__be32 dbamr;405__be32 dbsr;406__be32 dbcnr;407u8 res2[12];408__be32 dbdr_h;409__be32 dbdr_l;410__be32 dbdmr_h;411__be32 dbdmr_l;412__be32 bsr;413__be32 bor;414__be32 bior;415u8 res3[4];416__be32 iatr[4];417__be32 eccr; /* Exception control configuration register */418__be32 eicr;419u8 res4[0x100-0xf8];420} __attribute__ ((packed));421422struct qe_immap {423struct qe_iram iram; /* I-RAM */424struct qe_ic_regs ic; /* Interrupt Controller */425struct cp_qe cp; /* Communications Processor */426struct qe_mux qmx; /* QE Multiplexer */427struct qe_timers qet; /* QE Timers */428struct spi spi[0x2]; /* spi */429struct qe_mcc mcc; /* mcc */430struct qe_brg brg; /* brg */431struct qe_usb_ctlr usb; /* USB */432struct si1 si1; /* SI */433u8 res11[0x800];434struct sir sir; /* SI Routing Tables */435struct ucc ucc1; /* ucc1 */436struct ucc ucc3; /* ucc3 */437struct ucc ucc5; /* ucc5 */438struct ucc ucc7; /* ucc7 */439u8 res12[0x600];440struct upc upc1; /* MultiPHY UTOPIA POS Ctrlr 1*/441struct ucc ucc2; /* ucc2 */442struct ucc ucc4; /* ucc4 */443struct ucc ucc6; /* ucc6 */444struct ucc ucc8; /* ucc8 */445u8 res13[0x600];446struct upc upc2; /* MultiPHY UTOPIA POS Ctrlr 2*/447struct sdma sdma; /* SDMA */448struct dbg dbg; /* 0x104080 - 0x1040FF449Debug Space */450struct rsp rsp[0x2]; /* 0x104100 - 0x1042FF451RISC Special Registers452(Trap and Breakpoint) */453u8 res14[0x300]; /* 0x104300 - 0x1045FF */454u8 res15[0x3A00]; /* 0x104600 - 0x107FFF */455u8 res16[0x8000]; /* 0x108000 - 0x110000 */456u8 muram[0xC000]; /* 0x110000 - 0x11C000457Multi-user RAM */458u8 res17[0x24000]; /* 0x11C000 - 0x140000 */459u8 res18[0xC0000]; /* 0x140000 - 0x200000 */460} __attribute__ ((packed));461462extern struct qe_immap __iomem *qe_immr;463464#endif /* __KERNEL__ */465#endif /* _ASM_POWERPC_IMMAP_QE_H */466467468