cpu.h 9.3 KB
Newer Older
M
Minkyu Kang 已提交
1 2 3 4
/*
 * (C) Copyright 2010 Samsung Electronics
 * Minkyu Kang <mk7.kang@samsung.com>
 *
5
 * SPDX-License-Identifier:	GPL-2.0+
M
Minkyu Kang 已提交
6 7
 */

8 9
#ifndef _EXYNOS4_CPU_H
#define _EXYNOS4_CPU_H
M
Minkyu Kang 已提交
10

11 12
#define DEVICE_NOT_AVAILABLE		0

13
#define EXYNOS_CPU_NAME			"Exynos"
14
#define EXYNOS4_ADDR_BASE		0x10000000
M
Minkyu Kang 已提交
15

16
/* EXYNOS4 Common*/
17 18
#define EXYNOS4_I2C_SPACING		0x10000

19 20
#define EXYNOS4_GPIO_PART3_BASE		0x03860000
#define EXYNOS4_PRO_ID			0x10000000
21
#define EXYNOS4_SYSREG_BASE		0x10010000
22 23 24 25 26
#define EXYNOS4_POWER_BASE		0x10020000
#define EXYNOS4_SWRESET			0x10020400
#define EXYNOS4_CLOCK_BASE		0x10030000
#define EXYNOS4_SYSTIMER_BASE		0x10050000
#define EXYNOS4_WATCHDOG_BASE		0x10060000
27
#define EXYNOS4_TZPC_BASE		0x10110000
28
#define EXYNOS4_MIU_BASE		0x10600000
29
#define EXYNOS4_DMC_CTRL_BASE		0x10400000
30 31 32
#define EXYNOS4_GPIO_PART2_BASE		0x11000000
#define EXYNOS4_GPIO_PART1_BASE		0x11400000
#define EXYNOS4_FIMD_BASE		0x11C00000
33
#define EXYNOS4_MIPI_DSIM_BASE		0x11C80000
34 35 36
#define EXYNOS4_USBOTG_BASE		0x12480000
#define EXYNOS4_MMC_BASE		0x12510000
#define EXYNOS4_SROMC_BASE		0x12570000
37
#define EXYNOS4_USB_HOST_EHCI_BASE	0x12580000
38 39
#define EXYNOS4_USBPHY_BASE		0x125B0000
#define EXYNOS4_UART_BASE		0x13800000
40
#define EXYNOS4_I2C_BASE		0x13860000
41
#define EXYNOS4_ADC_BASE		0x13910000
H
Hatim RV 已提交
42
#define EXYNOS4_SPI_BASE		0x13920000
43 44
#define EXYNOS4_PWMTIMER_BASE		0x139D0000
#define EXYNOS4_MODEM_BASE		0x13A00000
45
#define EXYNOS4_USBPHY_CONTROL		0x10020704
R
Rajeshwari Shinde 已提交
46
#define EXYNOS4_I2S_BASE		0xE2100000
47 48

#define EXYNOS4_GPIO_PART4_BASE		DEVICE_NOT_AVAILABLE
49
#define EXYNOS4_DP_BASE			DEVICE_NOT_AVAILABLE
H
Hatim RV 已提交
50
#define EXYNOS4_SPI_ISP_BASE		DEVICE_NOT_AVAILABLE
51
#define EXYNOS4_ACE_SFR_BASE		DEVICE_NOT_AVAILABLE
52
#define EXYNOS4_DMC_PHY_BASE		DEVICE_NOT_AVAILABLE
53
#define EXYNOS4_AUDIOSS_BASE		DEVICE_NOT_AVAILABLE
54 55
#define EXYNOS4_USB_HOST_XHCI_BASE	DEVICE_NOT_AVAILABLE
#define EXYNOS4_USB3PHY_BASE		DEVICE_NOT_AVAILABLE
56

