Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 25 Sep 2007 11:21:12 +0400
From:      "Andrey V. Elsukov" <bu7cher@yandex.ru>
To:        Nathan Butcher <n-butcher@fusiongol.com>
Cc:        Dave Grochowski <malus.x@gmail.com>, freebsd-current@freebsd.org, =?UTF-8?B?U8O4cmVuIFNjaG1pZHQ=?= <sos@FreeBSD.org>
Subject:   Re: SATA DVD-Drive
Message-ID:  <46F8B6E8.4040201@yandex.ru>
In-Reply-To: <46F86249.9090800@fusiongol.com>
References:  <46F86249.9090800@fusiongol.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------020100090709050609020004
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Nathan Butcher wrote:
> I think somebody determined that there has been some regression here,
> because the JMicron controller works on FreeBSD 6.2 apparently.
> That counts as two SATA chipsets I've noticed regression in with
> 7.0-CURRENT (Jmicron and Promise SATA 150/300 TX4), which I really hope
> get fixed before 7.0-RELEASE.

Hi, All.

Seems only an AHCI controllers affected by this problem. I think the
regression was introduced in the rev. 1.187 of ata-chipset.c:
http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/ata/ata-chipset.c.diff?r1=1.186;r2=1.187
But the cause of problem is not here. I think kern/111699 related to
this problem too.

The problem in the port signature reading. Before this commit we have
the following code:

if ((ATA_IDX_INB(ch, ATA_CYL_LSB) == ATAPI_MAGIC_LSB) &&
     (ATA_IDX_INB(ch, ATA_CYL_MSB) == ATAPI_MAGIC_MSB))
     ch->devices = ATA_ATAPI_MASTER;
else
     ch->devices = ATA_ATA_MASTER;

It works in the FreeBSD-6.x. Now we have:

switch (ATA_INL(ctlr->r_res2, ATA_AHCI_P_SIG + offset)) {
case 0xeb140101:
     ch->devices = ATA_ATAPI_MASTER;
     device_printf(ch->dev, "SATA ATAPI devices not supported yet\n");
     ch->devices = 0;
     break;
case 0x96690101:
     ch->devices = ATA_PORTMULTIPLIER;
     device_printf(ch->dev, "Portmultipliers not supported yet\n");
     ch->devices = 0;
     break;
case 0x00000101:
     ch->devices = ATA_ATA_MASTER;
     break;
}

And it don't work. The returned signature is 0xFFFFFFFF.
As a workaround we can add the
default:
     ch->devices = ATA_ATA_MASTER;

This code will be similar to 6.x code. But i think this is not right.
May be someone can test the attached patch?

Patch try to read port signature after starting AHCI engine,
like linux do. Maybe this will help..

PS. Sorry, i can't this patch, because i don't have working AHCI
controller.

-- 
WBR, Andrey V. Elsukov

--------------020100090709050609020004
Content-Type: text/plain;
 name="ata-chipset.c.diff"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="ata-chipset.c.diff"

