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/AM4378:需要有关在 AM4378上使用 TWL1837的 Linux 驱动程序的帮助

Guru**** 2540720 points
Other Parts Discussed in Thread: AM4378, AM4372

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/578064/linux-am4378-need-help-getting-linux-driver-on-am4378-working-with-twl1837

器件型号:AM4378
主题中讨论的其他器件: AM4372

工具/软件:Linux

您好、支持团队

我是 TI 应用人员、为使用 AM4378处理器和 TWL1837安装系统时遇到问题的客户提供支持。

我已经获得了基于02.00.02 SDK 内核构建的设置、我们似乎遇到了与02.00.00相同的阻碍。  下面列出了有关我们将要挂机的位置的更多技术细节。  如果我们可以更快地通过电子邮件回复回复、我们肯定可以设置一个电话来讨论这一点、这会很好。  在接下来的几周内、我的日历上没有比这更重要的东西、因此在9:30和5 EST 之间的任何时间都可以进行通话。


在第一次尝试在 WiFi 模块上设置寄存器时、驱动程序似乎挂起、使用的是扩展写入命令(命令53、通过 MMC_IO_RW_DELEVDED ()发出)、而不是直接写入命令(命令52、通过 MMC_IO_RW_DIA()发出)。  由于我对 SDIO 协议的理解有限、这两条命令都需要从器件做出响应、并且这两个函数都设置为阻止、直到从器件做出响应。  逻辑分析仪捕获可确认我们将获得所有直接读/写命令的有效响应、至少会正确发送命令数据包进行扩展写(将4个字节写入 addr 0x1ffc4 -> CMD 53: 0xA7FF8804)、 我们将得到一个响应数据包(CMD 53:0x00001000)。  但我还没有找到有关扩展写入应如何传达要写入的数据(看起来根本没有发送)或响应应该是什么样的文档。  我在逻辑分析仪上注意到的另一件奇怪的事情是、在这个挂起的扩展写入命令之前、来自 WiFi 芯片的响应从时钟线的上升沿有效切换到时钟线的下降沿有效。  我知道这是协议的一个有效部分--这一移位之后的5个直接读取都没有像扩展写入那样挂起他们的内核线程。

 

下面是导致挂起 MMC_IO_RW_DELEDED ()调用的部分调用链:

wlcore_NVS_CB
wl12xx_set_power_on
wlcore_set_partition
wl12xx_SDIO_RAW_WRITE
SDIO_IO_RW_ext_helper

 

和所连接的是我们使用的器件树源(减去从02.00.02 SDK 修改的包含项)和内核 defconfig。

请通过电子邮件联系我、了解更多详细信息和相关信息

谢谢

Jeff Coletti

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

    是否可以发送启动(dmesg)日志? 在 Linux 启动时是否检测到您的 twl1837?

    此外、如果文件不违反与客户签订的任何法律协议、您也可以在论坛的此处附加这些文件。

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

    你(们)好

    工程师的回答如下:

     -在 Linux 启动时是否检测到您的 twl1837?

    不能100%确定您在这里所说的"检测到"是什么意思。  我们使用器件树专门告诉内核、mmc2上存在 twl1837、这确实会导致 wl18xx 内核驱动程序成功探测和器件的一些低级 SDIO 配置。  但是、如前所述、通过探测此驱动程序产生的内核线程在完成设备配置之前挂起、因此它不会注册 cfg80211、因此不会枚举为无线设备。

     -是否可以附加 dmesg 日志?

    但除了我添加的调试语句之外、它实际上没有任何有用的信息来跟踪内核线程的挂起位置。

    我已经获得了一个更好的 SDIO 协议参考指南、问题似乎是 am4378应该在主机的最后一次响应之后通过数据线路发送要写入的数据、但它没有这样做。  这实际上是我们第一次尝试对这些数据线执行任何操作、因此其中一种可能是这些数据线的引脚多路复用器错误、 因此、AM437X 认为它已发送数据包、并无限期地等待来自 twl1837的响应、而这种响应永远不会得到。  但是、看一下 SDIO 内核驱动程序、似乎这也是它第一次使用 EDMA、因此我们可能已经为 mmc2错误配置了 EDMA。

     

    我正在研究一下 pinmux 现在是错误的可能性、但我有一些关于 EDMA 的具体问题:

     

     - mmc2外设实际上是否支持 EDMA?

     -通道12和13是否是用于 mmc2的正确通道(使用哪个通道是否重要)?

     -是否有办法判断是否有其他外设正在使用这些通道?

    此致

    Jeff

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

    [引用]通道12和13是否是用于 mmc2的正确通道(使用哪些通道是否重要)?

    是的、所有 MMC 器件都支持 EDMA、AM4378 TRM 的17.3.5 DMA 模式部分对此进行了介绍。

    [引用]通道12和13是否是用于 mmc2的正确通道(使用哪些通道是否重要)?

    默认情况下、TISDK 内核中的 mmc2设置为与 DMA 通道2和3配合使用、请参阅 arch/arm/boot/dts/am4372.dtsi:
    mmc2:MMC@481d8000{
    兼容="ti、omAP4-hsmmc";
    reg =<0x481d8000 0x1000>;
    ti、hwmds ="mmc2";
    TI,需要特殊重置;
    DMA =<&EDMA 2.
    EDMA 3>;
    dma-names ="TX"、"Rx";
    中断= ;
    STATUS ="禁用";
    };
    因此、如果不是问题、我建议坚持这种配置、因为存在 EDMA 事件多路复用(请参阅第7.2.2节、器件 TRM 的 EDMA 事件多路复用) 配置为与默认 dtsi 文件匹配并更改 EDMA 通道意味着您还必须在控制模块中重新映射它们。

    [报价]是否有办法判断是否有任何其他外设正在使用这些通道?[/报价]

    是的、您可以通过检查 am4372.dtsi 内部的节点来检查哪些 EDMA 通道已配置为哪个接口。

    希望这对您有所帮助。

    此致、
    Yordan