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.

[参考译文] Linux/AM3354:U-boot 初始屏幕导致内核显示问题

Guru**** 2541930 points
Other Parts Discussed in Thread: AM3354

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/617279/linux-am3354-u-boot-splash-screen-causes-kernel-display-problem

器件型号:AM3354

工具/软件:Linux

您好:

我正在使用 u-boot 2011 +内核4.4.32 (从 am3354处理器 SDK 03.02.00.05中提取)。

现在、我想为 u-boot 实现闪屏功能。

我曾提到过

与论坛上的上一个帖子相同。

首先、在我执行开机自检中的步骤后 u-boot LCD 驱动程序工作正常。

我的 LCD 内核 DTS 设置为:

 面板{
  兼容="ti、tilcdc、panel ";
  状态="正常";
  pinctrl-names ="default";
  pinctrl-0 =<&LCD_PINS_s0>;
  面板信息{
   交流偏置          =<255>;
   AC-BIAS-INtrpt   =<0>;
   dma-burse-SZ     =<16>;
   bpp              =<32>;
   FDD              =<0x80>;
   同步边沿        =<0>;
   SYNC-Ctrl        =<1>;
   栅格顺序     =<0>;
   FIFO-TH          =<0>;
  };

  显示时序{
   320x240p62{
    时钟频率=<21000000>;
    hactive =<320>;
    Vactive =<240>;
    前沿=<18>;
    后沿=<56>;
    HSYNC-LEN =<10>;
    后沿=<17>;
    垂直前沿=<10>;
    vsync-len =<1>;
    HSYNC-ACTIVE =<0>;
    vsync-active =<0>;
    像素时钟激活=<1>;
   };
  };
 };

 当在 u-boot 中未实现 LCD 驱动器时、它运行良好。

 然后、我更改了 u-boot 的 LCD 驱动程序中的代码、使其与内核中的代码完全相同。如下所示:

   /*配置 pclk */
   RasterClkConfig (SOC_LCDC_0_regs、21000000、192000000);//(SOC_LCDC_0_regs、21000000、192000000)    //将 pclk 更改为21MHz。

   …

   /*配置水平时序参数*/
   RasterHparamConfig (SOC_LCDC_0_regs、320、10、18、56);   //更改了水平像素数。 HFP、HBP 和 HSW。
   /*配置垂直定时参数*/
   RasterVparamConfig (SOC_LCDC_0_regs、240、1、10、17);    //更改垂直像素数。 VFP、VBP 和 Vsw.

如您所见。到目前为止、它与内核 DTS 中的 LCD 参数完全相同。

So.I 构建了 u-boot.reboot。

它在启动界面中看起来很好。在这里。

我还知道、对于4.4内核、有必要使用显示 PLL 而不是外设 PLL。

这样部分代码也会在 u-boot LCD 驱动程序中实现。(感谢 论坛中的一篇帖子)

我要在这里附加驱动程序代码。

e2e.ti.com/.../2728.lcd.zip

现在、这里是奇怪的部分。

u-boot 完成后。当内核启动时。我可以看到内核显示的图像稍微移动到左侧。 ( 如果在 u-boot 中未实现 LCD 驱动程序、内核工作正常。)

我启动了一个 SGX 演示应用、向您展示它的外观。这里:

因此、根据我的经验、我开始更改 HSW、HBP 或 HFP 以查看是否可以正确操作。但结果发现没有一个参数真正解决了问题。

这是我所做的。

1. HSYNC-LEN =<10>;    ->     HSYNC-LEN =<1>;

正如您在下面的照片中看到的。这里有这个奇怪的像素区域(我标记的红色方形中的垂直列)。像素看起来是重复的。

2. HSYNC-LEN =<10>;  ->   HSYNC-LEN =<30>;

如您所见。我设法对齐正确的右列。但奇怪的像素区域仍然存在。

3.后沿=<56>; ->  后沿=<75>

基本上与最后一个实验相同。我设法对齐正确的右列。但奇怪的像素区域仍然存在。这次只有 HBP i chanegd。

4.HFP 不 影响显示屏、但我更改了它。

到现在为止。

我可以肯定:

a.no 更改 HFP/HBP/HSW 的方式很重要。 更不用说 VFP/VBP/Vsw. 这种现象存在。

b.in u-boot 的 LCD 驱动程序。 LCD 驱动器的时钟源无关紧要。 是显示 PLL.还是 外设 PLL。 甚至内核 PLL。

C.I 甚至尝试逐件切断 Uboot 的 LCD 驱动器。 删除代码段以准确找出导致内核运行异常的设置。但没有成功。一旦代码到达 RasterEnable (SOC_LCDC_0_reg)、情况就会发生错误。

请告知您应该怎么做?

要在 uboot 中更改 LCD 驱动程序?

或者看看内核开始初始化 LCD 控制器时是否有办法复位 LCD 寄存器?

感谢大家

