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