TI中文支持网
TI专业的中文技术问题搜集分享网站

AM335x映射McSPI寄存时出错:Unhandled fault: external abort on non-linefetch

对McSPI寄存器进行映射操作,加载模块驱动出错:

一直在用该方法操作寄存器,这次在McSPI发生错误,求解答?

[ 29.562561] Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa1a0124
[ 29.570556] Internal error: : 1028 [#1]
[ 29.574554] Modules linked in: spi_slave(O+) spidma_oled(O)
[ 29.580383] CPU: 0 Tainted: G O (3.2.0 #375)
[ 29.586120] PC is at MDS_probe+0x4ac/0x5cc [spi_slave]
[ 29.591491] LR is at console_unlock+0x170/0x1f8
[ 29.596221] pc : [<bf004884>] lr : [<c003e41c>] psr: 60000013
[ 29.596221] sp : df6bdd58 ip : df6bdc50 fp : df6bdd7c
[ 29.608184] r10: bf008000 r9 : 0000062f r8 : df773940
[ 29.613647] r7 : bf007194 r6 : 00000000 r5 : bf004e50 r4 : bf00519c
[ 29.620452] r3 : fa1a0124 r2 : c0644108 r1 : 00000000 r0 : bf004ca8
[ 29.627258] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment use

部分驱动如下:

#define REG_MCSPI_BASE 0x48030000

#define REG_MCSPI_SYST   (REG_MCSPI_BASE+0x124)

unsigned long *mcspi_syst;

{

    …….

    request_mem_region(REG_MCSPI_SYST, 4, "REG_MCSPI_SYST");

    mcspi_syst = ioremap_nocache(REG_MCSPI_SYST, 4);

    printk("mcspi_syst = %x\n", *mcspi_syst);

    ……

}

jianhui alvin:

目前知道导致这个的原因,在spi-omap2-mcspi.c有如下代码:把pm_runtime_put_sync(mcspi->dev);注释掉,自己的模块驱动就可以操作spi寄存器了

请问,这个与pm_runtime_put_sync(mcspi->dev);与那个REG有关,好让我在自己的驱动实现开关?

static void omap2_mcspi_disable_clocks(struct omap2_mcspi *mcspi){      pm_runtime_put_sync(mcspi->dev);}

static int omap2_mcspi_enable_clocks(struct omap2_mcspi *mcspi){      return pm_runtime_get_sync(mcspi->dev);}

xi xiao:

回复 jianhui alvin:

我也遇到了类似的情况,可是我的自己的模块驱动都没有做电源管理的相关代码,任然无法操作寄存器

boboy Liang:

回复 xi xiao:

Hi,

    我现在有同样的需求,想要操作寄存器。请问你成功了吗?

user4132396:

问题解决了吗,我现在也遇到了这个问题

jianhui alvin:

回复 user4132396:

安照linux的spi标准驱动调用,就不会有这个问题

赞(0)
未经允许不得转载:TI中文支持网 » AM335x映射McSPI寄存时出错:Unhandled fault: external abort on non-linefetch
分享到: 更多 (0)