主题中讨论的其他器件:SK-AM62P-LP、 AM62P
工具/软件:
我们想在 DPI 模块的板中使用 BT656。

如何启用 DPI 输出 BT656?
DPI 输出 BT656?是否有任何指导文档和测试说明
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
我们想在 DPI 模块的板中使用 BT656。

如何启用 DPI 输出 BT656?
DPI 输出 BT656?是否有任何指导文档和测试说明
尊敬的客户:
您能参考以下代码和反馈吗?
静态 void dispc_vp_init (struct dispc_device *dispc)
{
unsigned int i;
dev_dbg (dispc->dev、"%s()\n"、__func__);
/*为所有 VP 启用伽玛阴影位字段*/
对于(i = 0;i < dispc->feat->num_Vps; i++){
VP_REG_FLD_MOD (dispc、I、DISPC_VP_CONFIG、1、2、 2);
/*在 VP 输出上选择 BT-656格式*/
VP_REG_FLD_MOD (dispc、I、DISPC_VP_CONFIG、1、20 20);
}
}
谢谢。
Linjun
硬件设计 SOC 为 AM62P52、使用的 DPI 引脚为 VOUT0_D2~D9 (AA23/Y23/AB23/AD23/AC23/AE23/AE22/AC22)。
我有 2个问题需要您确认:
&dss1_ports {
#address-cells = <1>;
#size-cells = <0>;
/* DSS1-VP1: DSI Output */
port@1 {
reg = <1>;
dss1_dpi1_out: endpoint {
remote-endpoint = <&dsi0_in>;
};
};
}; 那么 我配置 dpi 输出使用 DSS1-VP2参数是正确的吗? &dss1 {
status = "okay";
/* DSS1-VP2: DPI Output */
port@1 {
reg = <1>;
dpi_out: endpoint {
remote-endpoint = <&panel_bridge_in>;
};
};
}; 你(们)好
我使用的 DTS 是 DSS0 DPI 输出
panel0 {
compatible = "raspberrypi,7inch-dsi";
port {
panel_in: endpoint {
remote-endpoint = <&panel_bridge_out>;
};
};
};
bridge@40 {
compatible = "adi,max96705";
reg = <0x40>;
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
panel_bridge_in: endpoint {
remote-endpoint = <&dss0_dpi1_out>;
};
};
port@1 {
reg = <1>;
panel_bridge_out: endpoint {
remote-endpoint = <&panel_in>;
};
};
};
};
&dss0_ports {
/* DSS0-VP2: DPI/HDMI Output */
hdmi0_dss: port@1 {
reg = <1>;
dss0_dpi1_out: endpoint {
remote-endpoint = <&panel_bridge_in>;
};
};
};
kmstest 为 printf
root@longhorn:/app# kmstest
Connector 0/@40: DPI-1
Crtc 0/@38: 1920x1080@25.00 56.992 1920/48/32/80/- 1080/3/7/6/- 25 (25.00) 0xa 0x48
Plane 0/@31: 0,0-1920x1080
Fb 49 1920x1080-XR24
Atomic test failed: -22
我执行 devmem2命令、但失败并执行 printf
root@longhorn:/app# devmem2 0x3020b004 /dev/mem opened. Memory mapped at address 0xffff9aaa9000. Bus error (core dumped) root@longhorn:/app#。 使用面板时如何使用寄存器?
您好、
我们的 EVM 不支持 BT656、并且我们没有任何说明如何启用 BT656的软件驱动程序或文档。
如前所述、目前我们不支持 YUV 数据格式。
Wangpg,
您能不能使用 GEL 转储 DSS 模块、我们将支持您 实现 BT656输出。 谢谢。
/cfs-file/__key/communityserver-discussions-components-files/791/DSI.tar.xz
Linjun
drm_fb_helper_find_color_mode_format()
{
bpp = depth = color_mode = 16;
return drm_fb_helper_find_format(fb_helper, formats, format_count, bpp, depth);
}
同步状态。
20250421中提供的初始修补程序。
e2e.ti.com/.../AM62P_5F00_DPI_5F00_BT656_5F00_patch_5F00_20250421.7z
将来自 LH 团队的验证结果与初始补丁同步。
增补程序合并后、kmsprint 具有以下异常日志:

