Add Broadcom's code for bcm63xx support
[project/bcm63xx/atf.git] / plat / bcm / include / bcm963xx / 4908_map_part.h
diff --git a/plat/bcm/include/bcm963xx/4908_map_part.h b/plat/bcm/include/bcm963xx/4908_map_part.h
new file mode 100644 (file)
index 0000000..02aa9cc
--- /dev/null
@@ -0,0 +1,552 @@
+/*
+<:copyright-BRCM:2013:DUAL/GPL:standard
+
+   Copyright (c) 2013 Broadcom 
+   All Rights Reserved
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License, version 2, as published by
+the Free Software Foundation (the "GPL").
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+
+A copy of the GPL is available at http://www.broadcom.com/licenses/GPLv2.php, or by
+writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+
+:>
+*/
+
+#ifndef __BCM4908_MAP_PART_H
+#define __BCM4908_MAP_PART_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "bcmtypes.h"
+
+#define MEMC_PHYS_BASE         0x80018000  /* DDR IO Buf Control */
+#define MEMC_SIZE              0x4000
+
+#define PMC_PHYS_BASE          0x80200000
+#define PMC_SIZE               0x5000
+#define PMC_OFFSET             0x0000
+#define PROC_MON_PHYS_BASE     0x80280000
+#define PROC_MON_SIZE          0x1000
+#define PROC_MON_OFFSET                0x0000
+
+/* Perf block base address and size */
+#define PERF_PHYS_BASE         0xff800000
+#define PERF_SIZE              0x3000
+#define TIMR_OFFSET            0x0400   /* timer registers */
+
+#define URB_PHYS_BASE          0x81060000
+#define URB_SIZE               0x4000
+#define URB_OFFSET             0x0000
+#define URB_BIUARCH_OFFSET     0x1000
+#define URB_BIUCTRL_OFFSET     0x2000
+
+#define GIC_PHYS_BASE          0x81000000
+#define GIC_SIZE               0x10000
+#define GIC_OFFSET             0x0000
+#define GICD_OFFSET            0x1000
+#define GICC_OFFSET            0x2000
+
+#define PMC_BASE               (PMC_PHYS_BASE + PMC_OFFSET)
+#define PROC_MON_BASE          (PROC_MON_PHYS_BASE + PROC_MON_OFFSET)
+
+#define URB_BASE               (URB_PHYS_BASE + URB_OFFSET)
+#define BIUARCH_BASE           (URB_PHYS_BASE + URB_BIUARCH_OFFSET)
+#define BIUCTRL_BASE           (URB_PHYS_BASE + URB_BIUCTRL_OFFSET)
+
+#ifndef __ASSEMBLER__
+
+/*
+ * Power Management Control
+ */
+typedef struct PmcCtrlReg {
+   /* 0x00 */
+   uint32 l1Irq4keMask;
+   uint32 l1Irq4keStatus;
+   uint32 l1IrqMipsMask;
+   uint32 l1IrqMipsStatus;
+   /* 0x10 */
+   uint32 l2IrqGpMask;
+   uint32 l2IrqGpStatus;
+   uint32 gpTmr0Ctl;
+   uint32 gpTmr0Cnt;
+   /* 0x20 */
+   uint32 gpTmr1Ctl;
+   uint32 gpTmr1Cnt;
+   uint32 hostMboxIn;
+   uint32 hostMboxOut;
+   /* 0x30 */
+#define PMC_CTRL_GP_FLASH_BOOT_STALL                  0x00000080
+   uint32 gpOut;
+   uint32 gpIn;
+   uint32 gpInIrqMask;
+   uint32 gpInIrqStatus;
+   /* 0x40 */
+   uint32 dmaCtrl;
+   uint32 dmaStatus;
+   uint32 dma0_3FifoStatus;
+   uint32 unused0[3];   /* 0x4c-0x57 */
+   /* 0x58 */
+   uint32 l1IrqMips1Mask;
+   uint32 diagControl;
+   /* 0x60 */
+   uint32 diagHigh;
+   uint32 diagLow;
+   uint32 badAddr;
+   uint32 addr1WndwMask;
+   /* 0x70 */
+   uint32 addr1WndwBaseIn;
+   uint32 addr1WndwBaseOut;
+   uint32 addr2WndwMask;
+   uint32 addr2WndwBaseIn;
+   /* 0x80 */
+   uint32 addr2WndwBaseOut;
+   uint32 scratch;
+   uint32 tm;
+   uint32 softResets;
+   /* 0x90 */
+   uint32 eb2ubusTimeout;
+   uint32 m4keCoreStatus;
+   uint32 gpInIrqSense;
+   uint32 ubSlaveTimeout;
+   /* 0xa0 */
+   uint32 diagEn;
+   uint32 devTimeout;
+   uint32 ubusErrorOutMask;
+   uint32 diagCaptStopMask;
+   /* 0xb0 */
+   uint32 revId;
+   uint32 gpTmr2Ctl;
+   uint32 gpTmr2Cnt;
+   uint32 legacyMode;
+   /* 0xc0 */
+   uint32 smisbMonitor;
+   uint32 diagCtrl;
+   uint32 diagStat;
+   uint32 diagMask;
+   /* 0xd0 */
+   uint32 diagRslt;
+   uint32 diagCmp;
+   uint32 diagCapt;
+   uint32 diagCnt;
+   /* 0xe0 */
+   uint32 diagEdgeCnt;
+   uint32 unused1[4];   /* 0xe4-0xf3 */
+   /* 0xf4 */
+   uint32 iopPeriphBaseAddr;
+   uint32 lfsr;
+   uint32 unused2;      /* 0xfc-0xff */
+} PmcCtrlReg;
+
+typedef struct PmcOutFifoReg {
+   uint32 msgCtrl;      /* 0x00 */
+   uint32 msgSts;       /* 0x04 */
+   uint32 unused[14];   /* 0x08-0x3f */
+   uint32 msgData[16];  /* 0x40-0x7c */
+} PmcOutFifoReg;
+
+typedef struct PmcInFifoReg {
+   uint32 msgCtrl;      /* 0x00 */
+   uint32 msgSts;       /* 0x04 */
+   uint32 unused[13];   /* 0x08-0x3b */
+   uint32 msgLast;      /* 0x3c */
+   uint32 msgData[16];  /* 0x40-0x7c */
+} PmcInFifoReg;
+
+typedef struct PmcDmaReg {
+   /* 0x00 */
+   uint32 src;
+   uint32 dest;
+   uint32 cmdList;
+   uint32 lenCtl;
+   /* 0x10 */
+   uint32 rsltSrc;
+   uint32 rsltDest;
+   uint32 rsltHcs;
+   uint32 rsltLenStat;
+} PmcDmaReg;
+
+typedef struct PmcTokenReg {
+   /* 0x00 */
+   uint32 bufSize;
+   uint32 bufBase;
+   uint32 idx2ptrIdx;
+   uint32 idx2ptrPtr;
+   /* 0x10 */
+   uint32 unused[2];
+   uint32 bufSize2;
+} PmcTokenReg;
+
+typedef struct PmcPerfPowReg {
+   /* 0x00 */
+   uint32 dcacheHit;
+   uint32 dcacheMiss;
+   uint32 icacheHit;
+   uint32 icacheMiss;
+   /* 0x10 */
+   uint32 instnComplete;
+   uint32 wtbMerge;
+   uint32 wtbNoMerge;
+   uint32 itlbHit;
+   /* 0x20 */
+   uint32 itlbMiss;
+   uint32 dtlbHit;
+   uint32 dtlbMiss;
+   uint32 jtlbHit;
+   /* 0x30 */
+   uint32 jtlbMiss;
+   uint32 powerSubZone;
+   uint32 powerMemPda;
+   uint32 freqScalarCtrl;
+   /* 0x40 */
+   uint32 freqScalarMask;
+} PmcPerfPowReg;
+
+typedef struct PmcDQMReg {
+   /* 0x00 */
+   uint32 cfg;
+   uint32 _4keLowWtmkIrqMask;
+   uint32 mipsLowWtmkIrqMask;
+   uint32 lowWtmkIrqMask;
+   /* 0x10 */
+   uint32 _4keNotEmptyIrqMask;
+   uint32 mipsNotEmptyIrqMask;
+   uint32 notEmptyIrqSts;
+   uint32 queueRst;
+   /* 0x20 */
+   uint32 notEmptySts;
+   uint32 nextAvailMask;
+   uint32 nextAvailQueue;
+   uint32 mips1LowWtmkIrqMask;
+   /* 0x30 */
+   uint32 mips1NotEmptyIrqMask;
+   uint32 autoSrcPidInsert;
+} PmcDQMReg;
+
+typedef struct PmcCntReg {
+   uint32 cntr[10];
+   uint32 unused[6]; /* 0x28-0x3f */
+   uint32 cntrIrqMask;
+   uint32 cntrIrqSts;
+} PmcCntReg;
+
+typedef struct PmcDqmQCtrlReg {
+   uint32 size;
+   uint32 cfga;
+   uint32 cfgb;
+   uint32 cfgc;
+} PmcDqmQCtrlReg;
+
+typedef struct PmcDqmQDataReg {
+   uint32 word[4];
+} PmcDqmQDataReg;
+
+typedef struct PmcDqmQMibReg {
+   uint32 qNumFull[32];
+   uint32 qNumEmpty[32];
+   uint32 qNumPushed[32];
+} PmcDqmQMibReg;
+
+typedef struct Pmc {
+   uint32 baseReserved;    /* 0x0000 */
+   uint32 unused0[1023];
+   PmcCtrlReg ctrl;     /* 0x1000 */
+
+   PmcOutFifoReg outFifo;     /* 0x1100 */
+   uint32 unused1[32];     /* 0x1180-0x11ff */
+   PmcInFifoReg inFifo;    /* 0x1200 */
+   uint32 unused2[32];     /* 0x1280-0x12ff */
+
+   PmcDmaReg dma[2];    /* 0x1300 */
+   uint32 unused3[48];     /* 0x1340-0x13ff */
+
+   PmcTokenReg token;      /* 0x1400 */
+   uint32 unused4[121];    /* 0x141c-0x15ff */
+
+   PmcPerfPowReg perfPower;   /* 0x1600 */
+   uint32 unused5[47];     /* 0x1644-0x16ff */
+
+   uint32 msgId[32];    /* 0x1700 */
+   uint32 unused6[32];     /* 0x1780-0x17ff */
+
+   PmcDQMReg dqm;       /* 0x1800 */
+   uint32 unused7[50];     /* 0x1838-0x18ff */
+
+   PmcCntReg hwCounter;    /* 0x1900 */
+   uint32 unused8[46];     /* 0x1948-0x19ff */
+
+   PmcDqmQCtrlReg dqmQCtrl[32];  /* 0x1a00 */
+   PmcDqmQDataReg dqmQData[32];  /* 0x1c00 */
+   uint32 unused9[64];     /* 0x1e00-0x1eff */
+
+   uint32 qStatus[32];     /* 0x1f00 */
+   uint32 unused10[32];    /* 0x1f80-0x1fff */
+
+   PmcDqmQMibReg qMib;     /* 0x2000 */
+   uint32 unused11[1952];     /* 0x2180-0x3ffff */
+
+   uint32 sharedMem[512];    /* 0x4000-0x47ff */
+} Pmc;
+
+#define PMC ((volatile Pmc * const) PMC_BASE)
+
+/*
+ * Process Monitor Module
+ */
+typedef struct PMRingOscillatorControl {
+   uint32 control;
+   uint32 en_lo;
+   uint32 en_mid;
+   uint32 en_hi;
+   uint32 idle_lo;
+   uint32 idle_mid;
+   uint32 idle_hi;
+} PMRingOscillatorControl;
+
+#define RCAL_0P25UM_HORZ          0
+#define RCAL_0P25UM_VERT          1
+#define RCAL_0P5UM_HORZ           2
+#define RCAL_0P5UM_VERT           3
+#define RCAL_1UM_HORZ             4
+#define RCAL_1UM_VERT             5
+#define PMMISC_RMON_EXT_REG       ((RCAL_1UM_VERT + 1)/2)
+#define PMMISC_RMON_VALID_MASK    (0x1<<16)
+typedef struct PMMiscControl {
+   uint32 gp_out;
+   uint32 clock_select;
+   uint32 unused[2];
+   uint32 misc[4];
+} PMMiscControl;
+
+typedef struct PMSSBMasterControl {
+   uint32 control;
+#define PMC_SSBM_CONTROL_SSB_START  (1<<15)
+#define PMC_SSBM_CONTROL_SSB_ADPRE  (1<<13)
+#define PMC_SSBM_CONTROL_SSB_EN     (1<<12)
+#define PMC_SSBM_CONTROL_SSB_CMD_SHIFT (10)
+#define PMC_SSBM_CONTROL_SSB_CMD_MASK  (0x3 << PMC_SSBM_CONTROL_SSB_CMD_SHIFT)
+#define PMC_SSBM_CONTROL_SSB_CMD_READ  (2)
+#define PMC_SSBM_CONTROL_SSB_CMD_WRITE (1)
+#define PMC_SSBM_CONTROL_SSB_ADDR_SHIFT   (0)
+#define PMC_SSBM_CONTROL_SSB_ADDR_MASK (0x3ff << PMC_SSBM_CONTROL_SSB_ADDR_SHIFT)
+   uint32 wr_data;
+   uint32 rd_data;
+} PMSSBMasterControl;
+
+typedef struct PMEctrControl {
+   uint32 control;
+   uint32 interval;
+   uint32 thresh_lo;
+   uint32 thresh_hi;
+   uint32 count;
+} PMEctrControl;
+
+typedef struct PMBMaster {
+   uint32 ctrl;
+#define PMC_PMBM_START     (1 << 31)
+#define PMC_PMBM_TIMEOUT   (1 << 30)
+#define PMC_PMBM_SLAVE_ERR (1 << 29)
+#define PMC_PMBM_BUSY      (1 << 28)
+#define PMC_PMBM_Read      (0 << 20)
+#define PMC_PMBM_Write     (1 << 20)
+   uint32 wr_data;
+   uint32 timeout;
+   uint32 rd_data;
+   uint32 unused[4];
+} PMBMaster;
+
+typedef struct PMAPVTMONControl {
+   uint32 control;
+   uint32 reserved;
+   uint32 cfg_lo;
+   uint32 cfg_hi;
+   uint32 data;
+   uint32 vref_data;
+   uint32 unused[2];
+   uint32 ascan_cfg;
+   uint32 warn_temp;
+   uint32 reset_temp;
+   uint32 temp_value;
+   uint32 data1_value;
+   uint32 data2_value;
+   uint32 data3_value;
+} PMAPVTMONControl;
+
+typedef struct PMUBUSCfg {
+   uint32 window[8];
+   uint32 control;
+} PMUBUSCfg;
+
+typedef struct ProcessMonitorRegs {
+   uint32 MonitorCtrl;     /* 0x00 */
+   uint32 unused0[7];
+   PMRingOscillatorControl ROSC; /* 0x20 */
+   uint32 unused1;
+   PMMiscControl Misc;     /* 0x40 */
+   PMSSBMasterControl SSBMaster; /* 0x60 */
+   uint32 unused2[5];
+   PMEctrControl Ectr;     /* 0x80 */
+   uint32 unused3[11];
+   PMBMaster PMBM[2];      /* 0xc0 */
+   PMAPVTMONControl APvtmonCtrl; /* 0x100 */
+   uint32 unused4[9];
+   PMUBUSCfg UBUSCfg;      /* 0x160 */
+} ProcessMonitorRegs;
+
+#define PROCMON ((volatile ProcessMonitorRegs * const) PROC_MON_BASE)
+
+/*
+ * URB UBUS RBUS Block register
+ */
+typedef struct BIUArchRegion {
+    uint32 addr_ulimit;
+    uint32 addr_llimit;
+    uint32 permission;
+    uint32 access_right_ctrl;
+} BIUArchRegion;
+
+typedef struct BIUArch {
+    BIUArchRegion region[8];    /* 0x0 */
+    uint32 unused[95];          /* 0x80 */
+    uint32 scratch;             /* 0x1fc */    
+} BIUArch;
+
+#define BIUARCH ((volatile BIUArch * const) BIUARCH_BASE)
+
+typedef struct BIUCpuBusRange {
+#define ULIMIT_SHIFT 4
+#define BUSNUM_MASK 0x0000000FU
+
+#define BUSNUM_UBUS 1
+#define BUSNUM_RBUS 2
+#define BUSNUM_RSVD 3
+#define BUSNUM_MCP0 4
+#define BUSNUM_MCP1 5
+#define BUSNUM_MCP2 6
+
+    uint32 ulimit;
+    uint32 llimit;
+} BIUCpuBusRange;
+
+typedef struct BIUCpuAccessRightViol {
+    uint32 addr;
+    uint32 upper_addr;
+    uint32 detail_addr;
+} BIUCpuAccessRightViol;
+
+typedef struct BIUCpuBPCMAVS {
+    uint32 bpcm_id;
+    uint32 bpcm_capability;
+} BIUCpuBPCMAVS;
+
+typedef struct BIUCtrl {
+    BIUCpuBusRange bus_range[11];                   /* 0x0 */
+    uint32 secure_reset_hndshake;
+    uint32 secure_soft_reset;
+    BIUCpuAccessRightViol access_right_viol[2];     /* 0x60 */
+    uint32 rac_cfg0;
+    uint32 rac_cfg1;
+    uint32 rac_cfg2;                                /* 0x80 */
+    uint32 rac_flush;        
+    uint32 power_cfg;
+#define BIU_CPU_CTRL_PWR_CFG_CPU0_BPCM_INIT_ON_SHIFT 4
+#define BIU_CPU_CTRL_PWR_CFG_CPU0_BPCM_INIT_ON      (0x1<<BIU_CPU_CTRL_PWR_CFG_CPU0_BPCM_INIT_ON_SHIFT)
+    uint32 reset_cfg;
+#define BIU_CPU_CTRL_RST_CFG_CPU0_RESET_SHIFT       0
+#define BIU_CPU_CTRL_RST_CFG_CPU0_RESET             (0x1<<BIU_CPU_CTRL_RST_CFG_CPU0_RESET_SHIFT)
+    uint32 clock_cfg;                               /* 0x90 */
+#define BIU_CPU_CTRL_CLK_CFG_CCI_CLK_RATIO_SHIFT    8
+#define BIU_CPU_CTRL_CLK_CFG_CCI_CLK_RATIO_MASK     (0xf<<BIU_CPU_CTRL_CLK_CFG_CCI_CLK_RATIO_SHIFT)
+#define BIU_CPU_CTRL_CLK_CFG_CCI_CLK_RATIO_DIV1     (0<<BIU_CPU_CTRL_CLK_CFG_CCI_CLK_RATIO_SHIFT)
+#define BIU_CPU_CTRL_CLK_CFG_CCI_CLK_RATIO_DIV2     (1<<BIU_CPU_CTRL_CLK_CFG_CCI_CLK_RATIO_SHIFT)
+#define BIU_CPU_CTRL_CLK_CFG_CCI_CLK_RATIO_DIV3     (2<<BIU_CPU_CTRL_CLK_CFG_CCI_CLK_RATIO_SHIFT)
+#define BIU_CPU_CTRL_CLK_CFG_CCI_CLK_RATIO_DIV4     (3<<BIU_CPU_CTRL_CLK_CFG_CCI_CLK_RATIO_SHIFT)
+#define BIU_CPU_CTRL_CLK_CFG_SAFE_CLOCK_MODE_SHIFT  4
+#define BIU_CPU_CTRL_CLK_CFG_SAFE_CLOCK_MODE_MASK   (1<<BIU_CPU_CTRL_CLK_CFG_SAFE_CLOCK_MODE_SHIFT)
+#define BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_SHIFT        0
+#define BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_MASK         (0xf<<BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_SHIFT)
+#define BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_DIV1         (0<<BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_SHIFT)
+#define BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_DIV2         (1<<BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_SHIFT)
+#define BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_DIV4         (2<<BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_SHIFT)
+#define BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_DIV8         (3<<BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_SHIFT)
+#define BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_DIV16        (4<<BIU_CPU_CTRL_CLK_CFG_CLK_RATIO_SHIFT)
+    uint32 cluster_clk_ctrl[2];
+    uint32 cluster_clk_pattern[2];
+    uint32 cluster_clk_ramp[2];
+    uint32 misc_cfg;
+    uint32 credit;                                  /* 0xb0 */
+    uint32 mcp_flow;
+    uint32 periphbase_gic;
+    uint32 periphbase_gic_web;
+    uint32 wfx_state;                               /* 0xc0 */
+    uint32 cpu_pwr_zone_ctrl[8];
+#define BIU_CPU_CTRL_PWR_ZONE_CTRL_ZONE_RESET_SHIFT 31
+#define BIU_CPU_CTRL_PWR_ZONE_CTRL_ZONE_RESET       (1<<BIU_CPU_CTRL_PWR_ZONE_CTRL_ZONE_RESET_SHIFT)
+#define BIU_CPU_CTRL_PWR_ZONE_CTRL_PWR_UP_REQ_SHIFT 10
+#define BIU_CPU_CTRL_PWR_ZONE_CTRL_PWR_UP_REQ       (1<<BIU_CPU_CTRL_PWR_ZONE_CTRL_PWR_UP_REQ_SHIFT)
+#define BIU_CPU_CTRL_PWR_ZONE_CTRL_PWR_DN_REQ_SHIFT 9
+#define BIU_CPU_CTRL_PWR_ZONE_CTRL_PWR_DN_REQ       (1<<BIU_CPU_CTRL_PWR_ZONE_CTRL_PWR_DN_REQ_SHIFT)
+    uint32 cpu_pwr_zone_cfg1[8];
+    uint32 cpu_pwr_zone_cfg2[8];
+    uint32 c0l2_pwr_zone_ctrl;                      /* 0x124 */
+    uint32 c0l2_pwr_zone_cfg1;
+    uint32 c0l2_pwr_zone_cfg2;
+    uint32 c1l2_pwr_zone_ctrl;
+    uint32 c1l2_pwr_zone_cfg1;
+    uint32 c1l2_pwr_zone_cfg2;
+    uint32 sysif_pwr_zone_ctrl;
+    uint32 sysif_pwr_zone_cfg1;
+    uint32 sysif_pwr_zone_cfg2;
+    BIUCpuBPCMAVS cpu_bpcm_avs[8];                  /* 0x148 */
+    BIUCpuBPCMAVS l2biu_bpcm_avs[3];                /* 0x188 */
+    uint32 therm_throttle_temp;                     /* 0x1a0 */
+    uint32 term_throttle_irq_cfg;
+    uint32 therm_irq_high;
+    uint32 therm_irq_low;
+    uint32 therm_misc_threshold;                    /* 0x1b0 */
+    uint32 therm_irq_misc;
+    uint32 defeature;
+    uint32 defeature2;
+    uint32 defeature_key;                           /* 0x1c0 */
+    uint32 debug_rom_addr;
+    uint32 debug_tracectrl;
+    uint32 axi_cfg;
+    uint32 revision;                                /* 0x1d0 */
+    uint32 patchlevel;
+    uint32 ubus_cfg;                                /* 0x1d8 */
+    uint32 ubus_cfg_window[8];
+    uint32 power_state;
+    uint32 phys_config;                             /* 0x200 */
+    uint32 unused[126];                             /* 0x204 */
+    uint32 scratch;                                 /* 0x3fc */
+} BIUCtrl;
+
+#define BIUCTRL ((volatile BIUCtrl * const) BIUCTRL_BASE)
+
+typedef struct URB_Ctrl {
+    uint32 unused0[1024];                           /* 0x0000 */
+    BIUArch arch;                                   /* 0x1000 */
+    uint32 unused1[896];                            /* 0x1200 */
+    BIUCtrl cpu_ctrl;                               /* 0x2000 */
+} URB_Ctrl;
+
+#define URB_CTRL ((volatile URB_Ctrl *const) URB_BASE)
+
+#endif /* __ASSEMBLER__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+