1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2010 3*4882a593Smuzhiyun * Texas Instruments, <www.ti.com> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Authors: 6*4882a593Smuzhiyun * Aneesh V <aneesh@ti.com> 7*4882a593Smuzhiyun * Sricharan R <r.sricharan@ti.com> 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef _OMAP5_H_ 13*4882a593Smuzhiyun #define _OMAP5_H_ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__)) 16*4882a593Smuzhiyun #include <asm/types.h> 17*4882a593Smuzhiyun #endif /* !(__KERNEL_STRICT_NAMES || __ASSEMBLY__) */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #include <linux/sizes.h> 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* 22*4882a593Smuzhiyun * L4 Peripherals - L4 Wakeup and L4 Core now 23*4882a593Smuzhiyun */ 24*4882a593Smuzhiyun #define OMAP54XX_L4_CORE_BASE 0x4A000000 25*4882a593Smuzhiyun #define OMAP54XX_L4_WKUP_BASE 0x4Ae00000 26*4882a593Smuzhiyun #define OMAP54XX_L4_PER_BASE 0x48000000 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* CONTROL ID CODE */ 29*4882a593Smuzhiyun #define CONTROL_CORE_ID_CODE 0x4A002204 30*4882a593Smuzhiyun #define CONTROL_WKUP_ID_CODE 0x4AE0C204 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #if defined(CONFIG_DRA7XX) 33*4882a593Smuzhiyun #define CONTROL_ID_CODE CONTROL_WKUP_ID_CODE 34*4882a593Smuzhiyun #else 35*4882a593Smuzhiyun #define CONTROL_ID_CODE CONTROL_CORE_ID_CODE 36*4882a593Smuzhiyun #endif 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #if defined(CONFIG_DRA7XX) 39*4882a593Smuzhiyun #define DRA7_USB_OTG_SS1_BASE 0x48890000 40*4882a593Smuzhiyun #define DRA7_USB_OTG_SS1_GLUE_BASE 0x48880000 41*4882a593Smuzhiyun #define DRA7_USB3_PHY1_PLL_CTRL 0x4A084C00 42*4882a593Smuzhiyun #define DRA7_USB3_PHY1_POWER 0x4A002370 43*4882a593Smuzhiyun #define DRA7_USB2_PHY1_POWER 0x4A002300 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #define DRA7_USB_OTG_SS2_BASE 0x488D0000 46*4882a593Smuzhiyun #define DRA7_USB_OTG_SS2_GLUE_BASE 0x488C0000 47*4882a593Smuzhiyun #define DRA7_USB2_PHY2_POWER 0x4A002E74 48*4882a593Smuzhiyun #else 49*4882a593Smuzhiyun #define OMAP5XX_USB_OTG_SS_BASE 0x4A030000 50*4882a593Smuzhiyun #define OMAP5XX_USB_OTG_SS_GLUE_BASE 0x4A020000 51*4882a593Smuzhiyun #define OMAP5XX_USB3_PHY_PLL_CTRL 0x4A084C00 52*4882a593Smuzhiyun #define OMAP5XX_USB3_PHY_POWER 0x4A002370 53*4882a593Smuzhiyun #define OMAP5XX_USB2_PHY_POWER 0x4A002300 54*4882a593Smuzhiyun #endif 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun /* To be verified */ 57*4882a593Smuzhiyun #define OMAP5430_CONTROL_ID_CODE_ES1_0 0x0B94202F 58*4882a593Smuzhiyun #define OMAP5430_CONTROL_ID_CODE_ES2_0 0x1B94202F 59*4882a593Smuzhiyun #define OMAP5432_CONTROL_ID_CODE_ES1_0 0x0B99802F 60*4882a593Smuzhiyun #define OMAP5432_CONTROL_ID_CODE_ES2_0 0x1B99802F 61*4882a593Smuzhiyun #define DRA752_CONTROL_ID_CODE_ES1_0 0x0B99002F 62*4882a593Smuzhiyun #define DRA752_CONTROL_ID_CODE_ES1_1 0x1B99002F 63*4882a593Smuzhiyun #define DRA752_CONTROL_ID_CODE_ES2_0 0x2B99002F 64*4882a593Smuzhiyun #define DRA722_CONTROL_ID_CODE_ES1_0 0x0B9BC02F 65*4882a593Smuzhiyun #define DRA722_CONTROL_ID_CODE_ES2_0 0x1B9BC02F 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* UART */ 68*4882a593Smuzhiyun #define UART1_BASE (OMAP54XX_L4_PER_BASE + 0x6a000) 69*4882a593Smuzhiyun #define UART2_BASE (OMAP54XX_L4_PER_BASE + 0x6c000) 70*4882a593Smuzhiyun #define UART3_BASE (OMAP54XX_L4_PER_BASE + 0x20000) 71*4882a593Smuzhiyun #define UART4_BASE (OMAP54XX_L4_PER_BASE + 0x6e000) 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun /* General Purpose Timers */ 74*4882a593Smuzhiyun #define GPT1_BASE (OMAP54XX_L4_WKUP_BASE + 0x18000) 75*4882a593Smuzhiyun #define GPT2_BASE (OMAP54XX_L4_PER_BASE + 0x32000) 76*4882a593Smuzhiyun #define GPT3_BASE (OMAP54XX_L4_PER_BASE + 0x34000) 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun /* Watchdog Timer2 - MPU watchdog */ 79*4882a593Smuzhiyun #define WDT2_BASE (OMAP54XX_L4_WKUP_BASE + 0x14000) 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun /* QSPI */ 82*4882a593Smuzhiyun #define QSPI_BASE 0x4B300000 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* SATA */ 85*4882a593Smuzhiyun #define DWC_AHSATA_BASE 0x4A140000 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun /* 88*4882a593Smuzhiyun * Hardware Register Details 89*4882a593Smuzhiyun */ 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun /* Watchdog Timer */ 92*4882a593Smuzhiyun #define WD_UNLOCK1 0xAAAA 93*4882a593Smuzhiyun #define WD_UNLOCK2 0x5555 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun /* GP Timer */ 96*4882a593Smuzhiyun #define TCLR_ST (0x1 << 0) 97*4882a593Smuzhiyun #define TCLR_AR (0x1 << 1) 98*4882a593Smuzhiyun #define TCLR_PRE (0x1 << 5) 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /* Control Module */ 101*4882a593Smuzhiyun #define LDOSRAM_ACTMODE_VSET_IN_MASK (0x1F << 5) 102*4882a593Smuzhiyun #define LDOSRAM_VOLT_CTRL_OVERRIDE 0x0401040f 103*4882a593Smuzhiyun #define CONTROL_EFUSE_1_OVERRIDE 0x1C4D0110 104*4882a593Smuzhiyun #define CONTROL_EFUSE_2_OVERRIDE 0x00084000 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* LPDDR2 IO regs */ 107*4882a593Smuzhiyun #define CONTROL_LPDDR2IO_SLEW_125PS_DRV8_PULL_DOWN 0x1C1C1C1C 108*4882a593Smuzhiyun #define CONTROL_LPDDR2IO_SLEW_325PS_DRV8_GATE_KEEPER 0x9E9E9E9E 109*4882a593Smuzhiyun #define CONTROL_LPDDR2IO_SLEW_315PS_DRV12_PULL_DOWN 0x7C7C7C7C 110*4882a593Smuzhiyun #define LPDDR2IO_GR10_WD_MASK (3 << 17) 111*4882a593Smuzhiyun #define CONTROL_LPDDR2IO_3_VAL 0xA0888C00 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /* CONTROL_EFUSE_2 */ 114*4882a593Smuzhiyun #define CONTROL_EFUSE_2_NMOS_PMOS_PTV_CODE_1 0x00ffc000 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun #define SDCARD_BIAS_PWRDNZ (1 << 27) 117*4882a593Smuzhiyun #define SDCARD_PWRDNZ (1 << 26) 118*4882a593Smuzhiyun #define SDCARD_BIAS_HIZ_MODE (1 << 25) 119*4882a593Smuzhiyun #define SDCARD_PBIASLITE_VMODE (1 << 21) 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun struct s32ktimer { 124*4882a593Smuzhiyun unsigned char res[0x10]; 125*4882a593Smuzhiyun unsigned int s32k_cr; /* 0x10 */ 126*4882a593Smuzhiyun }; 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun #define DEVICE_TYPE_SHIFT 0x6 129*4882a593Smuzhiyun #define DEVICE_TYPE_MASK (0x7 << DEVICE_TYPE_SHIFT) 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun /* Output impedance control */ 132*4882a593Smuzhiyun #define ds_120_ohm 0x0 133*4882a593Smuzhiyun #define ds_60_ohm 0x1 134*4882a593Smuzhiyun #define ds_45_ohm 0x2 135*4882a593Smuzhiyun #define ds_30_ohm 0x3 136*4882a593Smuzhiyun #define ds_mask 0x3 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun /* Slew rate control */ 139*4882a593Smuzhiyun #define sc_slow 0x0 140*4882a593Smuzhiyun #define sc_medium 0x1 141*4882a593Smuzhiyun #define sc_fast 0x2 142*4882a593Smuzhiyun #define sc_na 0x3 143*4882a593Smuzhiyun #define sc_mask 0x3 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /* Target capacitance control */ 146*4882a593Smuzhiyun #define lb_5_12_pf 0x0 147*4882a593Smuzhiyun #define lb_12_25_pf 0x1 148*4882a593Smuzhiyun #define lb_25_50_pf 0x2 149*4882a593Smuzhiyun #define lb_50_80_pf 0x3 150*4882a593Smuzhiyun #define lb_mask 0x3 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun #define usb_i_mask 0x7 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun #define DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN 0x80828082 155*4882a593Smuzhiyun #define DDR_IO_I_34OHM_SR_FASTEST_WD_CK_CKE_NCS_CA_PULL_DOWN 0x82828200 156*4882a593Smuzhiyun #define DDR_IO_0_DDR2_DQ_INT_EN_ALL_DDR3_CA_DIS_ALL 0x8421 157*4882a593Smuzhiyun #define DDR_IO_1_DQ_OUT_EN_ALL_DQ_INT_EN_ALL 0x8421084 158*4882a593Smuzhiyun #define DDR_IO_2_CA_OUT_EN_ALL_CA_INT_EN_ALL 0x8421000 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun #define DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL 0x7C7C7C6C 161*4882a593Smuzhiyun #define DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL 0x64646464 162*4882a593Smuzhiyun #define DDR_IO_0_VREF_CELLS_DDR3_VALUE 0xBAE8C631 163*4882a593Smuzhiyun #define DDR_IO_1_VREF_CELLS_DDR3_VALUE 0xBC6318DC 164*4882a593Smuzhiyun #define DDR_IO_2_VREF_CELLS_DDR3_VALUE 0x0 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun #define DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2 0x7C7C7C7C 167*4882a593Smuzhiyun #define DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2 0x64646464 168*4882a593Smuzhiyun #define DDR_IO_0_VREF_CELLS_DDR3_VALUE_ES2 0xBAE8C631 169*4882a593Smuzhiyun #define DDR_IO_1_VREF_CELLS_DDR3_VALUE_ES2 0xBC6318DC 170*4882a593Smuzhiyun #define DDR_IO_2_VREF_CELLS_DDR3_VALUE_ES2 0x84210000 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun #define EFUSE_1 0x45145100 173*4882a593Smuzhiyun #define EFUSE_2 0x45145100 174*4882a593Smuzhiyun #define EFUSE_3 0x45145100 175*4882a593Smuzhiyun #define EFUSE_4 0x45145100 176*4882a593Smuzhiyun #endif /* __ASSEMBLY__ */ 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun /* 179*4882a593Smuzhiyun * In all cases, the TRM defines the RAM Memory Map for the processor 180*4882a593Smuzhiyun * and indicates the area for the downloaded image. We use all of that 181*4882a593Smuzhiyun * space for download and once up and running may use other parts of the 182*4882a593Smuzhiyun * map for our needs. We set a scratch space that is at the end of the 183*4882a593Smuzhiyun * OMAP5 download area, but within the DRA7xx download area (as it is 184*4882a593Smuzhiyun * much larger) and do not, at this time, make use of the additional 185*4882a593Smuzhiyun * space. 186*4882a593Smuzhiyun */ 187*4882a593Smuzhiyun #if defined(CONFIG_DRA7XX) 188*4882a593Smuzhiyun #define NON_SECURE_SRAM_START 0x40300000 189*4882a593Smuzhiyun #define NON_SECURE_SRAM_END 0x40380000 /* Not inclusive */ 190*4882a593Smuzhiyun #define NON_SECURE_SRAM_IMG_END 0x4037C000 191*4882a593Smuzhiyun #else 192*4882a593Smuzhiyun #define NON_SECURE_SRAM_START 0x40300000 193*4882a593Smuzhiyun #define NON_SECURE_SRAM_END 0x40320000 /* Not inclusive */ 194*4882a593Smuzhiyun #define NON_SECURE_SRAM_IMG_END 0x4031E000 195*4882a593Smuzhiyun #endif 196*4882a593Smuzhiyun #define SRAM_SCRATCH_SPACE_ADDR (NON_SECURE_SRAM_IMG_END - SZ_1K) 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun /* base address for indirect vectors (internal boot mode) */ 199*4882a593Smuzhiyun #define SRAM_ROM_VECT_BASE 0x4031F000 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun /* CONTROL_SRCOMP_XXX_SIDE */ 202*4882a593Smuzhiyun #define OVERRIDE_XS_SHIFT 30 203*4882a593Smuzhiyun #define OVERRIDE_XS_MASK (1 << 30) 204*4882a593Smuzhiyun #define SRCODE_READ_XS_SHIFT 12 205*4882a593Smuzhiyun #define SRCODE_READ_XS_MASK (0xff << 12) 206*4882a593Smuzhiyun #define PWRDWN_XS_SHIFT 11 207*4882a593Smuzhiyun #define PWRDWN_XS_MASK (1 << 11) 208*4882a593Smuzhiyun #define DIVIDE_FACTOR_XS_SHIFT 4 209*4882a593Smuzhiyun #define DIVIDE_FACTOR_XS_MASK (0x7f << 4) 210*4882a593Smuzhiyun #define MULTIPLY_FACTOR_XS_SHIFT 1 211*4882a593Smuzhiyun #define MULTIPLY_FACTOR_XS_MASK (0x7 << 1) 212*4882a593Smuzhiyun #define SRCODE_OVERRIDE_SEL_XS_SHIFT 0 213*4882a593Smuzhiyun #define SRCODE_OVERRIDE_SEL_XS_MASK (1 << 0) 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun /* ABB settings */ 216*4882a593Smuzhiyun #define OMAP_ABB_SETTLING_TIME 50 217*4882a593Smuzhiyun #define OMAP_ABB_CLOCK_CYCLES 16 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun /* ABB tranxdone mask */ 220*4882a593Smuzhiyun #define OMAP_ABB_MPU_TXDONE_MASK (0x1 << 7) 221*4882a593Smuzhiyun #define OMAP_ABB_MM_TXDONE_MASK (0x1 << 31) 222*4882a593Smuzhiyun #define OMAP_ABB_IVA_TXDONE_MASK (0x1 << 30) 223*4882a593Smuzhiyun #define OMAP_ABB_EVE_TXDONE_MASK (0x1 << 29) 224*4882a593Smuzhiyun #define OMAP_ABB_GPU_TXDONE_MASK (0x1 << 28) 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun /* ABB efuse masks */ 227*4882a593Smuzhiyun #define OMAP5_PROD_ABB_FUSE_VSET_MASK (0x1F << 20) 228*4882a593Smuzhiyun #define OMAP5_PROD_ABB_FUSE_ENABLE_MASK (0x1 << 25) 229*4882a593Smuzhiyun #define DRA7_ABB_FUSE_VSET_MASK (0x1F << 20) 230*4882a593Smuzhiyun #define DRA7_ABB_FUSE_ENABLE_MASK (0x1 << 25) 231*4882a593Smuzhiyun #define OMAP5_ABB_LDOVBBMPU_MUX_CTRL_MASK (0x1 << 10) 232*4882a593Smuzhiyun #define OMAP5_ABB_LDOVBBMPU_VSET_OUT_MASK (0x1f << 0) 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 235*4882a593Smuzhiyun struct srcomp_params { 236*4882a593Smuzhiyun s8 divide_factor; 237*4882a593Smuzhiyun s8 multiply_factor; 238*4882a593Smuzhiyun }; 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun struct ctrl_ioregs { 241*4882a593Smuzhiyun u32 ctrl_ddrch; 242*4882a593Smuzhiyun u32 ctrl_lpddr2ch; 243*4882a593Smuzhiyun u32 ctrl_ddr3ch; 244*4882a593Smuzhiyun u32 ctrl_ddrio_0; 245*4882a593Smuzhiyun u32 ctrl_ddrio_1; 246*4882a593Smuzhiyun u32 ctrl_ddrio_2; 247*4882a593Smuzhiyun u32 ctrl_emif_sdram_config_ext; 248*4882a593Smuzhiyun u32 ctrl_emif_sdram_config_ext_final; 249*4882a593Smuzhiyun u32 ctrl_ddr_ctrl_ext_0; 250*4882a593Smuzhiyun }; 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun void clrset_spare_register(u8 spare_type, u32 clear_bits, u32 set_bits); 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun #endif /* __ASSEMBLY__ */ 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun /* Boot parameters */ 257*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 258*4882a593Smuzhiyun struct omap_boot_parameters { 259*4882a593Smuzhiyun unsigned int boot_message; 260*4882a593Smuzhiyun unsigned int boot_device_descriptor; 261*4882a593Smuzhiyun unsigned char boot_device; 262*4882a593Smuzhiyun unsigned char reset_reason; 263*4882a593Smuzhiyun unsigned char ch_flags; 264*4882a593Smuzhiyun }; 265*4882a593Smuzhiyun #endif 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun #endif 268