xref: /rk3399_rockchip-uboot/arch/arm/mach-exynos/include/mach/cpu.h (revision dc557e9a1fe00ca9d884bd88feef5bebf23fede4)
177b55e8cSThomas Abraham /*
277b55e8cSThomas Abraham  * (C) Copyright 2010 Samsung Electronics
377b55e8cSThomas Abraham  * Minkyu Kang <mk7.kang@samsung.com>
477b55e8cSThomas Abraham  *
577b55e8cSThomas Abraham  * SPDX-License-Identifier:	GPL-2.0+
677b55e8cSThomas Abraham  */
777b55e8cSThomas Abraham 
877b55e8cSThomas Abraham #ifndef _EXYNOS4_CPU_H
977b55e8cSThomas Abraham #define _EXYNOS4_CPU_H
1077b55e8cSThomas Abraham 
1177b55e8cSThomas Abraham #define DEVICE_NOT_AVAILABLE		0
1277b55e8cSThomas Abraham 
1377b55e8cSThomas Abraham #define EXYNOS_CPU_NAME			"Exynos"
1477b55e8cSThomas Abraham #define EXYNOS4_ADDR_BASE		0x10000000
1577b55e8cSThomas Abraham 
1677b55e8cSThomas Abraham /* EXYNOS4 Common*/
1777b55e8cSThomas Abraham #define EXYNOS4_I2C_SPACING		0x10000
1877b55e8cSThomas Abraham 
1977b55e8cSThomas Abraham #define EXYNOS4_GPIO_PART3_BASE		0x03860000
2077b55e8cSThomas Abraham #define EXYNOS4_PRO_ID			0x10000000
2177b55e8cSThomas Abraham #define EXYNOS4_SYSREG_BASE		0x10010000
2277b55e8cSThomas Abraham #define EXYNOS4_POWER_BASE		0x10020000
2377b55e8cSThomas Abraham #define EXYNOS4_SWRESET			0x10020400
2477b55e8cSThomas Abraham #define EXYNOS4_CLOCK_BASE		0x10030000
2577b55e8cSThomas Abraham #define EXYNOS4_SYSTIMER_BASE		0x10050000
2677b55e8cSThomas Abraham #define EXYNOS4_WATCHDOG_BASE		0x10060000
2777b55e8cSThomas Abraham #define EXYNOS4_TZPC_BASE		0x10110000
2877b55e8cSThomas Abraham #define EXYNOS4_DMC_CTRL_BASE		0x10400000
2977b55e8cSThomas Abraham #define EXYNOS4_MIU_BASE		0x10600000
3077b55e8cSThomas Abraham #define EXYNOS4_ACE_SFR_BASE		0x10830000
3177b55e8cSThomas Abraham #define EXYNOS4_GPIO_PART2_BASE		0x11000000
3277b55e8cSThomas Abraham #define EXYNOS4_GPIO_PART2_0		0x11000000 /* GPJ0 */
3377b55e8cSThomas Abraham #define EXYNOS4_GPIO_PART2_1		0x11000c00 /* GPX0 */
3477b55e8cSThomas Abraham #define EXYNOS4_GPIO_PART1_BASE		0x11400000
3577b55e8cSThomas Abraham #define EXYNOS4_FIMD_BASE		0x11C00000
3677b55e8cSThomas Abraham #define EXYNOS4_MIPI_DSIM_BASE		0x11C80000
3777b55e8cSThomas Abraham #define EXYNOS4_USBOTG_BASE		0x12480000
3877b55e8cSThomas Abraham #define EXYNOS4_MMC_BASE		0x12510000
3977b55e8cSThomas Abraham #define EXYNOS4_SROMC_BASE		0x12570000
4077b55e8cSThomas Abraham #define EXYNOS4_USB_HOST_EHCI_BASE	0x12580000
4177b55e8cSThomas Abraham #define EXYNOS4_USBPHY_BASE		0x125B0000
4277b55e8cSThomas Abraham #define EXYNOS4_UART_BASE		0x13800000
4377b55e8cSThomas Abraham #define EXYNOS4_I2C_BASE		0x13860000
4477b55e8cSThomas Abraham #define EXYNOS4_ADC_BASE		0x13910000
4577b55e8cSThomas Abraham #define EXYNOS4_SPI_BASE		0x13920000
4677b55e8cSThomas Abraham #define EXYNOS4_PWMTIMER_BASE		0x139D0000
4777b55e8cSThomas Abraham #define EXYNOS4_MODEM_BASE		0x13A00000
4877b55e8cSThomas Abraham #define EXYNOS4_USBPHY_CONTROL		0x10020704
4977b55e8cSThomas Abraham #define EXYNOS4_I2S_BASE		0xE2100000
5077b55e8cSThomas Abraham 
5177b55e8cSThomas Abraham #define EXYNOS4_GPIO_PART4_BASE		DEVICE_NOT_AVAILABLE
5277b55e8cSThomas Abraham #define EXYNOS4_DP_BASE			DEVICE_NOT_AVAILABLE
5377b55e8cSThomas Abraham #define EXYNOS4_SPI_ISP_BASE		DEVICE_NOT_AVAILABLE
5477b55e8cSThomas Abraham #define EXYNOS4_DMC_PHY_BASE		DEVICE_NOT_AVAILABLE
5577b55e8cSThomas Abraham #define EXYNOS4_AUDIOSS_BASE		DEVICE_NOT_AVAILABLE
5677b55e8cSThomas Abraham #define EXYNOS4_USB_HOST_XHCI_BASE	DEVICE_NOT_AVAILABLE
5777b55e8cSThomas Abraham #define EXYNOS4_USB3PHY_BASE		DEVICE_NOT_AVAILABLE
5877b55e8cSThomas Abraham #define EXYNOS4_DMC_TZASC_BASE		DEVICE_NOT_AVAILABLE
5977b55e8cSThomas Abraham 
6077b55e8cSThomas Abraham /* EXYNOS4X12 */
6177b55e8cSThomas Abraham #define EXYNOS4X12_GPIO_PART3_BASE	0x03860000
6277b55e8cSThomas Abraham #define EXYNOS4X12_PRO_ID		0x10000000
6377b55e8cSThomas Abraham #define EXYNOS4X12_SYSREG_BASE		0x10010000
6477b55e8cSThomas Abraham #define EXYNOS4X12_POWER_BASE		0x10020000
6577b55e8cSThomas Abraham #define EXYNOS4X12_SWRESET		0x10020400
6677b55e8cSThomas Abraham #define EXYNOS4X12_USBPHY_CONTROL	0x10020704
6777b55e8cSThomas Abraham #define EXYNOS4X12_CLOCK_BASE		0x10030000
6877b55e8cSThomas Abraham #define EXYNOS4X12_SYSTIMER_BASE	0x10050000
6977b55e8cSThomas Abraham #define EXYNOS4X12_WATCHDOG_BASE	0x10060000
7077b55e8cSThomas Abraham #define EXYNOS4X12_TZPC_BASE		0x10110000
7177b55e8cSThomas Abraham #define EXYNOS4X12_DMC_CTRL_BASE	0x10600000
7277b55e8cSThomas Abraham #define EXYNOS4X12_GPIO_PART4_BASE	0x106E0000
7377b55e8cSThomas Abraham #define EXYNOS4X12_ACE_SFR_BASE		0x10830000
7477b55e8cSThomas Abraham #define EXYNOS4X12_GPIO_PART2_BASE	0x11000000
7577b55e8cSThomas Abraham #define EXYNOS4X12_GPIO_PART2_0		0x11000000
7677b55e8cSThomas Abraham #define EXYNOS4X12_GPIO_PART2_1		0x11000040 /* GPK0 */
7777b55e8cSThomas Abraham #define EXYNOS4X12_GPIO_PART2_2		0x11000260 /* GPM0 */
7877b55e8cSThomas Abraham #define EXYNOS4X12_GPIO_PART2_3		0x11000c00 /* GPX0 */
7977b55e8cSThomas Abraham #define EXYNOS4X12_GPIO_PART1_BASE	0x11400000
8077b55e8cSThomas Abraham #define EXYNOS4X12_GPIO_PART1_0		0x11400000 /* GPA0 */
8177b55e8cSThomas Abraham #define EXYNOS4X12_GPIO_PART1_1		0x11400180 /* GPF0 */
8277b55e8cSThomas Abraham #define EXYNOS4X12_GPIO_PART1_2		0x11400240 /* GPJ0 */
8377b55e8cSThomas Abraham #define EXYNOS4X12_FIMD_BASE		0x11C00000
8477b55e8cSThomas Abraham #define EXYNOS4X12_MIPI_DSIM_BASE	0x11C80000
8577b55e8cSThomas Abraham #define EXYNOS4X12_USBOTG_BASE		0x12480000
8677b55e8cSThomas Abraham #define EXYNOS4X12_MMC_BASE		0x12510000
8777b55e8cSThomas Abraham #define EXYNOS4X12_SROMC_BASE		0x12570000
8877b55e8cSThomas Abraham #define EXYNOS4X12_USB_HOST_EHCI_BASE	0x12580000
8977b55e8cSThomas Abraham #define EXYNOS4X12_USBPHY_BASE		0x125B0000
9077b55e8cSThomas Abraham #define EXYNOS4X12_UART_BASE		0x13800000
9177b55e8cSThomas Abraham #define EXYNOS4X12_I2C_BASE		0x13860000
9277b55e8cSThomas Abraham #define EXYNOS4X12_PWMTIMER_BASE	0x139D0000
9377b55e8cSThomas Abraham 
9477b55e8cSThomas Abraham #define EXYNOS4X12_ADC_BASE		DEVICE_NOT_AVAILABLE
9577b55e8cSThomas Abraham #define EXYNOS4X12_DP_BASE		DEVICE_NOT_AVAILABLE
9677b55e8cSThomas Abraham #define EXYNOS4X12_MODEM_BASE		DEVICE_NOT_AVAILABLE
9777b55e8cSThomas Abraham #define EXYNOS4X12_I2S_BASE		DEVICE_NOT_AVAILABLE
9877b55e8cSThomas Abraham #define EXYNOS4X12_SPI_BASE		DEVICE_NOT_AVAILABLE
9977b55e8cSThomas Abraham #define EXYNOS4X12_SPI_ISP_BASE		DEVICE_NOT_AVAILABLE
10077b55e8cSThomas Abraham #define EXYNOS4X12_DMC_PHY_BASE		DEVICE_NOT_AVAILABLE
10177b55e8cSThomas Abraham #define EXYNOS4X12_AUDIOSS_BASE		DEVICE_NOT_AVAILABLE
10277b55e8cSThomas Abraham #define EXYNOS4X12_USB_HOST_XHCI_BASE	DEVICE_NOT_AVAILABLE
10377b55e8cSThomas Abraham #define EXYNOS4X12_USB3PHY_BASE		DEVICE_NOT_AVAILABLE
10477b55e8cSThomas Abraham #define EXYNOS4X12_DMC_TZASC_BASE	DEVICE_NOT_AVAILABLE
10577b55e8cSThomas Abraham 
10677b55e8cSThomas Abraham /* EXYNOS5 */
10777b55e8cSThomas Abraham #define EXYNOS5_I2C_SPACING		0x10000
10877b55e8cSThomas Abraham 
10977b55e8cSThomas Abraham #define EXYNOS5_AUDIOSS_BASE		0x03810000
11077b55e8cSThomas Abraham #define EXYNOS5_GPIO_PART8_BASE		0x03860000
11177b55e8cSThomas Abraham #define EXYNOS5_PRO_ID			0x10000000
11277b55e8cSThomas Abraham #define EXYNOS5_CLOCK_BASE		0x10010000
11377b55e8cSThomas Abraham #define EXYNOS5_POWER_BASE		0x10040000
11477b55e8cSThomas Abraham #define EXYNOS5_SWRESET			0x10040400
11577b55e8cSThomas Abraham #define EXYNOS5_SYSREG_BASE		0x10050000
11677b55e8cSThomas Abraham #define EXYNOS5_TZPC_BASE		0x10100000
11777b55e8cSThomas Abraham #define EXYNOS5_WATCHDOG_BASE		0x101D0000
11877b55e8cSThomas Abraham #define EXYNOS5_ACE_SFR_BASE		0x10830000
11977b55e8cSThomas Abraham #define EXYNOS5_DMC_PHY_BASE		0x10C00000
12077b55e8cSThomas Abraham #define EXYNOS5_GPIO_PART5_BASE		0x10D10000
12177b55e8cSThomas Abraham #define EXYNOS5_GPIO_PART6_BASE		0x10D10060
12277b55e8cSThomas Abraham #define EXYNOS5_GPIO_PART7_BASE		0x10D100C0
12377b55e8cSThomas Abraham #define EXYNOS5_DMC_CTRL_BASE		0x10DD0000
12477b55e8cSThomas Abraham #define EXYNOS5_GPIO_PART1_BASE		0x11400000
12577b55e8cSThomas Abraham #define EXYNOS5_GPIO_PART2_BASE		0x114002E0
12677b55e8cSThomas Abraham #define EXYNOS5_GPIO_PART3_BASE		0x11400C00
12777b55e8cSThomas Abraham #define EXYNOS5_MIPI_DSIM_BASE		0x11D00000
12877b55e8cSThomas Abraham #define EXYNOS5_USB_HOST_XHCI_BASE	0x12000000
12977b55e8cSThomas Abraham #define EXYNOS5_USB3PHY_BASE		0x12100000
13077b55e8cSThomas Abraham #define EXYNOS5_USB_HOST_EHCI_BASE	0x12110000
13177b55e8cSThomas Abraham #define EXYNOS5_USBPHY_BASE		0x12130000
13277b55e8cSThomas Abraham #define EXYNOS5_USBOTG_BASE		0x12140000
13377b55e8cSThomas Abraham #define EXYNOS5_MMC_BASE		0x12200000
13477b55e8cSThomas Abraham #define EXYNOS5_SROMC_BASE		0x12250000
13577b55e8cSThomas Abraham #define EXYNOS5_UART_BASE		0x12C00000
13677b55e8cSThomas Abraham #define EXYNOS5_I2C_BASE		0x12C60000
13777b55e8cSThomas Abraham #define EXYNOS5_SPI_BASE		0x12D20000
13877b55e8cSThomas Abraham #define EXYNOS5_I2S_BASE		0x12D60000
13977b55e8cSThomas Abraham #define EXYNOS5_PWMTIMER_BASE		0x12DD0000
14077b55e8cSThomas Abraham #define EXYNOS5_SPI_ISP_BASE		0x131A0000
14177b55e8cSThomas Abraham #define EXYNOS5_GPIO_PART4_BASE		0x13400000
14277b55e8cSThomas Abraham #define EXYNOS5_FIMD_BASE		0x14400000
14377b55e8cSThomas Abraham #define EXYNOS5_DP_BASE			0x145B0000
14477b55e8cSThomas Abraham 
14577b55e8cSThomas Abraham #define EXYNOS5_ADC_BASE		DEVICE_NOT_AVAILABLE
14677b55e8cSThomas Abraham #define EXYNOS5_MODEM_BASE		DEVICE_NOT_AVAILABLE
14777b55e8cSThomas Abraham #define EXYNOS5_DMC_TZASC_BASE		DEVICE_NOT_AVAILABLE
14877b55e8cSThomas Abraham 
14977b55e8cSThomas Abraham /* EXYNOS5420 */
15077b55e8cSThomas Abraham #define EXYNOS5420_AUDIOSS_BASE		0x03810000
15177b55e8cSThomas Abraham #define EXYNOS5420_GPIO_PART6_BASE	0x03860000
15277b55e8cSThomas Abraham #define EXYNOS5420_PRO_ID		0x10000000
15377b55e8cSThomas Abraham #define EXYNOS5420_CLOCK_BASE		0x10010000
15477b55e8cSThomas Abraham #define EXYNOS5420_POWER_BASE		0x10040000
15577b55e8cSThomas Abraham #define EXYNOS5420_SWRESET		0x10040400
15677b55e8cSThomas Abraham #define EXYNOS5420_INFORM_BASE		0x10040800
15777b55e8cSThomas Abraham #define EXYNOS5420_SPARE_BASE		0x10040900
15877b55e8cSThomas Abraham #define EXYNOS5420_CPU_CONFIG_BASE	0x10042000
15977b55e8cSThomas Abraham #define EXYNOS5420_CPU_STATUS_BASE	0x10042004
16077b55e8cSThomas Abraham #define EXYNOS5420_SYSREG_BASE		0x10050000
16177b55e8cSThomas Abraham #define EXYNOS5420_TZPC_BASE		0x100E0000
16277b55e8cSThomas Abraham #define EXYNOS5420_WATCHDOG_BASE	0x101D0000
16377b55e8cSThomas Abraham #define EXYNOS5420_ACE_SFR_BASE		0x10830000
16477b55e8cSThomas Abraham #define EXYNOS5420_DMC_PHY_BASE		0x10C00000
16577b55e8cSThomas Abraham #define EXYNOS5420_DMC_CTRL_BASE	0x10C20000
16677b55e8cSThomas Abraham #define EXYNOS5420_DMC_TZASC_BASE	0x10D40000
16777b55e8cSThomas Abraham #define EXYNOS5420_USB_HOST_EHCI_BASE	0x12110000
16877b55e8cSThomas Abraham #define EXYNOS5420_MMC_BASE		0x12200000
16977b55e8cSThomas Abraham #define EXYNOS5420_SROMC_BASE		0x12250000
17077b55e8cSThomas Abraham #define EXYNOS5420_USB3PHY_BASE	0x12500000
17177b55e8cSThomas Abraham #define EXYNOS5420_UART_BASE		0x12C00000
17277b55e8cSThomas Abraham #define EXYNOS5420_I2C_BASE		0x12C60000
17377b55e8cSThomas Abraham #define EXYNOS5420_I2C_8910_BASE	0x12E00000
17477b55e8cSThomas Abraham #define EXYNOS5420_SPI_BASE		0x12D20000
17577b55e8cSThomas Abraham #define EXYNOS5420_I2S_BASE		0x12D60000
17677b55e8cSThomas Abraham #define EXYNOS5420_PWMTIMER_BASE	0x12DD0000
17777b55e8cSThomas Abraham #define EXYNOS5420_SPI_ISP_BASE		0x131A0000
17877b55e8cSThomas Abraham #define EXYNOS5420_GPIO_PART2_BASE	0x13400000
17977b55e8cSThomas Abraham #define EXYNOS5420_GPIO_PART3_BASE	0x13400C00
18077b55e8cSThomas Abraham #define EXYNOS5420_GPIO_PART4_BASE	0x13410000
18177b55e8cSThomas Abraham #define EXYNOS5420_GPIO_PART5_BASE	0x14000000
18277b55e8cSThomas Abraham #define EXYNOS5420_GPIO_PART1_BASE	0x14010000
18377b55e8cSThomas Abraham #define EXYNOS5420_MIPI_DSIM_BASE	0x14500000
18477b55e8cSThomas Abraham #define EXYNOS5420_DP_BASE		0x145B0000
18577b55e8cSThomas Abraham 
18677b55e8cSThomas Abraham #define EXYNOS5420_USBPHY_BASE		DEVICE_NOT_AVAILABLE
18777b55e8cSThomas Abraham #define EXYNOS5420_USBOTG_BASE		DEVICE_NOT_AVAILABLE
18877b55e8cSThomas Abraham #define EXYNOS5420_FIMD_BASE		DEVICE_NOT_AVAILABLE
18977b55e8cSThomas Abraham #define EXYNOS5420_ADC_BASE		DEVICE_NOT_AVAILABLE
19077b55e8cSThomas Abraham #define EXYNOS5420_MODEM_BASE		DEVICE_NOT_AVAILABLE
19177b55e8cSThomas Abraham #define EXYNOS5420_USB_HOST_XHCI_BASE	DEVICE_NOT_AVAILABLE
19277b55e8cSThomas Abraham 
19377b55e8cSThomas Abraham 
19477b55e8cSThomas Abraham #ifndef __ASSEMBLY__
19577b55e8cSThomas Abraham #include <asm/io.h>
19677b55e8cSThomas Abraham /* CPU detection macros */
19777b55e8cSThomas Abraham extern unsigned int s5p_cpu_id;
19877b55e8cSThomas Abraham extern unsigned int s5p_cpu_rev;
19977b55e8cSThomas Abraham 
s5p_get_cpu_rev(void)20077b55e8cSThomas Abraham static inline int s5p_get_cpu_rev(void)
20177b55e8cSThomas Abraham {
20277b55e8cSThomas Abraham 	return s5p_cpu_rev;
20377b55e8cSThomas Abraham }
20477b55e8cSThomas Abraham 
s5p_set_cpu_id(void)20577b55e8cSThomas Abraham static inline void s5p_set_cpu_id(void)
20677b55e8cSThomas Abraham {
20777b55e8cSThomas Abraham 	unsigned int pro_id = readl(EXYNOS4_PRO_ID);
20877b55e8cSThomas Abraham 	unsigned int cpu_id = (pro_id & 0x00FFF000) >> 12;
20977b55e8cSThomas Abraham 	unsigned int cpu_rev = pro_id & 0x000000FF;
21077b55e8cSThomas Abraham 
21177b55e8cSThomas Abraham 	switch (cpu_id) {
21277b55e8cSThomas Abraham 	case 0x200:
21377b55e8cSThomas Abraham 		/* Exynos4210 EVT0 */
21477b55e8cSThomas Abraham 		s5p_cpu_id = 0x4210;
21577b55e8cSThomas Abraham 		s5p_cpu_rev = 0;
21677b55e8cSThomas Abraham 		break;
21777b55e8cSThomas Abraham 	case 0x210:
21877b55e8cSThomas Abraham 		/* Exynos4210 EVT1 */
21977b55e8cSThomas Abraham 		s5p_cpu_id = 0x4210;
22077b55e8cSThomas Abraham 		s5p_cpu_rev = cpu_rev;
22177b55e8cSThomas Abraham 		break;
22277b55e8cSThomas Abraham 	case 0x412:
22377b55e8cSThomas Abraham 		/* Exynos4412 */
22477b55e8cSThomas Abraham 		s5p_cpu_id = 0x4412;
22577b55e8cSThomas Abraham 		s5p_cpu_rev = cpu_rev;
22677b55e8cSThomas Abraham 		break;
22777b55e8cSThomas Abraham 	case 0x520:
22877b55e8cSThomas Abraham 		/* Exynos5250 */
22977b55e8cSThomas Abraham 		s5p_cpu_id = 0x5250;
23077b55e8cSThomas Abraham 		break;
23177b55e8cSThomas Abraham 	case 0x420:
23277b55e8cSThomas Abraham 		/* Exynos5420 */
23377b55e8cSThomas Abraham 		s5p_cpu_id = 0x5420;
23477b55e8cSThomas Abraham 		break;
23577b55e8cSThomas Abraham 	case 0x422:
23677b55e8cSThomas Abraham 		/*
23777b55e8cSThomas Abraham 		 * Exynos5800 is a variant of Exynos5420
23877b55e8cSThomas Abraham 		 * and has product id 0x5422
23977b55e8cSThomas Abraham 		 */
240d64c8adeSPrzemyslaw Marczak 		s5p_cpu_id = 0x5422;
24177b55e8cSThomas Abraham 		break;
24277b55e8cSThomas Abraham 	}
24377b55e8cSThomas Abraham }
24477b55e8cSThomas Abraham 
s5p_get_cpu_name(void)24577b55e8cSThomas Abraham static inline char *s5p_get_cpu_name(void)
24677b55e8cSThomas Abraham {
24777b55e8cSThomas Abraham 	return EXYNOS_CPU_NAME;
24877b55e8cSThomas Abraham }
24977b55e8cSThomas Abraham 
25077b55e8cSThomas Abraham #define IS_SAMSUNG_TYPE(type, id)			\
25177b55e8cSThomas Abraham static inline int __attribute__((no_instrument_function)) cpu_is_##type(void) \
25277b55e8cSThomas Abraham {							\
25377b55e8cSThomas Abraham 	return (s5p_cpu_id >> 12) == id;		\
25477b55e8cSThomas Abraham }
25577b55e8cSThomas Abraham 
25677b55e8cSThomas Abraham IS_SAMSUNG_TYPE(exynos4, 0x4)
25777b55e8cSThomas Abraham IS_SAMSUNG_TYPE(exynos5, 0x5)
25877b55e8cSThomas Abraham 
25977b55e8cSThomas Abraham #define IS_EXYNOS_TYPE(type, id)			\
26077b55e8cSThomas Abraham static inline int __attribute__((no_instrument_function)) \
26177b55e8cSThomas Abraham 	proid_is_##type(void)				\
26277b55e8cSThomas Abraham {							\
26377b55e8cSThomas Abraham 	return s5p_cpu_id == id;			\
26477b55e8cSThomas Abraham }
26577b55e8cSThomas Abraham 
26677b55e8cSThomas Abraham IS_EXYNOS_TYPE(exynos4210, 0x4210)
26777b55e8cSThomas Abraham IS_EXYNOS_TYPE(exynos4412, 0x4412)
26877b55e8cSThomas Abraham IS_EXYNOS_TYPE(exynos5250, 0x5250)
26977b55e8cSThomas Abraham IS_EXYNOS_TYPE(exynos5420, 0x5420)
270d64c8adeSPrzemyslaw Marczak IS_EXYNOS_TYPE(exynos5422, 0x5422)
27177b55e8cSThomas Abraham 
27277b55e8cSThomas Abraham #define SAMSUNG_BASE(device, base)				\
273*36aa8937SThomas Abraham static inline unsigned long __attribute__((no_instrument_function)) \
27477b55e8cSThomas Abraham 	samsung_get_base_##device(void) \
27577b55e8cSThomas Abraham {								\
27677b55e8cSThomas Abraham 	if (cpu_is_exynos4()) {				\
27777b55e8cSThomas Abraham 		if (proid_is_exynos4412())			\
27877b55e8cSThomas Abraham 			return EXYNOS4X12_##base;		\
27977b55e8cSThomas Abraham 		return EXYNOS4_##base;				\
28077b55e8cSThomas Abraham 	} else if (cpu_is_exynos5()) {				\
281d64c8adeSPrzemyslaw Marczak 		if (proid_is_exynos5420() || proid_is_exynos5422())	\
28277b55e8cSThomas Abraham 			return EXYNOS5420_##base;		\
28377b55e8cSThomas Abraham 		return EXYNOS5_##base;				\
28477b55e8cSThomas Abraham 	}							\
28577b55e8cSThomas Abraham 	return 0;						\
28677b55e8cSThomas Abraham }
28777b55e8cSThomas Abraham 
28877b55e8cSThomas Abraham SAMSUNG_BASE(adc, ADC_BASE)
28977b55e8cSThomas Abraham SAMSUNG_BASE(clock, CLOCK_BASE)
29077b55e8cSThomas Abraham SAMSUNG_BASE(ace_sfr, ACE_SFR_BASE)
29177b55e8cSThomas Abraham SAMSUNG_BASE(sysreg, SYSREG_BASE)
29277b55e8cSThomas Abraham SAMSUNG_BASE(i2c, I2C_BASE)
29377b55e8cSThomas Abraham SAMSUNG_BASE(i2s, I2S_BASE)
29477b55e8cSThomas Abraham SAMSUNG_BASE(mipi_dsim, MIPI_DSIM_BASE)
29577b55e8cSThomas Abraham SAMSUNG_BASE(gpio_part1, GPIO_PART1_BASE)
29677b55e8cSThomas Abraham SAMSUNG_BASE(gpio_part2, GPIO_PART2_BASE)
29777b55e8cSThomas Abraham SAMSUNG_BASE(gpio_part3, GPIO_PART3_BASE)
29877b55e8cSThomas Abraham SAMSUNG_BASE(gpio_part4, GPIO_PART4_BASE)
29977b55e8cSThomas Abraham SAMSUNG_BASE(pro_id, PRO_ID)
30077b55e8cSThomas Abraham SAMSUNG_BASE(mmc, MMC_BASE)
30177b55e8cSThomas Abraham SAMSUNG_BASE(modem, MODEM_BASE)
30277b55e8cSThomas Abraham SAMSUNG_BASE(sromc, SROMC_BASE)
30377b55e8cSThomas Abraham SAMSUNG_BASE(swreset, SWRESET)
30477b55e8cSThomas Abraham SAMSUNG_BASE(timer, PWMTIMER_BASE)
30577b55e8cSThomas Abraham SAMSUNG_BASE(uart, UART_BASE)
30677b55e8cSThomas Abraham SAMSUNG_BASE(usb_phy, USBPHY_BASE)
30777b55e8cSThomas Abraham SAMSUNG_BASE(usb3_phy, USB3PHY_BASE)
30877b55e8cSThomas Abraham SAMSUNG_BASE(usb_ehci, USB_HOST_EHCI_BASE)
30977b55e8cSThomas Abraham SAMSUNG_BASE(usb_xhci, USB_HOST_XHCI_BASE)
31077b55e8cSThomas Abraham SAMSUNG_BASE(usb_otg, USBOTG_BASE)
31177b55e8cSThomas Abraham SAMSUNG_BASE(watchdog, WATCHDOG_BASE)
31277b55e8cSThomas Abraham SAMSUNG_BASE(power, POWER_BASE)
31377b55e8cSThomas Abraham SAMSUNG_BASE(spi, SPI_BASE)
31477b55e8cSThomas Abraham SAMSUNG_BASE(spi_isp, SPI_ISP_BASE)
31577b55e8cSThomas Abraham SAMSUNG_BASE(tzpc, TZPC_BASE)
31677b55e8cSThomas Abraham SAMSUNG_BASE(dmc_ctrl, DMC_CTRL_BASE)
31777b55e8cSThomas Abraham SAMSUNG_BASE(dmc_phy, DMC_PHY_BASE)
31877b55e8cSThomas Abraham SAMSUNG_BASE(dmc_tzasc, DMC_TZASC_BASE)
31977b55e8cSThomas Abraham SAMSUNG_BASE(audio_ass, AUDIOSS_BASE)
32077b55e8cSThomas Abraham #endif
32177b55e8cSThomas Abraham 
32277b55e8cSThomas Abraham #endif	/* _EXYNOS4_CPU_H */
323