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.

[参考译文] SK-AM62:LVDS 显示在基于 am62xx 的定制板上不工作。

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1252787/sk-am62-lvds-display-not-working-on-am62xx-based-custom-board

器件型号:SK-AM62
主题中讨论的其他器件:AB15

我们正在开发基于 am62xx 的定制板、以尝试启动 goodix LVDS 显示。   

启动时没有显示色条(例如启动屏幕)。

在启动时、我们会看到以下错误。   

[1.233035][DRM]已初始化 tidss 1.0.0 20180215、用于次要0上的30200000.DSS
[ 1.233219] tidss 30200000.dss:[DRM]* error* fbdev:设置通用仿真失败(ret=-12)

获取有关如何调试该问题的输入。

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

    您好!

    这里、我需要更多信息来帮助您进行调试。 请提供您在 SW 中所做的更改和测试 kmstest 的输出。

    此致、
    克鲁纳尔

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

    我使用 Yocto Dunfell & meta-ti 创建、地址为08.06.00.003分支。  

    您可以检查我的 dts 文件。   我会将 kmstest 包添加到 BSP 映像中并进一步更新。

    // SPDX-License-Identifier: GPL-2.0
    /*
     * AM625 SK: www.ti.com/.../sprr448
     *
     * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/
     */
    
    /dts-v1/;
    #include <dt-bindings/pinctrl/k3.h>
    #include <dt-bindings/leds/common.h>
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/net/ti-dp83867.h>
    #include "ti/k3-am625.dtsi"
    #include "k3_am625_aurel.dtsi"
    //#include "ti/k3-am62x-sk-common.dtsi"
    
    
    / {
    	compatible =  "ti,am625-aurel-v0.7", "ti,am625"; //03-Nov-2022
    	model = "Aurel-v0.7180723-04"; //platform-mmddyy-revision
    
    	/delete-node/cpu@2; //Disabling 2 CPU cores
    	/delete-node/cpu@3;
    
    /*
    	wlan_lten: regulator-5 {
    		compatible = "regulator-fixed";
    		regulator-name = "wlan_lten";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		regulator-always-on;
    		vin-supply = <&vcc_3v3_sys>;
    		gpios = <&exp1 11 GPIO_ACTIVE_LOW>;
    	};
    	wlan_en: regulator-6 {
    		/* OUTPUT of SN74AVC2T244DQMR */
    /*		compatible = "regulator-fixed";
    		regulator-name = "wlan_en";
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <1800000>;
    		enable-active-high;
    		vin-supply = <&wlan_lten>;
    		gpios = <&main_gpio0 71 GPIO_ACTIVE_HIGH>;
    		pinctrl-names = "default";
    		pinctrl-0 = <&wlan_en_pins_default>;
    	};
    */
    	transceiver1: can-phy0 {
    		compatible = "ti,tcan1042";
    		#phy-cells = <0>;
    		max-bitrate = <5000000>;
            };
    
    
    	display {
                                    compatible = "microtips,13-101hieb0hf0-s";
    
                                    /*
                                    * Note that the OLDI TX 0 transmits the odd set of pixels
                                    * while the OLDI TX 1 transmits the even set. This is a
                                    * fixed configuration in the IP integration and is not
                                    * changeable. The properties, "dual-lvds-odd-pixels" and
                                    * "dual-lvds-even-pixels" have been used to merely
                                    * identify if a Dual Link configuration is required.
                                    * Swapping them will not make any difference.
                                    */
                                    port@0 {
                                            dual-lvds-odd-pixels;
                                            lcd_in0: endpoint {
                                                    remote-endpoint = <&oldi_out0>;
                                            };
                                    };
    
                                    port@1 {
                                            dual-lvds-even-pixels;
                                            lcd_in1: endpoint {
                                                    remote-endpoint = <&oldi_out1>;
                                            };
                                    };
    
    	};
    
    //		watchdog: watchdog {
    //	        /* TPS3431 */
    //	        compatible = "linux,wdt-gpio";        
    //	        gpios = <&main_gpio1 45 GPIO_ACTIVE_LOW>;        
    //	        hw_algo = "toggle";
    	        /* mGaik -> Keep this only if watchdog timer cannot be disabled and you want driver to keep toggling the signal without a APP. */
    //        	always-running;         
    	        /* mGaik -> CAP at CWD input of TPS3431 is at 470nF making Reset timeout at 36.433 Sec */
    	        /* Ideal 36433, but we pet at 36000 mSec rate bit faster than time out, this ensure if we cross 36000 then we do see WDT trigger in */
    //	        hw_margin_ms = <36000>; //36-Sec
    //	        status = "okay";   
    //		};
    
    };
    
    &mcu_pmx0 {
    	mcu_i2c0_pins_default: mcu-i2c0-pins-default {
    		pinctrl-single,pins = <
    			AM62X_MCU_IOPAD(0x044, PIN_INPUT_PULLUP, 0) 	/* (A8) MCU_I2C0_SCL */
    			AM62X_MCU_IOPAD(0x048, PIN_INPUT_PULLUP, 0) 	/* (D10) MCU_I2C0_SDA */
    		>;
    	};
    
    	mcu_mcan1_pins_default: mcu_mcan0_pins_default {
    		pinctrl-single,pins = <
    			AM62X_MCU_IOPAD(0x0038, PIN_INPUT, 0)  /* (B3) MCU_MCAN0_RX */
    			AM62X_MCU_IOPAD(0x0034, PIN_OUTPUT, 0) /* (D6) MCU_MCAN0_TX */
    		>;
    	};
    };
    
    &main_pmx0 {
    
    	wlan_en_pins_default: wlan-en-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x124, PIN_OUTPUT, 7) /* (A23) MMC2_SDCD.GPIO0_71 */
    		>;
    	};
    
    	main_mmc2_pins_default: main-mmc2-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x120, PIN_INPUT, 0) /* (C24) MMC2_CMD */
    			AM62X_IOPAD(0x118, PIN_INPUT, 0) /* (D25) MMC2_CLK */
    			AM62X_IOPAD(0x114, PIN_INPUT, 0) /* (B24) MMC2_DAT0 */
    			AM62X_IOPAD(0x110, PIN_INPUT, 0) /* (C25) MMC2_DAT1 */
    			AM62X_IOPAD(0x10c, PIN_INPUT, 0) /* (E23) MMC2_DAT2 */
    			AM62X_IOPAD(0x108, PIN_INPUT, 0) /* (D24) MMC2_DAT3 */
    			AM62X_IOPAD(0x11c, PIN_INPUT, 0) /* (#N/A) MMC2_CLKB */
    		>;
    	};
    
    	main_wlirq_pins_default: main-wlirq-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x128, PIN_INPUT, 7) /* (B23) MMC2_SDWP.GPIO0_72 */
    		>;
    	};
    
    	main_mcan0_pins_default: main-mcan0-pins-default {
                    pinctrl-single,pins = <
                            AM62X_IOPAD(0x1dc, PIN_INPUT, 0) /* (E15) MCAN0_RX */
                            AM62X_IOPAD(0x1d8, PIN_OUTPUT, 0) /* (C15) MCAN0_TX */
                    >;
            };
    
    	main_spi2_pins_default: main-spi2-pins-default {
                    pinctrl-single,pins = <
              		AM62X_IOPAD(0x1B0, PIN_OUTPUT, 1)   /* (A20) SPI2_CLK pins  on expansion Header*/
                		AM62X_IOPAD(0x1AC, PIN_OUTPUT, 1)  /* (E19) SPI2_CS0 pins on expansion Header */
                		AM62X_IOPAD(0x194, PIN_OUTPUT, 1)   /* (B19) SPI2_D0 pins on expansion Header */
                		AM62X_IOPAD(0x198, PIN_INPUT, 1)   /* (A19) SPI2_D1 pins on expansion Header */
                    >;
            };
    
           main_oldi0_pins_default: main-oldi0-pins-default {
                    pinctrl-single,pins = <
                            AM62X_IOPAD(0x0260, PIN_OUTPUT, 0) /* (AA5) OLDI0_A0N */
                            AM62X_IOPAD(0x025c, PIN_OUTPUT, 0) /* (Y6) OLDI0_A0P */
                            AM62X_IOPAD(0x0268, PIN_OUTPUT, 0) /* (AD3) OLDI0_A1N */
                            AM62X_IOPAD(0x0264, PIN_OUTPUT, 0) /* (AB4) OLDI0_A1P */
                            AM62X_IOPAD(0x0270, PIN_OUTPUT, 0) /* (Y8) OLDI0_A2N */
                            AM62X_IOPAD(0x026c, PIN_OUTPUT, 0) /* (AA8) OLDI0_A2P */
                            AM62X_IOPAD(0x0278, PIN_OUTPUT, 0) /* (AB6) OLDI0_A3N */
                            AM62X_IOPAD(0x0274, PIN_OUTPUT, 0) /* (AA7) OLDI0_A3P */
                            AM62X_IOPAD(0x0280, PIN_OUTPUT, 0) /* (AC6) OLDI0_A4N */
                            AM62X_IOPAD(0x027c, PIN_OUTPUT, 0) /* (AC5) OLDI0_A4P */
                            AM62X_IOPAD(0x0288, PIN_OUTPUT, 0) /* (AE5) OLDI0_A5N */
                            AM62X_IOPAD(0x0284, PIN_OUTPUT, 0) /* (AD6) OLDI0_A5P */
                            AM62X_IOPAD(0x0290, PIN_OUTPUT, 0) /* (AE6) OLDI0_A6N */
                            AM62X_IOPAD(0x028c, PIN_OUTPUT, 0) /* (AD7) OLDI0_A6P */
                            AM62X_IOPAD(0x0298, PIN_OUTPUT, 0) /* (AD8) OLDI0_A7N */
                            AM62X_IOPAD(0x0294, PIN_OUTPUT, 0) /* (AE7) OLDI0_A7P */
                            AM62X_IOPAD(0x02a0, PIN_OUTPUT, 0) /* (AD4) OLDI0_CLK0N */
                            AM62X_IOPAD(0x029c, PIN_OUTPUT, 0) /* (AE3) OLDI0_CLK0P */
                            AM62X_IOPAD(0x02a8, PIN_OUTPUT, 0) /* (AE4) OLDI0_CLK1N */
                            AM62X_IOPAD(0x02a4, PIN_OUTPUT, 0) /* (AD5) OLDI0_CLK1P */
                    >;
    	};
    };
    
    
    &main_mcan0 {
            status = "okay";
            pinctrl-names = "default";
            pinctrl-0 = <&main_mcan0_pins_default>;
            phys = <&transceiver1>;
    };
    
    &mcu_i2c0 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&mcu_i2c0_pins_default>;
    	clock-frequency = <400000>;
    
    	bq32000: rtc@68 {
                   compatible = "ti,bq32000";
                   trickle-resistor-ohms = <1120>;
                   reg = <0x68>;
           };
    
    };
    
    &main_i2c1 {
    
    	status = "okay";
    	gt928@5d {
            	compatible = "goodix,gt928";
            	reg = <0x5d>;
            	interrupt-parent = <&main_gpio1>;
                    interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
            	reset-gpios = <&main_gpio0 54 GPIO_ACTIVE_LOW>;
          };	
    };
    
    &main_spi2{
        pinctrl-names = "default";
        pinctrl-0 = <&main_spi2_pins_default>;
        status = "okay";
        //pindir-d0-out-d1-in=1;
    
        adc@0 {
                compatible = "ti,adc128s052";
                reg = <0>;
                vref-supply = <&vcc_3v3_sys>;
                spi-max-frequency = <1000000>;
                #io-channel-cells = <1>;
        };
    };
    
    
    &dss {
            pinctrl-names = "default";
            pinctrl-0 = <&main_oldi0_pins_default &main_dss0_pins_default>;
    };
    
    &dss_ports {
            #address-cells = <1>;
            #size-cells = <0>;
    
            /* VP1: LVDS Output (OLDI TX 0) */
            port@0 {
                    reg = <0>;
                    oldi_out0: endpoint {
                            remote-endpoint = <&lcd_in0>;
                    };
            };
    
            /* VP1: LVDS Output (OLDI TX 1) */
            port@2 {
                    reg = <2>;
                    oldi_out1: endpoint {
                            remote-endpoint = <&lcd_in1>;
                    };
            };
    };
    
    

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

    我需要添加 meta-arago-distro 到我的 bblayer.conf。  

                meta-qt5添加到我的 bblayer.conf。

    我们在 meta-qt6上。  

    我需要进行上述更改才能将 kmstest 添加到我们的 BSP。 我在 IMAGE_INSTALL 中包括 KMS++软件包。

    这是 kmsttest 的输出

    root@Node3408e17e8eb5:~# kmstest
    抛出"std:invalid_argument"的实例后终止调用
    what ():drm_IOCTL_mode_create_dumb 失败:无法分配内存
    已中止。  

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

    您好!

    您的定制电路板上有多大的 RAM? 以下错误"what ():drm_IOCTL_mode_create_dumb failed: cannot allocation memory"(什么():drm_IOCTL_mode_create_dumb 失败:无法分配内存)似乎表示未配置 CMA 或 DSS 未剩余足够的 CMA 以供 DSS 运行。

    此致、
    克鲁纳尔

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

    我们的定制板具有512MB RAM。

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

    您好!

    好的。 您分配了多少 CMA、并且在 dmesg 日志中、您是否看到 与 CMA 无法分配相关的任何错误?  

    此致、
    克鲁纳尔  

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

    我在启动时遇到此错误。

    CMA:无法保留512 MIB。

    下面的 URL 允许我通过 u-boot 命令  setenv args_all $args_all CMA=24M 设置 CMA 大小。

    software-dl.ti.com/.../Foundational_Components_Multimedia_wave5.html

    CMA 大小为24M 时、我在启动时未看到任何 DRM/CMA 错误。

    这是 kmstest 的输出。 通过 kmstest、我可以在 LCD 上看到色条。


    root@Node3408e17e8eb5:~# kmstest
    连接器0/@39:LVDS-1
    CRTC 0/@37:1920x1200 161.325 1920/12/128/20/? 1200/20/19/4/? 62 (62.40) 0 0x48
    平面0/@31:0、0-1920x1200
    FB 47 1920x1200-XR24
    按 ENTER 键退出

    root@Node3408e17e8eb5:~# kmsprint
    连接器0 (39) LVD-1 (已连接)
    编码器0 (38) LVDS
    CRTC 0 (37) 1920x1200 161.325 1920/12/128/20 1200/20/19/4 62 (62.40)
    平面0 (31) fb-id:46 (crtcs:0) 0 1920x1200 -> 0 1920x1200 (AR12 AB12 RA12 RG16 BG16 AR15 AB15 AR24 AB24 RA24 BA24 RG24 BG24 AR30 AB30 XR12 RX12 RX12 XR15 XB15)
    FB 46 1920x1200

    我想知道谁来修复此 CMA 内存大小值、是否存在任何计算值、最小值和最大值、阈值。

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

    您好!

    至少我会建议20MB,因为渲染缓冲区(1920 x 1200x4(字节/像素)x2(前/后缓冲区)。 但是、它将非常特定于应用、您需要根据最终应用优化 CMA。 例如,如果您正在进行高端渲染、分析或 ARM 计算,则可能需要 检查可用内存并相应地调整 CMA。  

    此致、
    克鲁纳尔