Commit de3ad4f0 authored by John Tsichritzis's avatar John Tsichritzis Committed by TrustedFirmware Code Review
Browse files

Merge changes If61ab215,I3e8b0251,I1757eee9,I81b48475,I46b445a7, ... into integration

* changes:
  rcar_gen3: drivers: qos: Move QoS drivers out of staging
  rcar_gen3: drivers: qos: V3M: Configure DBSC QoS from a table
  rcar_gen3: drivers: qos: E3: Configure DBSC QoS from a table
  rcar_gen3: drivers: qos: D3: Configure DBSC QoS from a table
  rcar_gen3: drivers: qos: M3N: Configure DBSC QoS from a table
  rcar_gen3: drivers: qos: M3W: Configure DBSC QoS from a table
  rcar_gen3: drivers: qos: H3: Configure DBSC QoS from a table
  rcar_gen3: drivers: qos: Add function to configure DBSC QoS settings from a table
  rcar_gen3: drivers: qos: Fix checkpatch issues
  rcar_gen3: drivers: qos: V3M: Drop useless comments
  rcar_gen3: drivers: qos: V3M: Convert mstat table to uint64_t
  rcar_gen3: drivers: qos: V3M: Factor out mstat fix into separate file
  rcar_gen3: drivers: qos: V3M: Use common register definition
  rcar_gen3: drivers: qos: E3: Drop extra level of nesting
  rcar_gen3: drivers: qos: E3: Use common register definition
  rcar_gen3: drivers: qos: D3: Replace ad-hoc register addresses with macros
  rcar_gen3: drivers: qos: D3: Drop MD pin check
  rcar_gen3: drivers: qos: D3: Make DBSC settings local to dbsc_setting()
  rcar_gen3: drivers: qos: D3: Drop useless comments
  rcar_gen3: drivers: qos: D3: Convert mstat table to uint64_t
  rcar_gen3: drivers: qos: D3: Factor out mstat fix into separate file
  rcar_gen3: drivers: qos: D3: Use common register definition
  rcar_gen3: drivers: qos: M3N: Fix checkpatch issues
  rcar_gen3: drivers: qos: M3N: Drop MD pin check
  rcar_gen3: drivers: qos: M3N: Drop useless comments
  rcar_gen3: drivers: qos: M3N: Drop extra level of nesting
  rcar_gen3: drivers: qos: M3N: Use common register definition
  rcar_gen3: drivers: qos: M3W: Fix checkpatch issues
  rcar_gen3: drivers: qos: M3W: Drop MD pin check
  rcar_gen3: drivers: qos: M3W: Drop useless comments
  rcar_gen3: drivers: qos: M3W: Drop extra level of nesting
  rcar_gen3: drivers: qos: M3W: Convert mstat table to uint64_t
  rcar_gen3: drivers: qos: M3W: Factor out mstat fix into separate file
  rcar_gen3: drivers: qos: M3W: Use common register definition
  rcar_gen3: drivers: qos: H3: Fix checkpatch issues
  rcar_gen3: drivers: qos: H3: Drop MD pin check
  rcar_gen3: drivers: qos: H3: Drop useless comments
  rcar_gen3: drivers: qos: H3: Drop extra level of nesting
  rcar_gen3: drivers: qos: H3: Convert mstat table to uint64_t
  rcar_gen3: drivers: qos: H3: Factor out mstat fix into separate file
  rcar_gen3: drivers: qos: H3: Use common register definition
  rcar_gen3: console: Convert to multi-console API
