xref: /rk3399_ARM-atf/include/plat/marvell/armada/a8k/common/armada_common.h (revision 9935047b2086faa3bf3ccf0b95a76510eb5a160b)
1*a2847172SGrzegorz Jaszczyk /*
2*a2847172SGrzegorz Jaszczyk  * Copyright (C) 2018 Marvell International Ltd.
3*a2847172SGrzegorz Jaszczyk  *
4*a2847172SGrzegorz Jaszczyk  * SPDX-License-Identifier:     BSD-3-Clause
5*a2847172SGrzegorz Jaszczyk  * https://spdx.org/licenses
6*a2847172SGrzegorz Jaszczyk  */
7*a2847172SGrzegorz Jaszczyk 
8*a2847172SGrzegorz Jaszczyk #ifndef ARMADA_COMMON_H
9*a2847172SGrzegorz Jaszczyk #define ARMADA_COMMON_H
10*a2847172SGrzegorz Jaszczyk 
11*a2847172SGrzegorz Jaszczyk #include <drivers/marvell/amb_adec.h>
12*a2847172SGrzegorz Jaszczyk #include <drivers/marvell/ccu.h>
13*a2847172SGrzegorz Jaszczyk #include <drivers/marvell/io_win.h>
14*a2847172SGrzegorz Jaszczyk #include <drivers/marvell/iob.h>
15*a2847172SGrzegorz Jaszczyk 
16*a2847172SGrzegorz Jaszczyk /*
17*a2847172SGrzegorz Jaszczyk  * This struct supports skip image request
18*a2847172SGrzegorz Jaszczyk  * detection_method: the method used to detect the request "signal".
19*a2847172SGrzegorz Jaszczyk  * info:
20*a2847172SGrzegorz Jaszczyk  *	GPIO:
21*a2847172SGrzegorz Jaszczyk  *		detection_method: HIGH (pressed button), LOW (unpressed button),
22*a2847172SGrzegorz Jaszczyk  *		num (button mpp number).
23*a2847172SGrzegorz Jaszczyk  *	i2c:
24*a2847172SGrzegorz Jaszczyk  *		i2c_addr: the address of the i2c chosen.
25*a2847172SGrzegorz Jaszczyk  *		i2d_reg: the i2c register chosen.
26*a2847172SGrzegorz Jaszczyk  *	test:
27*a2847172SGrzegorz Jaszczyk  *		choose the DIE you picked the button in (AP or CP).
28*a2847172SGrzegorz Jaszczyk  *		in case of CP(cp_index = 0 if CP0, cp_index = 1 if CP1)
29*a2847172SGrzegorz Jaszczyk  */
30*a2847172SGrzegorz Jaszczyk struct skip_image {
31*a2847172SGrzegorz Jaszczyk 	enum {
32*a2847172SGrzegorz Jaszczyk 		GPIO,
33*a2847172SGrzegorz Jaszczyk 		I2C,
34*a2847172SGrzegorz Jaszczyk 		USER_DEFINED
35*a2847172SGrzegorz Jaszczyk 	} detection_method;
36*a2847172SGrzegorz Jaszczyk 
37*a2847172SGrzegorz Jaszczyk 	struct {
38*a2847172SGrzegorz Jaszczyk 		struct {
39*a2847172SGrzegorz Jaszczyk 			int num;
40*a2847172SGrzegorz Jaszczyk 			enum {
41*a2847172SGrzegorz Jaszczyk 				HIGH,
42*a2847172SGrzegorz Jaszczyk 				LOW
43*a2847172SGrzegorz Jaszczyk 			} button_state;
44*a2847172SGrzegorz Jaszczyk 
45*a2847172SGrzegorz Jaszczyk 		} gpio;
46*a2847172SGrzegorz Jaszczyk 
47*a2847172SGrzegorz Jaszczyk 		struct {
48*a2847172SGrzegorz Jaszczyk 			int i2c_addr;
49*a2847172SGrzegorz Jaszczyk 			int i2c_reg;
50*a2847172SGrzegorz Jaszczyk 		} i2c;
51*a2847172SGrzegorz Jaszczyk 
52*a2847172SGrzegorz Jaszczyk 		struct {
53*a2847172SGrzegorz Jaszczyk 			enum {
54*a2847172SGrzegorz Jaszczyk 				CP,
55*a2847172SGrzegorz Jaszczyk 				AP
56*a2847172SGrzegorz Jaszczyk 			} cp_ap;
57*a2847172SGrzegorz Jaszczyk 			int cp_index;
58*a2847172SGrzegorz Jaszczyk 		} test;
59*a2847172SGrzegorz Jaszczyk 	} info;
60*a2847172SGrzegorz Jaszczyk };
61*a2847172SGrzegorz Jaszczyk 
62*a2847172SGrzegorz Jaszczyk /*
63*a2847172SGrzegorz Jaszczyk  * This struct supports SoC power off method
64*a2847172SGrzegorz Jaszczyk  * type: the method used to power off the SoC
65*a2847172SGrzegorz Jaszczyk  * cfg:
66*a2847172SGrzegorz Jaszczyk  *	PMIC_GPIO:
67*a2847172SGrzegorz Jaszczyk  *	pin_count: current GPIO pin number used for toggling the signal for
68*a2847172SGrzegorz Jaszczyk  *		   notifying external PMIC
69*a2847172SGrzegorz Jaszczyk  *	info:	   holds the GPIOs information, CP GPIO should be used and
70*a2847172SGrzegorz Jaszczyk  *		   all GPIOs should be within same GPIO config. register
71*a2847172SGrzegorz Jaszczyk  *	step_count: current step number to toggle the GPIO for PMIC
72*a2847172SGrzegorz Jaszczyk  *	seq:       GPIO toggling values in sequence, each bit represents a GPIO.
73*a2847172SGrzegorz Jaszczyk  *		   For example, bit0 represents first GPIO used for toggling
74*a2847172SGrzegorz Jaszczyk  *		   the GPIO the last step is used to trigger the power off
75*a2847172SGrzegorz Jaszczyk  *		   signal
76*a2847172SGrzegorz Jaszczyk  *	delay_ms:  transition interval for the GPIO setting to take effect
77*a2847172SGrzegorz Jaszczyk  *		   in unit of ms
78*a2847172SGrzegorz Jaszczyk  */
79*a2847172SGrzegorz Jaszczyk /* Max GPIO number used to notify PMIC to power off the SoC */
80*a2847172SGrzegorz Jaszczyk #define PMIC_GPIO_MAX_NUMBER		8
81*a2847172SGrzegorz Jaszczyk /* Max GPIO toggling steps in sequence to power off the SoC */
82*a2847172SGrzegorz Jaszczyk #define PMIC_GPIO_MAX_TOGGLE_STEP	8
83*a2847172SGrzegorz Jaszczyk 
84*a2847172SGrzegorz Jaszczyk enum gpio_output_state {
85*a2847172SGrzegorz Jaszczyk 	GPIO_LOW = 0,
86*a2847172SGrzegorz Jaszczyk 	GPIO_HIGH
87*a2847172SGrzegorz Jaszczyk };
88*a2847172SGrzegorz Jaszczyk 
89*a2847172SGrzegorz Jaszczyk typedef struct gpio_info {
90*a2847172SGrzegorz Jaszczyk 	int cp_index;
91*a2847172SGrzegorz Jaszczyk 	int gpio_index;
92*a2847172SGrzegorz Jaszczyk } gpio_info_t;
93*a2847172SGrzegorz Jaszczyk 
94*a2847172SGrzegorz Jaszczyk struct power_off_method {
95*a2847172SGrzegorz Jaszczyk 	enum {
96*a2847172SGrzegorz Jaszczyk 		PMIC_GPIO,
97*a2847172SGrzegorz Jaszczyk 	} type;
98*a2847172SGrzegorz Jaszczyk 
99*a2847172SGrzegorz Jaszczyk 	struct {
100*a2847172SGrzegorz Jaszczyk 		struct {
101*a2847172SGrzegorz Jaszczyk 			int pin_count;
102*a2847172SGrzegorz Jaszczyk 			struct gpio_info info[PMIC_GPIO_MAX_NUMBER];
103*a2847172SGrzegorz Jaszczyk 			int step_count;
104*a2847172SGrzegorz Jaszczyk 			uint32_t seq[PMIC_GPIO_MAX_TOGGLE_STEP];
105*a2847172SGrzegorz Jaszczyk 			int delay_ms;
106*a2847172SGrzegorz Jaszczyk 		} gpio;
107*a2847172SGrzegorz Jaszczyk 	} cfg;
108*a2847172SGrzegorz Jaszczyk };
109*a2847172SGrzegorz Jaszczyk 
110*a2847172SGrzegorz Jaszczyk int marvell_gpio_config(void);
111*a2847172SGrzegorz Jaszczyk uint32_t marvell_get_io_win_gcr_target(int ap_idx);
112*a2847172SGrzegorz Jaszczyk uint32_t marvell_get_ccu_gcr_target(int ap_idx);
113*a2847172SGrzegorz Jaszczyk 
114*a2847172SGrzegorz Jaszczyk 
115*a2847172SGrzegorz Jaszczyk /*
116*a2847172SGrzegorz Jaszczyk  * The functions below are defined as Weak and may be overridden
117*a2847172SGrzegorz Jaszczyk  * in specific Marvell standard platform
118*a2847172SGrzegorz Jaszczyk  */
119*a2847172SGrzegorz Jaszczyk int marvell_get_amb_memory_map(struct addr_map_win **win,
120*a2847172SGrzegorz Jaszczyk 			       uint32_t *size, uintptr_t base);
121*a2847172SGrzegorz Jaszczyk int marvell_get_io_win_memory_map(int ap_idx, struct addr_map_win **win,
122*a2847172SGrzegorz Jaszczyk 				  uint32_t *size);
123*a2847172SGrzegorz Jaszczyk int marvell_get_iob_memory_map(struct addr_map_win **win,
124*a2847172SGrzegorz Jaszczyk 			       uint32_t *size, uintptr_t base);
125*a2847172SGrzegorz Jaszczyk int marvell_get_ccu_memory_map(int ap_idx, struct addr_map_win **win,
126*a2847172SGrzegorz Jaszczyk 			       uint32_t *size);
127*a2847172SGrzegorz Jaszczyk int system_power_off(void);
128*a2847172SGrzegorz Jaszczyk 
129*a2847172SGrzegorz Jaszczyk #endif /* ARMADA_COMMON_H */
130