1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /* 3 * Copyright (c) 2015 Atmel Corporation, 4 * Nicolas Ferre <nicolas.ferre@atmel.com> 5 * Copyright (c) 2021, Microchip 6 */ 7 8 #ifndef __DRIVERS_ATMEL_SHDWC_H 9 #define __DRIVERS_ATMEL_SHDWC_H 10 11 #include <compiler.h> 12 #include <stdbool.h> 13 #include <stdint.h> 14 #include <util.h> 15 16 /* Shut Down Control Register */ 17 #define AT91_SHDW_CR 0x00 18 /* Shut Down command */ 19 #define AT91_SHDW_SHDW BIT(0) 20 /* KEY Password */ 21 #define AT91_SHDW_KEY SHIFT_U32(0xa5UL, 24) 22 23 /* Shut Down Mode Register */ 24 #define AT91_SHDW_MR 0x04 25 #define AT91_SHDW_WKUPDBC_SHIFT 24 26 #define AT91_SHDW_WKUPDBC_MASK GENMASK_32(26, 24) 27 #define AT91_SHDW_WKUPDBC(x) (SHIFT_U32((x), AT91_SHDW_WKUPDBC_SHIFT) & \ 28 AT91_SHDW_WKUPDBC_MASK) 29 #define AT91_SHDW_RTCWKEN BIT32(17) 30 #define AT91_SHDW_RTTWKEN BIT32(16) 31 32 /* Shut Down Status Register */ 33 #define AT91_SHDW_SR 0x08 34 #define AT91_SHDW_WKUPIS_SHIFT 16 35 #define AT91_SHDW_WKUPIS_MASK GENMASK_32(31, 16) 36 #define AT91_SHDW_WKUPIS(x) (BIT32((x) + AT91_SHDW_WKUPIS_SHIFT)) 37 38 /* Shutdown Wake-up Inputs Register */ 39 #define AT91_SHDW_WUIR 0x0c 40 #define AT91_SHDW_WKUPEN_MASK GENMASK_32(15, 0) 41 #define AT91_SHDW_WKUPEN(x) (BIT32(x) & AT91_SHDW_WKUPEN_MASK) 42 #define AT91_SHDW_WKUPT_SHIFT 16 43 #define AT91_SHDW_WKUPT_MASK GENMASK_32(31, 16) 44 #define AT91_SHDW_WKUPT(x) (BIT32((x) + AT91_SHDW_WKUPT_SHIFT)) 45 46 #ifndef __ASSEMBLER__ 47 #if defined(CFG_ATMEL_SHDWC) 48 49 void __atmel_shdwc_shutdown(uint32_t mpddrc_base, uint32_t shdwc_base, 50 uint32_t pmc_base); 51 52 bool atmel_shdwc_available(void); 53 54 void __noreturn atmel_shdwc_shutdown(void); 55 #else 56 static inline bool atmel_shdwc_available(void) 57 { 58 return false; 59 } 60 61 static inline void atmel_shdwc_shutdown(void) {} 62 #endif /* defined(CFG_ATMEL_SHDWC) */ 63 #endif /* __ASSEMBLER__*/ 64 65 #endif /* __DRIVERS_ATMEL_SHDWC_H */ 66