blob: efe0c754d3a64e6d5e8d8ada2047f7e3829d93f1 [file] [log] [blame]
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +02001/*
2 * Copyright (c) 2018, Renesas Electronics Corporation. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <stdint.h>
8#include <debug.h>
9#include "../qos_common.h"
10#include "../qos_reg.h"
11#include "qos_init_e3_v10.h"
12
13#define RCAR_QOS_VERSION "rev.0.02"
14
15#define QOSCTRL_EARLYR (QOS_BASE1 + 0x0060U)
16#define QOSCTRL_FSS (QOS_BASE1 + 0x0048U)
17
18#define REF_ARS_ARBSTOPCYCLE_E3 (((SL_INIT_SSLOTCLK_E3) - 5U) << 16U)
19
20#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
21
22#if RCAR_REF_INT == RCAR_REF_DEFAULT
23#include "qos_init_e3_v10_mstat390.h"
24#else
25#include "qos_init_e3_v10_mstat780.h"
26#endif
27
28#endif
29
30static void dbsc_setting(void)
31{
32 /* Register write enable */
33 io_write_32(DBSC_DBSYSCNT0, 0x00001234U);
34
35 /* BUFCAM settings */
36 io_write_32(DBSC_DBCAM0CNF1, 0x00043218);
37 io_write_32(DBSC_DBCAM0CNF2, 0x000000F4);
38 io_write_32(DBSC_DBSCHCNT0, 0x000F0037);
39 io_write_32(DBSC_DBSCHSZ0, 0x00000001);
40 io_write_32(DBSC_DBSCHRW0, 0x22421111);
41
42 /* DDR3 */
43 io_write_32(DBSC_SCFCTST2, 0x012F1123);
44
45 /* QoS Settings */
46 io_write_32(DBSC_DBSCHQOS00, 0x00000F00);
47 io_write_32(DBSC_DBSCHQOS01, 0x00000B00);
48 io_write_32(DBSC_DBSCHQOS02, 0x00000000);
49 io_write_32(DBSC_DBSCHQOS03, 0x00000000);
50 io_write_32(DBSC_DBSCHQOS40, 0x00000300);
51 io_write_32(DBSC_DBSCHQOS41, 0x000002F0);
52 io_write_32(DBSC_DBSCHQOS42, 0x00000200);
53 io_write_32(DBSC_DBSCHQOS43, 0x00000100);
54 io_write_32(DBSC_DBSCHQOS90, 0x00000100);
55 io_write_32(DBSC_DBSCHQOS91, 0x000000F0);
56 io_write_32(DBSC_DBSCHQOS92, 0x000000A0);
57 io_write_32(DBSC_DBSCHQOS93, 0x00000040);
58 io_write_32(DBSC_DBSCHQOS130, 0x00000100);
59 io_write_32(DBSC_DBSCHQOS131, 0x000000F0);
60 io_write_32(DBSC_DBSCHQOS132, 0x000000A0);
61 io_write_32(DBSC_DBSCHQOS133, 0x00000040);
62 io_write_32(DBSC_DBSCHQOS140, 0x000000C0);
63 io_write_32(DBSC_DBSCHQOS141, 0x000000B0);
64 io_write_32(DBSC_DBSCHQOS142, 0x00000080);
65 io_write_32(DBSC_DBSCHQOS143, 0x00000040);
66 io_write_32(DBSC_DBSCHQOS150, 0x00000040);
67 io_write_32(DBSC_DBSCHQOS151, 0x00000030);
68 io_write_32(DBSC_DBSCHQOS152, 0x00000020);
69 io_write_32(DBSC_DBSCHQOS153, 0x00000010);
70
71 /* Register write protect */
72 io_write_32(DBSC_DBSYSCNT0, 0x00000000U);
73}
74
75void qos_init_e3_v10(void)
76{
77 dbsc_setting();
78
79 /* DRAM Split Address mapping */
80#if RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH
81#if RCAR_LSI == RCAR_E3
82#error "Don't set DRAM Split 4ch(E3)"
83#else
84 ERROR("DRAM Split 4ch not supported.(E3)");
85 panic();
86#endif
87#elif (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_2CH)
88#if RCAR_LSI == RCAR_E3
89#error "Don't set DRAM Split 2ch(E3)"
90#else
91 ERROR("DRAM Split 2ch not supported.(E3)");
92 panic();
93#endif
94#else
95 NOTICE("BL2: DRAM Split is OFF\n");
96#endif
97
98#if !(RCAR_QOS_TYPE == RCAR_QOS_NONE)
99#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
100 NOTICE("BL2: QoS is default setting(%s)\n", RCAR_QOS_VERSION);
101#endif
102
103#if RCAR_REF_INT == RCAR_REF_DEFAULT
104 NOTICE("BL2: DRAM refresh interval 3.9 usec\n");
105#else
106 NOTICE("BL2: DRAM refresh interval 7.8 usec\n");
107#endif
108
109 io_write_32(QOSCTRL_RAS, 0x00000020U);
110 io_write_64(QOSCTRL_DANN, 0x0404020002020201UL);
111 io_write_32(QOSCTRL_DANT, 0x00100804U);
112 io_write_32(QOSCTRL_FSS, 0x0000000AU);
113 io_write_32(QOSCTRL_INSFC, 0x06330001U);
114 io_write_32(QOSCTRL_EARLYR, 0x00000000U);
115 io_write_32(QOSCTRL_RACNT0, 0x00010003U);
116
117 io_write_32(QOSCTRL_SL_INIT,
118 SL_INIT_REFFSSLOT | SL_INIT_SLOTSSLOT |
119 SL_INIT_SSLOTCLK_E3);
120 io_write_32(QOSCTRL_REF_ARS, REF_ARS_ARBSTOPCYCLE_E3);
121
122 {
123 uint32_t i;
124
125 for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) {
126 io_write_64(QOSBW_FIX_QOS_BANK0 + i * 8, mstat_fix[i]);
127 io_write_64(QOSBW_FIX_QOS_BANK1 + i * 8, mstat_fix[i]);
128 }
129 for (i = 0U; i < ARRAY_SIZE(mstat_be); i++) {
130 io_write_64(QOSBW_BE_QOS_BANK0 + i * 8, mstat_be[i]);
131 io_write_64(QOSBW_BE_QOS_BANK1 + i * 8, mstat_be[i]);
132 }
133 }
134
135 /* 3DG bus Leaf setting */
136 io_write_32(GPU_ACT_GRD, 0x00001234U);
137 io_write_32(GPU_ACT0, 0x00000000U);
138 io_write_32(GPU_ACT1, 0x00000000U);
139 io_write_32(GPU_ACT2, 0x00000000U);
140 io_write_32(GPU_ACT3, 0x00000000U);
141 io_write_32(GPU_ACT_GRD, 0x00000000U);
142
143 /* RT bus Leaf setting */
144 io_write_32(RT_ACT0, 0x00000000U);
145 io_write_32(RT_ACT1, 0x00000000U);
146
147 /* CCI bus Leaf setting */
148 io_write_32(CPU_ACT0, 0x00000003U);
149 io_write_32(CPU_ACT1, 0x00000003U);
150
151 io_write_32(QOSCTRL_RAEN, 0x00000001U);
152
153 io_write_32(QOSCTRL_STATQC, 0x00000001U);
154#else
155 NOTICE("BL2: QoS is None\n");
156
157 io_write_32(QOSCTRL_RAEN, 0x00000001U);
158#endif
159}