root/arch/powerpc/platforms/44x/fsp2.h
#ifndef _ASM_POWERPC_FSP_DCR_H_
#define _ASM_POWERPC_FSP_DCR_H_
#ifdef __KERNEL__
#include <asm/dcr.h>

#define DCRN_CMU_ADDR           0x00C   /* Chip management unic addr */
#define DCRN_CMU_DATA           0x00D   /* Chip management unic data */

/* PLB4 Arbiter */
#define DCRN_PLB4_PCBI          0x010   /* PLB Crossbar ID/Rev Register */
#define DCRN_PLB4_P0ACR         0x011   /* PLB0 Arbiter Control Register */
#define DCRN_PLB4_P0ESRL        0x012   /* PLB0 Error Status Register Low */
#define DCRN_PLB4_P0ESRH        0x013   /* PLB0 Error Status Register High */
#define DCRN_PLB4_P0EARL        0x014   /* PLB0 Error Address Register Low */
#define DCRN_PLB4_P0EARH        0x015   /* PLB0 Error Address Register High */
#define DCRN_PLB4_P0ESRLS       0x016   /* PLB0 Error Status Register Low Set*/
#define DCRN_PLB4_P0ESRHS       0x017   /* PLB0 Error Status Register High */
#define DCRN_PLB4_PCBC          0x018   /* PLB Crossbar Control Register */
#define DCRN_PLB4_P1ACR         0x019   /* PLB1 Arbiter Control Register */
#define DCRN_PLB4_P1ESRL        0x01A   /* PLB1 Error Status Register Low */
#define DCRN_PLB4_P1ESRH        0x01B   /* PLB1 Error Status Register High */
#define DCRN_PLB4_P1EARL        0x01C   /* PLB1 Error Address Register Low */
#define DCRN_PLB4_P1EARH        0x01D   /* PLB1 Error Address Register High */
#define DCRN_PLB4_P1ESRLS       0x01E   /* PLB1 Error Status Register Low Set*/
#define DCRN_PLB4_P1ESRHS       0x01F   /*PLB1 Error Status Register High Set*/

/* PLB4/OPB bridge 0, 1, 2, 3 */
#define DCRN_PLB4OPB0_BASE      0x020
#define DCRN_PLB4OPB1_BASE      0x030
#define DCRN_PLB4OPB2_BASE      0x040
#define DCRN_PLB4OPB3_BASE      0x050

#define PLB4OPB_GESR0           0x0     /* Error status 0: Master Dev 0-3 */
#define PLB4OPB_GEAR            0x2     /* Error Address Register */
#define PLB4OPB_GEARU           0x3     /* Error Upper Address Register */
#define PLB4OPB_GESR1           0x4     /* Error Status 1: Master Dev 4-7 */
#define PLB4OPB_GESR2           0xC     /* Error Status 2: Master Dev 8-11 */

/* PLB4-to-AHB Bridge */
#define DCRN_PLB4AHB_BASE       0x400
#define DCRN_PLB4AHB_SEUAR      (DCRN_PLB4AHB_BASE + 1)
#define DCRN_PLB4AHB_SELAR      (DCRN_PLB4AHB_BASE + 2)
#define DCRN_PLB4AHB_ESR        (DCRN_PLB4AHB_BASE + 3)
#define DCRN_AHBPLB4_ESR        (DCRN_PLB4AHB_BASE + 8)
#define DCRN_AHBPLB4_EAR        (DCRN_PLB4AHB_BASE + 9)

/* PLB6 Controller */
#define DCRN_PLB6_BASE          0x11111300
#define DCRN_PLB6_CR0           (DCRN_PLB6_BASE)
#define DCRN_PLB6_ERR           (DCRN_PLB6_BASE + 0x0B)
#define DCRN_PLB6_HD            (DCRN_PLB6_BASE + 0x0E)
#define DCRN_PLB6_SHD           (DCRN_PLB6_BASE + 0x10)

/* PLB4-to-PLB6 Bridge */
#define DCRN_PLB4PLB6_BASE      0x11111320
#define DCRN_PLB4PLB6_ESR       (DCRN_PLB4PLB6_BASE + 1)
#define DCRN_PLB4PLB6_EARH      (DCRN_PLB4PLB6_BASE + 3)
#define DCRN_PLB4PLB6_EARL      (DCRN_PLB4PLB6_BASE + 4)

