Trying to write/read value at PCI BAR address from Kernel Space
Hi, I am trying to write and read PCI BAR address but not getting the expected output. I am using the ioremap api to get the address. Any leads will be fruit full. Regards
On Tue, Apr 28, 2015 at 10:25 AM, Robert Clove <cloverobert@gmail.com> wrote:
Hi,
I am trying to write and read PCI BAR address but not getting the expected output. I am using the ioremap api to get the address. Any leads will be fruit full.
can you please post what you have tried till now... regards sudip
retval = pci_enable_device(dev); if (retval) { printk(KERN_ERR "Unable to enable this PCI device\n"); return retval; } else { printk(KERN_INFO "PCI device enabled\n"); } display_pci_config_space(dev); retval = pci_request_regions(dev, "expt_pci"); if (retval) { printk(KERN_ERR "Unable to acquire regions of this PCI device\n"); pci_disable_device(dev); return retval; } else { printk(KERN_INFO "PCI device regions acquired\n"); } if ((dpv->reg_base = ioremap(pci_resource_start(dev, 2), pci_resource_len(dev, 2))) == NULL) { printk(KERN_ERR "Unable to map registers of this PCI device\n"); pci_release_regions(dev); pci_disable_device(dev); return -ENODEV; } printk(KERN_INFO "Register Base: %p\n", dpv->reg_base); printk(KERN_INFO "IRQ: %u\n", dev->irq); printk(KERN_INFO "dpv->reg_base value is: %x\n",dpv->reg_base); pci_set_drvdata(dev, dpv); printk(KERN_INFO "PCI device registered\n"); printk(KERN_INFO "Expt: In write\n"); //iowrite8(MY_BYTE,dev->resource[0].start); uint32_t a = 0x01; uint32_t addr; iowrite8(a, dpv->reg_base); printk("value written is %d\n",a); printk(KERN_INFO "Expt: In read\n"); //addr = ioread8(dev->resource[0].start ); addr = ioread8(dpv->reg_base ); printk("Value read is %d\n",addr); THE OUTPUT i am getting is this: [ 6482.783371] PCI device regions acquired [ 6482.795801] Register Base: ffffc90015b00000 [ 6482.795803] IRQ: 16 [ 6482.795804] dpv->reg_base value is: 15b00000 [ 6482.795805] PCI device registered *[ 6482.795806] Expt: In write[ 6482.795807] value written is 1[ 6482.795808] Expt: In read[ 6482.795810] Value read is 0* [ 6482.795836] Expt PCI driver registered Can you tell me what am i doing wrong? Regards On Tue, Apr 28, 2015 at 10:36 AM, Sudip Mukherjee < sudipm.mukherjee@gmail.com> wrote:
On Tue, Apr 28, 2015 at 10:25 AM, Robert Clove <cloverobert@gmail.com> wrote:
Hi,
I am trying to write and read PCI BAR address but not getting the expected output. I am using the ioremap api to get the address. Any leads will be fruit full.
can you please post what you have tried till now...
regards sudip
Is this some kind of school/uni assignment? I got a mail from somebody Anil Joshi (without copy to the mailing list) that sent the exact same code snippet Regards
participants (3)
-
Ricardo Ribalda Delgado -
Robert Clove -
Sudip Mukherjee