Newer
Older
uwuboot / include / IO.h
@profi200 profi200 on 8 Jul 2016 10 KB Some refactoring.
#pragma once

#include "types.h"
#include "mem_map.h"



#ifdef ARM9
/* CFG */
#define CFG_REGS_BASE            (IO_MEM_ARM9_ONLY)
#define REG_CARDCONF             *((vu16*)(CFG_REGS_BASE + 0x0000C))
#define REG_CARDCONF2            *((vu8* )(CFG_REGS_BASE + 0x00010))
#define CFG_BOOTENV              *((vu32*)(CFG_REGS_BASE + 0x10000))
#define CFG_UNITINFO             *((vu8* )(CFG_REGS_BASE + 0x10010))


/* IRQ */
#define IRQ_REGS_BASE            (IO_MEM_ARM9_ONLY + 0x1000)
#define REG_IRQ_IE               *((vu32*)(IRQ_REGS_BASE + 0x00))
#define REG_IRQ_IF               *((vu32*)(IRQ_REGS_BASE + 0x04))


/* NDMA */
#define NDMA_REGS_BASE           (IO_MEM_ARM9_ONLY + 0x2000)
#define REG_NDMA_GLOBAL_CNT      *((vu32*)(NDMA_REGS_BASE + 0x00))

#define REG_NDMA0_SRC_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x04))
#define REG_NDMA0_DST_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x08))
#define REG_NDMA0_TRANSFER_CNT   *((vu32*)(NDMA_REGS_BASE + 0x0C))
#define REG_NDMA0_WRITE_CNT      *((vu32*)(NDMA_REGS_BASE + 0x10))
#define REG_NDMA0_BLOCK_CNT      *((vu32*)(NDMA_REGS_BASE + 0x14))
#define REG_NDMA0_FILL_DATA      *((vu32*)(NDMA_REGS_BASE + 0x18))
#define REG_NDMA0_CNT            *((vu32*)(NDMA_REGS_BASE + 0x1C))

#define REG_NDMA1_SRC_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x20))
#define REG_NDMA1_DST_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x24))
#define REG_NDMA1_TRANSFER_CNT   *((vu32*)(NDMA_REGS_BASE + 0x28))
#define REG_NDMA1_WRITE_CNT      *((vu32*)(NDMA_REGS_BASE + 0x2C))
#define REG_NDMA1_BLOCK_CNT      *((vu32*)(NDMA_REGS_BASE + 0x30))
#define REG_NDMA1_FILL_DATA      *((vu32*)(NDMA_REGS_BASE + 0x34))
#define REG_NDMA1_CNT            *((vu32*)(NDMA_REGS_BASE + 0x38))

#define REG_NDMA2_SRC_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x3C))
#define REG_NDMA2_DST_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x40))
#define REG_NDMA2_TRANSFER_CNT   *((vu32*)(NDMA_REGS_BASE + 0x44))
#define REG_NDMA2_WRITE_CNT      *((vu32*)(NDMA_REGS_BASE + 0x48))
#define REG_NDMA2_BLOCK_CNT      *((vu32*)(NDMA_REGS_BASE + 0x4C))
#define REG_NDMA2_FILL_DATA      *((vu32*)(NDMA_REGS_BASE + 0x50))
#define REG_NDMA2_CNT            *((vu32*)(NDMA_REGS_BASE + 0x54))

#define REG_NDMA3_SRC_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x58))
#define REG_NDMA3_DST_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x5C))
#define REG_NDMA3_TRANSFER_CNT   *((vu32*)(NDMA_REGS_BASE + 0x60))
#define REG_NDMA3_WRITE_CNT      *((vu32*)(NDMA_REGS_BASE + 0x64))
#define REG_NDMA3_BLOCK_CNT      *((vu32*)(NDMA_REGS_BASE + 0x68))
#define REG_NDMA3_FILL_DATA      *((vu32*)(NDMA_REGS_BASE + 0x6C))
#define REG_NDMA3_CNT            *((vu32*)(NDMA_REGS_BASE + 0x70))

#define REG_NDMA4_SRC_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x74))
#define REG_NDMA4_DST_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x78))
#define REG_NDMA4_TRANSFER_CNT   *((vu32*)(NDMA_REGS_BASE + 0x7C))
#define REG_NDMA4_WRITE_CNT      *((vu32*)(NDMA_REGS_BASE + 0x80))
#define REG_NDMA4_BLOCK_CNT      *((vu32*)(NDMA_REGS_BASE + 0x84))
#define REG_NDMA4_FILL_DATA      *((vu32*)(NDMA_REGS_BASE + 0x88))
#define REG_NDMA4_CNT            *((vu32*)(NDMA_REGS_BASE + 0x8C))