parents 97c9a42d c67703eb
/* /*
* Copyright (c) 2018, Renesas Electronics Corporation. All rights reserved. * Copyright (c) 2018-2019, Renesas Electronics Corporation. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
#include <arch.h> #include <arch.h>
#include <asm_macros.S> #include <asm_macros.S>
#include <console_macros.S>
#include <drivers/renesas/rcar/console/console.h>
.globl console_init .globl console_rcar_register
.globl console_putc .globl console_rcar_init
.globl console_uninit .globl console_rcar_putc
.globl console_core_init .globl console_rcar_flush
.globl console_core_putc
.globl console_core_getc
.globl console_flush
.extern rcar_log_init .extern rcar_log_init
.extern rcar_set_log_data .extern rcar_set_log_data
/* ----------------------------------------------- /* -----------------------------------------------
* int console_core_init(unsigned long base_addr, * int console_rcar_register(
* unsigned int uart_clk, unsigned int baud_rate) * uintptr_t base, uint32_t clk, uint32_t baud,
* Function to initialize the log area. This * console_rcar_t *console)
* function will be accessed by console_init and * Function to initialize and register a new rcar
* crash reporting. * console. Storage passed in for the console struct
* Return 1 on SUCCESS, 0 on error * *must* be persistent (i.e. not from the stack).
* In: x0 - Not used * In: x0 - UART register base address
* w1 - Not used * w1 - UART clock in Hz
* w2 - Not used * w2 - Baud rate
* x3 - pointer to empty console_rcar_t struct
* Out: return 1 on success, 0 on error
* Clobber list : x0, x1, x2, x6, x7, x14
* ----------------------------------------------- * -----------------------------------------------
*/ */
func console_core_init func console_rcar_register
b rcar_log_init mov x7, x30
endfunc console_core_init mov x6, x3
func console_init cbz x6, register_fail
b console_core_init str x0, [x6, #CONSOLE_T_RCAR_BASE]
endfunc console_init
/* -------------------------------------------------------- bl rcar_log_init
* int console_core_putc(int c, unsigned long base_addr) cbz x0, register_fail
* Function to output a character over the log area.
* Return 1 on SUCCESS, 0 on error mov x0, x6
* In : w0 - Not used mov x30, x7
* x1 - Not used finish_console_register rcar, putc=1, getc=0, flush=1
* --------------------------------------------------------
*/ register_fail:
func console_core_putc ret x7
b rcar_set_log_data endfunc console_rcar_register
endfunc console_core_putc
func console_putc
b console_core_putc
endfunc console_putc
/* --------------------------------------------- /* ---------------------------------------------
* int console_core_getc(unsigned long base_addr) * int console_rcar_init(unsigned long base_addr,
* Function to get a character from the console. * unsigned int uart_clk, unsigned int baud_rate)
* It returns the character grabbed on success * Function to initialize the console without a
* or -1 on error. * C Runtime to print debug information. This
* In : x0 - console base address * function will be accessed by crash reporting.
* Clobber list : x0, x1 * In: x0 - console base address
* w1 - Uart clock in Hz
* w2 - Baud rate
* Out: return 1 on success
* Clobber list : x1, x2
* --------------------------------------------- * ---------------------------------------------
*/ */
func console_core_getc func console_rcar_init
mov w0, #0
ret ret
endfunc console_core_getc endfunc console_rcar_init
/* ----------------------------------------------- /* --------------------------------------------------------
* void console_uninit(void) * int console_rcar_putc(int c, console_rcar_t *console)
* Function to finish the use of console driver. * Function to output a character over the console. It
* ----------------------------------------------- * returns the character printed on success or -1 on error.
* In : w0 - character to be printed
* x1 - pointer to console_rcar_t structure
* Out : return -1 on error else return character.
* Clobber list : x2
* --------------------------------------------------------
*/ */
func console_uninit func console_rcar_putc
ret b rcar_set_log_data
endfunc console_uninit endfunc console_rcar_putc
/* --------------------------------------------- /* ---------------------------------------------
* int console_flush(void) * int console_rcar_flush(void)
* Function to force a write of all buffered * Function to force a write of all buffered
* data that hasn't been output. It returns 0 * data that hasn't been output. It returns 0
* upon successful completion, otherwise it * upon successful completion, otherwise it
...@@ -83,7 +90,7 @@ endfunc console_uninit ...@@ -83,7 +90,7 @@ endfunc console_uninit
* Clobber list : x0, x1 * Clobber list : x0, x1
* --------------------------------------------- * ---------------------------------------------
*/ */
func console_flush func console_rcar_flush
mov w0, #0 mov w0, #0
ret ret
endfunc console_flush endfunc console_rcar_flush
/*
* Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <stdint.h>
#include <common/debug.h>
#include "../qos_common.h"
#include "../qos_reg.h"
#include "qos_init_d3.h"
#define RCAR_QOS_VERSION "rev.0.05"
#include "qos_init_d3_mstat.h"
struct rcar_gen3_dbsc_qos_settings d3_qos[] = {
/* BUFCAM settings */
{ DBSC_DBCAM0CNF1, 0x00043218 },
{ DBSC_DBCAM0CNF2, 0x000000F4 },
{ DBSC_DBSCHCNT0, 0x000F0037 },
{ DBSC_DBSCHSZ0, 0x00000001 },
{ DBSC_DBSCHRW0, 0x22421111 },
/* DDR3 */
{ DBSC_SCFCTST2, 0x012F1123 },
/* QoS Settings */
{ DBSC_DBSCHQOS00, 0x00000F00 },
{ DBSC_DBSCHQOS01, 0x00000B00 },
{ DBSC_DBSCHQOS02, 0x00000000 },
{ DBSC_DBSCHQOS03, 0x00000000 },
{ DBSC_DBSCHQOS40, 0x00000300 },
{ DBSC_DBSCHQOS41, 0x000002F0 },
{ DBSC_DBSCHQOS42, 0x00000200 },
{ DBSC_DBSCHQOS43, 0x00000100 },
{ DBSC_DBSCHQOS90, 0x00000300 },
{ DBSC_DBSCHQOS91, 0x000002F0 },
{ DBSC_DBSCHQOS92, 0x00000200 },
{ DBSC_DBSCHQOS93, 0x00000100 },
{ DBSC_DBSCHQOS130, 0x00000100 },
{ DBSC_DBSCHQOS131, 0x000000F0 },
{ DBSC_DBSCHQOS132, 0x000000A0 },
{ DBSC_DBSCHQOS133, 0x00000040 },
{ DBSC_DBSCHQOS140, 0x000000C0 },
{ DBSC_DBSCHQOS141, 0x000000B0 },
{ DBSC_DBSCHQOS142, 0x00000080 },
{ DBSC_DBSCHQOS143, 0x00000040 },
{ DBSC_DBSCHQOS150, 0x00000040 },
{ DBSC_DBSCHQOS151, 0x00000030 },
{ DBSC_DBSCHQOS152, 0x00000020 },
{ DBSC_DBSCHQOS153, 0x00000010 },
};
void qos_init_d3(void)
{
rcar_qos_dbsc_setting(d3_qos, ARRAY_SIZE(d3_qos), true);
/* DRAM Split Address mapping */
#if RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH
ERROR("DRAM Split 4ch not supported.(D3)");
panic();
#elif RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_2CH
ERROR("DRAM Split 2ch not supported.(D3)");
panic();
#elif RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_AUTO
ERROR("DRAM Split Auto not supported.(D3)");
panic();
#elif RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_LINEAR
/* NOTICE("BL2: DRAM Split is OFF\n"); */
/* Split setting(DDR 1ch) */
io_write_32(AXI_ADSPLCR0, 0x00000000U);
io_write_32(AXI_ADSPLCR3, 0x00000000U);
#else
ERROR("DRAM split is an invalid value.(D3)");
panic();
#endif
#if !(RCAR_QOS_TYPE == RCAR_QOS_NONE)
#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
NOTICE("BL2: QoS is default setting(%s)\n", RCAR_QOS_VERSION);
#endif
/* Resource Alloc setting */
io_write_32(QOSCTRL_RAS, 0x00000020U);
io_write_32(QOSCTRL_FIXTH, 0x000F0005U);
io_write_32(QOSCTRL_RAEN, 0x00000001U);
io_write_32(QOSCTRL_REGGD, 0x00000000U);
io_write_64(QOSCTRL_DANN, 0x0404020002020201U);
io_write_32(QOSCTRL_DANT, 0x00100804U);
io_write_32(QOSCTRL_EC, 0x00000000U);
io_write_64(QOSCTRL_EMS, 0x0000000000000000U);
io_write_32(QOSCTRL_FSS, 0x0000000AU);
io_write_32(QOSCTRL_INSFC, 0xC7840001U);
io_write_32(QOSCTRL_BERR, 0x00000000U);
io_write_32(QOSCTRL_EARLYR, 0x00000000U);
io_write_32(QOSCTRL_RACNT0, 0x00010003U);
io_write_32(QOSCTRL_STATGEN0, 0x00000000U);
/* GPU setting */
io_write_32(0xFD812030U, 0x00000000U);
/* QOSBW setting */
io_write_32(QOSCTRL_SL_INIT, 0x030500ACU);
io_write_32(QOSCTRL_REF_ARS, 0x00780000U);
/* QOSBW SRAM setting */
uint32_t i;
for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) {
io_write_64(QOSBW_FIX_QOS_BANK0 + i * 8, mstat_fix[i]);
io_write_64(QOSBW_FIX_QOS_BANK1 + i * 8, mstat_fix[i]);
}
for (i = 0U; i < ARRAY_SIZE(mstat_be); i++) {
io_write_64(QOSBW_BE_QOS_BANK0 + i * 8, mstat_be[i]);
io_write_64(QOSBW_BE_QOS_BANK1 + i * 8, mstat_be[i]);
}
/* 3DG bus Leaf setting */
io_write_32(GPU_ACT_GRD, 0x00001234U);
io_write_32(GPU_ACT0, 0x00000000U);
io_write_32(GPU_ACT1, 0x00000000U);
io_write_32(GPU_ACT2, 0x00000000U);
io_write_32(GPU_ACT3, 0x00000000U);
/* RT bus Leaf setting */
io_write_32(CPU_ACT0, 0x00000003U);
io_write_32(CPU_ACT1, 0x00000003U);
io_write_32(RT_ACT0, 0x00000000U);
io_write_32(RT_ACT1, 0x00000000U);
/* Resource Alloc start */
io_write_32(QOSCTRL_RAEN, 0x00000001U);
/* QOSBW start */
io_write_32(QOSCTRL_STATQC, 0x00000001U);
#else
NOTICE("BL2: QoS is None\n");
/* Resource Alloc setting */
io_write_32(QOSCTRL_EC, 0x00000000U);
/* Resource Alloc start */
io_write_32(QOSCTRL_RAEN, 0x00000001U);
#endif /* !(RCAR_QOS_TYPE == RCAR_QOS_NONE) */
}
/*
* Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
static const uint64_t mstat_fix[] = {
/* 0x0000, */ 0x0000000000000000UL,
/* 0x0008, */ 0x0000000000000000UL,
/* 0x0010, */ 0x0000000000000000UL,
/* 0x0018, */ 0x0000000000000000UL,
/* 0x0020, */ 0x0000000000000000UL,
/* 0x0028, */ 0x0000000000000000UL,
/* 0x0030, */ 0x001004340000FFFFUL,
/* 0x0038, */ 0x001004140000FFFFUL,
/* 0x0040, */ 0x0000000000000000UL,
/* 0x0048, */ 0x0000000000000000UL,
/* 0x0050, */ 0x0000000000000000UL,
/* 0x0058, */ 0x00140B030000FFFFUL,
/* 0x0060, */ 0x001408610000FFFFUL,
/* 0x0068, */ 0x0000000000000000UL,
/* 0x0070, */ 0x0000000000000000UL,
/* 0x0078, */ 0x0000000000000000UL,
/* 0x0080, */ 0x0000000000000000UL,
/* 0x0088, */ 0x001410620000FFFFUL,
/* 0x0090, */ 0x0000000000000000UL,
/* 0x0098, */ 0x0000000000000000UL,
/* 0x00A0, */ 0x000C041C0000FFFFUL,
/* 0x00A8, */ 0x000C04090000FFFFUL,
/* 0x00B0, */ 0x000C04110000FFFFUL,
/* 0x00B8, */ 0x0000000000000000UL,
/* 0x00C0, */ 0x000C041C0000FFFFUL,
/* 0x00C8, */ 0x000C04090000FFFFUL,
/* 0x00D0, */ 0x000C04110000FFFFUL,
/* 0x00D8, */ 0x0000000000000000UL,
/* 0x00E0, */ 0x0000000000000000UL,
/* 0x00E8, */ 0x0000000000000000UL,
/* 0x00F0, */ 0x001018570000FFFFUL,
/* 0x00F8, */ 0x0000000000000000UL,
/* 0x0100, */ 0x0000000000000000UL,
/* 0x0108, */ 0x0000000000000000UL,
/* 0x0110, */ 0x001008570000FFFFUL,
/* 0x0118, */ 0x0000000000000000UL,
/* 0x0120, */ 0x0000000000000000UL,
/* 0x0128, */ 0x0000000000000000UL,
/* 0x0130, */ 0x0000000000000000UL,
/* 0x0138, */ 0x0000000000000000UL,
/* 0x0140, */ 0x0000000000000000UL,
/* 0x0148, */ 0x0000000000000000UL,
/* 0x0150, */ 0x001008520000FFFFUL,
/* 0x0158, */ 0x0000000000000000UL,
/* 0x0160, */ 0x0000000000000000UL,
/* 0x0168, */ 0x0000000000000000UL,
/* 0x0170, */ 0x0000000000000000UL,
/* 0x0178, */ 0x0000000000000000UL,
/* 0x0180, */ 0x0000000000000000UL,
/* 0x0188, */ 0x0000000000000000UL,
/* 0x0190, */ 0x00100CA30000FFFFUL,
/* 0x0198, */ 0x0000000000000000UL,
/* 0x01A0, */ 0x0000000000000000UL,
/* 0x01A8, */ 0x0000000000000000UL,
/* 0x01B0, */ 0x0000000000000000UL,
/* 0x01B8, */ 0x0000000000000000UL,
/* 0x01C0, */ 0x0000000000000000UL,
/* 0x01C8, */ 0x0000000000000000UL,
/* 0x01D0, */ 0x0000000000000000UL,
/* 0x01D8, */ 0x0000000000000000UL,
/* 0x01E0, */ 0x0000000000000000UL,
/* 0x01E8, */ 0x000C04020000FFFFUL,
/* 0x01F0, */ 0x0000000000000000UL,
/* 0x01F8, */ 0x0000000000000000UL,
/* 0x0200, */ 0x0000000000000000UL,
/* 0x0208, */ 0x000C04090000FFFFUL,
/* 0x0210, */ 0x0000000000000000UL,
/* 0x0218, */ 0x0000000000000000UL,
/* 0x0220, */ 0x0000000000000000UL,
/* 0x0228, */ 0x0000000000000000UL,
/* 0x0230, */ 0x0000000000000000UL,
/* 0x0238, */ 0x0000000000000000UL,
/* 0x0240, */ 0x0000000000000000UL,
/* 0x0248, */ 0x0000000000000000UL,
/* 0x0250, */ 0x0000000000000000UL,
/* 0x0258, */ 0x0000000000000000UL,
/* 0x0260, */ 0x0000000000000000UL,
/* 0x0268, */ 0x001410040000FFFFUL,
/* 0x0270, */ 0x001404020000FFFFUL,
/* 0x0278, */ 0x0000000000000000UL,
/* 0x0280, */ 0x0000000000000000UL,
/* 0x0288, */ 0x0000000000000000UL,
/* 0x0290, */ 0x001410040000FFFFUL,
/* 0x0298, */ 0x001404020000FFFFUL,
/* 0x02A0, */ 0x000C04050000FFFFUL,
/* 0x02A8, */ 0x000C04050000FFFFUL,
/* 0x02B0, */ 0x0000000000000000UL,
/* 0x02B8, */ 0x0000000000000000UL,
/* 0x02C0, */ 0x0000000000000000UL,
/* 0x02C8, */ 0x0000000000000000UL,
/* 0x02D0, */ 0x000C04050000FFFFUL,
/* 0x02D8, */ 0x000C04050000FFFFUL,
/* 0x02E0, */ 0x0000000000000000UL,
/* 0x02E8, */ 0x0000000000000000UL,
/* 0x02F0, */ 0x0000000000000000UL,
/* 0x02F8, */ 0x0000000000000000UL,
/* 0x0300, */ 0x0000000000000000UL,
/* 0x0308, */ 0x0000000000000000UL,
/* 0x0310, */ 0x0000000000000000UL,
/* 0x0318, */ 0x0000000000000000UL,
/* 0x0320, */ 0x0000000000000000UL,
/* 0x0328, */ 0x0000000000000000UL,
/* 0x0330, */ 0x0000000000000000UL,
/* 0x0338, */ 0x0000000000000000UL,
/* 0x0340, */ 0x0000000000000000UL,
/* 0x0348, */ 0x0000000000000000UL,
/* 0x0350, */ 0x0000000000000000UL,
/* 0x0358, */ 0x0000000000000000UL,
/* 0x0360, */ 0x0000000000000000UL,
/* 0x0368, */ 0x0000000000000000UL,
/* 0x0370, */ 0x000C04020000FFFFUL,
/* 0x0378, */ 0x000C04020000FFFFUL,
/* 0x0380, */ 0x000C04090000FFFFUL,
/* 0x0388, */ 0x000C04090000FFFFUL,
/* 0x0390, */ 0x0000000000000000UL,
};
static const uint64_t mstat_be[] = {
/* 0x0000, */ 0x0000000000000000UL,
/* 0x0008, */ 0x0000000000000000UL,
/* 0x0010, */ 0x0000000000000000UL,
/* 0x0018, */ 0x0000000000000000UL,
/* 0x0020, */ 0x0000000000000000UL,
/* 0x0028, */ 0x0000000000000000UL,
/* 0x0030, */ 0x0000000000000000UL,
/* 0x0038, */ 0x0000000000000000UL,
/* 0x0040, */ 0x0000000000000000UL,
/* 0x0048, */ 0x0000000000000000UL,
/* 0x0050, */ 0x0000000000000000UL,
/* 0x0058, */ 0x0000000000000000UL,
/* 0x0060, */ 0x0000000000000000UL,
/* 0x0068, */ 0x0000000000000000UL,
/* 0x0070, */ 0x0000000000000000UL,
/* 0x0078, */ 0x0000000000000000UL,
/* 0x0080, */ 0x0000000000000000UL,
/* 0x0088, */ 0x0000000000000000UL,
/* 0x0090, */ 0x0000000000000000UL,
/* 0x0098, */ 0x0000000000000000UL,
/* 0x00A0, */ 0x0000000000000000UL,
/* 0x00A8, */ 0x0000000000000000UL,
/* 0x00B0, */ 0x0000000000000000UL,
/* 0x00B8, */ 0x0000000000000000UL,
/* 0x00C0, */ 0x0000000000000000UL,
/* 0x00C8, */ 0x0000000000000000UL,
/* 0x00D0, */ 0x0000000000000000UL,
/* 0x00D8, */ 0x0000000000000000UL,
/* 0x00E0, */ 0x0000000000000000UL,
/* 0x00E8, */ 0x0000000000000000UL,
/* 0x00F0, */ 0x0000000000000000UL,
/* 0x00F8, */ 0x0000000000000000UL,
/* 0x0100, */ 0x0000000000000000UL,
/* 0x0108, */ 0x0000000000000000UL,
/* 0x0110, */ 0x0000000000000000UL,
/* 0x0118, */ 0x0000000000000000UL,
/* 0x0120, */ 0x0000000000000000UL,
/* 0x0128, */ 0x0000000000000000UL,
/* 0x0130, */ 0x0000000000000000UL,
/* 0x0138, */ 0x0000000000000000UL,
/* 0x0140, */ 0x0000000000000000UL,
/* 0x0148, */ 0x0000000000000000UL,
/* 0x0150, */ 0x0000000000000000UL,
/* 0x0158, */ 0x0000000000000000UL,
/* 0x0160, */ 0x0000000000000000UL,
/* 0x0168, */ 0x0000000000000000UL,
/* 0x0170, */ 0x0000000000000000UL,
/* 0x0178, */ 0x0000000000000000UL,
/* 0x0180, */ 0x0000000000000000UL,
/* 0x0188, */ 0x0000000000000000UL,
/* 0x0190, */ 0x0000000000000000UL,
/* 0x0198, */ 0x0000000000000000UL,
/* 0x01A0, */ 0x0000000000000000UL,
/* 0x01A8, */ 0x0000000000000000UL,
/* 0x01B0, */ 0x0000000000000000UL,
/* 0x01B8, */ 0x0000000000000000UL,
/* 0x01C0, */ 0x00110090060FA001UL,
/* 0x01C8, */ 0x00110090060FA001UL,
/* 0x01D0, */ 0x0000000000000000UL,
/* 0x01D8, */ 0x0000000000000000UL,
/* 0x01E0, */ 0x0000000000000000UL,
/* 0x01E8, */ 0x0000000000000000UL,
/* 0x01F0, */ 0x0011001006004401UL,
/* 0x01F8, */ 0x0000000000000000UL,
/* 0x0200, */ 0x0000000000000000UL,
/* 0x0208, */ 0x0000000000000000UL,
/* 0x0210, */ 0x0011001006004401UL,
/* 0x0218, */ 0x0011001006009801UL,
/* 0x0220, */ 0x0011001006009801UL,
/* 0x0228, */ 0x0000000000000000UL,
/* 0x0230, */ 0x0011001006009801UL,
/* 0x0238, */ 0x0011001006009801UL,
/* 0x0240, */ 0x0000000000000000UL,
/* 0x0248, */ 0x0000000000000000UL,
/* 0x0250, */ 0x0000000000000000UL,
/* 0x0258, */ 0x0000000000000000UL,
/* 0x0260, */ 0x0000000000000000UL,
/* 0x0268, */ 0x0000000000000000UL,
/* 0x0270, */ 0x0000000000000000UL,
/* 0x0278, */ 0x0000000000000000UL,
/* 0x0280, */ 0x0000000000000000UL,
/* 0x0288, */ 0x0000000000000000UL,
/* 0x0290, */ 0x0000000000000000UL,
/* 0x0298, */ 0x0000000000000000UL,
/* 0x02A0, */ 0x0000000000000000UL,
/* 0x02A8, */ 0x0000000000000000UL,
/* 0x02B0, */ 0x0000000000000000UL,
/* 0x02B8, */ 0x0011001006003401UL,
/* 0x02C0, */ 0x0000000000000000UL,
/* 0x02C8, */ 0x0000000000000000UL,
/* 0x02D0, */ 0x0000000000000000UL,
/* 0x02D8, */ 0x0000000000000000UL,
/* 0x02E0, */ 0x0000000000000000UL,
/* 0x02E8, */ 0x0011001006003401UL,
/* 0x02F0, */ 0x00110090060FA001UL,
/* 0x02F8, */ 0x00110090060FA001UL,
/* 0x0300, */ 0x0000000000000000UL,
/* 0x0308, */ 0x0000000000000000UL,
/* 0x0310, */ 0x0000000000000000UL,
/* 0x0318, */ 0x0012001006003401UL,
/* 0x0320, */ 0x0000000000000000UL,
/* 0x0328, */ 0x0000000000000000UL,
/* 0x0330, */ 0x0000000000000000UL,
/* 0x0338, */ 0x0000000000000000UL,
/* 0x0340, */ 0x0000000000000000UL,
/* 0x0348, */ 0x0000000000000000UL,
/* 0x0350, */ 0x0000000000000000UL,
/* 0x0358, */ 0x00120090060FA001UL,
/* 0x0360, */ 0x00120090060FA001UL,
/* 0x0368, */ 0x0012001006003401UL,
/* 0x0370, */ 0x0000000000000000UL,
/* 0x0378, */ 0x0000000000000000UL,
/* 0x0380, */ 0x0000000000000000UL,
/* 0x0388, */ 0x0000000000000000UL,
/* 0x0390, */ 0x0012001006003401UL,
};
#endif
/* /*
* Copyright (c) 2018, Renesas Electronics Corporation. All rights reserved. * Copyright (c) 2018-2019, Renesas Electronics Corporation. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -14,9 +14,6 @@ ...@@ -14,9 +14,6 @@
#define RCAR_QOS_VERSION "rev.0.05" #define RCAR_QOS_VERSION "rev.0.05"
#define QOSCTRL_EARLYR (QOS_BASE1 + 0x0060U)
#define QOSCTRL_FSS (QOS_BASE1 + 0x0048U)
#define REF_ARS_ARBSTOPCYCLE_E3 (((SL_INIT_SSLOTCLK_E3) - 5U) << 16U) #define REF_ARS_ARBSTOPCYCLE_E3 (((SL_INIT_SSLOTCLK_E3) - 5U) << 16U)
#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT #if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
...@@ -29,54 +26,47 @@ ...@@ -29,54 +26,47 @@
#endif #endif
static void dbsc_setting(void) struct rcar_gen3_dbsc_qos_settings e3_qos[] = {
{
/* Register write enable */
io_write_32(DBSC_DBSYSCNT0, 0x00001234U);
/* BUFCAM settings */ /* BUFCAM settings */
io_write_32(DBSC_DBCAM0CNF1, 0x00043218); { DBSC_DBCAM0CNF1, 0x00043218 },
io_write_32(DBSC_DBCAM0CNF2, 0x000000F4); { DBSC_DBCAM0CNF2, 0x000000F4 },
io_write_32(DBSC_DBSCHCNT0, 0x000F0037); { DBSC_DBSCHCNT0, 0x000F0037 },
io_write_32(DBSC_DBSCHSZ0, 0x00000001); { DBSC_DBSCHSZ0, 0x00000001 },
io_write_32(DBSC_DBSCHRW0, 0x22421111); { DBSC_DBSCHRW0, 0x22421111 },
/* DDR3 */ /* DDR3 */
io_write_32(DBSC_SCFCTST2, 0x012F1123); { DBSC_SCFCTST2, 0x012F1123 },
/* QoS Settings */ /* QoS Settings */
io_write_32(DBSC_DBSCHQOS00, 0x00000F00); { DBSC_DBSCHQOS00, 0x00000F00 },
io_write_32(DBSC_DBSCHQOS01, 0x00000B00); { DBSC_DBSCHQOS01, 0x00000B00 },
io_write_32(DBSC_DBSCHQOS02, 0x00000000); { DBSC_DBSCHQOS02, 0x00000000 },
io_write_32(DBSC_DBSCHQOS03, 0x00000000); { DBSC_DBSCHQOS03, 0x00000000 },
io_write_32(DBSC_DBSCHQOS40, 0x00000300); { DBSC_DBSCHQOS40, 0x00000300 },
io_write_32(DBSC_DBSCHQOS41, 0x000002F0); { DBSC_DBSCHQOS41, 0x000002F0 },
io_write_32(DBSC_DBSCHQOS42, 0x00000200); { DBSC_DBSCHQOS42, 0x00000200 },
io_write_32(DBSC_DBSCHQOS43, 0x00000100); { DBSC_DBSCHQOS43, 0x00000100 },
io_write_32(DBSC_DBSCHQOS90, 0x00000100); { DBSC_DBSCHQOS90, 0x00000100 },
io_write_32(DBSC_DBSCHQOS91, 0x000000F0); { DBSC_DBSCHQOS91, 0x000000F0 },
io_write_32(DBSC_DBSCHQOS92, 0x000000A0); { DBSC_DBSCHQOS92, 0x000000A0 },
io_write_32(DBSC_DBSCHQOS93, 0x00000040); { DBSC_DBSCHQOS93, 0x00000040 },
io_write_32(DBSC_DBSCHQOS130, 0x00000100); { DBSC_DBSCHQOS130, 0x00000100 },
io_write_32(DBSC_DBSCHQOS131, 0x000000F0); { DBSC_DBSCHQOS131, 0x000000F0 },
io_write_32(DBSC_DBSCHQOS132, 0x000000A0); { DBSC_DBSCHQOS132, 0x000000A0 },
io_write_32(DBSC_DBSCHQOS133, 0x00000040); { DBSC_DBSCHQOS133, 0x00000040 },
io_write_32(DBSC_DBSCHQOS140, 0x000000C0); { DBSC_DBSCHQOS140, 0x000000C0 },
io_write_32(DBSC_DBSCHQOS141, 0x000000B0); { DBSC_DBSCHQOS141, 0x000000B0 },
io_write_32(DBSC_DBSCHQOS142, 0x00000080); { DBSC_DBSCHQOS142, 0x00000080 },
io_write_32(DBSC_DBSCHQOS143, 0x00000040); { DBSC_DBSCHQOS143, 0x00000040 },
io_write_32(DBSC_DBSCHQOS150, 0x00000040); { DBSC_DBSCHQOS150, 0x00000040 },
io_write_32(DBSC_DBSCHQOS151, 0x00000030); { DBSC_DBSCHQOS151, 0x00000030 },
io_write_32(DBSC_DBSCHQOS152, 0x00000020); { DBSC_DBSCHQOS152, 0x00000020 },
io_write_32(DBSC_DBSCHQOS153, 0x00000010); { DBSC_DBSCHQOS153, 0x00000010 },
};
/* Register write protect */
io_write_32(DBSC_DBSYSCNT0, 0x00000000U);
}
void qos_init_e3_v10(void) void qos_init_e3_v10(void)
{ {
dbsc_setting(); rcar_qos_dbsc_setting(e3_qos, ARRAY_SIZE(e3_qos), true);
/* DRAM Split Address mapping */ /* DRAM Split Address mapping */
#if RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH #if RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH
...@@ -121,7 +111,7 @@ void qos_init_e3_v10(void) ...@@ -121,7 +111,7 @@ void qos_init_e3_v10(void)
SL_INIT_SSLOTCLK_E3); SL_INIT_SSLOTCLK_E3);
io_write_32(QOSCTRL_REF_ARS, REF_ARS_ARBSTOPCYCLE_E3); io_write_32(QOSCTRL_REF_ARS, REF_ARS_ARBSTOPCYCLE_E3);
{ /* QOSBW SRAM setting */
uint32_t i; uint32_t i;
for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) { for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) {
...@@ -132,7 +122,6 @@ void qos_init_e3_v10(void) ...@@ -132,7 +122,6 @@ void qos_init_e3_v10(void)
io_write_64(QOSBW_BE_QOS_BANK0 + i * 8, mstat_be[i]); io_write_64(QOSBW_BE_QOS_BANK0 + i * 8, mstat_be[i]);
io_write_64(QOSBW_BE_QOS_BANK1 + i * 8, mstat_be[i]); io_write_64(QOSBW_BE_QOS_BANK1 + i * 8, mstat_be[i]);
} }
}
/* RT bus Leaf setting */ /* RT bus Leaf setting */
io_write_32(RT_ACT0, 0x00000000U); io_write_32(RT_ACT0, 0x00000000U);
......
/*
* Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <stdint.h>
#include <common/debug.h>
#include "../qos_common.h"
#include "../qos_reg.h"
#include "qos_init_h3_v10.h"
#define RCAR_QOS_VERSION "rev.0.36"
#include "qos_init_h3_v10_mstat.h"
void qos_init_h3_v10(void)
{
/* DRAM Split Address mapping */
#if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \
(RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_AUTO)
NOTICE("BL2: DRAM Split is 4ch\n");
io_write_32(AXI_ADSPLCR0, ADSPLCR0_ADRMODE_DEFAULT
| ADSPLCR0_SPLITSEL(0xFFU)
| ADSPLCR0_AREA(0x1BU)
| ADSPLCR0_SWP);
io_write_32(AXI_ADSPLCR1, 0x00000000U);
io_write_32(AXI_ADSPLCR2, 0xA8A90000U);
io_write_32(AXI_ADSPLCR3, 0x00000000U);
#elif RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_2CH
NOTICE("BL2: DRAM Split is 2ch\n");
io_write_32(AXI_ADSPLCR0, 0x00000000U);
io_write_32(AXI_ADSPLCR1, ADSPLCR0_ADRMODE_DEFAULT
| ADSPLCR0_SPLITSEL(0xFFU)
| ADSPLCR0_AREA(0x1BU)
| ADSPLCR0_SWP);
io_write_32(AXI_ADSPLCR2, 0x00000000U);
io_write_32(AXI_ADSPLCR3, 0x00000000U);
#else
NOTICE("BL2: DRAM Split is OFF\n");
#endif
#if !(RCAR_QOS_TYPE == RCAR_QOS_NONE)
#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
NOTICE("BL2: QoS is default setting(%s)\n", RCAR_QOS_VERSION);
#endif
/* AR Cache setting */
io_write_32(0xE67D1000U, 0x00000100U);
io_write_32(0xE67D1008U, 0x00000100U);
/* Resource Alloc setting */
io_write_32(QOSCTRL_RAS, 0x00000040U);
io_write_32(QOSCTRL_FIXTH, 0x000F0005U);
io_write_32(QOSCTRL_REGGD, 0x00000004U);
io_write_64(QOSCTRL_DANN, 0x0202000004040404UL);
io_write_32(QOSCTRL_DANT, 0x003C1110U);
io_write_32(QOSCTRL_EC, 0x00080001U); /* need for H3 v1.* */
io_write_64(QOSCTRL_EMS, 0x0000000000000000UL);
io_write_32(QOSCTRL_INSFC, 0xC7840001U);
io_write_32(QOSCTRL_BERR, 0x00000000U);
/* QOSBW setting */
io_write_32(QOSCTRL_SL_INIT,
SL_INIT_REFFSSLOT | SL_INIT_SLOTSSLOT | SL_INIT_SSLOTCLK);
io_write_32(QOSCTRL_REF_ARS, 0x00330000U);
/* QOSBW SRAM setting */
uint32_t i;
for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) {
io_write_64(QOSBW_FIX_QOS_BANK0 + i * 8, mstat_fix[i]);
io_write_64(QOSBW_FIX_QOS_BANK1 + i * 8, mstat_fix[i]);
}
for (i = 0U; i < ARRAY_SIZE(mstat_be); i++) {
io_write_64(QOSBW_BE_QOS_BANK0 + i * 8, mstat_be[i]);
io_write_64(QOSBW_BE_QOS_BANK1 + i * 8, mstat_be[i]);
}
/* 3DG bus Leaf setting */
io_write_32(0xFD820808U, 0x00001234U);
io_write_32(0xFD820800U, 0x0000003FU);
io_write_32(0xFD821800U, 0x0000003FU);
io_write_32(0xFD822800U, 0x0000003FU);
io_write_32(0xFD823800U, 0x0000003FU);
io_write_32(0xFD824800U, 0x0000003FU);
io_write_32(0xFD825800U, 0x0000003FU);
io_write_32(0xFD826800U, 0x0000003FU);
io_write_32(0xFD827800U, 0x0000003FU);
/* Resource Alloc start */
io_write_32(QOSCTRL_RAEN, 0x00000001U);
/* QOSBW start */
io_write_32(QOSCTRL_STATQC, 0x00000001U);
#else
NOTICE("BL2: QoS is None\n");
/* Resource Alloc setting */
io_write_32(QOSCTRL_EC, 0x00080001U); /* need for H3 v1.* */
#endif /* !(RCAR_QOS_TYPE == RCAR_QOS_NONE) */
}
/*
* Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
static const uint64_t mstat_fix[] = {
/* 0x0000, */ 0x0000000000000000UL,
/* 0x0008, */ 0x0000000000000000UL,
/* 0x0010, */ 0x0000000000000000UL,
/* 0x0018, */ 0x0000000000000000UL,
/* 0x0020, */ 0x0000000000000000UL,
/* 0x0028, */ 0x0000000000000000UL,
/* 0x0030, */ 0x0000000000000000UL,
/* 0x0038, */ 0x0000000000000000UL,
/* 0x0040, */ 0x00140C050000FFFFUL,
/* 0x0048, */ 0x0000000000000000UL,
/* 0x0050, */ 0x0000000000000000UL,
/* 0x0058, */ 0x001404030000FFFFUL,
/* 0x0060, */ 0x001408060000FFFFUL,
/* 0x0068, */ 0x0000000000000000UL,
/* 0x0070, */ 0x0000000000000000UL,
/* 0x0078, */ 0x0000000000000000UL,
/* 0x0080, */ 0x0000000000000000UL,
/* 0x0088, */ 0x00140C050000FFFFUL,
/* 0x0090, */ 0x001408060000FFFFUL,
/* 0x0098, */ 0x001404020000FFFFUL,
/* 0x00A0, */ 0x0000000000000000UL,
/* 0x00A8, */ 0x0000000000000000UL,
/* 0x00B0, */ 0x0000000000000000UL,
/* 0x00B8, */ 0x0000000000000000UL,
/* 0x00C0, */ 0x0000000000000000UL,
/* 0x00C8, */ 0x0000000000000000UL,
/* 0x00D0, */ 0x0000000000000000UL,
/* 0x00D8, */ 0x0000000000000000UL,
/* 0x00E0, */ 0x0000000000000000UL,
/* 0x00E8, */ 0x0000000000000000UL,
/* 0x00F0, */ 0x0000000000000000UL,
/* 0x00F8, */ 0x0000000000000000UL,
/* 0x0100, */ 0x0000000000000000UL,
/* 0x0108, */ 0x0000000000000000UL,
/* 0x0110, */ 0x0000000000000000UL,
/* 0x0118, */ 0x0000000000000000UL,
/* 0x0120, */ 0x0000000000000000UL,
/* 0x0128, */ 0x0000000000000000UL,
/* 0x0130, */ 0x0000000000000000UL,
/* 0x0138, */ 0x001004020000FFFFUL,
/* 0x0140, */ 0x001004020000FFFFUL,
/* 0x0148, */ 0x001004020000FFFFUL,
/* 0x0150, */ 0x001008050000FFFFUL,
/* 0x0158, */ 0x001008050000FFFFUL,
/* 0x0160, */ 0x001008050000FFFFUL,
/* 0x0168, */ 0x001008050000FFFFUL,
/* 0x0170, */ 0x001008050000FFFFUL,
/* 0x0178, */ 0x001004030000FFFFUL,
/* 0x0180, */ 0x001004030000FFFFUL,
/* 0x0188, */ 0x001004030000FFFFUL,
/* 0x0190, */ 0x001014140000FFFFUL,
/* 0x0198, */ 0x001014140000FFFFUL,
/* 0x01A0, */ 0x001008060000FFFFUL,
/* 0x01A8, */ 0x001008060000FFFFUL,
/* 0x01B0, */ 0x001008060000FFFFUL,
/* 0x01B8, */ 0x0000000000000000UL,
/* 0x01C0, */ 0x0000000000000000UL,
/* 0x01C8, */ 0x0000000000000000UL,
/* 0x01D0, */ 0x0000000000000000UL,
/* 0x01D8, */ 0x0000000000000000UL,
/* 0x01E0, */ 0x0000000000000000UL,
/* 0x01E8, */ 0x0000000000000000UL,
/* 0x01F0, */ 0x0000000000000000UL,
/* 0x01F8, */ 0x0000000000000000UL,
/* 0x0200, */ 0x0000000000000000UL,
/* 0x0208, */ 0x0000000000000000UL,
/* 0x0210, */ 0x0000000000000000UL,
/* 0x0218, */ 0x0000000000000000UL,
/* 0x0220, */ 0x0000000000000000UL,
/* 0x0228, */ 0x0000000000000000UL,
/* 0x0230, */ 0x0000000000000000UL,
/* 0x0238, */ 0x0000000000000000UL,
/* 0x0240, */ 0x0000000000000000UL,
/* 0x0248, */ 0x0000000000000000UL,
/* 0x0250, */ 0x0000000000000000UL,
/* 0x0258, */ 0x0000000000000000UL,
/* 0x0260, */ 0x0000000000000000UL,
/* 0x0268, */ 0x0000000000000000UL,
/* 0x0270, */ 0x0000000000000000UL,
/* 0x0278, */ 0x0000000000000000UL,
/* 0x0280, */ 0x0000000000000000UL,
/* 0x0288, */ 0x0000000000000000UL,
/* 0x0290, */ 0x0000000000000000UL,
/* 0x0298, */ 0x0000000000000000UL,
/* 0x02A0, */ 0x0000000000000000UL,
/* 0x02A8, */ 0x0000000000000000UL,
/* 0x02B0, */ 0x0000000000000000UL,
/* 0x02B8, */ 0x0000000000000000UL,
/* 0x02C0, */ 0x0000000000000000UL,
/* 0x02C8, */ 0x0000000000000000UL,
/* 0x02D0, */ 0x0000000000000000UL,
/* 0x02D8, */ 0x0000000000000000UL,
/* 0x02E0, */ 0x0000000000000000UL,
/* 0x02E8, */ 0x0000000000000000UL,
/* 0x02F0, */ 0x0000000000000000UL,
/* 0x02F8, */ 0x0000000000000000UL,
/* 0x0300, */ 0x0000000000000000UL,
/* 0x0308, */ 0x0000000000000000UL,
/* 0x0310, */ 0x0000000000000000UL,
/* 0x0318, */ 0x0000000000000000UL,
/* 0x0320, */ 0x0000000000000000UL,
/* 0x0328, */ 0x0000000000000000UL,
/* 0x0330, */ 0x0000000000000000UL,
/* 0x0338, */ 0x0000000000000000UL,
};
static const uint64_t mstat_be[] = {
/* 0x0000, */ 0x001000100C8FFC01UL,
/* 0x0008, */ 0x001000100C8FFC01UL,
/* 0x0010, */ 0x001000100C8FFC01UL,
/* 0x0018, */ 0x001000100C8FFC01UL,
/* 0x0020, */ 0x001000100C8FFC01UL,
/* 0x0028, */ 0x001000100C8FFC01UL,
/* 0x0030, */ 0x001000100C8FFC01UL,
/* 0x0038, */ 0x001000100C8FFC01UL,
/* 0x0040, */ 0x0000000000000000UL,
/* 0x0048, */ 0x0000000000000000UL,
/* 0x0050, */ 0x001000100C8FFC01UL,
/* 0x0058, */ 0x0000000000000000UL,
/* 0x0060, */ 0x0000000000000000UL,
/* 0x0068, */ 0x001000100C8FFC01UL,
/* 0x0070, */ 0x001000100C8FFC01UL,
/* 0x0078, */ 0x001000100C8FFC01UL,
/* 0x0080, */ 0x001000100C8FFC01UL,
/* 0x0088, */ 0x0000000000000000UL,
/* 0x0090, */ 0x0000000000000000UL,
/* 0x0098, */ 0x0000000000000000UL,
/* 0x00A0, */ 0x001000100C8FFC01UL,
/* 0x00A8, */ 0x001000100C8FFC01UL,
/* 0x00B0, */ 0x001000100C8FFC01UL,
/* 0x00B8, */ 0x001000100C8FFC01UL,
/* 0x00C0, */ 0x001000100C8FFC01UL,
/* 0x00C8, */ 0x001000100C8FFC01UL,
/* 0x00D0, */ 0x001000100C8FFC01UL,
/* 0x00D8, */ 0x002000200C8FFC01UL,
/* 0x00E0, */ 0x002000200C8FFC01UL,
/* 0x00E8, */ 0x001000100C8FFC01UL,
/* 0x00F0, */ 0x001000100C8FFC01UL,
/* 0x00F8, */ 0x001000100C8FFC01UL,
/* 0x0100, */ 0x0000000000000000UL,
/* 0x0108, */ 0x002000200C8FFC01UL,
/* 0x0110, */ 0x001000100C8FFC01UL,
/* 0x0118, */ 0x001000100C8FFC01UL,
/* 0x0120, */ 0x0000000000000000UL,
/* 0x0128, */ 0x002000200C8FFC01UL,
/* 0x0130, */ 0x001000100C8FFC01UL,
/* 0x0138, */ 0x0000000000000000UL,
/* 0x0140, */ 0x0000000000000000UL,
/* 0x0148, */ 0x0000000000000000UL,
/* 0x0150, */ 0x0000000000000000UL,
/* 0x0158, */ 0x0000000000000000UL,
/* 0x0160, */ 0x0000000000000000UL,
/* 0x0168, */ 0x0000000000000000UL,
/* 0x0170, */ 0x0000000000000000UL,
/* 0x0178, */ 0x0000000000000000UL,
/* 0x0180, */ 0x0000000000000000UL,
/* 0x0188, */ 0x0000000000000000UL,
/* 0x0190, */ 0x0000000000000000UL,
/* 0x0198, */ 0x0000000000000000UL,
/* 0x01A0, */ 0x0000000000000000UL,
/* 0x01A8, */ 0x0000000000000000UL,
/* 0x01B0, */ 0x0000000000000000UL,
/* 0x01B8, */ 0x001000100C8FFC01UL,
/* 0x01C0, */ 0x001000200C8FFC01UL,
/* 0x01C8, */ 0x001000200C8FFC01UL,
/* 0x01D0, */ 0x001000200C8FFC01UL,
/* 0x01D8, */ 0x001000200C8FFC01UL,
/* 0x01E0, */ 0x001000100C8FFC01UL,
/* 0x01E8, */ 0x001000100C8FFC01UL,
/* 0x01F0, */ 0x001000100C8FFC01UL,
/* 0x01F8, */ 0x001000100C8FFC01UL,
/* 0x0200, */ 0x001000100C8FFC01UL,
/* 0x0208, */ 0x001000100C8FFC01UL,
/* 0x0210, */ 0x001000100C8FFC01UL,
/* 0x0218, */ 0x001000100C8FFC01UL,
/* 0x0220, */ 0x001000100C8FFC01UL,
/* 0x0228, */ 0x001000100C8FFC01UL,
/* 0x0230, */ 0x001000100C8FFC01UL,
/* 0x0238, */ 0x001000100C8FFC01UL,
/* 0x0240, */ 0x001000100C8FFC01UL,
/* 0x0248, */ 0x001000100C8FFC01UL,
/* 0x0250, */ 0x001000100C8FFC01UL,
/* 0x0258, */ 0x001000100C8FFC01UL,
/* 0x0260, */ 0x001000100C8FFC01UL,
/* 0x0268, */ 0x001000100C8FFC01UL,
/* 0x0270, */ 0x001000100C8FFC01UL,
/* 0x0278, */ 0x001000100C8FFC01UL,
/* 0x0280, */ 0x001000100C8FFC01UL,
/* 0x0288, */ 0x001000100C8FFC01UL,
/* 0x0290, */ 0x001000100C8FFC01UL,
/* 0x0298, */ 0x001000100C8FFC01UL,
/* 0x02A0, */ 0x001000100C8FFC01UL,
/* 0x02A8, */ 0x001000100C8FFC01UL,
/* 0x02B0, */ 0x001000100C8FFC01UL,
/* 0x02B8, */ 0x001000100C8FFC01UL,
/* 0x02C0, */ 0x001000100C8FFC01UL,
/* 0x02C8, */ 0x001000100C8FFC01UL,
/* 0x02D0, */ 0x001000100C8FFC01UL,
/* 0x02D8, */ 0x001000100C8FFC01UL,
/* 0x02E0, */ 0x001000100C8FFC01UL,
/* 0x02E8, */ 0x001000100C8FFC01UL,
/* 0x02F0, */ 0x001000200C8FFC01UL,
/* 0x02F8, */ 0x001000300C8FFC01UL,
/* 0x0300, */ 0x0000000000000000UL,
/* 0x0308, */ 0x001000200C8FFC01UL,
/* 0x0310, */ 0x001000300C8FFC01UL,
/* 0x0318, */ 0x0000000000000000UL,
/* 0x0320, */ 0x001000200C8FFC01UL,
/* 0x0328, */ 0x001000300C8FFC01UL,
/* 0x0330, */ 0x001000200C8FFC01UL,
/* 0x0338, */ 0x001000300C8FFC01UL,
};
#endif
/*
* Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <stdint.h>
#include <common/debug.h>
#include <rcar_def.h>
#include "../qos_common.h"
#include "../qos_reg.h"
#include "qos_init_h3_v11.h"
#define RCAR_QOS_VERSION "rev.0.37"
#include "qos_init_h3_v11_mstat.h"
struct rcar_gen3_dbsc_qos_settings h3_v11_qos[] = {
/* BUFCAM settings */
/* DBSC_DBCAM0CNF0 not set */
{ DBSC_DBCAM0CNF1, 0x00044218 },
{ DBSC_DBCAM0CNF2, 0x000000F4 },
/* DBSC_DBCAM0CNF3 not set */
{ DBSC_DBSCHCNT0, 0x080F0037 },
{ DBSC_DBSCHCNT1, 0x00001010 },
{ DBSC_DBSCHSZ0, 0x00000001 },
{ DBSC_DBSCHRW0, 0x22421111 },
/* DDR3 */
{ DBSC_SCFCTST2, 0x012F1123 },
/* QoS Settings */
{ DBSC_DBSCHQOS00, 0x0000F000 },
{ DBSC_DBSCHQOS01, 0x0000E000 },
{ DBSC_DBSCHQOS02, 0x00007000 },
{ DBSC_DBSCHQOS03, 0x00000000 },
{ DBSC_DBSCHQOS40, 0x00000E00 },
{ DBSC_DBSCHQOS41, 0x00000DFF },
{ DBSC_DBSCHQOS42, 0x00000400 },
{ DBSC_DBSCHQOS43, 0x00000200 },
{ DBSC_DBSCHQOS90, 0x00000C00 },
{ DBSC_DBSCHQOS91, 0x00000BFF },
{ DBSC_DBSCHQOS92, 0x00000400 },
{ DBSC_DBSCHQOS93, 0x00000200 },
{ DBSC_DBSCHQOS130, 0x00000980 },
{ DBSC_DBSCHQOS131, 0x0000097F },
{ DBSC_DBSCHQOS132, 0x00000300 },
{ DBSC_DBSCHQOS133, 0x00000180 },
{ DBSC_DBSCHQOS140, 0x00000800 },
{ DBSC_DBSCHQOS141, 0x000007FF },
{ DBSC_DBSCHQOS142, 0x00000300 },
{ DBSC_DBSCHQOS143, 0x00000180 },
{ DBSC_DBSCHQOS150, 0x000007D0 },
{ DBSC_DBSCHQOS151, 0x000007CF },
{ DBSC_DBSCHQOS152, 0x000005D0 },
{ DBSC_DBSCHQOS153, 0x000003D0 },
};
void qos_init_h3_v11(void)
{
rcar_qos_dbsc_setting(h3_v11_qos, ARRAY_SIZE(h3_v11_qos), false);
/* DRAM Split Address mapping */
#if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \
(RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_AUTO)
NOTICE("BL2: DRAM Split is 4ch\n");
io_write_32(AXI_ADSPLCR0, ADSPLCR0_ADRMODE_DEFAULT
| ADSPLCR0_SPLITSEL(0xFFU)
| ADSPLCR0_AREA(0x1BU)
| ADSPLCR0_SWP);
io_write_32(AXI_ADSPLCR1, 0x00000000U);
io_write_32(AXI_ADSPLCR2, 0xA8A90000U);
io_write_32(AXI_ADSPLCR3, 0x00000000U);
#elif RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_2CH
NOTICE("BL2: DRAM Split is 2ch\n");
io_write_32(AXI_ADSPLCR0, 0x00000000U);
io_write_32(AXI_ADSPLCR1, ADSPLCR0_ADRMODE_DEFAULT
| ADSPLCR0_SPLITSEL(0xFFU)
| ADSPLCR0_AREA(0x1BU)
| ADSPLCR0_SWP);
io_write_32(AXI_ADSPLCR2, 0x00000000U);
io_write_32(AXI_ADSPLCR3, 0x00000000U);
#else
NOTICE("BL2: DRAM Split is OFF\n");
#endif
#if !(RCAR_QOS_TYPE == RCAR_QOS_NONE)
#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
NOTICE("BL2: QoS is default setting(%s)\n", RCAR_QOS_VERSION);
#endif
/* AR Cache setting */
io_write_32(0xE67D1000U, 0x00000100U);
io_write_32(0xE67D1008U, 0x00000100U);
/* Resource Alloc setting */
#if RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_2CH
io_write_32(QOSCTRL_RAS, 0x00000020U);
#else
io_write_32(QOSCTRL_RAS, 0x00000040U);
#endif
io_write_32(QOSCTRL_FIXTH, 0x000F0005U);
io_write_32(QOSCTRL_REGGD, 0x00000000U);
#if RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_2CH
io_write_64(QOSCTRL_DANN, 0x0101010102020201UL);
io_write_32(QOSCTRL_DANT, 0x00181008U);
#else
io_write_64(QOSCTRL_DANN, 0x0101000004040401UL);
io_write_32(QOSCTRL_DANT, 0x003C2010U);
#endif
io_write_32(QOSCTRL_EC, 0x00080001U); /* need for H3 v1.* */
io_write_64(QOSCTRL_EMS, 0x0000000000000000UL);
io_write_32(QOSCTRL_INSFC, 0xC7840001U);
io_write_32(QOSCTRL_BERR, 0x00000000U);
io_write_32(QOSCTRL_RACNT0, 0x00000000U);
/* QOSBW setting */
io_write_32(QOSCTRL_SL_INIT,
SL_INIT_REFFSSLOT | SL_INIT_SLOTSSLOT | SL_INIT_SSLOTCLK);
io_write_32(QOSCTRL_REF_ARS, 0x00330000U);
/* QOSBW SRAM setting */
uint32_t i;
for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) {
io_write_64(QOSBW_FIX_QOS_BANK0 + i * 8, mstat_fix[i]);
io_write_64(QOSBW_FIX_QOS_BANK1 + i * 8, mstat_fix[i]);
}
for (i = 0U; i < ARRAY_SIZE(mstat_be); i++) {
io_write_64(QOSBW_BE_QOS_BANK0 + i * 8, mstat_be[i]);
io_write_64(QOSBW_BE_QOS_BANK1 + i * 8, mstat_be[i]);
}
/* 3DG bus Leaf setting */
io_write_32(0xFD820808U, 0x00001234U);
io_write_32(0xFD820800U, 0x0000003FU);
io_write_32(0xFD821800U, 0x0000003FU);
io_write_32(0xFD822800U, 0x0000003FU);
io_write_32(0xFD823800U, 0x0000003FU);
io_write_32(0xFD824800U, 0x0000003FU);
io_write_32(0xFD825800U, 0x0000003FU);
io_write_32(0xFD826800U, 0x0000003FU);
io_write_32(0xFD827800U, 0x0000003FU);
/* VIO bus Leaf setting */
io_write_32(0xFEB89800, 0x00000001U);
io_write_32(0xFEB8A800, 0x00000001U);
io_write_32(0xFEB8B800, 0x00000001U);
io_write_32(0xFEB8C800, 0x00000001U);
/* HSC bus Leaf setting */
io_write_32(0xE6430800, 0x00000001U);
io_write_32(0xE6431800, 0x00000001U);
io_write_32(0xE6432800, 0x00000001U);
io_write_32(0xE6433800, 0x00000001U);
/* MP bus Leaf setting */
io_write_32(0xEC620800, 0x00000001U);
io_write_32(0xEC621800, 0x00000001U);
/* PERIE bus Leaf setting */
io_write_32(0xE7760800, 0x00000001U);
io_write_32(0xE7768800, 0x00000001U);
/* PERIW bus Leaf setting */
io_write_32(0xE6760800, 0x00000001U);
io_write_32(0xE6768800, 0x00000001U);
/* RT bus Leaf setting */
io_write_32(0xFFC50800, 0x00000001U);
io_write_32(0xFFC51800, 0x00000001U);
/* CCI bus Leaf setting */
uint32_t modemr = io_read_32(RCAR_MODEMR);
modemr &= MODEMR_BOOT_CPU_MASK;
if ((modemr == MODEMR_BOOT_CPU_CA57) ||
(modemr == MODEMR_BOOT_CPU_CA53)) {
io_write_32(0xF1300800, 0x00000001U);
io_write_32(0xF1340800, 0x00000001U);
io_write_32(0xF1380800, 0x00000001U);
io_write_32(0xF13C0800, 0x00000001U);
}
/* Resource Alloc start */
io_write_32(QOSCTRL_RAEN, 0x00000001U);
/* QOSBW start */
io_write_32(QOSCTRL_STATQC, 0x00000001U);
#else
NOTICE("BL2: QoS is None\n");
/* Resource Alloc setting */
io_write_32(QOSCTRL_EC, 0x00080001U); /* need for H3 v1.* */
#endif /* !(RCAR_QOS_TYPE == RCAR_QOS_NONE) */
}
/*
* Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
static const uint64_t mstat_fix[] = {
/* 0x0000, */ 0x0000000000000000UL,
/* 0x0008, */ 0x0000000000000000UL,
/* 0x0010, */ 0x0000000000000000UL,
/* 0x0018, */ 0x0000000000000000UL,
/* 0x0020, */ 0x0000000000000000UL,
/* 0x0028, */ 0x0000000000000000UL,
/* 0x0030, */ 0x001004030000FFFFUL,
/* 0x0038, */ 0x001008060000FFFFUL,
/* 0x0040, */ 0x001414090000FFFFUL,
/* 0x0048, */ 0x0000000000000000UL,
/* 0x0050, */ 0x001410010000FFFFUL,
/* 0x0058, */ 0x00140C0C0000FFFFUL,
/* 0x0060, */ 0x00140C0C0000FFFFUL,
/* 0x0068, */ 0x0000000000000000UL,
/* 0x0070, */ 0x001410010000FFFFUL,
/* 0x0078, */ 0x001008060000FFFFUL,
/* 0x0080, */ 0x001004020000FFFFUL,
/* 0x0088, */ 0x001414090000FFFFUL,
/* 0x0090, */ 0x00140C0C0000FFFFUL,
/* 0x0098, */ 0x001408080000FFFFUL,
/* 0x00A0, */ 0x000C08020000FFFFUL,
/* 0x00A8, */ 0x000C04010000FFFFUL,
/* 0x00B0, */ 0x000C04010000FFFFUL,
/* 0x00B8, */ 0x0000000000000000UL,
/* 0x00C0, */ 0x000C08020000FFFFUL,
/* 0x00C8, */ 0x000C04010000FFFFUL,
/* 0x00D0, */ 0x000C04010000FFFFUL,
/* 0x00D8, */ 0x000C04030000FFFFUL,
/* 0x00E0, */ 0x000C100F0000FFFFUL,
/* 0x00E8, */ 0x0000000000000000UL,
/* 0x00F0, */ 0x001010080000FFFFUL,
/* 0x00F8, */ 0x001010080000FFFFUL,
/* 0x0100, */ 0x0000000000000000UL,
/* 0x0108, */ 0x000C04030000FFFFUL,
/* 0x0110, */ 0x001010080000FFFFUL,
/* 0x0118, */ 0x001010080000FFFFUL,
/* 0x0120, */ 0x0000000000000000UL,
/* 0x0128, */ 0x000C100E0000FFFFUL,
/* 0x0130, */ 0x0000000000000000UL,
/* 0x0138, */ 0x001008050000FFFFUL,
/* 0x0140, */ 0x001008050000FFFFUL,
/* 0x0148, */ 0x001008050000FFFFUL,
/* 0x0150, */ 0x001008050000FFFFUL,
/* 0x0158, */ 0x001008050000FFFFUL,
/* 0x0160, */ 0x001008050000FFFFUL,
/* 0x0168, */ 0x001008050000FFFFUL,
/* 0x0170, */ 0x001008050000FFFFUL,
/* 0x0178, */ 0x001004030000FFFFUL,
/* 0x0180, */ 0x001004030000FFFFUL,
/* 0x0188, */ 0x001004030000FFFFUL,
/* 0x0190, */ 0x001014140000FFFFUL,
/* 0x0198, */ 0x001014140000FFFFUL,
/* 0x01A0, */ 0x001008050000FFFFUL,
/* 0x01A8, */ 0x001008050000FFFFUL,
/* 0x01B0, */ 0x001008050000FFFFUL,
/* 0x01B8, */ 0x0000000000000000UL,
/* 0x01C0, */ 0x0000000000000000UL,
/* 0x01C8, */ 0x0000000000000000UL,
/* 0x01D0, */ 0x0000000000000000UL,
/* 0x01D8, */ 0x0000000000000000UL,
/* 0x01E0, */ 0x0000000000000000UL,
/* 0x01E8, */ 0x0000000000000000UL,
/* 0x01F0, */ 0x0000000000000000UL,
/* 0x01F8, */ 0x0000000000000000UL,
/* 0x0200, */ 0x0000000000000000UL,
/* 0x0208, */ 0x0000000000000000UL,
/* 0x0210, */ 0x0000000000000000UL,
/* 0x0218, */ 0x0000000000000000UL,
/* 0x0220, */ 0x0000000000000000UL,
/* 0x0228, */ 0x0000000000000000UL,
/* 0x0230, */ 0x0000000000000000UL,
/* 0x0238, */ 0x0000000000000000UL,
/* 0x0240, */ 0x0000000000000000UL,
/* 0x0248, */ 0x0000000000000000UL,
/* 0x0250, */ 0x0000000000000000UL,
/* 0x0258, */ 0x0000000000000000UL,
/* 0x0260, */ 0x0000000000000000UL,
/* 0x0268, */ 0x001408010000FFFFUL,
/* 0x0270, */ 0x001404010000FFFFUL,
/* 0x0278, */ 0x0000000000000000UL,
/* 0x0280, */ 0x0000000000000000UL,
/* 0x0288, */ 0x0000000000000000UL,
/* 0x0290, */ 0x001408010000FFFFUL,
/* 0x0298, */ 0x001404010000FFFFUL,
/* 0x02A0, */ 0x000C04010000FFFFUL,
/* 0x02A8, */ 0x000C04010000FFFFUL,
/* 0x02B0, */ 0x001404010000FFFFUL,
/* 0x02B8, */ 0x0000000000000000UL,
/* 0x02C0, */ 0x0000000000000000UL,
/* 0x02C8, */ 0x0000000000000000UL,
/* 0x02D0, */ 0x000C04010000FFFFUL,
/* 0x02D8, */ 0x000C04010000FFFFUL,
/* 0x02E0, */ 0x001404010000FFFFUL,
/* 0x02E8, */ 0x0000000000000000UL,
/* 0x02F0, */ 0x0000000000000000UL,
/* 0x02F8, */ 0x0000000000000000UL,
/* 0x0300, */ 0x0000000000000000UL,
/* 0x0308, */ 0x0000000000000000UL,
/* 0x0310, */ 0x0000000000000000UL,
/* 0x0318, */ 0x0000000000000000UL,
/* 0x0320, */ 0x0000000000000000UL,
/* 0x0328, */ 0x0000000000000000UL,
/* 0x0330, */ 0x0000000000000000UL,
/* 0x0338, */ 0x0000000000000000UL,
};
static const uint64_t mstat_be[] = {
/* 0x0000, */ 0x001200100C89C401UL,
/* 0x0008, */ 0x001200100C89C401UL,
/* 0x0010, */ 0x001200100C89C401UL,
/* 0x0018, */ 0x001200100C89C401UL,
/* 0x0020, */ 0x001100100C803401UL,
/* 0x0028, */ 0x001100100C80FC01UL,
/* 0x0030, */ 0x0000000000000000UL,
/* 0x0038, */ 0x0000000000000000UL,
/* 0x0040, */ 0x0000000000000000UL,
/* 0x0048, */ 0x0000000000000000UL,
/* 0x0050, */ 0x0000000000000000UL,
/* 0x0058, */ 0x0000000000000000UL,
/* 0x0060, */ 0x0000000000000000UL,
/* 0x0068, */ 0x001100100C803401UL,
/* 0x0070, */ 0x0000000000000000UL,
/* 0x0078, */ 0x0000000000000000UL,
/* 0x0080, */ 0x0000000000000000UL,
/* 0x0088, */ 0x0000000000000000UL,
/* 0x0090, */ 0x0000000000000000UL,
/* 0x0098, */ 0x0000000000000000UL,
/* 0x00A0, */ 0x0000000000000000UL,
/* 0x00A8, */ 0x0000000000000000UL,
/* 0x00B0, */ 0x0000000000000000UL,
/* 0x00B8, */ 0x001100100C803401UL,
/* 0x00C0, */ 0x0000000000000000UL,
/* 0x00C8, */ 0x0000000000000000UL,
/* 0x00D0, */ 0x0000000000000000UL,
/* 0x00D8, */ 0x0000000000000000UL,
/* 0x00E0, */ 0x0000000000000000UL,
/* 0x00E8, */ 0x001100100C803401UL,
/* 0x00F0, */ 0x0000000000000000UL,
/* 0x00F8, */ 0x0000000000000000UL,
/* 0x0100, */ 0x0000000000000000UL,
/* 0x0108, */ 0x0000000000000000UL,
/* 0x0110, */ 0x0000000000000000UL,
/* 0x0118, */ 0x0000000000000000UL,
/* 0x0120, */ 0x0000000000000000UL,
/* 0x0128, */ 0x0000000000000000UL,
/* 0x0130, */ 0x001100100C803401UL,
/* 0x0138, */ 0x0000000000000000UL,
/* 0x0140, */ 0x0000000000000000UL,
/* 0x0148, */ 0x0000000000000000UL,
/* 0x0150, */ 0x0000000000000000UL,
/* 0x0158, */ 0x0000000000000000UL,
/* 0x0160, */ 0x0000000000000000UL,
/* 0x0168, */ 0x0000000000000000UL,
/* 0x0170, */ 0x0000000000000000UL,
/* 0x0178, */ 0x0000000000000000UL,
/* 0x0180, */ 0x0000000000000000UL,
/* 0x0188, */ 0x0000000000000000UL,
/* 0x0190, */ 0x0000000000000000UL,
/* 0x0198, */ 0x0000000000000000UL,
/* 0x01A0, */ 0x0000000000000000UL,
/* 0x01A8, */ 0x0000000000000000UL,
/* 0x01B0, */ 0x0000000000000000UL,
/* 0x01B8, */ 0x001100100C803401UL,
/* 0x01C0, */ 0x001100800C8FFC01UL,
/* 0x01C8, */ 0x001100800C8FFC01UL,
/* 0x01D0, */ 0x001100800C8FFC01UL,
/* 0x01D8, */ 0x001100800C8FFC01UL,
/* 0x01E0, */ 0x001100100C80FC01UL,
/* 0x01E8, */ 0x001200100C80FC01UL,
/* 0x01F0, */ 0x001100100C80FC01UL,
/* 0x01F8, */ 0x001100100C803401UL,
/* 0x0200, */ 0x001100100C80FC01UL,
/* 0x0208, */ 0x001200100C80FC01UL,
/* 0x0210, */ 0x001100100C80FC01UL,
/* 0x0218, */ 0x001100100C825801UL,
/* 0x0220, */ 0x001100100C825801UL,
/* 0x0228, */ 0x001100100C803401UL,
/* 0x0230, */ 0x001100100C825801UL,
/* 0x0238, */ 0x001100100C825801UL,
/* 0x0240, */ 0x001200100C8BB801UL,
/* 0x0248, */ 0x001100200C8FFC01UL,
/* 0x0250, */ 0x001200100C8BB801UL,
/* 0x0258, */ 0x001100200C8FFC01UL,
/* 0x0260, */ 0x001100100C84E401UL,
/* 0x0268, */ 0x0000000000000000UL,
/* 0x0270, */ 0x0000000000000000UL,
/* 0x0278, */ 0x001100100C81F401UL,
/* 0x0280, */ 0x001100100C803401UL,
/* 0x0288, */ 0x001100100C803401UL,
/* 0x0290, */ 0x0000000000000000UL,
/* 0x0298, */ 0x0000000000000000UL,
/* 0x02A0, */ 0x0000000000000000UL,
/* 0x02A8, */ 0x0000000000000000UL,
/* 0x02B0, */ 0x0000000000000000UL,
/* 0x02B8, */ 0x001100100C803401UL,
/* 0x02C0, */ 0x001100100C803401UL,
/* 0x02C8, */ 0x001100100C803401UL,
/* 0x02D0, */ 0x0000000000000000UL,
/* 0x02D8, */ 0x0000000000000000UL,
/* 0x02E0, */ 0x0000000000000000UL,
/* 0x02E8, */ 0x001100100C803401UL,
/* 0x02F0, */ 0x001100300C8FFC01UL,
/* 0x02F8, */ 0x001100500C8FFC01UL,
/* 0x0300, */ 0x001100100C803401UL,
/* 0x0308, */ 0x001100300C8FFC01UL,
/* 0x0310, */ 0x001100500C8FFC01UL,
/* 0x0318, */ 0x001200100C803401UL,
/* 0x0320, */ 0x001100300C8FFC01UL,
/* 0x0328, */ 0x001100500C8FFC01UL,
/* 0x0330, */ 0x001100300C8FFC01UL,
/* 0x0338, */ 0x001100500C8FFC01UL,
};
#endif
...@@ -12,29 +12,34 @@ ...@@ -12,29 +12,34 @@
#include "../qos_reg.h" #include "../qos_reg.h"
#include "qos_init_h3_v20.h" #include "qos_init_h3_v20.h"
#define RCAR_QOS_VERSION "rev.0.21" #define RCAR_QOS_VERSION "rev.0.21"
#define QOSWT_TIME_BANK0 (20000000U) /* unit:ns */ #define QOSWT_TIME_BANK0 20000000U /* unit:ns */
#define QOSWT_WTEN_ENABLE (0x1U) #define QOSWT_WTEN_ENABLE 0x1U
#define QOSCTRL_REF_ARS_ARBSTOPCYCLE_H3_20 (SL_INIT_SSLOTCLK_H3_20 - 0x5U) #define QOSCTRL_REF_ARS_ARBSTOPCYCLE_H3_20 (SL_INIT_SSLOTCLK_H3_20 - 0x5U)
#define OSWT_WTREF_SLOT0_EN_REQ1_SLOT (3U) #define OSWT_WTREF_SLOT0_EN_REQ1_SLOT 3U
#define OSWT_WTREF_SLOT0_EN_REQ2_SLOT (9U) #define OSWT_WTREF_SLOT0_EN_REQ2_SLOT 9U
#define QOSWT_WTREF_SLOT0_EN ((0x1U << OSWT_WTREF_SLOT0_EN_REQ1_SLOT) | (0x1U << OSWT_WTREF_SLOT0_EN_REQ2_SLOT)) #define QOSWT_WTREF_SLOT0_EN \
#define QOSWT_WTREF_SLOT1_EN ((0x1U << OSWT_WTREF_SLOT0_EN_REQ1_SLOT) | (0x1U << OSWT_WTREF_SLOT0_EN_REQ2_SLOT)) ((0x1U << OSWT_WTREF_SLOT0_EN_REQ1_SLOT) | \
(0x1U << OSWT_WTREF_SLOT0_EN_REQ2_SLOT))
#define QOSWT_WTSET0_REQ_SSLOT0 (5U) #define QOSWT_WTREF_SLOT1_EN \
#define WT_BASE_SUB_SLOT_NUM0 (12U) ((0x1U << OSWT_WTREF_SLOT0_EN_REQ1_SLOT) | \
#define QOSWT_WTSET0_PERIOD0_H3_20 ((QOSWT_TIME_BANK0/QOSWT_WTSET0_CYCLE_H3_20)-1U) (0x1U << OSWT_WTREF_SLOT0_EN_REQ2_SLOT))
#define QOSWT_WTSET0_SSLOT0 (QOSWT_WTSET0_REQ_SSLOT0 -1U)
#define QOSWT_WTSET0_SLOTSLOT0 (WT_BASE_SUB_SLOT_NUM0 -1U) #define QOSWT_WTSET0_REQ_SSLOT0 5U
#define WT_BASE_SUB_SLOT_NUM0 12U
#define QOSWT_WTSET1_PERIOD1_H3_20 ((QOSWT_TIME_BANK0/QOSWT_WTSET0_CYCLE_H3_20)-1U) #define QOSWT_WTSET0_PERIOD0_H3_20 \
#define QOSWT_WTSET1_SSLOT1 (QOSWT_WTSET0_REQ_SSLOT0 -1U) ((QOSWT_TIME_BANK0 / QOSWT_WTSET0_CYCLE_H3_20) - 1U)
#define QOSWT_WTSET1_SLOTSLOT1 (WT_BASE_SUB_SLOT_NUM0 -1U) #define QOSWT_WTSET0_SSLOT0 (QOSWT_WTSET0_REQ_SSLOT0 - 1U)
#define QOSWT_WTSET0_SLOTSLOT0 (WT_BASE_SUB_SLOT_NUM0 - 1U)
#define QOSWT_WTSET1_PERIOD1_H3_20 \
((QOSWT_TIME_BANK0 / QOSWT_WTSET0_CYCLE_H3_20) - 1U)
#define QOSWT_WTSET1_SSLOT1 (QOSWT_WTSET0_REQ_SSLOT0 - 1U)
#define QOSWT_WTSET1_SLOTSLOT1 (WT_BASE_SUB_SLOT_NUM0 - 1U)
#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT #if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
...@@ -56,79 +61,52 @@ ...@@ -56,79 +61,52 @@
#endif #endif
static void dbsc_setting(void) struct rcar_gen3_dbsc_qos_settings h3_v20_qos[] = {
{
uint32_t md = 0;
/* Register write enable */
io_write_32(DBSC_DBSYSCNT0, 0x00001234U);
/* BUFCAM settings */ /* BUFCAM settings */
io_write_32(DBSC_DBCAM0CNF1, 0x00043218U); /* dbcam0cnf1 */ { DBSC_DBCAM0CNF1, 0x00043218U },
io_write_32(DBSC_DBCAM0CNF2, 0x000000F4U); /* dbcam0cnf2 */ { DBSC_DBCAM0CNF2, 0x000000F4U },
io_write_32(DBSC_DBCAM0CNF3, 0x00000000U); /* dbcam0cnf3 */ { DBSC_DBCAM0CNF3, 0x00000000U },
io_write_32(DBSC_DBSCHCNT0, 0x000F0037U); /* dbschcnt0 */ { DBSC_DBSCHCNT0, 0x000F0037U },
io_write_32(DBSC_DBSCHSZ0, 0x00000001U); /* dbschsz0 */ { DBSC_DBSCHSZ0, 0x00000001U },
io_write_32(DBSC_DBSCHRW0, 0x22421111U); /* dbschrw0 */ { DBSC_DBSCHRW0, 0x22421111U },
md = (*((volatile uint32_t *)RST_MODEMR) & 0x000A0000) >> 17; /* DDR3 */
{ DBSC_SCFCTST2, 0x012F1123U },
switch (md) {
case 0x0:
/* DDR3200 */
io_write_32(DBSC_SCFCTST2, 0x012F1123U);
break;
case 0x1: /* MD19=0,MD17=1 : LPDDR4-3000, 4GByte(1GByte x4) */
/* DDR2800 */
io_write_32(DBSC_SCFCTST2, 0x012F1123U);
break;
case 0x4: /* MD19=1,MD17=0 : LPDDR4-2400, 4GByte(1GByte x4) */
/* DDR2400 */
io_write_32(DBSC_SCFCTST2, 0x012F1123U);
break;
default: /* MD19=1,MD17=1 : LPDDR4-1600, 4GByte(1GByte x4) */
/* DDR1600 */
io_write_32(DBSC_SCFCTST2, 0x012F1123U);
break;
}
/* QoS Settings */ /* QoS Settings */
io_write_32(DBSC_DBSCHQOS00, 0x00000F00U); { DBSC_DBSCHQOS00, 0x00000F00U },
io_write_32(DBSC_DBSCHQOS01, 0x00000B00U); { DBSC_DBSCHQOS01, 0x00000B00U },
io_write_32(DBSC_DBSCHQOS02, 0x00000000U); { DBSC_DBSCHQOS02, 0x00000000U },
io_write_32(DBSC_DBSCHQOS03, 0x00000000U); { DBSC_DBSCHQOS03, 0x00000000U },
io_write_32(DBSC_DBSCHQOS40, 0x00000300U); { DBSC_DBSCHQOS40, 0x00000300U },
io_write_32(DBSC_DBSCHQOS41, 0x000002F0U); { DBSC_DBSCHQOS41, 0x000002F0U },
io_write_32(DBSC_DBSCHQOS42, 0x00000200U); { DBSC_DBSCHQOS42, 0x00000200U },
io_write_32(DBSC_DBSCHQOS43, 0x00000100U); { DBSC_DBSCHQOS43, 0x00000100U },
io_write_32(DBSC_DBSCHQOS90, 0x00000100U); { DBSC_DBSCHQOS90, 0x00000100U },
io_write_32(DBSC_DBSCHQOS91, 0x000000F0U); { DBSC_DBSCHQOS91, 0x000000F0U },
io_write_32(DBSC_DBSCHQOS92, 0x000000A0U); { DBSC_DBSCHQOS92, 0x000000A0U },
io_write_32(DBSC_DBSCHQOS93, 0x00000040U); { DBSC_DBSCHQOS93, 0x00000040U },
io_write_32(DBSC_DBSCHQOS120, 0x00000040U); { DBSC_DBSCHQOS120, 0x00000040U },
io_write_32(DBSC_DBSCHQOS121, 0x00000030U); { DBSC_DBSCHQOS121, 0x00000030U },
io_write_32(DBSC_DBSCHQOS122, 0x00000020U); { DBSC_DBSCHQOS122, 0x00000020U },
io_write_32(DBSC_DBSCHQOS123, 0x00000010U); { DBSC_DBSCHQOS123, 0x00000010U },
io_write_32(DBSC_DBSCHQOS130, 0x00000100U); { DBSC_DBSCHQOS130, 0x00000100U },
io_write_32(DBSC_DBSCHQOS131, 0x000000F0U); { DBSC_DBSCHQOS131, 0x000000F0U },
io_write_32(DBSC_DBSCHQOS132, 0x000000A0U); { DBSC_DBSCHQOS132, 0x000000A0U },
io_write_32(DBSC_DBSCHQOS133, 0x00000040U); { DBSC_DBSCHQOS133, 0x00000040U },
io_write_32(DBSC_DBSCHQOS140, 0x000000C0U); { DBSC_DBSCHQOS140, 0x000000C0U },
io_write_32(DBSC_DBSCHQOS141, 0x000000B0U); { DBSC_DBSCHQOS141, 0x000000B0U },
io_write_32(DBSC_DBSCHQOS142, 0x00000080U); { DBSC_DBSCHQOS142, 0x00000080U },
io_write_32(DBSC_DBSCHQOS143, 0x00000040U); { DBSC_DBSCHQOS143, 0x00000040U },
io_write_32(DBSC_DBSCHQOS150, 0x00000040U); { DBSC_DBSCHQOS150, 0x00000040U },
io_write_32(DBSC_DBSCHQOS151, 0x00000030U); { DBSC_DBSCHQOS151, 0x00000030U },
io_write_32(DBSC_DBSCHQOS152, 0x00000020U); { DBSC_DBSCHQOS152, 0x00000020U },
io_write_32(DBSC_DBSCHQOS153, 0x00000010U); { DBSC_DBSCHQOS153, 0x00000010U },
};
/* Register write protect */
io_write_32(DBSC_DBSYSCNT0, 0x00000000U);
}
void qos_init_h3_v20(void) void qos_init_h3_v20(void)
{ {
dbsc_setting(); rcar_qos_dbsc_setting(h3_v20_qos, ARRAY_SIZE(h3_v20_qos), true);
/* DRAM Split Address mapping */ /* DRAM Split Address mapping */
#if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \ #if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \
...@@ -188,7 +166,6 @@ void qos_init_h3_v20(void) ...@@ -188,7 +166,6 @@ void qos_init_h3_v20(void)
io_write_32(QOSCTRL_REF_ARS, 0x00330000U); io_write_32(QOSCTRL_REF_ARS, 0x00330000U);
#endif /* RCAR_REWT_TRAINING != RCAR_REWT_TRAINING_DISABLE */ #endif /* RCAR_REWT_TRAINING != RCAR_REWT_TRAINING_DISABLE */
{
uint32_t i; uint32_t i;
for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) { for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) {
...@@ -211,7 +188,6 @@ void qos_init_h3_v20(void) ...@@ -211,7 +188,6 @@ void qos_init_h3_v20(void)
io_write_64(QOSWT_BE_WTQOS_BANK1 + i * 8, qoswt_be[i]); io_write_64(QOSWT_BE_WTQOS_BANK1 + i * 8, qoswt_be[i]);
} }
#endif /* RCAR_REWT_TRAINING != RCAR_REWT_TRAINING_DISABLE */ #endif /* RCAR_REWT_TRAINING != RCAR_REWT_TRAINING_DISABLE */
}
/* 3DG bus Leaf setting */ /* 3DG bus Leaf setting */
io_write_32(GPU_ACT0, 0x00000000U); io_write_32(GPU_ACT0, 0x00000000U);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment