2003-09-03 23:18:50

by Brien B.

[permalink] [raw]
Subject: SATA probe delay on boot

Hi,

I have a Sil3112A SATA controller, which linux works OK
with. It supports RAID (up to 4 devices), but I'm using
BASE option -- only 1 hard drive.

My question is regarding a 15-20 second delay which
normally occurs every time I boot, unless I pass the
options ide3=0 - ide9=0 to fill up the device table. I
think I have to do this because if I do only ide3=0
(where the device would be), it uses ide4, and so on. I
have GRUB set up to do this automatically, but it's not
exactly adequate (,is it?). So I was wondering if
there're any other ways to get the same affect. Is or
could there be an option to simply disable the probing
of the one specific device/channel every time?

Thanks,

Brien


Subject: Re: SATA probe delay on boot


On Thursday 04 of September 2003 01:18, [email protected] wrote:
> Hi,

Hi,

> I have a Sil3112A SATA controller, which linux works OK
> with. It supports RAID (up to 4 devices), but I'm using
> BASE option -- only 1 hard drive.
>
> My question is regarding a 15-20 second delay which
> normally occurs every time I boot, unless I pass the

Please try attached patch and send dmesg output (with patch applied).
Patch is against current 2.6-bk tree, but should apply to any recent
2.4.x or 2.6.x kernels.

diff -puN drivers/ide/ide-probe.c~ide-siimage-wait drivers/ide/ide-probe.c
--- linux-2.6.0-test4-bk5/drivers/ide/ide-probe.c~ide-siimage-wait 2003-09-04 01:34:02.285489272 +0200
+++ linux-2.6.0-test4-bk5-root/drivers/ide/ide-probe.c 2003-09-04 01:47:58.145419248 +0200
@@ -56,6 +56,8 @@
#include <asm/uaccess.h>
#include <asm/io.h>

+#define DEBUG
+
/**
* generic_id - add a generic drive id
* @drive: drive to make an ID block for
@@ -345,7 +347,16 @@ static int actual_try_to_identify (ide_d
}
/* give drive a breather */
ide_delay_50ms();
- } while ((hwif->INB(hd_status)) & BUSY_STAT);
+ s = hwif->INB(hd_status);
+ if (s == 0xff) {
+#ifdef DEBUG
+ printk("%s: status == 0xff\n", drive->name);
+#endif
+ return 1;
+ }
+ if ((s & BUSY_STAT) == 0)
+ break;
+ } while (1);

/* wait for IRQ and DRQ_STAT */
ide_delay_50ms();

_

> options ide3=0 - ide9=0 to fill up the device table. I
> think I have to do this because if I do only ide3=0
> (where the device would be), it uses ide4, and so on. I
> have GRUB set up to do this automatically, but it's not
> exactly adequate (,is it?). So I was wondering if
> there're any other ways to get the same affect. Is or
> could there be an option to simply disable the probing
> of the one specific device/channel every time?

"ide3=noprobe" doesnt work?

--bartlomiej

2003-09-04 00:54:49

by Brien B.

[permalink] [raw]
Subject: Re: SATA probe delay on boot

Bartlomiej,

"ide3=noprobe" doesn't make a noticable difference, but
I'll tell what happens with the patch when I get home
and am able to try it

(just so you know it may be several hours before I'm
able to reply again)

Thanks much,

Brien

On Thu, 4 Sep 2003 01:53:07 +0200, Bartlomiej
Zolnierkiewicz wrote:

> On Thursday 04 of September 2003 01:18,
[email protected]
> wrote:
> > Hi,
>
> Hi,
>
> > I have a Sil3112A SATA controller, which linux works
> OK
> > with. It supports RAID (up to 4 devices), but I'm
> using
> > BASE option -- only 1 hard drive.
> >
> > My question is regarding a 15-20 second delay which
> > normally occurs every time I boot, unless I pass the
>
> Please try attached patch and send dmesg output (with
> patch applied).
> Patch is against current 2.6-bk tree, but should apply
> to any recent
> 2.4.x or 2.6.x kernels.
>
> diff -puN drivers/ide/ide-probe.c~ide-siimage-wait
> drivers/ide/ide-probe.c
> ---
>
linux-2.6.0-test4-bk5/drivers/ide/ide-probe.c~ide-siimage-wait 2003-09-04 01:34:02.285489272 +0200
> +++
>
linux-2.6.0-test4-bk5-root/drivers/ide/ide-probe.c 2003-09-04 01:47:58.145419248 +0200
> @@ -56,6 +56,8 @@
> #include <asm/uaccess.h>
> #include <asm/io.h>
>
> +#define DEBUG
> +
> /**
> * generic_id - add a generic drive id
> * @drive: drive to make an ID block for
> @@ -345,7 +347,16 @@ static int actual_try_to_identify
> (ide_d
> }
> /* give drive a breather */
> ide_delay_50ms();
> - } while ((hwif->INB(hd_status)) & BUSY_STAT);
> + s = hwif->INB(hd_status);
> + if (s == 0xff) {
> +#ifdef DEBUG
> + printk("%s: status == 0xff\n", drive->name);
> +#endif
> + return 1;
> + }
> + if ((s & BUSY_STAT) == 0)
> + break;
> + } while (1);
>
> /* wait for IRQ and DRQ_STAT */
> ide_delay_50ms();
>
> _
>
> > options ide3=0 - ide9=0 to fill up the device
table. I
> > think I have to do this because if I do only ide3=0
> > (where the device would be), it uses ide4, and so
on.
> I
> > have GRUB set up to do this automatically, but it's
> not
> > exactly adequate (,is it?). So I was wondering if
> > there're any other ways to get the same affect. Is
or
> > could there be an option to simply disable the
probing
> > of the one specific device/channel every time?
>
> "ide3=noprobe" doesnt work?
>
> --bartlomiej

Brien

2003-09-04 05:11:26

by Andre Hedrick

[permalink] [raw]
Subject: Re: SATA probe delay on boot


I will get around to adding in the rest of the secret sauce.
I has everything to do with determining the state of the PHY at boot.

Andre Hedrick
LAD Storage Consulting Group

On Wed, 3 Sep 2003, Brien wrote:

> Bartlomiej,
>
> "ide3=noprobe" doesn't make a noticable difference, but
> I'll tell what happens with the patch when I get home
> and am able to try it
>
> (just so you know it may be several hours before I'm
> able to reply again)
>
> Thanks much,
>
> Brien
>
> On Thu, 4 Sep 2003 01:53:07 +0200, Bartlomiej
> Zolnierkiewicz wrote:
>
> > On Thursday 04 of September 2003 01:18,
> [email protected]
> > wrote:
> > > Hi,
> >
> > Hi,
> >
> > > I have a Sil3112A SATA controller, which linux works
> > OK
> > > with. It supports RAID (up to 4 devices), but I'm
> > using
> > > BASE option -- only 1 hard drive.
> > >
> > > My question is regarding a 15-20 second delay which
> > > normally occurs every time I boot, unless I pass the
> >
> > Please try attached patch and send dmesg output (with
> > patch applied).
> > Patch is against current 2.6-bk tree, but should apply
> > to any recent
> > 2.4.x or 2.6.x kernels.
> >
> > diff -puN drivers/ide/ide-probe.c~ide-siimage-wait
> > drivers/ide/ide-probe.c
> > ---
> >
> linux-2.6.0-test4-bk5/drivers/ide/ide-probe.c~ide-siimage-wait 2003-09-04 01:34:02.285489272 +0200
> > +++
> >
> linux-2.6.0-test4-bk5-root/drivers/ide/ide-probe.c 2003-09-04 01:47:58.145419248 +0200
> > @@ -56,6 +56,8 @@
> > #include <asm/uaccess.h>
> > #include <asm/io.h>
> >
> > +#define DEBUG
> > +
> > /**
> > * generic_id - add a generic drive id
> > * @drive: drive to make an ID block for
> > @@ -345,7 +347,16 @@ static int actual_try_to_identify
> > (ide_d
> > }
> > /* give drive a breather */
> > ide_delay_50ms();
> > - } while ((hwif->INB(hd_status)) & BUSY_STAT);
> > + s = hwif->INB(hd_status);
> > + if (s == 0xff) {
> > +#ifdef DEBUG
> > + printk("%s: status == 0xff\n", drive->name);
> > +#endif
> > + return 1;
> > + }
> > + if ((s & BUSY_STAT) == 0)
> > + break;
> > + } while (1);
> >
> > /* wait for IRQ and DRQ_STAT */
> > ide_delay_50ms();
> >
> > _
> >
> > > options ide3=0 - ide9=0 to fill up the device
> table. I
> > > think I have to do this because if I do only ide3=0
> > > (where the device would be), it uses ide4, and so
> on.
> > I
> > > have GRUB set up to do this automatically, but it's
> > not
> > > exactly adequate (,is it?). So I was wondering if
> > > there're any other ways to get the same affect. Is
> or
> > > could there be an option to simply disable the
> probing
> > > of the one specific device/channel every time?
> >
> > "ide3=noprobe" doesnt work?
> >
> > --bartlomiej
>
> Brien
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

2003-09-04 11:04:41

by Brien B.

