Re: IBM Deskstar IDE 25gb not working.

Guest section DW (dwguest@win.tue.nl)
Sat, 11 Sep 1999 02:15:19 +0200 (MET DST)


From: Okke Timm <okke@komtel.net>

Magnus Ndslund(b) wrote:
> I have an IBM deskstar IDE 25gb HD.
> I get nothing but trouble when trying to install it.
> I should report in hdparm (CHS) 16383,16,63 but i only get
> 4096,16,63 ~= 2gb. When i force the 16383,16,63 setup (which
> the label states) i get

I have an "IBM-DPTA-353750", it reports CHS=7144/16/63. I found no BIOS that
would recognize this drive, they all hang. Only removing the drive from the
BIOS works.

Yes, but this drive is much larger than the 25 GB disk that Magnus has.
There are no problems with 25 GB disks, at least, I have never seen them,
but the present kernels do not handle disks over 33.8 GB (because the number
of cylinders overflows a short). See the large disk howto. I posted a patch
that fixes some of the associated problems a week or so ago.

The current LBA-detection assumes that all drives report 16383,16,63
physically, the Desktar definitly does not do so.

I don't believe you. Can you back up this claim with hdparm -I output?
(What generally happens is that the disk reports 16383,16,63 as the standards
say it should [unless you put the `15-head' jumper on, and force 16383,15,63
or so] but that the BIOS reports something else because you selected some form
of translation. Most BIOSes hang for such large disks.
And if you find interesting ID values, is this then because you used the
jumper to limit the drive to 33.8 GB ?

Without LBA, this behaviour is correct.

Try this patch against 2.2.12:

--- drivers/block/ide-disk.c.orig Thu Mar 11 02:49:43 1999
+++ drivers/block/ide-disk.c Fri Sep 10 17:10:39 1999
@@ -96,9 +96,15 @@
* very large drives (8GB+) may lie about the number of cylinders
* This is a split test for drives 8 Gig and Bigger only.
*/
- if ((id->lba_capacity >= 16514064) && (id->cyls == 0x3fff) &&
- (id->heads == 16) && (id->sectors == 63)) {
- id->cyls = lba_sects / (16 * 63); /* correct cyls */
+ if ((id->lba_capacity >= 16514064) && (id->heads == 16) &&
+ (id->sectors == 63)) {
+ if (id->cyls == 0x3fff) {
+ id->cyls = lba_sects / (16 * 63); /* correct cyls */
+ } else if (id->lba_capacity <= 132118560) {
+ /* even larger drives may report wrong head count */
+ id->heads = 32; /* correct bogus heads */
+ id->cyls = lba_sects / (32 * 63);
+ }
return 1; /* lba_capacity is our only option */
}
/* perform a rough sanity check on lba_sects: within 10% is "okay" */

With this LBA-detection, you can change the geometry with fdisk to something
with 32 head and get LBA. I get the geometry 38340/32/63.

Yes, I know, this patch is not perfect. But it works for me.

It is not perfect. You knew.

Andries

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/