]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/pdk.git/blob - packages/ti/drv/dss/examples/utils/app_utils_j721e.c
Fixed PDK-4921: Display example does not work for DSI output
[processor-sdk/pdk.git] / packages / ti / drv / dss / examples / utils / app_utils_j721e.c
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     }