57 58 59 60 61 62 63 64 65 66
/* EXYNOS4X12 */
#define EXYNOS4X12_GPIO_PART3_BASE	0x03860000
#define EXYNOS4X12_PRO_ID		0x10000000
#define EXYNOS4X12_SYSREG_BASE		0x10010000
#define EXYNOS4X12_POWER_BASE		0x10020000
#define EXYNOS4X12_SWRESET		0x10020400
#define EXYNOS4X12_USBPHY_CONTROL	0x10020704
#define EXYNOS4X12_CLOCK_BASE		0x10030000
#define EXYNOS4X12_SYSTIMER_BASE	0x10050000
#define EXYNOS4X12_WATCHDOG_BASE	0x10060000
67
#define EXYNOS4X12_TZPC_BASE		0x10110000
68
#define EXYNOS4X12_DMC_CTRL_BASE	0x10600000
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
#define EXYNOS4X12_GPIO_PART4_BASE	0x106E0000
#define EXYNOS4X12_GPIO_PART2_BASE	0x11000000
#define EXYNOS4X12_GPIO_PART1_BASE	0x11400000
#define EXYNOS4X12_FIMD_BASE		0x11C00000
#define EXYNOS4X12_MIPI_DSIM_BASE	0x11C80000
#define EXYNOS4X12_USBOTG_BASE		0x12480000
#define EXYNOS4X12_MMC_BASE		0x12510000
#define EXYNOS4X12_SROMC_BASE		0x12570000
#define EXYNOS4X12_USB_HOST_EHCI_BASE	0x12580000
#define EXYNOS4X12_USBPHY_BASE		0x125B0000
#define EXYNOS4X12_UART_BASE		0x13800000
#define EXYNOS4X12_I2C_BASE		0x13860000
#define EXYNOS4X12_PWMTIMER_BASE	0x139D0000

#define EXYNOS4X12_ADC_BASE		DEVICE_NOT_AVAILABLE
#define EXYNOS4X12_DP_BASE		DEVICE_NOT_AVAILABLE
#define EXYNOS4X12_MODEM_BASE		DEVICE_NOT_AVAILABLE
86 87 88
#define EXYNOS4X12_I2S_BASE		DEVICE_NOT_AVAILABLE
#define EXYNOS4X12_SPI_BASE		DEVICE_NOT_AVAILABLE
#define EXYNOS4X12_SPI_ISP_BASE		DEVICE_NOT_AVAILABLE
89
#define EXYNOS4X12_ACE_SFR_BASE		DEVICE_NOT_AVAILABLE
90
#define EXYNOS4X12_DMC_PHY_BASE		DEVICE_NOT_AVAILABLE
91
#define EXYNOS4X12_AUDIOSS_BASE		DEVICE_NOT_AVAILABLE
92 93
#define EXYNOS4X12_USB_HOST_XHCI_BASE	DEVICE_NOT_AVAILABLE
#define EXYNOS4X12_USB3PHY_BASE		DEVICE_NOT_AVAILABLE
94

95
/* EXYNOS5 */
96 97
#define EXYNOS5_I2C_SPACING		0x10000

98
#define EXYNOS5_AUDIOSS_BASE		0x03810000
99 100 101 102 103 104
#define EXYNOS5_GPIO_PART4_BASE		0x03860000
#define EXYNOS5_PRO_ID			0x10000000
#define EXYNOS5_CLOCK_BASE		0x10010000
#define EXYNOS5_POWER_BASE		0x10040000
#define EXYNOS5_SWRESET			0x10040400
#define EXYNOS5_SYSREG_BASE		0x10050000
105
#define EXYNOS5_TZPC_BASE		0x10100000
106
#define EXYNOS5_WATCHDOG_BASE		0x101D0000
107
#define EXYNOS5_ACE_SFR_BASE            0x10830000
108
#define EXYNOS5_DMC_PHY_BASE		0x10C00000
109 110 111
#define EXYNOS5_GPIO_PART3_BASE		0x10D10000
#define EXYNOS5_DMC_CTRL_BASE		0x10DD0000
#define EXYNOS5_GPIO_PART1_BASE		0x11400000
112
#define EXYNOS5_MIPI_DSIM_BASE		0x11D00000
113 114
#define EXYNOS5_USB_HOST_XHCI_BASE	0x12000000
#define EXYNOS5_USB3PHY_BASE		0x12100000
115
#define EXYNOS5_USB_HOST_EHCI_BASE	0x12110000
116 117
#define EXYNOS5_USBPHY_BASE		0x12130000
#define EXYNOS5_USBOTG_BASE		0x12140000
118 119 120
#define EXYNOS5_MMC_BASE		0x12200000
#define EXYNOS5_SROMC_BASE		0x12250000
#define EXYNOS5_UART_BASE		0x12C00000
121
#define EXYNOS5_I2C_BASE		0x12C60000
H
Hatim RV 已提交
122
#define EXYNOS5_SPI_BASE		0x12D20000
R
Rajeshwari Shinde 已提交
123
#define EXYNOS5_I2S_BASE		0x12D60000
124
#define EXYNOS5_PWMTIMER_BASE		0x12DD0000
H
Hatim RV 已提交
125
#define EXYNOS5_SPI_ISP_BASE		0x131A0000
126 127
#define EXYNOS5_GPIO_PART2_BASE		0x13400000
#define EXYNOS5_FIMD_BASE		0x14400000
128
#define EXYNOS5_DP_BASE			0x145B0000
129 130 131

