xref: /openbmc/linux/include/soc/qcom/spm.h (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
160f3692bSAngeloGioacchino Del Regno /* SPDX-License-Identifier: GPL-2.0-only */
260f3692bSAngeloGioacchino Del Regno /*
360f3692bSAngeloGioacchino Del Regno  * Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
460f3692bSAngeloGioacchino Del Regno  * Copyright (c) 2014,2015, Linaro Ltd.
560f3692bSAngeloGioacchino Del Regno  */
660f3692bSAngeloGioacchino Del Regno 
760f3692bSAngeloGioacchino Del Regno #ifndef __SPM_H__
860f3692bSAngeloGioacchino Del Regno #define __SPM_H__
960f3692bSAngeloGioacchino Del Regno 
1060f3692bSAngeloGioacchino Del Regno #include <linux/cpuidle.h>
1160f3692bSAngeloGioacchino Del Regno 
1260f3692bSAngeloGioacchino Del Regno #define MAX_PMIC_DATA		2
1360f3692bSAngeloGioacchino Del Regno #define MAX_SEQ_DATA		64
1460f3692bSAngeloGioacchino Del Regno 
1560f3692bSAngeloGioacchino Del Regno enum pm_sleep_mode {
1660f3692bSAngeloGioacchino Del Regno 	PM_SLEEP_MODE_STBY,
1760f3692bSAngeloGioacchino Del Regno 	PM_SLEEP_MODE_RET,
1860f3692bSAngeloGioacchino Del Regno 	PM_SLEEP_MODE_SPC,
1960f3692bSAngeloGioacchino Del Regno 	PM_SLEEP_MODE_PC,
2060f3692bSAngeloGioacchino Del Regno 	PM_SLEEP_MODE_NR,
2160f3692bSAngeloGioacchino Del Regno };
2260f3692bSAngeloGioacchino Del Regno 
2360f3692bSAngeloGioacchino Del Regno struct spm_reg_data {
24*13e72c3eSAngeloGioacchino Del Regno 	const u16 *reg_offset;
2560f3692bSAngeloGioacchino Del Regno 	u32 spm_cfg;
2660f3692bSAngeloGioacchino Del Regno 	u32 spm_dly;
2760f3692bSAngeloGioacchino Del Regno 	u32 pmic_dly;
2860f3692bSAngeloGioacchino Del Regno 	u32 pmic_data[MAX_PMIC_DATA];
29*13e72c3eSAngeloGioacchino Del Regno 	u32 avs_ctl;
30*13e72c3eSAngeloGioacchino Del Regno 	u32 avs_limit;
3160f3692bSAngeloGioacchino Del Regno 	u8 seq[MAX_SEQ_DATA];
3260f3692bSAngeloGioacchino Del Regno 	u8 start_index[PM_SLEEP_MODE_NR];
3360f3692bSAngeloGioacchino Del Regno };
3460f3692bSAngeloGioacchino Del Regno 
3560f3692bSAngeloGioacchino Del Regno struct spm_driver_data {
3660f3692bSAngeloGioacchino Del Regno 	void __iomem *reg_base;
3760f3692bSAngeloGioacchino Del Regno 	const struct spm_reg_data *reg_data;
3860f3692bSAngeloGioacchino Del Regno };
3960f3692bSAngeloGioacchino Del Regno 
4060f3692bSAngeloGioacchino Del Regno void spm_set_low_power_mode(struct spm_driver_data *drv,
4160f3692bSAngeloGioacchino Del Regno 			    enum pm_sleep_mode mode);
4260f3692bSAngeloGioacchino Del Regno 
4360f3692bSAngeloGioacchino Del Regno #endif /* __SPM_H__ */
44