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.

[参考译文] DRA829V:[EP2000][Main2_0]:当 Linux 也是10.1时、SGMII 端口无法启动10.1 PSDK

Guru**** 2460850 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1479634/dra829v-ep2000-main2_0-sgmii-ports-were-not-able-to-bringup-10-1-psdk-when-linux-is-also-10-1

器件型号:DRA829V

工具与软件:

您好、TI:

      当我们有旧的 Linux SDK (7.3)时、我们升级到10.1 RTOS SDK、用于 MCU2_0和 MCU2_1、一切都正常、但当我们升级到新的 Linux SDK (10.1)时、我们看到 SGMII 端口无法初始化、那么、这可能是什么问题呢?

谢谢。此致、

Satya。  

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

    您好!

    您能否检查一下、与旧 SDK 类似、最新 SDK 中是否处理了串行器/解串器配置。

    此致、
    Sudheer

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

    尊敬的 Sudheer:

       是的、配置良好、相同的 MCU2_0映像运行良好当我使用旧的 Linux SDK 时、现在我们要升级到新的 Linux 映像(10.1)、然后出现问题、Linux 映像对 SGMII 端口有什么影响?

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

    尊敬的 Sudheer:

       如果我调用 Board_Cfg SGMII 函数内核冻结发生、如果我禁用此函数调用、则其他功能正常、但 SGMII 端口停止、

    此致

    Satya。  

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

    您好!

    如果我调用 Board_Cfg SGMII 函数内核冻结正在发生、如果我禁用此函数调用、则其他功能仍在运行、但 SGMII 端口已关闭、

    默认 u-boot 级串行器/解串器在 SDK 中启用。
    请检查 SDK 7.3中与串行器/解串器相关的 u-boot 和 Linux 中有哪些更改、并采用与最新 SDK 相同的更改。

    此致、
    Sudheer

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

    在 Linux 方面、在 SDK 7.3中、除了以下内容、我们没有更改任何配置、我们在 SDK10中也是如此。  
    &Davinci_MDIO{
            phy0:Ethernet-phy@0{
                    REG =<0>;
    -              ti、rx-internal-delay = ;
    +              ti、rx-internal-delay = ;
                    TI、FIFO 深度= ;

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

    尊敬的 Sudheer:

       还观察到,每当我们试图访问基地址 CSL_SERDES_10G0_BASE ,然后内核是冻结意味着它是与访问问题或 MPU 问题有关,如果是,我们如何解决这一点?

    #define CSL_SERDES_10G0_BASE        (0x5050000UL))

    从下图哪个函数正在访问该地址时软件卡在那里。  

    此致、

    Satya。  

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

    您好!

    [报价 userid="635888" url="~/support/processors-group/processors/f/processors-forum/1479634/dra829v-ep2000-main2_0-sgmii-ports-were-not-able-to-bringup-10-1-psdk-when-linux-is-also-10-1/5683564 #5683564"]

      还观察到,每当我们试图访问基地址 CSL_SERDES_10G0_BASE ,然后内核是冻结意味着它是与访问问题或 MPU 问题有关,如果是,我们如何解决这一点?

    #define CSL_SERDES_10G0_BASE        (0x5050000UL))

    [报价]

    这意味着未启用串行器/解串器模块。

    您能否确认您是否使用所需的 src 配置(例如时钟配置和模块上的电源)更新了 ethfw/utils/board/Serds/j721e/board_j721e_evm.c 文件?

    请与在 SDK 7.3中所做的更改进行交叉。

    此致、
    Sudheer

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

    您好、Sudheer:

        我已启用如下所示的时钟和串行器/解串器10G0、看起来效果很好

    BOARD_EN_SERDES4_AND_REFCLK 函数调用 Board_Cfg Sgmii 调用

    静态 Board_STATUS Board_en_SERDES4_AND_REFCLK (void)

    uint64_t clkRateHz = 100000000U、clkRateRead = 0U;
    uint32_t moduleId = TISCI_DEV_SERDES_10G0;
    int32_t i、结果;
    uint32_t clkID[]={TISCI_DEV_SERDES_10G0_CORE_REF_CLK};
    uint32_t parentID[]={TISCI_DEV_SERDES_10G0_CORE_REF_CLK_PARTNER_HSDIV4_16FFT_MAIN_2_HSDIVOUT4_CLK};

    uint32_t moduleState;
    uint32_t resetState;
    uint32_t contextLossState;

    int32_t ret = Sciclient_pmGetModuleState (TISCI_DEV_SERDES_10G0、&moduleState、
    &resetState、&contextLossState、SCICLIENT_SERVICE_WAIT_FOREVER);

    /*将模块设置为打开状态*/
    if ((ret == CSL_PASS)&&(moduleState == 0U))

    Sciclient_pmSetModuleState (TISCI_DEV_SERDES_10G0、
    TISCI_MSG_VALUE_DEVICE_SW_STATE_ON、
    TISCI_MSG_FLAG_AOP、
    SCICLIENT_SERVICE_WAIT_FOREVER);
    }
    设计

    }

    for (i = 0;i <(sizeof (clkID)/sizeof (clkID[0]));i++)

    /*禁用时钟*/
    Result = Sciclient_pmModuleClkRequest (moduleId、
    clkID[i]、
    TISCI_MSG_VALUE_CLOCK_SW_STATE_UNREQ、
    0u、
    SCICLIENT_SERVICE_WAIT_FOREVER);
    如果(CSL_SERDES_NO_ERR!=结果)

    Return Board_FAIL;
    }

    /*设置父级*/
    Result = Sciclient_pmSetModuleClkParent (moduleId、
    clkID[i]、
    parentID[i]、
    SCICLIENT_SERVICE_WAIT_FOREVER);

    如果(CSL_SERDES_NO_ERR!=结果)

    Return Board_FAIL;
    }

    /*将时钟设置为所需的频率*/
    Result = Sciclient_pmSetModuleClkFreq (moduleId、
    clkID[i]、
    clkRateHz、
    TISCI_MSG_FLAG_CLOW_ALLOW_FREQ_CHANGE、
    SCICLIENT_SERVICE_WAIT_FOREVER);

    如果(CSL_SERDES_NO_ERR!=结果)

    Return Board_FAIL;
    }

    /*确认是否设置了时钟*/
    clkRateRead = 0U;
    Result = Sciclient_pmGetModuleClkFreq (moduleId、
    clkID[i]、
    clkRateRead (&C)、
    SCICLIENT_SERVICE_WAIT_FOREVER);

    如果((CSL_SERDES_NO_ERR!= RESULT)||(clkRateRead!= clkRateHz))

    Return Board_FAIL;
    }
    }

    /*将模块设置为打开状态*/
    Result = Sciclient_pmSetModuleState (moduleId、
    TISCI_MSG_VALUE_DEVICE_SW_STATE_ON、
    (TISCI_MSG_FLAG_AOP | TISCI_MSG_FLAG_DEVICE_RESET_ISO)。
    SCICLIENT_SERVICE_WAIT_FOREVER);
    如果(CSL_SERDES_NO_ERR!=结果)

    Return Board_FAIL;
    }

    /*如果将状态更改为启用、则重置*/
    Result = Sciclient_pmSetModuleRst (moduleId、
    0x0U /*resetBit*/、
    SCICLIENT_SERVICE_WAIT_FOREVER);

    如果(CSL_SERDES_NO_ERR!=结果)

    Return Board_FAIL;
    }


    Return Board_SOK;
    }