延东

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

    您的帧缓冲区似乎不同步。 这看起来不像显示时序问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Biser。
    我认为这也不是时间问题。
    您是否有任何建议、我接下来应该怎么做?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    可以有人帮助我吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已通知软件团队。 他们将对此进行研究并在此处作出响应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你 Biser。

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

    检查这些线程:
    e2e.ti.com/.../494552
    e2e.ti.com/.../1052263
    e2e.ti.com/.../1457962

    在内核初始化之前重置 LCDC 的猜测也似乎是有价值的。 然而、LCDC 驱动器没有实现复位、您需要修改驱动器以实现此目的。

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

    谢谢 Yordan!

    我将查看您提到的帖子!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    我检查了您提到的帖子。
    它们主要涉及更改 REG_PR_OLD_COUNT 位。
    过去、我在解决 LCDC 下溢问题时也做了类似的事情。
    因此、修改 REG_PR_OLD_COUNT 位的那部分代码已在我的 u-boot 中。
    我还删除了用于处理 LCDC 下溢问题的所有代码。 该图像偏移仍然存在。 (稳定换档。 与之前提到的帖子不同、有时不会恢复)

    这里是我用于处理 LCDC 下溢问题的代码。
    "LCDC_underflow=MW 4c000054 00FFFFF10";"\
    "MW 44e1060c 00c00000;"\
    "MW 44e10670 4444444477\0"\

    这表明 REG_PR_OLD_COUNT 可能不是我发生图像移位的原因。

    这里的想法太多了...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我发现内核启动时确实存在一些错误日志:



    [DRM]已初始化 DRM 1.1.0 20060810
    [DRM]支持 vblank 时间戳缓存修订版2 (2013年10月21日)。
    [DRM]不支持 vblank 时间戳查询的驱动程序。
    tilcdc 4830e000。lcdc:tilcdc_crtc_IRQ (0x00000004):同步丢失
    tilcdc 4830e000。lcdc:tilcdc_crtc_IRQ (0x00000004):同步丢失
    tilcdc 4830e000。lcdc:tilcdc_crtc_IRQ (0x00000004):同步丢失
    tilcdc 4830e000。lcdc:tilcdc_crtc_IRQ (0x00000004):同步丢失
    控制台:切换到彩色帧缓冲设备40x30
    tilcdc 4830e000。lcdc:tilcdc_crtc_IRQ (0x00000104):同步丢失
    tilcdc 4830e000。lcdc:tilcdc_crtc_IRQ (0x00000104):同步丢失
    tilcdc 4830e000。lcdc:tilcdc_crtc_IRQ (0x00000104):同步丢失
    tilcdc 4830e000。lcdc:tilcdc_crtc_IRQ (0x00000104):同步丢失
    tilcdc 4830e000。lcdc:tilcdc_crtc_IRQ (0x00000104):同步丢失
    tilcdc 4830e000。lcdc:tilcdc_crtc_IRQ (0x00000104):同步丢失
    tilcdc 4830e000。lcdc:fb0:帧缓冲器件
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请检查此主题:
    e2e.ti.com/.../606154
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kemal:

    感谢您的提示。

    我似乎需要将 AM335x-fb.c 从 u-boot 2016移植到我自己的 u-boot 2011、并应用文章中提到的 splash.tar.gz 补丁。

    此致。

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

    您还可以尝试使用最新 的处理器 SDK 4.0.4。 如果没有任何额外的修改、我就不会收到任何"同步丢失"错误。

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

    谢谢 Kemal。

    我会自己尝试4.0.4!

    我尝试遵循 AM335x 技术参考手册13.4.6禁用和软件复位序列中提到的 LCD 控制器复位过程

     设置 cfg_lcden='0’。
    •等待 DONE 中断。
    •将几个软件复位位设置为高电平(cfg_main_rst=’1’或[cfg_dma_rst=’1’和 cfg_core_rst=’])
    周期。
    •将复位设置回低电平。
    •设置 cfg_lcden='1'。

     


     当内核正在初始化 LCDC.but 没有成功时,我在 tilcdc_load()中添加了上述代码。

    我还发现在 tilcdc_crtc.c 中、有多种复位函数、并且每次内核启动时都运行。例如 tilcdc_crtc_enable ()和 tilcdc_crtc_disable ()

    因此、我的结论是、重置 LCDC 模块不能像加电时那样使控制器恢复到原始状态。

    AM335X_StarterWare_02_00_00_07中的 LCD 驱动器在某种程度上污染了 LCD 控制器。

    我甚至尝试转储整个 LCDC 寄存器、并在内核初始化 LCDC 之前将所有寄存器恢复到其默认状态、但也没有成功。

    我将检查4.0.4...

    感谢所有提示!

    延东

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

    我意外找到了一个简单的解决方案。

    引脚。 我在 RasterEnable 之后立即调用 RasterDisable。

    我可以看到闪屏标识显示1秒钟、然后屏幕变为白色。 因为 LCDC 已禁用。

    但重要的是、在这种情况下、SYNC 丢失错误消失了。

    然后、我认为我应该在内核中执行相同的操作、而不是 u-boot。它运行正常。

    在 tilcdc_drv.c 中:

     /*确定 LCD IP 版本*/
     Pm_runtime_get_sync (dev->dev);

     tilcdc_clear (dev、lcdc_craster CTRL_REG、lcdc_craster _enable);
     mdelay (3);//100 ok
     开关(tilcdc_read (dev、LCDC_PID_REG)){
     情况0x4c100102:
      PRIV->rev = 1;
      中断;

     


    LCDC 被禁用后、我应该等待帧完成中断、但检查结果是什么。

    我禁用了它并等待一段时间。

    它起了作用。

    我不明白为什么在内核中稍后调用的 tilcdc_crtc_disable 和 tilcdc_crtc_enable 等复位函 数(由 DRM_fbdev_CMA_init ()调用)不能解决问题。