2004-03-27 02:28:15

by Jeff Garzik

[permalink] [raw]
Subject: [sata] libata update

[email protected], 2004-03-26 20:40:58-05:00, [email protected]
[libata sata_promise] better locking and error handling

* Prefer spin_lock() to spin_lock_irq() in interrupt handler
* Reset each port, before probing the SATA phy
* Reset port when every time an error occurs

[email protected], 2004-03-26 18:02:34-05:00, [email protected]
[libata] more documentation

libata-scsi.c should now be fully documented.

[email protected], 2004-03-26 04:04:17-05:00, [email protected]
[libata] more cmd queue path cleanups

Final part in tonight's series of changes to clean up the
command queueing path.

The simulate-ATA-over-SCSI code is moved to a new function,
ata_scsi_simulate(), and ata_scsi_rw_queue() is renamed to
ata_scsi_translate(). With the SCSI CDB debugging dump function
also moved into its own function, the queue-command path is now
nice, compact, and readable.

[email protected], 2004-03-26 03:32:10-05:00, [email protected]
[libata] more command queue path cleanup

A new helper ata_scsi_xlat_possible(), and the command queue path
gets a bit more compact.

As side effects we kill the 'cmd_size' argument from two functions,
and mark ata_scsi_rw_queue() as static, as its only needed
in libata-scsi.c.

[email protected], 2004-03-26 03:20:47-05:00, [email protected]
[libata] clean up command queue/submit path a bit

This change is part of a series that compartmentalizes and consolidates
ATA taskfile submission.

Here, the device-location-related checks are moved out of the ->queuecommand()
hook and into an inline helper function.

[email protected], 2004-03-26 01:13:20-05:00, [email protected]
[libata sata_promise] minor initialization updates

* remove incorrect PATA port check
* enable undocumented bit 13 in flash control register,
because the Promise driver does so.
* wait 10 ms after setting TBG mode, for the same reason.

[email protected], 2004-03-25 17:23:41-05:00, [email protected]
[libata] documentation, and a couple tiny cleanups

Add more per-function source code documentation. Some of this stuff
is esoteric ATA crapola, and definitely needed to be documented.

Also, two tiny cleanups spotted while documenting:
* kill unused arg from internal function ata_dev_try_classify()
* kill unused return value from ata_dev_id_string()

[email protected], 2004-03-25 14:40:17-05:00, [email protected]
[libata] use scsi host lock

In 2.4 we release io_request_lock and take our own per-host lock,
in the ->queuecommand() hook. In 2.6, the SCSI layer provides a
useful to simply use the lock we already have, via scsi_assign_lock().

[email protected], 2004-03-25 14:36:59-05:00, [email protected]
[libata] reduce diff with 2.4 libata backport

[email protected], 2004-03-25 14:36:27-05:00, [email protected]
[libata] pci_dma_error() was renamed to pci_dma_mapping_error()

[email protected], 2004-03-25 01:57:34-05:00, [email protected]
[ata] move some generic stuff linux/libata.h -> linux/ata.h

struct ata_taskfile is generic, and so far its flags (ATA_TFLAG_xxx)

Also, move ATA_PROT_xxx definitions into their own enum.

[email protected], 2004-03-25 01:44:08-05:00, [email protected]
[libata] consolidate data transfer mode handling

The various ways you can send data to/from your ATA device is
known as the ATA taskfile protocol: PIO single sector, PIO
multiple sector, DMA, DMA TCQ, DMA NCQ, ...

Prior to this change, the data direction (read/write) was encoded
implicitly into the ATA_PROT_xxx value itself. This increased
complexity in some areas, and inhibited flexibility in others.

This change separates data direction from taskfile protocol, and also
moves the data direction flag (ATA_QCFLAG_WRITE) down to a lower
level (ATA_TFLAG_WRITE).

[email protected], 2004-03-25 00:53:07-05:00, [email protected]
[libata] set up some of the per-command data beforehand

The data transfer mode and the set of read/write commands we generate
during normal operation remains constant until we change the data
transfer mode.

This removes a series of branches in the read/write fast path,
and in general cleans up that particular spot of code.

[email protected], 2004-03-24 23:50:34-05:00, [email protected]
[libata sata_promise] check for PATA port on PDC20375

We don't handle it yet, but this prints out a message in its presence,
permitting verification of the check and informing users why their
PATA device is not recognized.

[email protected], 2004-03-23 12:35:54-05:00, [email protected]
[libata ata_piix] fix combined mode device detection

SATA port detection should not have assumed that a single SATA port
mapped to a single struct ata_port. Combined mode breaks this
assumption.

Change code to simply detect if one or more devices are present
on the struct ata_port, which is what we really wanted to do.

[email protected], 2004-03-23 11:52:00-05:00, [email protected]
[libata ata_piix] clean up combined mode handling