#define REG_NDMA5_SRC_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x90))
#define REG_NDMA5_DST_ADDR       *((vu32*)(NDMA_REGS_BASE + 0x94))
#define REG_NDMA5_TRANSFER_CNT   *((vu32*)(NDMA_REGS_BASE + 0x98))
#define REG_NDMA5_WRITE_CNT      *((vu32*)(NDMA_REGS_BASE + 0x9C))
#define REG_NDMA5_BLOCK_CNT      *((vu32*)(NDMA_REGS_BASE + 0xA0))
#define REG_NDMA5_FILL_DATA      *((vu32*)(NDMA_REGS_BASE + 0xA4))
#define REG_NDMA5_CNT            *((vu32*)(NDMA_REGS_BASE + 0xA8))

#define REG_NDMA6_SRC_ADDR       *((vu32*)(NDMA_REGS_BASE + 0xAC))
#define REG_NDMA6_DST_ADDR       *((vu32*)(NDMA_REGS_BASE + 0xB0))
#define REG_NDMA6_TRANSFER_CNT   *((vu32*)(NDMA_REGS_BASE + 0xB4))
#define REG_NDMA6_WRITE_CNT      *((vu32*)(NDMA_REGS_BASE + 0xB8))
#define REG_NDMA6_BLOCK_CNT      *((vu32*)(NDMA_REGS_BASE + 0xBC))
#define REG_NDMA6_FILL_DATA      *((vu32*)(NDMA_REGS_BASE + 0xC0))
#define REG_NDMA6_CNT            *((vu32*)(NDMA_REGS_BASE + 0xC4))

#define REG_NDMA7_SRC_ADDR       *((vu32*)(NDMA_REGS_BASE + 0xC8))
#define REG_NDMA7_DST_ADDR       *((vu32*)(NDMA_REGS_BASE + 0xCC))
#define REG_NDMA7_TRANSFER_CNT   *((vu32*)(NDMA_REGS_BASE + 0xD0))
#define REG_NDMA7_WRITE_CNT      *((vu32*)(NDMA_REGS_BASE + 0xD4))
#define REG_NDMA7_BLOCK_CNT      *((vu32*)(NDMA_REGS_BASE + 0xD8))
#define REG_NDMA7_FILL_DATA      *((vu32*)(NDMA_REGS_BASE + 0xDC))
#define REG_NDMA7_CNT            *((vu32*)(NDMA_REGS_BASE + 0xE0))

#define REG_NDMA_SRC_ADDR(n)     *((vu32*)(NDMA_REGS_BASE + 0x04 + (n * 28)))
#define REG_NDMA_DST_ADDR(n)     *((vu32*)(NDMA_REGS_BASE + 0x08 + (n * 28)))
#define REG_NDMA_TRANSFER_CNT(n) *((vu32*)(NDMA_REGS_BASE + 0x0C + (n * 28)))
#define REG_NDMA_WRITE_CNT(n)    *((vu32*)(NDMA_REGS_BASE + 0x10 + (n * 28)))
#define REG_NDMA_BLOCK_CNT(n)    *((vu32*)(NDMA_REGS_BASE + 0x14 + (n * 28)))
#define REG_NDMA_FILL_DATA(n)    *((vu32*)(NDMA_REGS_BASE + 0x18 + (n * 28)))
#define REG_NDMA_CNT(n)          *((vu32*)(NDMA_REGS_BASE + 0x1C + (n * 28)))


/* TIMER */
//#define TIMER_REGS_BASE          (IO_MEM_ARM9_ONLY + 0x3000)
// TODO


/* CTRCARD */
#define CTRCARD_REGS_BASE        (IO_MEM_ARM9_ONLY + 0x4000)
#define REG_CTRCARDCNT           *((vu32*)(CTRCARD_REGS_BASE + 0x00))
#define REG_CTRCARDBLKCNT        *((vu32*)(CTRCARD_REGS_BASE + 0x04))
#define REG_CTRCARDSECCNT        *((vu32*)(CTRCARD_REGS_BASE + 0x08))
#define REG_CTRCARDSECSEED       *((vu32*)(CTRCARD_REGS_BASE + 0x10))
#define REG_CTRCARDCMD            ((vu32*)(CTRCARD_REGS_BASE + 0x20))
#define REG_CTRCARDFIFO          *((vu32*)(CTRCARD_REGS_BASE + 0x30))


