2 * Copyright (c) 2015-2018, Renesas Electronics Corporation. All rights reserved.
4 * SPDX-License-Identifier: BSD-3-Clause
9 #include <common/debug.h>
13 #if RCAR_LSI == RCAR_AUTO
14 #include "H3/pfc_init_h3_v1.h"
15 #include "H3/pfc_init_h3_v2.h"
16 #include "M3/pfc_init_m3.h"
17 #include "M3N/pfc_init_m3n.h"
19 #if (RCAR_LSI == RCAR_H3) || (RCAR_LSI == RCAR_H3N) /* H3 */
20 #include "H3/pfc_init_h3_v1.h"
21 #include "H3/pfc_init_h3_v2.h"
23 #if RCAR_LSI == RCAR_M3 /* M3 */
24 #include "M3/pfc_init_m3.h"
26 #if RCAR_LSI == RCAR_M3N /* M3N */
27 #include "M3N/pfc_init_m3n.h"
29 #if RCAR_LSI == RCAR_E3 /* E3 */
30 #include "E3/pfc_init_e3.h"
33 /* Product Register */
34 #define PRR (0xFFF00044U)
35 #define PRR_PRODUCT_MASK (0x00007F00U)
36 #define PRR_CUT_MASK (0x000000FFU)
37 #define PRR_PRODUCT_H3 (0x00004F00U) /* R-Car H3 */
38 #define PRR_PRODUCT_M3 (0x00005200U) /* R-Car M3 */
39 #define PRR_PRODUCT_M3N (0x00005500U) /* R-Car M3N */
40 #define PRR_PRODUCT_E3 (0x00005700U) /* R-Car E3 */
41 #define PRR_PRODUCT_10 (0x00U)
42 #define PRR_PRODUCT_11 (0x01U)
43 #define PRR_PRODUCT_20 (0x10U)
45 #define PRR_PRODUCT_ERR(reg) do{\
46 ERROR("LSI Product ID(PRR=0x%x) PFC "\
47 "initialize not supported.\n",reg);\
50 #define PRR_CUT_ERR(reg) do{\
51 ERROR("LSI Cut ID(PRR=0x%x) PFC "\
52 "initialize not supported.\n",reg);\
56 void rcar_pfc_init(void)
60 reg
= mmio_read_32(RCAR_PRR
);
61 #if RCAR_LSI == RCAR_AUTO
62 switch (reg
& RCAR_PRODUCT_MASK
) {
64 switch (reg
& PRR_CUT_MASK
) {
65 case PRR_PRODUCT_10
: /* H3 Ver.1.0 */
68 case PRR_PRODUCT_11
: /* H3 Ver.1.1 */
71 default: /* H3 Ver.2.0 or later */
79 case RCAR_PRODUCT_M3N
:
87 #elif RCAR_LSI_CUT_COMPAT
88 switch (reg
& PRR_PRODUCT_MASK
) {
90 #if (RCAR_LSI != RCAR_H3) && (RCAR_LSI != RCAR_H3N)
93 switch (reg
& PRR_CUT_MASK
) {
94 case PRR_PRODUCT_10
: /* H3 Ver.1.0 */
97 case PRR_PRODUCT_11
: /* H3 Ver.1.1 */
100 default: /* H3 Ver.2.0 or later */
107 #if RCAR_LSI != RCAR_M3
108 PRR_PRODUCT_ERR(reg
);
113 case PRR_PRODUCT_M3N
:
114 #if RCAR_LSI != RCAR_M3N
115 PRR_PRODUCT_ERR(reg
);
121 #if RCAR_LSI != RCAR_E3
122 PRR_PRODUCT_ERR(reg
);
128 PRR_PRODUCT_ERR(reg
);
133 #if (RCAR_LSI == RCAR_H3) || (RCAR_LSI == RCAR_H3N) /* H3 */
134 #if RCAR_LSI_CUT == RCAR_CUT_10
136 if ((PRR_PRODUCT_H3
| PRR_PRODUCT_10
)
137 != (reg
& (PRR_PRODUCT_MASK
| PRR_CUT_MASK
))) {
138 PRR_PRODUCT_ERR(reg
);
141 #elif RCAR_LSI_CUT == RCAR_CUT_11
143 if ((PRR_PRODUCT_H3
| PRR_PRODUCT_11
)
144 != (reg
& (PRR_PRODUCT_MASK
| PRR_CUT_MASK
))) {
145 PRR_PRODUCT_ERR(reg
);
149 /* H3 Ver.2.0 or later */
150 if (PRR_PRODUCT_H3
!= (reg
& PRR_PRODUCT_MASK
)) {
151 PRR_PRODUCT_ERR(reg
);
155 #elif RCAR_LSI == RCAR_M3 /* M3 */
156 if ((PRR_PRODUCT_M3
) != (reg
& PRR_PRODUCT_MASK
)) {
157 PRR_PRODUCT_ERR(reg
);
160 #elif RCAR_LSI == RCAR_M3N /* M3N */
161 if ((PRR_PRODUCT_M3N
) != (reg
& PRR_PRODUCT_MASK
)) {
162 PRR_PRODUCT_ERR(reg
);
165 #elif RCAR_LSI == RCAR_E3 /* E3 */
166 if ((PRR_PRODUCT_E3
) != (reg
& PRR_PRODUCT_MASK
)) {
167 PRR_PRODUCT_ERR(reg
);
171 #error "Don't have PFC initialize routine(unknown)."