因此、客户检查了代码、发现 drivers/GPU/DRM/panel/panel-simple.c 与所需内容存在一些差异。

客户希望请求 TI 支持进行检查。 再发送一个问题。
1.再次检查 panel-simple.c 中的 bt656_480p 参数。
2.kmsprint 命令打印:编码器0 (39)无与日志不同、如何解决此错误?
非常感谢!
Yong
你(们)好
我使用的 SDK 版本是: 10.01.10.04; Linux Kerner 版本:TI-linux-kernel-6.6.58+git-ti。
1.我仅更改 硬件的 DDR 参数的源代码。
2.我已经合并了 bt656补丁,并看到文件: bt656_patch-20250428.tar.gz
但 kmsprint 没有面板参数:

尊敬的 Yong Zhang Divyansh Mittal :
我将 bt656合并到 EVM 板(SK-AM62P-LP)的 ti-processor-sdk-linux-am62xx-evm-10.01.10.04-Linux-x86-Install.bin。
我只修改内核(ti-linux-kernel-6.6.58+git-ti)源代码:

修改源代码见: bt656_patch-20250429.tar.gz
e2e.ti.com/.../bt656_5F00_patch_2D00_20250429.tar.gz
但 EVM 板通电,我 看到 kmsprint 错误:(如下面的 )所示

并且请参阅附件以了解 bt656_patch-20250429.tar.gz 中的完整启动日志。
请再次确认补丁是否完整且正确!!!
您好、
我看到你发布了2个结果,在第一个 kmsprint 没有抛出一个错误,而在第二个它确实。
您在两个版本之间有何变化? 请提供 git diff。
我看到您没有完全应用补丁!!
例如、对于 0003-hack-drm-tidss-Add-Bt656-progressive-mode-support.patch 中给出的修补程序、
tidss_disp.c 文件在 dispc_vp_enable ()函数中显示以下内容:
vfp = mode->vsync_start - mode->vdisplay;
vsw = mode->vsync_end - mode->vsync_start;
vbp = mode->vtotal - mode->vsync_end;
dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_H,
FLD_VAL(hsw - 1, 7, 0) |
FLD_VAL(hfp - 1, 19, 8) |
FLD_VAL(hbp - 1, 31, 20));
if (dispc->tidss->bt656_enabled) {
dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_H,
FLD_VAL(((hsw & 0xFF) - 1), 7, 0) |
FLD_VAL(hfp - 1, 19, 8) |
FLD_VAL(hbp - 1, 31, 20));
} else {
dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_H,
FLD_VAL(hsw - 1, 7, 0) |
FLD_VAL(hfp - 1, 19, 8) |
FLD_VAL(hbp - 1, 31, 20));
}
dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_V,
FLD_VAL(vsw - 1, 7, 0) |
FLD_VAL(vfp, 19, 8) |
FLD_VAL(vbp, 31, 20));
if (dispc->tidss->bt656_enabled) {
dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_V,
FLD_VAL(((hsw) >> 8), 3, 0) |
FLD_VAL(vfp, 19, 8) |
FLD_VAL(vbp, 31, 20));
} else {
dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_V,
FLD_VAL(vsw - 1, 7, 0) |
FLD_VAL(vfp, 19, 8) |
FLD_VAL(vbp, 31, 20));
}
ivs = !!(mode->flags & DRM_MODE_FLAG_NVSYNC);
ihs = !!(mode->flags & DRM_MODE_FLAG_NHSYNC);
而该补丁提到:
@@ -1350,15 +1351,29 @@ void dispc_vp_enable(struct dispc_device *dispc, u32 hw_videoport,
vsw = mode->vsync_end - mode->vsync_start;
vbp = mode->vtotal - mode->vsync_end;
- dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_H,
- FLD_VAL(hsw - 1, 7, 0) |
- FLD_VAL(hfp - 1, 19, 8) |
- FLD_VAL(hbp - 1, 31, 20));
+ if (dispc->tidss->bt656_enabled) {
+ dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_H,
+ FLD_VAL(((hsw & 0xFF) - 1), 7, 0) |
+ FLD_VAL(hfp - 1, 19, 8) |
+ FLD_VAL(hbp - 1, 31, 20));
+ } else {
+ dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_H,
+ FLD_VAL(hsw - 1, 7, 0) |
+ FLD_VAL(hfp - 1, 19, 8) |
+ FLD_VAL(hbp - 1, 31, 20));
+ }
- dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_V,
- FLD_VAL(vsw - 1, 7, 0) |
- FLD_VAL(vfp, 19, 8) |
- FLD_VAL(vbp, 31, 20));
+ if (dispc->tidss->bt656_enabled) {
+ dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_V,
+ FLD_VAL(((hsw) >> 8), 3, 0) |
+ FLD_VAL(vfp, 19, 8) |
+ FLD_VAL(vbp, 31, 20));
+ } else {
+ dispc_vp_write(dispc, hw_videoport, DISPC_VP_TIMING_V,
+ FLD_VAL(vsw - 1, 7, 0) |
+ FLD_VAL(vfp, 19, 8) |
+ FLD_VAL(vbp, 31, 20));
+ }
ivs = !!(mode->flags & DRM_MODE_FLAG_NVSYNC);
似乎处理了行添加、但行减法没有。 在其他一些地方也发现了这种情况。
请准确地应用补丁。 该补丁已经过测试、可以在我们这边正确地生成 kmprint 输出
如需进一步回复、请使用 git diff{file}>{name}.patch、然后共享这些补丁文件。
很抱歉,我检查了源代码,然后执行 git format-patch (0001-merge-ti-Bt656-patch.patch )。
但 kmsprint 错误信息是相同的(0001-merge-ti-Bt656-patch.log)。
e2e.ti.com/.../0001_2D00_merge_2D00_ti_2D00_bt656_2D00_patch.tar.gz
我使用 git am 合并补丁、0001和0002成功、但0003是错误。