/* EMMC */
//#define EMMC_REGS_BASE           (IO_MEM_ARM9_ONLY + 0x6000)
// Porting the eMMC driver every time is too much so
// we leave the reg definitions in sdmmc.h


/* PXI9 */
#define PXI9_REGS_BASE           (IO_MEM_ARM9_ONLY + 0x8000)
#define REG_PXI_SYNC9            *((vu32*)(PXI9_REGS_BASE + 0x00))
#define REG_PXI_CNT9             *((vu32*)(PXI9_REGS_BASE + 0x04))
#define REG_PXI_SEND9            *((vu32*)(PXI9_REGS_BASE + 0x08))
#define REG_PXI_RECV9            *((vu32*)(PXI9_REGS_BASE + 0x0C))


/* AES */
#define AES_REGS_BASE            (IO_MEM_ARM9_ONLY + 0x9000)
#define REG_AESCNT               *((vu32*)(AES_REGS_BASE + 0x000))
#define REG_AESBLKCNT            *((vu32*)(AES_REGS_BASE + 0x004))
#define REG_AESBLKCNTH1          *((vu16*)(AES_REGS_BASE + 0x004))
#define REG_AESBLKCNTH2          *((vu16*)(AES_REGS_BASE + 0x006))
#define REG_AESWRFIFO            *((vu32*)(AES_REGS_BASE + 0x008))
#define REG_AESRDFIFO            *((vu32*)(AES_REGS_BASE + 0x00C))
#define REG_AESKEYSEL            *((vu8* )(AES_REGS_BASE + 0x010))
#define REG_AESKEYCNT            *((vu8* )(AES_REGS_BASE + 0x011))
#define REG_AESCTR                ((vu32*)(AES_REGS_BASE + 0x020))
#define REG_AESMAC                ((vu32*)(AES_REGS_BASE + 0x030))

#define REG_AESKEY0               ((vu32*)(AES_REGS_BASE + 0x040))
#define REG_AESKEYX0              ((vu32*)(AES_REGS_BASE + 0x050))
#define REG_AESKEYY0              ((vu32*)(AES_REGS_BASE + 0x060))
#define REG_AESKEY1               ((vu32*)(AES_REGS_BASE + 0x070))
#define REG_AESKEYX1              ((vu32*)(AES_REGS_BASE + 0x080))
#define REG_AESKEYY1              ((vu32*)(AES_REGS_BASE + 0x090))
#define REG_AESKEY2               ((vu32*)(AES_REGS_BASE + 0x0A0))
#define REG_AESKEYX2              ((vu32*)(AES_REGS_BASE + 0x0B0))
#define REG_AESKEYY2              ((vu32*)(AES_REGS_BASE + 0x0C0))
#define REG_AESKEY3               ((vu32*)(AES_REGS_BASE + 0x0D0))
#define REG_AESKEYX3              ((vu32*)(AES_REGS_BASE + 0x0E0))
#define REG_AESKEYY3              ((vu32*)(AES_REGS_BASE + 0x0F0))

#define REG_AESKEYFIFO            ((vu32*)(AES_REGS_BASE + 0x100))
#define REG_AESKEYXFIFO           ((vu32*)(AES_REGS_BASE + 0x104))
#define REG_AESKEYYFIFO           ((vu32*)(AES_REGS_BASE + 0x108))


/* SHA */
#define SHA_REGS_BASE            (IO_MEM_ARM9_ONLY + 0xA000)
#define REG_SHA_CNT              *((vu32*)(SHA_REGS_BASE + 0x00))
#define REG_SHA_BLKCNT           *((vu32*)(SHA_REGS_BASE + 0x04))
#define REG_SHA_HASH              ((u32* )(SHA_REGS_BASE + 0x40))
#define REG_SHA_INFIFO            (       (SHA_REGS_BASE + 0x80))


/* PRNG */
#define PRNG_REGS_BASE           (IO_MEM_ARM9_ONLY + 0x11000)
#define REG_PRNG                  ((vu32*)(PRNG_REGS_BASE))


/* OTP */
#define OTP_REGS_BASE            (IO_MEM_ARM9_ONLY + 0x12000)
#define REG_OTP                   ((vu32*)(OTP_REGS_BASE))
#endif


