Google
  Web www.spinics.net

ARM 9 DMA access problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


Dear mailing list!

We are having problems getting DMA access for a PCI soundcard (ALS4000) to run 
on a 2.6.6 kernel and ARM 922T processor. The DMA register is 24 bit wide 
(common for DMA), we are using the following code to ensure the 
functionality:

  /* check, if we can restrict PCI DMA transfers to 24 bits */
  if (pci_set_dma_mask(dev, 0x00ffffff) < 0 ||
      pci_set_consistent_dma_mask(dev, 0x00ffffff) < 0) {
      printk("<1>architecture does not support 24bit PCI busmaster DMA\n");
      return -ENXIO;
 }


A call to 

buf = kmalloc(0x8000, GFP_ATOMIC|GFP_DMA);

should return a virtual mem address from the heap (e.g. 0xC0AD0000). We print 
yout the addresses with

printk("BUS %x\n",virt_to_bus(buf));
printk("Phys %x\n",virt_to_phys(buf));

which results in

Bus 10ad0000
Phys ad0000

Now. What is the address the PCI card is seeing? The virt_to_bus or the 
virt_to_phys one?

Can this address even accessed at all by the just 24 bit wide DMA register of 
the card?

How else can we allocate DMA memory using 2.6.x kernel and the ARM 
architecture to make it work? Could it be an AMBA Bus problem?

Thanks for hints

Jens




-------------------------------------------------------------------
Subscription options: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm
FAQ/Etiquette:       http://www.arm.linux.org.uk/armlinux/mailinglists.php

[Site Home]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux ARM Kernel]     [Linux MIPS]     [ECOS]     [Tools]     [DDR & Rambus]     [Monitors]

Powered by Linux