General porting question

Jacky Lam jackylam at astri.org
Fri Oct 10 03:23:29 EST 2003


> > > You can not use virt_to_* on the address returned by
> > > pci_alloc_consistent().
> >
> >     Why?
>
> Because virt_to_*() is only defined for staticly mapped kernel virtual
> addresses...consistent_alloc() is not guaranteed to return a staticly
> mapped kernel virtual address so you can't use virt_to_*().  It is not
> a generic address translation API.
>
> >     By the way, this problem will only affect the consistency of dma
buffer.
> > In my case, it will only cause wrong output sound. But my card seems
don't
> > consume the dma and doesn't give any interrupt in return. It's fine on
PC
> > and I can receive interrupt if I write to the card's register to force
an
> > interrupt. What other possible porting problem can be here? Really
> > strange....
>
> Endianness issues as another person pointed out.  You still have to
> solve these address munging issues.

    Thanks. I will spend more time to understand those mapping stuff.....I
still cannot understand very clearly...

    Concerning endianness, I think the read/write to register of PCI card is
ok because it is done by inl()/outl() which already handled the endian
conversion. The remaining is the data written to dma buffer. I don't care it
now because the card seems don't start to consume the data.

    I look through the code many times. I can't find out any porting related
issues beside endianness and memory mapping that will make x86 and PPC
different. Any idea?

Best regards,
Jacky

P.S.: By the way, in embedded system, I know how much PCI memory are used.
Why don't we just give up some on board memory, say 1MB, and map "simply"
the memory with uncachable flag. Then this region of memory can be use by
PCI cards without need to take care all those mapping stuffs.


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-embedded mailing list