| /* |
| * Copyright (C) 2012 Samsung Electronics |
| * |
| * Copyright (C) 2012 Insignal |
| * |
| * Configuration settings for the Insignal Origen QUAD board (Exynos4412) |
| * |
| * See file CREDITS for list of people who contributed to this |
| * project. |
| * |
| * 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., 59 Temple Place, Suite 330, Boston, |
| * MA 02111-1307 USA |
| */ |
| |
| #ifndef __SETUP_ORIGEN_QUAD_H |
| #define __SETUP_ORIGEN_QUAD_H |
| |
| #include <config.h> |
| #include <version.h> |
| #include <asm/arch/cpu.h> |
| |
| /* Set PLL */ |
| #define set_pll(mdiv, pdiv, sdiv) (1<<31 | mdiv<<16 | pdiv<<8 | sdiv) |
| |
| /* APLL */ |
| #define set_clk_div_cpu0(core2, apll, pclk_dbg, atb, periph, corem1, corem0, core) \ |
| ((core2 << 28) \ |
| |(apll << 24) \ |
| |(pclk_dbg << 20) \ |
| |(atb << 16) \ |
| |(periph <<12) \ |
| |(corem1 << 8) \ |
| |(corem0 << 4) \ |
| |(core)) |
| #define set_clk_div_cpu1(cores, hpm, copy) \ |
| ((cores << 8) \ |
| |(hpm << 4) \ |
| |(copy)) |
| |
| #if (CONFIG_CLK_APLL == 800) |
| #define APLL_CON0_VAL set_pll(0x64, 0x3, 0x0) |
| #define CLK_DIV_CPU0_VAL set_clk_div_cpu0(0, 1, 1, 3, 7, 5, 2, 0) |
| #define CLK_DIV_CPU1_VAL set_clk_div_cpu1(3, 0, 3) |
| #elif (CONFIG_CLK_APLL == 1000) |
| #define APLL_CON0_VAL set_pll(0x7D, 0x3, 0x0) |
| #define CLK_DIV_CPU0_VAL set_clk_div_cpu0(0, 1, 1, 4, 7, 5, 2, 0) |
| #define CLK_DIV_CPU1_VAL set_clk_div_cpu1(3, 0, 4) |
| #elif (CONFIG_CLK_APLL == 1100) |
| #define APLL_CON0_VAL set_pll(0x113, 0x6, 0x0) |
| #define CLK_DIV_CPU0_VAL set_clk_div_cpu0(0, 2, 1, 4, 7, 6, 3, 0) |
| #define CLK_DIV_CPU1_VAL set_clk_div_cpu1(4, 0, 4) |
| #elif (CONFIG_CLK_APLL == 1200) |
| #define APLL_CON0_VAL set_pll(0x96, 0x3, 0x0) |
| #define CLK_DIV_CPU0_VAL set_clk_div_cpu0(0, 2, 1, 5, 7, 7, 3, 0) |
| #define CLK_DIV_CPU1_VAL set_clk_div_cpu1(4, 0, 4) |
| #elif (CONFIG_CLK_APLL == 1300) |
| #define APLL_CON0_VAL set_pll(0x145, 0x6, 0x0) |
| #define CLK_DIV_CPU0_VAL set_clk_div_cpu0(0, 2, 1, 5, 7, 7, 3, 0) |
| #define CLK_DIV_CPU1_VAL set_clk_div_cpu1(5, 0, 5) |
| #elif (CONFIG_CLK_APLL == 1400) |
| #define APLL_CON0_VAL set_pll(0xAF, 0x3, 0x0) |
| #define CLK_DIV_CPU0_VAL set_clk_div_cpu0(0, 2, 1, 6, 7, 7, 3, 0) |
| #define CLK_DIV_CPU1_VAL set_clk_div_cpu1(5, 0, 6) |
| #elif (CONFIG_CLK_APLL == 1500) |
| #define APLL_CON0_VAL set_pll(0xFA, 0x3, 0x0) |
| #define CLK_DIV_CPU0_VAL set_clk_div_cpu0(0, 2, 1, 6, 7, 7, 4, 0) |
| #define CLK_DIV_CPU1_VAL set_clk_div_cpu1(5, 0, 6) |
| #else |
| #error Not supported APLL freq |
| #endif |
| |
| #define APLL_CON1_VAL (0x00803800) |
| #define APLL_LOCK_VAL (((APLL_CON0_VAL >> 8) & 0x3F) * 270) |
| |
| /* EPLL */ |
| #define EPLL_CON0_VAL set_pll(0x40, 0x2, 0x3) |
| #define EPLL_CON1_VAL (0x66010000) |
| #define EPLL_CON2_VAL (0x00000080) |
| #define EPLL_LOCK_VAL (((EPLL_CON0_VAL >> 8) & 0x3F) * 3000) |
| |
| /* MPLL */ |
| #if (CONFIG_CLK_MPLL == 200) |
| #define MPLL_CON0_VAL set_pll(0x64, 0x3, 0x1) |
| #elif (CONFIG_CLK_MPLL == 330) |
| #define MPLL_CON0_VAL set_pll(0x116, 0x5, 0x1) |
| #elif (CONFIG_CLK_MPLL == 400) |
| #define MPLL_CON0_VAL set_pll(0x64, 0x3, 0x0) |
| #else |
| #error Not supported MPLL freq |
| #endif |
| #define MPLL_CON1_VAL (0x00803800) |
| #define MPLL_LOCK_VAL (((MPLL_CON0_VAL >> 8) & 0x3F) * 270) |
| |
| /* VPLL */ |
| #define VPLL_CON0_VAL set_pll(0x48, 0x2, 0x3) |
| #define VPLL_CON1_VAL (0x66010000) |
| #define VPLL_CON2_VAL (0x00000080) |
| #define VPLL_LOCK_VAL (((EPLL_CON0_VAL >> 8) & 0x3F) * 3000) |
| |
| /* CLK_SRC_CPU */ |
| #define MUX_MPLL_USER_SEL 1 |
| #define MUX_HPM_SEL 0 |
| #define MUX_CORE_SEL 0 |
| #define MUX_APLL_SEL 1 |
| #define CLK_SRC_CPU_VAL ((MUX_MPLL_USER_SEL << 24) \ |
| |(MUX_HPM_SEL << 20) \ |
| |(MUX_CORE_SEL << 16) \ |
| |(MUX_APLL_SEL)) |
| |
| /* CLK_SRC_TOP0 */ |
| #define MUX_ONENAND_SEL 0x0 /* 0 = DOUT133, 1 = DOUT166 */ |
| #define MUX_ACLK_133_SEL 0x0 /* 0 = SCLKMPLL, 1 = SCLKAPLL */ |
| #define MUX_ACLK_160_SEL 0x0 |
| #define MUX_ACLK_100_SEL 0x0 |
| #define MUX_ACLK_200_SEL 0x0 |
| #define MUX_VPLL_SEL 0x1 |
| #define MUX_EPLL_SEL 0x1 |
| #define CLK_SRC_TOP0_VAL ((MUX_ONENAND_SEL << 28) \ |
| |(MUX_ACLK_133_SEL << 24) \ |
| |(MUX_ACLK_160_SEL << 20) \ |
| |(MUX_ACLK_100_SEL << 16) \ |
| |(MUX_ACLK_200_SEL << 12) \ |
| |(MUX_VPLL_SEL << 8) \ |
| |(MUX_EPLL_SEL << 4)) |
| |
| /* CLK_SRC_TOP1 */ |
| #define VPLLSRC_SEL 0x0 /* 0 = FINPLL, 1 = SCLKHDMI27M */ |
| #define CLK_SRC_TOP1_VAL (0x01111000) |
| |
| /* CLK_DIV_TOP */ |
| #define ACLK_400_MCUISP_RATIO 0x1 |
| #define ACLK_266_GPS_RATIO 0x2 |
| #define ONENAND_RATIO 0x1 |
| #define ACLK_133_RATIO 0x5 |
| #define ACLK_160_RATIO 0x4 |
| #define ACLK_100_RATIO 0x7 |
| #define ACLK_200_RATIO 0x4 |
| #define CLK_DIV_TOP_VAL ((ACLK_400_MCUISP_RATIO << 24) \ |
| |(ACLK_266_GPS_RATIO << 20) \ |
| |(ONENAND_RATIO << 16) \ |
| |(ACLK_133_RATIO << 12) \ |
| |(ACLK_160_RATIO << 8) \ |
| |(ACLK_100_RATIO << 4) \ |
| |(ACLK_200_RATIO)) |
| |
| /* CLK_SRC_LEFTBUS */ |
| #define CLK_SRC_LEFTBUS_VAL (0x10) |
| |
| /* CLK_DIV_LEFRBUS */ |
| #define GPL_RATIO 0x1 |
| #define GDL_RATIO 0x3 |
| #define CLK_DIV_LEFTBUS_VAL ((GPL_RATIO << 4)|(GDL_RATIO)) |
| |
| /* CLK_SRC_RIGHTBUS */ |
| #define CLK_SRC_RIGHTBUS_VAL (0x10) |
| |
| /* CLK_DIV_RIGHTBUS */ |
| #define GPR_RATIO 0x1 |
| #define GDR_RATIO 0x3 |
| #define CLK_DIV_RIGHTBUS_VAL ((GPR_RATIO << 4)|(GDR_RATIO)) |
| |
| /* CLK_SRC_DMC */ |
| #define MUX_PWI_SEL 0x1 |
| #define MUX_CORE_TIMERS_SEL 0x1 |
| #define MUX_DPHY_SEL 0x0 |
| #define MUX_DMC_BUS_SEL 0x0 |
| #define CLK_SRC_DMC_VAL ((MUX_PWI_SEL << 16) \ |
| |(MUX_CORE_TIMERS_SEL << 12) \ |
| |(MUX_DPHY_SEL << 8) \ |
| |(MUX_DMC_BUS_SEL << 4)) |
| |
| /* CLK_DIV_DMC0 */ |
| #define CORE_TIMERS_RATIO 0x0 |
| #define COPY2_RATIO 0x0 |
| #define DMCP_RATIO 0x1 |
| #define DMCD_RATIO 0x1 |
| #if (CONFIG_CLK_MPLL == 200) |
| #define DMC_RATIO 0x3 |
| #else |
| #define DMC_RATIO 0x1 |
| #endif |
| #define DPHY_RATIO 0x1 |
| #define ACP_PCLK_RATIO 0x1 |
| #define ACP_RATIO 0x3 |
| |
| #define CLK_DIV_DMC0_VAL ((CORE_TIMERS_RATIO << 28) \ |
| |(COPY2_RATIO << 24) \ |
| |(DMCP_RATIO << 20) \ |
| |(DMCD_RATIO << 16) \ |
| |(DMC_RATIO << 12) \ |
| |(DPHY_RATIO << 8) \ |
| |(ACP_PCLK_RATIO << 4) \ |
| |(ACP_RATIO)) |
| |
| #define CLK_DIV_DMC1_VAL (0x07071713) |
| |
| /* CLK_SRC_PERIL0 */ |
| #define UART4_SEL 1 |
| #define UART3_SEL 1 |
| #define UART2_SEL 1 |
| #define UART1_SEL 1 |
| #define UART0_SEL 1 |
| #define CLK_SRC_PERIL0_VAL ((UART4_SEL << 16) \ |
| |(UART3_SEL << 12) \ |
| |(UART2_SEL<< 8) \ |
| |(UART1_SEL << 4) \ |
| |(UART0_SEL)) |
| |
| /* CLK_DIV_PERIL0 */ |
| #define UART4_RATIO 3 |
| #define UART3_RATIO 3 |
| #define UART2_RATIO 3 |
| #define UART1_RATIO 3 |
| #define UART0_RATIO 3 |
| #define CLK_DIV_PERIL0_VAL ((UART4_RATIO << 16) \ |
| |(UART3_RATIO << 12) \ |
| |(UART2_RATIO << 8) \ |
| |(UART1_RATIO << 4) \ |
| |(UART0_RATIO)) |
| |
| /* Power Down Modes */ |
| #define S5P_CHECK_SLEEP 0x00000BAD |
| #define S5P_CHECK_DIDLE 0xBAD00000 |
| #define S5P_CHECK_LPA 0xABAD0000 |
| |
| /* TZPC */ |
| #define TZPC_BASE 0x10110000 |
| #define TZPC_OFFSET 0x10000 |
| #define TZPC0_BASE (TZPC_BASE) |
| #define TZPC1_BASE (TZPC0_BASE + TZPC_OFFSET) |
| #define TZPC2_BASE (TZPC1_BASE + TZPC_OFFSET) |
| #define TZPC3_BASE (TZPC2_BASE + TZPC_OFFSET) |
| #define TZPC4_BASE (TZPC3_BASE + TZPC_OFFSET) |
| #define TZPC5_BASE (TZPC4_BASE + TZPC_OFFSET) |
| #define TZPC_DECPROT0SET_OFFSET 0x804 |
| #define TZPC_DECPROT1SET_OFFSET 0x810 |
| #define TZPC_DECPROT2SET_OFFSET 0x81C |
| #define TZPC_DECPROT3SET_OFFSET 0x828 |
| |
| /* IMAGE SIZE (BYTE) */ |
| #define MBR_BYTE_COUNT CONFIG_MBR_SIZE |
| #define SBL_BYTE_COUNT CONFIG_SBL_SIZE |
| #define BL1_BYTE_COUNT CONFIG_BL1_SIZE |
| #define BL2_BYTE_COUNT CONFIG_BL2_SIZE |
| #define ENV_BYTE_COUNT CONFIG_ENV_SIZE |
| |
| /* IMAGE OFFSET (BYTE) */ |
| #define MBR_BYTE_OFFSET (0) |
| #define SBL_BYTE_OFFSET (MBR_BYTE_OFFSET + MBR_BYTE_COUNT) |
| #define BL1_BYTE_OFFSET (SBL_BYTE_OFFSET + SBL_BYTE_COUNT) |
| #define BL2_BYTE_OFFSET (BL1_BYTE_OFFSET + BL1_BYTE_COUNT) |
| #define ENV_BYTE_OFFSET (Bl2_BYTE_OFFSET + BL2_BYTE_COUNT) |
| |
| #define SDMMC_BLK_SIZE (512) |
| |
| /* IMAGE SIZE (BLOCK) */ |
| #define SBL_BLK_COUNT (SBL_BYTE_COUNT / SDMMC_BLK_SIZE) |
| #define BL1_BLK_COUNT (BL1_BYTE_COUNT / SDMMC_BLK_SIZE) |
| #define BL2_BLK_COUNT (BL2_BYTE_COUNT / SDMMC_BLK_SIZE) |
| #define ENV_BLK_COUNT (ENV_BYTE_COUNT / SDMMC_BLK_SIZE) |
| |
| /* IMAGE OFFSET (BLOCK) */ |
| #define SBL_BLK_OFFSET (SBL_BYTE_OFFSET / SDMMC_BLK_SIZE) |
| #define BL1_BLK_OFFSET (BL1_BYTE_OFFSET / SDMMC_BLK_SIZE) |
| #define BL2_BLK_OFFSET (BL2_BYTE_OFFSET / SDMMC_BLK_SIZE) |
| #define ENV_BLK_OFFSET (ENV_BYTE_OFFSET / SDMMC_BLK_SIZE) |
| |
| /* UART */ |
| #if defined(CONFIG_SERIAL0) |
| #define PERIPH_ID_UART PERIPH_ID_UART0 |
| #elif defined(CONFIG_SERIAL1) |
| #define PERIPH_ID_UART PERIPH_ID_UART1 |
| #elif defined(CONFIG_SERIAL2) |
| #define PERIPH_ID_UART PERIPH_ID_UART2 |
| #elif defined(CONFIG_SERIAL3) |
| #define PERIPH_ID_UART PERIPH_ID_UART3 |
| #endif |
| |
| #ifndef __ASSEMBLY__ |
| void sdelay(unsigned long); |
| void clock_ctrl_init(void); |
| void mem_ctrl_init(void); |
| void tzpc_init(void); |
| #endif |
| |
| #endif /* __SETUP_ORIGEN_QUAD_H */ |