1 /******************************************************************************
2 * Copyright (c) 2020 Texas Instruments Incorporated - http://www.ti.com
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the
14 * distribution.
15 *
16 * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 *****************************************************************************/
33 /**
34 * \file board_mmr.c
35 *
36 * \brief MMR configuration file
37 *
38 * This file contains the function to unlock the MMR registers
39 *
40 */
42 #include "board_internal.h"
44 Board_STATUS MMR_unlock(uint32_t *kick0, uint32_t *kick1)
45 {
46 /* Initialize the status variable */
47 Board_STATUS status = BOARD_SOK;
49 *kick0 = KICK0_UNLOCK_VAL;
50 *kick1 = KICK1_UNLOCK_VAL;
52 return status;
53 }
55 /**
56 * \brief Unlocks MMR registers
57 *
58 * \return Board_STATUS
59 */
60 Board_STATUS Board_unlockMMR(void)
61 {
62 uint32_t *lock0;
63 uint32_t *lock1;
65 /* Unlock MAIN MMR registers */
66 lock0 = (uint32_t *)(CSL_MSS_TOPRCM_U_BASE + CSL_MSS_TOPRCM_LOCK0_KICK0);
67 lock1 = (uint32_t *)(CSL_MSS_TOPRCM_U_BASE + CSL_MSS_TOPRCM_LOCK0_KICK1);
68 MMR_unlock(lock0, lock1);
70 lock0 = (uint32_t *)(CSL_MSS_RCM_U_BASE + CSL_MSS_RCM_LOCK0_KICK0);
71 lock1 = (uint32_t *)(CSL_MSS_RCM_U_BASE + CSL_MSS_RCM_LOCK0_KICK1);
72 MMR_unlock(lock0, lock1);
74 lock0 = (uint32_t *)(CSL_MSS_CTRL_U_BASE + CSL_MSS_CTRL_LOCK0_KICK0);
75 lock1 = (uint32_t *)(CSL_MSS_CTRL_U_BASE + CSL_MSS_CTRL_LOCK0_KICK1);
76 MMR_unlock(lock0, lock1);
78 lock0 = (uint32_t *)(CSL_DSS_RCM_U_BASE + CSL_DSS_RCM_LOCK0_KICK0);
79 lock1 = (uint32_t *)(CSL_DSS_RCM_U_BASE + CSL_DSS_RCM_LOCK0_KICK1);
80 MMR_unlock(lock0, lock1);
82 lock0 = (uint32_t *)(CSL_DSS_CTRL_U_BASE + CSL_DSS_CTRL_LOCK0_KICK0);
83 lock1 = (uint32_t *)(CSL_DSS_CTRL_U_BASE + CSL_DSS_CTRL_LOCK0_KICK1);
84 MMR_unlock(lock0, lock1);
86 lock0 = (uint32_t *)(CSL_RCSS_RCM_U_BASE + CSL_RCSS_RCM_LOCK0_KICK0);
87 lock1 = (uint32_t *)(CSL_RCSS_RCM_U_BASE + CSL_RCSS_RCM_LOCK0_KICK1);
88 MMR_unlock(lock0, lock1);
90 lock0 = (uint32_t *)(CSL_RCSS_CTRL_U_BASE + CSL_RCSS_CTRL_LOCK0_KICK0);
91 lock1 = (uint32_t *)(CSL_RCSS_CTRL_U_BASE + CSL_RCSS_CTRL_LOCK0_KICK1);
92 MMR_unlock(lock0, lock1);
94 return BOARD_SOK;
95 }