xref: /rk3399_ARM-atf/drivers/renesas/rzg/pfc/pfc_init.c (revision b939cbbb8d64844cf2a8ba35014594212bcd81fd)
1 /*
2  * Copyright (c) 2020-2021, Renesas Electronics Corporation. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 #include <stdint.h>
7 
8 #include <common/debug.h>
9 #include <lib/mmio.h>
10 
11 #if RCAR_LSI == RCAR_AUTO
12 #include "G2H/pfc_init_g2h.h"
13 #include "G2M/pfc_init_g2m.h"
14 #endif /* RCAR_LSI == RCAR_AUTO */
15 #if (RCAR_LSI == RZ_G2H)
16 #include "G2H/pfc_init_g2h.h"
17 #endif /* RCAR_LSI == RZ_G2H */
18 #if (RCAR_LSI == RZ_G2M)
19 #include "G2M/pfc_init_g2m.h"
20 #endif /* RCAR_LSI == RZ_G2M */
21 #include "rcar_def.h"
22 
23 #define PRR_PRODUCT_ERR(reg)				\
24 	do {						\
25 		ERROR("LSI Product ID(PRR=0x%x) PFC init not supported.\n", \
26 			reg);				\
27 		panic();				\
28 	} while (0)
29 
30 #define PRR_CUT_ERR(reg)				\
31 	do {						\
32 		ERROR("LSI Cut ID(PRR=0x%x) PFC init not supported.\n", \
33 			reg);				\
34 		panic();\
35 	} while (0)
36 
37 void rzg_pfc_init(void)
38 {
39 	uint32_t reg;
40 
41 	reg = mmio_read_32(RCAR_PRR);
42 #if RCAR_LSI == RCAR_AUTO
43 	switch (reg & PRR_PRODUCT_MASK) {
44 	case PRR_PRODUCT_M3:
45 		pfc_init_g2m();
46 		break;
47 	case PRR_PRODUCT_H3:
48 		pfc_init_g2h();
49 		break;
50 	default:
51 		PRR_PRODUCT_ERR(reg);
52 		break;
53 	}
54 
55 #elif RCAR_LSI_CUT_COMPAT /* RCAR_LSI == RCAR_AUTO */
56 	switch (reg & PRR_PRODUCT_MASK) {
57 	case PRR_PRODUCT_M3:
58 #if RCAR_LSI != RZ_G2M
59 		PRR_PRODUCT_ERR(reg);
60 #else /* RCAR_LSI != RZ_G2M */
61 		pfc_init_g2m();
62 #endif /* RCAR_LSI != RZ_G2M */
63 		break;
64 	case PRR_PRODUCT_H3:
65 #if (RCAR_LSI != RZ_G2H)
66 		PRR_PRODUCT_ERR(reg);
67 #else /* RCAR_LSI != RZ_G2H */
68 		pfc_init_g2h();
69 #endif /* RCAR_LSI != RZ_G2H */
70 		break;
71 	default:
72 		PRR_PRODUCT_ERR(reg);
73 		break;
74 	}
75 
76 #else /* RCAR_LSI == RCAR_AUTO */
77 #if (RCAR_LSI == RZ_G2M)
78 	if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_M3) {
79 		PRR_PRODUCT_ERR(reg);
80 	}
81 	pfc_init_m3();
82 #elif (RCAR_LSI == RZ_G2H)
83 	if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_H3) {
84 		PRR_PRODUCT_ERR(reg);
85 	}
86 	pfc_init_g2h();
87 #else /* RCAR_LSI == RZ_G2M */
88 #error "Don't have PFC initialize routine(unknown)."
89 #endif /* RCAR_LSI == RZ_G2M */
90 #endif /* RCAR_LSI == RCAR_AUTO */
91 }
92