1618522ebSBiju Das /* 2a51d7062SLad Prabhakar * Copyright (c) 2020-2021, Renesas Electronics Corporation. All rights reserved. 3618522ebSBiju Das * 4618522ebSBiju Das * SPDX-License-Identifier: BSD-3-Clause 5618522ebSBiju Das */ 6618522ebSBiju Das #include <stdint.h> 7618522ebSBiju Das 8618522ebSBiju Das #include <common/debug.h> 9618522ebSBiju Das #include <lib/mmio.h> 10618522ebSBiju Das 11618522ebSBiju Das #if RCAR_LSI == RCAR_AUTO 12a51d7062SLad Prabhakar #include "G2H/pfc_init_g2h.h" 13618522ebSBiju Das #include "G2M/pfc_init_g2m.h" 14*744c5664SLad Prabhakar #include "G2N/pfc_init_g2n.h" 15618522ebSBiju Das #endif /* RCAR_LSI == RCAR_AUTO */ 16a51d7062SLad Prabhakar #if (RCAR_LSI == RZ_G2H) 17a51d7062SLad Prabhakar #include "G2H/pfc_init_g2h.h" 18a51d7062SLad Prabhakar #endif /* RCAR_LSI == RZ_G2H */ 19618522ebSBiju Das #if (RCAR_LSI == RZ_G2M) 20618522ebSBiju Das #include "G2M/pfc_init_g2m.h" 21618522ebSBiju Das #endif /* RCAR_LSI == RZ_G2M */ 22*744c5664SLad Prabhakar #if (RCAR_LSI == RZ_G2N) 23*744c5664SLad Prabhakar #include "G2N/pfc_init_g2n.h" 24*744c5664SLad Prabhakar #endif /* RCAR_LSI == RZ_G2N */ 25618522ebSBiju Das #include "rcar_def.h" 26618522ebSBiju Das 27618522ebSBiju Das #define PRR_PRODUCT_ERR(reg) \ 28618522ebSBiju Das do { \ 29618522ebSBiju Das ERROR("LSI Product ID(PRR=0x%x) PFC init not supported.\n", \ 30618522ebSBiju Das reg); \ 31618522ebSBiju Das panic(); \ 32618522ebSBiju Das } while (0) 33618522ebSBiju Das 34618522ebSBiju Das #define PRR_CUT_ERR(reg) \ 35618522ebSBiju Das do { \ 36618522ebSBiju Das ERROR("LSI Cut ID(PRR=0x%x) PFC init not supported.\n", \ 37618522ebSBiju Das reg); \ 38618522ebSBiju Das panic();\ 39618522ebSBiju Das } while (0) 40618522ebSBiju Das 41618522ebSBiju Das void rzg_pfc_init(void) 42618522ebSBiju Das { 43618522ebSBiju Das uint32_t reg; 44618522ebSBiju Das 45618522ebSBiju Das reg = mmio_read_32(RCAR_PRR); 46618522ebSBiju Das #if RCAR_LSI == RCAR_AUTO 47618522ebSBiju Das switch (reg & PRR_PRODUCT_MASK) { 48618522ebSBiju Das case PRR_PRODUCT_M3: 49618522ebSBiju Das pfc_init_g2m(); 50618522ebSBiju Das break; 51a51d7062SLad Prabhakar case PRR_PRODUCT_H3: 52a51d7062SLad Prabhakar pfc_init_g2h(); 53a51d7062SLad Prabhakar break; 54*744c5664SLad Prabhakar case PRR_PRODUCT_M3N: 55*744c5664SLad Prabhakar pfc_init_g2n(); 56*744c5664SLad Prabhakar break; 57618522ebSBiju Das default: 58618522ebSBiju Das PRR_PRODUCT_ERR(reg); 59618522ebSBiju Das break; 60618522ebSBiju Das } 61618522ebSBiju Das 62618522ebSBiju Das #elif RCAR_LSI_CUT_COMPAT /* RCAR_LSI == RCAR_AUTO */ 63618522ebSBiju Das switch (reg & PRR_PRODUCT_MASK) { 64618522ebSBiju Das case PRR_PRODUCT_M3: 65618522ebSBiju Das #if RCAR_LSI != RZ_G2M 66618522ebSBiju Das PRR_PRODUCT_ERR(reg); 67618522ebSBiju Das #else /* RCAR_LSI != RZ_G2M */ 68618522ebSBiju Das pfc_init_g2m(); 69618522ebSBiju Das #endif /* RCAR_LSI != RZ_G2M */ 70618522ebSBiju Das break; 71a51d7062SLad Prabhakar case PRR_PRODUCT_H3: 72a51d7062SLad Prabhakar #if (RCAR_LSI != RZ_G2H) 73a51d7062SLad Prabhakar PRR_PRODUCT_ERR(reg); 74a51d7062SLad Prabhakar #else /* RCAR_LSI != RZ_G2H */ 75a51d7062SLad Prabhakar pfc_init_g2h(); 76a51d7062SLad Prabhakar #endif /* RCAR_LSI != RZ_G2H */ 77a51d7062SLad Prabhakar break; 78*744c5664SLad Prabhakar case PRR_PRODUCT_M3N: 79*744c5664SLad Prabhakar #if RCAR_LSI != RZ_G2N 80*744c5664SLad Prabhakar PRR_PRODUCT_ERR(reg); 81*744c5664SLad Prabhakar #else 82*744c5664SLad Prabhakar pfc_init_g2n(); 83*744c5664SLad Prabhakar #endif /* RCAR_LSI != RZ_G2N */ 84*744c5664SLad Prabhakar break; 85618522ebSBiju Das default: 86618522ebSBiju Das PRR_PRODUCT_ERR(reg); 87618522ebSBiju Das break; 88618522ebSBiju Das } 89618522ebSBiju Das 90618522ebSBiju Das #else /* RCAR_LSI == RCAR_AUTO */ 91618522ebSBiju Das #if (RCAR_LSI == RZ_G2M) 92618522ebSBiju Das if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_M3) { 93618522ebSBiju Das PRR_PRODUCT_ERR(reg); 94618522ebSBiju Das } 95618522ebSBiju Das pfc_init_m3(); 96a51d7062SLad Prabhakar #elif (RCAR_LSI == RZ_G2H) 97a51d7062SLad Prabhakar if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_H3) { 98a51d7062SLad Prabhakar PRR_PRODUCT_ERR(reg); 99a51d7062SLad Prabhakar } 100a51d7062SLad Prabhakar pfc_init_g2h(); 101*744c5664SLad Prabhakar #elif (RCAR_LSI == RZ_G2N) /* G2N */ 102*744c5664SLad Prabhakar if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_M3N) { 103*744c5664SLad Prabhakar PRR_PRODUCT_ERR(reg); 104*744c5664SLad Prabhakar } 105*744c5664SLad Prabhakar pfc_init_g2n(); 106618522ebSBiju Das #else /* RCAR_LSI == RZ_G2M */ 107618522ebSBiju Das #error "Don't have PFC initialize routine(unknown)." 108618522ebSBiju Das #endif /* RCAR_LSI == RZ_G2M */ 109618522ebSBiju Das #endif /* RCAR_LSI == RCAR_AUTO */ 110618522ebSBiju Das } 111