xref: /optee_os/core/include/drivers/atmel_shdwc.h (revision 13d015f710d6f3cbb200a15989733afaa28d5d09)
158200af7SClément Léger /* SPDX-License-Identifier: BSD-2-Clause */
258200af7SClément Léger /*
358200af7SClément Léger  * Copyright (c) 2015 Atmel Corporation,
458200af7SClément Léger  *                    Nicolas Ferre <nicolas.ferre@atmel.com>
558200af7SClément Léger  * Copyright (c) 2021, Microchip
658200af7SClément Léger  */
758200af7SClément Léger 
858200af7SClément Léger #ifndef __DRIVERS_ATMEL_SHDWC_H
958200af7SClément Léger #define __DRIVERS_ATMEL_SHDWC_H
1058200af7SClément Léger 
1158200af7SClément Léger #include <compiler.h>
1258200af7SClément Léger #include <stdbool.h>
1358200af7SClément Léger #include <stdint.h>
1458200af7SClément Léger #include <util.h>
1558200af7SClément Léger 
1658200af7SClément Léger /* Shut Down Control Register */
1758200af7SClément Léger #define AT91_SHDW_CR		0x00
1858200af7SClément Léger /* Shut Down command */
1958200af7SClément Léger #define AT91_SHDW_SHDW		BIT(0)
2058200af7SClément Léger /* KEY Password */
2158200af7SClément Léger #define AT91_SHDW_KEY		SHIFT_U32(0xa5UL, 24)
2258200af7SClément Léger 
2358200af7SClément Léger /* Shut Down Mode Register */
2458200af7SClément Léger #define AT91_SHDW_MR		0x04
2558200af7SClément Léger #define AT91_SHDW_WKUPDBC_SHIFT	24
2658200af7SClément Léger #define AT91_SHDW_WKUPDBC_MASK	GENMASK_32(26, 24)
2758200af7SClément Léger #define AT91_SHDW_WKUPDBC(x)	(SHIFT_U32((x), AT91_SHDW_WKUPDBC_SHIFT) & \
2858200af7SClément Léger 				 AT91_SHDW_WKUPDBC_MASK)
2958200af7SClément Léger #define AT91_SHDW_RTCWKEN	BIT32(17)
30*13d015f7STony Han #define AT91_SHDW_RTTWKEN	BIT32(16)
3158200af7SClément Léger 
3258200af7SClément Léger /* Shut Down Status Register */
3358200af7SClément Léger #define AT91_SHDW_SR		0x08
3458200af7SClément Léger #define AT91_SHDW_WKUPIS_SHIFT	16
3558200af7SClément Léger #define AT91_SHDW_WKUPIS_MASK	GENMASK_32(31, 16)
3658200af7SClément Léger #define AT91_SHDW_WKUPIS(x)	(BIT32((x) + AT91_SHDW_WKUPIS_SHIFT))
3758200af7SClément Léger 
3858200af7SClément Léger /* Shutdown Wake-up Inputs Register */
3958200af7SClément Léger #define AT91_SHDW_WUIR		0x0c
4058200af7SClément Léger #define AT91_SHDW_WKUPEN_MASK	GENMASK_32(15, 0)
4158200af7SClément Léger #define AT91_SHDW_WKUPEN(x)	(BIT32(x) & AT91_SHDW_WKUPEN_MASK)
4258200af7SClément Léger #define AT91_SHDW_WKUPT_SHIFT	16
4358200af7SClément Léger #define AT91_SHDW_WKUPT_MASK	GENMASK_32(31, 16)
4458200af7SClément Léger #define AT91_SHDW_WKUPT(x)	(BIT32((x) + AT91_SHDW_WKUPT_SHIFT))
4558200af7SClément Léger 
4658200af7SClément Léger #ifndef __ASSEMBLER__
4758200af7SClément Léger #if defined(CFG_ATMEL_SHDWC)
4858200af7SClément Léger 
4958200af7SClément Léger void __atmel_shdwc_shutdown(uint32_t mpddrc_base, uint32_t shdwc_base,
5058200af7SClément Léger 			    uint32_t pmc_base);
5158200af7SClément Léger 
5258200af7SClément Léger bool atmel_shdwc_available(void);
5358200af7SClément Léger 
5458200af7SClément Léger void __noreturn atmel_shdwc_shutdown(void);
5558200af7SClément Léger #else
atmel_shdwc_available(void)5658200af7SClément Léger static inline bool atmel_shdwc_available(void)
5758200af7SClément Léger {
5858200af7SClément Léger 	return false;
5958200af7SClément Léger }
6058200af7SClément Léger 
atmel_shdwc_shutdown(void)6158200af7SClément Léger static inline void atmel_shdwc_shutdown(void) {}
6258200af7SClément Léger #endif /* defined(CFG_ATMEL_SHDWC) */
6358200af7SClément Léger #endif /* __ASSEMBLER__*/
6458200af7SClément Léger 
6558200af7SClément Léger #endif /* __DRIVERS_ATMEL_SHDWC_H */
66