主题中讨论的其他器件: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,
};