LS0tIHNyYy9zeXMvZGV2L2F0YS9hdGEtY2hpcHNldC5jLm9yaWcJMjAwNy0wOS0xMCAyMzox
NjozOS4wMDAwMDAwMDAgKzA0MDAKKysrIHNyYy9zeXMvZGV2L2F0YS9hdGEtY2hpcHNldC5j
CTIwMDctMDktMjUgMDk6MjU6NDcuMDAwMDAwMDAwICswNDAwCkBAIC02NzgsNyArNjc4LDcg
QEAgYXRhX2FoY2lfcmVzZXQoZGV2aWNlX3QgZGV2KQogICAgIHN0cnVjdCBhdGFfY2hhbm5l
bCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICAgdV9pbnQzMl90IGNtZDsKICAg
ICBpbnQgb2Zmc2V0ID0gY2gtPnVuaXQgPDwgNzsKLSAgICBpbnQgdGltZW91dDsKKyAgICBp
bnQgdGltZW91dCwgcmV0OwogCiAgICAgaWYgKCEoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFU
QV9BSENJX1BJKSAmICgxIDw8IGNoLT51bml0KSkpIHsKIAlkZXZpY2VfcHJpbnRmKGRldiwg
InBvcnQgbm90IGltcGxlbWVudGVkXG4iKTsKQEAgLTcyMCw4ICs3MjAsMjMgQEAgYXRhX2Fo
Y2lfcmVzZXQoZGV2aWNlX3QgZGV2KQogICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRB
X0FIQ0lfUF9DTUQgKyBvZmZzZXQsIEFUQV9BSENJX1BfQ01EX1NVRCk7CiAKICAgICAvKiBl
bmFibGUgaW50ZXJmYWNlICovCi0gICAgaWYgKGF0YV9zYXRhX3BoeV9yZXNldChkZXYpKSB7
Ci0Jc3dpdGNoIChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9TSUcgKyBvZmZz
ZXQpKSB7CisgICAgcmV0ID0gYXRhX3NhdGFfcGh5X3Jlc2V0KGRldik7CisKKyAgICAvKiBj
bGVhciBhbnkgaW50ZXJydXB0cyBwZW5kaW5nIG9uIHRoaXMgY2hhbm5lbCAqLworICAgIEFU
QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9JUyArIG9mZnNldCwKKwkgICAgIEFU
QV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0KSk7CisKKyAgICAv
KiBzdGFydCBvcGVyYXRpb25zIG9uIHRoaXMgY2hhbm5lbCAqLworICAgIEFUQV9PVVRMKGN0
bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQsCisJICAgICAoQVRBX0FIQ0lf
UF9DTURfQUNUSVZFIHwgQVRBX0FIQ0lfUF9DTURfRlJFIHwKKwkgICAgICBBVEFfQUhDSV9Q
X0NNRF9QT0QgfCBBVEFfQUhDSV9QX0NNRF9TVUQgfCBBVEFfQUhDSV9QX0NNRF9TVCkpOwor
CisgICAgLyogUmVhZCBwb3J0IHNpZ25hdHVyZSAqLworICAgIGlmIChyZXQpIHsKKwljbWQg
PSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9TSUcgKyBvZmZzZXQpOworCWlm
IChib290dmVyYm9zZSkKKwkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiUG9ydCBzaWdu
YXR1cmU6IDB4JTA4eFxuIiwgY21kKTsKKwlzd2l0Y2ggKGNtZCkgewogCWNhc2UgMHhlYjE0
MDEwMToKIAkgICAgY2gtPmRldmljZXMgPSBBVEFfQVRBUElfTUFTVEVSOwogCSAgICBkZXZp
Y2VfcHJpbnRmKGNoLT5kZXYsICJTQVRBIEFUQVBJIGRldmljZXMgbm90IHN1cHBvcnRlZCB5
ZXRcbiIpOwpAQCAtNzM3LDE1ICs3NTIsNiBAQCBhdGFfYWhjaV9yZXNldChkZXZpY2VfdCBk
ZXYpCiAJICAgIGJyZWFrOwogCX0KICAgICB9Ci0KLSAgICAvKiBjbGVhciBhbnkgaW50ZXJy
dXB0cyBwZW5kaW5nIG9uIHRoaXMgY2hhbm5lbCAqLwotICAgIEFUQV9PVVRMKGN0bHItPnJf
cmVzMiwgQVRBX0FIQ0lfUF9JUyArIG9mZnNldCwKLQkgICAgIEFUQV9JTkwoY3Rsci0+cl9y
ZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0KSk7Ci0KLSAgICAvKiBzdGFydCBvcGVyYXRp
b25zIG9uIHRoaXMgY2hhbm5lbCAqLwotICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRB
X0FIQ0lfUF9DTUQgKyBvZmZzZXQsCi0JICAgICAoQVRBX0FIQ0lfUF9DTURfQUNUSVZFIHwg
QVRBX0FIQ0lfUF9DTURfRlJFIHwKLQkgICAgICBBVEFfQUhDSV9QX0NNRF9QT0QgfCBBVEFf
QUhDSV9QX0NNRF9TVUQgfCBBVEFfQUhDSV9QX0NNRF9TVCkpOwogfQogCiBzdGF0aWMgdm9p
ZAo=
--------------020100090709050609020004--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46F8B6E8.4040201>