Tool/software:
Hi experts,
We have previously successfully used one DPI to output a set of camera data.
Now we intend to use dual DPI to output two sets of camera data.

I enabled ENABLE_DSS_DUAL in the app_cfg_mcu2_0.h file.
However, from the comments in ENABLE_DSS_DUAL definition, it is known that HDMI and EDP are enabled by default.

I made the following modifications to adapt to the dual DPI.
diff --git a/platform/j721e/rtos/common/app_cfg_mcu2_0.h b/platform/j721e/rtos/common/app_cfg_mcu2_0.h
index 0b6ac38..d9b2154 100755
--- a/platform/j721e/rtos/common/app_cfg_mcu2_0.h
+++ b/platform/j721e/rtos/common/app_cfg_mcu2_0.h
@@ -83,8 +83,8 @@
* - When ENABLE_DSS_SINGLE is defined, only one of ENABLE_DSS_HDMI or ENABLE_DSS_EDP should be defined
* - When ENABLE_DSS_DUAL is defined, ENABLE_DSS_HDMI and ENABLE_DSS_EDP are not used, both EDP and HDMI are enabled unconditionally
*/
- #define ENABLE_DSS_SINGLE
- #undef ENABLE_DSS_DUAL
+ #undef ENABLE_DSS_SINGLE
+ #define ENABLE_DSS_DUAL
/* define below to enable eDP display,
make sure to undef ENABLE_DSS_HDMI & ENABLE_DSS_DSI as well */
diff --git a/platform/j721e/rtos/common/app_init.c b/platform/j721e/rtos/common/app_init.c
index e9589e0..219165b 100755
--- a/platform/j721e/rtos/common/app_init.c
+++ b/platform/j721e/rtos/common/app_init.c
@@ -656,15 +656,15 @@ int32_t appInit()
/* Do not rely on "init". Always provide known good tmings */
for(i=0; i<2; i++)
{
- prm.display[i].timings.width = 1920U;
- prm.display[i].timings.height = 1080U;
- prm.display[i].timings.hFrontPorch = 88U;
- prm.display[i].timings.hBackPorch = 148U;
- prm.display[i].timings.hSyncLen = 44U;
- prm.display[i].timings.vFrontPorch = 4U;
- prm.display[i].timings.vBackPorch = 36U;
+ prm.display[i].timings.width = 1280U;
+ prm.display[i].timings.height = 720U;
+ prm.display[i].timings.hFrontPorch = 640U;
+ prm.display[i].timings.hBackPorch = 0U;
+ prm.display[i].timings.hSyncLen = 0U;
+ prm.display[i].timings.vFrontPorch = 5U;
+ prm.display[i].timings.vBackPorch = 20U;
prm.display[i].timings.vSyncLen = 5U;
- prm.display[i].timings.pixelClock = 148500000ULL;
+ prm.display[i].timings.pixelClock = 72000000ULL;
}
status = appDssDualDisplayDefaultInit(&prm);
diff --git a/utils/dss/include/app_dss_defaults.h b/utils/dss/include/app_dss_defaults.h
index a0f0220..25c7a72 100755
--- a/utils/dss/include/app_dss_defaults.h
+++ b/utils/dss/include/app_dss_defaults.h
@@ -93,6 +93,8 @@ extern "C" {
/** \brief Enables DSI output on AOU LCD Display */
#define APP_DSS_DEFAULT_DISPLAY_TYPE_DSI (2u)
+#define APP_DSS_DEFAULT_DISPLAY_TYPE_DPI1_HDMI (3u)
+
/* ========================================================================== */
/* Structure Declarations */
/* ========================================================================== */
diff --git a/utils/dss/src/app_dss_dual_display_defaults.c b/utils/dss/src/app_dss_dual_display_defaults.c
index 2d890d0..1c35f24 100755
--- a/utils/dss/src/app_dss_dual_display_defaults.c
+++ b/utils/dss/src/app_dss_dual_display_defaults.c
@@ -80,7 +80,7 @@ void appDssDualDisplayDefaultSetDefaultPrm(app_dss_dual_display_default_prm_t *d
if(i==0)
{
- prm->display_type = APP_DSS_DEFAULT_DISPLAY_TYPE_EDP;
+ prm->display_type = APP_DSS_DEFAULT_DISPLAY_TYPE_DPI1_HDMI;
}
else
{
@@ -136,15 +136,15 @@ int32_t appDssDualDisplayDefaultInit(app_dss_dual_display_default_prm_t *dual_di
memcpy(&obj->initPrm, prm, sizeof(*prm));
- if(prm->display_type==APP_DSS_DEFAULT_DISPLAY_TYPE_EDP)
+ if(prm->display_type==APP_DSS_DEFAULT_DISPLAY_TYPE_DPI1_HDMI)
{
- appLogPrintf("DSS DUAL DISPLAY: Display %d type is eDP !!!\n", i);
+ appLogPrintf("DSS DUAL DISPLAY: Display %d type is HDMI1 !!!\n", i);
obj->nodeOverlayId = APP_DCTRL_NODE_OVERLAY1;
obj->nodeVpId = APP_DCTRL_NODE_VP1;
- obj->nodeDpiId = APP_DCTRL_NODE_EDP_DPI0;
+ obj->nodeDpiId = APP_DCTRL_NODE_DPI_DPI1;
obj->overlayId = APP_DSS_OVERLAY_ID_1;
obj->vpId = APP_DSS_VP_ID_1;
- obj->videoIfWidth = APP_DCTRL_VIFW_36BIT;
+ obj->videoIfWidth = APP_DCTRL_VIFW_10BIT;
}
else
{
@@ -154,7 +154,7 @@ int32_t appDssDualDisplayDefaultInit(app_dss_dual_display_default_prm_t *dual_di
obj->nodeDpiId = APP_DCTRL_NODE_DPI_DPI0;
obj->overlayId = APP_DSS_OVERLAY_ID_2;
obj->vpId = APP_DSS_VP_ID_2;
- obj->videoIfWidth = APP_DCTRL_VIFW_24BIT;
+ obj->videoIfWidth = APP_DCTRL_VIFW_10BIT;
}
appDssConfigurePm(prm);
diff --git a/utils/dss/src/app_dss_soc.c b/utils/dss/src/app_dss_soc.c
index 4d4b383..536a2c8 100755
--- a/utils/dss/src/app_dss_soc.c
+++ b/utils/dss/src/app_dss_soc.c
@@ -232,6 +232,14 @@ void appDssConfigurePm(app_dss_default_prm_t *prm)
SET_CLOCK_STATE(TISCI_DEV_DSS0, TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK, 0, TISCI_MSG_VALUE_CLOCK_SW_STATE_REQ);
SET_DEVICE_STATE_ON(TISCI_DEV_DSS0);
}
+ else if(prm->display_type==APP_DSS_DEFAULT_DISPLAY_TYPE_DPI1_HDMI)
+ {
+ SET_DEVICE_STATE_OFF(TISCI_DEV_DSS0);
+ SET_CLOCK_PARENT(TISCI_DEV_DSS0, TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK, TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK_PARENT_DPI1_EXT_CLKSEL_OUT0);
+ SET_CLOCK_FREQ (TISCI_DEV_DSS0, TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK, prm->timings.pixelClock);
+ SET_CLOCK_STATE(TISCI_DEV_DSS0, TISCI_DEV_DSS0_DSS_INST0_DPI_1_IN_2X_CLK, 0, TISCI_MSG_VALUE_CLOCK_SW_STATE_REQ);
+ SET_DEVICE_STATE_ON(TISCI_DEV_DSS0);
+ }
else if (prm->display_type==APP_DSS_DEFAULT_DISPLAY_TYPE_DSI)
{
#if defined (SOC_J721E)
However, when running the application, it was found that the vxVerifyGraph interface was stuck, and there are no error logs.

Before running the application, I first run "source ./vision_apps_init.sh", and there were the following errors.

Could you please help me check if there are any problems or omissions in my modifications?
Thank you!