[email protected], 2004-03-23 11:14:06-05:00, [email protected]
[libata ata_piix] do not disable SATA port on module unload

We were disabling the SATA port, but not enabling it on module load.
So, modprobe+rmmod+modprobe would fail.

[email protected], 2004-03-23 09:20:14-05:00, [email protected]
[libata] use kmap_atomic() rather than kmap()

[email protected], 2004-03-22 23:40:01-05:00, [email protected]
[libata] use new pci_dma_error() to check for pci_map_single() failure

[email protected], 2004-03-21 12:15:16-05:00, [email protected]
[libata sata_sis] minor cleanups

[email protected], 2004-03-21 11:55:35-05:00, [email protected]
[libata] Add driver for SiS 964/180 SATA.


Attachments:
changelog.txt (1.12 kB)
changelog-long.txt (5.75 kB)
Download all attachments

2004-03-27 22:08:01

by Henrik Gustafsson

[permalink] [raw]
Subject: Re: [sata] libata update

(sorry for screwing with the thread, I was not subscribed when I read the
original post)

The patch seems to work just fine. It's been running for six hours now
with varying amounts of load and no catastrophes has occurred so far.

Only things are these lines saying 'abnormal status' (which has been there
all along). I assume the codes mean 'device not present' (which would be
correct, at least in my case) or something similar, but I don't know for
sure so I leave it to someone better informed to patch :)

(also, there is the 'Unknown device'-thing in my lspci, but that's neither
related to libata nor is it a 'real' problem)

Using a Promise FastTrack S150 SX4
Relevant piece of my dmesg, lspci follows (just let me know if you need
the rest)

// Henrik Gustafsson

libata version 1.02 loaded.
sata_promise version 0.92
ata1: SATA max UDMA/133 cmd 0xE29D7200 ctl 0xE29D7238 bmdma 0x0 irq 10
ata2: SATA max UDMA/133 cmd 0xE29D7280 ctl 0xE29D72B8 bmdma 0x0 irq 10
ata3: SATA max UDMA/133 cmd 0xE29D7300 ctl 0xE29D7338 bmdma 0x0 irq 10
ata4: SATA max UDMA/133 cmd 0xE29D7380 ctl 0xE29D73B8 bmdma 0x0 irq 10
ata1: dev 0 cfg 49:2f00 82:7c6b 83:7f09 84:4003 85:7c69 86:3e01 87:4003
88:207f
ata1: dev 0 ATA, max UDMA/133, 490234752 sectors (lba48)
ata1: dev 0 configured for UDMA/133
scsi0 : sata_promise
ATA: abnormal status 0x7F on port 0xE29D729C
ata2: thread exiting
scsi1 : sata_promise
ATA: abnormal status 0x7F on port 0xE29D731C
ata3: thread exiting
scsi2 : sata_promise
ATA: abnormal status 0x7F on port 0xE29D739C
ata4: thread exiting
scsi3 : sata_promise
Vendor: ATA Model: Maxtor 7Y250M0 Rev: 1.02
Type: Direct-Access ANSI SCSI revision: 05
SCSI device sda: 490234752 512-byte hdwr sectors (251000 MB)
SCSI device sda: drive cache: write through
sda: sda1
Attached scsi disk sda at scsi0, channel 0, id 0, lun 0

00:0b.0 RAID bus controller: Promise Technology, Inc.: Unknown device 6622
(rev 01)
Subsystem: Promise Technology, Inc.: Unknown device 6622
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 96 (1500ns min, 4500ns max), cache line size 08
Interrupt: pin A routed to IRQ 10
Region 0: I/O ports at c400 [size=256]
Region 1: I/O ports at c800 [size=256]
Region 2: I/O ports at cc00 [size=256]
Region 3: Memory at da000000 (32-bit, non-prefetchable) [size=1M]
Region 4: Memory at da140000 (32-bit, non-prefetchable) [size=32K]
Expansion ROM at <unassigned> [disabled] [size=64K]
Capabilities: [60] Power Management version 1
Flags: PMEClk- DSI+ D1+ D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-

2004-03-27 22:20:30

by Jeff Garzik

[permalink] [raw]
Subject: Re: [sata] libata update

Henrik Gustafsson wrote:
> (sorry for screwing with the thread, I was not subscribed when I read
> the original post)
>
> The patch seems to work just fine. It's been running for six hours now
> with varying amounts of load and no catastrophes has occurred so far.
>
> Only things are these lines saying 'abnormal status' (which has been
> there all along). I assume the codes mean 'device not present' (which
> would be correct, at least in my case) or something similar, but I don't
> know for sure so I leave it to someone better informed to patch :)
>
> (also, there is the 'Unknown device'-thing in my lspci, but that's
> neither related to libata nor is it a 'real' problem)
>
> Using a Promise FastTrack S150 SX4
> Relevant piece of my dmesg, lspci follows (just let me know if you need
> the rest)

