tech-kern archive

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

Re: SunFire v100 / Acer M5229 IDE DMA error workaround



On Wed, Oct 29, 2008 at 02:19:04PM -0500, David Young wrote:
> On Wed, Oct 29, 2008 at 01:57:11PM -0400, Rafal Boni wrote:
> > On Wed, Oct 29, 2008 at 12:22:13PM -0500, David Young wrote:
[...]
> > > I may be missing something, but by my reading of a PCI IDE controller
> > > spec that I scrounged off the web, it is important to acknowledge the
> > > interrupt in this way.  ISTM that the code should already acknowledge
> > > the interrupt by calling pciide_irqack().  Not so?
> > 
> > It probably is; as I said, I noticed that both Free- and OpenBSD do it
> > in both places, so I thought it was worth trying.  I'll double-check to
> > make sure this change isn't necessary for things to work with the above
> > change.
> 
> Ok.  I'm curious what you find out.

In fact, as I speculated, removing the clearing of the DMA control register
I added to pciide_dma_finish() is wholly un-necessary, and as long as I keep
the test for DMA not being active before stopping it, the driver works just
fine and doesn't report any DMA errors on the system.

> > > Note that this write may not be flushed to the device, and the
> > > interrupt deasserted, until a second call to pciide_dma_finish() calls
> > > bus_space_read_1(, cp->dma_iohs[IDEDMA_CTL], ).  In other words, you
> > > may take two interrupts per DMA completed.
> > 
> > Hmm, this is a theory that's worth exploring more, however, I would expect
> > the bus_space calls to handle any necessary flushing.
> 
> I'm guessing that they do not. :-(

I'll take Martin's suggestion and test the bus_space_barrier()s next, and
see if I can get rid of the pretend-like-we-didn't-get-an-interrupt-as-long-
as-DMA-is-still-active hack by adding some bus_space_barrier()s.

It's still quite possible the controller really doesn't have two fully
independent channels (or channel register sets), but if that were the
case I'd expect a data corruption and not just harmless / recoverable
error spew.

--rafal

-- 
  Time is an illusion; lunchtime, doubly so.     |/\/\|           Rafal Boni
                   -- Ford Prefect               |\/\/|      
rafal%pobox.com@localhost


Home | Main Index | Thread Index | Old Index