Re: Request_irq fails for IRQ2
Smitha, Do you have the entry of this device node in your DTS file? if yes, then is the device is getting registered properly? If you are writing platform driver then you can use 'platform_get_irq' it returns the irq number, which you can pass in the 'request_irq'. If it is a simple character driver then to determine the virtual irq number you can use 'ioremap', in this call you can pass the HW IRQ number e.g. 20 and then pass in the 'request_irq'. But in both cases you have to have this device node in your device tree and should be registered, otherwise it should be returning error and no virtual irq will be allocated. As per your return value it seems the device node is not getting registered, perhaps the entry is missing in DTS file. Try with just ioremap and see if virtual irq is returned properly. Kind Regards, Vijay Nikam On Mon, Oct 3, 2011 at 7:57 PM, smitha.va...@wipro.com wrote: Hi Scott, I try to request an IRQ (IRQ2 and IRQ3 which are ineterrupt no 20 and 21 in mpc8247)in my driver . The Call fails in setup_irq in Manage.c at /kernel/irq. Setup _irq returns -ENOSYS if (desc-irq_data.chip == no_irq_chip) return -ENOSYS; I found that I need to pass the virtual interrupt number instead of hardware interrupt number. So I added below piece of code Below is the call to request irq in my driver. virq = irq_create_mapping(NULL, CPLD1_INTERRUPT); if ((ret = request_irq(virq,cpld_irq_handler, 0, GPIO_CHAR_PATH, NULL))!=0) { printk(KERN_ERR gpio_init: Could not grab IRQ line for CPLD ret = %d\n,ret); goto err1; } Now it fails in irq_create_mapping with NO_IRQ error. if (controller == NULL) host = irq_default_host; else host = irq_find_host(controller); if (host == NULL) { printk(KERN_WARNING irq: no irq host found for %s !\n, controller-full_name); return NO_IRQ; } I just don't know what I should pass for host , also when I pass NULL for host . I see the default host is NULL.. Could you please help me. My project delivery is near , I need help soon. Regards, Smitha Please do not print this email unless it is absolutely necessary. The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy all copies of this message and any attachments. WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. www.wipro.com ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: HELP:PowerPc-Linux kernel
Yes /Vijay Nikam On Thu, Jul 28, 2011 at 11:00 AM, MJ embd mj.e...@gmail.com wrote: Have you every worked on device trees before? On 7/28/11, Vijay Nikam vijay.t.ni...@gmail.com wrote: Hello, Start with looking at the configuration of the board done which is similar to yours or based on the same CPU as yours. It is important to know role of device tree so read the documentation and understand the syntax and concept of device tree. Once the complete concept is understood then you should start the configuration and achieve successful creation of kernel image. Take a step forward and do some hands on. If any problem occurs then post for specific help, as porting itself is a big task and dosent have really straight forward steps. Good Luck Kind Regards, Vijay Nikam On Wed, Jul 27, 2011 at 8:33 PM, naresh.kamb...@wipro.com wrote: Hi, I have take up the new assignment Board bring up activity with Linux kernel on PowerPC MPC8272. I have been searching Linux bring up on PowerPC processor in Google and IBM wiki and not found good stuff. It would be more helpful for me if you could share related documents. Best regards Naresh Kamboju Please do not print this email unless it is absolutely necessary. The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy all copies of this message and any attachments. WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. www.wipro.com ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev -- -mj ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: HELP:PowerPc-Linux kernel
Hello, Start with looking at the configuration of the board done which is similar to yours or based on the same CPU as yours. It is important to know role of device tree so read the documentation and understand the syntax and concept of device tree. Once the complete concept is understood then you should start the configuration and achieve successful creation of kernel image. Take a step forward and do some hands on. If any problem occurs then post for specific help, as porting itself is a big task and dosent have really straight forward steps. Good Luck Kind Regards, Vijay Nikam On Wed, Jul 27, 2011 at 8:33 PM, naresh.kamb...@wipro.com wrote: Hi, I have take up the new assignment Board bring up activity with Linux kernel on PowerPC MPC8272. I have been searching Linux bring up on PowerPC processor in Google and IBM wiki and not found good stuff. It would be more helpful for me if you could share related documents. Best regards Naresh Kamboju Please do not print this email unless it is absolutely necessary. The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy all copies of this message and any attachments. WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. www.wipro.com ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [gianfar]bandwidth management problem on mpc8313 based board
Hello Scott, Thanks for the prompt reply. What's your CPU utilization? The CPU may just not be able to keep up with that much traffic, with the software you're running. The software I am using to check bandwidth is 'iperf'. Without running iperf the CPU utilization varies around 30-50% and with iperf running it shoots upto 99.9%. What packet size are you using? The packet size is - 1518 + VLAN_Tag (4Bytes) = 1522 Bytes Another point which I would like to clear is that mpc8313 has eth0 (eTsec1) of 1Gbps, if more than 50% of CPU Time is available then why the total bandwidth should limit to less than 100 Mbps? At least 400Mbps should be expected, please correct if I am wrong! Please acknowledge, thanks. Kind Regards, Vijay Nikam On Wed, Jun 8, 2011 at 12:52 AM, Scott Wood scottw...@freescale.com wrote: On Tue, 7 Jun 2011 18:32:37 +0530 Vijay Nikam vijay.t.ni...@gmail.com wrote: Dear All, I have mpc8313 powerpc based board with silicon revision 2.1. the processor has two ETH ports (eTsec1 and eTsec2) i.e. eth0 and eth1. eth0 is 1Gbps port and eth1 is 100Mbps port. On board there is L2 switch from TANTOS2G (psb6972) supports one port 1Gbps, and from switch there are 4 more eth ports derived which are 100Mbps ports and port based VLAN is configured for this purpose. The interface between switch and eth0 (port of processor) is RGMII. So the processor port and switch port are connected on 1Gbps Link. The other 4 derived ports (100Mbps) are used to connect to external world. On this board Embedded Linux is running of kernel version 2.6.23 with HRT patch. That's rather old. The ethernet controller driver in use is gianfar version 1.3 The driver is configured properly as it determines both links 1000Mbps (eth0) and 100Mbps (eth1) also verified with ethtool. After this I started to perform bandwidth test using iperf tool. When I performed this test on one port out of 4 derived ports I am getting bandwidth in the range of 80-85Mbps but when the same test is performed on 2 ports simultaneously then the per port bandwidth is reduced to 40-45Mbps. But my understanding is all of the 4 ports should support 100Mbps bandwidth simultaneously (as base port is 1Gbps). Then why bandwidth gets reduced when more than one port are communicating simultaneously? Any reason or suggestion I should check for this problem? What's your CPU utilization? The CPU may just not be able to keep up with that much traffic, with the software you're running. What packet size are you using? -Scott ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[gianfar]bandwidth management problem on mpc8313 based board
Dear All, I have mpc8313 powerpc based board with silicon revision 2.1. the processor has two ETH ports (eTsec1 and eTsec2) i.e. eth0 and eth1. eth0 is 1Gbps port and eth1 is 100Mbps port. On board there is L2 switch from TANTOS2G (psb6972) supports one port 1Gbps, and from switch there are 4 more eth ports derived which are 100Mbps ports and port based VLAN is configured for this purpose. The interface between switch and eth0 (port of processor) is RGMII. So the processor port and switch port are connected on 1Gbps Link. The other 4 derived ports (100Mbps) are used to connect to external world. On this board Embedded Linux is running of kernel version 2.6.23 with HRT patch. The ethernet controller driver in use is gianfar version 1.3 The driver is configured properly as it determines both links 1000Mbps (eth0) and 100Mbps (eth1) also verified with ethtool. After this I started to perform bandwidth test using iperf tool. When I performed this test on one port out of 4 derived ports I am getting bandwidth in the range of 80-85Mbps but when the same test is performed on 2 ports simultaneously then the per port bandwidth is reduced to 40-45Mbps. But my understanding is all of the 4 ports should support 100Mbps bandwidth simultaneously (as base port is 1Gbps). Then why bandwidth gets reduced when more than one port are communicating simultaneously? Any reason or suggestion I should check for this problem? Kindly Please acknowledge, thanks Kind Regards, Vijay Nikam ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: JFFS2 warnings
Hello, I too facing the same problems. I too have mpc8313 based customized board. Would you please let me know, if you know how to resolve these messages. Kindly please acknowledge, thank you Kind Regards, Vijay Nikam On Tue, Mar 2, 2010 at 12:13 AM, Ron Madrid ron_mad...@sbcglobal.netwrote: I'm getting a bunch of these after I 'reboot' or 'poweroff' several times. Empty flash at 0x0056205c ends at 0x00562800 Empty flash at 0x00565334 ends at 0x00565800 Empty flash at 0x00576104 ends at 0x00576800 JFFS2 notice: (848) check_node_data: wrong data CRC in data node at 0x00577034: read 0xe6adad18, calculated 0x202a305c. JFFS2 notice: (848) check_node_data: wrong data CRC in data node at 0x00575768: read 0xe6adad18, calculated 0xfc64f8a3. I'm not too sure why I'm getting these, but recently they seem to have caused a few problems with parts of my filesystem (i.e. programs not running correctly). Can someone tell me what these are or what could be causing them? I'm using 2.6.33rc1 and this is on an mpc8313 based board. Not sure what other info would be useful. Thanks, Ron ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
kernel module compilation error
Hello All, I upgraded the Linux kernel version from 2.6.20 to 2.6.23 on eval board mpc8313erdb. Then I wrote a simple hello_world kernel module for testing but when I do make it gives following compilation error. Whereas I did not had this problem with kernel 2.6.20 !!! It says; 'include/asm/current.h:35: error: invalid register name for ‘current’' Following is complete error log make -C /usr/local/mpc8313/linux-2.6.23 M=/opt/test/module/hello_world modules make[1]: Entering directory `/usr/local/mpc8313/linux-2.6.23' CC [M] /opt/test/module/hello_world/hello.o In file included from include/linux/capability.h:48, from include/linux/sched.h:50, from include/asm/elf.h:6, from include/linux/elf.h:8, from include/linux/module.h:15, from /opt/test/module/hello_world/hello.c:5: include/asm/current.h:35: error: invalid register name for ‘current’ make[2]: *** [/opt/test/module/hello_world/hello.o] Error 1 make[1]: *** [_module_/opt/test/module/hello_world] Error 2 make[1]: Leaving directory `/usr/local/mpc8313/linux-2.6.23' make: *** [all] Error 2 Could anyone please let me know the way to proceed or a way to think to resolve this issue ? ? ? Kindly please acknowledge ... thank you. Kind Regards, Vijay Nikam ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Bug:scheduling while atomic
Hello All, I have mpc8313erb with linux kernel 2.6.20. When I ported the kernel with CONFIG_PREEMPT=y (Enabled) I am getting the 'scheduling while atomic'. Please check the following call trace, thanks. Could anyone please let me to the way to fix it ? ? ? Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam ## LOG # mpc8313_rdb_setup_arch() arch: exit [0.00] Using MPC8313 RDB machine description [0.00] Linux version 2.6.20 (mess...@localhost.localdomain) (gcc version 4.0.2 20060628 (Wasabi)) #23 PREEMPT Tue Apr 7 10:36:18 IST 209 [0.00] Found MPC83xx PCI host bridge at 0xe0008500. Firmware bus number: 0-0 [0.00] Zone PFN ranges: [0.00] DMA 0 -32768 [0.00] Normal 32768 -32768 [0.00] early_node_map[1] active PFN ranges [0.00] 0:0 -32768 [0.00] Built 1 zonelists. Total pages: 32512 [0.00] Kernel command line: root=/dev/mtdblock4 rootfstype=jffs2 rw console=ttyS0,115200 mtdparts=nand0:-(rootfs) [0.00] IPIC (128 IRQ sources) at fdefa700 [0.00] PID hash table entries: 512 (order: 9, 2048 bytes) [ 10.730683] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) [ 10.731455] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) [ 10.744855] Memory: 125836k/131072k available (3296k kernel code, 5088k reserved, 472k data, 110k bss, 144k init) [ 10.766153] Mount-cache hash table entries: 512 [ 10.776457] NET: Registered protocol family 16 [ 10.795354] PCI: Probing PCI hardware [ 10.835814] Generic PHY: Registered new driver [ 10.845802] SCSI subsystem initialized [ 10.848001] usbcore: registered new interface driver usbfs [ 10.849225] usbcore: registered new interface driver hub [ 10.850730] usbcore: registered new device driver usb [ 10.864131] NET: Registered protocol family 2 [ 10.873891] IP route cache hash table entries: 1024 (order: 0, 4096 bytes) [ 10.875624] TCP established hash table entries: 4096 (order: 4, 65536 bytes) [ 10.876118] TCP bind hash table entries: 2048 (order: 3, 40960 bytes) [ 10.876483] TCP: Hash tables configured (established 4096 bind 2048) [ 10.876508] TCP reno registered [ 10.926572] Initializing RT-Tester: OK [ 10.931275] JFFS2 version 2.2. (NAND) (C) 2001-2006 Red Hat, Inc. [ 10.932114] io scheduler noop registered [ 10.932142] io scheduler anticipatory registered (default) [ 10.932164] io scheduler deadline registered [ 10.932336] io scheduler cfq registered [ 11.669977] Generic RTC Driver v1.07 [ 11.673740] WDT driver for MPC83xx initialized. mode:reset timeout=65535 (25 seconds) [ 11.673826] Serial: 8250/16550 driver $Revision: 1.90 $ 2 ports, IRQ sharing disabled [ 11.680975] serial8250.0: ttyS0 at MMIO 0xe0004500 (irq = 16) is a 16550A [ 11.902695] serial8250.0: ttyS1 at MMIO 0xe0004600 (irq = 17) is a 16550A [ 11.934522] RAMDISK driver initialized: 16 RAM disks of 32768K size 1024 blocksize [ 11.953408] loop: loaded (max 8 devices) [ 11.957368] Intel(R) PRO/1000 Network Driver - version 7.3.15-k2-NAPI [ 11.963862] Copyright (c) 1999-2006 Intel Corporation. [ 11.979780] Gianfar MII Bus: probed [ 11.986456] eth0: Gianfar Ethernet Controller Version 1.4, 00:04:9f:ef:23:33 [ 11.993766] eth0: MTU = 1500 (frame size=1540,truesize=2296) [ 11.999442] eth0: Running with NAPI enabled [ 12.003644] eth0: 64/64 RX/TX BD ring size [ 12.007756] eth0: Socket buffer recycling mode enabled [ 12.014840] eth1: Gianfar Ethernet Controller Version 1.4, 00:e0:0c:00:7e:21 [ 12.022155] eth1: MTU = 1500 (frame size=1540,truesize=2296) [ 12.027855] eth1: Running with NAPI enabled [ 12.032060] eth1: 64/64 RX/TX BD ring size [ 12.036169] eth1: Socket buffer recycling mode enabled [ 12.041374] SKB Handler initialized(max=64) [ 12.047711] Marvell 88E1101: Registered new driver [ 12.053683] Marvell 88E: Registered new driver [ 12.059610] Marvell 88E1145: Registered new driver [ 12.065650] MPC8313ERDB Ethernet Switch: Registered new driver [ 12.080151] MPC8313RDB flash device: 80 at fe00 Partition number 4 [ 12.087755] MPC8313RDB Flash Map Info: Found 1 x16 devices at 0x0 in 16-bit bank [ 12.095290] Amd/Fujitsu Extended Query Table at 0x0040 [ 12.100558] MPC8313RDB Flash Map Info: Swapping erase regions for broken CFI table. [ 12.108294] number of CFI chips: 1 [ 12.111729] cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness. [ 12.119556] Creating 4 MTD partitions on MPC8313RDB Flash Map Info: [ 12.126040] 0x-0x0010 : U-Boot [ 12.134115] 0x0010-0x0030 : Kernel [ 12.142296] 0x0030-0x0070 : JFFS2 [ 12.150546] 0x0070-0x0080 : dtb [ 12.158445] MPC8313RDB flash device (MPC8313RDB Flash Map Info) initialized [ 12.165481] Freescale eLBC NAND Driver (C) 2006 Freescale [ 12.173380
CONFIG_PREEMPT and High Resolution Timers problem
Hello All, I have mpc8313erdb eval board with Linux-2.6.20 running on it. Recently I had a problem, I wrote a driver and from I am sending notification to user space application using fasync driver method (SIGIO signal). In user space applicaion process I have used posix-timers (timer_create and timer_settime), the timer is set for 10ms. But in actual I checked on oscilloscope the expiration of timer or signal event generation varies between 10ms - 13ms. In kerenl driver when the interrupt occurs I am making a gpio pin high and on the signal event when timer expires I am making another gpio pin high, and the time between these measured varies between 10ms - 13ms i.e. it means the timer frequency is 250Hz, which was set by default for powerpc. So to achieve close to precise of 10ms I set the timer frequency to 1000Hz and then I got the resolution of 10ms -10.8ms. I would like to ask is the right approach of changing Timer Frequency to 1000Hz from 250Hz ? ? ? Because while searching some information regarding this I learned about High-Res Timers. In linux-2.6.20 x86 has this feature enabled rather you can enable it but not for powerpc arch, Right ? ? ? If yes then is there any way to add CONFIG_HIGH_RES_TIMERS feature to linux-2.6.20, any patch available ? ? ? otherwise what could be the option ? ? ? In Linux by default Preemption is not enabled, CONFIG_PREEMPT_NONE=y so I tried to enabled CONFIG_PREEMPT=y but when I boot the board with preemption enabled I got the scheduling with atomic error (please check the log below, thanks). I tried to debug and find some info but no luck. Could anyone please explain the reason for it and how I can fix it ? ? ? Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam ### Start # NET: Registered protocol family 1 NET: Registered protocol family 17 BUG: scheduling while atomic: swapper/0x0001/1 Call Trace: [C07F5D50] [C0008938] (unreliable) [C07F5D80] [C02933CC] [C07F5DD0] [C029472C] [C07F5E10] [C0201AF0] [C07F5E50] [C0201E08] [C07F5E90] [C01FEE14] [C07F5EB0] [C0202018] [C07F5F30] [C0017490] [C07F5F50] [C02FB4B0] [C07F5F90] [C0003960] [C07F5FF0] [C0010C74] BUG: scheduling while atomic: swapper/0x0001/1 ## END ## Start BUG: scheduling while atomic: jffs2_gcd_mtd4/0x0004/719 Call Trace: [C05BDBE0] [C0008938] (unreliable) [C05BDC10] [C02933CC] [C05BDC60] [C029472C] [C05BDCA0] [C01D9F14] [C05BDCE0] [C01D5424] [C05BDD40] [C01D74D4] [C05BDD70] [C01C9330] [C05BDD80] [C0127F88] [C05BDDB0] [C011F26C] [C05BDE20] [C0120320] [C05BDE90] [C012327C] --- Exception: 1[C05BDF50] [C0125F0C] (unreliable) [C05BDFF0] [C0010C74] END ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Freescale MPC8313ERDB-RevA and newer BSP/kernel
Hi Mark, Could you please let me know how you booted the latest Linux kernel on MPC8313ERDB board ? ? ? As I tried but was not successful. It hangs or does nothing and waits at network configuration, mean to determine IP address (as I have used dhcp). Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam On 3/11/09, Mark Bishop m...@bish.net wrote: Quoting Scott Wood scottw...@freescale.com: On Wed, Mar 11, 2009 at 12:03:00PM -0400, Mark Bishop wrote: Yes I have actually. I have booted a 2.6.28.6. Same problem. I've booted many recent kernels on revA 8313ERDB; networking works fine. I'll try 2.6.28.6 specifically, though u-boot is acting up at the moment so I have to address that first. :-( Are you using the stock config and device tree from 2.6.28.6, or have you made any changes? Also, is it me but at some point from 2.6.23 to 2.6.28 did they started using hex numbers in the .dts file for interrupts = without the 0x preamble? Yes. dts version 0 had hex by default (with OF-like radix prefixes), and version 1 (indicated by /dts-v1/; at the top of the file) has decimal by default (with C-like radix prefixes). I've been looking at 2.6.20, 2.6.23, and 2.6.28 .dts files for this board and .28 looked way different in the interrupt section for the eTSEC. Quoting Kumar Gala ga...@kernel.crashing.org: Please don't top-post. The boards we received didn't have SPI compiled into the kernel and when we went to go re-compile the kernel using the 20081222 and 20080711 BSPs. I realize that the interrupts were reversed for eTEC1 and eTEC2 and I've made the changes in the .dtb file and I no longer hang when I ping, etc. But I still can't get the board on the network. I've verified it isn't the network settings. You're sure you're not trying to talk to the switch (which will claim link-up regardless of what's plugged into it)? The non-switch ethernet port is eTSEC2. What *does* it do when you ping, if neither hang nor work? -Scott ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev After remapping the IRQs, it is working now. Any idea on what I need to do to get SPI working? I've compiled it into the kernel but don't see anything in /proc/bus ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
fasync (Async Notification)
Hello All, I have mpc8313erdb eval board and kernel 2..6.20 on it. I have written GPIO driver and have enabled Async Notification (SIGIO) In the driver I am generating interrupt whenever the status of GPIO pin (GPIO 2) changes, this part is working correct (as soon as the GPIO pin status changes the interrupt is generated). Then I included Async Notification to notify the particluar user space process (to the process which I want to) by using fasync method, kill_fasync is called in Interrupt handler and also the kill_fasync signals the particular process and the Signal handler executes and says SIGIO is received. But the problem is, if I change GPIO pin status twice then two interrupts are generated but I get SIGIO Async Notification only once. Whereras I am expecting that I should get twice SIGIO Async Notification (Theory says the same). Could anyone please let me what is the reason for this ? ? ? Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Regarding Level/Edge of Interrupt sense values
Hello, I created a device node for gpio-controller for evaluation board mpc83313erdb. I created the dtb and loaded on target and the interrupt is generated successfully. But in dts at interrupts = 74 0x2 I set sense as Edge (sense== 2: Edge, high-to-low change), when I load the driver module and checked the entry in /proc/interrupts it shows the sense as Level i.e. 8 (sense == 8: Level, low assertion) as follows; 74: 1 IPIC Level gpio Following is gpio-controller device tree node; gpio-control...@c00 { #gpio-cells = 2; compatible = fsl,mpc8313-gpio, fsl,mpc8349-gpio; reg = 0xc00 0x100; interrupts = 74 0x2; interrupt-parent = ipic; gpio-controller; }; Could anyone please tell what could be the reason ? ? ? Am I missing something ? ? ? Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam # Start cat /proc/interrupts CPU0 16:162 IPIC Level serial 19: 43 IPIC Level i2c-mpc 20: 1 IPIC Level i2c-mpc 22: 2 IPIC Edge phy_interrupt 32: 0 IPIC Level enet_error 33:765 IPIC Level enet_rx 34: 3 IPIC Level enet_tx 35: 0 IPIC Level enet_error 36: 0 IPIC Level enet_rx 37: 15 IPIC Level enet_tx 38: 0 IPIC Edge ehci_hcd:usb1 72: 0 IPIC Level gtm timer 74: 1 IPIC Level gpio 77: 51451 IPIC Level fsl-elbc 80: 0 IPIC Level pmc BAD: 0 ## END ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Interrupt sense value in device tree
Hello, I created a device node for gpio-controller for evaluation board mpc83313erdb. I created the dtb and loaded on target. But in dts at interrupts = 74 0x2 I set sense as Edge (sense== 2: Edge, high-to-low change), when I load the driver module and checked the entry in /proc/interrupts it shows the sense as 'Level' i.e. 8 (sense == 8: Level, low assertion) as follows; 74: 1 IPIC Level gpio Following is gpio-controller device tree node; gpio-control...@c00 { #gpio-cells = 2; compatible = fsl,mpc8313-gpio, fsl,mpc8349-gpio; reg = 0xc00 0x100; interrupts = 74 0x2; interrupt-parent = ipic; gpio-controller; }; Could anyone please tell what could be the reason ? ? ? Am I missing something ? ? ? Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam # Start cat /proc/interrupts CPU0 16:162 IPIC Level serial 19: 43 IPIC Level i2c-mpc 20: 1 IPIC Level i2c-mpc 22: 2 IPIC Edge phy_interrupt 32: 0 IPIC Level enet_error 33:765 IPIC Level enet_rx 34: 3 IPIC Level enet_tx 35: 0 IPIC Level enet_error 36: 0 IPIC Level enet_rx 37: 15 IPIC Level enet_tx 38: 0 IPIC Edge ehci_hcd:usb1 72: 0 IPIC Level gtm timer 74: 1 IPIC Level gpio 77: 51451 IPIC Level fsl-elbc 80: 0 IPIC Level pmc BAD: 0 ## END ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Interrupt sense value in device tree
Hello, I created a device node for gpio-controller for evaluation board mpc83313erdb. I created the dtb and loaded on target. But in dts at interrupts = 74 0x2 I set sense as Edge (sense== 2: Edge, high-to-low change), when I load the driver module and checked the entry in /proc/interrupts it shows the sense as 'Level' i.e. 8 (sense == 8: Level, low assertion) as follows; 74: 1 IPIC Level gpio Following is gpio-controller device tree node; gpio-control...@c00 { #gpio-cells = 2; compatible = fsl,mpc8313-gpio, fsl,mpc8349-gpio; reg = 0xc00 0x100; interrupts = 74 0x2; interrupt-parent = ipic; gpio-controller; }; Could anyone please tell what could be the reason ? ? ? Am I missing something ? ? ? Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam # Start cat /proc/interrupts CPU0 16:162 IPIC Level serial 19: 43 IPIC Level i2c-mpc 20: 1 IPIC Level i2c-mpc 22: 2 IPIC Edge phy_interrupt 32: 0 IPIC Level enet_error 33:765 IPIC Level enet_rx 34: 3 IPIC Level enet_tx 35: 0 IPIC Level enet_error 36: 0 IPIC Level enet_rx 37: 15 IPIC Level enet_tx 38: 0 IPIC Edge ehci_hcd:usb1 72: 0 IPIC Level gtm timer 74: 1 IPIC Level gpio 77: 51451 IPIC Level fsl-elbc 80: 0 IPIC Level pmc BAD: 0 ## END ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Regarding irq_of_parse_and_map
Because dtc will generate phandles automatically when you reference the node with the operator. Yes the same statement I found in dts-bindings for gpio txt, sorry I missed it somehow ... Do you want your changes to ever make it into the upstream kernel? Yes I would like to do that ... but the reason I asked is as it is my first try so I am thinking that I will edit the same file and do it in the same way ofcourse I will follow for device node gpio-controller the new apporach and later if it works then I will create new dts with upstream Linux base ... Now I have created the mpc8313erdb.dts with gpio-controller device node. I would like to ask that now I should compile it with dtc and generate dtb and I should load this dtb on board/target, Right ? ? ? please correct me if I am wrong ... Also is it possible to compile device tree on Linux host and genreate dtb for powerpc ? ? ? If yes, then how ? ? ? please let me know ... thanks ... Before I tried to generate virtual irq using irq_create_mapping and I got the same number as hw_irq_no i.e. 74 as virtual irq. Also the entry was made in proc/interrupts and trigger was 8 (Level). But when I tried to interrupt and the handler was never called ? ? ? Was it because of gpio device node missing in device tree ? ? ? please let me know ... thanks ... Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam On 2/18/09, Scott Wood scottw...@freescale.com wrote: On Wed, Feb 18, 2009 at 05:31:34PM +0530, Vijay Nikam wrote: Don't specify this explicitly. Please base new development off of the device tree that is in upstream Linux, not the very old tree in your BSP. May I know the reason why I should not specify it explicitly ? ? ? Because dtc will generate phandles automatically when you reference the node with the operator. Also what would be the problem if I do in the same way as it is given in BSP mpc8313erdb.dts ? ? ? Do you want your changes to ever make it into the upstream kernel? And should I use gpio-controller as a gpio device node ? ? ? Yes, the node should label itself as a gpio controller. -Scott ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Regarding irq_of_parse_and_map
I checked and read the Documentation/powerpc/dts-bindings/fsl/8xxx_gpio.txt and booting-without-of.txt. It is different then what I read before from booting-without-of.txt ... perhaps as it is old and came with BSP. Am I right ? ? ? Don't specify this explicitly. Please base new development off of the device tree that is in upstream Linux, not the very old tree in your BSP. May I know the reason why I should not specify it explicitly ? ? ? Also what would be the problem if I do in the same way as it is given in BSP mpc8313erdb.dts ? ? ? And should I use gpio-controller as a gpio device node ? ? ? Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam On 2/17/09, Scott Wood scottw...@freescale.com wrote: Vijay Nikam wrote: I added the gpio node as follows to mpc8313erdb.dts; g...@c00 { linux,phandle = c00; Don't specify this explicitly. Please base new development off of the device tree that is in upstream Linux, not the very old tree in your BSP. device_type = gpio; No device_type. The only thing I need to know what should I write at 'compatible' tag ? ? ? the compatible tag format is manufacturer,model the manufacturer is 'fsl' i.e. I think freescale but the model, as it is the model number where I can find this model ? ? ? Please let me know ... thanks ... compatible = fsl,mpc8313-gpio, fsl,mpc8349-gpio; Also I would like to ask if the above device node is written according to bindings ... I think it should be right as I referred 'bootingwithout-of.txt' ... but please correct me if I am worng ? ? ? See also Documentation/powerpc/dts-bindings/fsl/8xxx_gpio.txt. Also note that current Linux has a driver in arch/powerpc/sysdev/mpc8xxx_gpio.c. -Scott ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: Regarding irq_of_parse_and_map
= 2; reg = 700 100; built-in; device_type = ipic; }; e...@5000 { linux,phandle = 5000; device_type = elbc; compatible = fsl-elbc; reg = 5000 1000; interrupts = 4d 8; interrupt-parent = 700; }; po...@b00 { linux,phandle = b00; device_type = power; compatible = fsl,mpc831x-pmc, fsl,mpc83xx-pmc; reg = b00 100 a00 100; interrupts = 50 8; interrupt-parent = 700; }; ti...@500 { linux,phandle = 500; device_type = timer; compatible = fsl,mpc831x-gtm, fsl,mpc83xx-gtm; reg = 500 100; interrupts = 48 8; interrupt-parent = 700; }; }; }; ## END ### Kind Regards, Vijay Nikam On 2/16/09, Scott Wood scottw...@freescale.com wrote: On Mon, Feb 16, 2009 at 05:25:23PM +0530, Vijay Nikam wrote: 2. Also I would like to ask how I can determine the virtual irq using irq_of_parse_and_map (struct device_node *dev, int index) ? ? ? here I am not getting what I should pass *dev and index ? ? ? as in my mpc8313erdb.dts I could not find any node name 'gpio' so I do not know what I can use ... You'd need to add a gpio node to the device tree. If you do this, be sure to follow existing bindings. Kindly please acknowledge ... thank you ... Following is the content of mpc8313erdb.dts That device tree looks very old, as if it came from a BSP rather than upstream Linux. -Scott ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Regarding irq_of_parse_and_map
; interrupt-controller; #address-cells = 0; #interrupt-cells = 2; reg = 700 100; built-in; device_type = ipic; }; e...@5000 { linux,phandle = 5000; device_type = elbc; compatible = fsl-elbc; reg = 5000 1000; interrupts = 4d 8; interrupt-parent = 700; }; po...@b00 { linux,phandle = b00; device_type = power; compatible = fsl,mpc831x-pmc, fsl,mpc83xx-pmc; reg = b00 100 a00 100; interrupts = 50 8; interrupt-parent = 700; }; ti...@500 { linux,phandle = 500; device_type = timer; compatible = fsl,mpc831x-gtm, fsl,mpc83xx-gtm; reg = 500 100; interrupts = 48 8; interrupt-parent = 700; }; }; }; Kind Regards, Vijay Nikam ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Not able to see any output if kernel module loaded for the first time
Hello All, I am facing perhaps some strange kind of problem. I have mpc8313erdb eval board and wrote the GPIO driver, the driver is just making the assigned GPIO[3] pin high and low. If I load this module first time after bootup or if I make some change in the code and compile and load the module, then I am not able to see any output on the scope but if I load it again then I will be able to see the output on the scopt that GPIO[3] pin has became high and low. Later if I removed the kernel module and load it again then also I am able to see the output on the scope, till I do the reboot or power-off and on. Could anyone let me know why this happening ... thanks ... Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: request_irq return errno 38
Thanks for your replies ... I checked the irq.c and irq.h and found the prototype of irq_of_parse_and_map() and found from the comment that it is a wrapper function contains a chain of irq_map_one() and irq_create_mapping() ... It means that I can use irq_create_mapping() to know the virq also the same suggessted by michael ... what is the difference between these two i.e. irq_create_mapping() and irq_of_parse_and_map() ... I mean in usage what could be the difference ? ? ? If used the irq_of_parse_and_map() then the paraments I need to pass are device_node *dev and index irq_of_parse_and_map(struct device_node *dev, int index) ... then how I can pass the required information i.e. dev and index ? ? ? Also how I can read the device tree binary file ? ? ? Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam On 2/12/09, Brad Boyer f...@allandria.com wrote: On Wed, Feb 11, 2009 at 03:43:26PM +0530, Vijay Nikam wrote: I read in LDD book, they give directly irq no. they have given parallel port example, here they have set or said irq no. defaults to 7 and they have not done any irq_mapping so what is the difference ? ? ? I mean how I should know when to use irq_mapping and when not ? ? ? Also is it some difference between writng drivers on embedded Linux level and Linux PC (i386) ? ? ? The basic request_irq() function is generic, but the value of the arguments (especially the number for the IRQ line) is architecture specific in many ways. This is one difference between the i386 code and the powerpc code inside Linux. Most i386 hardware is standard PC hardware with very clearly defined interrupt sources. Because of this, the mapping from the numeric IRQ value to a real hardware interrupt source is defined pretty clearly. The powerpc architecture code has to support almost arbitrarily complex hardware, and the embedded world is the source of most of the complexity. Because of this, the powerpc code has to dynamically allocate those numeric IRQ sources and tie them to a specific hardware interrupt. There is functionality to take the information from your device tree and convert it to a virtual IRQ. That happens automatically for some types of devices like PCI cards, but your driver may have to do that mapping itself in other cases. I believe the appropriate API for this is the function irq_of_parse_and_map(). It takes a device node and index into the interrupt list for that device and gives a virtual IRQ number. Brad Boyer f...@allandria.com ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
request_irq return errno 38
Hello All, I have mpc8313erdb evaluation board and currently I am writing GPIO driver. Actually it is just simple test driver. I did the irq_request in the driver init function, as request_irq returns zero (0) if successful, otherwise -1 on error and errno indicates the error. But when I load or insert the module using insmod request_irq return with Return Value -38. I checked in errno.h file in asm-generic and 38 means ENOSYS - Function not implemented. Following is irq_request code: -- ret = request_irq(74, interrupt_handler, SA_INTERRUPT | SA_SHIRQ , gpio, mydev); if(ret) printk(KERN_INFO Error in request_irq, value return = %d \n, ret); -- NOTE: 74 is the Interrupt ID Number for GPIO Interrupt. this information is from Processor User Manual. Following is the handler: - static int interrupt_handler(int irqn, void *dev_id) { printk(KERN_INFO Enter in interrupt handler\n); return IRQ_HANDLED; } Usually request_irq return EBUSY, EINVAL but in my case it returns ENOSYS (errno 38). I tried to look information for this errno in interrupt context but could not able to find anything useful or understable. Could anyone please let me know why this specific errno 38 generated in request_irq ? ? ? and what are the possiblities for resolving this error ? ? ? Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: request_irq return errno 38
Thanks for your prompt reply ... I am using kernel version 2.6.20 ... May I know what raw IRQ means ? ? ? and what is the reason I cant map raw_irq_number ??? Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam On 2/11/09, Michael Ellerman mich...@ellerman.id.au wrote: On Wed, 2009-02-11 at 14:13 +0530, Vijay Nikam wrote: Hello All, I have mpc8313erdb evaluation board and currently I am writing GPIO driver. Actually it is just simple test driver. I did the irq_request in the driver init function, as request_irq returns zero (0) if successful, otherwise -1 on error and errno indicates the error. But when I load or insert the module using insmod request_irq return with Return Value -38. I checked in errno.h file in asm-generic and 38 means ENOSYS - Function not implemented. Following is irq_request code: -- ret = request_irq(74, interrupt_handler, SA_INTERRUPT | SA_SHIRQ , gpio, mydev); if(ret) printk(KERN_INFO Error in request_irq, value return = %d \n, ret); -- NOTE: 74 is the Interrupt ID Number for GPIO Interrupt. this information is from Processor User Manual. Following is the handler: - static int interrupt_handler(int irqn, void *dev_id) { printk(KERN_INFO Enter in interrupt handler\n); return IRQ_HANDLED; } Usually request_irq return EBUSY, EINVAL but in my case it returns ENOSYS (errno 38). I tried to look information for this errno in interrupt context but could not able to find anything useful or understable. Could anyone please let me know why this specific errno 38 generated in request_irq ? ? ? and what are the possiblities for resolving this error ? ? ? You don't mention what kernel version you're using. But you might be hitting the check in __setup_irq(): if (desc-chip == no_irq_chip) return -ENOSYS; That would make sense because you're trying to map a raw irq number, which doesn't work. You first need to call irq_create_mapping(), like: int virq; virq = irq_create_mapping(NULL, 74); rc = request_irq(virq, ...); cheers -- Michael Ellerman OzLabs, IBM Australia Development Lab wwweb: http://michael.ellerman.id.au phone: +61 2 6212 1183 (tie line 70 21183) We do not inherit the earth from our ancestors, we borrow it from our children. - S.M.A.R.T Person ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Re: request_irq return errno 38
Ok ... so that means if I am writing driver for any device I need to take care of this mapping ? ? ? I mean I should use virq ? ? ? I read in LDD book, they give directly irq no. they have given parallel port example, here they have set or said irq no. defaults to 7 and they have not done any irq_mapping so what is the difference ? ? ? I mean how I should know when to use irq_mapping and when not ? ? ? Also is it some difference between writng drivers on embedded Linux level and Linux PC (i386) ? ? ? Sorry for perhaps these basic questions as kind of new to Linux kernel programming ... :-) Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam On 2/11/09, Michael Ellerman mich...@ellerman.id.au wrote: On Wed, 2009-02-11 at 15:11 +0530, Vijay Nikam wrote: Thanks for your prompt reply ... I am using kernel version 2.6.20 ... OK, that kernel has the irq remapping stuff. May I know what raw IRQ means ? ? ? and what is the reason I cant map raw_irq_number ??? Sorry, that's not the best terminology. I guess the right name is hardware irq number. You can't map it because the kernel keeps a mapping between hardware irq numbers and virtual irq numbers. request_irq() expects a virtual irq number. cheers -- Michael Ellerman OzLabs, IBM Australia Development Lab wwweb: http://michael.ellerman.id.au phone: +61 2 6212 1183 (tie line 70 21183) We do not inherit the earth from our ancestors, we borrow it from our children. - S.M.A.R.T Person ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Warning: Uable to open an inital console
: 1 cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness. Creating 4 MTD partitions on MPC8313RDB Flash Map Info: 0x-0x0010 : U-Boot 0x0010-0x0030 : Kernel 0x0030-0x0070 : JFFS2 0x0070-0x0080 : dtb MPC8313RDB flash device (MPC8313RDB Flash Map Info) initialized Freescale eLBC NAND Driver (C) 2006 Freescale NAND device: Manufacturer ID: 0xec, Chip ID: 0x75 (Samsung NAND 32MiB 3,3V 8-bit) Scanning device for bad blocks 4 cmdlinepart partitions found on MTD device nand0 Creating 4 MTD partitions on nand0: 0x-0x0010 : u-boot 0x0010-0x0040 : kernel 0x0040-0x0044 : devtb 0x0044-0x0200 : jffs usbmon: debugfs is not available fsl-ehci fsl-ehci.0: Freescale On-Chip EHCI Host Controller fsl-ehci fsl-ehci.0: new USB bus registered, assigned bus number 1 fsl-ehci fsl-ehci.0: irq 38, io base 0xe0023000 fsl-ehci fsl-ehci.0: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004 usb usb1: configuration #1 chosen from 1 choice hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected Initializing USB Mass Storage driver... usbcore: registered new interface driver usb-storage USB Mass Storage support registered. Freescale High-Speed USB SOC Device Controller driver (Feb 5, 2007) i2c /dev entries driver TCP cubic registered NET: Registered protocol family 1 NET: Registered protocol family 17 VFS: Mounted root (jffs2 filesystem). Freeing unused kernel memory: 144k init Warning: unable to open an initial console. Kernel panic - not syncing: No init found. Try passing init= option to kernel. 0Rebooting in 180 seconds.. ## LOG END # Can anyone suggest someway to proceed ... thanks ... Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Linux not booting on MPC8313ERDB
Hello, I am trying to port everything (u-boot-nand.bin, uImage(kernel), jffs2 and dtb) on NAND of MPC8313ERDB board ... I loaded u-boot-nand.bin to boot the board from NAND and it is successful ... but the problem is in loading kernel ... the kernel version and location is detected properly and it starts loading it but at mounting file system it gives Magic bit mask error and finally says kernel panic and wait for reboot ... Could any one please provide some information to proceed ... thank you Kind Regards, Vijay Nikam ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev
Linux not booting on MPC8313ERDB
Hello, I am trying to port everything (u-boot-nand.bin, uImage(kernel), jffs2 and dtb) on NAND of MPC8313ERDB board ... I loaded u-boot-nand.bin to boot the board from NAND and it is successful ... but the problem is in loading kernel ... the kernel version and location is detected properly and it starts loading it but at mounting file system it gives Magic bit mask error and finally says kernel panic and wait for reboot ... Could any one please provide some information to proceed ... thank you Kind Regards, Vijay Nikam ___ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev