1*c67703ebSMarek Vasut /* 2*c67703ebSMarek Vasut * Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved. 3*c67703ebSMarek Vasut * 4*c67703ebSMarek Vasut * SPDX-License-Identifier: BSD-3-Clause 5*c67703ebSMarek Vasut */ 6*c67703ebSMarek Vasut 7*c67703ebSMarek Vasut #include <stdint.h> 8*c67703ebSMarek Vasut 9*c67703ebSMarek Vasut #include <common/debug.h> 10*c67703ebSMarek Vasut #include <lib/mmio.h> 11*c67703ebSMarek Vasut 12*c67703ebSMarek Vasut #include "qos_init.h" 13*c67703ebSMarek Vasut #include "qos_common.h" 14*c67703ebSMarek Vasut #include "qos_reg.h" 15*c67703ebSMarek Vasut #if RCAR_LSI == RCAR_AUTO 16*c67703ebSMarek Vasut #include "H3/qos_init_h3_v10.h" 17*c67703ebSMarek Vasut #include "H3/qos_init_h3_v11.h" 18*c67703ebSMarek Vasut #include "H3/qos_init_h3_v20.h" 19*c67703ebSMarek Vasut #include "H3/qos_init_h3_v30.h" 20*c67703ebSMarek Vasut #include "M3/qos_init_m3_v10.h" 21*c67703ebSMarek Vasut #include "M3/qos_init_m3_v11.h" 22*c67703ebSMarek Vasut #include "M3/qos_init_m3_v30.h" 23*c67703ebSMarek Vasut #include "M3N/qos_init_m3n_v10.h" 24*c67703ebSMarek Vasut #include "V3M/qos_init_v3m.h" 25*c67703ebSMarek Vasut #endif 26*c67703ebSMarek Vasut #if RCAR_LSI == RCAR_H3 /* H3 */ 27*c67703ebSMarek Vasut #include "H3/qos_init_h3_v10.h" 28*c67703ebSMarek Vasut #include "H3/qos_init_h3_v11.h" 29*c67703ebSMarek Vasut #include "H3/qos_init_h3_v20.h" 30*c67703ebSMarek Vasut #include "H3/qos_init_h3_v30.h" 31*c67703ebSMarek Vasut #endif 32*c67703ebSMarek Vasut #if RCAR_LSI == RCAR_H3N /* H3 */ 33*c67703ebSMarek Vasut #include "H3/qos_init_h3n_v30.h" 34*c67703ebSMarek Vasut #endif 35*c67703ebSMarek Vasut #if RCAR_LSI == RCAR_M3 /* M3 */ 36*c67703ebSMarek Vasut #include "M3/qos_init_m3_v10.h" 37*c67703ebSMarek Vasut #include "M3/qos_init_m3_v11.h" 38*c67703ebSMarek Vasut #include "M3/qos_init_m3_v30.h" 39*c67703ebSMarek Vasut #endif 40*c67703ebSMarek Vasut #if RCAR_LSI == RCAR_M3N /* M3N */ 41*c67703ebSMarek Vasut #include "M3N/qos_init_m3n_v10.h" 42*c67703ebSMarek Vasut #endif 43*c67703ebSMarek Vasut #if RCAR_LSI == RCAR_V3M /* V3M */ 44*c67703ebSMarek Vasut #include "V3M/qos_init_v3m.h" 45*c67703ebSMarek Vasut #endif 46*c67703ebSMarek Vasut #if RCAR_LSI == RCAR_E3 /* E3 */ 47*c67703ebSMarek Vasut #include "E3/qos_init_e3_v10.h" 48*c67703ebSMarek Vasut #endif 49*c67703ebSMarek Vasut #if RCAR_LSI == RCAR_D3 /* D3 */ 50*c67703ebSMarek Vasut #include "D3/qos_init_d3.h" 51*c67703ebSMarek Vasut #endif 52*c67703ebSMarek Vasut 53*c67703ebSMarek Vasut /* Product Register */ 54*c67703ebSMarek Vasut #define PRR 0xFFF00044U 55*c67703ebSMarek Vasut #define PRR_PRODUCT_MASK 0x00007F00U 56*c67703ebSMarek Vasut #define PRR_CUT_MASK 0x000000FFU 57*c67703ebSMarek Vasut #define PRR_PRODUCT_H3 0x00004F00U /* R-Car H3 */ 58*c67703ebSMarek Vasut #define PRR_PRODUCT_M3 0x00005200U /* R-Car M3 */ 59*c67703ebSMarek Vasut #define PRR_PRODUCT_V3M 0x00005400U /* R-Car V3M */ 60*c67703ebSMarek Vasut #define PRR_PRODUCT_M3N 0x00005500U /* R-Car M3N */ 61*c67703ebSMarek Vasut #define PRR_PRODUCT_E3 0x00005700U /* R-Car E3 */ 62*c67703ebSMarek Vasut #define PRR_PRODUCT_D3 0x00005800U /* R-Car D3 */ 63*c67703ebSMarek Vasut #define PRR_PRODUCT_10 0x00U 64*c67703ebSMarek Vasut #define PRR_PRODUCT_11 0x01U 65*c67703ebSMarek Vasut #define PRR_PRODUCT_20 0x10U 66*c67703ebSMarek Vasut #define PRR_PRODUCT_21 0x11U 67*c67703ebSMarek Vasut #define PRR_PRODUCT_30 0x20U 68*c67703ebSMarek Vasut 69*c67703ebSMarek Vasut #if (RCAR_LSI != RCAR_E3) && (RCAR_LSI != RCAR_D3) && (RCAR_LSI != RCAR_V3M) 70*c67703ebSMarek Vasut 71*c67703ebSMarek Vasut #define DRAM_CH_CNT 0x04 72*c67703ebSMarek Vasut uint32_t qos_init_ddr_ch; 73*c67703ebSMarek Vasut uint8_t qos_init_ddr_phyvalid; 74*c67703ebSMarek Vasut #endif 75*c67703ebSMarek Vasut 76*c67703ebSMarek Vasut #define PRR_PRODUCT_ERR(reg) \ 77*c67703ebSMarek Vasut do { \ 78*c67703ebSMarek Vasut ERROR("LSI Product ID(PRR=0x%x) QoS " \ 79*c67703ebSMarek Vasut "initialize not supported.\n", reg); \ 80*c67703ebSMarek Vasut panic(); \ 81*c67703ebSMarek Vasut } while (0) 82*c67703ebSMarek Vasut 83*c67703ebSMarek Vasut #define PRR_CUT_ERR(reg) \ 84*c67703ebSMarek Vasut do { \ 85*c67703ebSMarek Vasut ERROR("LSI Cut ID(PRR=0x%x) QoS " \ 86*c67703ebSMarek Vasut "initialize not supported.\n", reg); \ 87*c67703ebSMarek Vasut panic(); \ 88*c67703ebSMarek Vasut } while (0) 89*c67703ebSMarek Vasut 90*c67703ebSMarek Vasut void rcar_qos_init(void) 91*c67703ebSMarek Vasut { 92*c67703ebSMarek Vasut uint32_t reg; 93*c67703ebSMarek Vasut #if (RCAR_LSI != RCAR_E3) && (RCAR_LSI != RCAR_D3) && (RCAR_LSI != RCAR_V3M) 94*c67703ebSMarek Vasut uint32_t i; 95*c67703ebSMarek Vasut 96*c67703ebSMarek Vasut qos_init_ddr_ch = 0; 97*c67703ebSMarek Vasut qos_init_ddr_phyvalid = get_boardcnf_phyvalid(); 98*c67703ebSMarek Vasut for (i = 0; i < DRAM_CH_CNT; i++) { 99*c67703ebSMarek Vasut if ((qos_init_ddr_phyvalid & (1 << i))) { 100*c67703ebSMarek Vasut qos_init_ddr_ch++; 101*c67703ebSMarek Vasut } 102*c67703ebSMarek Vasut } 103*c67703ebSMarek Vasut #endif 104*c67703ebSMarek Vasut 105*c67703ebSMarek Vasut reg = mmio_read_32(PRR); 106*c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || RCAR_LSI_CUT_COMPAT 107*c67703ebSMarek Vasut switch (reg & PRR_PRODUCT_MASK) { 108*c67703ebSMarek Vasut case PRR_PRODUCT_H3: 109*c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_H3) 110*c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) { 111*c67703ebSMarek Vasut case PRR_PRODUCT_10: 112*c67703ebSMarek Vasut qos_init_h3_v10(); 113*c67703ebSMarek Vasut break; 114*c67703ebSMarek Vasut case PRR_PRODUCT_11: 115*c67703ebSMarek Vasut qos_init_h3_v11(); 116*c67703ebSMarek Vasut break; 117*c67703ebSMarek Vasut case PRR_PRODUCT_20: 118*c67703ebSMarek Vasut qos_init_h3_v20(); 119*c67703ebSMarek Vasut break; 120*c67703ebSMarek Vasut case PRR_PRODUCT_30: 121*c67703ebSMarek Vasut default: 122*c67703ebSMarek Vasut qos_init_h3_v30(); 123*c67703ebSMarek Vasut break; 124*c67703ebSMarek Vasut } 125*c67703ebSMarek Vasut #elif (RCAR_LSI == RCAR_H3N) 126*c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) { 127*c67703ebSMarek Vasut case PRR_PRODUCT_30: 128*c67703ebSMarek Vasut default: 129*c67703ebSMarek Vasut qos_init_h3n_v30(); 130*c67703ebSMarek Vasut break; 131*c67703ebSMarek Vasut } 132*c67703ebSMarek Vasut #else 133*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 134*c67703ebSMarek Vasut #endif 135*c67703ebSMarek Vasut break; 136*c67703ebSMarek Vasut case PRR_PRODUCT_M3: 137*c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3) 138*c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) { 139*c67703ebSMarek Vasut case PRR_PRODUCT_10: 140*c67703ebSMarek Vasut qos_init_m3_v10(); 141*c67703ebSMarek Vasut break; 142*c67703ebSMarek Vasut case PRR_PRODUCT_21: /* M3 Cut 13 */ 143*c67703ebSMarek Vasut qos_init_m3_v11(); 144*c67703ebSMarek Vasut break; 145*c67703ebSMarek Vasut case PRR_PRODUCT_30: /* M3 Cut 30 */ 146*c67703ebSMarek Vasut default: 147*c67703ebSMarek Vasut qos_init_m3_v30(); 148*c67703ebSMarek Vasut break; 149*c67703ebSMarek Vasut } 150*c67703ebSMarek Vasut #else 151*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 152*c67703ebSMarek Vasut #endif 153*c67703ebSMarek Vasut break; 154*c67703ebSMarek Vasut case PRR_PRODUCT_M3N: 155*c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3N) 156*c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) { 157*c67703ebSMarek Vasut case PRR_PRODUCT_10: 158*c67703ebSMarek Vasut default: 159*c67703ebSMarek Vasut qos_init_m3n_v10(); 160*c67703ebSMarek Vasut break; 161*c67703ebSMarek Vasut } 162*c67703ebSMarek Vasut #else 163*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 164*c67703ebSMarek Vasut #endif 165*c67703ebSMarek Vasut break; 166*c67703ebSMarek Vasut case PRR_PRODUCT_V3M: 167*c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3M) 168*c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) { 169*c67703ebSMarek Vasut case PRR_PRODUCT_10: 170*c67703ebSMarek Vasut case PRR_PRODUCT_20: 171*c67703ebSMarek Vasut default: 172*c67703ebSMarek Vasut qos_init_v3m(); 173*c67703ebSMarek Vasut break; 174*c67703ebSMarek Vasut } 175*c67703ebSMarek Vasut #else 176*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 177*c67703ebSMarek Vasut #endif 178*c67703ebSMarek Vasut break; 179*c67703ebSMarek Vasut case PRR_PRODUCT_E3: 180*c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_E3) 181*c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) { 182*c67703ebSMarek Vasut case PRR_PRODUCT_10: 183*c67703ebSMarek Vasut default: 184*c67703ebSMarek Vasut qos_init_e3_v10(); 185*c67703ebSMarek Vasut break; 186*c67703ebSMarek Vasut } 187*c67703ebSMarek Vasut #else 188*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 189*c67703ebSMarek Vasut #endif 190*c67703ebSMarek Vasut break; 191*c67703ebSMarek Vasut case PRR_PRODUCT_D3: 192*c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_D3) 193*c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) { 194*c67703ebSMarek Vasut case PRR_PRODUCT_10: 195*c67703ebSMarek Vasut default: 196*c67703ebSMarek Vasut qos_init_d3(); 197*c67703ebSMarek Vasut break; 198*c67703ebSMarek Vasut } 199*c67703ebSMarek Vasut #else 200*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 201*c67703ebSMarek Vasut #endif 202*c67703ebSMarek Vasut break; 203*c67703ebSMarek Vasut default: 204*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 205*c67703ebSMarek Vasut break; 206*c67703ebSMarek Vasut } 207*c67703ebSMarek Vasut #else 208*c67703ebSMarek Vasut #if RCAR_LSI == RCAR_H3 /* H3 */ 209*c67703ebSMarek Vasut #if RCAR_LSI_CUT == RCAR_CUT_10 210*c67703ebSMarek Vasut /* H3 Cut 10 */ 211*c67703ebSMarek Vasut if ((PRR_PRODUCT_H3 | PRR_PRODUCT_10) 212*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) { 213*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 214*c67703ebSMarek Vasut } 215*c67703ebSMarek Vasut qos_init_h3_v10(); 216*c67703ebSMarek Vasut #elif RCAR_LSI_CUT == RCAR_CUT_11 217*c67703ebSMarek Vasut /* H3 Cut 11 */ 218*c67703ebSMarek Vasut if ((PRR_PRODUCT_H3 | PRR_PRODUCT_11) 219*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) { 220*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 221*c67703ebSMarek Vasut } 222*c67703ebSMarek Vasut qos_init_h3_v11(); 223*c67703ebSMarek Vasut #elif RCAR_LSI_CUT == RCAR_CUT_20 224*c67703ebSMarek Vasut /* H3 Cut 20 */ 225*c67703ebSMarek Vasut if ((PRR_PRODUCT_H3 | PRR_PRODUCT_20) 226*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) { 227*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 228*c67703ebSMarek Vasut } 229*c67703ebSMarek Vasut qos_init_h3_v20(); 230*c67703ebSMarek Vasut #else 231*c67703ebSMarek Vasut /* H3 Cut 30 or later */ 232*c67703ebSMarek Vasut if ((PRR_PRODUCT_H3) 233*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) { 234*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 235*c67703ebSMarek Vasut } 236*c67703ebSMarek Vasut qos_init_h3_v30(); 237*c67703ebSMarek Vasut #endif 238*c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_H3N /* H3 */ 239*c67703ebSMarek Vasut /* H3N Cut 30 or later */ 240*c67703ebSMarek Vasut if ((PRR_PRODUCT_H3) 241*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) { 242*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 243*c67703ebSMarek Vasut } 244*c67703ebSMarek Vasut qos_init_h3n_v30(); 245*c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_M3 /* M3 */ 246*c67703ebSMarek Vasut #if RCAR_LSI_CUT == RCAR_CUT_10 247*c67703ebSMarek Vasut /* M3 Cut 10 */ 248*c67703ebSMarek Vasut if ((PRR_PRODUCT_M3 | PRR_PRODUCT_10) 249*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) { 250*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 251*c67703ebSMarek Vasut } 252*c67703ebSMarek Vasut qos_init_m3_v10(); 253*c67703ebSMarek Vasut #elif RCAR_LSI_CUT == RCAR_CUT_11 254*c67703ebSMarek Vasut /* M3 Cut 11 */ 255*c67703ebSMarek Vasut if ((PRR_PRODUCT_M3 | PRR_PRODUCT_20) 256*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) { 257*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 258*c67703ebSMarek Vasut } 259*c67703ebSMarek Vasut qos_init_m3_v11(); 260*c67703ebSMarek Vasut #elif RCAR_LSI_CUT == RCAR_CUT_13 261*c67703ebSMarek Vasut /* M3 Cut 13 */ 262*c67703ebSMarek Vasut if ((PRR_PRODUCT_M3 | PRR_PRODUCT_21) 263*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) { 264*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 265*c67703ebSMarek Vasut } 266*c67703ebSMarek Vasut qos_init_m3_v11(); 267*c67703ebSMarek Vasut #else 268*c67703ebSMarek Vasut /* M3 Cut 30 or later */ 269*c67703ebSMarek Vasut if ((PRR_PRODUCT_M3) 270*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) { 271*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 272*c67703ebSMarek Vasut } 273*c67703ebSMarek Vasut qos_init_m3_v30(); 274*c67703ebSMarek Vasut #endif 275*c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_M3N /* M3N */ 276*c67703ebSMarek Vasut /* M3N Cut 10 or later */ 277*c67703ebSMarek Vasut if ((PRR_PRODUCT_M3N) 278*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) { 279*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 280*c67703ebSMarek Vasut } 281*c67703ebSMarek Vasut qos_init_m3n_v10(); 282*c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_V3M /* V3M */ 283*c67703ebSMarek Vasut /* V3M Cut 10 or later */ 284*c67703ebSMarek Vasut if ((PRR_PRODUCT_V3M) 285*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) { 286*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 287*c67703ebSMarek Vasut } 288*c67703ebSMarek Vasut qos_init_v3m(); 289*c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_D3 /* D3 */ 290*c67703ebSMarek Vasut /* D3 Cut 10 or later */ 291*c67703ebSMarek Vasut if ((PRR_PRODUCT_D3) 292*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) { 293*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 294*c67703ebSMarek Vasut } 295*c67703ebSMarek Vasut qos_init_d3(); 296*c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_E3 /* E3 */ 297*c67703ebSMarek Vasut /* E3 Cut 10 or later */ 298*c67703ebSMarek Vasut if ((PRR_PRODUCT_E3) 299*c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) { 300*c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg); 301*c67703ebSMarek Vasut } 302*c67703ebSMarek Vasut qos_init_e3_v10(); 303*c67703ebSMarek Vasut #else 304*c67703ebSMarek Vasut #error "Don't have QoS initialize routine(Unknown chip)." 305*c67703ebSMarek Vasut #endif 306*c67703ebSMarek Vasut #endif 307*c67703ebSMarek Vasut } 308*c67703ebSMarek Vasut 309*c67703ebSMarek Vasut #if (RCAR_LSI != RCAR_E3) && (RCAR_LSI != RCAR_D3) && (RCAR_LSI != RCAR_V3M) 310*c67703ebSMarek Vasut uint32_t get_refperiod(void) 311*c67703ebSMarek Vasut { 312*c67703ebSMarek Vasut uint32_t refperiod = QOSWT_WTSET0_CYCLE; 313*c67703ebSMarek Vasut 314*c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || RCAR_LSI_CUT_COMPAT 315*c67703ebSMarek Vasut uint32_t reg; 316*c67703ebSMarek Vasut 317*c67703ebSMarek Vasut reg = mmio_read_32(PRR); 318*c67703ebSMarek Vasut switch (reg & PRR_PRODUCT_MASK) { 319*c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_H3) 320*c67703ebSMarek Vasut case PRR_PRODUCT_H3: 321*c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) { 322*c67703ebSMarek Vasut case PRR_PRODUCT_10: 323*c67703ebSMarek Vasut case PRR_PRODUCT_11: 324*c67703ebSMarek Vasut break; 325*c67703ebSMarek Vasut case PRR_PRODUCT_20: 326*c67703ebSMarek Vasut case PRR_PRODUCT_30: 327*c67703ebSMarek Vasut default: 328*c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE; 329*c67703ebSMarek Vasut break; 330*c67703ebSMarek Vasut } 331*c67703ebSMarek Vasut break; 332*c67703ebSMarek Vasut #elif (RCAR_LSI == RCAR_H3N) 333*c67703ebSMarek Vasut case PRR_PRODUCT_H3: 334*c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) { 335*c67703ebSMarek Vasut case PRR_PRODUCT_30: 336*c67703ebSMarek Vasut default: 337*c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE; 338*c67703ebSMarek Vasut break; 339*c67703ebSMarek Vasut } 340*c67703ebSMarek Vasut break; 341*c67703ebSMarek Vasut #endif 342*c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3) 343*c67703ebSMarek Vasut case PRR_PRODUCT_M3: 344*c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) { 345*c67703ebSMarek Vasut case PRR_PRODUCT_10: 346*c67703ebSMarek Vasut break; 347*c67703ebSMarek Vasut case PRR_PRODUCT_20: /* M3 Cut 11 */ 348*c67703ebSMarek Vasut case PRR_PRODUCT_21: /* M3 Cut 13 */ 349*c67703ebSMarek Vasut case PRR_PRODUCT_30: /* M3 Cut 30 */ 350*c67703ebSMarek Vasut default: 351*c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE; 352*c67703ebSMarek Vasut break; 353*c67703ebSMarek Vasut } 354*c67703ebSMarek Vasut break; 355*c67703ebSMarek Vasut #endif 356*c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3N) 357*c67703ebSMarek Vasut case PRR_PRODUCT_M3N: 358*c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE; 359*c67703ebSMarek Vasut break; 360*c67703ebSMarek Vasut #endif 361*c67703ebSMarek Vasut default: 362*c67703ebSMarek Vasut break; 363*c67703ebSMarek Vasut } 364*c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_H3 365*c67703ebSMarek Vasut #if RCAR_LSI_CUT == RCAR_CUT_10 366*c67703ebSMarek Vasut /* H3 Cut 10 */ 367*c67703ebSMarek Vasut #elif RCAR_LSI_CUT == RCAR_CUT_11 368*c67703ebSMarek Vasut /* H3 Cut 11 */ 369*c67703ebSMarek Vasut #else 370*c67703ebSMarek Vasut /* H3 Cut 20 */ 371*c67703ebSMarek Vasut /* H3 Cut 30 or later */ 372*c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE; 373*c67703ebSMarek Vasut #endif 374*c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_H3N 375*c67703ebSMarek Vasut /* H3N Cut 30 or later */ 376*c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE; 377*c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_M3 378*c67703ebSMarek Vasut #if RCAR_LSI_CUT == RCAR_CUT_10 379*c67703ebSMarek Vasut /* M3 Cut 10 */ 380*c67703ebSMarek Vasut #else 381*c67703ebSMarek Vasut /* M3 Cut 11 */ 382*c67703ebSMarek Vasut /* M3 Cut 13 */ 383*c67703ebSMarek Vasut /* M3 Cut 30 or later */ 384*c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE; 385*c67703ebSMarek Vasut #endif 386*c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_M3N /* for M3N */ 387*c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE; 388*c67703ebSMarek Vasut #endif 389*c67703ebSMarek Vasut 390*c67703ebSMarek Vasut return refperiod; 391*c67703ebSMarek Vasut } 392*c67703ebSMarek Vasut #endif 393*c67703ebSMarek Vasut 394*c67703ebSMarek Vasut void rcar_qos_dbsc_setting(struct rcar_gen3_dbsc_qos_settings *qos, 395*c67703ebSMarek Vasut unsigned int qos_size, bool dbsc_wren) 396*c67703ebSMarek Vasut { 397*c67703ebSMarek Vasut int i; 398*c67703ebSMarek Vasut 399*c67703ebSMarek Vasut /* Register write enable */ 400*c67703ebSMarek Vasut if (dbsc_wren) 401*c67703ebSMarek Vasut io_write_32(DBSC_DBSYSCNT0, 0x00001234U); 402*c67703ebSMarek Vasut 403*c67703ebSMarek Vasut for (i = 0; i < qos_size; i++) 404*c67703ebSMarek Vasut io_write_32(qos[i].reg, qos[i].val); 405*c67703ebSMarek Vasut 406*c67703ebSMarek Vasut /* Register write protect */ 407*c67703ebSMarek Vasut if (dbsc_wren) 408*c67703ebSMarek Vasut io_write_32(DBSC_DBSYSCNT0, 0x00000000U); 409*c67703ebSMarek Vasut } 410