1508a58faSSricharan /* 2508a58faSSricharan * (C) Copyright 2010 3508a58faSSricharan * Texas Instruments, <www.ti.com> 4508a58faSSricharan * 5508a58faSSricharan * Authors: 6508a58faSSricharan * Aneesh V <aneesh@ti.com> 7508a58faSSricharan * 8508a58faSSricharan * Derived from OMAP3 work by 9508a58faSSricharan * Richard Woodruff <r-woodruff2@ti.com> 10508a58faSSricharan * Syed Mohammed Khasim <x0khasim@ti.com> 11508a58faSSricharan * 121a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 13508a58faSSricharan */ 14508a58faSSricharan 15508a58faSSricharan #ifndef _OMAP4_H_ 16508a58faSSricharan #define _OMAP4_H_ 17508a58faSSricharan 18508a58faSSricharan #if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__)) 19508a58faSSricharan #include <asm/types.h> 20508a58faSSricharan #endif /* !(__KERNEL_STRICT_NAMES || __ASSEMBLY__) */ 21508a58faSSricharan 22*fa2f81b0STom Rini #include <linux/sizes.h> 23*fa2f81b0STom Rini 24508a58faSSricharan /* 25508a58faSSricharan * L4 Peripherals - L4 Wakeup and L4 Core now 26508a58faSSricharan */ 27508a58faSSricharan #define OMAP44XX_L4_CORE_BASE 0x4A000000 28508a58faSSricharan #define OMAP44XX_L4_WKUP_BASE 0x4A300000 29508a58faSSricharan #define OMAP44XX_L4_PER_BASE 0x48000000 30508a58faSSricharan 31508a58faSSricharan #define OMAP44XX_DRAM_ADDR_SPACE_START 0x80000000 32508a58faSSricharan #define OMAP44XX_DRAM_ADDR_SPACE_END 0xD0000000 33508a58faSSricharan #define DRAM_ADDR_SPACE_START OMAP44XX_DRAM_ADDR_SPACE_START 34508a58faSSricharan #define DRAM_ADDR_SPACE_END OMAP44XX_DRAM_ADDR_SPACE_END 35508a58faSSricharan 36508a58faSSricharan /* CONTROL_ID_CODE */ 37508a58faSSricharan #define CONTROL_ID_CODE 0x4A002204 38508a58faSSricharan 39508a58faSSricharan #define OMAP4_CONTROL_ID_CODE_ES1_0 0x0B85202F 40508a58faSSricharan #define OMAP4_CONTROL_ID_CODE_ES2_0 0x1B85202F 41508a58faSSricharan #define OMAP4_CONTROL_ID_CODE_ES2_1 0x3B95C02F 42508a58faSSricharan #define OMAP4_CONTROL_ID_CODE_ES2_2 0x4B95C02F 43508a58faSSricharan #define OMAP4_CONTROL_ID_CODE_ES2_3 0x6B95C02F 449404758eSAneesh V #define OMAP4460_CONTROL_ID_CODE_ES1_0 0x0B94E02F 459404758eSAneesh V #define OMAP4460_CONTROL_ID_CODE_ES1_1 0x2B94E02F 46696f81f9STaras Kondratiuk #define OMAP4470_CONTROL_ID_CODE_ES1_0 0x0B97502F 47508a58faSSricharan 48508a58faSSricharan /* UART */ 49508a58faSSricharan #define UART1_BASE (OMAP44XX_L4_PER_BASE + 0x6a000) 50508a58faSSricharan #define UART2_BASE (OMAP44XX_L4_PER_BASE + 0x6c000) 51508a58faSSricharan #define UART3_BASE (OMAP44XX_L4_PER_BASE + 0x20000) 52508a58faSSricharan 53508a58faSSricharan /* General Purpose Timers */ 54508a58faSSricharan #define GPT1_BASE (OMAP44XX_L4_WKUP_BASE + 0x18000) 55508a58faSSricharan #define GPT2_BASE (OMAP44XX_L4_PER_BASE + 0x32000) 56508a58faSSricharan #define GPT3_BASE (OMAP44XX_L4_PER_BASE + 0x34000) 57508a58faSSricharan 58508a58faSSricharan /* Watchdog Timer2 - MPU watchdog */ 59508a58faSSricharan #define WDT2_BASE (OMAP44XX_L4_WKUP_BASE + 0x14000) 60508a58faSSricharan 61508a58faSSricharan /* 62508a58faSSricharan * Hardware Register Details 63508a58faSSricharan */ 64508a58faSSricharan 65508a58faSSricharan /* Watchdog Timer */ 66508a58faSSricharan #define WD_UNLOCK1 0xAAAA 67508a58faSSricharan #define WD_UNLOCK2 0x5555 68508a58faSSricharan 69508a58faSSricharan /* GP Timer */ 70508a58faSSricharan #define TCLR_ST (0x1 << 0) 71508a58faSSricharan #define TCLR_AR (0x1 << 1) 72508a58faSSricharan #define TCLR_PRE (0x1 << 5) 73508a58faSSricharan 74508a58faSSricharan /* Control Module */ 75508a58faSSricharan #define LDOSRAM_ACTMODE_VSET_IN_MASK (0x1F << 5) 76508a58faSSricharan #define LDOSRAM_VOLT_CTRL_OVERRIDE 0x0401040f 77508a58faSSricharan #define CONTROL_EFUSE_1_OVERRIDE 0x1C4D0110 78fe7104b3SAneesh V #define CONTROL_EFUSE_2_OVERRIDE 0x99084000 79508a58faSSricharan 80508a58faSSricharan /* LPDDR2 IO regs */ 81508a58faSSricharan #define CONTROL_LPDDR2IO_SLEW_125PS_DRV8_PULL_DOWN 0x1C1C1C1C 82508a58faSSricharan #define CONTROL_LPDDR2IO_SLEW_325PS_DRV8_GATE_KEEPER 0x9E9E9E9E 83508a58faSSricharan #define CONTROL_LPDDR2IO_SLEW_315PS_DRV12_PULL_DOWN 0x7C7C7C7C 84508a58faSSricharan #define LPDDR2IO_GR10_WD_MASK (3 << 17) 85e423a8f7SSRICHARAN R #define CONTROL_LPDDR2IO_3_VAL 0xA0888C0F 86508a58faSSricharan 87508a58faSSricharan /* CONTROL_EFUSE_2 */ 88508a58faSSricharan #define CONTROL_EFUSE_2_NMOS_PMOS_PTV_CODE_1 0x00ffc000 89508a58faSSricharan 90508a58faSSricharan #define MMC1_PWRDNZ (1 << 26) 91508a58faSSricharan #define MMC1_PBIASLITE_PWRDNZ (1 << 22) 92508a58faSSricharan #define MMC1_PBIASLITE_VMODE (1 << 21) 93508a58faSSricharan 94508a58faSSricharan #ifndef __ASSEMBLY__ 95508a58faSSricharan 96508a58faSSricharan struct s32ktimer { 97508a58faSSricharan unsigned char res[0x10]; 98508a58faSSricharan unsigned int s32k_cr; /* 0x10 */ 99508a58faSSricharan }; 100508a58faSSricharan 101c1fa3c37SSRICHARAN R #define DEVICE_TYPE_SHIFT (0x8) 102c1fa3c37SSRICHARAN R #define DEVICE_TYPE_MASK (0x7 << DEVICE_TYPE_SHIFT) 103c1fa3c37SSRICHARAN R 104508a58faSSricharan #endif /* __ASSEMBLY__ */ 105508a58faSSricharan 106508a58faSSricharan /* 107508a58faSSricharan * Non-secure SRAM Addresses 108508a58faSSricharan * Non-secure RAM starts at 0x40300000 for GP devices. But we keep SRAM_BASE 109508a58faSSricharan * at 0x40304000(EMU base) so that our code works for both EMU and GP 110508a58faSSricharan */ 111508a58faSSricharan #define NON_SECURE_SRAM_START 0x40304000 112508a58faSSricharan #define NON_SECURE_SRAM_END 0x4030E000 /* Not inclusive */ 113*fa2f81b0STom Rini #define NON_SECURE_SRAM_IMG_END 0x4030C000 114*fa2f81b0STom Rini #define SRAM_SCRATCH_SPACE_ADDR (NON_SECURE_SRAM_IMG_END - SZ_1K) 115508a58faSSricharan /* base address for indirect vectors (internal boot mode) */ 116508a58faSSricharan #define SRAM_ROM_VECT_BASE 0x4030D000 1174d0df9c1SAndrii Tseglytskyi 1184d0df9c1SAndrii Tseglytskyi /* ABB settings */ 1194d0df9c1SAndrii Tseglytskyi #define OMAP_ABB_SETTLING_TIME 50 1204d0df9c1SAndrii Tseglytskyi #define OMAP_ABB_CLOCK_CYCLES 16 1214d0df9c1SAndrii Tseglytskyi 1224d0df9c1SAndrii Tseglytskyi /* ABB tranxdone mask */ 1234d0df9c1SAndrii Tseglytskyi #define OMAP_ABB_MPU_TXDONE_MASK (0x1 << 7) 1244d0df9c1SAndrii Tseglytskyi 125faec3f98SPaul Kocialkowski #define OMAP44XX_SAR_RAM_BASE 0x4a326000 126faec3f98SPaul Kocialkowski #define OMAP_REBOOT_REASON_OFFSET 0xA0C 127faec3f98SPaul Kocialkowski #define OMAP_REBOOT_REASON_SIZE 0x0F 128faec3f98SPaul Kocialkowski 12960c7c30aSPaul Kocialkowski /* Boot parameters */ 13060c7c30aSPaul Kocialkowski #ifndef __ASSEMBLY__ 13160c7c30aSPaul Kocialkowski struct omap_boot_parameters { 13260c7c30aSPaul Kocialkowski unsigned int boot_message; 13360c7c30aSPaul Kocialkowski unsigned int boot_device_descriptor; 13460c7c30aSPaul Kocialkowski unsigned char boot_device; 13560c7c30aSPaul Kocialkowski unsigned char reset_reason; 13660c7c30aSPaul Kocialkowski unsigned char ch_flags; 13760c7c30aSPaul Kocialkowski }; 138faec3f98SPaul Kocialkowski 139faec3f98SPaul Kocialkowski int omap_reboot_mode(char *mode, unsigned int length); 140faec3f98SPaul Kocialkowski int omap_reboot_mode_clear(void); 141faec3f98SPaul Kocialkowski int omap_reboot_mode_store(char *mode); 14260c7c30aSPaul Kocialkowski #endif 14360c7c30aSPaul Kocialkowski 144508a58faSSricharan #endif 145