[permalink] [raw]
Subject: Re: SATA probe delay on boot

On Thu, 4 Sep 2003 01:53:07 +0200, Bartlomiej
Zolnierkiewicz wrote:

Bartlomiej,

I applied this patch on 2.6.0-test4-bk5 just now, and
this is the (I think relative(?) -- tell me if you want
something else) section of dmesg output:

SiI3112 Serial ATA: IDE controller at PCI slot
0000:00:10.0
SiI3112 Serial ATA: chipset revision 2
SiI3112 Serial ATA: 100% native mode on irq 11
ide2: MMIO-DMA at 0xf8807000-0xf8807007, BIOS
settings: hde:pio, hdf:pio
ide3: MMIO-DMA at 0xf8807008-0xf880700f, BIOS
settings: hdg:pio, hdh:pio
probing for hde: present=0, media=32, probetype=ATA
hde: WDC WD360GD-00FNA0, ATA DISK drive
probing for hdf: present=0, media=32, probetype=ATA
probing for hdf: present=0, media=32, probetype=ATAPI
ide2 at 0xf8807080-0xf8807087,0xf880708a on irq 11
probing for hdg: present=0, media=32, probetype=ATA
hdg: no response (status = 0xfe)
probing for hdh: present=0, media=32, probetype=ATA
probing for hdh: present=0, media=32, probetype=ATAPI
probing for hdg: present=0, media=32, probetype=ATA
probing for hdg: present=0, media=32, probetype=ATAPI
hdg: no response (status = 0xfe), resetting drive
hdg: no response (status = 0xfe)
probing for hdh: present=0, media=32, probetype=ATA
probing for hdh: present=0, media=32, probetype=ATAPI
probing for hdi: present=0, media=32, probetype=ATA
probing for hdi: present=0, media=32, probetype=ATAPI
probing for hdj: present=0, media=32, probetype=ATA
probing for hdj: present=0, media=32, probetype=ATAPI
probing for hdk: present=0, media=32, probetype=ATA
probing for hdk: present=0, media=32, probetype=ATAPI
probing for hdl: present=0, media=32, probetype=ATA
probing for hdl: present=0, media=32, probetype=ATAPI

It doesn't seem right. And it actually takes 2-3 times
as long now.

Brien

> On Thursday 04 of September 2003 01:18,
[email protected]
> wrote:
> > Hi,
>
> Hi,
>
> > I have a Sil3112A SATA controller, which linux works
> OK
> > with. It supports RAID (up to 4 devices), but I'm
> using
> > BASE option -- only 1 hard drive.
> >
> > My question is regarding a 15-20 second delay which
> > normally occurs every time I boot, unless I pass the
>
> Please try attached patch and send dmesg output (with
> patch applied).
> Patch is against current 2.6-bk tree, but should apply
> to any recent
> 2.4.x or 2.6.x kernels.
>
> diff -puN drivers/ide/ide-probe.c~ide-siimage-wait
> drivers/ide/ide-probe.c
> ---
>
linux-2.6.0-test4-bk5/drivers/ide/ide-probe.c~ide-siimage-wait 2003-09-04
01:34:02.285489272 +0200
> +++
>
linux-2.6.0-test4-bk5-root/drivers/ide/ide-probe.c 2003-09-04 01:47:58.145419248
+0200
> @@ -56,6 +56,8 @@
> #include <asm/uaccess.h>
> #include <asm/io.h>
>
> +#define DEBUG
> +
> /**
> * generic_id - add a generic drive id
> * @drive: drive to make an ID block for
> @@ -345,7 +347,16 @@ static int actual_try_to_identify
> (ide_d
> }
> /* give drive a breather */
> ide_delay_50ms();
> - } while ((hwif->INB(hd_status)) & BUSY_STAT);
> + s = hwif->INB(hd_status);
> + if (s == 0xff) {
> +#ifdef DEBUG
> + printk("%s: status == 0xff\n", drive->name);
> +#endif
> + return 1;
> + }
> + if ((s & BUSY_STAT) == 0)
> + break;
> + } while (1);
>
> /* wait for IRQ and DRQ_STAT */
> ide_delay_50ms();
>
> _
>
> > options ide3=0 - ide9=0 to fill up the device
table. I
> > think I have to do this because if I do only ide3=0
> > (where the device would be), it uses ide4, and so
on.
> I
> > have GRUB set up to do this automatically, but it's
> not
> > exactly adequate (,is it?). So I was wondering if
> > there're any other ways to get the same affect. Is
or
> > could there be an option to simply disable the
probing
> > of the one specific device/channel every time?
>
> "ide3=noprobe" doesnt work?
>
> --bartlomiej
>
> -

Brien