blob: e293e2b89c972f44d73ae54bc2a00070fbb756ab [file] [log] [blame]
/********************************************************************************
* Marvell GPL License Option
*
* If you received this File from Marvell, you may opt to use, redistribute and/or
* modify this File in accordance with the terms and conditions of the General
* Public License Version 2, June 1991 (the "GPL License"), a copy of which is
* available along with the File in the license.txt file or by writing to the Free
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
* on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
*
* THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
* WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
* DISCLAIMED. The GPL License provides additional details about this warranty
* disclaimer.
******************************************************************************/
#ifndef _SYSTEMMANAGER_H_
#define _SYSTEMMANAGER_H_
//#include "SysMgr.h"
#define CPUINDEX 1
#define SM_ITCM_BASE 0x00000000
#define SM_ITCM_SIZE 0x00008000 // 32k
#define SM_ITCM_END 0x00008000
#define SM_ITCM_ALIAS_SIZE 0x00020000 // 128k
#define SM_DTCM_BASE 0x04000000
#define SM_DTCM_SIZE 0x00004000 // 16k
#define SM_DTCM_END 0x04004000
#define SM_DTCM_ALIAS_SIZE 0x00020000 // 128k
#define SM_APBC_BASE 0x10000000
#define SM_APBC_SIZE 0x00010000 // 64k
#define SM_APBC_END 0x10010000
#define SM_APBC_ALIAS_SIZE 0x00010000 // 64k
#define SM_SECM_BASE 0x40000000
#define SM_SECM_SIZE 0x00010000 //64k
#define SM_SECM_END 0x40010000
#define SM_SECM_ALIAS_SIZE 0x00010000 // 64k
#define SOC_ITCM_BASE 0xf7f80000
#define SOC_DTCM_BASE 0xf7fa0000
#define SOC_APBC_BASE 0xf7fc0000
#define SOC_SECM_BASE 0xf7fd0000
#if ( CPUINDEX == 2 )
//#define SM_APBC( reg ) ( (INT32)(reg) + SM_APBC_BASE )
#define SM_APBC( reg ) ( (INT32)(reg) )
#else
//#define SM_APBC( reg ) ( (INT32)(reg) + SOC_APBC_BASE )
#define SM_APBC( reg ) ( (INT32)(reg) - SM_APBC_BASE + SOC_APBC_BASE )
#endif
#define SOC_ITCM( addr ) ( (INT)addr - SM_ITCM_BASE + SOC_ITCM_BASE )
#define SOC_DTCM( addr ) ( (INT)addr - SM_DTCM_BASE + SOC_DTCM_BASE )
#define SOC_APBC( addr ) ( (INT)addr - SM_APBC_BASE + SOC_APBC_BASE )
#define SOC_SECM( addr ) ( (INT)addr - SM_SECM_BASE + SOC_SECM_BASE )
#define SM_SM_APB_ICTL_BASE (SM_APBC_BASE)
#define SM_SM_APB_WDT0_BASE (SM_APBC_BASE + 0x1000)
#define SM_SM_APB_WDT1_BASE (SM_APBC_BASE + 0x2000)
#define SM_SM_APB_WDT2_BASE (SM_APBC_BASE + 0x3000)
#define SM_SM_APB_TIMERS_BASE (SM_APBC_BASE + 0x4000)
#define SM_SM_APB_COUNTER_BASE (SM_APBC_BASE + 0x5000)
#define SM_SM_APB_SPI_BASE (SM_APBC_BASE + 0x6000)
#define SM_SM_APB_I2C0_BASE (SM_APBC_BASE + 0x7000)
#define SM_SM_APB_I2C1_BASE (SM_APBC_BASE + 0x8000)
#define SM_SM_APB_UART0_BASE (SM_APBC_BASE + 0x9000)
#define SM_SM_APB_UART1_BASE (SM_APBC_BASE + 0xA000)
#define SM_SM_APB_UART2_BASE (SM_APBC_BASE + 0xB000)
#define SM_SM_APB_GPIO_BASE (SM_APBC_BASE + 0xC000)
#define SM_SM_SYS_CTRL_REG_BASE (SM_APBC_BASE + 0xD000)
#define LSb32SS_SM_ICTL_IRQ_SM_WDT0 0
#define LSb32SS_SM_ICTL_IRQ_SM_WDT1 1
#define LSb32SS_SM_ICTL_IRQ_SM_WDT2 2
#define LSb32SS_SM_ICTL_IRQ_SM_TIMERS 3
#define LSb32SS_SM_ICTL_IRQ_RTC 4
#define LSb32SS_SM_ICTL_IRQ_SM_SPI 5
#define LSb32SS_SM_ICTL_IRQ_SM_I2C0 6
#define LSb32SS_SM_ICTL_IRQ_SM_I2C1 7
#define LSb32SS_SM_ICTL_IRQ_SM_UART0 8
#define LSb32SS_SM_ICTL_IRQ_SM_UART1 9
#define LSb32SS_SM_ICTL_IRQ_SM_UART2 10
#define LSb32SS_SM_ICTL_IRQ_SM_GPIO_A 11
#define LSb32SS_SM_ICTL_IRQ_ADC 12
#if 1
#define MV_SM_READ_REG32( reg ) ( *( (UINT32*)SM_APBC( reg ) ) )
#define MV_SM_READ_REG8( reg ) ( *( (UCHAR*)SM_APBC( reg ) ) )
#define MV_SM_WRITE_REG32( reg, value ) ( *( (UINT32*)SM_APBC( reg ) ) = (UINT32)( value ) )
#define MV_SM_WRITE_REG8( reg, value ) ( *( (UCHAR*)SM_APBC( reg ) ) = (UCHAR)( value ) )
#else
#define MV_SM_READ_REG32( reg ) ( *( (UINT32*)SM_APBC( reg ) ) )
#define MV_SM_READ_REG8( reg ) ( *( (UCHAR*)SM_APBC( reg ) ) )
#define MV_SM_WRITE_REG32( reg, value ) { ( *( (UINT32*)SM_APBC( reg ) ) = (UINT32)( value ) ); printf( "reg 0x%8.8x = 0x%8.8x\n", SM_APBC(reg), value ); }
#define MV_SM_WRITE_REG8( reg, value ) { ( *( (UCHAR*)SM_APBC( reg ) ) = (UCHAR)( value ) ); printf( "reg 0x%8.8x = 0x%2.2x\n", SM_APBC(reg), value ); }
#endif
// define module ID for each module
#define MV_SM_ID_SYS 1
#define MV_SM_ID_COMM 2
#define MV_SM_ID_IR 3
#define MV_SM_ID_KEY 4
#define MV_SM_ID_POWER 5
#define MV_SM_ID_WD 6
#define MV_SM_ID_TEMP 7
#define MV_SM_ID_VFD 8
#define MV_SM_ID_SPI 9
#define MV_SM_ID_I2C 10
#define MV_SM_ID_UART 11
// define SM state
#define MV_SM_STATE_COLDBOOTUP 1
#define MV_SM_STATE_WAIT_WARMUP_0_RESP 2
#define MV_SM_STATE_WARMUP 3
#define MV_SM_STATE_WAIT_WARMDOWN_RESP 4
#define MV_SM_STATE_WARMDOWN 5
#define MV_SM_STATE_WAIT_WARMUP_RESP 6
// following assignment is so we can assign Beetle-specific value that is different from
// a normal STATE_WARMUP_1...
#define reserved_MV_SM_STATE 7
#define MV_SM_POWER_BOOT_MODE 8 /* also used as msg type to SM */
#define MV_SM_STATE_WAIT_WARMDOWN_2_RESP (0xA0)
#define MV_SM_STATE_WARMDOWN_2 (0xA1)
#define MV_SM_STATE_WAIT_WARMUP_2_RESP (0xA2)
#define MV_SM_STATE_WARMUP_2 (0xA3)
// define message content
#define MV_SM_POWER_WARMUP_0_RESP (MV_SM_STATE_WAIT_WARMUP_0_RESP)
#define MV_SM_POWER_WARMDOWN_1_RESP (MV_SM_STATE_WAIT_WARMDOWN_RESP)
#define MV_SM_POWER_WARMUP_1_RESP (MV_SM_STATE_WAIT_WARMUP_RESP)
#define MV_SM_POWER_WARMDOWN_2_RESP (MV_SM_STATE_WAIT_WARMDOWN_2_RESP)
#define MV_SM_POWER_WARMUP_2_RESP (MV_SM_STATE_WAIT_WARMUP_2_RESP)
#define MV_SoC_STATE_COLDBOOT 0x21
// define SoC state
//
#define MV_SoC_STATE_SYSPOWERON 0
#define MV_SoC_STATE_SYSRESET 0xFF
#define MV_SoC_STATE_COLDBOOTUP (MV_SM_STATE_COLDBOOTUP)
#define MV_SoC_STATE_WARMUP_0_RESP (MV_SM_POWER_WARMUP_0_RESP)
#define MV_SoC_STATE_WARMUP_0 (MV_SM_STATE_WAIT_WARMUP_0_RESP)
#define MV_SoC_STATE_WARMDOWN_1_RESP (MV_SM_POWER_WARMDOWN_1_RESP)
#define MV_SoC_STATE_WARMDOWN_1 (MV_SM_STATE_WAIT_WARMDOWN_RESP)
#define MV_SoC_STATE_WARMUP_1_RESP (MV_SM_POWER_WARMUP_1_RESP)
#define MV_SoC_STATE_WARMUP_1 (MV_SM_STATE_WAIT_WARMUP_RESP)
#define MV_SoC_STATE_WARMUP_2 (MV_SM_STATE_WAIT_WARMUP_2_RESP)
#define MV_SoC_STATE_WARMDOWN_2 (MV_SM_STATE_WAIT_WARMDOWN_2_RESP)
// Beetle specific variation on STATE_WARMUP_1. When bootloader sees it, he should skip
// loading SM with sm.bin as he'd normally do, and then respond to it with the same message
// he would use with MV_SoC_STATE_WARMUP_1.
#define MV_SoC_STATE_WARMUP_FROM_DDR_OFF_1 (reserved_MV_SM_STATE)
#define MV_SoC_STATE_BOOT_RECOVERY_KERNEL (MV_SM_POWER_BOOT_MODE) /* state requesting recovery mode*/
#define MV_SM_RSTFLAG_COLD 0xFFFF
#define MV_SM_RSTFLAG_WARM 0xFF00
#define MV_SM_TEMP_CPU_TYPE 0xCC
#define MV_SM_TEMP_CPU_TYPE_B0 0xB0
//#define DYNAMIC_MODULE
#endif // #ifndef _SYSTEMMANAGER_H_