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.

kernel crush when GPMC device driver is added

I have a beaglebone with a flash daughter board and a fpga board.

The flash on CS0, the fpga board is on CS1.

When I add a GPMC device for fpga without initial the CS1 in u-boot, it seems work fine.

Once I initiialed the GPMC CS1 in u-boot then run the kernel, I have a crush, any idea?

    3.713745] ------------[ cut here ]------------
[    3.718566] kernel BUG at arch/arm/mach-omap2/gpmc.c:739!
[    3.724212] Internal error: Oops - undefined instruction: 0 [#1]
[    3.730499] CPU: 0    Not tainted  (3.2.0-00002-gdcf0f86-dirty #20)
[    3.737091] PC is at gpmc_probe+0x248/0x2d0
[    3.741455] LR is at request_resource+0x10/0x1c
[    3.746215] pc : [<c03059ec>]    lr : [<c004206c>]    psr: a0000013
[    3.746215] sp : cf81db90  ip : cf95be44  fp : cf81dbbc
[    3.758239] r10: 00000010  r9 : c01d044c  r8 : 0000001c
[    3.763702] r7 : cf9531c0  r6 : 00000001  r5 : c0455128  r4 : cf95be5c
[    3.770507] r3 : 08000000  r2 : 17ffffff  r1 : cf95be60  r0 : fffffff0
[    3.777343] Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
[    3.785003] Control: 10c5387d  Table: 80004019  DAC: 00000015
[    3.791015] Process swapper (pid: 1, stack limit = 0xcf81c2f0)
[    3.797119] Stack: (0xcf81db90 to 0xcf81e000)
[    3.801696] db80:                                     00000000 cf81dba0 c00f57d4 cf950008
[    3.810241] dba0: c04749f0 c044fce8 c040d1d8 c04749cc cf81dbcc cf81dbc0 c01c0e84 c03057b0
[    3.818817] dbc0: cf81dbfc cf81dbd0 c01bf834 c01c0e70 c01c1208 c017b890 c01c1164 c040d1d8
[    3.827362] dbe0: cf950008 c01bfad4 00000000 c04749cc cf81dc14 cf81dc00 c01bfb18 c01bf788
[    3.835937] dc00: cf950008 00000000 cf81dc3c cf81dc18 c01be86c c01bfae0 cf806f08 cf8fbdf4
[    3.844512] dc20: cf81dc54 cf950008 cf95003c c0426d38 cf81dc5c cf81dc40 c01bfbb8 c01be814
[    3.853057] dc40: 00000001 cf950008 cf950010 c0426d38 cf81dc6c cf81dc60 c01bea4c c01bfb28
[    3.861633] dc60: cf81dcb4 cf81dc70 c01bc914 c01bea2c 00000000 00000000 cf81dca4 cf81dc88
[    3.870208] dc80: c0041e3c c0041bb0 00000200 00000002 cf950000 cf950008 c0381ec0 cf81dd90
[    3.878753] dca0: c01d044c 00000010 cf81dcd4 cf81dcb8 c01c1628 c01bc4a4 cf950000 cf953280
[    3.887329] dcc0: 00000000 c0381ec0 cf81dcec cf81dcd8 c0033d98 c01c1524 00000000 cf950000
[    3.895874] dce0: cf81dd24 cf81dcf0 c0033eb8 c0033d6c 00000000 cf81dd40 cf84fb80 cf84fb94
[    3.904449] dd00: 00000000 c041fdb0 00000010 c0425320 00000003 00000000 cf81dd54 cf81dd28
[    3.913024] dd20: c0033f58 c0033dc8 cf81dd90 00000010 00000000 00000000 00000000 cf81dd48
[    3.921569] dd40: c0024254 c041fdb0 cf81dd84 cf81dd58 c03d8b24 c0033f10 00000010 00000000
[    3.930145] dd60: 00000000 00000000 c0030288 00000000 c0425314 c0455944 cf81ddb4 cf81dd88
[    3.938720] dd80: c0030304 c03d8acc c04248b0 c03deb14 c0426538 00000001 00000000 00000000
[    3.947265] dda0: c00301ac c0425368 cf81dddc cf81ddb8 c0030b64 c0030294 c0455944 00000000
[    3.955841] ddc0: cf944bc0 00000000 c032ce7c 00000000 cf81de04 cf81dde0 c0030ea8 c0030a70
[    3.964416] dde0: cf81dde4 3030de00 4f003641 cf00454e cf8a1c00 cf8a1c20 cf81de54 cf81de08
[    3.972961] de00: c01d08c8 c0030b90 c03a7958 00000040 cf81de4c 00000001 00008000 00800040
[    3.981536] de20: c0030b84 00000000 00000000 cf8a1c20 c032cf54 cf8a1c00 c032ce64 c032ce7c
[    3.990081] de40: c01d044c cf8a1c04 cf81de84 cf81de58 c024f840 c01d0458 c024f76c cf8a1c20
[    3.998657] de60: c04749f0 c044fce8 c043c43c 00000000 00000000 c03edb94 cf81deb4 cf81de88
[    4.007232] de80: c01bf834 c024f778 cf81deb4 cf81de98 c024f92c cf8a1c20 c043c43c cf8a1c54
[    4.015777] dea0: 00000000 00000000 cf81ded4 cf81deb8 c01bfad0 c01bf788 c01bfa3c c043c43c
[    4.024353] dec0: 00000000 c01bfa3c cf81defc cf81ded8 c01be538 c01bfa48 cf806838 cf89d6f0
[    4.032928] dee0: c0176e50 c043c43c c0447210 cf944d40 cf81df0c cf81df00 c01bfc00 c01be4e0
[    4.041473] df00: cf81df3c cf81df10 c01becb8 c01bfbe8 c03a7b08 cf81df20 c043c43c 00000000
[    4.050048] df20: c003f424 00000013 00000000 c03edb94 cf81df64 cf81df40 c01c03f8 c01beb44
[    4.058593] df40: c0447210 c043c414 00000000 c003f424 00000013 00000000 cf81df7c cf81df68
[    4.067169] df60: c0250ac4 c01c0384 c0405164 00000000 cf81df8c cf81df80 c03edbdc c0250a9c
[    4.075744] df80: cf81dfdc cf81df90 c03d0874 c03edba0 0000007f c00ec84c cf81dfbc 32315600
[    4.084289] dfa0: 00000037 00000000 cf81dfc4 0000018c c0434064 c0405164 c0405298 c003f424
[    4.092864] dfc0: 00000013 00000000 00000000 00000000 cf81dff4 cf81dfe0 c03d09c4 c03d07e0
[    4.101440] dfe0: 00000000 c03d0944 00000000 cf81dff8 c003f424 c03d0950 00000402 020020a2
[    4.109985] Backtrace:
[    4.112548] [<c03057a4>] (gpmc_probe+0x0/0x2d0) from [<c01c0e84>] (platform_drv_probe+0x20/0x24)
[    4.121765]  r8:c04749cc r7:c040d1d8 r6:c044fce8 r5:c04749f0 r4:cf950008
[    4.128814] [<c01c0e64>] (platform_drv_probe+0x0/0x24) from [<c01bf834>] (driver_probe_device+0xb8/0x2c0)
[    4.138824] [<c01bf77c>] (driver_probe_device+0x0/0x2c0) from [<c01bfb18>] (__device_attach+0x44/0x48)
[    4.148590]  r8:c04749cc r7:00000000 r6:c01bfad4 r5:cf950008 r4:c040d1d8
[    4.155609] [<c01bfad4>] (__device_attach+0x0/0x48) from [<c01be86c>] (bus_for_each_drv+0x64/0x90)
[    4.165008]  r5:00000000 r4:cf950008
[    4.168762] [<c01be808>] (bus_for_each_drv+0x0/0x90) from [<c01bfbb8>] (device_attach+0x9c/0xc0)
[    4.177947]  r6:c0426d38 r5:cf95003c r4:cf950008
[    4.182800] [<c01bfb1c>] (device_attach+0x0/0xc0) from [<c01bea4c>] (bus_probe_device+0x2c/0x48)
[    4.191986]  r6:c0426d38 r5:cf950010 r4:cf950008 r3:00000001
[    4.197937] [<c01bea20>] (bus_probe_device+0x0/0x48) from [<c01bc914>] (device_add+0x47c/0x568)
[    4.207061] [<c01bc498>] (device_add+0x0/0x568) from [<c01c1628>] (platform_device_add+0x110/0x1f4)
[    4.216552] [<c01c1518>] (platform_device_add+0x0/0x1f4) from [<c0033d98>] (omap_device_register+0x38/0x5c)
[    4.226745]  r7:c0381ec0 r6:00000000 r5:cf953280 r4:cf950000
[    4.232696] [<c0033d60>] (omap_device_register+0x0/0x5c) from [<c0033eb8>] (omap_device_build_ss+0xfc/0x148)
[    4.242980]  r4:cf950000 r3:00000000
[    4.246734] [<c0033dbc>] (omap_device_build_ss+0x0/0x148) from [<c0033f58>] (omap_device_build+0x54/0x5c)
[    4.256774] [<c0033f04>] (omap_device_build+0x0/0x5c) from [<c03d8b24>] (omap_init_gpmc+0x64/0xb0)
[    4.266143] [<c03d8ac0>] (omap_init_gpmc+0x0/0xb0) from [<c0030304>] (evm_nand_init+0x7c/0x8c)
[    4.275177]  r6:c0455944 r5:c0425314 r4:00000000
[    4.279998] [<c0030288>] (evm_nand_init+0x0/0x8c) from [<c0030b64>] (_configure_device+0x100/0x120)
[    4.289489]  r4:c0425368
[    4.292144] [<c0030a64>] (_configure_device+0x0/0x120) from [<c0030ea8>] (am335x_evm_setup+0x324/0x3e8)
[    4.302001] [<c0030b84>] (am335x_evm_setup+0x0/0x3e8) from [<c01d08c8>] (at24_probe+0x47c/0x52c)
[    4.311187]  r5:cf8a1c20 r4:cf8a1c00
[    4.314941] [<c01d044c>] (at24_probe+0x0/0x52c) from [<c024f840>] (i2c_device_probe+0xd4/0x12c)
[    4.324066] [<c024f76c>] (i2c_device_probe+0x0/0x12c) from [<c01bf834>] (driver_probe_device+0xb8/0x2c0)
[    4.333984] [<c01bf77c>] (driver_probe_device+0x0/0x2c0) from [<c01bfad0>] (__driver_attach+0x94/0x98)
[    4.343719]  r8:00000000 r7:00000000 r6:cf8a1c54 r5:c043c43c r4:cf8a1c20
[    4.350769] [<c01bfa3c>] (__driver_attach+0x0/0x98) from [<c01be538>] (bus_for_each_dev+0x64/0x90)
[    4.360168]  r6:c01bfa3c r5:00000000 r4:c043c43c r3:c01bfa3c
[    4.366088] [<c01be4d4>] (bus_for_each_dev+0x0/0x90) from [<c01bfc00>] (driver_attach+0x24/0x28)
[    4.375305]  r6:cf944d40 r5:c0447210 r4:c043c43c
[    4.380157] [<c01bfbdc>] (driver_attach+0x0/0x28) from [<c01becb8>] (bus_add_driver+0x180/0x260)
[    4.389343] [<c01beb38>] (bus_add_driver+0x0/0x260) from [<c01c03f8>] (driver_register+0x80/0x138)
[    4.398742] [<c01c0378>] (driver_register+0x0/0x138) from [<c0250ac4>] (i2c_register_driver+0x34/0xe8)
[    4.408477]  r8:00000000 r7:00000013 r6:c003f424 r5:00000000 r4:c043c414
[    4.415313] r3:c0447210
[    4.418090] [<c0250a90>] (i2c_register_driver+0x0/0xe8) from [<c03edbdc>] (at24_init+0x48/0x54)
[    4.427185]  r5:00000000 r4:c0405164
[    4.430938] [<c03edb94>] (at24_init+0x0/0x54) from [<c03d0874>] (do_one_initcall+0xa0/0x170)
[    4.439788] [<c03d07d4>] (do_one_initcall+0x0/0x170) from [<c03d09c4>] (kernel_init+0x80/0x11c)
[    4.448913] [<c03d0944>] (kernel_init+0x0/0x11c) from [<c003f424>] (do_exit+0x0/0x67c)
[    4.457183]  r5:c03d0944 r4:00000000
[    4.460937] Code: e5813004 ebf4f19d e3500000 aa000000 (e7f001f2)
[    4.467437] ---[ end trace 7b981711abc6f02f ]---
[    4.472290] Kernel panic - not syncing: Attempted to kill init!
[    4.478485] Backtrace:
[    4.481048] [<c0017698>] (dump_backtrace+0x0/0x10c) from [<c030b3dc>] (dump_stack+0x18/0x1c)
[    4.489898]  r6:c0428a10 r5:00000000 r4:c0455b88 r3:c0427530
[    4.495849] [<c030b3c4>] (dump_stack+0x0/0x1c) from [<c030b6c0>] (panic+0x64/0x188)
[    4.503875] [<c030b65c>] (panic+0x0/0x188) from [<c003f9c4>] (do_exit+0x5a0/0x67c)
[    4.511810]  r3:cf81bd24 r2:cf81c000 r1:00000001 r0:c038ed48
[    4.517761]  r7:cf81bc00
[    4.520416] [<c003f424>] (do_exit+0x0/0x67c) from [<c0017954>] (die+0x118/0x29c)
[    4.528167]  r7:00000001
[    4.530822] [<c001783c>] (die+0x0/0x29c) from [<c0017af8>] (arm_notify_die+0x20/0x58)
[    4.539031] [<c0017ad8>] (arm_notify_die+0x0/0x58) from [<c0008340>] (do_undefinstr+0x12c/0x14c)
[    4.548248] [<c0008214>] (do_undefinstr+0x0/0x14c) from [<c0013ca8>] (__und_svc+0x48/0x60)
[    4.556915] Exception stack(0xcf81db48 to 0xcf81db90)
[    4.562194] db40:                   fffffff0 cf95be60 17ffffff 08000000 cf95be5c c0455128
[    4.570770] db60: 00000001 cf9531c0 0000001c c01d044c 00000010 cf81dbbc cf95be44 cf81db90
[    4.579345] db80: c004206c c03059ec a0000013 ffffffff
[    4.584625]  r7:00000000 r6:c0013f14 r5:a0000013 r4:c03059f0
[    4.590576] [<c03057a4>] (gpmc_probe+0x0/0x2d0) from [<c01c0e84>] (platform_drv_probe+0x20/0x24)
[    4.599792]  r8:c04749cc r7:c040d1d8 r6:c044fce8 r5:c04749f0 r4:cf950008
[    4.606842] [<c01c0e64>] (platform_drv_probe+0x0/0x24) from [<c01bf834>] (driver_probe_device+0xb8/0x2c0)
[    4.616882] [<c01bf77c>] (driver_probe_device+0x0/0x2c0) from [<c01bfb18>] (__device_attach+0x44/0x48)
[    4.626617]  r8:c04749cc r7:00000000 r6:c01bfad4 r5:cf950008 r4:c040d1d8
[    4.633697] [<c01bfad4>] (__device_attach+0x0/0x48) from [<c01be86c>] (bus_for_each_drv+0x64/0x90)
[    4.643066]  r5:00000000 r4:cf950008
[    4.646820] [<c01be808>] (bus_for_each_drv+0x0/0x90) from [<c01bfbb8>] (device_attach+0x9c/0xc0)
[    4.656036]  r6:c0426d38 r5:cf95003c r4:cf950008
[    4.660888] [<c01bfb1c>] (device_attach+0x0/0xc0) from [<c01bea4c>] (bus_probe_device+0x2c/0x48)
[    4.670074]  r6:c0426d38 r5:cf950010 r4:cf950008 r3:00000001
[    4.676055] [<c01bea20>] (bus_probe_device+0x0/0x48) from [<c01bc914>] (device_add+0x47c/0x568)
[    4.685150] [<c01bc498>] (device_add+0x0/0x568) from [<c01c1628>] (platform_device_add+0x110/0x1f4)
[    4.694641] [<c01c1518>] (platform_device_add+0x0/0x1f4) from [<c0033d98>] (omap_device_register+0x38/0x5c)
[    4.704864]  r7:c0381ec0 r6:00000000 r5:cf953280 r4:cf950000
[    4.710815] [<c0033d60>] (omap_device_register+0x0/0x5c) from [<c0033eb8>] (omap_device_build_ss+0xfc/0x148)
[    4.721099]  r4:cf950000 r3:00000000
[    4.724853] [<c0033dbc>] (omap_device_build_ss+0x0/0x148) from [<c0033f58>] (omap_device_build+0x54/0x5c)
[    4.734893] [<c0033f04>] (omap_device_build+0x0/0x5c) from [<c03d8b24>] (omap_init_gpmc+0x64/0xb0)
[    4.744293] [<c03d8ac0>] (omap_init_gpmc+0x0/0xb0) from [<c0030304>] (evm_nand_init+0x7c/0x8c)
[    4.753326]  r6:c0455944 r5:c0425314 r4:00000000
[    4.758178] [<c0030288>] (evm_nand_init+0x0/0x8c) from [<c0030b64>] (_configure_device+0x100/0x120)
[    4.767639]  r4:c0425368
[    4.770294] [<c0030a64>] (_configure_device+0x0/0x120) from [<c0030ea8>] (am335x_evm_setup+0x324/0x3e8)
[    4.780151] [<c0030b84>] (am335x_evm_setup+0x0/0x3e8) from [<c01d08c8>] (at24_probe+0x47c/0x52c)
[    4.789367]  r5:cf8a1c20 r4:cf8a1c00
[    4.793121] [<c01d044c>] (at24_probe+0x0/0x52c) from [<c024f840>] (i2c_device_probe+0xd4/0x12c)
[    4.802246] [<c024f76c>] (i2c_device_probe+0x0/0x12c) from [<c01bf834>] (driver_probe_device+0xb8/0x2c0)
[    4.812194] [<c01bf77c>] (driver_probe_device+0x0/0x2c0) from [<c01bfad0>] (__driver_attach+0x94/0x98)
[    4.821929]  r8:00000000 r7:00000000 r6:cf8a1c54 r5:c043c43c r4:cf8a1c20
[    4.828979] [<c01bfa3c>] (__driver_attach+0x0/0x98) from [<c01be538>] (bus_for_each_dev+0x64/0x90)
[    4.838378]  r6:c01bfa3c r5:00000000 r4:c043c43c r3:c01bfa3c
[    4.844329] [<c01be4d4>] (bus_for_each_dev+0x0/0x90) from [<c01bfc00>] (driver_attach+0x24/0x28)
[    4.853546]  r6:cf944d40 r5:c0447210 r4:c043c43c
[    4.858398] [<c01bfbdc>] (driver_attach+0x0/0x28) from [<c01becb8>] (bus_add_driver+0x180/0x260)
[    4.867614] [<c01beb38>] (bus_add_driver+0x0/0x260) from [<c01c03f8>] (driver_register+0x80/0x138)
[    4.876983] [<c01c0378>] (driver_register+0x0/0x138) from [<c0250ac4>] (i2c_register_driver+0x34/0xe8)
[    4.886749]  r8:00000000 r7:00000013 r6:c003f424 r5:00000000 r4:c043c414
[    4.893615] r3:c0447210
[    4.896362] [<c0250a90>] (i2c_register_driver+0x0/0xe8) from [<c03edbdc>] (at24_init+0x48/0x54)
[    4.905456]  r5:00000000 r4:c0405164
[    4.909240] [<c03edb94>] (at24_init+0x0/0x54) from [<c03d0874>] (do_one_initcall+0xa0/0x170)
[    4.918090] [<c03d07d4>] (do_one_initcall+0x0/0x170) from [<c03d09c4>] (kernel_init+0x80/0x11c)
[    4.927215] [<c03d0944>] (kernel_init+0x0/0x11c) from [<c003f424>] (do_exit+0x0/0x67c)
[    4.935485]  r5:c03d0944 r4:00000000

Thank you!

Jin

  • Can anyone tell me why this function in gpmc.c hard coded the size and base for all the cs select?

    Jin

    static void gpmc_cs_get_memconf(int cs, u32 *base, u32 *size)
    {
            u32 l;
            u32 mask;

            l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7);
            *base = (l & 0x3f) << GPMC_CHUNK_SHIFT;
            mask = (l >> 8) & 0x0f;
            *size = (1 << GPMC_SECTION_SHIFT) - (mask << GPMC_CHUNK_SHIFT);

            if (cpu_is_am33xx()) {
                    *base = 0x8000000;
                    *size = 0x10000000;
            }
    }

  • There is a bug in gpmc,c 

    static void gpmc_cs_get_memconf(int cs, u32 *base, u32 *size)
    {
            u32 l;
            u32 mask;

            l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7);
            *base = (l & 0x3f) << GPMC_CHUNK_SHIFT;
            mask = (l >> 8) & 0x0f;
            *size = (1 << GPMC_SECTION_SHIFT) - (mask << GPMC_CHUNK_SHIFT);

            /* only should force the cs0, but anyway why? if (cpu_is_am33xx()) { */

            if (cpu_is_am33xx() && (cs == 0)) {
                    *base = 0x8000000;
                    *size = 0x10000000;
            }
    }