Thanks for testing.

Yes, the SX4, unlike the TX2/TX4, does not directly give me access to
the SATA ports, so I cannot test directly for device presence. Instead
I let the normal error handling routines notice the behavior. I need to
fix that up, but for now that's an annoying but harmless message.

Jeff




2004-03-30 23:04:58

by Petr Sebor

[permalink] [raw]
Subject: Re: [sata] libata update

Hi Jeff,

I have upgraded from 2.6.3 to 2.6.5-rc3 and can't see the secondary
sata drive anymore...

I am seeing this:
-------------------------------------------------------------------
libata version 1.02 loaded.
sata_via version 0.20
sata_via(0000:00:0f.0): routed to hard irq line 11
ata1: SATA max UDMA/133 cmd 0xC400 ctl 0xC802 bmdma 0xD400 irq 20
ata2: SATA max UDMA/133 cmd 0xCC00 ctl 0xD002 bmdma 0xD408 irq 20
ata1: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3c01 87:4003
88:203f
ata1: dev 0 ATA, max UDMA/100, 488397168 sectors (lba48)
ata1: dev 0 configured for UDMA/100
scsi0 : sata_via
ata2: no device found (phy stat 00000000)
ata2: thread exiting
scsi1 : sata_via
Using anticipatory io scheduler
Vendor: ATA Model: WDC WD2500JD-00F Rev: 1.02
Type: Direct-Access ANSI SCSI revision: 05
SCSI device sda: 488397168 512-byte hdwr sectors (250059 MB)
SCSI device sda: drive cache: write through
sda: sda1 sda2
Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
--------------------------------------------------------------------
instead of this:
libata version 1.00 loaded.
sata_via version 0.11
ata1: SATA max UDMA/133 cmd 0xC400 ctl 0xC802 bmdma 0xD400 irq 20
ata2: SATA max UDMA/133 cmd 0xCC00 ctl 0xD002 bmdma 0xD408 irq 20
ata1: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3c01 87:4003
88:203f
ata1: dev 0 ATA, max UDMA/100, 488397168 sectors (lba48)
ata1: dev 0 configured for UDMA/100
scsi0 : sata_via
ata2: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3c01 87:4003
88:407f
ata2: dev 0 ATA, max UDMA/133, 72303840 sectors (lba48)
ata2: dev 0 configured for UDMA/133
scsi1 : sata_via
Using anticipatory io scheduler
Vendor: ATA Model: WDC WD2500JD-00F Rev: 1.00
Type: Direct-Access ANSI SCSI revision: 05
Vendor: ATA Model: WDC WD360GD-00FN Rev: 1.00
Type: Direct-Access ANSI SCSI revision: 05
SCSI device sda: 488397168 512-byte hdwr sectors (250059 MB)
SCSI device sda: drive cache: write through
sda: sda1 sda2
Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
SCSI device sdb: 72303840 512-byte hdwr sectors (37020 MB)
SCSI device sdb: drive cache: write through
sdb: sdb1
Attached scsi disk sdb at scsi1, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
Attached scsi generic sg1 at scsi1, channel 0, id 0, lun 0, type 0

Regards,
Petr


Attachments:
signature.asc (254.00 B)
OpenPGP digital signature

2004-03-30 23:14:33

by Jeff Garzik

[permalink] [raw]
Subject: Re: [sata] libata update

===== drivers/scsi/sata_via.c 1.10 vs edited =====
--- 1.10/drivers/scsi/sata_via.c Thu Mar 25 07:30:08 2004
+++ edited/drivers/scsi/sata_via.c Tue Mar 30 18:13:16 2004
@@ -56,6 +56,7 @@
static int svia_init_one (struct pci_dev *pdev, const struct pci_device_id *ent);
static u32 svia_scr_read (struct ata_port *ap, unsigned int sc_reg);
static void svia_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
+static void svia_phy_reset(struct ata_port *ap);