#define EXYNOS5_ADC_BASE		DEVICE_NOT_AVAILABLE
#define EXYNOS5_MODEM_BASE		DEVICE_NOT_AVAILABLE
M
Minkyu Kang 已提交
132

133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
/* EXYNOS5420 */
#define EXYNOS5420_AUDIOSS_BASE		0x03810000
#define EXYNOS5420_GPIO_PART5_BASE	0x03860000
#define EXYNOS5420_PRO_ID		0x10000000
#define EXYNOS5420_CLOCK_BASE		0x10010000
#define EXYNOS5420_POWER_BASE		0x10040000
#define EXYNOS5420_SWRESET		0x10040400
#define EXYNOS5420_SYSREG_BASE		0x10050000
#define EXYNOS5420_TZPC_BASE		0x100E0000
#define EXYNOS5420_WATCHDOG_BASE	0x101D0000
#define EXYNOS5420_ACE_SFR_BASE		0x10830000
#define EXYNOS5420_DMC_PHY_BASE		0x10C00000
#define EXYNOS5420_DMC_CTRL_BASE	0x10C20000
#define EXYNOS5420_DMC_TZASC0_BASE	0x10D40000
#define EXYNOS5420_DMC_TZASC1_BASE	0x10D50000
#define EXYNOS5420_USB_HOST_EHCI_BASE	0x12110000
#define EXYNOS5420_MMC_BASE		0x12200000
#define EXYNOS5420_SROMC_BASE		0x12250000
#define EXYNOS5420_UART_BASE		0x12C00000
#define EXYNOS5420_I2C_BASE		0x12C60000
#define EXYNOS5420_I2C_8910_BASE	0x12E00000
#define EXYNOS5420_SPI_BASE		0x12D20000
#define EXYNOS5420_I2S_BASE		0x12D60000
#define EXYNOS5420_PWMTIMER_BASE	0x12DD0000
#define EXYNOS5420_SPI_ISP_BASE		0x131A0000
#define EXYNOS5420_GPIO_PART2_BASE	0x13400000
#define EXYNOS5420_GPIO_PART3_BASE	0x13410000
#define EXYNOS5420_GPIO_PART4_BASE	0x14000000
#define EXYNOS5420_GPIO_PART1_BASE	0x14010000
#define EXYNOS5420_MIPI_DSIM_BASE	0x14500000
#define EXYNOS5420_DP_BASE		0x145B0000

#define EXYNOS5420_USBPHY_BASE		DEVICE_NOT_AVAILABLE
#define EXYNOS5420_USBOTG_BASE		DEVICE_NOT_AVAILABLE
#define EXYNOS5420_FIMD_BASE		DEVICE_NOT_AVAILABLE
#define EXYNOS5420_ADC_BASE		DEVICE_NOT_AVAILABLE
#define EXYNOS5420_MODEM_BASE		DEVICE_NOT_AVAILABLE
#define EXYNOS5420_USB3PHY_BASE		DEVICE_NOT_AVAILABLE
#define EXYNOS5420_USB_HOST_XHCI_BASE	DEVICE_NOT_AVAILABLE

M
Minkyu Kang 已提交
173 174 175 176
#ifndef __ASSEMBLY__
#include <asm/io.h>
/* CPU detection macros */
extern unsigned int s5p_cpu_id;
M
Minkyu Kang 已提交
177 178 179 180 181 182
extern unsigned int s5p_cpu_rev;

static inline int s5p_get_cpu_rev(void)
{
	return s5p_cpu_rev;
}
M
Minkyu Kang 已提交
183 184 185

static inline void s5p_set_cpu_id(void)
{
186 187 188 189 190 191
	unsigned int pro_id = (readl(EXYNOS4_PRO_ID) & 0x00FFF000) >> 12;

	switch (pro_id) {
	case 0x200:
		/* Exynos4210 EVT0 */
		s5p_cpu_id = 0x4210;
M
Minkyu Kang 已提交
192
		s5p_cpu_rev = 0;
193 194 195 196 197 198 199 200 201 202 203 204 205
		break;
	case 0x210:
		/* Exynos4210 EVT1 */
		s5p_cpu_id = 0x4210;
		break;
	case 0x412:
		/* Exynos4412 */
		s5p_cpu_id = 0x4412;
		break;
	case 0x520:
		/* Exynos5250 */
		s5p_cpu_id = 0x5250;
		break;
206 207 208 209
	case 0x420:
		/* Exynos5420 */
		s5p_cpu_id = 0x5420;
		break;
M
Minkyu Kang 已提交
210
	}
M
Minkyu Kang 已提交
211 212
}

213 214 215 216 217
static inline char *s5p_get_cpu_name(void)
{
	return EXYNOS_CPU_NAME;
}

