From: Kevin Diggs <hidden> Date: 2008-10-08 20:01:52
Hi,
I thought I might take a whack at fixing the 2.6 serial driver
for my 8600. At the top of pmac_zilog.c (2.6.26) there is a todo for DMA.
A quick glance at macserial.c (2.4.31) suggests it has dbdma support for
receive. Anyone know of any pitfalls for adding dbdma support for
pmac_zilog.c?
kevin
From: Benjamin Herrenschmidt <benh@kernel.crashing.org> Date: 2008-10-08 20:45:27
On Wed, 2008-10-08 at 12:51 -0700, Kevin Diggs wrote:
Hi,
I thought I might take a whack at fixing the 2.6 serial driver
for my 8600. At the top of pmac_zilog.c (2.6.26) there is a todo for DMA.
A quick glance at macserial.c (2.4.31) suggests it has dbdma support for
receive. Anyone know of any pitfalls for adding dbdma support for
pmac_zilog.c?
Yes, it's not totally trivial and I wouldn't recommend using the weirdo
code in macserial (it does things that I don't understand how they work
with the dbdma engine).
The best way I see is to start from scratch with two different
mechanisms:
- For Tx, that's the easiest, the fire off DMA's for outgoing chars,
maybe queue up a few descriptors to let data accumulate.
- For Rx, one descriptor per byte. That sucks but I think that's also
what Apple does. No need to have a huge Rx buffer anyway. That gives you
precise Rx status to the byte.
Ben.
On Thu, Oct 09, 2008 at 07:45:11AM +1100, Benjamin Herrenschmidt wrote:
Yes, it's not totally trivial and I wouldn't recommend using the weirdo
code in macserial (it does things that I don't understand how they work
with the dbdma engine).
The best way I see is to start from scratch with two different
mechanisms:
- For Tx, that's the easiest, the fire off DMA's for outgoing chars,
maybe queue up a few descriptors to let data accumulate.
- For Rx, one descriptor per byte. That sucks but I think that's also
what Apple does. No need to have a huge Rx buffer anyway. That gives you
precise Rx status to the byte.
I know it's not really in the scope of the discussion, but do you have
any suggestions for how we might support this with AMIC or PSC DMA where
we can't have an arbitrary number of in-flight commands? There hasn't
been a lot of traction on getting the non-PCI macs working again, but
that is something that may happen eventually. It would be nice to have
similar designs for both the descriptor based and register driven DMA
engines, but I definitely understand if you think that's not realistic.
It seems to me that an interrupt per-byte (which this design would
imply on the older DMA engines) would make the DMA less useful.
Brad Boyer
flar@allandria.com
From: Kevin Diggs <hidden> Date: 2008-10-09 01:42:20
Benjamin Herrenschmidt wrote:
On Wed, 2008-10-08 at 12:51 -0700, Kevin Diggs wrote:
quoted
Hi,
I thought I might take a whack at fixing the 2.6 serial driver
for my 8600. At the top of pmac_zilog.c (2.6.26) there is a todo for DMA.
A quick glance at macserial.c (2.4.31) suggests it has dbdma support for
receive. Anyone know of any pitfalls for adding dbdma support for
pmac_zilog.c?
Yes, it's not totally trivial and I wouldn't recommend using the weirdo
code in macserial (it does things that I don't understand how they work
with the dbdma engine).
The best way I see is to start from scratch with two different
mechanisms:
- For Tx, that's the easiest, the fire off DMA's for outgoing chars,
maybe queue up a few descriptors to let data accumulate.
- For Rx, one descriptor per byte. That sucks but I think that's also
what Apple does. No need to have a huge Rx buffer anyway. That gives you
precise Rx status to the byte.
Ben.
Does the 8530 (as implemented in the PowerMac ASICs) have a receive
buffer like the 16550? Any pointers to some "good" dbdma example code?
Anyone know where one might find some 8530 docs?
This driver "should" work for ppp without receive dma, right?
One descriptor per byte???
kevin