Date: Mon, 15 Jul 2002 10:43:12 +0930 From: Benjamin Close <cisbjc@cs.unisa.edu.au> To: Kirill Bezzubets <kirill@solaris.ru> Cc: freebsd-mobile@FreeBSD.ORG, sos@FreeBSD.ORG, "Greg 'groggy' Lehey" <grog@FreeBSD.ORG> Subject: Re: 4.6 CDROM cannot mount /dist on Dell Inspiron 8000 Message-ID: <3D3221A8.4010403@cs.unisa.edu.au> References: <20020714142633.A4349@gilberto.physik.rwth-aachen.de> <20020714190148.A92810@solaris.ru> <20020714190851.A5235@gilberto.physik.rwth-aachen.de> <20020714.122819.29173777.imp@bsdimp.com> <20020714231512.A92930@solaris.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------010603060100090607020708
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Kirill Bezzubets wrote:
>On Sun, Jul 14, 2002 at 12:28:19PM -0600, M. Warner Losh wrote:
>
>
>
>>In message: <20020714190851.A5235@gilberto.physik.rwth-aachen.de>
>> Christoph Kukulies <kuku@accms33.physik.rwth-aachen.de> writes:
>>: > > Error mounting /dev/acd0c on /dist: No such file or directory(2) (100%)
>>...
>>: > Are you sure there's "/dist" exist in your filesystem?
>>: > It is neccessary mount point to perform install/upgrade.
>>:
>>: Yes, it exists, that's for sure. And it's directory.
>>
>>Hey Kuku! What does dmesg say? Is there a acd0 listed? Do you have
>>a /dev/acd0c in your /dev tree?
>>
>>
>>
>
>Once again, what dmesg says (preferable booting kernel -v),
>and what does "mount_cd9660 -v /dev/acd0c /cdrom" do? I mean manual mount.
>If it works, is mounting manually at "/dist" fails or not?
>
>
>
I have a very similar problem where acd0 is not detected without a
kernel patch either on 4.6 or -current on an early Dell i8000.
I tracked the problem down to reading the status registers on the drive.
If they are read out of order, after issuing a status command the drive
will return corrupt data from the later registers. The ata spec does not
define what order the registers should be read in hence either way
*should* work. So it appears to be a firmware bug in the drive. However,
I think reading the registers in order makes a lot of sense. The patch
(against -current), submitted to sos a number of times, but seemingly
ignored is attached. Without it I have no cdrom drive with it I get:
Jul 8 16:15:34 draco kernel: acd0: DVD-ROM <TOSHIBA DVD-ROM SD-C2402>
at ata0-slave UDMA33
It truely would be nice if this was integrated into the kernel as I hate
having to patch it every time.
Cheers,
Benjamin
--
3D Research Associate +61 8 8302 3669
School of Computer and Information Science Room D1-07, Levels Campus
University of South Australia Mawson Lakes Blvd.
Benjamin.Close@cs.unisa.edu.au South Australia, 5095
F00D C83D 5F7E 5561 DF91 B74D E602 CAA3 4842 B5B4
--------------010603060100090607020708
Content-Type: text/plain;
name="cdromPatch.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="cdromPatch.diff"
--- ata-all.c Sun Jun 9 07:03:42 2002
+++ ata-all.c.new Fri May 31 09:17:55 2002
@@ -755,11 +755,13 @@
if (stat0 & ATA_S_BUSY) {
ATA_OUTB(ch->r_io, ATA_DRIVE, ATA_D_IBM | ATA_MASTER);
DELAY(10);
+ /* Check the registers in the order defined in the standard
+ some drives corrupt earlier registers if they are not read
+ before later registers */
+ lsb = ATA_INB(ch->r_io, ATA_CYL_LSB);
+ msb = ATA_INB(ch->r_io, ATA_CYL_MSB);
stat0 = ATA_INB(ch->r_io, ATA_STATUS);
if (!(stat0 & ATA_S_BUSY)) {
- /* check for ATAPI signature while its still there */
- lsb = ATA_INB(ch->r_io, ATA_CYL_LSB);
- msb = ATA_INB(ch->r_io, ATA_CYL_MSB);
if (bootverbose)
ata_printf(ch, ATA_MASTER, "ATAPI %02x %02x\n", lsb, msb);
if (lsb == ATAPI_MAGIC_LSB && msb == ATAPI_MAGIC_MSB)
@@ -769,11 +771,13 @@
if (stat1 & ATA_S_BUSY) {
ATA_OUTB(ch->r_io, ATA_DRIVE, ATA_D_IBM | ATA_SLAVE);
DELAY(10);
+ /* Check the registers in the order defined in the standard
+ some drives corrupt earlier registers if they are not read
+ before later registers */
+ lsb = ATA_INB(ch->r_io, ATA_CYL_LSB);
+ msb = ATA_INB(ch->r_io, ATA_CYL_MSB);
stat1 = ATA_INB(ch->r_io, ATA_STATUS);
if (!(stat1 & ATA_S_BUSY)) {
- /* check for ATAPI signature while its still there */
- lsb = ATA_INB(ch->r_io, ATA_CYL_LSB);
- msb = ATA_INB(ch->r_io, ATA_CYL_MSB);
if (bootverbose)
ata_printf(ch, ATA_SLAVE, "ATAPI %02x %02x\n", lsb, msb);
if (lsb == ATAPI_MAGIC_LSB && msb == ATAPI_MAGIC_MSB)
--------------010603060100090607020708--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3D3221A8.4010403>
