Opened 16 years ago

Closed 5 years ago

Last modified 4 years ago

#2804 closed bug (no change required)

booting fail on PATA disks using AHCI capable chipsets?

Reported by: rudolfc Owned by: marcusoverhagen
Priority: normal Milestone:
Component: Drivers/Disk Version: R1/pre-alpha1
Keywords: boot-failure Cc: mattmadia@…
Blocked By: Blocking:
Platform: All

Description

On my ASUS P5E3 sits a Marvell 88SE6111 PATA/SATA controller with one ultra DMA 100/133 connector, and one external SATA3.0 Gb/s port (sata on the go).

DMA fails on this chipset using the IDE busmanager, and reading and writing from/to disk both fail using 32bit PIO access (IDE and ATA busmanager). Both reading and writing succeed in 16bit PIO access.

I've been reading the net a bit, and from the looks of it this chip is a AHCI mimicking chipset. It would be able to run in AHCI mode even for the PATA bus, but it can also run in 'legacy' mode.

I get the feeling that the chip has to be 'told' to use legacy mode by accessing certain registers in a certain way/order. Looks like it's done here: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;f=drivers/ata/pata_marvell.c

in routine: marvell_pre_reset();

So I guess something like this has to be done somewhere in a driver, or we should run this controller in AHCI mode for the PATA port. I expect (guess) that 32bit PIO I/O and DMA would work with the marvell_pre_reset() trick.???

Since Revision: R27884 the use of this adapter works in 16-bit PIO mode as the driver generic/ide_adapter has been modified to always use 16bit transfers for reading and writing in PIO mode.

This is a workaround until the ata (and ide) busmanagers can automatically fall-back from 32bit PIO mode to 16bit PIO mode on 32bit trouble (for the writing instance: no int after writing, but a timeout occurs).

(Note: I forced 16-bit writing in R27884, 16-bit reading was already forced ever since the driver was imported in svn over 4 years ago! I did test 32bit reading tough and it indeed failed.)

I tested different harddisks, all failed.

Hopefully I am making sense..

Greetings!

Rudolf.

Change History (10)

comment:1 by rudolfc, 16 years ago

Oh,

The ATA busmanager quits this way (on writing): -it (thinks it) sends all sectors it should, so repeatedly sectors are written code-wise. -after it completed writing (it thinks), it waits for drq_down, but fails: ata_exec_pio_transfer:ata_wait_for_drqdown failed ata_exec_pio_transfer:error

comment:2 by anevilyak, 16 years ago

Component: - GeneralDrivers/Disk
Owner: changed from axeld to marcusoverhagen

comment:3 by mmadia, 15 years ago

Cc: mattmadia@… added

comment:4 by scottmc, 14 years ago

Do you still have access to the hardware? Can you retest with a more recent build of Haiku?

comment:5 by rudolfc, 14 years ago

I still have access to the hardware, but it works as stated above, by forcing 16 bit read and write mode. AFAIK no-one extended stuff here so it's still as it is. Since booting succeeds one _could_ close this ticket..

Rudolf.

comment:6 by scottmc, 13 years ago

Blocking: 7665 added

comment:7 by waddlesplash, 6 years ago

Keywords: boot-failure added

comment:8 by waddlesplash, 6 years ago

Blocking: 7665 removed

comment:9 by waddlesplash, 5 years ago

Resolution: no change required
Status: newclosed

comment:10 by nielx, 4 years ago

Milestone: R1

Remove milestone for tickets with status = closed and resolution != fixed

Note: See TracTickets for help on using tickets.