blob: 6115d6e58dcd4128c5217bd879149c985d18acf8 [file] [log] [blame]
Stefan Roese41e5ee52014-10-22 12:13:17 +02001/*
2 * (C) Copyright 2009
3 * Marvell Semiconductor <www.marvell.com>
4 * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
5 *
6 * Header file for the Marvell's Feroceon CPU core.
7 *
8 * SPDX-License-Identifier: GPL-2.0+
9 */
10
Stefan Roese250eea72015-04-25 06:29:47 +020011#ifndef _MVEBU_SOC_H
12#define _MVEBU_SOC_H
Stefan Roese41e5ee52014-10-22 12:13:17 +020013
Stefan Roese2a0b7dc2015-07-16 10:40:05 +020014#define BIT(x) (1 << (x))
15
Stefan Roese41e5ee52014-10-22 12:13:17 +020016#define SOC_MV78460_ID 0x7846
Stefan Roese9c6d3b72015-04-25 06:29:51 +020017#define SOC_88F6810_ID 0x6810
18#define SOC_88F6820_ID 0x6820
19#define SOC_88F6828_ID 0x6828
20
21/* A38x revisions */
22#define MV_88F68XX_Z1_ID 0x0
23#define MV_88F68XX_A0_ID 0x4
Stefan Roese41e5ee52014-10-22 12:13:17 +020024
25/* TCLK Core Clock definition */
26#ifndef CONFIG_SYS_TCLK
27#define CONFIG_SYS_TCLK 250000000 /* 250MHz */
28#endif
29
Stefan Roese2a0b7dc2015-07-16 10:40:05 +020030/* Armada XP PLL frequency (used for NAND clock generation) */
31#define CONFIG_SYS_MVEBU_PLL_CLOCK 2000000000
32
Stefan Roese41e5ee52014-10-22 12:13:17 +020033/* SOC specific definations */
34#define INTREG_BASE 0xd0000000
35#define INTREG_BASE_ADDR_REG (INTREG_BASE + 0x20080)
Stefan Roese21427702015-04-17 18:12:41 +020036#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SYS_MVEBU_DDR_A38X)
37/*
38 * On A38x switching the regs base address without running from
39 * SDRAM doesn't seem to work. So let the SPL still use the
40 * default base address and switch to the new address in the
41 * main u-boot later.
42 */
43#define SOC_REGS_PHY_BASE 0xd0000000
44#else
Stefan Roese41e5ee52014-10-22 12:13:17 +020045#define SOC_REGS_PHY_BASE 0xf1000000
Stefan Roese21427702015-04-17 18:12:41 +020046#endif
Stefan Roese41e5ee52014-10-22 12:13:17 +020047#define MVEBU_REGISTER(x) (SOC_REGS_PHY_BASE + x)
48
49#define MVEBU_SDRAM_SCRATCH (MVEBU_REGISTER(0x01504))
Stefan Roese9c6d3b72015-04-25 06:29:51 +020050#define MVEBU_L2_CACHE_BASE (MVEBU_REGISTER(0x08000))
51#define CONFIG_SYS_PL310_BASE MVEBU_L2_CACHE_BASE
Stefan Roese41e5ee52014-10-22 12:13:17 +020052#define MVEBU_SPI_BASE (MVEBU_REGISTER(0x10600))
53#define MVEBU_TWSI_BASE (MVEBU_REGISTER(0x11000))
54#define MVEBU_UART0_BASE (MVEBU_REGISTER(0x12000))
55#define MVEBU_UART1_BASE (MVEBU_REGISTER(0x12100))
56#define MVEBU_MPP_BASE (MVEBU_REGISTER(0x18000))
57#define MVEBU_GPIO0_BASE (MVEBU_REGISTER(0x18100))
58#define MVEBU_GPIO1_BASE (MVEBU_REGISTER(0x18140))
59#define MVEBU_GPIO2_BASE (MVEBU_REGISTER(0x18180))
60#define MVEBU_SYSTEM_REG_BASE (MVEBU_REGISTER(0x18200))
Stefan Roese2a0b7dc2015-07-16 10:40:05 +020061#define MVEBU_CLOCK_BASE (MVEBU_REGISTER(0x18700))
Stefan Roese41e5ee52014-10-22 12:13:17 +020062#define MVEBU_CPU_WIN_BASE (MVEBU_REGISTER(0x20000))
63#define MVEBU_SDRAM_BASE (MVEBU_REGISTER(0x20180))
64#define MVEBU_TIMER_BASE (MVEBU_REGISTER(0x20300))
65#define MVEBU_EGIGA2_BASE (MVEBU_REGISTER(0x30000))
66#define MVEBU_EGIGA3_BASE (MVEBU_REGISTER(0x34000))
67#define MVEBU_REG_PCIE_BASE (MVEBU_REGISTER(0x40000))
Stefan Roesefe11ae22015-06-29 14:58:15 +020068#define MVEBU_USB20_BASE (MVEBU_REGISTER(0x58000))
Stefan Roese41e5ee52014-10-22 12:13:17 +020069#define MVEBU_EGIGA0_BASE (MVEBU_REGISTER(0x70000))
70#define MVEBU_EGIGA1_BASE (MVEBU_REGISTER(0x74000))
Anton Schuberte863f7f2015-07-15 14:50:05 +020071#define MVEBU_AXP_SATA_BASE (MVEBU_REGISTER(0xa0000))
Stefan Roese4d991cb2015-06-29 14:58:13 +020072#define MVEBU_SATA0_BASE (MVEBU_REGISTER(0xa8000))
Stefan Roese2a0b7dc2015-07-16 10:40:05 +020073#define MVEBU_NAND_BASE (MVEBU_REGISTER(0xd0000))
Stefan Roese7f1adcd2015-06-29 14:58:10 +020074#define MVEBU_SDIO_BASE (MVEBU_REGISTER(0xd8000))
Stefan Roese41e5ee52014-10-22 12:13:17 +020075
Stefan Roese501c0982015-07-01 13:28:39 +020076#define SOC_COHERENCY_FABRIC_CTRL_REG (MVEBU_REGISTER(0x20200))
77#define MBUS_ERR_PROP_EN (1 << 8)
78
Stefan Roese5b72dbf2015-07-01 12:44:51 +020079#define MBUS_BRIDGE_WIN_CTRL_REG (MVEBU_REGISTER(0x20250))
80#define MBUS_BRIDGE_WIN_BASE_REG (MVEBU_REGISTER(0x20254))
81
Stefan Roese2a0b7dc2015-07-16 10:40:05 +020082#define MVEBU_SOC_DEV_MUX_REG (MVEBU_SYSTEM_REG_BASE + 0x08)
83#define NAND_EN BIT(0)
84#define NAND_ARBITER_EN BIT(27)
85
86#define ARMADA_XP_PUP_ENABLE (MVEBU_SYSTEM_REG_BASE + 0x44c)
87#define GE0_PUP_EN BIT(0)
88#define GE1_PUP_EN BIT(1)
89#define LCD_PUP_EN BIT(2)
90#define NAND_PUP_EN BIT(4)
91#define SPI_PUP_EN BIT(5)
92
93#define MVEBU_CORE_DIV_CLK_CTRL(i) (MVEBU_CLOCK_BASE + ((i) * 0x8))
94#define NAND_ECC_DIVCKL_RATIO_OFFS 8
95#define NAND_ECC_DIVCKL_RATIO_MASK (0x3F << NAND_ECC_DIVCKL_RATIO_OFFS)
96
Stefan Roese41e5ee52014-10-22 12:13:17 +020097#define SDRAM_MAX_CS 4
98#define SDRAM_ADDR_MASK 0xFF000000
99
Stefan Roese250eea72015-04-25 06:29:47 +0200100/* MVEBU CPU memory windows */
Stefan Roese41e5ee52014-10-22 12:13:17 +0200101#define MVCPU_WIN_CTRL_DATA CPU_WIN_CTRL_DATA
102#define MVCPU_WIN_ENABLE CPU_WIN_ENABLE
103#define MVCPU_WIN_DISABLE CPU_WIN_DISABLE
104
Stefan Roese250eea72015-04-25 06:29:47 +0200105#endif /* _MVEBU_SOC_H */