1 /******************************************************************************
2 *
3 * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
4 * Analog Devices, Inc.),
5 * Copyright (C) 2023-2024 Analog Devices, Inc.
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 ******************************************************************************/
20
21 /* **** Includes **** */
22 #include <stddef.h>
23 #include "mxc_device.h"
24 #include "mxc_errors.h"
25 #include "mxc_assert.h"
26 #include "mxc_sys.h"
27 #include "icc.h"
28 #include "icc_reva.h"
29 #include "icc_reva_regs.h"
30
31 /* **** Definitions **** */
32
33 /* **** Globals **** */
34
35 /* **** Functions **** */
MXC_ICC_Ready(mxc_icc_reva_regs_t * icc)36 static int MXC_ICC_Ready(mxc_icc_reva_regs_t *icc)
37 {
38 return (icc->ctrl & MXC_F_ICC_REVA_CTRL_RDY);
39 }
40
MXC_ICC_RevA_ID(mxc_icc_reva_regs_t * icc,mxc_icc_info_t cid)41 int MXC_ICC_RevA_ID(mxc_icc_reva_regs_t *icc, mxc_icc_info_t cid)
42 {
43 if (icc == NULL) {
44 return E_NULL_PTR;
45 }
46
47 switch (cid) {
48 case ICC_INFO_RELNUM:
49 return ((icc->info & MXC_F_ICC_REVA_INFO_RELNUM) >> MXC_F_ICC_REVA_INFO_RELNUM_POS);
50
51 case ICC_INFO_PARTNUM:
52 return ((icc->info & MXC_F_ICC_REVA_INFO_PARTNUM) >> MXC_F_ICC_REVA_INFO_PARTNUM_POS);
53
54 case ICC_INFO_ID:
55 return ((icc->info & MXC_F_ICC_REVA_INFO_ID) >> MXC_F_ICC_REVA_INFO_ID_POS);
56
57 default:
58 return E_BAD_PARAM;
59 }
60 }
61
MXC_ICC_RevA_Enable(mxc_icc_reva_regs_t * icc)62 void MXC_ICC_RevA_Enable(mxc_icc_reva_regs_t *icc)
63 {
64 // Invalidate cache and wait until ready
65 icc->ctrl &= ~MXC_F_ICC_REVA_CTRL_EN;
66 icc->invalidate = 1;
67
68 while (!(MXC_ICC_Ready(icc))) {}
69
70 // Enable Cache
71 icc->ctrl |= MXC_F_ICC_REVA_CTRL_EN;
72 while (!(MXC_ICC_Ready(icc))) {}
73 }
74
MXC_ICC_RevA_Disable(mxc_icc_reva_regs_t * icc)75 void MXC_ICC_RevA_Disable(mxc_icc_reva_regs_t *icc)
76 {
77 // Disable Cache
78 icc->ctrl &= ~MXC_F_ICC_REVA_CTRL_EN;
79 }
80