有这个错误吗?
你好 Divyansh Mittal:
kmsprint 信息正常。 谢谢。
有一个可以在 DSI 接口、上调用的 Linux 内核 API
of_find_mipi_DSI_HOST_BY_NODE
MIPI_DSI_DEVICE_REGISTER_FULL

但在 DPI 接口上未找到相同的 API? 接下来我应该怎么做?
同步此问题以使每个人进入同一页。
亲爱的 Divyansh。
感谢 Linjun 的帮助与鹏起测试,下面是来自客户关于 BT656支持状态的最新结果, 输出分辨率为720*480。
客户已经检查了 pclk 和数据时序、但 很难找到问题的根本原因。
您是否希望提供有关如何进一步调试的建议?
非常感谢!
Yong
您好、
使用最新进度更新此主题:
使用以下更新的补丁 来更改先前使用的时序参数:
e2e.ti.com/.../bt656_5F00_23may.tar.gz
客户已经能够验证720x480帧缓冲区的工作情况。
客户需要分享 他们在屏幕上看到的内容? 该补丁启用测试图形。 您需要注释掉以下代码以禁用测试模式并查看实际显示是否正常:
//Setup test pattern // OVR_REG_FLD_MOD(dispc, hw_videoport, DISPC_OVR_CONFIG, // 1, 1, 1);
$ kmstest --flip
非常感谢、是工作正常。
static const struct drm_display_mode bt656_1080p_mode = {
.clock = 109600, // 25fps OK
.hdisplay = 1920,
.hsync_start = 1920 + 48,
.hsync_end = 1920 + 48 + 32,
.htotal = 1920 + 48 + 32 + 80, // 2080+1920 = 4000
.vdisplay = 1080,
.vsync_start = 1080 + 3,
.vsync_end = 1080 + 3 + 7,
.vtotal = 1080 + 3 + 7 + 6, // 1096
.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
};
static const struct panel_desc bt656_1080p = {
.modes = &bt656_1080p_mode,
.num_modes = 1,
.bpc = 8,
.size = {
.width = 129,
.height = 86,
},
.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE |
DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
.connector_type = DRM_MODE_CONNECTOR_DPI,
};