1 /*
2 * Copyright (c) Texas Instruments Incorporated 2018
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the
15 * distribution.
16 *
17 * Neither the name of Texas Instruments Incorporated nor the names of
18 * its contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
34 /**
35 * \file app_utils.c
36 *
37 * \brief DSS example utility APIs for J7
38 */
40 /* ========================================================================== */
41 /* Include Files */
42 /* ========================================================================== */
44 #include <ti/board/src/j721e_evm/include/board_control.h>
45 #include <ti/csl/soc/cslr_soc_ctrl_mmr.h>
46 #include <ti/drv/sciclient/sciclient.h>
47 #include <ti/drv/pm/pmlib.h>
48 #include "app_utils.h"
50 /* ========================================================================== */
51 /* Macros & Typedefs */
52 /* ========================================================================== */
55 /* ========================================================================== */
56 /* Structure Declarations */
57 /* ========================================================================== */
59 /* None */
61 /* ========================================================================== */
62 /* Function Declarations */
63 /* ========================================================================== */
65 /* None */
67 /* ========================================================================== */
68 /* Global Variables */
69 /* ========================================================================== */
71 /* None */
73 /* ========================================================================== */
74 /* Function Definitions */
75 /* ========================================================================== */
77 void App_configureSoC(void)
78 {
79 /* Set drive strength */
80 CSL_REG32_WR(CSL_WKUP_CTRL_MMR0_CFG0_BASE +
81 CSL_WKUP_CTRL_MMR_CFG0_H_IO_DRVSTRNGTH0_PROXY, 0xFU);
83 CSL_REG32_WR(CSL_WKUP_CTRL_MMR0_CFG0_BASE +
84 CSL_WKUP_CTRL_MMR_CFG0_V_IO_DRVSTRNGTH0_PROXY, 0xFU);
85 }
87 void App_configureLCD(uint32_t app_output)
88 {
89 int32_t status = PM_SUCCESS;
90 uint32_t regVal;
92 if(APP_OUTPUT_HDMI == app_output)
93 {
94 if(PM_SUCCESS == status)
95 {
96 status = Sciclient_pmSetModuleClkParent(TISCI_DEV_DSS0,
97 TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK,
98 TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK_PARENT_DPI0_EXT_CLKSEL_OUT0,
99 SCICLIENT_SERVICE_WAIT_FOREVER);
100 }
102 if(PM_SUCCESS == status)
103 {
104 status = Sciclient_pmSetModuleState(TISCI_DEV_DSS0,
105 TISCI_MSG_VALUE_DEVICE_SW_STATE_ON,
106 TISCI_MSG_FLAG_AOP,
107 SCICLIENT_SERVICE_WAIT_FOREVER);
108 }
110 if(PM_SUCCESS == status)
111 {
112 status = Sciclient_pmModuleClkRequest(TISCI_DEV_DSS0,
113 TISCI_DEV_DSS0_DSS_FUNC_CLK,
114 TISCI_MSG_VALUE_CLOCK_SW_STATE_REQ,
115 0,
116 SCICLIENT_SERVICE_WAIT_FOREVER);
117 }
119 if(PM_SUCCESS == status)
120 {
121 status = Sciclient_pmSetModuleClkFreq(TISCI_DEV_DSS0,
122 TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK,
123 148500000ULL,
124 0,
125 SCICLIENT_SERVICE_WAIT_FOREVER);
126 }
128 if(PM_SUCCESS == status)
129 {
130 status = Sciclient_pmModuleClkRequest(TISCI_DEV_DSS0,
131 TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK,
132 TISCI_MSG_VALUE_CLOCK_SW_STATE_REQ,
133 0,
134 SCICLIENT_SERVICE_WAIT_FOREVER);
135 }
136 if(PM_SUCCESS == status)
137 {
138 Board_control(BOARD_CTRL_CMD_SET_HDMI_MUX, (void*) 0U);
139 Board_control(BOARD_CTRL_CMD_SET_HDMI_PD_HIGH, (void*) 0U);
140 }
141 }
142 else if (APP_OUTPUT_DSI == app_output)
143 {
144 if(PM_SUCCESS == status)
145 {
146 status = Sciclient_pmSetModuleState(
147 TISCI_DEV_DSS_DSI0, TISCI_MSG_VALUE_DEVICE_SW_STATE_ON,
148 TISCI_MSG_FLAG_AOP, SCICLIENT_SERVICE_WAIT_FOREVER);
149 }
150 if(PM_SUCCESS == status)
151 {
152 status = Sciclient_pmSetModuleState(
153 TISCI_DEV_DPHY_TX0, TISCI_MSG_VALUE_DEVICE_SW_STATE_ON,
154 TISCI_MSG_FLAG_AOP, SCICLIENT_SERVICE_WAIT_FOREVER);
155 }
156 if(PM_SUCCESS == status)
157 {
158 status = Sciclient_pmSetModuleState(TISCI_DEV_DSS0,
159 TISCI_MSG_VALUE_DEVICE_SW_STATE_ON,
160 TISCI_MSG_FLAG_AOP,
161 SCICLIENT_SERVICE_WAIT_FOREVER);
162 }
163 if(PM_SUCCESS == status)
164 {
165 status = Sciclient_pmModuleClkRequest(TISCI_DEV_DSS0,
166 TISCI_DEV_DSS0_DSS_FUNC_CLK,
167 TISCI_MSG_VALUE_CLOCK_SW_STATE_REQ,
168 0,
169 SCICLIENT_SERVICE_WAIT_FOREVER);
170 }
171 if (PM_SUCCESS == status)
172 {
173 status = Sciclient_pmSetModuleClkParent(TISCI_DEV_DSS0,
174 TISCI_DEV_DSS0_DSS_INST0_DPI_2_IN_2X_CLK,
175 TISCI_DEV_DSS0_DSS_INST0_DPI_2_IN_2X_CLK_PARENT_HSDIV1_16FFT_MAIN_18_HSDIVOUT0_CLK,
176 SCICLIENT_SERVICE_WAIT_FOREVER);
177 }
178 if (PM_SUCCESS == status)
179 {
180 /* Set the clock at the desirable frequency*/
181 status = Sciclient_pmSetModuleClkFreq(TISCI_DEV_DSS0,
182 TISCI_DEV_DSS0_DSS_INST0_DPI_2_IN_2X_CLK, 74250000u,
183 TISCI_MSG_FLAG_CLOCK_ALLOW_FREQ_CHANGE,
184 SCICLIENT_SERVICE_WAIT_FOREVER);
185 }
186 }
187 else
188 {
189 if(PM_SUCCESS == status)
190 {
191 status = Sciclient_pmSetModuleState(TISCI_DEV_SERDES_10G0,
192 TISCI_MSG_VALUE_DEVICE_SW_STATE_ON,
193 TISCI_MSG_FLAG_AOP,
194 SCICLIENT_SERVICE_WAIT_FOREVER);
195 }
197 if(PM_SUCCESS == status)
198 {
199 status = Sciclient_pmSetModuleState(TISCI_DEV_DSS_EDP0,
200 TISCI_MSG_VALUE_DEVICE_SW_STATE_ON,
201 TISCI_MSG_FLAG_AOP,
202 SCICLIENT_SERVICE_WAIT_FOREVER);
203 }
205 /* Very Ugly Hack: Select DPI0 clk from DPI1_clk */
206 if(PM_SUCCESS == status)
207 {
208 status = Sciclient_pmSetModuleClkParent(TISCI_DEV_DSS0,
209 TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK,
210 TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK_PARENT_DPI0_EXT_CLKSEL_OUT0,
211 SCICLIENT_SERVICE_WAIT_FOREVER);
212 }
214 if(PM_SUCCESS == status)
215 {
216 status = Sciclient_pmSetModuleState(TISCI_DEV_DSS0,
217 TISCI_MSG_VALUE_DEVICE_SW_STATE_ON,
218 TISCI_MSG_FLAG_AOP,
219 SCICLIENT_SERVICE_WAIT_FOREVER);
220 }
222 if(PM_SUCCESS == status)
223 {
224 status = Sciclient_pmModuleClkRequest(TISCI_DEV_DSS0,
225 TISCI_DEV_DSS0_DSS_FUNC_CLK,
226 TISCI_MSG_VALUE_CLOCK_SW_STATE_REQ,
227 0,
228 SCICLIENT_SERVICE_WAIT_FOREVER);
229 }
231 if(PM_SUCCESS == status)
232 {
233 status = Sciclient_pmSetModuleClkFreq(TISCI_DEV_DSS0,
234 TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK,
235 148500000ULL,
236 0,
237 SCICLIENT_SERVICE_WAIT_FOREVER);
238 }
240 if(PM_SUCCESS == status)
241 {
242 status = Sciclient_pmModuleClkRequest(TISCI_DEV_DSS0,
243 TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK,
244 TISCI_MSG_VALUE_CLOCK_SW_STATE_REQ,
245 0,
246 SCICLIENT_SERVICE_WAIT_FOREVER);
247 }
249 if(PM_SUCCESS == status)
250 {
251 regVal = CSL_REG32_RD(CSL_CTRL_MMR0_CFG0_BASE +
252 CSL_MAIN_CTRL_MMR_CFG0_DSS_DISPC0_CLKSEL3);
253 CSL_FINS(regVal,
254 MAIN_CTRL_MMR_CFG0_DSS_DISPC0_CLKSEL3_DPI3_PCLK,
255 0x5U);
256 CSL_REG32_WR(CSL_CTRL_MMR0_CFG0_BASE +
257 CSL_MAIN_CTRL_MMR_CFG0_DSS_DISPC0_CLKSEL3, regVal);
258 }
259 }
261 }