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