static struct pci_device_id svia_pci_tbl[] = {
{ 0x1106, 0x3149, PCI_ANY_ID, PCI_ANY_ID, 0, 0, via_sata },
@@ -96,7 +97,7 @@
.check_status = ata_check_status_pio,
.exec_command = ata_exec_command_pio,

- .phy_reset = sata_phy_reset,
+ .phy_reset = svia_phy_reset,

.bmdma_start = ata_bmdma_start_pio,
.fill_sg = ata_fill_sg,
@@ -115,6 +116,13 @@
MODULE_DESCRIPTION("SCSI low-level driver for VIA SATA controllers");
MODULE_LICENSE("GPL");
MODULE_DEVICE_TABLE(pci, svia_pci_tbl);
+
+static void svia_phy_reset(struct ata_port *ap)
+{
+ ap->cbl = ATA_CBL_SATA;
+ ata_port_probe(ap);
+ ata_bus_reset(ap);
+}

static u32 svia_scr_read (struct ata_port *ap, unsigned int sc_reg)
{


Attachments:
patch (1.16 kB)

2004-03-30 23:17:10

by Jeff Garzik

[permalink] [raw]
Subject: Re: [sata] libata update

Petr Sebor wrote:
> Hi Jeff,
>
> I have upgraded from 2.6.3 to 2.6.5-rc3 and can't see the secondary
> sata drive anymore...
>
> I am seeing this:
> -------------------------------------------------------------------
> libata version 1.02 loaded.
> sata_via version 0.20
> sata_via(0000:00:0f.0): routed to hard irq line 11
> ata1: SATA max UDMA/133 cmd 0xC400 ctl 0xC802 bmdma 0xD400 irq 20
> ata2: SATA max UDMA/133 cmd 0xCC00 ctl 0xD002 bmdma 0xD408 irq 20
> ata1: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3c01 87:4003
> 88:203f
> ata1: dev 0 ATA, max UDMA/100, 488397168 sectors (lba48)
> ata1: dev 0 configured for UDMA/100
> scsi0 : sata_via
> ata2: no device found (phy stat 00000000)
> ata2: thread exiting
> scsi1 : sata_via

oh, and are both disks SATA?

Or is the 37G drive a PATA drive on a PATA->SATA adapter (a.k.a. bridge)?

Do you have any special settings like BIOS RAID turned on, that might
interfere with things?

Jeff



2004-03-30 23:26:56

by Petr Sebor

[permalink] [raw]
Subject: Re: [sata] libata update

Jeff Garzik wrote:

> oh, and are both disks SATA?

Both drives are SATA

> Or is the 37G drive a PATA drive on a PATA->SATA adapter (a.k.a. bridge)?

Nope.

> Do you have any special settings like BIOS RAID turned on, that might
> interfere with things?

This thing is turned off. (at least I hope so... will check)

I'll try the patch you sent as soon as I reach the machine.

Thanks!

Best regards,
Petr


Attachments:
signature.asc (254.00 B)
OpenPGP digital signature
Subject: Re: [sata] libata update

On Wednesday 31 of March 2004 01:16, Jeff Garzik wrote:
> Petr Sebor wrote:
> > Hi Jeff,
> >
> > I have upgraded from 2.6.3 to 2.6.5-rc3 and can't see the secondary
> > sata drive anymore...
> >
> > I am seeing this:
> > -------------------------------------------------------------------
> > libata version 1.02 loaded.
> > sata_via version 0.20
> > sata_via(0000:00:0f.0): routed to hard irq line 11
> > ata1: SATA max UDMA/133 cmd 0xC400 ctl 0xC802 bmdma 0xD400 irq 20
> > ata2: SATA max UDMA/133 cmd 0xCC00 ctl 0xD002 bmdma 0xD408 irq 20
> > ata1: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3c01 87:4003
> > 88:203f
> > ata1: dev 0 ATA, max UDMA/100, 488397168 sectors (lba48)
> > ata1: dev 0 configured for UDMA/100
> > scsi0 : sata_via
> > ata2: no device found (phy stat 00000000)
> > ata2: thread exiting
> > scsi1 : sata_via
>
> oh, and are both disks SATA?
>
> Or is the 37G drive a PATA drive on a PATA->SATA adapter (a.k.a. bridge)?

Vendor: ATA Model: WDC WD360GD-00FN Rev: 1.00
Type: Direct-Access ANSI SCSI revision: 05

WD Raptor electronics includes PATA->SATA bridge.

Bartlomiej

2004-03-30 23:47:32

by Jeff Garzik

[permalink] [raw]
Subject: Re: [sata] libata update

Bartlomiej Zolnierkiewicz wrote:
> On Wednesday 31 of March 2004 01:16, Jeff Garzik wrote:
>
>>Petr Sebor wrote:
>>
>>>Hi Jeff,
>>>
>>>I have upgraded from 2.6.3 to 2.6.5-rc3 and can't see the secondary
>>>sata drive anymore...
>>>
>>>I am seeing this:
>>>-------------------------------------------------------------------
>>>libata version 1.02 loaded.
>>>sata_via version 0.20
>>>sata_via(0000:00:0f.0): routed to hard irq line 11
>>>ata1: SATA max UDMA/133 cmd 0xC400 ctl 0xC802 bmdma 0xD400 irq 20
>>>ata2: SATA max UDMA/133 cmd 0xCC00 ctl 0xD002 bmdma 0xD408 irq 20
>>>ata1: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3c01 87:4003
>>>88:203f
>>>ata1: dev 0 ATA, max UDMA/100, 488397168 sectors (lba48)
>>>ata1: dev 0 configured for UDMA/100
>>>scsi0 : sata_via
>>>ata2: no device found (phy stat 00000000)
>>>ata2: thread exiting
>>>scsi1 : sata_via
>>
>>oh, and are both disks SATA?
>>
>>Or is the 37G drive a PATA drive on a PATA->SATA adapter (a.k.a. bridge)?
>
>
> Vendor: ATA Model: WDC WD360GD-00FN Rev: 1.00
> Type: Direct-Access ANSI SCSI revision: 05
>
> WD Raptor electronics includes PATA->SATA bridge.

Yes, a lot of drives do.

I meant outside the drive, an adapter/bridge the user plugs into the
device, that allows it to pretend it is a SATA device.

Jeff




Subject: Re: [sata] libata update

On Wednesday 31 of March 2004 01:47, Jeff Garzik wrote:
> Bartlomiej Zolnierkiewicz wrote:
> > On Wednesday 31 of March 2004 01:16, Jeff Garzik wrote:
> >>Petr Sebor wrote:
> >>>Hi Jeff,
> >>>
> >>>I have upgraded from 2.6.3 to 2.6.5-rc3 and can't see the secondary
> >>>sata drive anymore...
> >>>
> >>>I am seeing this:
> >>>-------------------------------------------------------------------
> >>>libata version 1.02 loaded.
> >>>sata_via version 0.20
> >>>sata_via(0000:00:0f.0): routed to hard irq line 11
> >>>ata1: SATA max UDMA/133 cmd 0xC400 ctl 0xC802 bmdma 0xD400 irq 20
> >>>ata2: SATA max UDMA/133 cmd 0xCC00 ctl 0xD002 bmdma 0xD408 irq 20
> >>>ata1: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3c01 87:4003
> >>>88:203f
> >>>ata1: dev 0 ATA, max UDMA/100, 488397168 sectors (lba48)
> >>>ata1: dev 0 configured for UDMA/100
> >>>scsi0 : sata_via
> >>>ata2: no device found (phy stat 00000000)
> >>>ata2: thread exiting
> >>>scsi1 : sata_via
> >>
> >>oh, and are both disks SATA?
> >>
> >>Or is the 37G drive a PATA drive on a PATA->SATA adapter (a.k.a. bridge)?
> >
> > Vendor: ATA Model: WDC WD360GD-00FN Rev: 1.00
> > Type: Direct-Access ANSI SCSI revision: 05
> >
> > WD Raptor electronics includes PATA->SATA bridge.
>
> Yes, a lot of drives do.
>
> I meant outside the drive, an adapter/bridge the user plugs into the
> device, that allows it to pretend it is a SATA device.

Is there any difference (except cabling and power) ?

2004-03-31 01:45:26

by Jarno Paananen

[permalink] [raw]
Subject: Re: [sata] libata update

Jeff Garzik <[email protected]> writes:

> Petr Sebor wrote:
>> Hi Jeff,
>> I have upgraded from 2.6.3 to 2.6.5-rc3 and can't see the secondary
>> sata drive anymore...
>
> Does this patch fix it?

I'm using the 2.4 kernel version (would be using 2.6 if there was
support for IT8212 ide-"raid" controller, hint hint Bart :) and had
the same problem. This fixed it:

libata version 1.02 loaded.
sata_via version 0.20
sata_via(00:0f.0): routed to hard irq line 5
ata1: SATA max UDMA/133 cmd 0xB400 ctl 0xB802 bmdma 0xC400 irq 20
ata2: SATA max UDMA/133 cmd 0xBC00 ctl 0xC002 bmdma 0xC408 irq 20
ata1: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3e01
87:4003 88:407f
ata1: dev 0 ATA, max UDMA/133, 72303840 sectors (lba48)
ata1: dev 0 configured for UDMA/133
ata2: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3e01
87:4003 88:203f
ata2: dev 0 ATA, max UDMA/100, 488397168 sectors (lba48)
ata2: dev 0 configured for UDMA/100
scsi1 : sata_via
scsi2 : sata_via
Vendor: ATA Model: WDC WD360GD-00FN Rev: 1.02
Type: Direct-Access ANSI SCSI revision: 05
Vendor: ATA Model: WDC WD2500JD-22F Rev: 1.02
Type: Direct-Access ANSI SCSI revision: 05
Attached scsi disk sda at scsi0, channel 0, id 3, lun 0
Attached scsi disk sdb at scsi1, channel 0, id 0, lun 0
Attached scsi disk sdc at scsi2, channel 0, id 0, lun 0
SCSI device sda: 71833096 512-byte hdwr sectors (36779 MB)
sda: sda1 sda2 sda3 < sda5 sda6 sda7 >
SCSI device sdb: 72303840 512-byte hdwr sectors (37020 MB)
sdb: sdb1
SCSI device sdc: 488397168 512-byte hdwr sectors (250059 MB)
sdc: sdc1 < sdc5 sdc6 >

(sda is a real SCSI disk)

Thanks,

// Jarno

2004-03-31 01:51:11

by Jeff Garzik

[permalink] [raw]
Subject: Re: [sata] libata update

Jarno Paananen wrote:
> Jeff Garzik <[email protected]> writes:
>
>
>>Petr Sebor wrote:
>>
>>>Hi Jeff,
>>>I have upgraded from 2.6.3 to 2.6.5-rc3 and can't see the secondary
>>>sata drive anymore...
>>
>>Does this patch fix it?
>
>
> I'm using the 2.4 kernel version (would be using 2.6 if there was
> support for IT8212 ide-"raid" controller, hint hint Bart :) and had
> the same problem. This fixed it:


Sorry to be dumb, but just to clear... you had the same problem, and
the patch I posted fixed it?

Jeff



2004-03-31 01:55:18

by Jarno Paananen

[permalink] [raw]
Subject: Re: [sata] libata update

Jeff Garzik <[email protected]> writes:

> Jarno Paananen wrote:
>> Jeff Garzik <[email protected]> writes:
>>
>>>Petr Sebor wrote:
>>>
>>>>Hi Jeff,
>>>>I have upgraded from 2.6.3 to 2.6.5-rc3 and can't see the secondary
>>>>sata drive anymore...
>>>
>>>Does this patch fix it?
>> I'm using the 2.4 kernel version (would be using 2.6 if there was
>> support for IT8212 ide-"raid" controller, hint hint Bart :) and had
>> the same problem. This fixed it:
>
>
> Sorry to be dumb, but just to clear... you had the same problem, and
> the patch I posted fixed it?

Yes, exactly, sorry for the confusion.

// Jarno

2004-03-31 02:34:00

by Jeff Garzik

[permalink] [raw]
Subject: Re: [sata] libata update

Bartlomiej Zolnierkiewicz wrote:
> On Wednesday 31 of March 2004 01:47, Jeff Garzik wrote:
>
>>Bartlomiej Zolnierkiewicz wrote:
>>
>>>On Wednesday 31 of March 2004 01:16, Jeff Garzik wrote:
>>>
>>>>Petr Sebor wrote:
>>>>
>>>>>Hi Jeff,
>>>>>
>>>>>I have upgraded from 2.6.3 to 2.6.5-rc3 and can't see the secondary
>>>>>sata drive anymore...
>>>>>
>>>>>I am seeing this:
>>>>>-------------------------------------------------------------------
>>>>>libata version 1.02 loaded.
>>>>>sata_via version 0.20
>>>>>sata_via(0000:00:0f.0): routed to hard irq line 11
>>>>>ata1: SATA max UDMA/133 cmd 0xC400 ctl 0xC802 bmdma 0xD400 irq 20
>>>>>ata2: SATA max UDMA/133 cmd 0xCC00 ctl 0xD002 bmdma 0xD408 irq 20
>>>>>ata1: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3c01 87:4003
>>>>>88:203f
>>>>>ata1: dev 0 ATA, max UDMA/100, 488397168 sectors (lba48)
>>>>>ata1: dev 0 configured for UDMA/100
>>>>>scsi0 : sata_via
>>>>>ata2: no device found (phy stat 00000000)
>>>>>ata2: thread exiting
>>>>>scsi1 : sata_via
>>>>
>>>>oh, and are both disks SATA?
>>>>
>>>>Or is the 37G drive a PATA drive on a PATA->SATA adapter (a.k.a. bridge)?
>>>
>>> Vendor: ATA Model: WDC WD360GD-00FN Rev: 1.00
>>> Type: Direct-Access ANSI SCSI revision: 05
>>>
>>>WD Raptor electronics includes PATA->SATA bridge.
>>
>>Yes, a lot of drives do.
>>
>>I meant outside the drive, an adapter/bridge the user plugs into the
>>device, that allows it to pretend it is a SATA device.
>
>
> Is there any difference (except cabling and power) ?

