Re: DMA breakage in 2.6.29-rc*

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

 



Hi,

On Friday 30 January 2009, Benjamin Herrenschmidt wrote:
> On Fri, 2009-01-30 at 16:46 +1100, Benjamin Herrenschmidt wrote:
> > Hi Bart !
> > 
> > On a bunch of pmac's, I'm getting lost interrupts when trying to do DMA
> > with ide hard disks (first time at boot when reading the partition
> > table). It then times out, reverts to PIO and boots fine.
> > 
> > Haven't had time to fully bisect yet, but it seem to be somewhere in the
> > pile of IDE patches (surprise :-) that went in around that time.
> > 
> > I'll dig more next week, but in the meantime, I though you may have a
> > possible candidate in mind.
> 
> Smells like the patch that popped up not long ago already (can't find
> the thread now) where you cleaned up the port registration and broke our
> trick of passing a different parent device than the one used for DMA or
> something like that ... that mixed with something not testing the dma

Yeah my bad, though thanks to Andreas Schwab it is fixed in -rc3.

> map results (probably my fault) and I think we are passing crap DMA
> addresses to the device.
> 
> I'll sort it out. I should be able to just add working dma ops to the
> macio_device, it's a lot easier now that ppc32 has the same dma ops
> structure in struct device as ppc64.

Would be great as I have completely no idea about this stuff.

While you are at DMA support and will be fixing/testing it anyway
you may try to remove long standing duplication/obfuscation:

	/* Those fields are duplicating what is in hwif. We currently
	 * can't use the hwif ones because of some assumptions that are
	 * beeing done by the generic code about the kind of dma controller
	 * and format of the dma table. This will have to be fixed though.
	 */
	volatile struct dbdma_regs __iomem *	dma_regs;
	struct dbdma_cmd*		dma_table_cpu;

What needs to be done is more-or-less:

- teaching pmac_ide_init_dma() about hwif->prd_max_{nents,size}
  and then converting it to use ide_allocate_dma_engine()

- pmif->dma_regs -> hwif->dma_base

- pmif->dma_table_cpu -> hwif->dmatable_cpu

- sticking ide_release_dma_engine() somewhere (it seems that
  pmac driver never frees DMA memory allocated currently)

Of course while the above would be a nice cleanup+fixup, making
the driver work comes first..

Thanks,
Bart
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux