/* $NetBSD: exynos_reg.h,v 1.13.12.1 2017/07/18 19:13:08 snj Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Reinoud Zandijk. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef _ARM_SAMSUNG_EXYNOS_REG_H_ #define _ARM_SAMSUNG_EXYNOS_REG_H_ /* * * The exynos can boot from its iROM or from an external Nand memory. Since * these are normally hardly used they are excluded from the normal register * space here. * * XXX What about the audio subsystem region. Where are the docs? * * EXYNOS_CORE_PBASE points to the main SFR region. * * Notes: * * SFR Special Function Register * ISP In-System Programming, like a JTAG * ACP Accelerator Coherency Port * SSS Security Sub System * GIC Generic Interurrupt Controller * PMU Power Management Unit * DMC 2D Graphics engine * LEFTBUS Data bus / Peripheral bus * RIGHTBUS ,, * G3D 3D Graphics engine * MFC Multi-Format Codec * LCD0 LCD display * MCT Multi Core Timer * CMU Clock Management Unit * TMU Thermal Management Unit * PPMU Pin Parametric Measurement Unit (?) * MMU Memory Management Unit * MCTimer ? * WDT Watch Dog Timer * RTC Real Time Clock * KEYIF Keypad interface * SECKEY ? * TZPC TrustZone Protection Controller * UART Universal asynchronous receiver/transmitter * I2C Inter IC Connect * SPI Serial Peripheral Interface Bus * I2S Inter-IC Sound, Integrated Interchip Sound, or IIS * PCM Pulse-code modulation, audio stream at set fixed rate * SPDIF Sony/Philips Digital Interface Format * Slimbus Serial Low-power Inter-chip Media Bus * SMMU System mmu. No idea as how its programmed (or not) * PERI-L UART, I2C, SPI, I2S, PCM, SPDIF, PWM, I2CHDMI, Slimbus * PERI-R CHIPID, SYSREG, PMU/CMU/TMU Bus I/F, MCTimer, WDT, RTC, KEYIF, * SECKEY, TZPC */ /* * Common to Exynos4 and Exynos 5 * */ #define EXYNOS_CORE_PBASE 0x10000000 /* SFR */ #define EXYNOS_CORE_SIZE 0x10000000 #define EXYNOS_CHIPID_OFFSET 0x00000000 #define EXYNOS_PROD_ID_OFFSET (EXYNOS_CHIPID_OFFSET + 0) #define EXYNOS_PACKAGE_ID_OFFSET (EXYNOS_CHIPID_OFFSET + 4) #define EXYNOS_PACKAGE_ID_2_GIG 0x06030058 /* standard block size for offsets defined below */ #define EXYNOS_BLOCK_SIZE 0x00010000 #if defined(SOC_EXYNOS5) #include #endif #if defined(SOC_EXYNOS4) #include #endif /* standard frequency settings */ #define EXYNOS_ACLK_REF_FREQ (200*1000*1000) /* 200 Mhz */ #define EXYNOS_UART_FREQ (109*1000*1000) /* should be EXYNOS_ACLK_REF_FREQ! */ #define EXYNOS_F_IN_FREQ (24*1000*1000) /* 24 Mhz */ #define EXYNOS_USB_FREQ EXYNOS_F_IN_FREQ/* 24 Mhz */ /* PLLs */ #define PLL_LOCK_OFFSET 0x000 #define PLL_CON0_OFFSET 0x100 #define PLL_CON1_OFFSET 0x104 #define PLL_CON0_ENABLE __BIT(31) #define PLL_CON0_LOCKED __BIT(29) /* has the PLL locked on */ #define PLL_CON0_M __BITS(16,25) /* PLL M divide value */ #define PLL_CON0_P __BITS( 8,13) /* PLL P divide value */ #define PLL_CON0_S __BITS( 0, 2) /* PLL S divide value */ #define PLL_PMS2FREQ(F, M, P, S) \ ((P) == 0 ? 0 : (((M)*(F))/((P)*(1<<(S))))) #define PLL_FREQ(f, v) PLL_PMS2FREQ( \ (f),\ __SHIFTOUT((v), PLL_CON0_M),\ __SHIFTOUT((v), PLL_CON0_P),\ __SHIFTOUT((v), PLL_CON0_S)) /* Watchdog register definitions */ #define EXYNOS_WDT_WTCON 0x0000 #define WTCON_PRESCALER __BITS(15,8) #define WTCON_ENABLE __BIT(5) #define WTCON_CLOCK_SELECT __BITS(4,3) #define WTCON_CLOCK_SELECT_16 __SHIFTIN(0, WTCON_CLOCK_SELECT) #define WTCON_CLOCK_SELECT_32 __SHIFTIN(1, WTCON_CLOCK_SELECT) #define WTCON_CLOCK_SELECT_64 __SHIFTIN(2, WTCON_CLOCK_SELECT) #define WTCON_CLOCK_SELECT_128 __SHIFTIN(3, WTCON_CLOCK_SELECT) #define WTCON_INT_ENABLE __BIT(2) #define WTCON_RESET_ENABLE __BIT(0) #define EXYNOS_WDT_WTDAT 0x0004 #define WTDAT_RELOAD __BITS(15,0) #define EXYNOS_WDT_WTCNT 0x0008 #define WTCNT_COUNT __BITS(15,0) #define EXYNOS_WDT_WTCLRINT 0x000C /* GPIO register definitions */ #define EXYNOS_GPIO_GRP_SIZE 0x20 #define EXYNOS_GPIO_CON 0x00 #define EXYNOS_GPIO_DAT 0x04 #define EXYNOS_GPIO_PUD 0x08 #define EXYNOS_GPIO_DRV 0x0C #define EXYNOS_GPIO_CONPWD 0x10 #define EXYNOS_GPIO_PUDPWD 0x14 /* rest of space is not used */ #define EXYNOS_GPIO_FUNC_INPUT 0x0 #define EXYNOS_GPIO_FUNC_OUTPUT 0x1 /* intermediate values are devices, definitions dependent on pin */ #define EXYNOS_GPIO_FUNC_EXTINT 0xF #define EXYNOS_GPIO_PIN_FLOAT 0 #define EXYNOS_GPIO_PIN_PULL_DOWN 1 #define EXYNOS_GPIO_PIN_PULL_UP 3 /* used PMU registers */ /* Exynos 4210 or Exynos 5 */ #define EXYNOS_PMU_USBDEV_PHY_CTRL 0x704 #define EXYNOS_PMU_USBHOST_PHY_CTRL 0x708 /* Exynos 4x12 */ #define EXYNOS_PMU_USB_PHY_CTRL 0x704 #define EXYNOS_PMU_USB_HSIC_1_PHY_CTRL 0x708 #define EXYNOS_PMU_USB_HSIC_2_PHY_CTRL 0x70C #define PMU_PHY_ENABLE (1 << 0) #define PMU_PHY_DISABLE (0) #define EXYNOS_PMU_DEBUG_CLKOUT 0x0A00 /* used SYSREG registers */ #define EXYNOS5_SYSREG_USB20_PHY_TYPE 0x230 #define USB20_PHY_HOST_LINK_EN (1 << 0) /* Generic USB registers/constants */ #define FSEL_CLKSEL_50M 7 #define FSEL_CLKSEL_24M 5 #define FSEL_CLKSEL_20M 4 #define FSEL_CLKSEL_19200K 3 #define FSEL_CLKSEL_12M 2 #define FSEL_CLKSEL_10M 1 #define FSEL_CLKSEL_9600K 0 #endif /* _ARM_SAMSUNG_EXYNOS_REG_H_ */