Most drives use the well-known Marvell phy chip, while adapters are a
bit more random...

Jeff




2004-03-31 08:24:39

by Jeff Garzik

[permalink] [raw]
Subject: [PATCH] Re: [sata] libata update

===== drivers/scsi/sata_via.c 1.10 vs edited =====
--- 1.10/drivers/scsi/sata_via.c Thu Mar 25 07:30:08 2004
+++ edited/drivers/scsi/sata_via.c Wed Mar 31 03:20:50 2004
@@ -39,9 +39,10 @@
enum {
via_sata = 0,

- SATA_CHAN_ENAB = 0x40,
- SATA_INT_GATE = 0x41,
- SATA_NATIVE_MODE = 0x42,
+ SATA_CHAN_ENAB = 0x40, /* SATA channel enable */
+ SATA_INT_GATE = 0x41, /* SATA interrupt gating */
+ SATA_NATIVE_MODE = 0x42, /* Native mode enable */
+ SATA_PATA_SHARING = 0x49, /* PATA/SATA sharing func ctrl */

PORT0 = (1 << 1),
PORT1 = (1 << 0),
@@ -51,6 +52,9 @@
INT_GATE_ALL = PORT0 | PORT1,

NATIVE_MODE_ALL = (1 << 7) | (1 << 6) | (1 << 5) | (1 << 4),
+
+ SATA_EXT_PHY = (1 << 6), /* 0==use PATA, 1==ext phy */
+ SATA_2DEV = (1 << 5), /* SATA is master/slave */
};

