[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-kernel
Subject:    Re: Silicon Image 3112A SATA trouble
From:       "Prakash K. Cheemplavam" <prakashpublic () gmx ! de>
Date:       2003-11-30 21:34:23
[Download RAW message or body]

Bartlomiej Zolnierkiewicz wrote:
> On Sunday 30 of November 2003 18:19, Prakash K. Cheemplavam wrote:
> 
>>Bartlomiej Zolnierkiewicz wrote:
>>
>>>In 2.6.x there is no max_kb_per_request setting in
>>>/proc/ide/hdx/settings. Therefore
>>>	echo "max_kb_per_request:128" > /proc/ide/hde/settings
>>>does not work.
>>>
>>>Hmm. actually I was under influence that we have generic ioctls in 2.6.x,
>>>but I can find only BLKSECTGET, BLKSECTSET was somehow lost.  Jens?
>>>
>>>Prakash, please try patch and maybe you will have 2 working drivers now
>>>:-).
>>
>>OK, this driver fixes the transfer rate problem. Nice, so I wanted to do
>>the right thing, but it didn't work, as you explained... Thanks.
> 
> 
> Cool.
> 
> 
>>Nevertheless there is still the issue left:
>>
>>hdparm -d1 /dev/hde makes the drive get major havoc (something like:
>>ide: dma_intr: status=0x58 { DriveReady, SeekCOmplete, DataRequest}
>>
>>ide status timeout=0xd8{Busy}; messages taken from swsups kernal panic
>>). Have to do a hard reset. I guess it is the same reason why swsusp
>>gets a kernel panic when it sends PM commands to siimage.c. (Mybe the
>>same error is in libata causing the same kernel panic on swsusp.)
>>
>>Any clues?
> 
> 
> Strange.  While doing 'hdparm -d1 /dev/hde' the same code path is executed
> which is executed during boot so probably device is in different state or you
> hit some weird driver bug :/.
> 
> And you are right, thats the reason why swsusp panics.

I think the bug is, the driver specifically doesn't like my 
controller-sata converter-hd combination. As I stated in my very first 
message, on HD access the siimage.c constantly calls:

static int siimage_mmio_ide_dma_test_irq (ide_drive_t *drive)
{
	ide_hwif_t *hwif	= HWIF(drive);
	unsigned long base	= (unsigned long)hwif->hwif_data;
	unsigned long addr	= siimage_selreg(hwif, 0x1);

	if (SATA_ERROR_REG) {
		u32 ext_stat = hwif->INL(base + 0x10);
		u8 watchdog = 0;
		if (ext_stat & ((hwif->channel) ? 0x40 : 0x10)) {
//			u32 sata_error = hwif->INL(SATA_ERROR_REG);
//			hwif->OUTL(sata_error, SATA_ERROR_REG);
//			watchdog = (sata_error & 0x00680000) ? 1 : 0;
//#if 1
//			printk(KERN_WARNING "%s: sata_error = 0x%08x, "
//				"watchdog = %d, %s\n",
//				drive->name, sata_error, watchdog,
//				__FUNCTION__);
//#endif

		} else {

Thats why I commented above portions out, otherwise my dmesg gets 
flooded. What is strange, when I compile the kernel to *not* enable DMA 
at boot, the siimage DMA gets enabled nevertheless, so I am not sure 
whether hdparm -d1 and kernel boot take the same path to enable DMA. It 
seems some sort of hack within siimage.c is used to enable DMA on my 
drive. Remember, I have no native SATA drive, maybe thats the problem.

Prakash

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic