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 12*5bfea97eSLad Prabhakar #include "G2E/pfc_init_g2e.h" 13a51d7062SLad Prabhakar #include "G2H/pfc_init_g2h.h" 14618522ebSBiju Das #include "G2M/pfc_init_g2m.h" 15744c5664SLad Prabhakar #include "G2N/pfc_init_g2n.h" 16618522ebSBiju Das #endif /* RCAR_LSI == RCAR_AUTO */ 17*5bfea97eSLad Prabhakar #if (RCAR_LSI == RZ_G2E) 18*5bfea97eSLad Prabhakar #include "G2E/pfc_init_g2e.h" 19*5bfea97eSLad Prabhakar #endif /* RCAR_LSI == RZ_G2N */ 20a51d7062SLad Prabhakar #if (RCAR_LSI == RZ_G2H) 21a51d7062SLad Prabhakar #include "G2H/pfc_init_g2h.h" 22a51d7062SLad Prabhakar #endif /* RCAR_LSI == RZ_G2H */ 23618522ebSBiju Das #if (RCAR_LSI == RZ_G2M) 24618522ebSBiju Das #include "G2M/pfc_init_g2m.h" 25618522ebSBiju Das #endif /* RCAR_LSI == RZ_G2M */ 26744c5664SLad Prabhakar #if (RCAR_LSI == RZ_G2N) 27744c5664SLad Prabhakar #include "G2N/pfc_init_g2n.h" 28744c5664SLad Prabhakar #endif /* RCAR_LSI == RZ_G2N */ 29618522ebSBiju Das #include "rcar_def.h" 30618522ebSBiju Das 31618522ebSBiju Das #define PRR_PRODUCT_ERR(reg) \ 32618522ebSBiju Das do { \ 33618522ebSBiju Das ERROR("LSI Product ID(PRR=0x%x) PFC init not supported.\n", \ 34618522ebSBiju Das reg); \ 35618522ebSBiju Das panic(); \ 36618522ebSBiju Das } while (0) 37618522ebSBiju Das 38618522ebSBiju Das #define PRR_CUT_ERR(reg) \ 39618522ebSBiju Das do { \ 40618522ebSBiju Das ERROR("LSI Cut ID(PRR=0x%x) PFC init not supported.\n", \ 41618522ebSBiju Das reg); \ 42618522ebSBiju Das panic();\ 43618522ebSBiju Das } while (0) 44618522ebSBiju Das rzg_pfc_init(void)45618522ebSBiju Dasvoid rzg_pfc_init(void) 46618522ebSBiju Das { 47618522ebSBiju Das uint32_t reg; 48618522ebSBiju Das 49618522ebSBiju Das reg = mmio_read_32(RCAR_PRR); 50618522ebSBiju Das #if RCAR_LSI == RCAR_AUTO 51618522ebSBiju Das switch (reg & PRR_PRODUCT_MASK) { 52618522ebSBiju Das case PRR_PRODUCT_M3: 53618522ebSBiju Das pfc_init_g2m(); 54618522ebSBiju Das break; 55a51d7062SLad Prabhakar case PRR_PRODUCT_H3: 56a51d7062SLad Prabhakar pfc_init_g2h(); 57a51d7062SLad Prabhakar break; 58744c5664SLad Prabhakar case PRR_PRODUCT_M3N: 59744c5664SLad Prabhakar pfc_init_g2n(); 60744c5664SLad Prabhakar break; 61*5bfea97eSLad Prabhakar case PRR_PRODUCT_E3: 62*5bfea97eSLad Prabhakar pfc_init_g2e(); 63*5bfea97eSLad Prabhakar break; 64618522ebSBiju Das default: 65618522ebSBiju Das PRR_PRODUCT_ERR(reg); 66618522ebSBiju Das break; 67618522ebSBiju Das } 68618522ebSBiju Das 69618522ebSBiju Das #elif RCAR_LSI_CUT_COMPAT /* RCAR_LSI == RCAR_AUTO */ 70618522ebSBiju Das switch (reg & PRR_PRODUCT_MASK) { 71618522ebSBiju Das case PRR_PRODUCT_M3: 72618522ebSBiju Das #if RCAR_LSI != RZ_G2M 73618522ebSBiju Das PRR_PRODUCT_ERR(reg); 74618522ebSBiju Das #else /* RCAR_LSI != RZ_G2M */ 75618522ebSBiju Das pfc_init_g2m(); 76618522ebSBiju Das #endif /* RCAR_LSI != RZ_G2M */ 77618522ebSBiju Das break; 78a51d7062SLad Prabhakar case PRR_PRODUCT_H3: 79a51d7062SLad Prabhakar #if (RCAR_LSI != RZ_G2H) 80a51d7062SLad Prabhakar PRR_PRODUCT_ERR(reg); 81a51d7062SLad Prabhakar #else /* RCAR_LSI != RZ_G2H */ 82a51d7062SLad Prabhakar pfc_init_g2h(); 83a51d7062SLad Prabhakar #endif /* RCAR_LSI != RZ_G2H */ 84a51d7062SLad Prabhakar break; 85744c5664SLad Prabhakar case PRR_PRODUCT_M3N: 86744c5664SLad Prabhakar #if RCAR_LSI != RZ_G2N 87744c5664SLad Prabhakar PRR_PRODUCT_ERR(reg); 88744c5664SLad Prabhakar #else 89744c5664SLad Prabhakar pfc_init_g2n(); 90744c5664SLad Prabhakar #endif /* RCAR_LSI != RZ_G2N */ 91744c5664SLad Prabhakar break; 92*5bfea97eSLad Prabhakar case PRR_PRODUCT_E3: 93*5bfea97eSLad Prabhakar #if RCAR_LSI != RZ_G2E 94*5bfea97eSLad Prabhakar PRR_PRODUCT_ERR(reg); 95*5bfea97eSLad Prabhakar #else 96*5bfea97eSLad Prabhakar pfc_init_g2e(); 97*5bfea97eSLad Prabhakar #endif 98*5bfea97eSLad Prabhakar break; 99618522ebSBiju Das default: 100618522ebSBiju Das PRR_PRODUCT_ERR(reg); 101618522ebSBiju Das break; 102618522ebSBiju Das } 103618522ebSBiju Das 104618522ebSBiju Das #else /* RCAR_LSI == RCAR_AUTO */ 105618522ebSBiju Das #if (RCAR_LSI == RZ_G2M) 106618522ebSBiju Das if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_M3) { 107618522ebSBiju Das PRR_PRODUCT_ERR(reg); 108618522ebSBiju Das } 109618522ebSBiju Das pfc_init_m3(); 110a51d7062SLad Prabhakar #elif (RCAR_LSI == RZ_G2H) 111a51d7062SLad Prabhakar if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_H3) { 112a51d7062SLad Prabhakar PRR_PRODUCT_ERR(reg); 113a51d7062SLad Prabhakar } 114a51d7062SLad Prabhakar pfc_init_g2h(); 115744c5664SLad Prabhakar #elif (RCAR_LSI == RZ_G2N) /* G2N */ 116744c5664SLad Prabhakar if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_M3N) { 117744c5664SLad Prabhakar PRR_PRODUCT_ERR(reg); 118744c5664SLad Prabhakar } 119744c5664SLad Prabhakar pfc_init_g2n(); 120*5bfea97eSLad Prabhakar #elif (RCAR_LSI == RZ_G2E) 121*5bfea97eSLad Prabhakar if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_E3) { 122*5bfea97eSLad Prabhakar PRR_PRODUCT_ERR(reg); 123*5bfea97eSLad Prabhakar } 124*5bfea97eSLad Prabhakar pfc_init_g2e(); 125618522ebSBiju Das #else /* RCAR_LSI == RZ_G2M */ 126618522ebSBiju Das #error "Don't have PFC initialize routine(unknown)." 127618522ebSBiju Das #endif /* RCAR_LSI == RZ_G2M */ 128618522ebSBiju Das #endif /* RCAR_LSI == RCAR_AUTO */ 129618522ebSBiju Das } 130