static int svia_init_one (struct pci_dev *pdev, const struct pci_device_id *ent);
@@ -136,13 +140,7 @@

static unsigned long svia_scr_addr(unsigned long addr, unsigned int port)
{
- if (port >= 4)
- return 0; /* invalid port */
-
- addr &= ~((1 << 7) | (1 << 6));
- addr |= ((unsigned long)port << 6);
-
- return addr;
+ return addr + (port * 128);
}

/**
@@ -175,6 +173,13 @@
if (rc)
goto err_out;

+ pci_read_config_byte(pdev, SATA_PATA_SHARING, &tmp8);
+ if ((tmp8 & (SATA_EXT_PHY | SATA_2DEV)) != SATA_EXT_PHY) {
+ printk(KERN_ERR DRV_NAME "(%s): PATA sharing not supported (0x%x)\n",
+ pci_name(pdev), (int) tmp8);
+ rc = -EIO;
+ goto err_out_regions;
+ }

for (i = 0; i < ARRAY_SIZE(svia_bar_sizes); i++)
if ((pci_resource_start(pdev, i) == 0) ||


Attachments:
patch (1.54 kB)

2004-03-31 11:50:43

by Petr Sebor

[permalink] [raw]
Subject: Re: [PATCH] Re: [sata] libata update

Jeff Garzik wrote:

> Here's a potentially better patch, if you guys (or anyone else) would
> be willing to give it a quick test...?
>
> Jeff

Not good at all ...

(eye-copied from the console @ boot time)

2.6.5-rc3 + this patch:

sata_via (0000:00:0f.0): PATA sharing not supported (0x2)
via_sata: probe of (0000:00:0f.0) failed with error -5

with following panic

unable to mount root...

wrt sata_via, no more messages are written...

Regards,
Petr


Attachments:
signature.asc (254.00 B)
OpenPGP digital signature

2004-03-31 16:46:06

by Jarno Paananen

[permalink] [raw]
Subject: Re: [PATCH] Re: [sata] libata update

Petr Sebor <[email protected]> writes:

> Jeff Garzik wrote:
>
>> Here's a potentially better patch, if you guys (or anyone else)
>> would be willing to give it a quick test...?
>>
>> Jeff
>
> Not good at all ...
>
> (eye-copied from the console @ boot time)
>
> 2.6.5-rc3 + this patch:
>
> sata_via (0000:00:0f.0): PATA sharing not supported (0x2)
> via_sata: probe of (0000:00:0f.0) failed with error -5
>
> with following panic
>
> unable to mount root...
>
> wrt sata_via, no more messages are written...

Yup, no good here either (still 2.4-bk kernel):

libata version 1.02 loaded.
sata_via version 0.20
sata_via(00:0f.0): PATA sharing not supported (0x82)
Attached scsi disk sda at scsi0, channel 0, id 3, lun 0
SCSI device sda: 71833096 512-byte hdwr sectors (36779 MB)
sda: sda1 sda2 sda3 < sda5 sda6 sda7 >

// Jarno

2004-03-31 16:49:13

by Jeff Garzik

[permalink] [raw]
Subject: Re: [PATCH] Re: [sata] libata update

===== drivers/scsi/sata_via.c 1.10 vs edited =====
--- 1.10/drivers/scsi/sata_via.c Thu Mar 25 07:30:08 2004
+++ edited/drivers/scsi/sata_via.c Wed Mar 31 11:47:24 2004
@@ -39,9 +39,10 @@
enum {
via_sata = 0,

- SATA_CHAN_ENAB = 0x40,
- SATA_INT_GATE = 0x41,
- SATA_NATIVE_MODE = 0x42,
+ SATA_CHAN_ENAB = 0x40, /* SATA channel enable */
+ SATA_INT_GATE = 0x41, /* SATA interrupt gating */
+ SATA_NATIVE_MODE = 0x42, /* Native mode enable */
+ SATA_PATA_SHARING = 0x49, /* PATA/SATA sharing func ctrl */

PORT0 = (1 << 1),
PORT1 = (1 << 0),
@@ -51,6 +52,9 @@
INT_GATE_ALL = PORT0 | PORT1,

