xref: /rk3399_ARM-atf/drivers/renesas/rzg/pfc/pfc_init.c (revision faf5587cfd08cc1bd308b74006bbfd41e0be7a45)
1 /*
2  * Copyright (c) 2020, 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 "G2M/pfc_init_g2m.h"
13 #endif /* RCAR_LSI == RCAR_AUTO */
14 #if (RCAR_LSI == RZ_G2M)
15 #include "G2M/pfc_init_g2m.h"
16 #endif /* RCAR_LSI == RZ_G2M */
17 #include "rcar_def.h"
18 
19 #define PRR_PRODUCT_ERR(reg)				\
20 	do {						\
21 		ERROR("LSI Product ID(PRR=0x%x) PFC init not supported.\n", \
22 			reg);				\
23 		panic();				\
24 	} while (0)
25 
26 #define PRR_CUT_ERR(reg)				\
27 	do {						\
28 		ERROR("LSI Cut ID(PRR=0x%x) PFC init not supported.\n", \
29 			reg);				\
30 		panic();\
31 	} while (0)
32 
33 void rzg_pfc_init(void)
34 {
35 	uint32_t reg;
36 
37 	reg = mmio_read_32(RCAR_PRR);
38 #if RCAR_LSI == RCAR_AUTO
39 	switch (reg & PRR_PRODUCT_MASK) {
40 	case PRR_PRODUCT_M3:
41 		pfc_init_g2m();
42 		break;
43 	default:
44 		PRR_PRODUCT_ERR(reg);
45 		break;
46 	}
47 
48 #elif RCAR_LSI_CUT_COMPAT /* RCAR_LSI == RCAR_AUTO */
49 	switch (reg & PRR_PRODUCT_MASK) {
50 	case PRR_PRODUCT_M3:
51 #if RCAR_LSI != RZ_G2M
52 		PRR_PRODUCT_ERR(reg);
53 #else /* RCAR_LSI != RZ_G2M */
54 		pfc_init_g2m();
55 #endif /* RCAR_LSI != RZ_G2M */
56 		break;
57 	default:
58 		PRR_PRODUCT_ERR(reg);
59 		break;
60 	}
61 
62 #else /* RCAR_LSI == RCAR_AUTO */
63 #if (RCAR_LSI == RZ_G2M)
64 	if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_M3) {
65 		PRR_PRODUCT_ERR(reg);
66 	}
67 	pfc_init_m3();
68 #else /* RCAR_LSI == RZ_G2M */
69 #error "Don't have PFC initialize routine(unknown)."
70 #endif /* RCAR_LSI == RZ_G2M */
71 #endif /* RCAR_LSI == RCAR_AUTO */
72 }
73