kern/98388: [ata] FreeBSD 6.1 - WDC WD1200JS SATA II disks are seen as older SATA

Andrey V. Elsukov bu7cher at yandex.ru
Thu Aug 14 14:56:59 UTC 2008


14.08.08, 16:47, "Jeremy Chadwick" <koitsu at FreeBSD.org>:

> On Thu, Aug 14, 2008 at 03:56:32PM +0400, Andrey V. Elsukov wrote:
> > sam wrote:
> >>> Can you apply attached patch, rebuild your kernel, reboot in verbose
> >>> mode and show /var/run/dmesg.boot ?
> >>>
> >> http://cs.udmvt.ru/files/temp/dmesg.boot_0814
> >
> > It seems that driver couldn't allocate IO resource at BAR5 and
> > without this resource it can't read SATA Status register and
> > determine negotiated speed. I think the problem is in your BIOS.
> > If your BIOS doesn't have any AHCI or RAID specific options
> > I don't know how correctly fix this problem.
> Andrey, please correct me if I'm wrong here.  I'm not familiar these
> kernel functions, but assuming pci_read_config() handles proper byte
> order, and device_printf() prints it in correct order, then I believe
> you may be missing something important.

My decision is not from output of my changes.
Here is in log:
found->	vendor=0x8086, dev=0x27c0, revid=0x01
	domain=0, bus=0, slot=31, func=2
	class=01-01-8f, hdrtype=0x00, mfdev=0
	cmdreg=0x0005, statreg=0x02b0, cachelnsz=0 (dwords)
	lattimer=0x00 (0 ns), mingnt=0x00 (0 ns), maxlat=0x00 (0 ns)
	intpin=b, irq=11
	powerspec 2  supports D0 D3  current D0
	map[10]: type I/O Port, range 32, base 0xc880, size  3, enabled
	map[14]: type I/O Port, range 32, base 0xc800, size  2, enabled
	map[18]: type I/O Port, range 32, base 0xc480, size  3, enabled
	map[1c]: type I/O Port, range 32, base 0xc400, size  2, enabled
	map[20]: type I/O Port, range 32, base 0xc080, size  4, enabled

BAR5 is not present here. Also

atapci1: <Intel ICH7 SATA300 controller> port 0xc880-0xc887,0xc800-0xc803,0xc480-0xc487,0xc400-0xc403,0xc080-0xc08f irq 19 at device 31.2 on pci0
atapci1: Reserved 0x10 bytes for rid 0x20 type 4 at 0xc080
atapci1: [MPSAFE]
atapci1: [ITHREAD]
atapci1: SCRD = 0x40000180, SATACR1 = 0x00000000

There should be resource allocation:
"rid 0x24 type 3" for AHCI or "rid 0x24 type 4" for non-AHCI.
But here are nothing of these.

ata2: <ATA channel 0> on atapci1
atapci1: Reserved 0x8 bytes for rid 0x10 type 4 at 0xc880
atapci1: Reserved 0x4 bytes for rid 0x14 type 4 at 0xc800

> Someone should make a patch for the user that zeros out bit 30 of SIR,
> then check the xBAR and LBAR values; zeroing bit 30 might get him
> SATA300 support (I haven't looked at the rest of the FreeBSD ATA code
> yet).

I think you can try to do it. But i don't have this hardware and trying 
to change some bits, making patches, waiting for results, again and again
- it's not very interesting for me (i already have similar experience)..
In any case ICHx which is working in non-AHCI mode is not the best choice.
Many SATA features don't work in this mode and difference between 
SATA150 and SATA300 is small. 

-- 
WBR, Andrey V. Elsukov


More information about the freebsd-hackers mailing list