M
Minkyu Kang 已提交
218
#define IS_SAMSUNG_TYPE(type, id)			\
219
static inline int __attribute__((no_instrument_function)) cpu_is_##type(void) \
M
Minkyu Kang 已提交
220
{							\
221
	return (s5p_cpu_id >> 12) == id;		\
M
Minkyu Kang 已提交
222 223
}

224 225
IS_SAMSUNG_TYPE(exynos4, 0x4)
IS_SAMSUNG_TYPE(exynos5, 0x5)
M
Minkyu Kang 已提交
226

227
#define IS_EXYNOS_TYPE(type, id)			\
228 229
static inline int __attribute__((no_instrument_function)) \
	proid_is_##type(void)				\
230 231 232 233 234
{							\
	return s5p_cpu_id == id;			\
}

IS_EXYNOS_TYPE(exynos4210, 0x4210)
235
IS_EXYNOS_TYPE(exynos4412, 0x4412)
236
IS_EXYNOS_TYPE(exynos5250, 0x5250)
237
IS_EXYNOS_TYPE(exynos5420, 0x5420)
238

M
Minkyu Kang 已提交
239
#define SAMSUNG_BASE(device, base)				\
240 241
static inline unsigned int __attribute__((no_instrument_function)) \
	samsung_get_base_##device(void) \
M
Minkyu Kang 已提交
242
{								\
243
	if (cpu_is_exynos4()) {				\
244 245
		if (proid_is_exynos4412())			\
			return EXYNOS4X12_##base;		\
246
		return EXYNOS4_##base;				\
247
	} else if (cpu_is_exynos5()) {				\
248 249
		if (proid_is_exynos5420())			\
			return EXYNOS5420_##base;		\
250
		return EXYNOS5_##base;				\
251 252
	}							\
	return 0;						\
M
Minkyu Kang 已提交
253 254 255 256
}

SAMSUNG_BASE(adc, ADC_BASE)
SAMSUNG_BASE(clock, CLOCK_BASE)
257
SAMSUNG_BASE(ace_sfr, ACE_SFR_BASE)
258
SAMSUNG_BASE(dp, DP_BASE)
259
SAMSUNG_BASE(sysreg, SYSREG_BASE)
M
Minkyu Kang 已提交
260
SAMSUNG_BASE(fimd, FIMD_BASE)
261
SAMSUNG_BASE(i2c, I2C_BASE)
R
Rajeshwari Shinde 已提交
262
SAMSUNG_BASE(i2s, I2S_BASE)
263
SAMSUNG_BASE(mipi_dsim, MIPI_DSIM_BASE)
M
Minkyu Kang 已提交
264 265 266
SAMSUNG_BASE(gpio_part1, GPIO_PART1_BASE)
SAMSUNG_BASE(gpio_part2, GPIO_PART2_BASE)
SAMSUNG_BASE(gpio_part3, GPIO_PART3_BASE)
267
SAMSUNG_BASE(gpio_part4, GPIO_PART4_BASE)
M
Minkyu Kang 已提交
268 269 270 271 272 273 274 275
SAMSUNG_BASE(pro_id, PRO_ID)
SAMSUNG_BASE(mmc, MMC_BASE)
SAMSUNG_BASE(modem, MODEM_BASE)
SAMSUNG_BASE(sromc, SROMC_BASE)
SAMSUNG_BASE(swreset, SWRESET)
SAMSUNG_BASE(timer, PWMTIMER_BASE)
SAMSUNG_BASE(uart, UART_BASE)
SAMSUNG_BASE(usb_phy, USBPHY_BASE)
276
SAMSUNG_BASE(usb3_phy, USB3PHY_BASE)
277
SAMSUNG_BASE(usb_ehci, USB_HOST_EHCI_BASE)
278
SAMSUNG_BASE(usb_xhci, USB_HOST_XHCI_BASE)
M
Minkyu Kang 已提交
279 280
SAMSUNG_BASE(usb_otg, USBOTG_BASE)
SAMSUNG_BASE(watchdog, WATCHDOG_BASE)
281
SAMSUNG_BASE(power, POWER_BASE)
H
Hatim RV 已提交
282 283
SAMSUNG_BASE(spi, SPI_BASE)
SAMSUNG_BASE(spi_isp, SPI_ISP_BASE)
284
SAMSUNG_BASE(tzpc, TZPC_BASE)
285 286
SAMSUNG_BASE(dmc_ctrl, DMC_CTRL_BASE)
SAMSUNG_BASE(dmc_phy, DMC_PHY_BASE)
287
SAMSUNG_BASE(audio_ass, AUDIOSS_BASE)
M
Minkyu Kang 已提交
288 289
#endif

290
#endif	/* _EXYNOS4_CPU_H */