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.

[参考译文] AM623:将文件复制到 eMMC 会导致内核崩溃(在 SDK10.1说明中修复)

Guru**** 2394295 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1489576/am623-copying-files-to-emmc-causes-kernel-crash-fixed-in-sdk10-1-clarification

器件型号:AM623

工具与软件:

我的客户在 Linux 中复制大文件时具有部分板 eMMC HS200稳定性、但无法正常运行。 借助来自此 主题 的补丁、可以修复故障电路板。

在注明的 SDK10.01版本中、解决了复制大文件失败问题。 然后、将补丁与 SDK9.2、SDK10.0和 SDK10.1的相对文件进行了比较、摘要和问题如下:

#1。 在 SDK10.1之前、uboot 和内核 dtsi sdhci0参数都使用相同的参数、但不遵循数据表。

	sdhci0: mmc@fa10000 {
		compatible = "ti,am62-sdhci";
		reg = <0x00 0x0fa10000 0x00 0x1000>, <0x00 0x0fa18000 0x00 0x400>;
		interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>;
		power-domains = <&k3_pds 57 TI_SCI_PD_EXCLUSIVE>;
		clocks = <&k3_clks 57 5>, <&k3_clks 57 6>;
		clock-names = "clk_ahb", "clk_xin";
		assigned-clocks = <&k3_clks 57 6>;
		assigned-clock-parents = <&k3_clks 57 8>;
		bus-width = <8>;
		mmc-ddr-1_8v;
		mmc-hs200-1_8v;
		ti,clkbuf-sel = <0x7>;
		ti,otap-del-sel-legacy = <0x0>;
		ti,otap-del-sel-mmc-hs = <0x0>;
		ti,otap-del-sel-ddr52 = <0x5>;
		ti,otap-del-sel-hs200 = <0x5>;
		ti,itap-del-sel-legacy = <0xa>;
		ti,itap-del-sel-mmc-hs = <0x1>;
		status = "disabled";
	};

#2。 在 SDK10.1中、uboot 仍然使用 upper/old 参数。 内核 DTS 按照数据表进行了如下更新。

问题:

#2.1为什么 uboot 使用不同的抽头延迟参数、该参数不遵循数据表、但在 HS200下仍然可以工作。

第2.2号。 为什么 Linux 必须使用抽头延迟值作为数据表、它是解决该问题的主要因素吗? 或者只是更新它以遵循数据表? 但忘记更新 uBoot dts fil?

	sdhci0: mmc@fa10000 {
		compatible = "ti,am62-sdhci";
		reg = <0x00 0x0fa10000 0x00 0x1000>, <0x00 0x0fa18000 0x00 0x400>;
		interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>;
		power-domains = <&k3_pds 57 TI_SCI_PD_EXCLUSIVE>;
		clocks = <&k3_clks 57 5>, <&k3_clks 57 6>;
		clock-names = "clk_ahb", "clk_xin";
		assigned-clocks = <&k3_clks 57 6>;
		assigned-clock-parents = <&k3_clks 57 8>;
		bus-width = <8>;
		mmc-ddr-1_8v;
		mmc-hs200-1_8v;
		ti,clkbuf-sel = <0x7>;
		ti,otap-del-sel-legacy = <0x0>;
		ti,otap-del-sel-mmc-hs = <0x0>;
		ti,otap-del-sel-hs200 = <0x6>;
		ti,itap-del-sel-legacy = <0x0>;
		ti,itap-del-sel-mmc-hs = <0x0>;
		status = "disabled";
	};
  

#3. drivers/mmc/host/sdhci_am654.c 中有一些更改、 但与主线程中的补丁相比、SDK10.1中没有发现以下更改、该补丁是否实际上不需要?

 static u8 sdhci_am654_write_power_on(struct sdhci_host *host, u8 val, int reg)
 {
 	writeb(val, host->ioaddr + reg);
@@ -706,6 +753,12 @@ static int sdhci_am654_init(struct sdhci_host *host)
 	u32 mask;
 	u32 val;
 	int ret;
+	u16 ctrl;
+
+	/* Unset CTRL_VDD_180 */
+	ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
+	ctrl &= ~SDHCI_CTRL_VDD_180;
+	sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);

#4. sdhci_am654.c 的主要变化是添加  sdhci_am654_start_signal_voltage_switch()调用。 此更改修复了什么问题?

#5. 从上螺纹、更换串联电阻可以帮助解决问题。 最初是33欧姆、某些板无法启动。 然后更改为22欧姆、可以启动。  

#6. 使用贴片、无论电阻器是33欧姆、22欧姆还是0欧姆、都可以启动。 补丁的影响似乎大于硬件因素。  

