1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2006-2008 3*4882a593Smuzhiyun * Texas Instruments, <www.ti.com> 4*4882a593Smuzhiyun * Richard Woodruff <r-woodruff2@ti.com> 5*4882a593Smuzhiyun * Syed Mohammed Khasim <x0khasim@ti.com> 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef _OMAP3_H_ 11*4882a593Smuzhiyun #define _OMAP3_H_ 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #include <linux/sizes.h> 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* Stuff on L3 Interconnect */ 16*4882a593Smuzhiyun #define SMX_APE_BASE 0x68000000 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* GPMC */ 19*4882a593Smuzhiyun #define OMAP34XX_GPMC_BASE 0x6E000000 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* SMS */ 22*4882a593Smuzhiyun #define OMAP34XX_SMS_BASE 0x6C000000 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /* SDRC */ 25*4882a593Smuzhiyun #define OMAP34XX_SDRC_BASE 0x6D000000 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun /* 28*4882a593Smuzhiyun * L4 Peripherals - L4 Wakeup and L4 Core now 29*4882a593Smuzhiyun */ 30*4882a593Smuzhiyun #define OMAP34XX_CORE_L4_IO_BASE 0x48000000 31*4882a593Smuzhiyun #define OMAP34XX_WAKEUP_L4_IO_BASE 0x48300000 32*4882a593Smuzhiyun #define OMAP34XX_ID_L4_IO_BASE 0x4830A200 33*4882a593Smuzhiyun #define OMAP34XX_L4_PER 0x49000000 34*4882a593Smuzhiyun #define OMAP34XX_L4_IO_BASE OMAP34XX_CORE_L4_IO_BASE 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* DMA4/SDMA */ 37*4882a593Smuzhiyun #define OMAP34XX_DMA4_BASE 0x48056000 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun /* CONTROL */ 40*4882a593Smuzhiyun #define OMAP34XX_CTRL_BASE (OMAP34XX_L4_IO_BASE + 0x2000) 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 43*4882a593Smuzhiyun /* Signal Integrity Parameter Control Registers */ 44*4882a593Smuzhiyun struct control_prog_io { 45*4882a593Smuzhiyun unsigned char res[0x408]; 46*4882a593Smuzhiyun unsigned int io2; /* 0x408 */ 47*4882a593Smuzhiyun unsigned char res2[0x38]; 48*4882a593Smuzhiyun unsigned int io0; /* 0x444 */ 49*4882a593Smuzhiyun unsigned int io1; /* 0x448 */ 50*4882a593Smuzhiyun }; 51*4882a593Smuzhiyun #endif /* __ASSEMBLY__ */ 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /* Bit definition for CONTROL_PROG_IO1 */ 54*4882a593Smuzhiyun #define PRG_I2C2_PULLUPRESX 0x00000001 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun /* Scratchpad memory */ 57*4882a593Smuzhiyun #define OMAP34XX_SCRATCHPAD (OMAP34XX_CTRL_BASE + 0x910) 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* UART */ 60*4882a593Smuzhiyun #define OMAP34XX_UART1 (OMAP34XX_L4_IO_BASE + 0x6a000) 61*4882a593Smuzhiyun #define OMAP34XX_UART2 (OMAP34XX_L4_IO_BASE + 0x6c000) 62*4882a593Smuzhiyun #define OMAP34XX_UART3 (OMAP34XX_L4_PER + 0x20000) 63*4882a593Smuzhiyun #define OMAP34XX_UART4 (OMAP34XX_L4_PER + 0x42000) 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* General Purpose Timers */ 66*4882a593Smuzhiyun #define OMAP34XX_GPT1 0x48318000 67*4882a593Smuzhiyun #define OMAP34XX_GPT2 0x49032000 68*4882a593Smuzhiyun #define OMAP34XX_GPT3 0x49034000 69*4882a593Smuzhiyun #define OMAP34XX_GPT4 0x49036000 70*4882a593Smuzhiyun #define OMAP34XX_GPT5 0x49038000 71*4882a593Smuzhiyun #define OMAP34XX_GPT6 0x4903A000 72*4882a593Smuzhiyun #define OMAP34XX_GPT7 0x4903C000 73*4882a593Smuzhiyun #define OMAP34XX_GPT8 0x4903E000 74*4882a593Smuzhiyun #define OMAP34XX_GPT9 0x49040000 75*4882a593Smuzhiyun #define OMAP34XX_GPT10 0x48086000 76*4882a593Smuzhiyun #define OMAP34XX_GPT11 0x48088000 77*4882a593Smuzhiyun #define OMAP34XX_GPT12 0x48304000 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun /* WatchDog Timers (1 secure, 3 GP) */ 80*4882a593Smuzhiyun #define WD1_BASE 0x4830C000 81*4882a593Smuzhiyun #define WD2_BASE 0x48314000 82*4882a593Smuzhiyun #define WD3_BASE 0x49030000 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* 32KTIMER */ 85*4882a593Smuzhiyun #define SYNC_32KTIMER_BASE 0x48320000 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun struct s32ktimer { 90*4882a593Smuzhiyun unsigned char res[0x10]; 91*4882a593Smuzhiyun unsigned int s32k_cr; /* 0x10 */ 92*4882a593Smuzhiyun }; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun #define DEVICE_TYPE_SHIFT 0x8 95*4882a593Smuzhiyun #define DEVICE_TYPE_MASK (0x7 << DEVICE_TYPE_SHIFT) 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun #endif /* __ASSEMBLY__ */ 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 100*4882a593Smuzhiyun struct gpio { 101*4882a593Smuzhiyun unsigned char res1[0x34]; 102*4882a593Smuzhiyun unsigned int oe; /* 0x34 */ 103*4882a593Smuzhiyun unsigned int datain; /* 0x38 */ 104*4882a593Smuzhiyun unsigned char res2[0x54]; 105*4882a593Smuzhiyun unsigned int cleardataout; /* 0x90 */ 106*4882a593Smuzhiyun unsigned int setdataout; /* 0x94 */ 107*4882a593Smuzhiyun }; 108*4882a593Smuzhiyun #endif /* __ASSEMBLY__ */ 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun #define GPIO0 (0x1 << 0) 111*4882a593Smuzhiyun #define GPIO1 (0x1 << 1) 112*4882a593Smuzhiyun #define GPIO2 (0x1 << 2) 113*4882a593Smuzhiyun #define GPIO3 (0x1 << 3) 114*4882a593Smuzhiyun #define GPIO4 (0x1 << 4) 115*4882a593Smuzhiyun #define GPIO5 (0x1 << 5) 116*4882a593Smuzhiyun #define GPIO6 (0x1 << 6) 117*4882a593Smuzhiyun #define GPIO7 (0x1 << 7) 118*4882a593Smuzhiyun #define GPIO8 (0x1 << 8) 119*4882a593Smuzhiyun #define GPIO9 (0x1 << 9) 120*4882a593Smuzhiyun #define GPIO10 (0x1 << 10) 121*4882a593Smuzhiyun #define GPIO11 (0x1 << 11) 122*4882a593Smuzhiyun #define GPIO12 (0x1 << 12) 123*4882a593Smuzhiyun #define GPIO13 (0x1 << 13) 124*4882a593Smuzhiyun #define GPIO14 (0x1 << 14) 125*4882a593Smuzhiyun #define GPIO15 (0x1 << 15) 126*4882a593Smuzhiyun #define GPIO16 (0x1 << 16) 127*4882a593Smuzhiyun #define GPIO17 (0x1 << 17) 128*4882a593Smuzhiyun #define GPIO18 (0x1 << 18) 129*4882a593Smuzhiyun #define GPIO19 (0x1 << 19) 130*4882a593Smuzhiyun #define GPIO20 (0x1 << 20) 131*4882a593Smuzhiyun #define GPIO21 (0x1 << 21) 132*4882a593Smuzhiyun #define GPIO22 (0x1 << 22) 133*4882a593Smuzhiyun #define GPIO23 (0x1 << 23) 134*4882a593Smuzhiyun #define GPIO24 (0x1 << 24) 135*4882a593Smuzhiyun #define GPIO25 (0x1 << 25) 136*4882a593Smuzhiyun #define GPIO26 (0x1 << 26) 137*4882a593Smuzhiyun #define GPIO27 (0x1 << 27) 138*4882a593Smuzhiyun #define GPIO28 (0x1 << 28) 139*4882a593Smuzhiyun #define GPIO29 (0x1 << 29) 140*4882a593Smuzhiyun #define GPIO30 (0x1 << 30) 141*4882a593Smuzhiyun #define GPIO31 (0x1 << 31) 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun /* base address for indirect vectors (internal boot mode) */ 144*4882a593Smuzhiyun #define SRAM_OFFSET0 0x40000000 145*4882a593Smuzhiyun #define SRAM_OFFSET1 0x00200000 146*4882a593Smuzhiyun #define SRAM_OFFSET2 0x0000F800 147*4882a593Smuzhiyun #define SRAM_VECT_CODE (SRAM_OFFSET0 | SRAM_OFFSET1 | \ 148*4882a593Smuzhiyun SRAM_OFFSET2) 149*4882a593Smuzhiyun #define SRAM_CLK_CODE (SRAM_VECT_CODE + 64) 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun #define NON_SECURE_SRAM_START 0x40208000 /* Works for GP & EMU */ 152*4882a593Smuzhiyun #define NON_SECURE_SRAM_END 0x40210000 153*4882a593Smuzhiyun #define NON_SECURE_SRAM_IMG_END 0x4020F000 154*4882a593Smuzhiyun #define SRAM_SCRATCH_SPACE_ADDR (NON_SECURE_SRAM_IMG_END - SZ_1K) 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun #define LOW_LEVEL_SRAM_STACK 0x4020FFFC 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun /* scratch area - accessible on both EMU and GP */ 159*4882a593Smuzhiyun #define OMAP3_PUBLIC_SRAM_SCRATCH_AREA NON_SECURE_SRAM_START 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun #define DEBUG_LED1 149 /* gpio */ 162*4882a593Smuzhiyun #define DEBUG_LED2 150 /* gpio */ 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun #define XDR_POP 5 /* package on package part */ 165*4882a593Smuzhiyun #define SDR_DISCRETE 4 /* 128M memory SDR module */ 166*4882a593Smuzhiyun #define DDR_STACKED 3 /* stacked part on 2422 */ 167*4882a593Smuzhiyun #define DDR_COMBO 2 /* combo part on cpu daughter card */ 168*4882a593Smuzhiyun #define DDR_DISCRETE 1 /* 2x16 parts on daughter card */ 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun #define DDR_100 100 /* type found on most mem d-boards */ 171*4882a593Smuzhiyun #define DDR_111 111 /* some combo parts */ 172*4882a593Smuzhiyun #define DDR_133 133 /* most combo, some mem d-boards */ 173*4882a593Smuzhiyun #define DDR_165 165 /* future parts */ 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun #define CPU_3430 0x3430 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /* 178*4882a593Smuzhiyun * 343x real hardware: 179*4882a593Smuzhiyun * ES1 = rev 0 180*4882a593Smuzhiyun * 181*4882a593Smuzhiyun * ES2 onwards, the value maps to contents of IDCODE register [31:28]. 182*4882a593Smuzhiyun * 183*4882a593Smuzhiyun * Note : CPU_3XX_ES20 is used in cache.S. Please review before changing. 184*4882a593Smuzhiyun */ 185*4882a593Smuzhiyun #define CPU_3XX_ES10 0 186*4882a593Smuzhiyun #define CPU_3XX_ES20 1 187*4882a593Smuzhiyun #define CPU_3XX_ES21 2 188*4882a593Smuzhiyun #define CPU_3XX_ES30 3 189*4882a593Smuzhiyun #define CPU_3XX_ES31 4 190*4882a593Smuzhiyun #define CPU_3XX_ES312 7 191*4882a593Smuzhiyun #define CPU_3XX_MAX_REV 8 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun /* 194*4882a593Smuzhiyun * 37xx real hardware: 195*4882a593Smuzhiyun * ES1.0 onwards, the value maps to contents of IDCODE register [31:28]. 196*4882a593Smuzhiyun */ 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun #define CPU_37XX_ES10 0 199*4882a593Smuzhiyun #define CPU_37XX_ES11 1 200*4882a593Smuzhiyun #define CPU_37XX_ES12 2 201*4882a593Smuzhiyun #define CPU_37XX_MAX_REV 3 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun #define CPU_3XX_ID_SHIFT 28 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun #define WIDTH_8BIT 0x0000 206*4882a593Smuzhiyun #define WIDTH_16BIT 0x1000 /* bit pos for 16 bit in gpmc */ 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun /* 209*4882a593Smuzhiyun * Hawkeye values 210*4882a593Smuzhiyun */ 211*4882a593Smuzhiyun #define HAWKEYE_OMAP34XX 0xb7ae 212*4882a593Smuzhiyun #define HAWKEYE_AM35XX 0xb868 213*4882a593Smuzhiyun #define HAWKEYE_OMAP36XX 0xb891 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun #define HAWKEYE_SHIFT 12 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun /* 218*4882a593Smuzhiyun * Define CPU families 219*4882a593Smuzhiyun */ 220*4882a593Smuzhiyun #define CPU_OMAP34XX 0x3400 /* OMAP34xx/OMAP35 devices */ 221*4882a593Smuzhiyun #define CPU_AM35XX 0x3500 /* AM35xx devices */ 222*4882a593Smuzhiyun #define CPU_OMAP36XX 0x3600 /* OMAP36xx devices */ 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun /* 225*4882a593Smuzhiyun * Control status register values corresponding to cpu variants 226*4882a593Smuzhiyun */ 227*4882a593Smuzhiyun #define OMAP3503 0x5c00 228*4882a593Smuzhiyun #define OMAP3515 0x1c00 229*4882a593Smuzhiyun #define OMAP3525 0x4c00 230*4882a593Smuzhiyun #define OMAP3530 0x0c00 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun #define AM3505 0x5c00 233*4882a593Smuzhiyun #define AM3517 0x1c00 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun #define OMAP3730 0x0c00 236*4882a593Smuzhiyun #define OMAP3725 0x4c00 237*4882a593Smuzhiyun #define AM3715 0x1c00 238*4882a593Smuzhiyun #define AM3703 0x5c00 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun #define OMAP3730_1GHZ 0x0e00 241*4882a593Smuzhiyun #define OMAP3725_1GHZ 0x4e00 242*4882a593Smuzhiyun #define AM3715_1GHZ 0x1e00 243*4882a593Smuzhiyun #define AM3703_1GHZ 0x5e00 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun /* 246*4882a593Smuzhiyun * ROM code API related flags 247*4882a593Smuzhiyun */ 248*4882a593Smuzhiyun #define OMAP3_GP_ROMCODE_API_L2_INVAL 1 249*4882a593Smuzhiyun #define OMAP3_GP_ROMCODE_API_WRITE_L2ACR 2 250*4882a593Smuzhiyun #define OMAP3_GP_ROMCODE_API_WRITE_ACR 3 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun /* 253*4882a593Smuzhiyun * EMU device PPA HAL related flags 254*4882a593Smuzhiyun */ 255*4882a593Smuzhiyun #define OMAP3_EMU_HAL_API_L2_INVAL 40 256*4882a593Smuzhiyun #define OMAP3_EMU_HAL_API_WRITE_ACR 42 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun #define OMAP3_EMU_HAL_START_HAL_CRITICAL 4 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun /* ABB settings */ 261*4882a593Smuzhiyun #define OMAP_ABB_SETTLING_TIME 30 262*4882a593Smuzhiyun #define OMAP_ABB_CLOCK_CYCLES 8 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun /* ABB tranxdone mask */ 265*4882a593Smuzhiyun #define OMAP_ABB_MPU_TXDONE_MASK (0x1 << 26) 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun #define OMAP_REBOOT_REASON_OFFSET 0x04 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun /* Boot parameters */ 270*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 271*4882a593Smuzhiyun struct omap_boot_parameters { 272*4882a593Smuzhiyun unsigned int boot_message; 273*4882a593Smuzhiyun unsigned char boot_device; 274*4882a593Smuzhiyun unsigned char reserved; 275*4882a593Smuzhiyun unsigned char reset_reason; 276*4882a593Smuzhiyun unsigned char ch_flags; 277*4882a593Smuzhiyun unsigned int boot_device_descriptor; 278*4882a593Smuzhiyun }; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun int omap_reboot_mode(char *mode, unsigned int length); 281*4882a593Smuzhiyun int omap_reboot_mode_clear(void); 282*4882a593Smuzhiyun int omap_reboot_mode_store(char *mode); 283*4882a593Smuzhiyun #endif 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun #endif 286