129 lines
3.0 KiB
C
129 lines
3.0 KiB
C
|
/*
|
||
|
* Copyright (C) 2018 Marvell International Ltd.
|
||
|
*
|
||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||
|
* https://spdx.org/licenses
|
||
|
*/
|
||
|
|
||
|
#ifndef ARMADA_COMMON_H
|
||
|
#define ARMADA_COMMON_H
|
||
|
|
||
|
#include <drivers/marvell/amb_adec.h>
|
||
|
#include <drivers/marvell/ccu.h>
|
||
|
#include <drivers/marvell/io_win.h>
|
||
|
#include <drivers/marvell/iob.h>
|
||
|
|
||
|
/*
|
||
|
* This struct supports skip image request
|
||
|
* detection_method: the method used to detect the request "signal".
|
||
|
* info:
|
||
|
* GPIO:
|
||
|
* detection_method: HIGH (pressed button), LOW (unpressed button),
|
||
|
* num (button mpp number).
|
||
|
* i2c:
|
||
|
* i2c_addr: the address of the i2c chosen.
|
||
|
* i2d_reg: the i2c register chosen.
|
||
|
* test:
|
||
|
* choose the DIE you picked the button in (AP or CP).
|
||
|
* in case of CP(cp_index = 0 if CP0, cp_index = 1 if CP1)
|
||
|
*/
|
||
|
struct skip_image {
|
||
|
enum {
|
||
|
GPIO,
|
||
|
I2C,
|
||
|
USER_DEFINED
|
||
|
} detection_method;
|
||
|
|
||
|
struct {
|
||
|
struct {
|
||
|
int num;
|
||
|
enum {
|
||
|
HIGH,
|
||
|
LOW
|
||
|
} button_state;
|
||
|
|
||
|
} gpio;
|
||
|
|
||
|
struct {
|
||
|
int i2c_addr;
|
||
|
int i2c_reg;
|
||
|
} i2c;
|
||
|
|
||
|
struct {
|
||
|
enum {
|
||
|
CP,
|
||
|
AP
|
||
|
} cp_ap;
|
||
|
int cp_index;
|
||
|
} test;
|
||
|
} info;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* This struct supports SoC power off method
|
||
|
* type: the method used to power off the SoC
|
||
|
* cfg:
|
||
|
* PMIC_GPIO:
|
||
|
* pin_count: current GPIO pin number used for toggling the signal for
|
||
|
* notifying external PMIC
|
||
|
* info: holds the GPIOs information, CP GPIO should be used and
|
||
|
* all GPIOs should be within same GPIO config. register
|
||
|
* step_count: current step number to toggle the GPIO for PMIC
|
||
|
* seq: GPIO toggling values in sequence, each bit represents a GPIO.
|
||
|
* For example, bit0 represents first GPIO used for toggling
|
||
|
* the GPIO the last step is used to trigger the power off
|
||
|
* signal
|
||
|
* delay_ms: transition interval for the GPIO setting to take effect
|
||
|
* in unit of ms
|
||
|
*/
|
||
|
/* Max GPIO number used to notify PMIC to power off the SoC */
|
||
|
#define PMIC_GPIO_MAX_NUMBER 8
|
||
|
/* Max GPIO toggling steps in sequence to power off the SoC */
|
||
|
#define PMIC_GPIO_MAX_TOGGLE_STEP 8
|
||
|
|
||
|
enum gpio_output_state {
|
||
|
GPIO_LOW = 0,
|
||
|
GPIO_HIGH
|
||
|
};
|
||
|
|
||
|
typedef struct gpio_info {
|
||
|
int cp_index;
|
||
|
int gpio_index;
|
||
|
} gpio_info_t;
|
||
|
|
||
|
struct power_off_method {
|
||
|
enum {
|
||
|
PMIC_GPIO,
|
||
|
} type;
|
||
|
|
||
|
struct {
|
||
|
struct {
|
||
|
int pin_count;
|
||
|
struct gpio_info info[PMIC_GPIO_MAX_NUMBER];
|
||
|
int step_count;
|
||
|
uint32_t seq[PMIC_GPIO_MAX_TOGGLE_STEP];
|
||
|
int delay_ms;
|
||
|
} gpio;
|
||
|
} cfg;
|
||
|
};
|
||
|
|
||
|
int marvell_gpio_config(void);
|
||
|
uint32_t marvell_get_io_win_gcr_target(int ap_idx);
|
||
|
uint32_t marvell_get_ccu_gcr_target(int ap_idx);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* The functions below are defined as Weak and may be overridden
|
||
|
* in specific Marvell standard platform
|
||
|
*/
|
||
|
int marvell_get_amb_memory_map(struct addr_map_win **win,
|
||
|
uint32_t *size, uintptr_t base);
|
||
|
int marvell_get_io_win_memory_map(int ap_idx, struct addr_map_win **win,
|
||
|
uint32_t *size);
|
||
|
int marvell_get_iob_memory_map(struct addr_map_win **win,
|
||
|
uint32_t *size, uintptr_t base);
|
||
|
int marvell_get_ccu_memory_map(int ap_idx, struct addr_map_win **win,
|
||
|
uint32_t *size);
|
||
|
|
||
|
#endif /* ARMADA_COMMON_H */
|