/* PLB6-to-PLB4 Bridge */
#define DCRN_PLB6PLB4_BASE      0x11111350
#define DCRN_PLB6PLB4_ESR       (DCRN_PLB6PLB4_BASE + 1)
#define DCRN_PLB6PLB4_EARH      (DCRN_PLB6PLB4_BASE + 3)
#define DCRN_PLB6PLB4_EARL      (DCRN_PLB6PLB4_BASE + 4)

/* PLB6-to-MCIF Bridge */
#define DCRN_PLB6MCIF_BASE      0x11111380
#define DCRN_PLB6MCIF_BESR0     (DCRN_PLB6MCIF_BASE + 0)
#define DCRN_PLB6MCIF_BESR1     (DCRN_PLB6MCIF_BASE + 1)
#define DCRN_PLB6MCIF_BEARL     (DCRN_PLB6MCIF_BASE + 2)
#define DCRN_PLB6MCIF_BEARH     (DCRN_PLB6MCIF_BASE + 3)

/* Configuration Logic Registers */
#define DCRN_CONF_BASE          0x11111400
#define DCRN_CONF_FIR_RWC       (DCRN_CONF_BASE + 0x3A)
#define DCRN_CONF_EIR_RS        (DCRN_CONF_BASE + 0x3E)
#define DCRN_CONF_RPERR0        (DCRN_CONF_BASE + 0x4D)
#define DCRN_CONF_RPERR1        (DCRN_CONF_BASE + 0x4E)

#define DCRN_L2CDCRAI           0x11111100
#define DCRN_L2CDCRDI           0x11111104
/* L2 indirect addresses */
#define L2MCK           0x120
#define L2MCKEN         0x130
#define L2INT           0x150
#define L2INTEN         0x160
#define L2LOG0          0x180
#define L2LOG1          0x184
#define L2LOG2          0x188
#define L2LOG3          0x18C
#define L2LOG4          0x190
#define L2LOG5          0x194
#define L2PLBSTAT0      0x300
#define L2PLBSTAT1      0x304
#define L2PLBMCKEN0     0x330
#define L2PLBMCKEN1     0x334
#define L2PLBINTEN0     0x360
#define L2PLBINTEN1     0x364
#define L2ARRSTAT0      0x500
#define L2ARRSTAT1      0x504
#define L2ARRSTAT2      0x508
#define L2ARRMCKEN0     0x530
#define L2ARRMCKEN1     0x534
#define L2ARRMCKEN2     0x538
#define L2ARRINTEN0     0x560
#define L2ARRINTEN1     0x564
#define L2ARRINTEN2     0x568
#define L2CPUSTAT       0x700
#define L2CPUMCKEN      0x730
#define L2CPUINTEN      0x760
#define L2RACSTAT0      0x900
#define L2RACMCKEN0     0x930
#define L2RACINTEN0     0x960
#define L2WACSTAT0      0xD00
#define L2WACSTAT1      0xD04
#define L2WACSTAT2      0xD08
#define L2WACMCKEN0     0xD30
#define L2WACMCKEN1     0xD34
#define L2WACMCKEN2     0xD38
#define L2WACINTEN0     0xD60
#define L2WACINTEN1     0xD64
#define L2WACINTEN2     0xD68
#define L2WDFSTAT       0xF00
#define L2WDFMCKEN      0xF30
#define L2WDFINTEN      0xF60

