Anders Darander <anders@...> writes: > > > Jack <jackrubby2010 <at> gmail.com> wrote: > >Hi, > >I want to set/reset GPIO registers in freescale p1022 processor. I saw > >a > >hello-mod kernel module in yocto and I added it to my image and it > >worked. > >According to hello-mod kernel module, I created GPIO module like > >hello-mod. > >But it GPIO module failed when I run it in kernel level. I checked > >several > >times addresses of registers and it seems accurate. > >My code is here : > > > > > >#include <linux/module.h> > > > >int init_module(void) > >{ > > volatile uint32_t * Guts_Pmuxcr; > > volatile uint32_t * Gpio3_Gpdir; > > volatile uint32_t * Gpio3_Gpdat; > > > > // e500 Core View To Power Architecture CCSR: 0x0_FF70_0000 > > > > // GUTS_PMUXCR:Alternate Function Signal Multiplex Control Register > > Guts_Pmuxcr = (volatile uint32_t *)(0xFF7E0060); > > > > // GPIO3_GPDIR: GPIO3 direction register > > Gpio3_Gpdir = (volatile uint32_t *)(0xFF70F200); > > > > // GPIO3_GPDAT: GPIO3 data register > > Gpio3_Gpdat = (volatile uint32_t *)(0xFF70F208); > > You should generally a of trying to dereference physical addresses, or you should explicitly declare them > as such. > > If suggest looking for some info on using GPIO on your CPU. Unfortunately, I've not used the p1022, so I can't > really help you. > > http://linuxppc.10917.n7.nabble.com/Re-GPIO-IRQ-on-P1022-td59356.html discusses some IRQ > issues, though you should be able to use the codes as an example of the GPIO framework and how to use it. > > Cheers, > Anders > > > > > // Enable GPIO3[10]: IRQ_DEBUG1_GPIO FIELD [BIT 26] set to "1" > > *(Guts_Pmuxcr) = 0x00000010; > > > > > > > // Set Direction for GPIO3[10] to Output: FIELD DR10 [BIT 10] set to > >'1' > > *(Gpio3_Gpdir) = 0x00200000; > > > > > > // Set GPIO3[10] to '0': FIELD D10 [BIT 10] set to '0' > > *(Gpio3_Gpdat) = 0x00000000; > > > > printk("Hello World!\n"); > > return 0; > >} > > > >void cleanup_module(void) > >{ > > printk("Goodbye Cruel World!\n"); > >} > > > >MODULE_LICENSE("GPL"); > > > > > >When I write insmod GPIO.ko in the terminal I get error these errors: > > > >Unable to handle kernel paging request for data at address 0xff7e0060 > >faulting instruction address: 0xf107e05c > >Oops: Kernel access of bad area, sig: 11 [#1] > >.......... > >......... > > > > > >How can I solve this problem? > > > > > >_______________________________________________ > >yocto mailing list > >yocto <at> yoctoproject.org > >https://lists.yoctoproject.org/listinfo/yocto >
Thanks Anders, But I have this problem not only for GPIOs, but also for other registers. For example, I tried to change DTW bits of PROCTL register in eSDH but I get "Kernel access of bad area" again. My simple code is here : #include <linux/module.h> int init_module(void) { // e500 Core View To Power Architecture CCSR: 0x0_FF70_0000 volatile uint32_t * eSDH_PROCTL = (volatile uint32_t *)(0xFF72E028); *(eSDH_PROCTL) = 0x00000002; return 0; } void cleanup_module(void) { printk("Goodbye Cruel World!\n"); } MODULE_LICENSE("GPL"); What should I do? Can you help me? _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto