#ifndef _MV78XX0REG_H_
#define _MV78XX0REG_H_
#include <arm/marvell/mvsocreg.h>
#define MV78XX0_UNITID_DDR MVSOC_UNITID_DDR
#define MV78XX0_UNITID_DEVBUS MVSOC_UNITID_DEVBUS
#define MV78XX0_UNITID_LMB MVSOC_UNITID_MLMB
#define MV78XX0_UNITID_GBE23 0x3
#define MV78XX0_UNITID_PEX MVSOC_UNITID_PEX
#define MV78XX0_UNITID_USB 0x5
#define MV78XX0_UNITID_IDMA 0x6
#define MV78XX0_UNITID_XOR 0x6
#define MV78XX0_UNITID_GBE01 0x7
#define MV78XX0_UNITID_PEX1 0x8
#define MV78XX0_UNITID_CRYPT 0x9
#define MV78XX0_UNITID_SA 0x9
#define MV78XX0_UNITID_SATA 0xa
#define MV78XX0_UNITID_TDM 0xb
#define MV78XX0_ATTR_DEVICE_CS0 0x3e
#define MV78XX0_ATTR_DEVICE_CS1 0x3d
#define MV78XX0_ATTR_DEVICE_CS2 0x3b
#define MV78XX0_ATTR_DEVICE_CS3 0x37
#define MV78XX0_ATTR_BOOT_CS 0x2f
#define MV78XX0_ATTR_SPI 0x1f
#define MV78XX0_ATTR_PEX_0_IO 0xe0
#define MV78XX0_ATTR_PEX_0_MEM 0xe8
#define MV78XX0_ATTR_PEX_1_IO 0xd0
#define MV78XX0_ATTR_PEX_1_MEM 0xd8
#define MV78XX0_ATTR_PEX_2_IO 0xb0
#define MV78XX0_ATTR_PEX_2_MEM 0xb8
#define MV78XX0_ATTR_PEX_3_IO 0x70
#define MV78XX0_ATTR_PEX_3_MEM 0x78
#define MV78XX0_ATTR_CRYPT 0x00
#define MV78XX0_IRQ_ERRSUM 0
#define MV78XX0_IRQ_SPI 1
#define MV78XX0_IRQ_TWSI0 2
#define MV78XX0_IRQ_TWSI1 3
#define MV78XX0_IRQ_IDMA0 4
#define MV78XX0_IRQ_IDMA1 5
#define MV78XX0_IRQ_IDMA2 6
#define MV78XX0_IRQ_IDMA3 7
#define MV78XX0_IRQ_TIMER0 8
#define MV78XX0_IRQ_TIMER1 9
#define MV78XX0_IRQ_TIMER2 10
#define MV78XX0_IRQ_TIMER3 11
#define MV78XX0_IRQ_UART0 12
#define MV78XX0_IRQ_UART1 13
#define MV78XX0_IRQ_UART2 14
#define MV78XX0_IRQ_UART3 15
#define MV78XX0_IRQ_USB0 16
#define MV78XX0_IRQ_USB1 17
#define MV78XX0_IRQ_USB2 18
#define MV78XX0_IRQ_CRYPTO 19
#define MV78XX0_IRQ_XOR0 22
#define MV78XX0_IRQ_XOR1 23
#define MV78XX0_IRQ_SATA 26
#define MV78XX0_IRQ_TDMI_INT 27
#define MV78XX0_IRQ_PEX00INTA 32
#define MV78XX0_IRQ_PEX01INTA 33
#define MV78XX0_IRQ_PEX02INTA 34
#define MV78XX0_IRQ_PEX03INTA 35
#define MV78XX0_IRQ_PEX10INTA 36
#define MV78XX0_IRQ_PEX11INTA 37
#define MV78XX0_IRQ_PEX12INTA 38
#define MV78XX0_IRQ_PEX13INTA 39
#define MV78XX0_IRQ_GE00SUM 40
#define MV78XX0_IRQ_GE00RX 41
#define MV78XX0_IRQ_GE00TX 42
#define MV78XX0_IRQ_GE00MISC 43
#define MV78XX0_IRQ_GE01SUM 44
#define MV78XX0_IRQ_GE01RX 45
#define MV78XX0_IRQ_GE01TX 46
#define MV78XX0_IRQ_GE01MISC 47
#define MV78XX0_IRQ_GE10SUM 48
#define MV78XX0_IRQ_GE10RX 49
#define MV78XX0_IRQ_GE10TX 50
#define MV78XX0_IRQ_GE10MISC 51
#define MV78XX0_IRQ_GE11SUM 52
#define MV78XX0_IRQ_GE11RX 53
#define MV78XX0_IRQ_GE11TX 54
#define MV78XX0_IRQ_GE11MISC 55
#define MV78XX0_IRQ_GPIO0_7 56
#define MV78XX0_IRQ_GPIO8_15 57
#define MV78XX0_IRQ_GPIO16_23 58
#define MV78XX0_IRQ_GPIO24_31 59
#define MV78XX0_IRQ_DB_IN 60
#define MV78XX0_IRQ_DB_OUT 61
#define MV78XX0_UNITID2PHYS(uid) ((MV78XX0_UNITID_ ## uid) << 16)
#define MV78XX0_GPP_BASE (MVSOC_DEVBUS_BASE + 0x0100)
#define MV78XX0_GPP_SIZE 0x100
#define MV78XX0_TWSI1_BASE (MVSOC_DEVBUS_BASE + 0x1100)
#define MV78XX0_COM2_BASE (MVSOC_DEVBUS_BASE + 0x2200)
#define MV78XX0_COM3_BASE (MVSOC_DEVBUS_BASE + 0x2300)
#define MV78XX0_SAMPLE_AT_RESET_LOW (MVSOC_DEVBUS_BASE + 0x0030)
#define MV78XX0_SAMPLE_AT_RESET_HIGH (MVSOC_DEVBUS_BASE + 0x0034)
#define MV78XX0_MLMB_NWINDOW 14
#define MV78XX0_MLMB_NREMAP 8
#define MV78XX0_ICI_BASE(cpu) ((cpu)->ci_cpuid << 14)
#define MV78XX0_ICI_MIECR 0x200
#define MV78XX0_ICI_MICLR 0x204
#define MV78XX0_ICI_MICHR 0x208
#define MV78XX0_ICI_IRQIMER 0x20c
#define MV78XX0_ICI_IRQIMLR 0x210
#define MV78XX0_ICI_IRQIMHR 0x214
#define MV78XX0_ICI_IRQSCR 0x218
#define MV78XX0_ICI_FIQIMER 0x21c
#define MV78XX0_ICI_FIQIMLR 0x220
#define MV78XX0_ICI_FIQIMHR 0x224
#define MV78XX0_ICI_FIQSCR 0x228
#define MV78XX0_ICI_EIMER 0x22c
#define MV78XX0_ICI_EIMLR 0x230
#define MV78XX0_ICI_EIMHR 0x234
#define MV78XX0_ICI_ESCR 0x238
#define IRQ_IS_TIMER(n, irq) ((irq) == MV78XX0_IRQ_TIMER ## n)
#define MLMBI_TIMER(n) MVSOC_MLMB_MLMBI_CPUTIMER ## n ## INTREQ
#define TIMER_IRQ2MLMBIMR(irq) \
IRQ_IS_TIMER(0, irq) ? MLMBI_TIMER(0) : \
(IRQ_IS_TIMER(1, irq) ? MLMBI_TIMER(1) : \
(IRQ_IS_TIMER(2, irq) ? MLMBI_TIMER(2) : MLMBI_TIMER(3)))
#define MV78XX0_PEX1_BASE (MV78XX0_UNITID2PHYS(PEX1))
#define MV78XX0_USB_BASE (MV78XX0_UNITID2PHYS(USB))
#define MV78XX0_IDMAC_BASE (MV78XX0_UNITID2PHYS(IDMA))
#define MV78XX0_GBE0_BASE (MV78XX0_UNITID2PHYS(GBE01))
#define MV78XX0_GBE1_BASE (MV78XX0_UNITID2PHYS(GBE01) + MVGBE_SIZE)
#define MV78XX0_GBE2_BASE (MV78XX0_UNITID2PHYS(GBE23))
#define MV78XX0_GBE3_BASE (MV78XX0_UNITID2PHYS(GBE23) + MVGBE_SIZE)
#define MV78XX0_CESA_BASE (MV78XX0_UNITID2PHYS(CRYPT) + 0xd000)
#define MV78XX0_SATAHC_BASE (MV78XX0_UNITID2PHYS(SATA))
#define MV78XX0_TDM_BASE (MV78XX0_UNITID2PHYS(TDM))
#endif