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.

MMC配置问题

Other Parts Discussed in Thread: AM3354

自己做的板子,主芯为am3354,最近替换了ti-processor-sdk-linux-am335x-evm-03.03.00.04(有修改)以后,TF卡启动往emmc烧写系统的时候会报如下错误,初步怀疑是MMC的配置问题但不能确定,请求各位帮忙分析一下。附上MMC0、MMC1原理图和设备树配置,设备树基于BBB dts进行修改。

mmc1: mmc@48060000 {
        compatible = "ti,omap4-hsmmc";
        ti,hwmods = "mmc1";
        ti,dual-volt;
        ti,needs-special-reset;
        ti,needs-special-hs-handling;
        dmas = <&edma_xbar 24 0 0
                &edma_xbar 25 0 0>;
        dma-names = "tx", "rx";
        interrupts = <64>;
        interrupt-parent = <&intc>;
        reg = <0x48060000 0x1000>;
        status = "disabled";
};

mmc2: mmc@481d8000 {
        compatible = "ti,omap4-hsmmc";
        ti,hwmods = "mmc2";
        ti,needs-special-reset;
        dmas = <&edma 2 0
                &edma 3 0>;
        dma-names = "tx", "rx";
        interrupts = <28>;
        interrupt-parent = <&intc>;
        reg = <0x481d8000 0x1000>;
        status = "disabled";
};

&mmc1 {
        pinctrl-names = "default";
        pinctrl-0 = <&mmc0_pins &mmc0_cd_pins>;
        vmmc-supply = <&vmmcsd_fixed>;
        cd-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>;
        bus-width = <4>;
        status = "okay";
};

&mmc2 {
        pinctrl-names = "default";
        pinctrl-0 = <&mmc1_pins>;
        vmmc-supply = <&vmmcsd_fixed>;
        bus-width = <4>;
        status = "okay";
};

mmc0_pins: pinmux_mmc0_pins {
        pinctrl-single,pins = <
                0x00F0  (MUX_MODE0 | PIN_INPUT_PULLUP) /* mmc0_dat3.mmc0_dat3 */
                0x00F4  (MUX_MODE0 | PIN_INPUT_PULLUP) /* mmc0_dat2.mmc0_dat2 */
                0x00F8  (MUX_MODE0 | PIN_INPUT_PULLUP) /* mmc0_dat1.mmc0_dat1 */
                0x00FC  (MUX_MODE0 | PIN_INPUT_PULLUP) /* mmc0_dat0.mmc0_dat0 */
                0x0100  (MUX_MODE0 | PIN_INPUT_PULLUP) /* mmc0_clk.mmc0_clk */
                0x0104  (MUX_MODE0 | PIN_INPUT_PULLUP) /* mmc0_cmd.mmc0_cmd */
        >;
};

mmc1_pins: pinmux_mmc1_pins {
        pinctrl-single,pins = <
                0x000C  (MUX_MODE1 | PIN_INPUT_PULLUP) /* gpmc_ad3.mmc1_dat3 */
                0x0008  (MUX_MODE1 | PIN_INPUT_PULLUP) /* gpmc_ad2.mmc1_dat2 */
                0x0004  (MUX_MODE1 | PIN_INPUT_PULLUP) /* gpmc_ad1.mmc1_dat1 */
                0x0000  (MUX_MODE1 | PIN_INPUT_PULLUP) /* gpmc_ad0.mmc1_dat0 */
                0x0080  (MUX_MODE2 | PIN_INPUT_PULLUP) /* gpmc_csn1.mmc1_clk */
                0x0084  (MUX_MODE2 | PIN_INPUT_PULLUP) /* gpmc_csn2.mmc1_cmd */
        >;
};

mmc0_cd_pins: pinmux_mmc0_cd_pins {
        pinctrl-single,pins = <
                0x0234  (MUX_MODE7 | PIN_INPUT_PULLUP)
        >;
};

报错:

