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.

[参考译文] [TDA4 J721E SDK7.2] SPI 模块加载到"ko"模式中、导致内核运行错误。

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors

大家好、

我们将 SPI 内核模块安装策略从 buildin 模式更改为 ko 模式。

下面是我们在 tisdk_j7-evm_defconfig 文件中所做的内核配置更改:  

CONFIG_MTD_SPI_NOR = y 和 CONFIG_SPI_cadence_QUADSPI=y、

在进行上述修改后、Linux 内核方面会出现一些错误。

错误场景1:dmesg | grep SPI

[2.010726] cadence-QSPI 47040000.SPI:cqspi->wr_delay = 5600
[2.243031] SPI-NOR spi0.0:未知的命令扩展类型
[2.243045] SPI-NOR spi0.0:未知的命令扩展类型
[2.246684] cadence-QSPI 47040000.SPI:在 TX = 16时搜索 rxlow
[3.398274] cadence-QSPI 47040000.SPI:DMA WAIT_for_Complete_TIMEOUT
[3.398328] SPI-NOR spi0.0:-110操作失败
[3.398381] cadence-QSPI 47040000.SPI:rxlow:RX:1 TX:16 RD:1.
[3.399017] cadence-QSPI 47040000.SPI:rxhigh:rx:60 tx:16 rd:2.
[3.39903] cadence-QSPI 47040000.SPI:txlow:rx:15 tx:0 rd:1.
[3.399306] cadence-QSPI 47040000.SPI:txhigh:Rx:15 TX:62 RD:2.
[3.399356] cadence-QSPI 47040000.SPI:右上角:RX:60 TX:62 RD:3.
[3.399358] cadence-QSPI 47040000.SPI:BottomLeft:RX:1 TX:0 RD:1.
[3.399450] cadence-QSPI 47040000.SPI:Gaplow:RX:4 TX:3 RD:1.
[3.402138] cadence-QSPI 47040000.SPI:gaphigh:RX:59 TX:61 RD:3.
[3.402142] cadence-QSPI 47040000.SPI:最终调优点:RX:16 TX:16 RD:1.
[3.402160] cadence-QSPI 47040000.SPI:在最终校准点找不到图形
[3.402163] Cadence-QSPI 47040000.SPI:PHY 校准失败:-22
[3.402166] SPI-NOR spi0.0:mt35xu512aba (65536 KB)
[3.402180]在 MTD 器件47040000.SPI.0上找到的19 cmdlinepart 分区
[3.402181]在"47040000.SPI.0"上创建19个 MTD 分区:
[3.402185] 0x0000000000000000 0x000000080000:"ospi.SBL"
[3.415819] 0x000000080000-0x000000100000:"ospi.tifs_A"
[3.431796]0x000000100000-0x000000180000:"ospI.tifs_b"
[3.447756] 0x000000180000-0x000000580000:"ospi.mcufw_A"
[3.463785] 0x000000580000-0x000000980000:"ospi.mcufw_b"
[3.479748] 0x000000980000-0x000001d80000:“ospi.combine_a"
[3.499784] 0x000001d80000-0x000003180000:“ospi.combine_b"
[3.515773] 0x000003180000-0x0000031a0000:"ospi.MISC_A"
[3.531751] 0x0000031a0000-0x0000031c0000:"ospi.MISC_B"
[3.551791] 0x0000031c0000-0x0000031e0000:"ospi.factory"
[3.567773] 0x0000031e0000-0x000003200000:"ospi.SAFE_A"
[3.583807] 0x000003200000-0x000003220000:"ospi.safe_b"
[3.599760] 0x00000322000-0x000003260000:"ospi.sonardata"
[3.616298] 0x000003260000-0x000003460000:"ospi.mcudata"
[3.631871] 0x000003460000-0x000003480000:"ospi.imudata"
[3.647972] 0x000003480000-0x0000034a0000:"ospi.psstore"
[3.663887] 0x0000034a0000-0x0000036a0000:"ospi.reserved"
[3.679861] 0x000003fe0000-0x000004000000:"ospi.patters"
[3.697061] 0x000000000000-0x000004000000:"ospi.whole_SPI"
[6.630390] cadence-QSPI 47040000.SPI:DMA WAIT_for_Complete_TIMEOUT
[6.630396] SPI-NOR spi0.0:-110操作失败
[8.710337] cadence-QSPI 47040000.SPI:DMA wait_for_Complete_timeout
[8.710342] SPI-NOR spi0.0:-110操作失败
[14.054326] cadence-QSPI 47040000.SPI:DMA WAIT_for_Complete_TIMEOUT
[14.054331] SPI-NOR spi0.0:-110操作失败

错误场景二:

root@Sixi_master:/opt/data #flashcp -v app-master /dev/mtd3
擦除块:6/6 (100%)
写入数据:658k/658k (100%)
验证数据:10K/658k (1%)
从/dev/mtd3读取数据时:连接超时

