1499c2713SBiju Das /* 2ec3e2f67SLad Prabhakar * Copyright (c) 2015-2021, Renesas Electronics Corporation. All rights reserved. 3499c2713SBiju Das * 4499c2713SBiju Das * SPDX-License-Identifier: BSD-3-Clause 5499c2713SBiju Das */ 6499c2713SBiju Das 7499c2713SBiju Das #include <common/debug.h> 8499c2713SBiju Das #include <lib/mmio.h> 9499c2713SBiju Das 10499c2713SBiju Das #include "cpg_registers.h" 11499c2713SBiju Das #include "rcar_def.h" 12499c2713SBiju Das #include "rcar_private.h" 13499c2713SBiju Das 14499c2713SBiju Das static void bl2_secure_cpg_init(void); 15499c2713SBiju Das 16ec3e2f67SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_H3) || \ 17ec3e2f67SLad Prabhakar (RCAR_LSI == RCAR_H3N) || (RCAR_LSI == RZ_G2H) 18499c2713SBiju Das static void bl2_realtime_cpg_init_h3(void); 19499c2713SBiju Das static void bl2_system_cpg_init_h3(void); 20499c2713SBiju Das #endif 21499c2713SBiju Das 22db10bad9SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3) || (RCAR_LSI == RZ_G2M) 23499c2713SBiju Das static void bl2_realtime_cpg_init_m3(void); 24499c2713SBiju Das static void bl2_system_cpg_init_m3(void); 25499c2713SBiju Das #endif 26499c2713SBiju Das 27a4d86f67SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3N) || (RCAR_LSI == RZ_G2N) 28499c2713SBiju Das static void bl2_realtime_cpg_init_m3n(void); 29499c2713SBiju Das static void bl2_system_cpg_init_m3n(void); 30499c2713SBiju Das #endif 31499c2713SBiju Das 32499c2713SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3M) 33499c2713SBiju Das static void bl2_realtime_cpg_init_v3m(void); 34499c2713SBiju Das static void bl2_system_cpg_init_v3m(void); 35499c2713SBiju Das #endif 36499c2713SBiju Das 37bcf43f04SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_E3) || (RCAR_LSI == RZ_G2E) 38499c2713SBiju Das static void bl2_realtime_cpg_init_e3(void); 39499c2713SBiju Das static void bl2_system_cpg_init_e3(void); 40499c2713SBiju Das #endif 41499c2713SBiju Das 42499c2713SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_D3) 43499c2713SBiju Das static void bl2_system_cpg_init_d3(void); 44499c2713SBiju Das #endif 45499c2713SBiju Das 46499c2713SBiju Das typedef struct { 47499c2713SBiju Das uintptr_t adr; 48499c2713SBiju Das uint32_t val; 49499c2713SBiju Das } reg_setting_t; 50499c2713SBiju Das 51499c2713SBiju Das static void bl2_secure_cpg_init(void) 52499c2713SBiju Das { 53499c2713SBiju Das uint32_t stop_cr2, reset_cr2; 54499c2713SBiju Das uint32_t stop_cr4, reset_cr4; 55499c2713SBiju Das uint32_t stop_cr5, reset_cr5; 56499c2713SBiju Das 57499c2713SBiju Das #if (RCAR_LSI == RCAR_D3) 58499c2713SBiju Das reset_cr2 = 0x00000000U; 59499c2713SBiju Das stop_cr2 = 0xFFFFFFFFU; 60bcf43f04SLad Prabhakar #elif (RCAR_LSI == RCAR_E3) || (RCAR_LSI == RZ_G2E) 61499c2713SBiju Das reset_cr2 = 0x10000000U; 62499c2713SBiju Das stop_cr2 = 0xEFFFFFFFU; 63499c2713SBiju Das #else 64499c2713SBiju Das reset_cr2 = 0x14000000U; 65499c2713SBiju Das stop_cr2 = 0xEBFFFFFFU; 66499c2713SBiju Das #endif 67499c2713SBiju Das 68499c2713SBiju Das #if (RCAR_LSI == RCAR_D3) 69499c2713SBiju Das reset_cr4 = 0x00000000U; 70499c2713SBiju Das stop_cr4 = 0xFFFFFFFFU; 71499c2713SBiju Das reset_cr5 = 0x00000000U; 72499c2713SBiju Das stop_cr5 = 0xFFFFFFFFU; 73499c2713SBiju Das #else 74499c2713SBiju Das reset_cr4 = 0x80000003U; 75499c2713SBiju Das stop_cr4 = 0x7FFFFFFFU; 76499c2713SBiju Das reset_cr5 = 0x40000000U; 77499c2713SBiju Das stop_cr5 = 0xBFFFFFFFU; 78499c2713SBiju Das #endif 79499c2713SBiju Das 80499c2713SBiju Das /* Secure Module Stop Control Registers */ 81499c2713SBiju Das cpg_write(SCMSTPCR0, 0xFFFFFFFFU); 82499c2713SBiju Das cpg_write(SCMSTPCR1, 0xFFFFFFFFU); 83499c2713SBiju Das cpg_write(SCMSTPCR2, stop_cr2); 84499c2713SBiju Das cpg_write(SCMSTPCR3, 0xFFFFFFFFU); 85499c2713SBiju Das cpg_write(SCMSTPCR4, stop_cr4); 86499c2713SBiju Das cpg_write(SCMSTPCR5, stop_cr5); 87499c2713SBiju Das cpg_write(SCMSTPCR6, 0xFFFFFFFFU); 88499c2713SBiju Das cpg_write(SCMSTPCR7, 0xFFFFFFFFU); 89499c2713SBiju Das cpg_write(SCMSTPCR8, 0xFFFFFFFFU); 90499c2713SBiju Das cpg_write(SCMSTPCR9, 0xFFFDFFFFU); 91499c2713SBiju Das cpg_write(SCMSTPCR10, 0xFFFFFFFFU); 92499c2713SBiju Das cpg_write(SCMSTPCR11, 0xFFFFFFFFU); 93499c2713SBiju Das 94499c2713SBiju Das /* Secure Software Reset Access Enable Control Registers */ 95499c2713SBiju Das cpg_write(SCSRSTECR0, 0x00000000U); 96499c2713SBiju Das cpg_write(SCSRSTECR1, 0x00000000U); 97499c2713SBiju Das cpg_write(SCSRSTECR2, reset_cr2); 98499c2713SBiju Das cpg_write(SCSRSTECR3, 0x00000000U); 99499c2713SBiju Das cpg_write(SCSRSTECR4, reset_cr4); 100499c2713SBiju Das cpg_write(SCSRSTECR5, reset_cr5); 101499c2713SBiju Das cpg_write(SCSRSTECR6, 0x00000000U); 102499c2713SBiju Das cpg_write(SCSRSTECR7, 0x00000000U); 103499c2713SBiju Das cpg_write(SCSRSTECR8, 0x00000000U); 104499c2713SBiju Das cpg_write(SCSRSTECR9, 0x00020000U); 105499c2713SBiju Das cpg_write(SCSRSTECR10, 0x00000000U); 106499c2713SBiju Das cpg_write(SCSRSTECR11, 0x00000000U); 107499c2713SBiju Das } 108499c2713SBiju Das 109ec3e2f67SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_H3) || \ 110ec3e2f67SLad Prabhakar (RCAR_LSI == RCAR_H3N) || (RCAR_LSI == RZ_G2H) 111499c2713SBiju Das static void bl2_realtime_cpg_init_h3(void) 112499c2713SBiju Das { 113499c2713SBiju Das uint32_t cut = mmio_read_32(RCAR_PRR) & PRR_CUT_MASK; 114499c2713SBiju Das uint32_t cr0, cr8; 115499c2713SBiju Das 116499c2713SBiju Das cr0 = (cut == PRR_PRODUCT_10 || cut == PRR_PRODUCT_11) ? 117499c2713SBiju Das 0x00200000U : 0x00210000U; 118499c2713SBiju Das cr8 = (cut == PRR_PRODUCT_10 || cut == PRR_PRODUCT_11) ? 119499c2713SBiju Das 0x01F1FFF4U : 0x01F1FFF7U; 120499c2713SBiju Das 121499c2713SBiju Das cpg_write(RMSTPCR0, cr0); 122499c2713SBiju Das cpg_write(RMSTPCR1, 0xFFFFFFFFU); 123499c2713SBiju Das cpg_write(RMSTPCR2, 0x040E0FDCU); 124499c2713SBiju Das cpg_write(RMSTPCR3, 0xFFFFFFDFU); 125499c2713SBiju Das cpg_write(RMSTPCR4, 0x80000004U); 126499c2713SBiju Das cpg_write(RMSTPCR5, 0xC3FFFFFFU); 127499c2713SBiju Das cpg_write(RMSTPCR6, 0xFFFFFFFFU); 128499c2713SBiju Das cpg_write(RMSTPCR7, 0xFFFFFFFFU); 129499c2713SBiju Das cpg_write(RMSTPCR8, cr8); 130499c2713SBiju Das cpg_write(RMSTPCR9, 0xFFFFFFFEU); 131499c2713SBiju Das cpg_write(RMSTPCR10, 0xFFFEFFE0U); 132499c2713SBiju Das cpg_write(RMSTPCR11, 0x000000B7U); 133499c2713SBiju Das } 134499c2713SBiju Das 135499c2713SBiju Das static void bl2_system_cpg_init_h3(void) 136499c2713SBiju Das { 137499c2713SBiju Das /** System Module Stop Control Registers */ 138499c2713SBiju Das cpg_write(SMSTPCR0, 0x00210000U); 139499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 140499c2713SBiju Das cpg_write(SMSTPCR2, 0x040E2FDCU); 141499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 142*89910860SMarek Vasut cpg_write(SMSTPCR4, 0x80000000U | (mmio_read_32(SMSTPCR4) & 0x4)); 143499c2713SBiju Das cpg_write(SMSTPCR5, 0xC3FFFFFFU); 144499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 145499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 146499c2713SBiju Das cpg_write(SMSTPCR8, 0x01F1FFF5U); 147499c2713SBiju Das cpg_write(SMSTPCR9, 0xFFFFFFFFU); 148499c2713SBiju Das cpg_write(SMSTPCR10, 0xFFFEFFE0U); 149499c2713SBiju Das cpg_write(SMSTPCR11, 0x000000B7U); 150499c2713SBiju Das } 151499c2713SBiju Das #endif 152499c2713SBiju Das 153db10bad9SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3) || (RCAR_LSI == RZ_G2M) 154499c2713SBiju Das static void bl2_realtime_cpg_init_m3(void) 155499c2713SBiju Das { 156499c2713SBiju Das /* Realtime Module Stop Control Registers */ 157499c2713SBiju Das cpg_write(RMSTPCR0, 0x00200000U); 158499c2713SBiju Das cpg_write(RMSTPCR1, 0xFFFFFFFFU); 159499c2713SBiju Das cpg_write(RMSTPCR2, 0x040E0FDCU); 160499c2713SBiju Das cpg_write(RMSTPCR3, 0xFFFFFFDFU); 161499c2713SBiju Das cpg_write(RMSTPCR4, 0x80000004U); 162499c2713SBiju Das cpg_write(RMSTPCR5, 0xC3FFFFFFU); 163499c2713SBiju Das cpg_write(RMSTPCR6, 0xFFFFFFFFU); 164499c2713SBiju Das cpg_write(RMSTPCR7, 0xFFFFFFFFU); 165499c2713SBiju Das cpg_write(RMSTPCR8, 0x01F1FFF7U); 166499c2713SBiju Das cpg_write(RMSTPCR9, 0xFFFFFFFEU); 167499c2713SBiju Das cpg_write(RMSTPCR10, 0xFFFEFFE0U); 168499c2713SBiju Das cpg_write(RMSTPCR11, 0x000000B7U); 169499c2713SBiju Das } 170499c2713SBiju Das 171499c2713SBiju Das static void bl2_system_cpg_init_m3(void) 172499c2713SBiju Das { 173499c2713SBiju Das /* System Module Stop Control Registers */ 174499c2713SBiju Das cpg_write(SMSTPCR0, 0x00200000U); 175499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 176499c2713SBiju Das cpg_write(SMSTPCR2, 0x040E2FDCU); 177499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 178*89910860SMarek Vasut cpg_write(SMSTPCR4, 0x80000000U | (mmio_read_32(SMSTPCR4) & 0x4)); 179499c2713SBiju Das cpg_write(SMSTPCR5, 0xC3FFFFFFU); 180499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 181499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 182499c2713SBiju Das cpg_write(SMSTPCR8, 0x01F1FFF7U); 183499c2713SBiju Das cpg_write(SMSTPCR9, 0xFFFFFFFFU); 184499c2713SBiju Das cpg_write(SMSTPCR10, 0xFFFEFFE0U); 185499c2713SBiju Das cpg_write(SMSTPCR11, 0x000000B7U); 186499c2713SBiju Das } 187499c2713SBiju Das #endif 188499c2713SBiju Das 189a4d86f67SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3N) || (RCAR_LSI == RZ_G2N) 190499c2713SBiju Das static void bl2_realtime_cpg_init_m3n(void) 191499c2713SBiju Das { 192499c2713SBiju Das /* Realtime Module Stop Control Registers */ 193499c2713SBiju Das cpg_write(RMSTPCR0, 0x00210000U); 194499c2713SBiju Das cpg_write(RMSTPCR1, 0xFFFFFFFFU); 195499c2713SBiju Das cpg_write(RMSTPCR2, 0x040E0FDCU); 196499c2713SBiju Das cpg_write(RMSTPCR3, 0xFFFFFFDFU); 197499c2713SBiju Das cpg_write(RMSTPCR4, 0x80000004U); 198499c2713SBiju Das cpg_write(RMSTPCR5, 0xC3FFFFFFU); 199499c2713SBiju Das cpg_write(RMSTPCR6, 0xFFFFFFFFU); 200499c2713SBiju Das cpg_write(RMSTPCR7, 0xFFFFFFFFU); 201499c2713SBiju Das cpg_write(RMSTPCR8, 0x00F1FFF7U); 202499c2713SBiju Das cpg_write(RMSTPCR9, 0xFFFFFFFFU); 203499c2713SBiju Das cpg_write(RMSTPCR10, 0xFFFFFFE0U); 204499c2713SBiju Das cpg_write(RMSTPCR11, 0x000000B7U); 205499c2713SBiju Das } 206499c2713SBiju Das 207499c2713SBiju Das static void bl2_system_cpg_init_m3n(void) 208499c2713SBiju Das { 209499c2713SBiju Das /* System Module Stop Control Registers */ 210499c2713SBiju Das cpg_write(SMSTPCR0, 0x00210000U); 211499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 212499c2713SBiju Das cpg_write(SMSTPCR2, 0x040E2FDCU); 213499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 214*89910860SMarek Vasut cpg_write(SMSTPCR4, 0x80000000U | (mmio_read_32(SMSTPCR4) & 0x4)); 215499c2713SBiju Das cpg_write(SMSTPCR5, 0xC3FFFFFFU); 216499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 217499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 218499c2713SBiju Das cpg_write(SMSTPCR8, 0x00F1FFF7U); 219499c2713SBiju Das cpg_write(SMSTPCR9, 0xFFFFFFFFU); 220499c2713SBiju Das cpg_write(SMSTPCR10, 0xFFFFFFE0U); 221499c2713SBiju Das cpg_write(SMSTPCR11, 0x000000B7U); 222499c2713SBiju Das } 223499c2713SBiju Das #endif 224499c2713SBiju Das 225499c2713SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3M) 226499c2713SBiju Das static void bl2_realtime_cpg_init_v3m(void) 227499c2713SBiju Das { 228499c2713SBiju Das /* Realtime Module Stop Control Registers */ 229499c2713SBiju Das cpg_write(RMSTPCR0, 0x00230000U); 230499c2713SBiju Das cpg_write(RMSTPCR1, 0xFFFFFFFFU); 231499c2713SBiju Das cpg_write(RMSTPCR2, 0x14062FD8U); 232499c2713SBiju Das cpg_write(RMSTPCR3, 0xFFFFFFDFU); 233499c2713SBiju Das cpg_write(RMSTPCR4, 0x80000184U); 234499c2713SBiju Das cpg_write(RMSTPCR5, 0x83FFFFFFU); 235499c2713SBiju Das cpg_write(RMSTPCR6, 0xFFFFFFFFU); 236499c2713SBiju Das cpg_write(RMSTPCR7, 0xFFFFFFFFU); 237499c2713SBiju Das cpg_write(RMSTPCR8, 0x7FF3FFF4U); 238499c2713SBiju Das cpg_write(RMSTPCR9, 0xFFFFFFFEU); 239499c2713SBiju Das } 240499c2713SBiju Das 241499c2713SBiju Das static void bl2_system_cpg_init_v3m(void) 242499c2713SBiju Das { 243499c2713SBiju Das /* System Module Stop Control Registers */ 244499c2713SBiju Das cpg_write(SMSTPCR0, 0x00210000U); 245499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 246499c2713SBiju Das cpg_write(SMSTPCR2, 0x340E2FDCU); 247499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 248*89910860SMarek Vasut cpg_write(SMSTPCR4, 0x80000000U | (mmio_read_32(SMSTPCR4) & 0x4)); 249499c2713SBiju Das cpg_write(SMSTPCR5, 0xC3FFFFFFU); 250499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 251499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 252499c2713SBiju Das cpg_write(SMSTPCR8, 0x01F1FFF5U); 253499c2713SBiju Das cpg_write(SMSTPCR9, 0xFFFFFFFEU); 254499c2713SBiju Das } 255499c2713SBiju Das #endif 256499c2713SBiju Das 257bcf43f04SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_E3) || (RCAR_LSI == RZ_G2E) 258499c2713SBiju Das static void bl2_realtime_cpg_init_e3(void) 259499c2713SBiju Das { 260499c2713SBiju Das /* Realtime Module Stop Control Registers */ 261499c2713SBiju Das cpg_write(RMSTPCR0, 0x00210000U); 262499c2713SBiju Das cpg_write(RMSTPCR1, 0xFFFFFFFFU); 263499c2713SBiju Das cpg_write(RMSTPCR2, 0x000E0FDCU); 264499c2713SBiju Das cpg_write(RMSTPCR3, 0xFFFFFFDFU); 265499c2713SBiju Das cpg_write(RMSTPCR4, 0x80000004U); 266499c2713SBiju Das cpg_write(RMSTPCR5, 0xC3FFFFFFU); 267499c2713SBiju Das cpg_write(RMSTPCR6, 0xFFFFFFFFU); 268499c2713SBiju Das cpg_write(RMSTPCR7, 0xFFFFFFFFU); 269499c2713SBiju Das cpg_write(RMSTPCR8, 0x00F1FFF7U); 270499c2713SBiju Das cpg_write(RMSTPCR9, 0xFFFFFFDFU); 271499c2713SBiju Das cpg_write(RMSTPCR10, 0xFFFFFFE8U); 272499c2713SBiju Das cpg_write(RMSTPCR11, 0x000000B7U); 273499c2713SBiju Das } 274499c2713SBiju Das 275499c2713SBiju Das static void bl2_system_cpg_init_e3(void) 276499c2713SBiju Das { 277499c2713SBiju Das /* System Module Stop Control Registers */ 278499c2713SBiju Das cpg_write(SMSTPCR0, 0x00210000U); 279499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 280499c2713SBiju Das cpg_write(SMSTPCR2, 0x000E2FDCU); 281499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 282*89910860SMarek Vasut cpg_write(SMSTPCR4, 0x80000000U | (mmio_read_32(SMSTPCR4) & 0x4)); 283499c2713SBiju Das cpg_write(SMSTPCR5, 0xC3FFFFFFU); 284499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 285499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 286499c2713SBiju Das cpg_write(SMSTPCR8, 0x00F1FFF7U); 287499c2713SBiju Das cpg_write(SMSTPCR9, 0xFFFFFFDFU); 288499c2713SBiju Das cpg_write(SMSTPCR10, 0xFFFFFFE8U); 289499c2713SBiju Das cpg_write(SMSTPCR11, 0x000000B7U); 290499c2713SBiju Das } 291499c2713SBiju Das #endif 292499c2713SBiju Das 293499c2713SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_D3) 294499c2713SBiju Das static void bl2_system_cpg_init_d3(void) 295499c2713SBiju Das { 296499c2713SBiju Das /* System Module Stop Control Registers */ 297499c2713SBiju Das cpg_write(SMSTPCR0, 0x00010000U); 298499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 299499c2713SBiju Das cpg_write(SMSTPCR2, 0x00060FDCU); 300499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 301*89910860SMarek Vasut cpg_write(SMSTPCR4, 0x00000080U | (mmio_read_32(SMSTPCR4) & 0x4)); 302499c2713SBiju Das cpg_write(SMSTPCR5, 0x83FFFFFFU); 303499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 304499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 305499c2713SBiju Das cpg_write(SMSTPCR8, 0x00F1FFF7U); 306499c2713SBiju Das cpg_write(SMSTPCR9, 0xF3F5E016U); 307499c2713SBiju Das cpg_write(SMSTPCR10, 0xFFFEFFE0U); 308499c2713SBiju Das cpg_write(SMSTPCR11, 0x000000B7U); 309499c2713SBiju Das } 310499c2713SBiju Das #endif 311499c2713SBiju Das 312499c2713SBiju Das void bl2_cpg_init(void) 313499c2713SBiju Das { 314499c2713SBiju Das uint32_t boot_cpu = mmio_read_32(RCAR_MODEMR) & MODEMR_BOOT_CPU_MASK; 315499c2713SBiju Das #if RCAR_LSI == RCAR_AUTO 316499c2713SBiju Das uint32_t product = mmio_read_32(RCAR_PRR) & PRR_PRODUCT_MASK; 317499c2713SBiju Das #endif 318499c2713SBiju Das bl2_secure_cpg_init(); 319499c2713SBiju Das 320499c2713SBiju Das if (boot_cpu == MODEMR_BOOT_CPU_CA57 || 321499c2713SBiju Das boot_cpu == MODEMR_BOOT_CPU_CA53) { 322499c2713SBiju Das #if RCAR_LSI == RCAR_AUTO 323499c2713SBiju Das 324499c2713SBiju Das switch (product) { 325499c2713SBiju Das case PRR_PRODUCT_H3: 326499c2713SBiju Das bl2_realtime_cpg_init_h3(); 327499c2713SBiju Das break; 328499c2713SBiju Das case PRR_PRODUCT_M3: 329499c2713SBiju Das bl2_realtime_cpg_init_m3(); 330499c2713SBiju Das break; 331499c2713SBiju Das case PRR_PRODUCT_M3N: 332499c2713SBiju Das bl2_realtime_cpg_init_m3n(); 333499c2713SBiju Das break; 334499c2713SBiju Das case PRR_PRODUCT_V3M: 335499c2713SBiju Das bl2_realtime_cpg_init_v3m(); 336499c2713SBiju Das break; 337499c2713SBiju Das case PRR_PRODUCT_E3: 338499c2713SBiju Das bl2_realtime_cpg_init_e3(); 339499c2713SBiju Das break; 340499c2713SBiju Das case PRR_PRODUCT_D3: 34171f2239fSToshiyuki Ogasahara /* no need */ 342499c2713SBiju Das break; 343499c2713SBiju Das default: 344499c2713SBiju Das panic(); 345499c2713SBiju Das break; 346499c2713SBiju Das } 347ec3e2f67SLad Prabhakar #elif (RCAR_LSI == RCAR_H3) || (RCAR_LSI == RCAR_H3N) || (RCAR_LSI == RZ_G2H) 348499c2713SBiju Das bl2_realtime_cpg_init_h3(); 349db10bad9SBiju Das #elif (RCAR_LSI == RCAR_M3) || (RCAR_LSI == RZ_G2M) 350499c2713SBiju Das bl2_realtime_cpg_init_m3(); 351a4d86f67SLad Prabhakar #elif RCAR_LSI == RCAR_M3N || (RCAR_LSI == RZ_G2N) 352499c2713SBiju Das bl2_realtime_cpg_init_m3n(); 353499c2713SBiju Das #elif RCAR_LSI == RCAR_V3M 354499c2713SBiju Das bl2_realtime_cpg_init_v3m(); 355bcf43f04SLad Prabhakar #elif RCAR_LSI == RCAR_E3 || RCAR_LSI == RZ_G2E 356499c2713SBiju Das bl2_realtime_cpg_init_e3(); 357499c2713SBiju Das #elif RCAR_LSI == RCAR_D3 35871f2239fSToshiyuki Ogasahara /* no need */ 359499c2713SBiju Das #else 360499c2713SBiju Das #error "Don't have CPG initialize routine(unknown)." 361499c2713SBiju Das #endif 362499c2713SBiju Das } 363499c2713SBiju Das } 364499c2713SBiju Das 365499c2713SBiju Das void bl2_system_cpg_init(void) 366499c2713SBiju Das { 367499c2713SBiju Das #if RCAR_LSI == RCAR_AUTO 368499c2713SBiju Das uint32_t product = mmio_read_32(RCAR_PRR) & PRR_PRODUCT_MASK; 369499c2713SBiju Das 370499c2713SBiju Das switch (product) { 371499c2713SBiju Das case PRR_PRODUCT_H3: 372499c2713SBiju Das bl2_system_cpg_init_h3(); 373499c2713SBiju Das break; 374499c2713SBiju Das case PRR_PRODUCT_M3: 375499c2713SBiju Das bl2_system_cpg_init_m3(); 376499c2713SBiju Das break; 377499c2713SBiju Das case PRR_PRODUCT_M3N: 378499c2713SBiju Das bl2_system_cpg_init_m3n(); 379499c2713SBiju Das break; 380499c2713SBiju Das case PRR_PRODUCT_V3M: 381499c2713SBiju Das bl2_system_cpg_init_v3m(); 382499c2713SBiju Das break; 383499c2713SBiju Das case PRR_PRODUCT_E3: 384499c2713SBiju Das bl2_system_cpg_init_e3(); 385499c2713SBiju Das break; 386499c2713SBiju Das case PRR_PRODUCT_D3: 387499c2713SBiju Das bl2_system_cpg_init_d3(); 388499c2713SBiju Das break; 389499c2713SBiju Das default: 390499c2713SBiju Das panic(); 391499c2713SBiju Das break; 392499c2713SBiju Das } 393ec3e2f67SLad Prabhakar #elif (RCAR_LSI == RCAR_H3) || (RCAR_LSI == RCAR_H3N) || (RCAR_LSI == RZ_G2H) 394499c2713SBiju Das bl2_system_cpg_init_h3(); 395db10bad9SBiju Das #elif (RCAR_LSI == RCAR_M3) || (RCAR_LSI == RZ_G2M) 396499c2713SBiju Das bl2_system_cpg_init_m3(); 397a4d86f67SLad Prabhakar #elif RCAR_LSI == RCAR_M3N || (RCAR_LSI == RZ_G2N) 398499c2713SBiju Das bl2_system_cpg_init_m3n(); 399499c2713SBiju Das #elif RCAR_LSI == RCAR_V3M 400499c2713SBiju Das bl2_system_cpg_init_v3m(); 401bcf43f04SLad Prabhakar #elif RCAR_LSI == RCAR_E3 || RCAR_LSI == RZ_G2E 402499c2713SBiju Das bl2_system_cpg_init_e3(); 403499c2713SBiju Das #elif RCAR_LSI == RCAR_D3 404499c2713SBiju Das bl2_system_cpg_init_d3(); 405499c2713SBiju Das #else 406499c2713SBiju Das #error "Don't have CPG initialize routine(unknown)." 407499c2713SBiju Das #endif 408499c2713SBiju Das } 409