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: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);
[ 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@xxxxxxxxx> wrote:
can you please post what you have tried till now...On Tue, Apr 28, 2015 at 10:25 AM, Robert Clove <cloverobert@xxxxxxxxx> 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.
regards
sudip
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies