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 37*bcf43f04SLad 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_realtime_cpg_init_d3(void); 44499c2713SBiju Das static void bl2_system_cpg_init_d3(void); 45499c2713SBiju Das #endif 46499c2713SBiju Das 47499c2713SBiju Das typedef struct { 48499c2713SBiju Das uintptr_t adr; 49499c2713SBiju Das uint32_t val; 50499c2713SBiju Das } reg_setting_t; 51499c2713SBiju Das 52499c2713SBiju Das static void bl2_secure_cpg_init(void) 53499c2713SBiju Das { 54499c2713SBiju Das uint32_t stop_cr2, reset_cr2; 55499c2713SBiju Das uint32_t stop_cr4, reset_cr4; 56499c2713SBiju Das uint32_t stop_cr5, reset_cr5; 57499c2713SBiju Das 58499c2713SBiju Das #if (RCAR_LSI == RCAR_D3) 59499c2713SBiju Das reset_cr2 = 0x00000000U; 60499c2713SBiju Das stop_cr2 = 0xFFFFFFFFU; 61*bcf43f04SLad Prabhakar #elif (RCAR_LSI == RCAR_E3) || (RCAR_LSI == RZ_G2E) 62499c2713SBiju Das reset_cr2 = 0x10000000U; 63499c2713SBiju Das stop_cr2 = 0xEFFFFFFFU; 64499c2713SBiju Das #else 65499c2713SBiju Das reset_cr2 = 0x14000000U; 66499c2713SBiju Das stop_cr2 = 0xEBFFFFFFU; 67499c2713SBiju Das #endif 68499c2713SBiju Das 69499c2713SBiju Das #if (RCAR_LSI == RCAR_D3) 70499c2713SBiju Das reset_cr4 = 0x00000000U; 71499c2713SBiju Das stop_cr4 = 0xFFFFFFFFU; 72499c2713SBiju Das reset_cr5 = 0x00000000U; 73499c2713SBiju Das stop_cr5 = 0xFFFFFFFFU; 74499c2713SBiju Das #else 75499c2713SBiju Das reset_cr4 = 0x80000003U; 76499c2713SBiju Das stop_cr4 = 0x7FFFFFFFU; 77499c2713SBiju Das reset_cr5 = 0x40000000U; 78499c2713SBiju Das stop_cr5 = 0xBFFFFFFFU; 79499c2713SBiju Das #endif 80499c2713SBiju Das 81499c2713SBiju Das /* Secure Module Stop Control Registers */ 82499c2713SBiju Das cpg_write(SCMSTPCR0, 0xFFFFFFFFU); 83499c2713SBiju Das cpg_write(SCMSTPCR1, 0xFFFFFFFFU); 84499c2713SBiju Das cpg_write(SCMSTPCR2, stop_cr2); 85499c2713SBiju Das cpg_write(SCMSTPCR3, 0xFFFFFFFFU); 86499c2713SBiju Das cpg_write(SCMSTPCR4, stop_cr4); 87499c2713SBiju Das cpg_write(SCMSTPCR5, stop_cr5); 88499c2713SBiju Das cpg_write(SCMSTPCR6, 0xFFFFFFFFU); 89499c2713SBiju Das cpg_write(SCMSTPCR7, 0xFFFFFFFFU); 90499c2713SBiju Das cpg_write(SCMSTPCR8, 0xFFFFFFFFU); 91499c2713SBiju Das cpg_write(SCMSTPCR9, 0xFFFDFFFFU); 92499c2713SBiju Das cpg_write(SCMSTPCR10, 0xFFFFFFFFU); 93499c2713SBiju Das cpg_write(SCMSTPCR11, 0xFFFFFFFFU); 94499c2713SBiju Das 95499c2713SBiju Das /* Secure Software Reset Access Enable Control Registers */ 96499c2713SBiju Das cpg_write(SCSRSTECR0, 0x00000000U); 97499c2713SBiju Das cpg_write(SCSRSTECR1, 0x00000000U); 98499c2713SBiju Das cpg_write(SCSRSTECR2, reset_cr2); 99499c2713SBiju Das cpg_write(SCSRSTECR3, 0x00000000U); 100499c2713SBiju Das cpg_write(SCSRSTECR4, reset_cr4); 101499c2713SBiju Das cpg_write(SCSRSTECR5, reset_cr5); 102499c2713SBiju Das cpg_write(SCSRSTECR6, 0x00000000U); 103499c2713SBiju Das cpg_write(SCSRSTECR7, 0x00000000U); 104499c2713SBiju Das cpg_write(SCSRSTECR8, 0x00000000U); 105499c2713SBiju Das cpg_write(SCSRSTECR9, 0x00020000U); 106499c2713SBiju Das cpg_write(SCSRSTECR10, 0x00000000U); 107499c2713SBiju Das cpg_write(SCSRSTECR11, 0x00000000U); 108499c2713SBiju Das } 109499c2713SBiju Das 110ec3e2f67SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_H3) || \ 111ec3e2f67SLad Prabhakar (RCAR_LSI == RCAR_H3N) || (RCAR_LSI == RZ_G2H) 112499c2713SBiju Das static void bl2_realtime_cpg_init_h3(void) 113499c2713SBiju Das { 114499c2713SBiju Das uint32_t cut = mmio_read_32(RCAR_PRR) & PRR_CUT_MASK; 115499c2713SBiju Das uint32_t cr0, cr8; 116499c2713SBiju Das 117499c2713SBiju Das cr0 = (cut == PRR_PRODUCT_10 || cut == PRR_PRODUCT_11) ? 118499c2713SBiju Das 0x00200000U : 0x00210000U; 119499c2713SBiju Das cr8 = (cut == PRR_PRODUCT_10 || cut == PRR_PRODUCT_11) ? 120499c2713SBiju Das 0x01F1FFF4U : 0x01F1FFF7U; 121499c2713SBiju Das 122499c2713SBiju Das cpg_write(RMSTPCR0, cr0); 123499c2713SBiju Das cpg_write(RMSTPCR1, 0xFFFFFFFFU); 124499c2713SBiju Das cpg_write(RMSTPCR2, 0x040E0FDCU); 125499c2713SBiju Das cpg_write(RMSTPCR3, 0xFFFFFFDFU); 126499c2713SBiju Das cpg_write(RMSTPCR4, 0x80000004U); 127499c2713SBiju Das cpg_write(RMSTPCR5, 0xC3FFFFFFU); 128499c2713SBiju Das cpg_write(RMSTPCR6, 0xFFFFFFFFU); 129499c2713SBiju Das cpg_write(RMSTPCR7, 0xFFFFFFFFU); 130499c2713SBiju Das cpg_write(RMSTPCR8, cr8); 131499c2713SBiju Das cpg_write(RMSTPCR9, 0xFFFFFFFEU); 132499c2713SBiju Das cpg_write(RMSTPCR10, 0xFFFEFFE0U); 133499c2713SBiju Das cpg_write(RMSTPCR11, 0x000000B7U); 134499c2713SBiju Das } 135499c2713SBiju Das 136499c2713SBiju Das static void bl2_system_cpg_init_h3(void) 137499c2713SBiju Das { 138499c2713SBiju Das /** System Module Stop Control Registers */ 139499c2713SBiju Das cpg_write(SMSTPCR0, 0x00210000U); 140499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 141499c2713SBiju Das cpg_write(SMSTPCR2, 0x040E2FDCU); 142499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 143499c2713SBiju Das cpg_write(SMSTPCR4, 0x80000004U); 144499c2713SBiju Das cpg_write(SMSTPCR5, 0xC3FFFFFFU); 145499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 146499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 147499c2713SBiju Das cpg_write(SMSTPCR8, 0x01F1FFF5U); 148499c2713SBiju Das cpg_write(SMSTPCR9, 0xFFFFFFFFU); 149499c2713SBiju Das cpg_write(SMSTPCR10, 0xFFFEFFE0U); 150499c2713SBiju Das cpg_write(SMSTPCR11, 0x000000B7U); 151499c2713SBiju Das } 152499c2713SBiju Das #endif 153499c2713SBiju Das 154db10bad9SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3) || (RCAR_LSI == RZ_G2M) 155499c2713SBiju Das static void bl2_realtime_cpg_init_m3(void) 156499c2713SBiju Das { 157499c2713SBiju Das /* Realtime Module Stop Control Registers */ 158499c2713SBiju Das cpg_write(RMSTPCR0, 0x00200000U); 159499c2713SBiju Das cpg_write(RMSTPCR1, 0xFFFFFFFFU); 160499c2713SBiju Das cpg_write(RMSTPCR2, 0x040E0FDCU); 161499c2713SBiju Das cpg_write(RMSTPCR3, 0xFFFFFFDFU); 162499c2713SBiju Das cpg_write(RMSTPCR4, 0x80000004U); 163499c2713SBiju Das cpg_write(RMSTPCR5, 0xC3FFFFFFU); 164499c2713SBiju Das cpg_write(RMSTPCR6, 0xFFFFFFFFU); 165499c2713SBiju Das cpg_write(RMSTPCR7, 0xFFFFFFFFU); 166499c2713SBiju Das cpg_write(RMSTPCR8, 0x01F1FFF7U); 167499c2713SBiju Das cpg_write(RMSTPCR9, 0xFFFFFFFEU); 168499c2713SBiju Das cpg_write(RMSTPCR10, 0xFFFEFFE0U); 169499c2713SBiju Das cpg_write(RMSTPCR11, 0x000000B7U); 170499c2713SBiju Das } 171499c2713SBiju Das 172499c2713SBiju Das static void bl2_system_cpg_init_m3(void) 173499c2713SBiju Das { 174499c2713SBiju Das /* System Module Stop Control Registers */ 175499c2713SBiju Das cpg_write(SMSTPCR0, 0x00200000U); 176499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 177499c2713SBiju Das cpg_write(SMSTPCR2, 0x040E2FDCU); 178499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 179499c2713SBiju Das cpg_write(SMSTPCR4, 0x80000004U); 180499c2713SBiju Das cpg_write(SMSTPCR5, 0xC3FFFFFFU); 181499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 182499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 183499c2713SBiju Das cpg_write(SMSTPCR8, 0x01F1FFF7U); 184499c2713SBiju Das cpg_write(SMSTPCR9, 0xFFFFFFFFU); 185499c2713SBiju Das cpg_write(SMSTPCR10, 0xFFFEFFE0U); 186499c2713SBiju Das cpg_write(SMSTPCR11, 0x000000B7U); 187499c2713SBiju Das } 188499c2713SBiju Das #endif 189499c2713SBiju Das 190a4d86f67SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3N) || (RCAR_LSI == RZ_G2N) 191499c2713SBiju Das static void bl2_realtime_cpg_init_m3n(void) 192499c2713SBiju Das { 193499c2713SBiju Das /* Realtime Module Stop Control Registers */ 194499c2713SBiju Das cpg_write(RMSTPCR0, 0x00210000U); 195499c2713SBiju Das cpg_write(RMSTPCR1, 0xFFFFFFFFU); 196499c2713SBiju Das cpg_write(RMSTPCR2, 0x040E0FDCU); 197499c2713SBiju Das cpg_write(RMSTPCR3, 0xFFFFFFDFU); 198499c2713SBiju Das cpg_write(RMSTPCR4, 0x80000004U); 199499c2713SBiju Das cpg_write(RMSTPCR5, 0xC3FFFFFFU); 200499c2713SBiju Das cpg_write(RMSTPCR6, 0xFFFFFFFFU); 201499c2713SBiju Das cpg_write(RMSTPCR7, 0xFFFFFFFFU); 202499c2713SBiju Das cpg_write(RMSTPCR8, 0x00F1FFF7U); 203499c2713SBiju Das cpg_write(RMSTPCR9, 0xFFFFFFFFU); 204499c2713SBiju Das cpg_write(RMSTPCR10, 0xFFFFFFE0U); 205499c2713SBiju Das cpg_write(RMSTPCR11, 0x000000B7U); 206499c2713SBiju Das } 207499c2713SBiju Das 208499c2713SBiju Das static void bl2_system_cpg_init_m3n(void) 209499c2713SBiju Das { 210499c2713SBiju Das /* System Module Stop Control Registers */ 211499c2713SBiju Das cpg_write(SMSTPCR0, 0x00210000U); 212499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 213499c2713SBiju Das cpg_write(SMSTPCR2, 0x040E2FDCU); 214499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 215499c2713SBiju Das cpg_write(SMSTPCR4, 0x80000004U); 216499c2713SBiju Das cpg_write(SMSTPCR5, 0xC3FFFFFFU); 217499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 218499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 219499c2713SBiju Das cpg_write(SMSTPCR8, 0x00F1FFF7U); 220499c2713SBiju Das cpg_write(SMSTPCR9, 0xFFFFFFFFU); 221499c2713SBiju Das cpg_write(SMSTPCR10, 0xFFFFFFE0U); 222499c2713SBiju Das cpg_write(SMSTPCR11, 0x000000B7U); 223499c2713SBiju Das } 224499c2713SBiju Das #endif 225499c2713SBiju Das 226499c2713SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3M) 227499c2713SBiju Das static void bl2_realtime_cpg_init_v3m(void) 228499c2713SBiju Das { 229499c2713SBiju Das /* Realtime Module Stop Control Registers */ 230499c2713SBiju Das cpg_write(RMSTPCR0, 0x00230000U); 231499c2713SBiju Das cpg_write(RMSTPCR1, 0xFFFFFFFFU); 232499c2713SBiju Das cpg_write(RMSTPCR2, 0x14062FD8U); 233499c2713SBiju Das cpg_write(RMSTPCR3, 0xFFFFFFDFU); 234499c2713SBiju Das cpg_write(RMSTPCR4, 0x80000184U); 235499c2713SBiju Das cpg_write(RMSTPCR5, 0x83FFFFFFU); 236499c2713SBiju Das cpg_write(RMSTPCR6, 0xFFFFFFFFU); 237499c2713SBiju Das cpg_write(RMSTPCR7, 0xFFFFFFFFU); 238499c2713SBiju Das cpg_write(RMSTPCR8, 0x7FF3FFF4U); 239499c2713SBiju Das cpg_write(RMSTPCR9, 0xFFFFFFFEU); 240499c2713SBiju Das } 241499c2713SBiju Das 242499c2713SBiju Das static void bl2_system_cpg_init_v3m(void) 243499c2713SBiju Das { 244499c2713SBiju Das /* System Module Stop Control Registers */ 245499c2713SBiju Das cpg_write(SMSTPCR0, 0x00210000U); 246499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 247499c2713SBiju Das cpg_write(SMSTPCR2, 0x340E2FDCU); 248499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 249499c2713SBiju Das cpg_write(SMSTPCR4, 0x80000004U); 250499c2713SBiju Das cpg_write(SMSTPCR5, 0xC3FFFFFFU); 251499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 252499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 253499c2713SBiju Das cpg_write(SMSTPCR8, 0x01F1FFF5U); 254499c2713SBiju Das cpg_write(SMSTPCR9, 0xFFFFFFFEU); 255499c2713SBiju Das } 256499c2713SBiju Das #endif 257499c2713SBiju Das 258*bcf43f04SLad Prabhakar #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_E3) || (RCAR_LSI == RZ_G2E) 259499c2713SBiju Das static void bl2_realtime_cpg_init_e3(void) 260499c2713SBiju Das { 261499c2713SBiju Das /* Realtime Module Stop Control Registers */ 262499c2713SBiju Das cpg_write(RMSTPCR0, 0x00210000U); 263499c2713SBiju Das cpg_write(RMSTPCR1, 0xFFFFFFFFU); 264499c2713SBiju Das cpg_write(RMSTPCR2, 0x000E0FDCU); 265499c2713SBiju Das cpg_write(RMSTPCR3, 0xFFFFFFDFU); 266499c2713SBiju Das cpg_write(RMSTPCR4, 0x80000004U); 267499c2713SBiju Das cpg_write(RMSTPCR5, 0xC3FFFFFFU); 268499c2713SBiju Das cpg_write(RMSTPCR6, 0xFFFFFFFFU); 269499c2713SBiju Das cpg_write(RMSTPCR7, 0xFFFFFFFFU); 270499c2713SBiju Das cpg_write(RMSTPCR8, 0x00F1FFF7U); 271499c2713SBiju Das cpg_write(RMSTPCR9, 0xFFFFFFDFU); 272499c2713SBiju Das cpg_write(RMSTPCR10, 0xFFFFFFE8U); 273499c2713SBiju Das cpg_write(RMSTPCR11, 0x000000B7U); 274499c2713SBiju Das } 275499c2713SBiju Das 276499c2713SBiju Das static void bl2_system_cpg_init_e3(void) 277499c2713SBiju Das { 278499c2713SBiju Das /* System Module Stop Control Registers */ 279499c2713SBiju Das cpg_write(SMSTPCR0, 0x00210000U); 280499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 281499c2713SBiju Das cpg_write(SMSTPCR2, 0x000E2FDCU); 282499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 283499c2713SBiju Das cpg_write(SMSTPCR4, 0x80000004U); 284499c2713SBiju Das cpg_write(SMSTPCR5, 0xC3FFFFFFU); 285499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 286499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 287499c2713SBiju Das cpg_write(SMSTPCR8, 0x00F1FFF7U); 288499c2713SBiju Das cpg_write(SMSTPCR9, 0xFFFFFFDFU); 289499c2713SBiju Das cpg_write(SMSTPCR10, 0xFFFFFFE8U); 290499c2713SBiju Das cpg_write(SMSTPCR11, 0x000000B7U); 291499c2713SBiju Das } 292499c2713SBiju Das #endif 293499c2713SBiju Das 294499c2713SBiju Das #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_D3) 295499c2713SBiju Das static void bl2_realtime_cpg_init_d3(void) 296499c2713SBiju Das { 297499c2713SBiju Das /* Realtime Module Stop Control Registers */ 298499c2713SBiju Das cpg_write(RMSTPCR0, 0x00010000U); 299499c2713SBiju Das cpg_write(RMSTPCR1, 0xFFFFFFFFU); 300499c2713SBiju Das cpg_write(RMSTPCR2, 0x00060FDCU); 301499c2713SBiju Das cpg_write(RMSTPCR3, 0xFFFFFFDFU); 302499c2713SBiju Das cpg_write(RMSTPCR4, 0x80000184U); 303499c2713SBiju Das cpg_write(RMSTPCR5, 0x83FFFFFFU); 304499c2713SBiju Das cpg_write(RMSTPCR6, 0xFFFFFFFFU); 305499c2713SBiju Das cpg_write(RMSTPCR7, 0xFFFFFFFFU); 306499c2713SBiju Das cpg_write(RMSTPCR8, 0x00F1FFF7U); 307499c2713SBiju Das cpg_write(RMSTPCR9, 0xF3F5E016U); 308499c2713SBiju Das cpg_write(RMSTPCR10, 0xFFFEFFE0U); 309499c2713SBiju Das cpg_write(RMSTPCR11, 0x000000B7U); 310499c2713SBiju Das } 311499c2713SBiju Das 312499c2713SBiju Das static void bl2_system_cpg_init_d3(void) 313499c2713SBiju Das { 314499c2713SBiju Das /* System Module Stop Control Registers */ 315499c2713SBiju Das cpg_write(SMSTPCR0, 0x00010000U); 316499c2713SBiju Das cpg_write(SMSTPCR1, 0xFFFFFFFFU); 317499c2713SBiju Das cpg_write(SMSTPCR2, 0x00060FDCU); 318499c2713SBiju Das cpg_write(SMSTPCR3, 0xFFFFFBDFU); 319499c2713SBiju Das cpg_write(SMSTPCR4, 0x00000084U); 320499c2713SBiju Das cpg_write(SMSTPCR5, 0x83FFFFFFU); 321499c2713SBiju Das cpg_write(SMSTPCR6, 0xFFFFFFFFU); 322499c2713SBiju Das cpg_write(SMSTPCR7, 0xFFFFFFFFU); 323499c2713SBiju Das cpg_write(SMSTPCR8, 0x00F1FFF7U); 324499c2713SBiju Das cpg_write(SMSTPCR9, 0xF3F5E016U); 325499c2713SBiju Das cpg_write(SMSTPCR10, 0xFFFEFFE0U); 326499c2713SBiju Das cpg_write(SMSTPCR11, 0x000000B7U); 327499c2713SBiju Das } 328499c2713SBiju Das #endif 329499c2713SBiju Das 330499c2713SBiju Das void bl2_cpg_init(void) 331499c2713SBiju Das { 332499c2713SBiju Das uint32_t boot_cpu = mmio_read_32(RCAR_MODEMR) & MODEMR_BOOT_CPU_MASK; 333499c2713SBiju Das #if RCAR_LSI == RCAR_AUTO 334499c2713SBiju Das uint32_t product = mmio_read_32(RCAR_PRR) & PRR_PRODUCT_MASK; 335499c2713SBiju Das #endif 336499c2713SBiju Das bl2_secure_cpg_init(); 337499c2713SBiju Das 338499c2713SBiju Das if (boot_cpu == MODEMR_BOOT_CPU_CA57 || 339499c2713SBiju Das boot_cpu == MODEMR_BOOT_CPU_CA53) { 340499c2713SBiju Das #if RCAR_LSI == RCAR_AUTO 341499c2713SBiju Das 342499c2713SBiju Das switch (product) { 343499c2713SBiju Das case PRR_PRODUCT_H3: 344499c2713SBiju Das bl2_realtime_cpg_init_h3(); 345499c2713SBiju Das break; 346499c2713SBiju Das case PRR_PRODUCT_M3: 347499c2713SBiju Das bl2_realtime_cpg_init_m3(); 348499c2713SBiju Das break; 349499c2713SBiju Das case PRR_PRODUCT_M3N: 350499c2713SBiju Das bl2_realtime_cpg_init_m3n(); 351499c2713SBiju Das break; 352499c2713SBiju Das case PRR_PRODUCT_V3M: 353499c2713SBiju Das bl2_realtime_cpg_init_v3m(); 354499c2713SBiju Das break; 355499c2713SBiju Das case PRR_PRODUCT_E3: 356499c2713SBiju Das bl2_realtime_cpg_init_e3(); 357499c2713SBiju Das break; 358499c2713SBiju Das case PRR_PRODUCT_D3: 359499c2713SBiju Das bl2_realtime_cpg_init_d3(); 360499c2713SBiju Das break; 361499c2713SBiju Das default: 362499c2713SBiju Das panic(); 363499c2713SBiju Das break; 364499c2713SBiju Das } 365ec3e2f67SLad Prabhakar #elif (RCAR_LSI == RCAR_H3) || (RCAR_LSI == RCAR_H3N) || (RCAR_LSI == RZ_G2H) 366499c2713SBiju Das bl2_realtime_cpg_init_h3(); 367db10bad9SBiju Das #elif (RCAR_LSI == RCAR_M3) || (RCAR_LSI == RZ_G2M) 368499c2713SBiju Das bl2_realtime_cpg_init_m3(); 369a4d86f67SLad Prabhakar #elif RCAR_LSI == RCAR_M3N || (RCAR_LSI == RZ_G2N) 370499c2713SBiju Das bl2_realtime_cpg_init_m3n(); 371499c2713SBiju Das #elif RCAR_LSI == RCAR_V3M 372499c2713SBiju Das bl2_realtime_cpg_init_v3m(); 373*bcf43f04SLad Prabhakar #elif RCAR_LSI == RCAR_E3 || RCAR_LSI == RZ_G2E 374499c2713SBiju Das bl2_realtime_cpg_init_e3(); 375499c2713SBiju Das #elif RCAR_LSI == RCAR_D3 376499c2713SBiju Das bl2_realtime_cpg_init_d3(); 377499c2713SBiju Das #else 378499c2713SBiju Das #error "Don't have CPG initialize routine(unknown)." 379499c2713SBiju Das #endif 380499c2713SBiju Das } 381499c2713SBiju Das } 382499c2713SBiju Das 383499c2713SBiju Das void bl2_system_cpg_init(void) 384499c2713SBiju Das { 385499c2713SBiju Das #if RCAR_LSI == RCAR_AUTO 386499c2713SBiju Das uint32_t product = mmio_read_32(RCAR_PRR) & PRR_PRODUCT_MASK; 387499c2713SBiju Das 388499c2713SBiju Das switch (product) { 389499c2713SBiju Das case PRR_PRODUCT_H3: 390499c2713SBiju Das bl2_system_cpg_init_h3(); 391499c2713SBiju Das break; 392499c2713SBiju Das case PRR_PRODUCT_M3: 393499c2713SBiju Das bl2_system_cpg_init_m3(); 394499c2713SBiju Das break; 395499c2713SBiju Das case PRR_PRODUCT_M3N: 396499c2713SBiju Das bl2_system_cpg_init_m3n(); 397499c2713SBiju Das break; 398499c2713SBiju Das case PRR_PRODUCT_V3M: 399499c2713SBiju Das bl2_system_cpg_init_v3m(); 400499c2713SBiju Das break; 401499c2713SBiju Das case PRR_PRODUCT_E3: 402499c2713SBiju Das bl2_system_cpg_init_e3(); 403499c2713SBiju Das break; 404499c2713SBiju Das case PRR_PRODUCT_D3: 405499c2713SBiju Das bl2_system_cpg_init_d3(); 406499c2713SBiju Das break; 407499c2713SBiju Das default: 408499c2713SBiju Das panic(); 409499c2713SBiju Das break; 410499c2713SBiju Das } 411ec3e2f67SLad Prabhakar #elif (RCAR_LSI == RCAR_H3) || (RCAR_LSI == RCAR_H3N) || (RCAR_LSI == RZ_G2H) 412499c2713SBiju Das bl2_system_cpg_init_h3(); 413db10bad9SBiju Das #elif (RCAR_LSI == RCAR_M3) || (RCAR_LSI == RZ_G2M) 414499c2713SBiju Das bl2_system_cpg_init_m3(); 415a4d86f67SLad Prabhakar #elif RCAR_LSI == RCAR_M3N || (RCAR_LSI == RZ_G2N) 416499c2713SBiju Das bl2_system_cpg_init_m3n(); 417499c2713SBiju Das #elif RCAR_LSI == RCAR_V3M 418499c2713SBiju Das bl2_system_cpg_init_v3m(); 419*bcf43f04SLad Prabhakar #elif RCAR_LSI == RCAR_E3 || RCAR_LSI == RZ_G2E 420499c2713SBiju Das bl2_system_cpg_init_e3(); 421499c2713SBiju Das #elif RCAR_LSI == RCAR_D3 422499c2713SBiju Das bl2_system_cpg_init_d3(); 423499c2713SBiju Das #else 424499c2713SBiju Das #error "Don't have CPG initialize routine(unknown)." 425499c2713SBiju Das #endif 426499c2713SBiju Das } 427