Porting a driver for a VME-PCI bridge from 2.4 to 2.6

tilmanglotzner tilmanglotzner at googlemail.com
Thu Apr 24 09:24:53 UTC 2008


Hello

I am trying to port a vme driver for a VMIC-7750, a single board computer 
with an Intel architecture and a PCI to VME bridge.

PCI-VME Bridge
=============
The bridge is a FPGA that links the PCI bus and the VME bus by mapping 
part of the address range of the VME  bus into a memory block of the PCI 
bus. Tundra, the chip manifacturer, calls this a "window". Up to 8 windows 
can be dynamically allocated.
There are 2 types of windows, a master window, and a slave window. If 
configured as master window, the bridge acts as VME-master on the bus, 
i.e.  writing or reading  into the window from the PCI side results in 
transactions on the VME bus.
If configured as slave, a VME master can write or read into the allocated 
VME addresses. That then triggers a transaction on the PCI bus.

The Driver
========
The  ported driver compiles, and links  -- data however seems not to 
transferred over the PCI->VME bridge. I can write via an application into 
the window, and read from it -- I do however not receive the data I am 
expecting.

I had this driver running a couple of years ago with an 2.4 kernel. I 
have not deep inside into the kernel development - that leaves me clueless 
on how to debug the driver.

The driver is available here: 
https://daq-plone.triumf.ca/HR/vmic/vmisft-7433-3.4.tar.gz/view

Changes:
========
To accommodate the 2.6 kernel, I did the following changes to the driver 
code located in misft-7433-3.4/vme_universe/module

a) Changed all MODULE_PARM to module_param

b) Changed all EXPORT_SYMBOL_NOVERS to EXPORT_SYMBOL

c)  Changed "vma->vm_flags |= VM_RESERVED | VM_LOCKED | VM_IO | VM_SHM" to
  vma->vm_flags |= VM_RESERVED | VM_LOCKED | VM_IO;

d) Changed "return remap_page_range(vma, vma->vm_start, vma->vm_pgoff << 
PAGE_SHIFT,vma->vm_end - vma->vm_start, vma->vm_page_prot);"
to
"return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff << PAGE_SHIFT,
vma->vm_end - vma->vm_start, vma->vm_page_prot);"

e) Changed "if (request_irq(universe_pci_dev->irq, universe_isr, SA_SHIRQ,
MODULE_NAME, universe_pci_dev)"
to
"if (request_irq(universe_pci_dev->irq, universe_isr, IRQF_SHARED,
MODULE_NAME, universe_pci_dev)"

Questions
=========
a) the number of arguments for MODULE_PARAM allowed optional parameters 
in 2.4, like MODULE_PARM(location_monitor, "2-2i").
Is there a mechanism like that available in the 2.6 series ?

b) Is there an flag replacing VM_SHM ?

c) I googled for the kernel procedures. The thread below seems describe a 
similar issue. A driver working with 2.4 did no longer work with 2.6. This 
could be traced back remap_pfn_range.  Are there alternativs to 
remap_pfn_range ?

http://mhonarc.axis.se/dev-etrax/msg08036.html

I would appreciate suggestions on how to debug this. It there are 
questions that require clarification from you side, I will be happy to 
provide this.

Thanks
Tilman



More information about the devel mailing list