1618522ebSBiju Das /* 2*a51d7062SLad 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 12*a51d7062SLad Prabhakar #include "G2H/pfc_init_g2h.h" 13618522ebSBiju Das #include "G2M/pfc_init_g2m.h" 14618522ebSBiju Das #endif /* RCAR_LSI == RCAR_AUTO */ 15*a51d7062SLad Prabhakar #if (RCAR_LSI == RZ_G2H) 16*a51d7062SLad Prabhakar #include "G2H/pfc_init_g2h.h" 17*a51d7062SLad Prabhakar #endif /* RCAR_LSI == RZ_G2H */ 18618522ebSBiju Das #if (RCAR_LSI == RZ_G2M) 19618522ebSBiju Das #include "G2M/pfc_init_g2m.h" 20618522ebSBiju Das #endif /* RCAR_LSI == RZ_G2M */ 21618522ebSBiju Das #include "rcar_def.h" 22618522ebSBiju Das 23618522ebSBiju Das #define PRR_PRODUCT_ERR(reg) \ 24618522ebSBiju Das do { \ 25618522ebSBiju Das ERROR("LSI Product ID(PRR=0x%x) PFC init not supported.\n", \ 26618522ebSBiju Das reg); \ 27618522ebSBiju Das panic(); \ 28618522ebSBiju Das } while (0) 29618522ebSBiju Das 30618522ebSBiju Das #define PRR_CUT_ERR(reg) \ 31618522ebSBiju Das do { \ 32618522ebSBiju Das ERROR("LSI Cut ID(PRR=0x%x) PFC init not supported.\n", \ 33618522ebSBiju Das reg); \ 34618522ebSBiju Das panic();\ 35618522ebSBiju Das } while (0) 36618522ebSBiju Das 37618522ebSBiju Das void rzg_pfc_init(void) 38618522ebSBiju Das { 39618522ebSBiju Das uint32_t reg; 40618522ebSBiju Das 41618522ebSBiju Das reg = mmio_read_32(RCAR_PRR); 42618522ebSBiju Das #if RCAR_LSI == RCAR_AUTO 43618522ebSBiju Das switch (reg & PRR_PRODUCT_MASK) { 44618522ebSBiju Das case PRR_PRODUCT_M3: 45618522ebSBiju Das pfc_init_g2m(); 46618522ebSBiju Das break; 47*a51d7062SLad Prabhakar case PRR_PRODUCT_H3: 48*a51d7062SLad Prabhakar pfc_init_g2h(); 49*a51d7062SLad Prabhakar break; 50618522ebSBiju Das default: 51618522ebSBiju Das PRR_PRODUCT_ERR(reg); 52618522ebSBiju Das break; 53618522ebSBiju Das } 54618522ebSBiju Das 55618522ebSBiju Das #elif RCAR_LSI_CUT_COMPAT /* RCAR_LSI == RCAR_AUTO */ 56618522ebSBiju Das switch (reg & PRR_PRODUCT_MASK) { 57618522ebSBiju Das case PRR_PRODUCT_M3: 58618522ebSBiju Das #if RCAR_LSI != RZ_G2M 59618522ebSBiju Das PRR_PRODUCT_ERR(reg); 60618522ebSBiju Das #else /* RCAR_LSI != RZ_G2M */ 61618522ebSBiju Das pfc_init_g2m(); 62618522ebSBiju Das #endif /* RCAR_LSI != RZ_G2M */ 63618522ebSBiju Das break; 64*a51d7062SLad Prabhakar case PRR_PRODUCT_H3: 65*a51d7062SLad Prabhakar #if (RCAR_LSI != RZ_G2H) 66*a51d7062SLad Prabhakar PRR_PRODUCT_ERR(reg); 67*a51d7062SLad Prabhakar #else /* RCAR_LSI != RZ_G2H */ 68*a51d7062SLad Prabhakar pfc_init_g2h(); 69*a51d7062SLad Prabhakar #endif /* RCAR_LSI != RZ_G2H */ 70*a51d7062SLad Prabhakar break; 71618522ebSBiju Das default: 72618522ebSBiju Das PRR_PRODUCT_ERR(reg); 73618522ebSBiju Das break; 74618522ebSBiju Das } 75618522ebSBiju Das 76618522ebSBiju Das #else /* RCAR_LSI == RCAR_AUTO */ 77618522ebSBiju Das #if (RCAR_LSI == RZ_G2M) 78618522ebSBiju Das if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_M3) { 79618522ebSBiju Das PRR_PRODUCT_ERR(reg); 80618522ebSBiju Das } 81618522ebSBiju Das pfc_init_m3(); 82*a51d7062SLad Prabhakar #elif (RCAR_LSI == RZ_G2H) 83*a51d7062SLad Prabhakar if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_H3) { 84*a51d7062SLad Prabhakar PRR_PRODUCT_ERR(reg); 85*a51d7062SLad Prabhakar } 86*a51d7062SLad Prabhakar pfc_init_g2h(); 87618522ebSBiju Das #else /* RCAR_LSI == RZ_G2M */ 88618522ebSBiju Das #error "Don't have PFC initialize routine(unknown)." 89618522ebSBiju Das #endif /* RCAR_LSI == RZ_G2M */ 90618522ebSBiju Das #endif /* RCAR_LSI == RCAR_AUTO */ 91618522ebSBiju Das } 92