[  255.376793] mmcqd/1: page allocation failure: order:2, mode:0x208c020
[  255.383300] CPU: 0 PID: 52 Comm: mmcqd/1 Not tainted 4.4.41-gf9f6f0db2d #33
[  255.406472] Hardware name: Generic AM33XX (Flattened Device Tree)
[  255.421740] Backtrace:
[  255.424281] [<c0013508>] (dump_backtrace) from [<c0013704>] (show_stack+0x18/0x1c)
[  255.445211]  r7:0208c020 r6:00000000 r5:00000002 r4:0208c020
[  255.454557] [<c00136ec>] (show_stack) from [<c02ac908>] (dump_stack+0x24/0x28)
[  255.479282] [<c02ac8e4>] (dump_stack) from [<c00ba054>] (warn_alloc_failed+0xe4/0x124)
[  255.497820] [<c00b9f74>] (warn_alloc_failed) from [<c00bd2a4>] (__alloc_pages_nodemask+0x7e0/0x988)
[  255.520846]  r3:0208c020 r2:00000000
[  255.524478]  r6:00000030 r5:00000000 r4:00000002
[  255.536782] [<c00bcac4>] (__alloc_pages_nodemask) from [<c00bd64c>] (alloc_kmem_pages+0x20/0xac)
[  255.545608]  r10:dc534de0 r9:dc148218 r8:00000001 r7:02088020 r6:00000002 r5:0208c020
[  255.570270]  r4:00000000
[  255.572857] [<c00bd62c>] (alloc_kmem_pages) from [<c00d4354>] (kmalloc_order+0x18/0x30)
[  255.600295]  r7:02088020 r6:dc503d48 r5:dc534000 r4:00000000
[  255.606076] [<c00d433c>] (kmalloc_order) from [<c00f6218>] (__kmalloc+0x1a0/0x1ec)
[  255.631278] [<c00f6078>] (__kmalloc) from [<c033e070>] (edma_prep_slave_sg+0xa0/0x35c)
[  255.650172]  r9:dc148218 r8:00000001 r7:ffffffff r6:dc503d48 r5:dc534000 r4:00000000
[  255.665413] [<c033dfd0>] (edma_prep_slave_sg) from [<c0574f34>] (omap_hsmmc_request+0x460/0x630)
[  255.686943]  r10:dc534de0 r9:dc503e08 r8:00000000 r7:ffffffff r6:dc503d48 r5:c033dfd0
[  255.694877]  r4:dc44b400
[  255.710032] [<c0574ad4>] (omap_hsmmc_request) from [<c055d024>] (__mmc_start_request+0x48/0xdc)
[  255.730400]  r10:dc539eac r9:dc503e50 r8:dc503d48 r7:00000001 r6:dc503d48 r5:dc44b400
[  255.747628]  r4:dc503d48
[  255.750205] [<c055cfdc>] (__mmc_start_request) from [<c055d1b0>] (mmc_start_request+0xf8/0x120)
[  255.775303]  r9:dc503e50 r8:dc503d34 r7:00000001 r6:dc503d48 r5:dc44b400 r4:dc503d48
[  255.783282] [<c055d0b8>] (mmc_start_request) from [<c055e61c>] (mmc_start_req+0x2cc/0x418)
[  255.811177]  r5:00000001 r4:dc44b400
[  255.814844] [<c055e350>] (mmc_start_req) from [<c056d404>] (mmc_blk_issue_rw_rq+0xc4/0xb64)
[  255.839494]  r10:dc49d800 r9:dc5631d0 r8:dc503c00 r7:dc503c00 r6:dc503c04 r5:dc5631d0
[  255.856450]  r4:dc503d48
[  255.863061] [<c056d340>] (mmc_blk_issue_rw_rq) from [<c056e134>] (mmc_blk_issue_rq+0x290/0x524)
[  255.884582]  r10:dc5631d0 r9:dc38a688 r8:dc503c00 r7:dc503c00 r6:24590001 r5:dc49d800
[  255.892581]  r4:dc503c04
[  255.895154] [<c056dea4>] (mmc_blk_issue_rq) from [<c056faf4>] (mmc_queue_thread+0xd0/0x194)
[  255.928420]  r10:dc503c0c r9:dc38a688 r8:00000001 r7:00000000 r6:24590001 r5:dc538000
[  255.936344]  r4:dc503c04
[  255.952334] [<c056fa24>] (mmc_queue_thread) from [<c004d95c>] (kthread+0xdc/0xf4)
[  255.974229]  r10:00000000 r9:00000000 r8:00000000 r7:c056fa24 r6:dc503c04 r5:dc504bc0
[  255.994625]  r4:00000000 r3:dc48b180
[  256.003156] [<c004d880>] (kthread) from [<c000fab8>] (ret_from_fork+0x14/0x3c)
[  256.025207]  r7:00000000 r6:00000000 r5:c004d880 r4:dc504bc0
[  256.034397] Mem-Info:
[  256.047347] active_anon:12859 inactive_anon:2598 isolated_anon:0
[  256.047347]  active_file:49772 inactive_file:50218 isolated_file:0
[  256.047347]  unevictable:0 dirty:6507 writeback:10657 unstable:0
[  256.047347]  slab_reclaimable:6011 slab_unreclaimable:2119
[  256.047347]  mapped:8378 shmem:3247 pagetables:233 bounce:0
[  256.047347]  free:992 free_pcp:48 free_cma:0
[  256.130819] Normal free:3596kB min:2708kB low:3384kB high:4060kB active_anon:51436kB inactive_anon:10392kB active_file:199200kB inactive_file:201096kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:524288kB managed:508836kB mlocked:0kB dirty:26348kB writeback:42628kB mapped:33512kB shmem:12988kB slab_reclaimable:24048kB slab_unreclaimable:8476kB kernel_stack:792kB pagetables:932kB unstable:0kB bounce:0kB free_pcp:236kB local_pcp:236kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
[  256.213314] lowmem_reserve[]: 0 0 0
[  256.217006] Normal: 1168*4kB (UME) 150*8kB (UM) 5*16kB (M) 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB 0*8192kB = 5952kB
[  256.230948] 102587 total pagecache pages
[  256.234917] 0 pages in swap cache
[  256.239547] Swap cache stats: add 0, delete 0, find 0/0
[  256.244806] Free swap  = 0kB
[  256.248527] Total swap = 0kB
[  256.251440] 131072 pages RAM
[  256.254327] 0 pages HighMem/MovableOnly
[  256.259117] 3863 pages reserved
[  256.262274] 12288 pages cma reserved
[  256.265885] edma 49000000.edma: edma_prep_slave_sg: Failed to allocate a descriptor
[  256.275663] omap_hsmmc 481d8000.mmc: prep_slave_sg() failed
[  256.282743] omap_hsmmc 481d8000.mmc: MMC start dma failure
[  256.290499] mmcblk1: unknown error -1 sending read/write command, card status 0x900
[  256.299136] blk_update_request: I/O error, dev mmcblk1, sector 2280121
[  256.305773] blk_update_request: I/O error, dev mmcblk1, sector 2280129
[  256.313266] blk_update_request: I/O error, dev mmcblk1, sector 2280137
[  256.320412] blk_update_request: I/O error, dev mmcblk1, sector 2280145
[  256.327486] blk_update_request: I/O error, dev mmcblk1, sector 2280153
[  256.334072] blk_update_request: I/O error, dev mmcblk1, sector 2280161
[  256.341328] blk_update_request: I/O error, dev mmcblk1, sector 2280169
[  256.348373] blk_update_request: I/O error, dev mmcblk1, sector 2280177
[  256.354967] blk_update_request: I/O error, dev mmcblk1, sector 2280185
[  256.362255] blk_update_request: I/O error, dev mmcblk1, sector 2280193
[  256.370273] EXT4-fs warning (device mmcblk1p2): ext4_end_bio:329: I/O error -5 writing to inode 18586 (offset 0 size 253952 starting block 285077)
[  256.384292] Buffer I/O error on device mmcblk1p2, logical block 154487
[  256.391393] Buffer I/O error on device mmcblk1p2, logical block 154488
[  256.398440] Buffer I/O error on device mmcblk1p2, logical block 154489
[  256.405005] Buffer I/O error on device mmcblk1p2, logical block 154490
[  256.412215] Buffer I/O error on device mmcblk1p2, logical block 154491
[  256.419204] Buffer I/O error on device mmcblk1p2, logical block 154492
[  256.425772] Buffer I/O error on device mmcblk1p2, logical block 154493
[  256.432998] Buffer I/O error on device mmcblk1p2, logical block 154494
[  256.440000] Buffer I/O error on device mmcblk1p2, logical block 154495
[  256.446977] Buffer I/O error on device mmcblk1p2, logical block 154496
[  256.453716] EXT4-fs warning (device mmcblk1p2): ext4_end_bio:329: I/O error -5 writing to inode 18587 (offset 0 size 4096 starting block 285078)
[  256.468040] EXT4-fs warning (device mmcblk1p2): ext4_end_bio:329: I/O error -5 writing to inode 18588 (offset 0 size 8192 starting block 285080)
[  256.481845] EXT4-fs warning (device mmcblk1p2): ext4_end_bio:329: I/O error -5 writing to inode 18589 (offset 0 size 20480 starting block 285085)
[  256.495610] EXT4-fs warning (device mmcblk1p2): ext4_end_bio:329: I/O error -5 writing to inode 18590 (offset 0 size 4096 starting block 285086)
[  256.509374] EXT4-fs warning (device mmcblk1p2): ext4_end_bio:329: I/O error -5 writing to inode 18591 (offset 0 size 4096 starting block 285087)
[  256.523167] EXT4-fs warning (device mmcblk1p2): ext4_end_bio:329: I/O error -5 writing to inode 18592 (offset 0 size 20480 starting block 285092)
[  256.536982] EXT4-fs warning (device mmcblk1p2): ext4_end_bio:329: I/O error -5 writing to inode 18594 (offset 0 size 8192 starting block 285094)
[  256.550072] EXT4-fs warning (device mmcblk1p2): ext4_end_bio:329: I/O error -5 writing to inode 18595 (offset 0 size 4096 starting block 285095)
[  256.563978] EXT4-fs warning (device mmcblk1p2): ext4_end_bio:329: I/O error -5 writing to inode 18603 (offset 0 size 4096 starting block 285096)
[  262.661695] mmcqd/1: page allocation failure: order:2, mode:0x208c020
[  262.677743] CPU: 0 PID: 52 Comm: mmcqd/1 Not tainted 4.4.41-gf9f6f0db2d #33
[  262.684778] Hardware name: Generic AM33XX (Flattened Device Tree)
[  262.708190] Backtrace:

  • 之前的软件版本是哪个?

  • 只知道是以前的PDK而且还经过第三方修改,参与的人都离职了......,请问根据这些信息是否可以判断哪里出错?烧写系统的时候会有百分之70左右几率出现问题,但若不出现问题,系统烧写成功可以正常使用,DDR的配置参照SDK的DDR2进行配置。

  • 也就是说这个问题是概率性出现的?同样的板子以前的软件版本有类似问题么?

  • 没出现过问题,以前的软件版本是由第三方(ema)开发的,之后也没人维护。现在打算基于TI的最新SDK通过设备树做一版,就当前这问题无法解决,上网查过资料,无法确定是DDR还是MMC的配置出问题。直接用的SDK U-boot DDR2的配置,请问这样会有问题么?

  • 找到一份资料跟当前情况有点类似,按照里面提到的方法将swap设置高了以后今天测试了一天都没有出现烧写错误,但还是想从根本上解决问题,毕竟这值太高了也不好。

    https://archlinuxarm.org/forum/viewtopic.php?f=48&t=9379&p=48898&hilit=beaglebone%2A+sysctl#p48898

  • 重新查询了以前的sdk版本,为ti-sdk-am335x-evm-06.00.00.00-Linux-X86-Install。目前的使用是ti-processor-sdk-linux-am335x-evm-03.03.00.04(修改了设备树)

    今天测试了一下,swap提高了以后依然会出现同样问题。代码定位在edma_prep_slave_sg

    edesc = kzalloc(sizeof(*edesc) + sg_len * sizeof(edesc->pset[0]),
            GFP_ATOMIC);
    if (!edesc) {
        dev_err(dev, "%s: Failed to allocate a descriptor\n", __func__);
        return NULL;
    }
    应该是申请内存的时候出现错误,将sizeof(*edesc) + sg_len * sizeof(edesc->pset[0])的数值打印出来也没见明显异常,被这个问题搞得要崩溃了,还请TI的各位给点意见。。。