/* * T2 is the internal name for the core logic chipset which provides * memory controller and PCI access for the SABLE-based systems. * * This file is based on: * * SABLE I/O Specification * Revision/Update Information: 1.3 * * jestabro@amt.tay1.dec.com Initial Version. *
*/
#define T2_MEM_R1_MASK 0x07ffffff /* Mem sparse region 1 mask is 27 bits */
/* GAMMA-SABLE is a SABLE with EV5-based CPUs */ #define _GAMMA_BIAS 0x8000000000UL #define GAMMA_BIAS _GAMMA_BIAS
/* * Sable CPU Module CSRS * * These are CSRs for hardware other than the CPU chip on the CPU module. * The CPU module has Backup Cache control logic, Cbus control logic, and * interrupt control logic on it. There is a duplicate tag store to speed * up maintaining cache coherency.
*/
struct sable_cpu_csr { unsignedlong bcc; long fill_00[3]; /* Backup Cache Control */ unsignedlong bcce; long fill_01[3]; /* Backup Cache Correctable Error */ unsignedlong bccea; long fill_02[3]; /* B-Cache Corr Err Address Latch */ unsignedlong bcue; long fill_03[3]; /* B-Cache Uncorrectable Error */ unsignedlong bcuea; long fill_04[3]; /* B-Cache Uncorr Err Addr Latch */ unsignedlong dter; long fill_05[3]; /* Duplicate Tag Error */ unsignedlong cbctl; long fill_06[3]; /* CBus Control */ unsignedlong cbe; long fill_07[3]; /* CBus Error */ unsignedlong cbeal; long fill_08[3]; /* CBus Error Addr Latch low */ unsignedlong cbeah; long fill_09[3]; /* CBus Error Addr Latch high */ unsignedlong pmbx; long fill_10[3]; /* Processor Mailbox */ unsignedlong ipir; long fill_11[3]; /* Inter-Processor Int Request */ unsignedlong sic; long fill_12[3]; /* System Interrupt Clear */ unsignedlong adlk; long fill_13[3]; /* Address Lock (LDxL/STxC) */ unsignedlong madrl; long fill_14[3]; /* CBus Miss Address */ unsignedlong rev; long fill_15[3]; /* CMIC Revision */
};
/* * Data structure for handling T2 machine checks:
*/ struct el_t2_frame_header { unsignedint elcf_fid; /* Frame ID (from above) */ unsignedint elcf_size; /* Size of frame in bytes */
};
struct el_t2_procdata_mcheck { unsignedlong elfmc_paltemp[32]; /* PAL TEMP REGS. */ /* EV4-specific fields */ unsignedlong elfmc_exc_addr; /* Addr of excepting insn. */ unsignedlong elfmc_exc_sum; /* Summary of arith traps. */ unsignedlong elfmc_exc_mask; /* Exception mask (from exc_sum). */ unsignedlong elfmc_iccsr; /* IBox hardware enables. */ unsignedlong elfmc_pal_base; /* Base address for PALcode. */ unsignedlong elfmc_hier; /* Hardware Interrupt Enable. */ unsignedlong elfmc_hirr; /* Hardware Interrupt Request. */ unsignedlong elfmc_mm_csr; /* D-stream fault info. */ unsignedlong elfmc_dc_stat; /* D-cache status (ECC/Parity Err). */ unsignedlong elfmc_dc_addr; /* EV3 Phys Addr for ECC/DPERR. */ unsignedlong elfmc_abox_ctl; /* ABox Control Register. */ unsignedlong elfmc_biu_stat; /* BIU Status. */ unsignedlong elfmc_biu_addr; /* BUI Address. */ unsignedlong elfmc_biu_ctl; /* BIU Control. */ unsignedlong elfmc_fill_syndrome; /* For correcting ECC errors. */ unsignedlong elfmc_fill_addr;/* Cache block which was being read. */ unsignedlong elfmc_va; /* Effective VA of fault or miss. */ unsignedlong elfmc_bc_tag; /* Backup Cache Tag Probe Results. */
};
/* * Sable processor specific Machine Check Data segment.
*/
/* * I/O functions: * * T2 (the core logic PCI/memory support chipset for the SABLE * series of processors uses a sparse address mapping scheme to * get at PCI memory and I/O.
*/
/* * Memory functions. * * For reading and writing 8 and 16 bit quantities we need to * go through one of the three sparse address mapping regions * and use the HAE_MEM CSR to provide some bits of the address. * The following few routines use only sparse address region 1 * which gives 1Gbyte of accessible space which relates exactly * to the amount of PCI memory mapping *into* system address space. * See p 6-17 of the specification but it looks something like this: * * 21164 Address: * * 3 2 1 * 9876543210987654321098765432109876543210 * 1ZZZZ0.PCI.QW.Address............BBLL * * ZZ = SBZ * BB = Byte offset * LL = Transfer length * * PCI Address: * * 3 2 1 * 10987654321098765432109876543210 * HHH....PCI.QW.Address........ 00 * * HHH = 31:29 HAE_MEM CSR *
*/
/* * NOTE: take T2_DENSE_MEM off in each readX/writeX routine, since * they may be called directly, rather than through the * ioreadNN/iowriteNN routines.
*/
/* * On SABLE with T2, we must use SPARSE memory even for 32-bit access, * because we cannot access all of DENSE without changing its HAE.
*/
__EXTERN_INLINE u32 t2_readl(constvolatilevoid __iomem *xaddr)
{ unsignedlong addr = (unsignedlong) xaddr - T2_DENSE_MEM; unsignedlong result;
t2_set_hae;
result = *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x18); return result & 0xffffffffUL;
}
/* * On SABLE with T2, we must use SPARSE memory even for 32-bit access, * because we cannot access all of DENSE without changing its HAE.
*/
__EXTERN_INLINE void t2_writel(u32 b, volatilevoid __iomem *xaddr)
{ unsignedlong addr = (unsignedlong) xaddr - T2_DENSE_MEM;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.