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.
对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);
......
}
目前知道导致这个的原因,在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);
}