blob: 28dc84b4a16c0579afd2c1f0a1807bab62f9a5ab [file] [log] [blame]
/*
* drivers/usb/gadget/aml_tiny_usbtool/platform.h
*
* Copyright (C) 2015 Amlogic, Inc. 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 as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* 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.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __PLATFORM_H__
#define __PLATFORM_H__
//#include "romboot.h"
//Elvis Fool
//#pragma Offwarn(88) /* disable "Expression has no side-effects" print debug info*/
#if 0
/* ISO C Standard Definitions */
typedef char int8_t;
typedef short int int16_t;
typedef int int32_t;
typedef long int64_t;
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long uint64_t;
typedef unsigned char u8_t;
typedef signed char s8_t;
typedef unsigned short u16_t;
typedef signed short s16_t;
typedef unsigned int u32_t;
typedef signed int s32_t;
typedef unsigned long u64_t;
typedef signed long s64_t;
/* Linux definitions */
typedef u8_t __u8;
typedef s8_t __s8;
typedef u16_t __u16;
typedef s16_t __s16;
typedef u32_t __u32;
typedef s32_t __s32;
typedef u64_t __u64;
typedef s64_t __s64;
typedef u8_t u_int8_t;
typedef u16_t u_int16_t;
typedef u32_t u_int32_t;
typedef u64_t u_int64_t;
typedef s8_t s8;
typedef u8_t u8;
typedef s16_t s16;
typedef u16_t u16;
typedef s32_t s32;
typedef u32_t u32;
typedef u64_t u64;
typedef __u16 __le16;
typedef __u16 __be16;
typedef __u32 __le32;
typedef __u32 __be32;
typedef __u64 __le64;
typedef __u64 __be64;
#endif
/* A3,CS2,M3 chip, PORT_A is OTG, work as ROM Boot port */
#ifdef __USE_PORT_B
#define PORT_REG_OFFSET 0x80000
#else
#define PORT_REG_OFFSET 0
#endif
/*M3*/
#define DWC_REG_BASE (0xC9000000 + PORT_REG_OFFSET)
#define PERI_BASE_ADDR 0xc1100000
#define ISABASE 0x01000000
#define PREI_USB_PHY_REG 0xc0000000 //0xC1108400
#define PREI_USB_PHY_A_REG3 0xc0000000
#define PREI_USB_PHY_B_REG4 0xc0000020
#define PREI_USB_PHY_A_POR (1 << 0)
#define PREI_USB_PHY_B_POR (1 << 1)
#define PREI_USB_PHY_CLK_SEL (7 << 5) // changed from A1H
#define PREI_USB_PHY_CLK_GATE (1 << 8)
#define PREI_USB_PHY_B_AHB_RSET (1 << 11)
#define PREI_USB_PHY_B_CLK_RSET (1 << 12)
#define PREI_USB_PHY_B_PLL_RSET (1 << 13)
#define PREI_USB_PHY_A_AHB_RSET (1 << 17)
#define PREI_USB_PHY_A_CLK_RSET (1 << 18)
#define PREI_USB_PHY_A_PLL_RSET (1 << 19)
#define PREI_USB_PHY_A_DRV_VBUS (1 << 20)
#define PREI_USB_PHY_B_DRV_VBUS (1 << 21)
#define PREI_USB_PHY_B_CLK_DETECT (1 << 22)
#define PREI_USB_PHY_CLK_DIV (0x7f << 24)
#define PREI_USB_PHY_A_CLK_DETECT (1 << 31)
#define PREI_USB_PHY_A_REG3_IDDIG_OVR (1 << 23)
#define PREI_USB_PHY_A_REG3_IDDIG_VAL (1 << 24)
#define PREI_USB_PHY_B_REG4_IDDIG_OVR (1 << 23)
#define PREI_USB_PHY_B_REG4_IDDIG_VAL (1 << 24)
/***********************************************/
#define WRITE_PERI_REG(reg, val) *(volatile unsigned *)(PERI_BASE_ADDR + ((reg)<<2)) = (val)
#define READ_PERI_REG(reg) (*(volatile unsigned *)(PERI_BASE_ADDR + ((reg)<<2)))
#define CLEAR_PERIPHS_REG_BITS(reg, mask) WRITE_PERI_REG(reg, (READ_PERI_REG(reg)&(~(mask))))
#define SET_PERIPHS_REG_BITS(reg, mask) WRITE_PERI_REG(reg, (READ_PERI_REG(reg)|(mask)))
#define WRITE_ISA_REG(reg, val) *(volatile unsigned *)(ISABASE + (reg)) = (val)
#define READ_ISA_REG(reg) (*(volatile unsigned *)(ISABASE + (reg)))
#define CLEAR_ISA_REG_MASK(reg, mask) WRITE_ISA_REG(reg, (READ_ISA_REG(reg)&(~mask)))
#define SET_ISA_REG_MASK(reg, mask) WRITE_ISA_REG(reg, (READ_ISA_REG(reg)|(mask)))
/***********************************************/
#define IREG_TIMER_E_COUNT 0x2655
#define flush_cpu_cache()
#define dwc_write_reg32(x, v) (*(volatile uint32_t *)(unsigned long long)(x + DWC_REG_BASE))=v
#define dwc_read_reg32(x) (*(volatile uint32_t*)(unsigned long long)(x + DWC_REG_BASE))
// void dwc_modify_reg32( volatile uint32_t *_reg, const uint32_t _clear_mask, const uint32_t _set_mask)
#define dwc_modify_reg32(x, c, s) (*(volatile uint32_t *)(unsigned long long)(x + DWC_REG_BASE))=( ((dwc_read_reg32(x)) & (~c)) | (s))
//#define __constant_cpu_to_le16(x) (x)
//#define __constant_cpu_to_le32(x) (x)
//#define cpu_to_le16(x) (x)
//#define cpu_to_le32(x) (x)
//#define le16_to_cpu(x) (x)
//#define le32_to_cpu(x) (x)
#define get_unaligned_16(ptr) (((__u8 *)ptr)[0] | (((__u8 *)ptr)[1]<<8))
#define get_unaligned_32(ptr) (((__u8 *)ptr)[0] | (((__u8 *)ptr)[1]<<8) | (((__u8 *)ptr)[2]<<16) | (((__u8 *)ptr)[3]<<24))
#define get_unaligned(ptr) (((__u8 *)ptr)[0] | (((__u8 *)ptr)[1]<<8) | (((__u8 *)ptr)[2]<<16) | (((__u8 *)ptr)[3]<<24))
#ifndef max
#define max(a, b) (((a) > (b))? (a): (b))
#endif
#ifndef min
#define min(a, b) (((a) < (b))? (a): (b))
#endif
#define EXT_CLOCK 0
#define INT_CLOCK 1
// 32 bit TimerE, 1us
#define USB_ROM_CONN_TIMEOUT 5*1000*1000 //us (5s timeout,)
/* Meet with spec */
#define USB_ROM_VER_MAJOR 0
#define USB_ROM_STAGE_MAJOR 0
#define USB_ROM_STAGE_MINOR 16 // IPL = 0, SPL = 8, TPL = 16
#ifdef CONFIG_M6
#define USB_ROM_VER_MINOR 8 // SPEC Version
#else
#define USB_ROM_VER_MINOR 7 // SPEC Version
#endif
#if 1
#define PRINTF(x...) do{}while(0)
#else
#define PRINTF(x...) printf(x)
#endif
#define ERR(x...) PRINTF(x)
#define DBG(x...) PRINTF(x)
#define USB_ERR(x...) PRINTF(x)
#define USB_DBG(x...) PRINTF(x)
static void set_usb_phy_config(int cfg);
void usb_parameter_init(int time_out);
int chip_utimer_set(int val);
int chip_watchdog(void);
//#define udelay __udelay
//#define wait_ms(a) _udelay(a*1000);
int update_utime(void);
int get_utime(void);
//int chip_watchdog(void);
//#define usb_memcpy(dst,src,len) rom_memcpy((unsigned)src,(unsigned)dst,(unsigned)len)
//#define usb_memcpy_32bits(dst,src,len) rom_memcpy((unsigned)src,(unsigned)dst,(unsigned)len)
#endif