NATIVE_MODE_ALL = (1 << 7) | (1 << 6) | (1 << 5) | (1 << 4),
+
+ SATA_EXT_PHY = (1 << 6), /* 0==use PATA, 1==ext phy */
+ SATA_2DEV = (1 << 5), /* SATA is master/slave */
};

static int svia_init_one (struct pci_dev *pdev, const struct pci_device_id *ent);
@@ -136,13 +140,7 @@

static unsigned long svia_scr_addr(unsigned long addr, unsigned int port)
{
- if (port >= 4)
- return 0; /* invalid port */
-
- addr &= ~((1 << 7) | (1 << 6));
- addr |= ((unsigned long)port << 6);
-
- return addr;
+ return addr + (port * 128);
}

/**
@@ -175,6 +173,13 @@
if (rc)
goto err_out;

+ pci_read_config_byte(pdev, SATA_PATA_SHARING, &tmp8);
+ if (tmp8 & SATA_2DEV) {
+ printk(KERN_ERR DRV_NAME "(%s): SATA master/slave not supported (0x%x)\n",
+ pci_name(pdev), (int) tmp8);
+ rc = -EIO;
+ goto err_out_regions;
+ }

for (i = 0; i < ARRAY_SIZE(svia_bar_sizes); i++)
if ((pci_resource_start(pdev, i) == 0) ||


Attachments:
patch (1.51 kB)

2004-03-31 17:26:00

by Jarno Paananen

[permalink] [raw]
Subject: Re: [PATCH] Re: [sata] libata update

Jeff Garzik <[email protected]> writes:

> Petr Sebor wrote:
>> 2.6.5-rc3 + this patch:
>> sata_via (0000:00:0f.0): PATA sharing not supported (0x2)
>> via_sata: probe of (0000:00:0f.0) failed with error -5
>
>
> Thanks for testing. OK, one bug fix and here's a new patch...
>
> Thanks for all your help in narrowing this down,

Thanks, that one works for me again:

libata version 1.02 loaded.
sata_via version 0.20
sata_via(00:0f.0): routed to hard irq line 5
ata1: SATA max UDMA/133 cmd 0xB400 ctl 0xB802 bmdma 0xC400 irq 20
ata2: SATA max UDMA/133 cmd 0xBC00 ctl 0xC002 bmdma 0xC408 irq 20
ata1: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3e01
87:4003 88:407f
ata1: dev 0 ATA, max UDMA/133, 72303840 sectors (lba48)
ata1: dev 0 configured for UDMA/133
ata2: dev 0 cfg 49:2f00 82:346b 83:7f21 84:4003 85:3469 86:3e01
87:4003 88:203f
ata2: dev 0 ATA, max UDMA/100, 488397168 sectors (lba48)
ata2: dev 0 configured for UDMA/100
scsi1 : sata_via
scsi2 : sata_via
Vendor: ATA Model: WDC WD360GD-00FN Rev: 1.02
Type: Direct-Access ANSI SCSI revision: 05
Vendor: ATA Model: WDC WD2500JD-22F Rev: 1.02
Type: Direct-Access ANSI SCSI revision: 05
Attached scsi disk sda at scsi0, channel 0, id 3, lun 0
Attached scsi disk sdb at scsi1, channel 0, id 0, lun 0
Attached scsi disk sdc at scsi2, channel 0, id 0, lun 0
SCSI device sda: 71833096 512-byte hdwr sectors (36779 MB)
sda: sda1 sda2 sda3 < sda5 sda6 sda7 >
SCSI device sdb: 72303840 512-byte hdwr sectors (37020 MB)
sdb: sdb1
SCSI device sdc: 488397168 512-byte hdwr sectors (250059 MB)
sdc: sdc1 < sdc5 sdc6 >


// Jarno

2004-03-31 21:04:56

by Jeff Garzik

[permalink] [raw]
Subject: Re: [PATCH] Re: [sata] libata update

Jarno Paananen wrote:
> Jeff Garzik <[email protected]> writes:
>
>
>>Petr Sebor wrote:
>>
>>>2.6.5-rc3 + this patch:
>>>sata_via (0000:00:0f.0): PATA sharing not supported (0x2)
>>>via_sata: probe of (0000:00:0f.0) failed with error -5
>>
>>
>>Thanks for testing. OK, one bug fix and here's a new patch...
>>
>>Thanks for all your help in narrowing this down,
>
>
> Thanks, that one works for me again:


cool, that's the patch I'm going with.

Jeff



2004-04-01 07:35:31

by Petr Sebor

[permalink] [raw]
Subject: Re: [PATCH] Re: [sata] libata update

Jeff Garzik wrote:

> cool, that's the patch I'm going with.
>
> Jeff

yup, works for me as well... thanks!

Petr



Attachments:
signature.asc (254.00 B)
OpenPGP digital signature