/* PDN */
#define PDN_REGS_BASE            (IO_MEM_ARM9_ARM11 + 0x40000)
#define REG_PDN_GPU_CNT          *((vu32*)(PDN_REGS_BASE + 0x1200))
#define REG_PDN_GPU_CNT2         *((vu32*)(PDN_REGS_BASE + 0x1204))
#define REG_PDN_GPU_CNT2_8BIT    *((vu8* )(PDN_REGS_BASE + 0x1204))
#define REG_PDN_GPU_CNT4         *((vu8* )(PDN_REGS_BASE + 0x1208))
#define REG_PDN_GPU_CNT3         *((vu16*)(PDN_REGS_BASE + 0x1210))
#define REG_PDN_MPCORE_CLKCNT    *((vu16*)(PDN_REGS_BASE + 0x1300))


/* SPI */
#define SPI_REGS_BUS2_BASE       (IO_MEM_ARM9_ARM11 + 0x60000)
#define REG_SPI_BUS2_CNT         *((vu16*)(SPI_REGS_BUS2_BASE + 0x00))
#define REG_SPI_BUS2_DATA        *((vu8* )(SPI_REGS_BUS2_BASE + 0x02))


/* PXI11 */
#define PXI11_REGS_BASE          (IO_MEM_ARM9_ARM11 + 0x63000)
#define REG_PXI_SYNC11           *((vu32*)(PXI11_REGS_BASE + 0x00))
#define REG_PXI_CNT11            *((vu32*)(PXI11_REGS_BASE + 0x04))
#define REG_PXI_SEND11           *((vu32*)(PXI11_REGS_BASE + 0x08))
#define REG_PXI_RECV11           *((vu32*)(PXI11_REGS_BASE + 0x0C))


/* NTRCARD */
#define NTRCARD_REGS_BASE        (IO_MEM_ARM9_ARM11 + 0x64000)
#define REG_NTRCARDMCNT          *((vu16*)(NTRCARD_REGS_BASE + 0x00))
#define REG_NTRCARDMDATA         *((vu16*)(NTRCARD_REGS_BASE + 0x02))
#define REG_NTRCARDROMCNT        *((vu32*)(NTRCARD_REGS_BASE + 0x04))
#define REG_NTRCARDCMD            ((vu8* )(NTRCARD_REGS_BASE + 0x08))
#define REG_NTRCARDSEEDX_L       *((vu32*)(NTRCARD_REGS_BASE + 0x10))
#define REG_NTRCARDSEEDY_L       *((vu32*)(NTRCARD_REGS_BASE + 0x14))
#define REG_NTRCARDSEEDX_H       *((vu16*)(NTRCARD_REGS_BASE + 0x18))
#define REG_NTRCARDSEEDY_H       *((vu16*)(NTRCARD_REGS_BASE + 0x1A))
#define REG_NTRCARDFIFO          *((vu32*)(NTRCARD_REGS_BASE + 0x1C))


/* I2C */
#define I2C_REGS_BUS0_BASE       (IO_MEM_ARM9_ARM11 + 0x61000)
#define I2C_REGS_BUS1_BASE       (IO_MEM_ARM9_ARM11 + 0x44000)
#define REG_I2C_BUS0_DATA        *((vu8* )(I2C_REGS_BUS0_BASE + 0x00))
#define REG_I2C_BUS1_DATA        *((vu8* )(I2C_REGS_BUS1_BASE + 0x00))
#define REG_I2C_BUS0_CNT         *((vu8* )(I2C_REGS_BUS0_BASE + 0x01))
#define REG_I2C_BUS1_CNT         *((vu8* )(I2C_REGS_BUS1_BASE + 0x01))


#ifdef ARM11
/* LCD */
#define LCD_REGS_BASE            (IO_MEM_ARM11_ONLY + 0x2000)
#define REG_LCD_COLORFILL_MAIN   *((vu32*)(LCD_REGS_BASE + 0x204))
#define REG_LCD_COLORFILL_SUB    *((vu32*)(LCD_REGS_BASE + 0xA04))
#define REG_LCD_BACKLIGHT_MAIN   *((vu32*)(LCD_REGS_BASE + 0x240))
#define REG_LCD_BACKLIGHT_SUB    *((vu32*)(LCD_REGS_BASE + 0xA40))


/* GPU External Registers */
#define GPU_EXT_REGS_BASE        (IO_MEM_ARM11_ONLY + 0x200000)
#define REG_GPU_EXT_CNT          *((vu32*)(GPU_EXT_REGS_BASE + 0x04))
#endif