/* DDR3/4 Memory Controller */
#define DCRN_DDR34_BASE                 0x11120000
#define DCRN_DDR34_MCSTAT               0x10
#define DCRN_DDR34_MCOPT1               0x20
#define DCRN_DDR34_MCOPT2               0x21
#define DCRN_DDR34_PHYSTAT              0x32
#define DCRN_DDR34_CFGR0                0x40
#define DCRN_DDR34_CFGR1                0x41
#define DCRN_DDR34_CFGR2                0x42
#define DCRN_DDR34_CFGR3                0x43
#define DCRN_DDR34_SCRUB_CNTL           0xAA
#define DCRN_DDR34_SCRUB_INT            0xAB
#define DCRN_DDR34_SCRUB_START_ADDR     0xB0
#define DCRN_DDR34_SCRUB_END_ADDR       0xD0
#define DCRN_DDR34_ECCERR_ADDR_PORT0    0xE0
#define DCRN_DDR34_ECCERR_ADDR_PORT1    0xE1
#define DCRN_DDR34_ECCERR_ADDR_PORT2    0xE2
#define DCRN_DDR34_ECCERR_ADDR_PORT3    0xE3
#define DCRN_DDR34_ECCERR_COUNT_PORT0   0xE4
#define DCRN_DDR34_ECCERR_COUNT_PORT1   0xE5
#define DCRN_DDR34_ECCERR_COUNT_PORT2   0xE6
#define DCRN_DDR34_ECCERR_COUNT_PORT3   0xE7
#define DCRN_DDR34_ECCERR_PORT0         0xF0
#define DCRN_DDR34_ECCERR_PORT1         0xF2
#define DCRN_DDR34_ECCERR_PORT2         0xF4
#define DCRN_DDR34_ECCERR_PORT3         0xF6
#define DCRN_DDR34_ECC_CHECK_PORT0      0xF8
#define DCRN_DDR34_ECC_CHECK_PORT1      0xF9
#define DCRN_DDR34_ECC_CHECK_PORT2      0xF9
#define DCRN_DDR34_ECC_CHECK_PORT3      0xFB

#define DDR34_SCRUB_CNTL_STOP           0x00000000
#define DDR34_SCRUB_CNTL_SCRUB          0x80000000
#define DDR34_SCRUB_CNTL_UE_STOP        0x20000000
#define DDR34_SCRUB_CNTL_CE_STOP        0x10000000
#define DDR34_SCRUB_CNTL_RANK_EN        0x00008000

/* PLB-Attached DDR3/4 Core Wrapper */
#define DCRN_CW_BASE                    0x11111800
#define DCRN_CW_MCER0                   0x00
#define DCRN_CW_MCER1                   0x01
#define DCRN_CW_MCER_AND0               0x02
#define DCRN_CW_MCER_AND1               0x03
#define DCRN_CW_MCER_OR0                0x04
#define DCRN_CW_MCER_OR1                0x05
#define DCRN_CW_MCER_MASK0              0x06
#define DCRN_CW_MCER_MASK1              0x07
#define DCRN_CW_MCER_MASK_AND0          0x08
#define DCRN_CW_MCER_MASK_AND1          0x09
#define DCRN_CW_MCER_MASK_OR0           0x0A
#define DCRN_CW_MCER_MASK_OR1           0x0B
#define DCRN_CW_MCER_ACTION0            0x0C
#define DCRN_CW_MCER_ACTION1            0x0D
#define DCRN_CW_MCER_WOF0               0x0E
#define DCRN_CW_MCER_WOF1               0x0F
#define DCRN_CW_LFIR                    0x10
#define DCRN_CW_LFIR_AND                0x11
#define DCRN_CW_LFIR_OR                 0x12
#define DCRN_CW_LFIR_MASK               0x13
#define DCRN_CW_LFIR_MASK_AND           0x14
#define DCRN_CW_LFIR_MASK_OR            0x15

