156 lines
5.0 KiB
C
Executable File
Vendored
156 lines
5.0 KiB
C
Executable File
Vendored
/*
|
|
* ms_platform.h- Sigmastar
|
|
*
|
|
* Copyright (c) [2019~2020] SigmaStar Technology.
|
|
*
|
|
*
|
|
* This software is licensed under the terms of the GNU General Public
|
|
* License version 2, as published by the Free Software Foundation, and
|
|
* may be copied, distributed, and modified under those terms.
|
|
*
|
|
* 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 version 2 for more details.
|
|
*
|
|
*/
|
|
#ifndef __MS_PLATFORM_H__
|
|
#define __MS_PLATFORM_H__
|
|
|
|
#include "mdrv_device_id.h"
|
|
#include "linux/proc_fs.h"
|
|
|
|
#define MS_IO_OFFSET 0xDE000000
|
|
/* macro to get at MMIO space when running virtually */
|
|
#define IO_ADDRESS(x) ( (u32)(x) + MS_IO_OFFSET )
|
|
//#define __io_address(n) ((void __iomem __force *)IO_ADDRESS(n))
|
|
|
|
// Register macros
|
|
#define GET_REG_ADDR(x, y) ((x) + ((y) << 2))
|
|
#define GET_BASE_ADDR_BY_BANK(x, y) ((x) + ((y) << 1))
|
|
|
|
/* read register by byte */
|
|
#define ms_readb(a) (*(volatile unsigned char *)IO_ADDRESS(a))
|
|
|
|
/* read register by word */
|
|
#define ms_readw(a) (*(volatile unsigned short *)IO_ADDRESS(a))
|
|
|
|
/* read register by long */
|
|
#define ms_readl(a) (*(volatile unsigned int *)IO_ADDRESS(a))
|
|
|
|
/* write register by byte */
|
|
#define ms_writeb(v,a) (*(volatile unsigned char *)IO_ADDRESS(a) = (v))
|
|
|
|
/* write register by word */
|
|
#define ms_writew(v,a) (*(volatile unsigned short *)IO_ADDRESS(a) = (v))
|
|
|
|
/* write register by long */
|
|
#define ms_writel(v,a) (*(volatile unsigned int *)IO_ADDRESS(a) = (v))
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
//
|
|
// Macros: INREGx/OUTREGx/SETREGx/CLRREGx
|
|
//
|
|
// This macros encapsulates basic I/O operations.
|
|
// Memory address space operation is used on all platforms.
|
|
//
|
|
#define INREG8(x) ms_readb(x)
|
|
#define OUTREG8(x, y) ms_writeb((u8)(y), x)
|
|
#define SETREG8(x, y) OUTREG8(x, INREG8(x)|(y))
|
|
#define CLRREG8(x, y) OUTREG8(x, INREG8(x)&~(y))
|
|
#define INREGMSK8(x, y) (INREG8(x) & (y))
|
|
#define OUTREGMSK8(x, y, z) OUTREG8(x, ((INREG8(x)&~(z))|((y)&(z))))
|
|
|
|
#define INREG16(x) ms_readw(x)
|
|
#define OUTREG16(x, y) ms_writew((u16)(y), x)
|
|
#define SETREG16(x, y) OUTREG16(x, INREG16(x)|(y))
|
|
#define CLRREG16(x, y) OUTREG16(x, INREG16(x)&~(y))
|
|
#define INREGMSK16(x, y) (INREG16(x) & (y))
|
|
#define OUTREGMSK16(x, y, z) OUTREG16(x, ((INREG16(x)&~(z))|((y)&(z))))
|
|
|
|
#define INREG32(x) ms_readl(x)
|
|
#define OUTREG32(x, y) ms_writel((u32)(y), x)
|
|
#define SETREG32(x, y) OUTREG32(x, INREG32(x)|(y))
|
|
#define CLRREG32(x, y) OUTREG32(x, INREG32(x)&~(y))
|
|
#define INREGMSK32(x, y) (INREG32(x) & (y))
|
|
#define OUTREGMSK32(x, y, z) OUTREG32(x, ((INREG32(x)&~(z))|((y)&(z))))
|
|
|
|
|
|
#define PM_READ32(x) ((((unsigned int)INREG16(x+4)<<16)&0xFFFF0000) | (INREG16(x) & 0x0000FFFF))
|
|
#define PM_WRITE32(x,y) do{OUTREG16(x,(y&0x0000FFFF));OUTREG16((x+4),((y>>16)&0x0000FFFF));}while(0)
|
|
|
|
#define XTAL_26000K 26000000
|
|
#define XTAL_24000K 24000000
|
|
#define XTAL_16369K 16369000
|
|
#define XTAL_16367K 16367000
|
|
|
|
#define STR_HELPER(x) #x
|
|
#define STR(x) STR_HELPER(x)
|
|
|
|
struct MS_BIN_OPTION
|
|
{
|
|
u8 name[8];
|
|
u8 args[8];
|
|
};
|
|
|
|
typedef enum
|
|
{
|
|
MS_BOOT_DEV_NONE=0x00,
|
|
MS_BOOT_DEV_SPI=0x01,
|
|
MS_BOOT_DEV_EMMC=0x02,
|
|
MS_BOOT_DEV_8051=0x03,
|
|
} MS_BOOT_DEV_TYPE;
|
|
|
|
typedef enum
|
|
{
|
|
MS_STORAGE_UNKNOWN =0x00,
|
|
MS_STORAGE_NOR,
|
|
MS_STORAGE_NAND,
|
|
MS_STORAGE_EMMC,
|
|
MS_STORAGE_SPINAND_ECC,
|
|
MS_STORAGE_SPINAND_NOECC,
|
|
} MS_STORAGE_TYPE;
|
|
|
|
extern void Chip_Flush_MIU_Pipe(void);
|
|
extern void Chip_Flush_Memory(void);
|
|
extern void Chip_Read_Memory(void);
|
|
|
|
extern int Chip_Cache_Outer_Is_Enabled(void);
|
|
extern void Chip_Flush_Cache_Range_VA_PA(unsigned long u32VAddr,unsigned long u32PAddr,unsigned long u32Size);
|
|
extern void Chip_Clean_Cache_Range_VA_PA(unsigned long u32VAddr,unsigned long u32PAddr,unsigned long u32Size);
|
|
extern void Chip_Flush_Cache_Range(unsigned long u32Addr, unsigned long u32Size);
|
|
extern void Chip_Clean_Cache_Range(unsigned long u32Addr, unsigned long u32Size);
|
|
extern void Chip_Inv_Cache_Range(unsigned long u32Addr, unsigned long u32Size);
|
|
extern void Chip_Flush_CacheAll(void);
|
|
|
|
extern u64 Chip_Phys_to_MIU(u64 phys);
|
|
extern u64 Chip_MIU_to_Phys(u64 miu);
|
|
|
|
extern char* Chip_Get_Platform_Name(void);
|
|
extern int Chip_Get_Device_ID(void);
|
|
extern int Chip_Get_Revision(void);
|
|
|
|
extern int Chip_Boot_Get_Dev_Type(void);
|
|
extern unsigned long long Chip_Get_RIU_Phys(void);
|
|
extern int Chip_Get_RIU_Size(void);
|
|
extern int Chip_Function_Set(int function_id, int param);
|
|
|
|
extern int Chip_Get_Storage_Type(void);
|
|
extern int Chip_Get_Package_Type(void);
|
|
extern u64 Chip_Get_US_Ticks(void);
|
|
|
|
typedef enum
|
|
{
|
|
CHIP_FUNC_UART_ENABLE_LINE=0x0001,
|
|
CHIP_FUNC_UART_DISABLE_LINE,
|
|
CHIP_FUNC_IR_ENABLE,
|
|
CHIP_FUNC_USB_VBUS_CONTROL,
|
|
CHIP_FUNC_MCM_DISABLE_ID,
|
|
CHIP_FUNC_MCM_ENABLE_ID,
|
|
CHIP_FUNC_END,
|
|
CHIP_FUNC_DUMMY=0xFFFF
|
|
} EN_CHIP_FUNC_ID;
|
|
|
|
#endif
|