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/TDA2EG-17:进入 Linux 内核 QSPI 运行速度仅为~19MHz。

Guru**** 2539500 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/649674/linux-tda2eg-17-enter-linux-kernel-qspi-operate-speed-just-19mhz

器件型号:TDA2EG-17

工具/软件:Linux

您好 ,专家:

我们发现 visionsdk 2.12.02 Linux 以~19Mhz 的频率运行 QSPI 速度设置。

在 uboot 时、我们将 QSPI 速度设置为76.8MHz。 (arch/arm/dts/dra71-evm.dts)、探测 QSPI 时钟信号、速度为76.8MHz。

但是、当内核启动时、首先探测 QSPI 时钟、它是76.8MHz、当进入 Linux 控制台时、QSPI 读取/写入速度仅为19MHz。

默认模式读取0x4b000040、它是0x80000004。

使用 omapconf 写入0x4b300040 0x8000000001将 QSPI 时钟 div 从4更改为1。 在内核上、QSPI 速度变为76.8MHz。

请帮助我们检查代码中的哪个部分在内核上更改了 QSPI 速度?

在 DTS 文件中、我们将 QSPI 最大速度设置为76.8MHz、但我们没有更改哪个代码部分的 QSPI 时钟设置。

此致!

韩涛

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

    我已将您的问题转交 QSPI 专家进行评论。

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

    这是在 TI EVM 上还是在定制板上?

    您能否共享用于电路板的 DTS/dtsi 文件?

    对于 TI EVM arch/arm/boot/dts/dra72-EVM-common.dtsi、QSPI 和闪存速度均设置为76.8MHz

    &QSPI{

    状态="正常";


    SPI-max-frequency =<76800000>;

    m25p80@0{

    兼容="s25fl256s1";

    SPI-max-frequency =<76800000>;


    您是否有等分配置?


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

     您好 RK:

    是的、DTS 文件设置 QSPI 接口和 QSPI 闪存速度为76.8MHz。

    您可以尝试运行 VISION SDK 2.12.02预编译映像。 (tda2xx-evm/tisdk-rootfs-image-dra7xx-evm.tar.xz)

    测试 EVM 板 U18引脚16、时钟为19MHz。

    如果使用处理器 SDK 3.02 ( )

    文件系统。 测试 U18引脚16、时钟为76.8MHz。

    相信 Vision SDK 已更改 QSPI 接口设置。

    测试命令 root@dra7xx-EVM:~# dd if=/dev/mtd6 of=/dev/null

    此致!

    韩涛

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

    韩涛

    您能不能全部使用 DTS 文件,SPI-max-frequency 的设置是什么?

    此外、请在内核 ti-SPI 驱动程序中添加调试打印、以检查从 DTB 文件读取的确切值是多少、  

    diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
    索引3f225f9..4968430 100644
    -- a/drivers/spi/spi-ti-qspi.c
    ++ b/drivers/spi/spi-ti-qspi.c
    @@-738、8 +738、10 @@静态 int ti_qspi_probe (struct platform_device * pdev)
    PM_Runtime_set_autosuspend_delay (&pdev->dev、QSPI_AutoSuspend_timeout);
    Pm_runtime_enable (&pdev->dev);

    - if (!of _property_read_u32 (np、"spi-max-frequency "、&max_freq))
    + if (!of _property_read_u32 (np、"spi-max-frequency "、&max_freq)){
    + printk ("%s:spi-max-freq:%d\n"、__func__、max_freq);
    QSPI->SPI_max_frequency = max_freq;
    +}

    RET = devm_spi_register_master (&pdev->dev、master);
    IF (RET)

    此致

    Ravi

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

    e2e.ti.com/.../dra72_2D00_evm_2D00_common_5F00_dtsi.txtHiRavi:

    请检查随附的 DTS 文件。

    它是我们使用的板。

    此致!

    孟祥建

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

    e2e.ti.com/.../spilog.txtHiRavi:

    请检查日志。 客户电路板打印 QSPI 速度为76.8MHz。

    此致!

    韩涛

    [2.269608]   ioctl DBUFIOC_EXPORT_VIRTMEM =-1072899120
    [2.277095]   ti_QSPI_probe:SPI-max-freq:76800000
    [2.282538]   m25p80 spi32766.0:n25q512ax3 (65536 KB)
    [2.288016]   在 MTD 器件 spi32766.0上找到的9个器件分区

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

    韩涛

    是的、从 DTB 传递的 SPI-max-频率是正确的。 想知道在 QSPI_CLOCK _CNTRL_REG (0x4b300040)中配置的 clk_divider 值是多少。

    您能否添加以下调试打印内容以检查配置的 clk_div 值。

    diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
    索引3f225f9.224de49 100644
    -- a/drivers/spi/spi-ti-qspi.c
    ++ b/drivers/spi/spi-ti-qspi.c
    @@-162、6 +162、8 @@静态 int ti_qspi_setup (struct spi_device * spi)
    clk_rate = clk_get_rate (QSPI->fclk);

    CLK_div = DIV_ROUND (clk_rate、QSPI->SPI_max_frequency)- 1;
    + printk ("%s":clk_rate (%d)、clk_div (%x)、spi_max_fraquency (%d)\n"、__func__、clk_rate、clk_div、
    + QSPI->SPI_MAX_FREQUENCY);

    如果(clk_div < 0){
    dev_dbg (QSPI->dev、"时钟分频器< 0、使用/1分频器\n");
    @@-194、6 +196、8 @@静态 int ti_qspi_setup (struct spi_device * spi)
    CLK_MASK = QSPI_CLK_EN | clk_div;
    TI_QSPI_WRITE (QSPI、clk_mask、QSPI_SPI_clock_CNTRL_REG);
    ctx_reg->clkctrl = clk_mask;
    + printk ("%s":clk_mask (%x) clock_ctrl_reg (%x)\n"、__func__、clk_mask、
    + ti_qspi_read (QSPI、QSPI_SPI_clock_CNTRL_REG);

    PM_Runtime_mark_last_busy (QSPI->dev);
    RET = pm_runtime_put_autosuspend (QSPI->dev);
    @@-738、8 +742、10 @@静态 int ti_qspi_probe (struct platform_device * pdev)
    PM_Runtime_set_autosuspend_delay (&pdev->dev、QSPI_AutoSuspend_timeout);
    Pm_runtime_enable (&pdev->dev);

    - if (!of _property_read_u32 (np、"spi-max-frequency "、&max_freq))
    + if (!of _property_read_u32 (np、"spi-max-frequency "、&max_freq)){
    + printk ("%s:spi-max-freq:%d\n"、__func__、max_freq);
    QSPI->SPI_max_frequency = max_freq;
    +}

    RET = devm_spi_register_master (&pdev->dev、master);
    IF (RET)

    此致

    Ravi

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

    尊敬的 Ravi:

    请查看以下打印日志。

    0x4b300040设置为0x80000。

    我们发现 VISION SDK 更改了0x4a009838寄存器。

    omapconf 读取0x4a009838 该值为0x05030002。

    如果我们将0x4a009839更改为0x01030002、则 QSPI 读取速度更改为76.8MHz。

    此致!

    孟祥建

    1.754404] AIC-78_DVDD:由 EVM_3V3供电
    [1.758643] OMAP DSS 版本6.1
    [1.762582] omapdss_DSS 580000.dss:bound 58001000.dispc (ops 0xc04607b4)
    [1.856297] loop:module loaded
    [1.876708] vmemexp device Major num=246
    [1.880846] vmemexp 类已注册
    [1.884613]/dev/vmemexp 器件已注册
    [1.888729] ioctl DBUFIOC_EXPORT_VIRTMEM =-1072899120
    [1.895045] ti_QSPI_probe:SPI-max-freq:76800000
    [1.900165] ti_QSPI_setup:clk_mask (80000000) clock_ctrl_reg (80000000)
    [1.907182] m25p80 spi32766.0:n25q512ax3 (65536 KB)
    [1.922932]在 MTD 器件 spi32766.0上找到的9个部分分区
    [1.928795]在"spi32766.0"上创建9个 MTD 分区:
    [1.934018] 0x000000000000 0x000000020000:"QSPI.SPL"

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

    大家好、Meng Xiang Jian

    好的、将 CM_L4PER2_QSPI_CLKCTRL.CLKSEL_DEV 设置为正确的值(除以1)后、您可以得到76.8Mhz。

    此致

    Ravi

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

    尊敬的 Ravi:

    是的。  更改 CM_L4PER2_QSPI_CLKCTRL.CLKSEL_DEV 可以使用76.8Mhz 读取 QSPI。

    但我们不知道代码是否修改了这些寄存器。

    只需找到 DTS 对这些寄存器的描述即可。  UBoot 这些寄存器除以1、但内核除以4。

    此致!

    韩涛

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

    韩涛

     

    1. U-boot 或内核未配置 CM_L4PER2_QSPI_CLKCTRL.CLKSEL_DEV 位。
    2. 默认值为0、这意味着提供最大时钟频率、在内部 QSPI 驱动器 QSPI_CLOCK _CNTL_REG 用于根据所需值对时钟进行分频。

     

    1. 该寄存器内核中的引用是 clock dtsi 文件@ arch/arm/boot/dts/dra7xx-clocks.dtsi。

           QSPI_gfclk_div:QSPI_gfclk_div{

                   #clock-cells =<0>;

                   兼容="ti、分频器时钟";

                   时钟=<&QSPI_gfclk_mux>;

                   TI、bit-shift =<25>;

                   ti、max-div =<4>;

                   reg =<0x1838>;

                   TI、二进制索引功率;

           };

     

    1. 在 u-boot 中: Clock_source 选择为1 (来自 DPLL_PER 的 PER_QSPI_CLK)

    arch/arm/cpU/armv7/omap5/hw_data.c

    void enable_basic_clocks (void)

     

    …μ A

    #ifdef CONFIG_TI_QSPI

           setbits_le32 (((*prcm)->cm_l4per_qspi_clkctrl、(1<<24));

    #endif

     

     

    我假设在 SPL 代码中、某些情况下 CM_L4PER2_QSPI_CLKCTRL.CLKSEL_DEV 的位26:25已设置为4。

     

    此致

    Ravi

     

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



    它是 VISION SDK IPU 固件将 QSPI 速度更改为19.2Mhz。

    更改 utils-prcm.c 第427行。 将 CM_L4PER2_QSPI_CLKCTRL 设置为0x01000000。

    然后、我们可以使用76.8MHz 访问 QSPI。

    此致!

    韩涛

    PRCM_SET_MODULE_MODE (L4PER_CM_CORE、 L4PER_CM_CORE_CM_L4PER2_QSPI_CLKCTRL、 MODE_ENABLED、0x05000000、0x07000000);