<br><br><div class="gmail_quote">On Wed, Aug 11, 2010 at 9:45 PM, MJ embd <span dir="ltr"><<a href="mailto:mj.embd@gmail.com">mj.embd@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
u can directly access GPIO registers in kernel, by ioremap of GPIO<br>
memory mapped registers.<br>
you might need to check<br>
- muxing of gpio<br>
<br>
-mj<br></blockquote><div><br>Hi MJ,<br><br>Thanks for the reply.<br>I tried memory mapping but it fails, here is my code :<br><br>#include <linux/module.h><br>#include <linux/errno.h>    /* error codes */<br>
#include <linux/mm.h><br><br>void __iomem *ioaddr = NULL;<br><br>static __init int sample_module_init(void)<br>{<br>    ioaddr = ioremap(0xFF400C00, 0x24);<br>    if(ioaddr == NULL) {<br>        printk(KERN_WARNING "ioremap failed\n");<br>
    }<br>    printk(KERN_WARNING "ioremap successed\n");<br>    printk(KERN_WARNING "GP1DIR = %u\n", ioread32(ioaddr));<br>    return 0;<br>}<br><br>static __exit void sample_module_exit(void)<br>{<br>
    iounmap(ioaddr);<br>}<br><br>MODULE_LICENSE("GPL");<br>module_init(sample_module_init);<br>module_exit(sample_module_exit);<br><br>As per the MPC8377ERDB data sheet default IMMRBAR address is 0xFF40_0000 and offset of GPIO1 is 0C00 and each GPIO has programmable registers that occupy 24 bytes of memory-mapped space, so I mapped from 24bytes (0x18) starting from 0xFF40_0C00 address. But when I tried to read the values from the mapped memory I get the following errors. Is there something I am missing. Any help with reference to MPC8377ERDB board will be highly appreciable.<br>
<br># tftp -l ~/immrbar.ko -r immrbar.ko -g 10.20.50.70<br># insmod ./immrbar.ko<br>[  717.825241] ioremap successed<br>[  717.849215] Machine check in kernel mode.<br>[  717.853220] Caused by (from SRR1=41000): Transfer error ack signal<br>
[  717.859405] Oops: Machine check, sig: 7 [#1]<br>[  717.863668] MPC837x RDB<br>[  717.866106] Modules linked in: immrbar(+)<br>[  717.870119] NIP: 00000900 LR: d1034054 CTR: c0014d50<br>[  717.875079] REGS: cf895d00 TRAP: 0200   Not tainted  (2.6.28.9)<br>
[  717.880992] MSR: 00041000 <ME>  CR: 24000082  XER: 20000000<br>[  717.886578] TASK = cf8e8640[647] 'insmod' THREAD: cf894000<br>[  717.891882] GPR00: d103404c cf895db0 cf8e8640 00000000 000023d5 ffffffff c01e<br>
04f4 00020000<br>[  717.900265] GPR08: 00000001 c0383f3c 000023d5 c0014d50 4c72ff56 10019100 1007<br>77e0 1007ea98<br>[  717.908650] GPR16: 10077834 100a0000 100a0000 100a0000 bfaf4828 00000000 1009<br>f23c 10000cfc<br>[  717.917034] GPR24: 10000d00 10000d24 10012008 c03650e8 00000000 d1034000 1001<br>
2018 d1030000<br>[  717.925598] NIP [00000900] 0x900<br>[  717.928828] LR [d1034054] sample_module_init+0x54/0xc0 [immrbar]<br>[  717.934828] Call Trace:<br>[  717.937273] [cf895db0] [d103404c] sample_module_init+0x4c/0xc0 [immrbar] (unr<br>
eliable)<br>[  717.945115] [cf895dc0] [c00038a0] do_one_initcall+0x64/0x18c<br>[  717.950780] [cf895f20] [c004d7b8] sys_init_module+0xac/0x19c<br>[  717.956441] [cf895f40] [c00122f0] ret_from_syscall+0x0/0x38<br>[  717.962013] --- Exception: c01 at 0x48043f6c<br>
[  717.962017]     LR = 0x100009cc<br>[  717.969407] Instruction dump:<br>[  717.972370] 00000000 XXXXXXXX XXXXXXXX XXXXXXXX 00000000 XXXXXXXX XXXXXXXX XX<br>XXXXXX<br>[  717.980140] 00000000 XXXXXXXX XXXXXXXX XXXXXXXX 7d5043a6 XXXXXXXX XXXXXXXX XX<br>
XXXXXX<br>[  717.987919] ---[ end trace a47be794e2873cef ]---<br><br>Thanks in advance<br>Ravi Gupta<br></div></div>