1c67703ebSMarek Vasut /*
2*e366f8cfSDien Pham * Copyright (c) 2015-2024, Renesas Electronics Corporation
3c67703ebSMarek Vasut * All rights reserved.
4c67703ebSMarek Vasut *
5c67703ebSMarek Vasut * SPDX-License-Identifier: BSD-3-Clause
6c67703ebSMarek Vasut */
7c67703ebSMarek Vasut
8c67703ebSMarek Vasut #include <stdint.h>
9c67703ebSMarek Vasut
10c67703ebSMarek Vasut #include <common/debug.h>
11c67703ebSMarek Vasut
12c67703ebSMarek Vasut #include "../qos_common.h"
13c67703ebSMarek Vasut #include "../qos_reg.h"
14c67703ebSMarek Vasut #include "qos_init_v3m.h"
15c67703ebSMarek Vasut
16c67703ebSMarek Vasut #define RCAR_QOS_VERSION "rev.0.01"
17c67703ebSMarek Vasut
18c67703ebSMarek Vasut #include "qos_init_v3m_mstat.h"
19c67703ebSMarek Vasut
20c67703ebSMarek Vasut struct rcar_gen3_dbsc_qos_settings v3m_qos[] = {
21c67703ebSMarek Vasut /* BUFCAM settings */
22*e366f8cfSDien Pham { DBSC_DBCAM0CNF1, 0x00048218U },
23c67703ebSMarek Vasut { DBSC_DBCAM0CNF2, 0x000000F4 },
24c67703ebSMarek Vasut { DBSC_DBSCHCNT0, 0x080F003F },
25c67703ebSMarek Vasut { DBSC_DBSCHCNT1, 0x00001010 },
26c67703ebSMarek Vasut
27c67703ebSMarek Vasut { DBSC_DBSCHSZ0, 0x00000001 },
28c67703ebSMarek Vasut { DBSC_DBSCHRW0, 0x22421111 },
29c67703ebSMarek Vasut { DBSC_DBSCHRW1, 0x00180034 },
30c67703ebSMarek Vasut { DBSC_SCFCTST0, 0x180B1708 },
31c67703ebSMarek Vasut { DBSC_SCFCTST1, 0x0808070C },
32c67703ebSMarek Vasut { DBSC_SCFCTST2, 0x012F1123 },
33c67703ebSMarek Vasut
34c67703ebSMarek Vasut /* QoS Settings */
35c67703ebSMarek Vasut { DBSC_DBSCHQOS00, 0x0000F000 },
36c67703ebSMarek Vasut { DBSC_DBSCHQOS01, 0x0000E000 },
37c67703ebSMarek Vasut { DBSC_DBSCHQOS02, 0x00007000 },
38c67703ebSMarek Vasut { DBSC_DBSCHQOS03, 0x00000000 },
39c67703ebSMarek Vasut { DBSC_DBSCHQOS40, 0x0000F000 },
40c67703ebSMarek Vasut { DBSC_DBSCHQOS41, 0x0000EFFF },
41c67703ebSMarek Vasut { DBSC_DBSCHQOS42, 0x0000B000 },
42c67703ebSMarek Vasut { DBSC_DBSCHQOS43, 0x00000000 },
43c67703ebSMarek Vasut { DBSC_DBSCHQOS90, 0x0000F000 },
44c67703ebSMarek Vasut { DBSC_DBSCHQOS91, 0x0000EFFF },
45c67703ebSMarek Vasut { DBSC_DBSCHQOS92, 0x0000D000 },
46c67703ebSMarek Vasut { DBSC_DBSCHQOS93, 0x00000000 },
47c67703ebSMarek Vasut { DBSC_DBSCHQOS130, 0x0000F000 },
48c67703ebSMarek Vasut { DBSC_DBSCHQOS131, 0x0000EFFF },
49c67703ebSMarek Vasut { DBSC_DBSCHQOS132, 0x0000E800 },
50c67703ebSMarek Vasut { DBSC_DBSCHQOS133, 0x00007000 },
51c67703ebSMarek Vasut { DBSC_DBSCHQOS140, 0x0000F000 },
52c67703ebSMarek Vasut { DBSC_DBSCHQOS141, 0x0000EFFF },
53c67703ebSMarek Vasut { DBSC_DBSCHQOS142, 0x0000E800 },
54c67703ebSMarek Vasut { DBSC_DBSCHQOS143, 0x0000B000 },
55c67703ebSMarek Vasut { DBSC_DBSCHQOS150, 0x000007D0 },
56c67703ebSMarek Vasut { DBSC_DBSCHQOS151, 0x000007CF },
57c67703ebSMarek Vasut { DBSC_DBSCHQOS152, 0x000005D0 },
58c67703ebSMarek Vasut { DBSC_DBSCHQOS153, 0x000003D0 },
59c67703ebSMarek Vasut };
60c67703ebSMarek Vasut
qos_init_v3m(void)61c67703ebSMarek Vasut void qos_init_v3m(void)
62c67703ebSMarek Vasut {
63c67703ebSMarek Vasut return;
64c67703ebSMarek Vasut
65c67703ebSMarek Vasut rcar_qos_dbsc_setting(v3m_qos, ARRAY_SIZE(v3m_qos), false);
66c67703ebSMarek Vasut
67c67703ebSMarek Vasut #if !(RCAR_QOS_TYPE == RCAR_QOS_NONE)
68c67703ebSMarek Vasut #if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
69c67703ebSMarek Vasut NOTICE("BL2: QoS is default setting(%s)\n", RCAR_QOS_VERSION);
70c67703ebSMarek Vasut #endif
71c67703ebSMarek Vasut
72c67703ebSMarek Vasut /* Resource Alloc setting */
73c67703ebSMarek Vasut io_write_32(QOSCTRL_RAS, 0x00000020U);
74c67703ebSMarek Vasut io_write_32(QOSCTRL_FIXTH, 0x000F0005U);
75c67703ebSMarek Vasut io_write_32(QOSCTRL_REGGD, 0x00000004U);
76c67703ebSMarek Vasut io_write_64(QOSCTRL_DANN, 0x0202020104040200U);
77c67703ebSMarek Vasut io_write_32(QOSCTRL_DANT, 0x00201008U);
78c67703ebSMarek Vasut io_write_32(QOSCTRL_EC, 0x00080001U); /* need for H3 ES1 */
79c67703ebSMarek Vasut io_write_64(QOSCTRL_EMS, 0x0000000000000000U);
80c67703ebSMarek Vasut io_write_32(QOSCTRL_INSFC, 0x63C20001U);
81c67703ebSMarek Vasut io_write_32(QOSCTRL_BERR, 0x00000000U);
82c67703ebSMarek Vasut
83c67703ebSMarek Vasut /* QOSBW setting */
84c67703ebSMarek Vasut io_write_32(QOSCTRL_SL_INIT, 0x0305007DU);
85c67703ebSMarek Vasut io_write_32(QOSCTRL_REF_ARS, 0x00330000U);
86c67703ebSMarek Vasut
87c67703ebSMarek Vasut /* QOSBW SRAM setting */
88c67703ebSMarek Vasut uint32_t i;
89c67703ebSMarek Vasut
90c67703ebSMarek Vasut for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) {
91c67703ebSMarek Vasut io_write_64(QOSBW_FIX_QOS_BANK0 + i * 8, mstat_fix[i]);
92c67703ebSMarek Vasut io_write_64(QOSBW_FIX_QOS_BANK1 + i * 8, mstat_fix[i]);
93c67703ebSMarek Vasut }
94c67703ebSMarek Vasut for (i = 0U; i < ARRAY_SIZE(mstat_be); i++) {
95c67703ebSMarek Vasut io_write_64(QOSBW_BE_QOS_BANK0 + i * 8, mstat_be[i]);
96c67703ebSMarek Vasut io_write_64(QOSBW_BE_QOS_BANK1 + i * 8, mstat_be[i]);
97c67703ebSMarek Vasut }
98c67703ebSMarek Vasut
99c67703ebSMarek Vasut /* AXI-IF arbitration setting */
100c67703ebSMarek Vasut io_write_32(DBSC_AXARB, 0x18010000U);
101c67703ebSMarek Vasut
102c67703ebSMarek Vasut /* Resource Alloc start */
103c67703ebSMarek Vasut io_write_32(QOSCTRL_RAEN, 0x00000001U);
104c67703ebSMarek Vasut
105c67703ebSMarek Vasut /* QOSBW start */
106c67703ebSMarek Vasut io_write_32(QOSCTRL_STATQC, 0x00000001U);
107c67703ebSMarek Vasut
108c67703ebSMarek Vasut #else
109c67703ebSMarek Vasut NOTICE("BL2: QoS is None\n");
110c67703ebSMarek Vasut #endif /* !(RCAR_QOS_TYPE == RCAR_QOS_NONE) */
111c67703ebSMarek Vasut }
112