#define CW_MCER0_MEM_CE                 0x00020000
/* CMU addresses */
#define CMUN_CRCS               0x00 /* Chip Reset Control/Status */
#define CMUN_CONFFIR0           0x20 /* Config Reg Parity FIR 0 */
#define CMUN_CONFFIR1           0x21 /* Config Reg Parity FIR 1 */
#define CMUN_CONFFIR2           0x22 /* Config Reg Parity FIR 2 */
#define CMUN_CONFFIR3           0x23 /* Config Reg Parity FIR 3 */
#define CMUN_URCR3_RS           0x24 /* Unit Reset Control Reg 3 Set */
#define CMUN_URCR3_C            0x25 /* Unit Reset Control Reg 3 Clear */
#define CMUN_URCR3_P            0x26 /* Unit Reset Control Reg 3 Pulse */
#define CMUN_PW0                0x2C /* Pulse Width Register */
#define CMUN_URCR0_P            0x2D /* Unit Reset Control Reg 0 Pulse */
#define CMUN_URCR1_P            0x2E /* Unit Reset Control Reg 1 Pulse */
#define CMUN_URCR2_P            0x2F /* Unit Reset Control Reg 2 Pulse */
#define CMUN_CLS_RW             0x30 /* Code Load Status (Read/Write) */
#define CMUN_CLS_S              0x31 /* Code Load Status (Set) */
#define CMUN_CLS_C              0x32 /* Code Load Status (Clear */
#define CMUN_URCR2_RS           0x33 /* Unit Reset Control Reg 2 Set */
#define CMUN_URCR2_C            0x34 /* Unit Reset Control Reg 2 Clear */
#define CMUN_CLKEN0             0x35 /* Clock Enable 0 */
#define CMUN_CLKEN1             0x36 /* Clock Enable 1 */
#define CMUN_PCD0               0x37 /* PSI clock divider 0 */
#define CMUN_PCD1               0x38 /* PSI clock divider 1 */
#define CMUN_TMR0               0x39 /* Reset Timer */
#define CMUN_TVS0               0x3A /* TV Sense Reg 0 */
#define CMUN_TVS1               0x3B /* TV Sense Reg 1 */
#define CMUN_MCCR               0x3C /* DRAM Configuration Reg */
#define CMUN_FIR0               0x3D /* Fault Isolation Reg 0 */
#define CMUN_FMR0               0x3E /* FIR Mask Reg 0 */
#define CMUN_ETDRB              0x3F /* ETDR Backdoor */

/* CRCS bit fields */
#define CRCS_STAT_MASK          0xF0000000
#define CRCS_STAT_POR           0x10000000
#define CRCS_STAT_PHR           0x20000000
#define CRCS_STAT_PCIE          0x30000000
#define CRCS_STAT_CRCS_SYS      0x40000000
#define CRCS_STAT_DBCR_SYS      0x50000000
#define CRCS_STAT_HOST_SYS      0x60000000
#define CRCS_STAT_CHIP_RST_B    0x70000000
#define CRCS_STAT_CRCS_CHIP     0x80000000
#define CRCS_STAT_DBCR_CHIP     0x90000000
#define CRCS_STAT_HOST_CHIP     0xA0000000
#define CRCS_STAT_PSI_CHIP      0xB0000000
#define CRCS_STAT_CRCS_CORE     0xC0000000
#define CRCS_STAT_DBCR_CORE     0xD0000000
#define CRCS_STAT_HOST_CORE     0xE0000000
#define CRCS_STAT_PCIE_HOT      0xF0000000
#define CRCS_STAT_SELF_CORE     0x40000000
#define CRCS_STAT_SELF_CHIP     0x50000000
#define CRCS_WATCHE             0x08000000
#define CRCS_CORE               0x04000000 /* Reset PPC440 core */
#define CRCS_CHIP               0x02000000 /* Chip Reset */
#define CRCS_SYS                0x01000000 /* System Reset */
#define CRCS_WRCR               0x00800000 /* Watchdog reset on core reset */
#define CRCS_EXTCR              0x00080000 /* CHIP_RST_B triggers chip reset */
#define CRCS_PLOCK              0x00000002 /* PLL Locked */

#define mtcmu(reg, data)                \
do {                                    \
        mtdcr(DCRN_CMU_ADDR, reg);      \
        mtdcr(DCRN_CMU_DATA, data);     \
} while (0)

#define mfcmu(reg)\
        ({u32 data;                     \
        mtdcr(DCRN_CMU_ADDR, reg);      \
        data = mfdcr(DCRN_CMU_DATA);    \
        data; })

#define mtl2(reg, data)                 \
do {                                    \
        mtdcr(DCRN_L2CDCRAI, reg);      \
        mtdcr(DCRN_L2CDCRDI, data);     \
} while (0)

#define mfl2(reg)                       \
        ({u32 data;                     \
        mtdcr(DCRN_L2CDCRAI, reg);      \
        data = mfdcr(DCRN_L2CDCRDI);    \
        data; })

#endif /* __KERNEL__ */
#endif /* _ASM_POWERPC_FSP2_DCR_H_ */