/*
 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com/
 *
 * EXYNOS - PMU(Power Management Unit) support
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
*/

#ifndef __EXYNOS_PMU_CP_H
#define __EXYNOS_PMU_CP_H __FILE__

/* BLK_ALIVE: CP related SFRs */
#define EXYNOS_PMU_CP_CTRL_NS				0x0030
#define EXYNOS_PMU_CP_CTRL_S				0x0034
#define EXYNOS_PMU_CP_STAT					0x0038
#define EXYNOS_PMU_CP_DEBUG					0x003C

#define EXYNOS_PMU_UART_IO_SHARE_CTRL		0x6200
#define EXYNOS_PMU_CP_ADDR_CFG0				0x7140
#define EXYNOS_PMU_CP_ADDR_CFG1				0x7144
#define EXYNOS_PMU_CP_ADDR_CFG2				0x7148
#define EXYNOS_PMU_CP_ADDR_CFG3				0x714C
#define EXYNOS_PMU_CP_ADDR_CFG4				0x7150
#define EXYNOS_PMU_CP_ADDR_CFG5				0x7154
#define EXYNOS_PMU_CP_ADDR_CFG6				0x7158
#define EXYNOS_PMU_CP_ADDR_CFG7				0x715C
#define EXYNOS_PMU_CP_ADDR_CFG8				0x7160
#define EXYNOS_PMU_CP_ADDR_CFG9				0x7164
#define EXYNOS_PMU_CP_ADDR_CFG10			0x7168
#define EXYNOS_PMU_CP_ADDR_CFG11			0x716C
#define EXYNOS_PMU_CP_ADDR_CFG12			0x7170
#define EXYNOS_PMU_CP_ADDR_CFG13			0x7174
#define EXYNOS_PMU_CP_ADDR_CFG14			0x7178
#define EXYNOS_PMU_CP_ADDR_CFG_ADDRMAP		0x717C

#define EXYNOS_PMU_CP2AP_MEM_CONFIG0		0x7200
#define EXYNOS_PMU_CP2AP_MEM_CONFIG1		0x7204
#define EXYNOS_PMU_CP2AP_MEM_CONFIG2		0x7208
#define EXYNOS_PMU_CP2AP_ADDR_RNG			0x720C

#define EXYNOS_PMU_CP2AP_MIF_ACCESS_WIN0	0x7210
#define EXYNOS_PMU_CP2AP_MIF_ACCESS_WIN1	0x7214
#define EXYNOS_PMU_CP2AP_MIF_ACCESS_WIN2	0x7218
#define EXYNOS_PMU_CP2AP_MIF_ACCESS_WIN3	0x721C
#define EXYNOS_PMU_CP2AP_MIF_ACCESS_WIN4	0x7220
#define EXYNOS_PMU_CP2AP_MIF_ACCESS_WIN5	0x7224
#define EXYNOS_PMU_CP2AP_PERI_ACCESS_WIN0	0x7228
#define EXYNOS_PMU_CP2AP_PERI_ACCESS_WIN1	0x722C
#define EXYNOS_PMU_CP2AP_PERI_ACCESS_WIN2	0x7230
#define EXYNOS_PMU_CP2AP_PERI_ACCESS_WIN3	0x7234
#define EXYNOS_PMU_CP2AP_PERI_ACCESS_WIN4	0x7238
#define EXYNOS_PMU_CP2AP_PERI_ACCESS_WIN5	0x723C
#define EXYNOS_PMU_CP_BOOT_TEST_RST_CONFIG	0x7240
#define EXYNOS_PMU_CP_ADDR_MAP_ACCESS_WIN_START	0x7244
#define EXYNOS_PMU_CP_ADDR_MAP_ACCESS_WIN_END	0x7248

#define EXYNOS_PMU_CENTRAL_SEQ_CP_CONFIGURATION	0x0280
#define EXYNOS_PMU_CENTRAL_SEQ_CP_STATUS	0x0284
#define EXYNOS_PMU_RESET_SEQUENCER_STATUS	0x0504
#define EXYNOS_PMU_RESET_AHEAD_CP_SYS_PWR_REG	0x1320
#define EXYNOS_PMU_CLEANY_BUS_CP_SYS_PWR_REG	0x1324
#define EXYNOS_PMU_LOGIC_RESET_CP_SYS_PWR_REG	0x1328
#define EXYNOS_PMU_TCXO_GATE_SYS_PWR_REG	0x132C
#define EXYNOS_PMU_CP_DISABLE_ISO_SYS_PWR_REG	0X1330
#define EXYNOS_PMU_RESET_ISO_SYS_PWR_REG	0X1334
#define EXYNOS_PMU_PC_SYS_PWR_REG		0X1338

/* EXYNOS_PMU_CENTRAL_SEQ_CP_STATUS */
#define CENTRAL_SEQ_CP_STATUS_MASK	(0xFF << 16)
#define CENTRAL_SEQ_CP_STATUS_SHIFT	16

/* EXYNOS_PMU_UART_IO_SHARE_CTRL */
#define SEL_CP_UART_DBG			BIT(8)
#define SEL_UART_DBG_GPIO		BIT(4)
#define FUNC_ISO_EN				BIT(0)

/* EXYNOS_PMU_CP_CTRL_NS */
#define CP_PWRON				BIT(1)
#define CP_RESET_SET			BIT(2)
#define CP_ACTIVE_REQ_EN		BIT(5)
#define CP_ACTIVE_REQ_CLR		BIT(6)
#define CP_RESET_REQ_EN			BIT(7)
#define CP_RESET_REQ_CLR		BIT(8)
#define MASK_CP_PWRDN_DONE		BIT(9)
#define RTC_OUT_EN				BIT(10)
#define SET_SW_MIF_REQ			BIT(12)
#define MASK_MIF_REQ			BIT(13)
#define SWEEPER_BYPASS_DATA_EN	BIT(16)
#define SELECT_DUMP_PC_NO_PG		BIT(17)
#define WDT_FLAG				BIT(20)
#define WDT_FLAG_CLR_EN			BIT(21)
#define MASK_COMMON_CP_RESET	BIT(24)
#define TCXO_SEL				BIT(28)
#define CR7_MP_DISABLE			BIT(29)

/* EXYNOS_PMU_CP_CTRL_N */
#define CP_START		        BIT(3)

/* EXYNOS_PMU_CP_STAT */
#define CP_PWRDN_DONE	        BIT(0)
#define CP_ACCESS_MIF	        BIT(4)


#define SMC_ID		0x82000700
#define READ_CTRL	0x3
#define WRITE_CTRL	0x4

enum cp_mode {
	CP_POWER_ON,
	CP_RESET,
	CP_POWER_OFF,
	NUM_CP_MODE,
};

enum reset_mode {
	CP_HW_RESET,
	CP_SW_RESET,
};

enum cp_control {
	CP_CTRL_S,
	CP_CTRL_NS,
};

extern int exynos_cp_reset(void);
extern int exynos_cp_release(void);
extern int exynos_cp_init(void);
extern int exynos_cp_active_clear(void);
extern int exynos_clear_cp_reset(void);
extern int exynos_get_cp_power_status(void);
extern int exynos_set_cp_power_onoff(enum cp_mode mode);
extern void exynos_sys_powerdown_conf_cp(void);
extern int exynos_pmu_cp_init(void);
extern int exynos_enable_cp_dump_pc(void);
extern int exynos_disable_cp_dump_pc(void);
#endif /* __EXYNOS_PMU_CP_H */