错误场景三:

18-46-12.794root@Sixi_master:/opt/data flashcp-v app-master /dev/mtd3
18-46-14.131偏置块:6/6 (100%)
18-46-14.738写入数据:658k/658k (100%)
18-46-14.798验证数据:10K/658k (1%)文件似乎与闪存数据不匹配。 0x00000000 0x0000-0x00002800处的第一个不匹配

修改 SPI 模块(SPI-NOR.ko 和 SPI-cadence-quadspi.ko)的加载模式后、为什么会发生上述错误、

请帮助分析   TDA4平台中的"buildin"模式和"ko"模式之间的差异。

Li、

必去之处

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="496750" URL"~/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors "]

    修改 SPI 模块(SPI-NOR.ko 和 SPI-cadence-quadspi.ko)的加载模式后、为什么会发生上述错误、

    [/报价]

    您好!

    Linux 希望内置引导介质、但不能加载。 您能否尝试以下补丁:

    e2e.ti.com/.../tiL5.10_2D00_P_2D00_spi_2D00_cadence_2D00_quadspi_2D00_Handle_2D00_spi_5F00_unregister_5F00_master_2D00_in_2D00_remove.patch

    以上补丁位于最新的8.2 SDK 上。 请将其移植回7.2 SDK。

    此致、
    基尔西

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

    此修补程序发生了如下构建错误:

    drivers/spi/spi-cadence-quadspi.c:在‘中‘cqspi_probe’:
    drivers/spi/spi-cadence-quadspi.c:2307:11:‘s函数的隐式声明‘devm_spi_alloc_master’;您是指 pi_alloc_master’? [-Werror=隐式函数声明]
    2307| master = devm_spi_alloc_master (&pdev->dev、sizeof (* cqspi));
    |^~~~~~~~~~~~~~~~~~~~~μ A
    | SPI_ALLOC_MASTER
    drivers/SPI/SPI-cadence-quadspi.c:2307:9:‘s:从‘int’分配到结构 SPI_controller *’会使指针从整数开始而不进行转换[-Werror=int-conversion ]
    2307| master = devm_spi_alloc_master (&pdev->dev、sizeof (* cqspi));
    |^μ A

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="496750" URL"~/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors "]

    CONFIG_MTD_SPI_NOR = y 和 CONFIG_SPI_cadence_QUADSPI=y、

    [/报价]

    这些值是=m、而不是=y、对吧? 在构建 SPI 时、您是否未观察到上述3种错误场景?

    -凯尔西

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

    我们现在使用=y 而不是=m

    是的、当 SPI 为内置时、这3种错误场景不会发生。  

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

    有更新吗?

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

    您好!

    因为它基于7.2。 我正在进行设置。 我明天会回来。

    谢谢、
    基尔西

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

    何利、您好!

    我现已尝试以下操作:  

    CONFIG_MTD_SPI_NOR = m 和 CONFIG_SPI_cadence_QUADSPI=m

    随附的是我的 EVM 的日志: e2e.ti.com/.../ospi_5F00_module_5F00_logs.txt

    [引用 userid="496750" URL"~/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors "[6.630396] SPI-NOR spi0.0:操作失败,失败的是-110
    [8.710337] cadence-QSPI 47040000.SPI:DMA wait_for_Complete_timeout
    [8.710342] SPI-NOR spi0.0:-110操作失败
    [14.054326] cadence-QSPI 47040000.SPI:DMA WAIT_for_Complete_TIMEOUT
    [14.054331] SPI-NOR spi0.0:-110操作失败

    我看不到上述问题。



    [引用 userid="496750" URL"~/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors "]

    错误场景二:

    [/报价]

    flashcp -v app-master /dev/mtd3
    尝试打开应用程序主控方时:没有此类文件或目录
    root@j7-evm:~# vi app-master
    root@j7-evm:~# flashcp -v ./app-master /dev/mtd3
    擦除块:1/1 (100%)
    写入数据:0K/0k (100%)
    验证数据:0K/0k (100%)

    我也看不到上述问题。

    [引用 userid="496750" URL"~/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors "]

    错误场景三:

    [/报价]

    root@j7-evm:~# flashcp -v ./app-master /dev/mtd3
    擦除块:1/1 (100%)
    写入数据:12K/12k (100%)
    验证数据:12K/12k (100%)
    root@j7-evm:~# flashcp -v ./app-master /dev/mtd3
    擦除块:1/1 (100%)
    写入数据:12K/12k (100%)
    验证数据:12K/12k (100%)
    root@j7-evm:~# flashcp -v ./app-master /dev/mtd3
    擦除块:1/1 (100%)
    写入数据:12K/12k (100%)
    验证数据:12K/12k (100%)
    根目录@J7-EVM:~编号

    我也没有观察到问题3。

    因此、我看不到有关更改  CONFIG_MTD_SPI_NOR = m 和 CONFIG_SPI_CADENS_QUADSPI=m 的问题

    此致、
    基尔西

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

    如果在 MCU 域中启用 PHY 和 DMA、则重现的可能性会增加。

    此外、我们的 Linux 操作系统在器件树中启用了 phy-mode 和 SPI 闪存模式功能、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="496750" URL"~/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors/4107622 #4107622"]

    如果在 MCU 域中启用 PHY 和 DMA、则重现的可能性会增加。

    [/报价]

    您能描述这种代码变化吗? 我希望与您在同一页上。

    [引用 userid="496750" URL"~/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors/4107622 #4107622"]此外,我们的 Linux 操作系统还在器件树中启用了 phy-mode 和 SPI 闪存模式功能

    我将刷写 SPI 校准模式并进行检查。 请提供您对在 MCU 域中启用 PHY 和 DMA 所做的更改。
    我想重现此问题。

    -凯尔西


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

    附件是来自 TI 的 MCU 补丁、请进行检查。

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

    从79ab0288a1d0dd7ca82ec360abca873af3f2820f Mon Sep 17 00:00:00 2001
    出发地:Joe
    日期:2021年10月27日星期三19:07:33 +0800
    主题:[patch][pdk]启用 ospi phy 模式和 SBL DMA 模式

    签字人:Joe
    --
    packages/ti/boot/SBL/SBL_component.mk | 2 +/-
    packages/ti/boot/sbl/src/ospi/SBL_ospi.c | 111 ++++++++++++++++++++++++ --
    packages/ti/drv/SPI/src/V0/OSPI_V0.c | 16 +++
    packages/ti/drv/spi/src/v0/OSPI_v0.h | 2 +
    4个文件已更改,121个插入(+),10个删除(-)

    diff --git a/packages/ti/boot/SBL/SBL_component.mk b/packages/ti/boot/SBL/SBL_component.mk
    索引 dd28e33.3649035 100644
    -- a/packages/ti/boot/SBL/SBL_component.mk
    ++ b/packages/ti/boot/SBL/SBL_component.mk
    @@-1178、7 +1178、7 @@ CUST_SBL_TEST_FLAGS ="-DSBL_USE_DMA=0 -DSBL_LOG_LEVEL=1 -DSBL_SCALE_MEM_START
    其他
    ifeq ($(findlstring J7、$(SOC))、J7)
    #注:如果在下面更改为 SBL_USE_DMA=1、则还应在下面更进一步更改'SL_lib_CUST'和'SL_CUST_IMG' Makefile 行以使用'SL_USE_DMA=yes'
    -CUST_SBL_TEST_FLAGS ="-DSBL_USE_DMA=0 -DSBL_LOG_LEVEL=1 -DSBL_SCALE_MEM_START=0xB8000000 -DSBL_SCALE_MEM_SIZE = 0x4000000 -DSBL_ENABLE_PLL -DSBL_ENABLE_SLUST_START=0xB80000"-DSBL_ADDR_TK_RESET_RESTON_TON_T"-0x4000000
    +CUST_SBL_TEST_FLAGS ="-DSBL_USE_DMA=1 -DSBL_LOG_LEVEL=1 -DSBL_SCALE_MEM_START=0xB8000000 -DSBL_SCALE_MEM_SIZE = 0x4000000 -DSBL_ENABLE_PLL -DSBL_ENABLE_TON_START= 0xB8000000 -DSBL_ADDR_TK_MOKLE_SP_SIMPLE_RESET"-0x4000000
    #自定义示例:早期 CAN 响应(注:在使用下面的行之前、注释掉上面的行)
    #CUST_SBL_TEST_FLAGS ="-DSBL_USE_DMA=0 -DSBL_LOG_LEVEL=1 -DSBL_SCALE_MEM_START=0x41cc0000 -DSBL_SCALE_MEM_SIZE = 0x40000 -DSBL_ENABLE_PLL -DSBL_MODE_SKIP -DSBL_DRS_ON_DSBL_ADC_SKIP_DSBL_DR_DEV_LD_DSBL_IN_RUS_DON_DSBL_MCU_ON_DSBL_DIC_L_TRIP_DEV_THRS
    其他
    diff --git a/packages/ti/boot/SBL/src/ospi/SBL_ospi.c b/packages/ti/boot/SBL/src/ospi/SBL_ospi.c
    索引8ffa445..e40cef1 100755
    -- a/packages/ti/boot/SBL/src/ospi/SBL_ospi.c
    ++ b/packages/ti/boot/SBL/src/ospi/SBL_ospi.c
    @@-199.6 +19990 @@静态 Int32_t Ospi_UDMA_DEINIT (空)

    #endif

    +#if 1.
    +void OSPI_configClk (uint32_t freq)
    +{
    + OSPI_V0_HwAttrs ospi_cfg;
    + Int32_t RetVal;
    + uint64_t ospi_RCLK_freq;
    + uint32_t parClk;
    + uint32_t clkID[]={
    + TISCI_DEV_MCU_FSS0_OSPI_0_OSPI_RCLK_CLK、
    + TISCI_DEV_MCU_FSS0_OSPI_1_OSPI_RCLK_CLK
    +};
    + uint32_t DevID[]={
    + TISCI_DEV_MCU_FSS0_OSPI_0、
    + TISCI_DEV_MCU_FSS0_OSPI_1
    +};
    +
    +/*获取默认的 SPI 初始化配置*/
    + OSPI_socGetInitCfg (Board_OSPI_NOR_Instance、&ospi_cfg);
    +
    + RetVal = Sciclient_pmModuleClkRequest (DevID[Board_OSPI_NOR_Instance]、
    + clkID[Board_OSPI_NOR_Instance]、
    + TISCI_MSG_VALUE CLOCK_SW_STATE_REQ、
    + TISCI_MSG_FLAG_AOP、
    + SCICLIENT_SERVICE_WAIT_FOREVAL);
    + IF (RetVal!= CSL_PASS)
    +{
    + SBL_log (SBL_LOG_MAX、"Sciclient_pmModuleClkRequest 失败\n");
    +}
    +
    +/*最大时钟数*/
    + IF (freq = OSPI_MODULE_CLK_166M)
    +{
    + parClk = TISCI_DEV_MCU_FSS0_OSPI_0_OSPI_RCLK_parent_HSDIV4_16FFT_MCU_2_HSDIVOUT4_CLK;
    +
    + RetVal = Sciclient_pmSetModuleClkParent (DevID[Board_OSPI_NOR_Instance]、
    + clkID[Board_OSPI_NOR_Instance]、
    + parClk、
    + SCICLIENT_SERVICE_WAIT_FOREVAL);
    +}
    +否则
    +{
    + parClk = TISCI_DEV_MCU_FSS0_OSPI_0_OSPI_RCLK_parent_HSDIV4_16FFT_MCU_1_HSDIVOUT4_CLK;
    + RetVal = Sciclient_pmSetModuleClkParent (DevID[Board_OSPI_NOR_Instance]、
    + clkID[Board_OSPI_NOR_Instance]、
    + parClk、
    + SCICLIENT_SERVICE_WAIT_FOREVAL);
    +}
    +
    + IF (RetVal!= CSL_PASS)
    +{
    + SBL_log (SBL_LOG_MAX、"Sciclient_pmSetModuleClkParent 失败\n");
    +}
    +
    + ospi_cfg.funcClk = freq;
    + OSPI_socSetInitCfg (Board_OSPI_NOR_Instance、&ospi_cfg);
    +
    + ospi_RCLK_freq =(uint64_t) freq;
    + RetVal = Sciclient_pmSetModuleClkFreq (DevID[Board_OSPI_NOR_Instance]、
    + clkID[Board_OSPI_NOR_Instance]、
    + ospi_RCLK_freq、
    + TISCI_MSG_FLAG_AOP、
    + SCICLIENT_SERVICE_WAIT_FOREVAL);
    +
    + IF (RetVal!= CSL_PASS)
    +{
    + SBL_log (SBL_LOG_MAX、"Sciclient_pmSetModuleClkFreq Failed \n");
    +}
    +
    +ospi_RCLK_freq = 0;
    + RetVal = Sciclient_pmGetModuleClkFreq (DevID[Board_OSPI_NOR_Instance]、
    + clkID[Board_OSPI_NOR_Instance]、
    +&ospi_RCLK_freq、
    + SCICLIENT_SERVICE_WAIT_FOREVAL);
    + IF (RetVal!= CSL_PASS)
    +{
    + SBL_log (SBL_LOG_MAX、"Sciclient_pmGetModuleClkFreq Failed \n");
    +}
    +
    + SBL_log (SBL_LOG_MAX、"OSPI RCLK 以%d MHz 运行。 \n"、(uint32_t) ospi_RCLK_freq);
    +
    +}
    +
    +#endif
    +
    int32_t SBL_ReadSysfwImage (void **pbuffer、uint32_t num_Bytes)

    #if!defined (SBL_BYPASS_OSPI_DRIVER)&&!defined (SBL_BYPASS_OSPI_DRIVER_OF_SYSFW_DOWNLOAD)
    @@-232、14 +316、6 @@ Int32_t SBL_ReadSysfwImage (void **缓冲区、uint32_t num_Bytes)
    ospi_cfg.phyEnable = false;
    #endif

    -#if defined (SOC_J721E)
    - ospi_cfg.phyEnable = false;
    -/* OSPI 波特率=(主参考时钟)/(波特率除数)
    -*默认波特率除数为32
    -*使用较小的除数以获得更高的速度*/
    -ospi_cfg.baudRateDiv = 6;
    -#endif
    -
    /*设置默认的 SPI 初始化配置*/
    OSPI_socSetInitCfg (Board_OSPI_NOR_Instance、&ospi_cfg);

    @@-328、7 +404、7 @@ Int32_t SBL_ospiInit (void *句柄)

    /*获取默认 OSPI cfg */
    OSPI_socGetInitCfg (Board_OSPI_NOR_Instance、&ospi_cfg);
    -
    +#if 0
    #if!defined (SBL_SKIP_BRD_CFG_PM)&&!defined (SBL_SKIP_SYSFW_INIT)

    struct ospikParams
    @@-354,6+430,9 @@ Int32_t SBL_ospiInit (void *句柄)
    SBL_log (SBL_LOG_MAX、"ospFunClk =%d Hz \n"、ospi_cfg.funcClk);

    #endif
    +#else
    + OSPI_CONFIGClk (OSPI_MODULE_CLK_166M);
    +#endif

    ospi_cfg.dtrEnable = true;

    @@-370、8 +449、13 @@ Int32_t SBL_ospiInit (void *句柄)
    /* J721E:之前已启用 PHY 模式、因此我们保持启用*
    /* J7200:启用在 SBL_ReadSysfwImage 中禁用的 PHY 模式*
    ospi_cfg.phyEnable = true;
    +#else
    +#IF 定义(SOC_J721E)
    + ospi_cfg.phyEnable = true;
    + ospi_cfg.cacheEnable = true;
    其他
    ospi_cfg.phyEnable = false;
    +#endif
    #endif
    /*设置默认的 SPI 初始化配置*/
    OSPI_socSetInitCfg (Board_OSPI_NOR_Instance、&ospi_cfg);
    @@-452、8 +536、17 @@ Int32_t SBL_ospiFlashRead (const void *句柄、uint8_t * dst、uint32_t length、
    SBL_DCacheClean ((void *) dst、length);
    Board_flashRead (h、offset、dst、length、(void *)(&ioMode));

    +#else
    +#IF 定义(SOC_J721E)
    + Board_flashHandle h =*(const Board_flashHandle *)句柄;
    + uint32_t ioMode = OSPI_FLASH_Octal;
    + int ret = 0;
    + SBL_DCacheClean ((void *) dst、length);
    + ret = Board_flashRead (h、offset、dst、length、(void *)(&ioMode));
    + SBL_log (SBL_LOG_MAX、"Board_flashRead offset = 0x%x、dst =%p、ret =%d \n"、offset、dst、ret);
    其他
    memcpy ((void *) dst、(void *)(ospi_cfg.dataAddr + offset)、长度);
    +#endif
    #endif /*#if SBL_USE_DMA *

    其他
    diff --git a/packages/ti/drv/spi/src/v0/osi_v0.c b/packages/ti/drv/spi/src/v0/osi_v0.c
    索引 c9d0be9.f56cb5b 100755
    -- a/packages/ti/drv/spi/src/v0/OSPI_V0.c
    ++ b/packages/ti/drv/spi/src/V0/OSPI_V0.c
    @@-910、6 +910、14 @@静态 int32_t OSPI_DAC_xfer_mode_read_V0 (SPI_Handle handle、
    其他
    #endif

    + if (hwAttrs->cacheEnable ==(bool) true)
    +{
    + if (hwAttrs->phyEnable ==(bool) true)
    +{
    +/*启用读取的 PHY 管道模式*/
    + CSL_ospipelinePhyEnable((const CSL_ospi_flash_cfgRegs *)(hwAttrs->baseAddr), true);
    +}
    +}
    pSrc =(uint8_t *)(hwAttrs->dataAddr + offset);
    remaremasize =(uint32_t)事务->计数和3U;
    size =(uint32_t) transaction -> count - rema.Size;
    @@-929、6 +937、10 @@静态 Int32_t OSPI_DAC_xfer_mode_read_V0 (SPI_Handle handle、
    CSL_archMemoryFences();
    #endif

    + if (hwAttrs->cacheEnable ==(bool) true)
    +{
    + CacheP_wbInv ((void *)(hwAttrs->dataAddr + offset)、事务数->计数);
    +}


    返回(0);
    @@-1308、6 +1320、10 @@静态 int32_t OSPI_DAC_xfer_mode_write_V0 (SPI_Handle handle、



    + if (hwAttrs->cacheEnable ==(bool) true)
    +{
    + CacheP_wbInv ((void *)(hwAttrs->dataAddr + offset)、事务数->计数);
    +}
    返回(RetVal);


    diff --git a/packages/ti/drv/spi/src/v0/OSPI_v0.h b/packages/ti/drv/spi/src/v0/OSPI_v0.h
    索引 bc7a12d.bd706b9 100755
    --- a/packages/ti/drv/spi/src/v0/OSPI_v0.h
    ++ b/packages/ti/drv/spi/src/v0/OSPI_v0.h
    @@-250、6 +250、8 @@ typedef 结构体 OSPI_V0_HwAttrs_s{
    uint32_t csSotDelay;
    /*! 主控模式波特率分频值*/
    uint32_t baudRateDiv;
    +/*! 启用缓存*/
    + bool 高速缓存启用;

    } OSPI_V0_HwAttrs;

    --
    2.17.1.

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

    您好!

      您能否检查 SBL_ospioLeaveConfigSPI API 在末尾是否在 SBL 中执行? 如果您已经在 SBL 末尾执行此 API、是否可以尝试添加"ospi_cfg.dmaEnable = false;"、以便使 OSPI 配置中也禁用 DMA?

    此致、

    Brijesh

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

    您好,

      我在  SBL,中启用 SBL_ospioLeaveConfigSPI 函数,并 在该函数中添加"ospi_cfg.dmaEnable = false;", 问题仍然存在。  您可以在 EVM 板上重复此问题?

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

    您好!

    因此、您将使用 SBL 引导至 Linux。 我使用 SPL 引导至 Linux。 基本上、您在 SBL 端的 SDK 基础上进行了更改、然后引导至 Linux。
    感谢您提供该补丁。 我需要一些时间来设置7.2 PSDK RTOS 环境并尝试此操作。

    -凯尔西

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

    您好,

      我们的引导顺序是 SBL->MCU RTOS APP->uboot->Linux。 我修改 SBL_ospi.c 文件中的代码以测试用例。 要启用“SBL_ospioLeaveConfigSPI();”函数,,我更改了代码,将其吹出。

    //#if defined (SBL_HLOS_RUSS_FLASH)&&defined (SBL_USE_MCU_DOMAIN_ONLY)&&defined (SBL_ENABLE_DEV_GRP_MCU)
    /*如果我们要直接从 SBL 引导 ATF/U-BOOT/Linux,请仅将 OSPI 闪存重新置于 SPI 模式*/
      SBL_ospioLeaveConfigSPI()
    //#endif
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此问题是否有任何进展?期待您的回复。

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

    您好!

    您能否在内 核中尝试以下补丁并试用?

    https://patchwork.ozlabs.org/project/uboot/patch/20220509083332.5233-1-vaishnav.a@ti.com/

    此致、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="474888" URL"~/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors/4114949 #4114949">我们的引导顺序是 SBL->MCU RTOS 应用程序->uboot->Linux。 我修改 SBL_ospi.c 文件中的代码以测试用例。 要启用“SBL_ospioLeaveConfigSPI();”函数,,我更改了代码,使其熔断。

    您好!

    因为您在引导路径中有 U-Boot。  Brijesh 指向的上述补丁应该有助于重置闪存。 请尝试一下。

    -凯尔西

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

    这是 uboot 补丁、但我们尚未利用 uboot 启动流程、我们的启动序列为 SBL->MCU RTOS 应用-> Linux 内核。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="474888" URL"~/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors/4114949 #4114949"]

      我们的引导顺序是 SBL->MCU RTOS APP->uboot->Linux。 我修改 SBL_ospi.c 文件中的代码以测试用例。 要启用“SBL_ospioLeaveConfigSPI();”函数,,我更改了代码,将其吹出。

    //#if defined (SBL_HLOS_RUSS_FLASH)&&defined (SBL_USE_MCU_DOMAIN_ONLY)&&defined (SBL_ENABLE_DEV_GRP_MCU)
    /*如果我们要直接从 SBL 引导 ATF/U-BOOT/Linux,请仅将 OSPI 闪存重新置于 SPI 模式*/
    [/报价]

    您的引导路径中没有 SPL。 SBL 用于 SPL、但 U-Boot 位于 ATF 之后的引导路径中。 请参阅您引用的上述序列。 因此、该补丁肯定会产生效果。 请告诉我们。

    -凯尔西

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

    您好、Keerty、  

    我们现在在 ATF 之后没有 uboot 路径、只需使用 SBL->MCU app -> Linux、我们已经在引导过程中删除了 uboot-spl 和 uboot 路径。

    请注意这一点。 谢谢。

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

    您好!

    所以它是 SBL (MCU R5)->MCU 应用(MCU R5)->A72 (ATF)->A72 (Linux)

    您能否强调为什么 OSPI 需要成为一个模块? 由于这是引导介质、我们不会将其作为模块尝试。
    此外、您是否卸下模块、然后重新插入、或者即使没有卸下模块也会看到错误?

    -凯尔西

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

    需要在 MCU 和 Linux 之间切换 ospi 闪存控制、我们必须将 ospi 作为内核模块。

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

    何利、您好!

    我已准备好7.2 SDK 设置。 我想检查以下步骤:

    您能确认上述步骤吗? 并回答问题?

    此外、问题是否容易重现或在多次运行中发生一次?

    -凯尔西

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

    尊敬的李:

       只需对本案例的背景进行仔细检查:

       起初、我们希望缩短启动时间、以便打开 OSPI 闪存的 PHY 模式。 它运行正常、但是在运行整个系统时、A72和 MCU 将竞争 OSPI 闪存的控制。

       因此、您尝试将 OSPI 驱动程序更改为.ko、以便轻松执行 insmod 和 rmmod 命令、对吧?

    BR

    Sikai  

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

    是的、没错。

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

    您好、Li、

    您还能回答我的问题并确认吗?

    -凯尔西

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

    尊敬的 Keerthy J:

    在 MCU 方面,我们需要应用提到的补丁: ......
     是的
    在 Linux 端、将 OSPI 用作模块。
     是的
    将 SBL 闪存至 OSPI、并将组合应用映像添加至 OSPI 和从 OSPI 引导。
     是的
    文件系统应该在 eMMC 或 SD 中?
     功能
    此外、MCU_R5F、M3和 A72之外还有什么其他遥控器?
     DSP

    6.问题是否容易重现或在多次运行中发生一次?
      可轻松重现

     我们希望在 MCU 运行时验证 ospi 闪存、并且在 Linux 运行时需要编写该闪存。因此需要在 MCU 和 Linux 之间切换 ospi 闪存控制、这就是我们需要 将 ospi 驱动程序作为内核模块的原因

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

    任何更新?

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

    您好!

    您所附的修补程序不能直接应用。 我从我们的团队内部获得了一个补丁。 我现在已经编译了 SBL 更改。 我将在星期一之前在 EVM 上进行测试、然后返回我的结果。 我向我们的内部专家咨询、从未尝试或测试过在内核之间动态共享 ospi。

    此致、

    基尔西

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

    有更新吗?

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

    在 SBL 和 MCU 应用中(autosar),MCU 已在使用 ospi 闪存后执行关闭操作。问题仍然存在。代码列表已删除。是关闭操作正确?或仍然需要执行复位 ospi 闪存操作?

    int32_t SBL_OSPIBootImage (sblEntryPoint_t *尝试)
    。。。。。。μ A
    。。。。。。μ A
      SBL_ospioClose (&boardHandle);

    #if defined (SBL_HLOS_RUSS_FLASH)&&defined (SBL_USE_MCU_DOMAIN_ONLY)&&defined (SBL_ENABLE_DEV_GRP_MCU)
    /*如果我们要直接从 SBL 引导 ATF/U-BOOT/Linux,请仅将 OSPI 闪存重新置于 SPI 模式*/
      SBL_ospioLeaveConfigSPI()
    #endif
    。。。。。。μ A
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jianye、

    我与 OSPI 专家进行了讨论。 在处理 Linux 控制时、之前的软件必须释放1S 模式。

    SPL 流程现已修复:

    diff -git a/common/spl/spl_spi.c b/common/spl/spl_spi.c
     索引 d6528f078f.c1995d5dce 100644
     -- a/common/spl/spl_spi.c
     ++ b/common/spl_spl_spi.c
     @@ 2、t_spr_gi_sigure_spl 2、t_sigure_spl @@ 2、t_spl_sigure_spl 2、t_gi_sp6 * 
    SPL_image->大小,
    (void *) spl_image->load_addr);
    }
    +if (is_enabled (config_spi_flash_soft_reset)){
    +err = spi_nor_remove (flash);
    +if (flash)
    +return err;
    + err} 
    
    

    这也是在 SBL 引导流程中完成的吗?

    此致、
    基尔西

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

    尊敬的 Keermy:

    [引用 userid="274047" URL"~/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors/4217884 #4217884"] 1s

      您是指1个 SPI 模式吗?

    BR

    Sikai

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在探头上、如果 SPI NOR 内核
    支持闪存、它将把一个闪存置于8D 模式。 但 Linux 目前预计将以
    1S 模式获得闪存。 以八进制 DTR 模式将闪存移交给 Linux 意味
    着内核将无法检测到闪存。
    
    此提交添加了
    一个选项,用于在 spl_spi_load_image ()之后对闪存进行软复位,以便将闪存复位为1S 模式
    ,并且 Linux 中的后续 SPI-NOR 探测器不会失败,因为
    spl_spi_load_image ()执行 SPI_flash_probe (),
    因此在完成加载 SPI_flash_probe ()本身中的映像后添加了 remove。
    
    -凯尔西
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Keermy:

    [ @@ userid="274047" URL"~@@/support/processors-group/processors/f/processors-forum/1103185/tda4-j721e-sdk7-2-spi-module-is-loaded-in-ko-mode-causing-kernel-running-errors/4217884 #4217884]diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c index d6528f078f.c1995d5dce 100644 -- a/common/spl/spl/spl_spl+ spr_gi_spi_dsp 2、spr_gi_spl + spr_gi_spi_dsp、spr_gi_mage+_spi_spi_spr_spr_gi_spl + sigure_spl + spr_spi_spl + spr_spi_spi_spi_s SPL_image->大小, (void *) spl_image->load_addr); } +if (is_enabled (config_spi_flash_soft_reset)){ +err = spi_nor_remove (flash); +if (flash) +return err; + err} }

     客户发现他们在 SBL 端没有此类 API、他们想知道他们是否可以在 Linux 端执行此类操作。 他们已经在内核中完成了 SPI_RESET(),他们想知道是否必须将此类复位移至 u-boot,并且 SPI_RESET()的工作方式与  SPI_NOR_REMOVE (FLASH)相同。

    尊敬的李:

      您能否在内核中帮助共享您的复位 SPI 代码? 此外、请帮助描述您在 对 SPI_NOR_REMOVE (FLASH)进行烟雾处理之前所关注的问题。

    BR

    Sikai

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

    您好 Sikai,

    SPI_NOR_SOFT_RESET() API 源代码如下所示, 我们将 API 置于内核驱动程序中的 SPI 扫描之前。

     

    5546静态空 SPI_NOR_SOFT_RESET (struct SPI_NOR * NOR)
    5547{
    5548 struct spi_mem_op;
    5549内径;
    5550.
    5551 op =(struct spi_mem_op) spi_MEM_OP (spi_MEM_OP_CMD (SPINOR_OP_SRSTEN、8)、
    5552 SPI_MEM_OP_NO_DUmy、
    5553 SPI_MEM_OP_NO_ADDR、
    5554 SPI_MEM_OP_NO_DATA);
    5555 SPI_NOR_spimem_setup_op (NOR、&op、SNOR_PROTO_8_8_8_8_DTR);
    5556 ret = spi_mem_exec_op (NOR -> spimem、&op);
    5557 if (ret){
    5558 DEV_WARN (NOR -> DEV、"软件重置失败:%d\n"、ret);
    5559返回;
    5560}
    5561.
    5562 op =(struct spi_mem_op) spi_MEM_OP (spi_MEM_OP_CMD (SPINOR_OP_SRST、8)、
    5563 SPI_MEM_OP_NO_DUmy、
    5564 SPI_MEM_OP_NO_ADDR、
    5565 SPI_MEM_OP_NO_DATA);
    5566 SPI_NOR_spimem_setup_op (NOR、&op、SNOR_PROTO_8_8_8_8_DTR);
    5567 ret = spi_mem_exec_op (NOR -> spimem、&op);
    5568 if (ret){
    5569 DEV_WARN (NOR -> DEV、"软件重置失败:%d\n"、ret);
    5570返回;
    5571}
    5572
    5573/*
    5574 *软件复位不是即时的、延迟因闪存而异
    5575 *闪存。 看看几次闪烁、大多数范围都低于100
    5576 *微秒。 因此、休眠范围为200-400us。
    5577 */
    5578 usleep_range (SPI_NOR_SRST_SLEEP_MIN、SPI_NOR_SRST_SLEEP_MAX);
    5579}

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

    您好!

    谢谢。 我们知道您正在内核中进行重置。
    我从我们的 SPI 专家那里了解到了这一点。 在内核驱动程序中重置闪存后、您是否会看到问题。

    问题是什么?您可以添加日志吗?

    此致、
    基尔西

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

    您好!

    这是日志

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

    尊敬的 Keermy:

       请在 SPL 中添加 RESET()函数后帮助检查日志。 错误仍然存在、客户想知道他们是否需要在 SBL 中进行复位、正如我们之前在这个线程中提到的、我们没有找到适合 SBL 的 API。

       如果我们需要在 SBL 中进行重置、您能帮助为客户提供一个补丁吗?

    BR

    SIKai

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

    尊敬的 Clequi:

       请在此处添加 reset()函数之前和之后帮助上传整个日志,谢谢。  

    BR

    SIKai

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

    您好,

    下面的 Sikai,是具有和不具有重置功能 的日志 e2e.ti.com/.../spi_5F00_fail_5F00_with_5F00_reset.txte2e.ti.com/.../spi_5F00_fail_5F00_without_5F00_reset.txt 

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

    您好!

    重置情况失败、校准模式未找到错误。


    [4.450294] cadence-QSPI 47040000.SPI:无法在最终校准点找到图形
    [4.450296] cadence-QSPI 47040000.SPI:PHY 校准失败:-22

    PHY 校准模式是否在正确的地址刷写?

    之后、您还可以对 SPI_cadence_quadspi 进行修改、然后对 modprobe 进行调制 、以便它可以有效地用作复位控制器和闪存、 因此、如果 PHY 校准第二次通过、我们可以怀疑 SBL 没有使控制器保持内核所期望的正确状态。

    此致、
    基尔西