1 /** 2 * @file rpu.h 3 * @brief RPU function prototypes and data types. 4 */ 5 6 /****************************************************************************** 7 * 8 * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by 9 * Analog Devices, Inc.), 10 * Copyright (C) 2023-2024 Analog Devices, Inc. 11 * 12 * Licensed under the Apache License, Version 2.0 (the "License"); 13 * you may not use this file except in compliance with the License. 14 * You may obtain a copy of the License at 15 * 16 * http://www.apache.org/licenses/LICENSE-2.0 17 * 18 * Unless required by applicable law or agreed to in writing, software 19 * distributed under the License is distributed on an "AS IS" BASIS, 20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 21 * See the License for the specific language governing permissions and 22 * limitations under the License. 23 * 24 ******************************************************************************/ 25 26 /* Define to prevent redundant inclusion */ 27 #ifndef LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32665_RPU_H_ 28 #define LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32665_RPU_H_ 29 30 /* **** Includes **** */ 31 #include "rpu_regs.h" 32 33 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 37 /** 38 * @defgroup rpu Resource Protection Unit 39 * @ingroup periphlibs 40 * @{ 41 */ 42 43 /* **** Definitions **** */ 44 45 // Bus Masters whose access to peripherals is controlled by the RPU 46 typedef enum { 47 MXC_RPU_DMA0_ALLOW = 0x01, 48 MXC_RPU_DMA1_ALLOW = 0x02, 49 MXC_RPU_USB_ALLOW = 0x04, 50 MXC_RPU_SYS0_ALLOW = 0x08, 51 MXC_RPU_SYS1_ALLOW = 0x10, 52 MXC_RPU_SDMAD_ALLOW = 0x20, 53 MXC_RPU_SDMAI_ALLOW = 0x40, 54 MXC_RPU_CRYPTO_ALLOW = 0x80, 55 MXC_RPU_SDIO_ALLOW = 0x100 56 } mxc_rpu_allow_t; 57 58 // Peripherals gated by the RPU 59 typedef enum { 60 MXC_RPU_GCR = MXC_R_RPU_GCR, 61 MXC_RPU_FLC0 = MXC_R_RPU_FLC0, 62 MXC_RPU_SDHCCTRL = MXC_R_RPU_SDHCCTRL, 63 MXC_RPU_SIR = MXC_R_RPU_SIR, 64 MXC_RPU_FCR = MXC_R_RPU_FCR, 65 MXC_RPU_CRYPTO = MXC_R_RPU_TPU, 66 MXC_RPU_WDT0 = MXC_R_RPU_WDT0, 67 MXC_RPU_WDT1 = MXC_R_RPU_WDT1, 68 MXC_RPU_WDT2 = MXC_R_RPU_WDT2, 69 MXC_RPU_SMON = MXC_R_RPU_SMON, 70 MXC_RPU_SIMO = MXC_R_RPU_SIMO, 71 MXC_RPU_DVS = MXC_R_RPU_DVS, 72 MXC_RPU_RTC = MXC_R_RPU_RTC, 73 MXC_RPU_WUT = MXC_R_RPU_WUT, 74 MXC_RPU_PWRSEQ = MXC_R_RPU_PWRSEQ, 75 MXC_RPU_MCR = MXC_R_RPU_MCR, 76 MXC_RPU_GPIO0 = MXC_R_RPU_GPIO0, 77 MXC_RPU_GPIO1 = MXC_R_RPU_GPIO1, 78 MXC_RPU_TMR0 = MXC_R_RPU_TMR0, 79 MXC_RPU_TMR1 = MXC_R_RPU_TMR1, 80 MXC_RPU_TMR2 = MXC_R_RPU_TMR2, 81 MXC_RPU_TMR3 = MXC_R_RPU_TMR3, 82 MXC_RPU_TMR4 = MXC_R_RPU_TMR4, 83 MXC_RPU_TMR5 = MXC_R_RPU_TMR5, 84 MXC_RPU_HTIMER0 = MXC_R_RPU_HTIMER0, 85 MXC_RPU_HTIMER1 = MXC_R_RPU_HTIMER1, 86 MXC_RPU_I2C0_BUS0 = MXC_R_RPU_I2C0_BUS0, 87 MXC_RPU_I2C1_BUS0 = MXC_R_RPU_I2C1_BUS0, 88 MXC_RPU_I2C2_BUS0 = MXC_R_RPU_I2C2_BUS0, 89 MXC_RPU_SPIXFM = MXC_R_RPU_SPIXFM, 90 MXC_RPU_SPIXFC = MXC_R_RPU_SPIXFC, 91 MXC_RPU_DMA0 = MXC_R_RPU_DMA0, 92 MXC_RPU_FLC1 = MXC_R_RPU_FLC1, 93 MXC_RPU_ICC0 = MXC_R_RPU_ICC0, 94 MXC_RPU_ICC1 = MXC_R_RPU_ICC1, 95 MXC_RPU_SFCC = MXC_R_RPU_SFCC, 96 MXC_RPU_SRCC = MXC_R_RPU_SRCC, 97 MXC_RPU_ADC = MXC_R_RPU_ADC, 98 MXC_RPU_DMA1 = MXC_R_RPU_DMA1, 99 MXC_RPU_SDMA = MXC_R_RPU_SDMA, 100 MXC_RPU_SPIXR = MXC_R_RPU_SPIXR, 101 MXC_RPU_PTG_BUS0 = MXC_R_RPU_PTG_BUS0, 102 MXC_RPU_OWM = MXC_R_RPU_OWM, 103 MXC_RPU_SEMA = MXC_R_RPU_SEMA, 104 MXC_RPU_UART0 = MXC_R_RPU_UART0, 105 MXC_RPU_UART1 = MXC_R_RPU_UART1, 106 MXC_RPU_UART2 = MXC_R_RPU_UART2, 107 MXC_RPU_SPI1 = MXC_R_RPU_SPI1, 108 MXC_RPU_SPI2 = MXC_R_RPU_SPI2, 109 MXC_RPU_AUDIO = MXC_R_RPU_AUDIO, 110 MXC_RPU_TRNG = MXC_R_RPU_TRNG, 111 MXC_RPU_BTLE = MXC_R_RPU_BTLE, 112 MXC_RPU_USBHS = MXC_R_RPU_USBHS, 113 MXC_RPU_SDIO = MXC_R_RPU_SDIO, 114 MXC_RPU_SPIXFM_FIFO = MXC_R_RPU_SPIXFM_FIFO, 115 MXC_RPU_SPI0 = MXC_R_RPU_SPI0 116 } mxc_rpu_device_t; 117 118 /* **** Function Prototypes **** */ 119 /** 120 * @brief Enable access to peripherals restricted by the RPU 121 * This function must be called from handler (privileged) mode 122 * @param periph the peripheral to allow access too 123 * @param allow_mask which bus masters to allow to access periph 124 * @return E_NO_ERROR If function is successful. 125 */ 126 int MXC_RPU_Allow(mxc_rpu_device_t periph, uint32_t allow_mask); 127 128 /** 129 * @brief Disable access to peripherals restricted by the RPU 130 * This function must be called from handler (privileged) mode 131 * @param periph the peripheral to revoke access too 132 * @param disallow_mask which bus masters to disallow access to periph 133 * @return E_NO_ERROR if function is successful. 134 */ 135 int MXC_RPU_Disallow(mxc_rpu_device_t periph, uint32_t disallow_mask); 136 137 /** 138 * @brief Check to see if this process is running in handler mode 139 * @return E_NO_RRROR If allowed. 140 * @return E_BAD_STATE If not allowed. 141 */ 142 int MXC_RPU_IsAllowed(void); 143 144 /**@} end of group rpu */ 145 146 #ifdef __cplusplus 147 } 148 #endif 149 150 #endif // LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32665_RPU_H_ 151