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/AM3359:ICSS EMAC LLD 问题

Guru**** 2540720 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/814277/linux-am3359-icss-emac-lld-issue

器件型号:AM3359

工具/软件:Linux

您好!

我想首先报告 ICSS-EMAC-LLD-TEST 应用程序的一些问题、但我仍然对我从 AM335x-PRU-uio.dtsi 克隆的 DTS 有一些疑问。
我正在使用 thud 分支上的 meta-ti 存储库进行 Yocto-sumo 设置。

我尝试在我的定制板上启动 ICSS-EMAC-LLD-测试并运行。 起初、应用程序因分段故障而始终崩溃。 我使用 Valgrind 进行了检查、发现 ICSS-EMAC-LLD 驱动程序本身(src="/ICSS_emacDrv.c))和测试程序中的另一个问题(test/src/test_common_utils.c)。 已使用一些未初始化的存储器单元(随机内容)。 我会提供适合"git am"的补丁、但我不知道如何将这些补丁附加到这个论坛帖子中。 应用这些补丁后、我的自构建 ICSS_emacMainTest_AM335x.out 不再崩溃。

但是、我在理解为定制板创建的 DTS 文件时仍然遇到问题。 我使用 uio-module-drv 从用户空间访问 PRU。 我从 Yocto meta-ti 层的 AM335x-PRU-uio.dtsi 派生了自定义 DTS、如下所示:  

我不理解的文件部分(下面引用)是 AM335x 器件 OCMC RAM 的基址和大小分配:

uio_pruss_MEM2:uio_pruss_MEM2{
compatible ="ti、uio-module-drv";
mem=<0x4a328000 0xd4>、
0x4a330000 0x174>、
0x4a332400 0x90>、
0x40302000 0x0e000>;
mem-names ="UART"、"ECAP"、"MDIO"、"ocmc";
状态="确定";
};

这将为高于实际硬件地址的0x2000字节 OCMC 分配一个基地址、并将大小从实际0x10000削减到0xE000。 我怀疑这是一个错误。 特别是当我查看 ICSS-EMAC 驱动程序包的 firmware/ICSS_dualemac/config/icss_emacFwConfig.h 中的以下行时、该行的大小超出0xe000:

#define ICSS_EMAC_FW_P0_COL_buffer_offset (0xEE00U)/* 1536字节冲突缓冲区、用于端口0发送队列*/

ICSS_emacFwConfig.c 中的 ICSS_emacFwDynamicCfg 结构在 ICSS-EMAC-LLD-TEST 应用程序中未更改。 因此、我认为 OCMC 的内存配置行应提供0x40300000的基址、大小为0x10000。 我已成功使用此配置。

请告知我应该使用哪个版本以及原因。

此致、

  Stefan Mätje ö m

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

    您好 Stefan、

    这是什么版本的软件?

    此致、

    Nick

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

    您好、Nick、

    很抱歉、相关软件的已用版本不清楚。 目前使用的版本为:

    • ICSS-EMAC-LLD: 01.00.00.15A
    • uio-module-drv: 2.2.1.0+gitAUTOINC+bda9260f22
    • linux-ti-stage-rt:4.14.79+gitAUTOINC+aab33cfa0d-r22c

    请在下面找到确切版本、包括我使用的元层和配方中的相应 git 哈希值:

    ===========================================================================================================================================
    ICSS-EMAC-LLD 01.00.00.15A-r0.0
    ICSS-EMAC-LLD-RTOS 01.00.00.15A-r0.0
    ICSS-EMAC-LLD-TEST 01.00.15A-r0.0
    
    =>匹配配方:===
    ICSS-EMAC-LLD:
    meta-ti-thud “
    
    meta-ti-thind/metaces-bsp/ICSS-EMAC-LLD/icss-emac-lld.inc"
    ICSS_EMAC_LLD_GIT_URI =“git://git.ti.com/keystone-rtos/icss-emac.git
    ”:
    ICSS_EMAC_LLD_GIT_BRANC=“master”
    ICSS_EMAC_LLD_GIT_DE=“r=
    
    07800v= d= 07800pv= ICSS_015000=
    
    
    
    
    
    
    “ICSS_CC= 080000000= 015000= e= 07800_CC_CC= 01580= e80= e80= 01580= eSS_CC= e80= 01580= e80= eLD_CC= 07800000EP_EP= e80= e80= eCLD
    
    
    
    uio-module-drv :2.2.1.0+gitAUTOINC+bda9260f22-r22d
    uio-module-drv-test 2.2.1.0+gitAUTOINC+bda9260f22-R1
    
    ===匹配配方:==uio-module-drv
    :
    meta-ti-thud 2.2.1.0+gitAUTOINC+bda9260f22
    
    #引用"meta-ti-thud/meta-bSP/uio-module-drv/uio-module-drv.inc"
    branch ="master"
    #这对应于版本02.01.00
    UIO_MODUO_MODUV_SRCREV ="bda9260f2220840a60ec0fb=====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================/git.ti.com/keystone-linux/uio-module-drv.git
    
    
    
    
    
    
    
    
    linux-ti-stage-rt :4.14.79+gitAUTOINC+aab33cfa0d-r22c
    
    linux-ti-stage-rt:
    meta-esd 4.14.79+gitAUTOINC+aab33cfa0d
    
    #引用自"meta-ESD/prope-kernel/linux-ti-staging -rt_4.14.14.bb"
    分支="ti-rt-linux-4.14.14.4.14.y"
    
    SRCREV ="aab33cfa0d3aeddb1fb463f6a6a6e62pv
    ="4b6b6b423v"{spr+4d"}
    

    我希望这能清楚地表明这一点。

    此致、

      Stefan

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

    您好 Stefan、

    我将检查内存分配问题。 供参考、我认为您应该能够使用回形针"插入文件"图标将文件(包括补丁文件)附加到帖子中。

    此致、

    Nick

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

    您好、Nick、

    我已经解决了内存分配/未定义变量问题。 我将在该帖子中附加一些补丁。 我对有关通过器件树指定的 OCMC RAM 的基址和大小的问题更感兴趣。 为什么 OCMC 地址与 AM335x-PRU-uio.dtsi 中指定的实际硬件地址的偏移量为0x2000。

    这是 ICSS-EMAC-LLD-TEST 程序的补丁程序、可避免崩溃。 分配现在使用 calloc()来处理 handle->hwAttrs,这是因为此代码下面有24行

    if (NULL =((ICSS_EmacHwAttrs*) handle->hwAttrs)->emacBaseAddrCfg){ 

    检查是否需要分配 ICSS_EmacBaseAddressHandle_T 对象。 如果未完成、则将使用随机指针。

    /cfs-file/__key/communityserver-discussions-components-files/791/0001_2D00_Fix_2D00_crash_2D00_by_2D00_zero_2D00_initialization_2D00_of_2D00_allocated_2D00_struct.txt

    这是 ICSS-EMAC-LLD 的修补程序、仅当应用程序设置了"启用打包"时、才会使用打包模式。 ICSS-EMAC-LLD-TEST 程序不会初始化 pacingMode 变量。

    /cfs-file/__key/communityserver-discussions-components-files/791/0001_2D00_Fix_2D00_access_2D00_to_2D00_possibly_2D00_uninitialized_2D00_variable_2D00_and_2D00_co.txt

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

    您好 Stefan、

    看起来 OCMC 的第一个0x2000用于 AM3的电源管理。 因此、我们有一个大小更小的0x2000字节移位。

     

    从 arch/arm/boot/dts/am33xx.dtsi:

                   ocmcram:ocmcram@40300000{

                           兼容="MMIO-SRAM";

                           REG =<0x40300000 0x10000>;/* 64k */

                           范围=<0x0 0x40300000 0x10000>;

                           #address-cells =<1>;

                           大小单元格=<1>;

     

                           PM_SRAM_CODE:PM-SRAM-CODE@0{

                                   兼容="ti、sRAM";

                                   reg =<0x0 0x1000>;

                                   protect-exec;

                           };

     

                           PM_SRAM_DATA:PM-SRAM-DATA@1000{

                                   兼容="ti、sRAM";

                                   reg =<0x1000 0x1000>;

                                   池;

                           };

                   };

    此致、

    Nick

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

    您好、Nick、

    感谢您的回答。 现在、我将了解为什么现在将0x2000的偏移用于 EMAC-LLD 的 OCMC 分配。 我将相应地调整电路板的 DTS。  

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

    您好 Stefan、

    听起来不错! 顺便说一下、感谢您报告您观察到的其他 ICSS_EMAC 问题。 我现在将与我们的开发团队分享您的补丁。

    此致、

    Nick

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

    您好 Stefan、

    最后后续行动:再次感谢报告 ICSS_EMAC 问题和修复。

    您的补丁"Fix crash by zero initialization of allocated structures"由我们即将发布的7月 SDK 中的以下补丁解决:

    /* LLD 属性 mallocs */
    handle->object =(ICSS_EmacObject*) malloc (sizeof (ICSS_EmacObject));
    + memset ((void*) handle->object、0、sizeof (ICSS_EmacObject));
    handle->hwAttrs=(ICSS_EmacHwAttrs*) malloc (sizeof (ICSS_EmacHwAttrs);
    + memset ((void*) handle->hwAttrs,0,sizeof (ICSS_EmacHwAttrs); 

    我为我们的秋季 SDK 版本提交了您的补丁"修复对可能未初始化的变量和编译器警告的访问"。

    此致、

    Nick