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.

[参考译文] AM623:连接到 7"或 10.1"显示时、基于 tiam62x 的定制电路板无法启动、但连接到桌面显示器时会启动

Guru**** 2837190 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1629195/am623-tiam62x-based-custom-board-is-not-booting-when-conneted-to-7-or-10-1-display-but-boots-when-connected-to-desktop-monitor

器件型号: AM623

我有一个基于 ti am62x 的定制控制器板。 我使用基于 PROCESSOR-SDK-scarthgap-chromium-11.00.09.04 的自定义 Yocto 映像、如果 连接了 1024x600 7 英寸 HDMI 显示器或 10.1 英寸显示器、系统将无法启动。 但是,如果我连接一个 24 英寸的桌面显示器,它会被引导,一旦启动完成,我可以断开桌面显示器,并可以连接 7 英寸显示器。 但是、如果我使用基于 phytec phycore am62x 的自定义 Yocto 映像、并使用 7 英寸显示屏、则会正常启动、而我不需要使用桌面监视器。 我应该对第一个图像进行哪些更改、以便任何显示都能正常工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sunil、
    您能详细说明一下“系统无法引导“吗? 您是否看到任何错误、如果看到、它们是什么? 您的两个自定义 Yocto 映像是否都位于不同的内核基线上?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在两个显示器上都使用一个图像。 桌面显示器显示我的屏幕和应用程序。 7 英寸显示屏不显示任何内容。
    在调试端口中、我获得了以下内容:
    dmesg | grep sii902x
    sii902x 1-003b:带有驱动程序 sii902x 的探测器失败、错误为–22

    dmesg | grep -ie “dss|tidss|HDMI|DRM"</s>“
    Platform 30200000.dss:递延探测器挂起:tidss:端口 1 探测器失败

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sunil、
    请分享完整的 dmesg。

    您的两个自定义 Yocto 映像是否都处于不同的内核基准线上?

    还请对上述内容作出评论。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../msg.txtHiDivyansh,
    ...

    您的两个自定义 Yocto 映像是否都位于不同的内核基线上? 编号  

     dmesg 位于附加的文件中

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sunil、
    由于这些是自定义层、因此我只能提供有限的帮助。
    1.首先、您应该检查两个自定义 Yocto 包之间的 tidss、sii902 和 OMAP-Li2c 驱动程序差异。
    2、驱动程序中的差别与  PROCESSOR-SDK-scarthgap-chromium-11.00.09.04 有什么区别?
    3.尝试添加调试日志、了解为何出现“sii902x 1-003b:驱动程序 sii902x 探测失败、错误为–22"(“(EINVAL 22 /*参数无效*/) 错误。
    4.请检查以下补丁是否有用:

    commit bb83e6e7b56e558cf322680f2b76de4f94459852
    Author: Andreas Kemnade <andreas@kemnade.info>
    Date:   Fri Feb 28 15:04:20 2025 +0100
    
        i2c: omap: fix IRQ storms
        
        commit 285df995f90e3d61d97f327d34b9659d92313314 upstream.
        
        On the GTA04A5 writing a reset command to the gyroscope causes IRQ
        storms because NACK IRQs are enabled and therefore triggered but not
        acked.
        
        Sending a reset command to the gyroscope by
        i2cset 1 0x69 0x14 0xb6
        with an additional debug print in the ISR (not the thread) itself
        causes
        
        [ 363.353515] i2c i2c-1: ioctl, cmd=0x720, arg=0xbe801b00
        [ 363.359039] omap_i2c 48072000.i2c: addr: 0x0069, len: 2, flags: 0x0, stop: 1
        [ 363.366180] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x1110)
        [ 363.371673] omap_i2c 48072000.i2c: IRQ (ISR = 0x0010)
        [ 363.376892] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x0102)
        [ 363.382263] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x0102)
        [ 363.387664] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x0102)
        repeating till infinity
        [...]
        (0x2 = NACK, 0x100 = Bus free, which is not enabled)
        Apparently no other IRQ bit gets set, so this stalls.
        
        Do not ignore enabled interrupts and make sure they are acked.
        If the NACK IRQ is not needed, it should simply not enabled, but
        according to the above log, caring about it is necessary unless
        the Bus free IRQ is enabled and handled. The assumption that is
        will always come with a ARDY IRQ, which was the idea behind
        ignoring it, proves wrong.
        It is true for simple reads from an unused address.
        
        To still avoid the i2cdetect trouble which is the reason for
        commit c770657bd261 ("i2c: omap: Fix standard mode false ACK readings"),
        avoid doing much about NACK in omap_i2c_xfer_data() which is used
        by both IRQ mode and polling mode, so also the false detection fix
        is extended to polling usage and IRQ storms are avoided.
        
        By changing this, the hardirq handler is not needed anymore to filter
        stuff.
        
        The mentioned gyro reset now just causes a -ETIMEDOUT instead of
        hanging the system.
        
        Fixes: c770657bd261 ("i2c: omap: Fix standard mode false ACK readings").
        CC: stable@kernel.org
        Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
        Tested-by: Nishanth Menon <nm@ti.com>
        Reviewed-by: Aniket Limaye <a-limaye@ti.com>
        Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
        Link: lore.kernel.org/.../20250228140420.379498-1-andreas@kemnade.info
        Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
    index 1d9ad25c89ae..8c9cf08ad45e 100644
    --- a/drivers/i2c/busses/i2c-omap.c
    +++ b/drivers/i2c/busses/i2c-omap.c
    @@ -1048,23 +1048,6 @@ static int omap_i2c_transmit_data(struct omap_i2c_dev *omap, u8 num_bytes,
     	return 0;
     }
     
    -static irqreturn_t
    -omap_i2c_isr(int irq, void *dev_id)
    -{
    -	struct omap_i2c_dev *omap = dev_id;
    -	irqreturn_t ret = IRQ_HANDLED;
    -	u16 mask;
    -	u16 stat;
    -
    -	stat = omap_i2c_read_reg(omap, OMAP_I2C_STAT_REG);
    -	mask = omap_i2c_read_reg(omap, OMAP_I2C_IE_REG) & ~OMAP_I2C_STAT_NACK;
    -
    -	if (stat & mask)
    -		ret = IRQ_WAKE_THREAD;
    -
    -	return ret;
    -}
    -
     static int omap_i2c_xfer_data(struct omap_i2c_dev *omap)
     {
     	u16 bits;
    @@ -1095,8 +1078,13 @@ static int omap_i2c_xfer_data(struct omap_i2c_dev *omap)
     		}
     
     		if (stat & OMAP_I2C_STAT_NACK) {
    -			err |= OMAP_I2C_STAT_NACK;
    +			omap->cmd_err |= OMAP_I2C_STAT_NACK;
     			omap_i2c_ack_stat(omap, OMAP_I2C_STAT_NACK);
    +
    +			if (!(stat & ~OMAP_I2C_STAT_NACK)) {
    +				err = -EAGAIN;
    +				break;
    +			}
     		}
     
     		if (stat & OMAP_I2C_STAT_AL) {
    @@ -1472,7 +1460,7 @@ omap_i2c_probe(struct platform_device *pdev)
     				IRQF_NO_SUSPEND, pdev->name, omap);
     	else
     		r = devm_request_threaded_irq(&pdev->dev, omap->irq,
    -				omap_i2c_isr, omap_i2c_isr_thread,
    +				NULL, omap_i2c_isr_thread,
     				IRQF_NO_SUSPEND | IRQF_ONESHOT,
     				pdev->name, omap);

    5.检查在您的非工作情况下,HDMI 桥接器是否能够获取和报告 EDID ?
    步骤:
    1. On Target: cat /sys/class/drm/card0-HDMI-A-1/edid > p.txt; copy p.txt to host machine
    2. On Host machine: install edid utils $sudo apt-get install read-edid
    3. On Host machine: cat p.txt | parse-edid

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Divyansh:  
    补丁似乎已经起作用。 我还做了一些调节器更改。 我的 7 英寸显示屏现在显示内容。
    访问 cat /sys/class/drm/card0-HDMI-A-1/edid.... EDID 为空。


    非常感谢