因此需要弄清楚驱动器变化。

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

    尊敬的 Tony:

    内核 devicetree 中的 TAPDLY 值更新与内核 sdhci_am654.c 驱动程序更新一起提供、但我们尚未更新 U-Boot sdhci 驱动程序(鉴于我们尚未收到任何 U-Boot MMC 问题报告)、因此 U-Boot 仍使用旧值。

    我将深入探讨与参考的 e2e 线程和 SDK10.1之间的 sdhci_am654.c 补丁差异、稍后予以解答。

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

    谢谢 Bin。

    来自客户的问题列表:

    #1。 HS200出现故障的根本原因。

    #2。 为什么调整串联电阻会改变结果? 将33欧姆更改为22欧姆可以提高故障电路板引导率、无需补丁。

    #3. 为什么设置 SDHCI_CTRL_VDD_180影响 ACMD6命令? 从测试结果来看、如果设置 SDHCI_CTRL_VDD_180=1、将导致  故障电路板上的 ACMD6超时。

    #4. 根据 TRM、需要设置 SDHCI_CTRL_VDD_180 以选择信号电压、但一般情况下、eMMC 驱动程序 sdhci.c 正是如此、为何在 TI 驱动程序补丁中将其删除。

    #5. 是否有其他与 eMMC 相关的补丁?

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

    尊敬的 Tony:

    正如离线讨论的那样、请要求客户测试从 SDK10.1获取的以下两个内核补丁、而不是使用参考的 e2e 线程中的补丁。

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/commit/?h=10.01.03&id=5bc0054f6e8f93be56a5cf2570e9db9d40f5d665

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/commit/?h=10.01.03&id=32ae7316ddc6d9b6bb0d87706cf7daa44c4c1e92

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

    您好、Bin、

    第二个补丁在 MMC0之外修改了 MMC1/2默认延迟值、是否有必要?

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

    尊敬的 Tony:

    这些与 eMMC 崩溃问题无关。

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

    您好、Bin、

    我将其修补至 SDK9.2.1.09和闪存至 eMMC、移除 SD 卡以从 eMMC 引导、它使输出 MMC 电源未能打开、需要插入 SD 卡来停止它。

    am62xx-evm login: [   14.223159] sdhci-am654 fa00000.mmc: Power on failed
    [   15.780291] sdhci-am654 fa00000.mmc: Power on failed
    [   17.544416] sdhci-am654 fa00000.mmc: Power on failed
    [   17.675477] kauditd_printk_skb: 21 callbacks suppressed
    [   17.675526] audit: type=1334 audit(1742880428.018:49): prog-id=24 op=UNLOAD
    [   17.688182] audit: type=1334 audit(1742880428.018:50): prog-id=23 op=UNLOAD
    [   19.098170] sdhci-am654 fa00000.mmc: Power on failed
    [   20.658198] sdhci-am654 fa00000.mmc: Power on failed
    [   22.223385] sdhci-am654 fa00000.mmc: Power on failed
    [   23.991010] sdhci-am654 fa00000.mmc: Power on failed
    [   25.551112] sdhci-am654 fa00000.mmc: Power on failed
    [   27.106770] sdhci-am654 fa00000.mmc: Power on failed
    [   28.668938] sdhci-am654 fa00000.mmc: Power on failed
    [   30.435782] sdhci-am654 fa00000.mmc: Power on failed
    [   31.999871] sdhci-am654 fa00000.mmc: Power on failed
    [   33.562245] sdhci-am654 fa00000.mmc: Power on failed
    [   35.124446] sdhci-am654 fa00000.mmc: Power on failed
    [   36.889351] sdhci-am654 fa00000.mmc: Power on failed
    [   38.453327] sdhci-am654 fa00000.mmc: Power on failed
    [   40.015681] sdhci-am654 fa00000.mmc: Power on failed
    [   41.577733] sdhci-am654 fa00000.mmc: Power on failed
    [   43.344968] sdhci-am654 fa00000.mmc: Power on failed
    [   44.459545] audit: type=1334 audit(1742880513.686:51): prog-id=26 op=UNLOAD
    [   44.466826] audit: type=1334 audit(1742880513.686:52): prog-id=25 op=UNLOAD
    [   44.901024] sdhci-am654 fa00000.mmc: Power on failed
    [   46.456899] sdhci-am654 fa00000.mmc: Power on failed
    [   48.020138] sdhci-am654 fa00000.mmc: Power on failed
    [   49.784400] sdhci-am654 fa00000.mmc: Power on failed
    [   51.340854] sdhci-am654 fa00000.mmc: Power on failed
    [   52.896653] sdhci-am654 fa00000.mmc: Power on failed
    [   54.459675] sdhci-am654 fa00000.mmc: Power on failed
    [   56.219258] sdhci-am654 fa00000.mmc: Power on failed
    [   57.779037] sdhci-am654 fa00000.mmc: Power on failed
    [   59.334966] sdhci-am654 fa00000.mmc: Power on failed
    [   60.890651] sdhci-am654 fa00000.mmc: Power on failed
    [   62.658268] sdhci-am654 fa00000.mmc: Power on failed

    BTW、SDK9.2.1.09 sdchci_am654x.c 在此结构中具有 HS200_tunning、与 SDK9.2.1.10相比、需要将其删除以应用补丁、然后重新添加、否则无法成功。

    结构 sdhci_am654_data{
    struct regmap *base;
    bool legacy_otapdly;
    u32 OTAP_DEL_SEL[array_size (td)];
    u32 ITAP_DEL_SEL[array_size (td)];
    u32 ITAP_DEL_ENA[array_size (td)];
    int clkbuf_sel;
    INT TRM_ICP;
    int drv_strength;
    int strb_sel;
    U32标志;
    U32怪癖;
    Bool dll_enable;
    bool HS200_tunning;

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

    尊敬的 Tony:

    我将它修补到 SDK9.2.1.09并刷写到 eMMC、移除 SD 卡以从 eMMC 引导、它使输出 MMC 保持开启失败、

    此 SDcard"开机失败"问题是否仅在您应用修补程序后才发生?

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

    它与 eMMC 引导无关、需要在内核 DTS 中禁用 MMC1。 它与 SDK9.2和最新的 SDK10.1y 相同。 我将发布一个新主题来对此进行讨论。

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

    这听起来与下面链接的主题中报告的问题相同。

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1489488/processor-sdk-am62x-sd-card-fails-to-power-on-while-booting-linux