linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 31244 & sata_vsc & PPC
@ 2005-02-16 19:05 Ajit Prem
  2005-02-16 19:08 ` Jeff Garzik
  0 siblings, 1 reply; 8+ messages in thread
From: Ajit Prem @ 2005-02-16 19:05 UTC (permalink / raw)
  To: linux-ide

The email archives indicate that sata_vsc worked
on a 31244 in a Dell Powervault once the
kernel included the following configuration:

Processor type and features -> Local APIC support on uniprocessors
Processor type and features -> IO-APIC support on uniprocessors
General setup -> Power Management support -> ACPI Support

Trying to use sata_vsc on a 31244 in a PPC board
results in the same problem as other users had on
an X86 board configured without ACPI support - interrupts
come in too early to vsc_sata_interrupt, the interrupt
doesn't get cleared, and the kernel finally disables the irq.
What should one do to get sata_vsc/libata to work on a PPC board?


Using kernel 2.6.10 with only 1 disk connected to port 2.

bash-2.05b# modprobe sata_vsc
ata_device_add: ENTER
ata_host_add: ENTER
ata_port_start: prd alloc, virt ded0c000, dma 1ed0c000
ata_host_add: ENTER
ata_port_start: prd alloc, virt decd3000, dma 1ecd3000
ata_host_add: ENTER
ata_port_start: prd alloc, virt decc7000, dma 1ecc7000
ata_host_add: ENTER
ata_port_start: prd alloc, virt ded00000, dma 1ed00000
ata_device_add: probe begin
ata_device_add: ata1: probe begin
ata_device_add: ata1: probe end
ata_device_add: ata2: probe begin
ata_bus_reset: ENTER, host 2, port 1
ata_dev_classify: found ATA device by sig
ata_bus_reset: EXIT
ata_dev_identify: ENTER, host 2, dev 0
ata_dev_select: ENTER, ata2: device 0, wait 1
ata_dev_identify: do ATA identify
ata_dev_select: ENTER, ata2: device 0, wait 1
ata_exec_command_mmio: ata2: cmd 0xEC
irq 98: nobody cared!
Call trace:
 [c003bd8c] __report_bad_irq+0x38/0xb8
 [c003bef8] note_interrupt+0xd0/0x108
 [c003b868] __do_IRQ+0x174/0x184
 [c0003a70] do_IRQ+0x38/0xa0
 [c0002838] ret_from_except+0x0/0x18
 [c0003b28] default_idle+0x50/0x5c
 [c0001c44] rest_init+0x24/0x34
 [c0342630] start_kernel+0x174/0x1b4
 [c000037c] skpinv+0x2ac/0x2e8
handlers:
[<e1078348>] (vsc_sata_interrupt+0x0/0xcc [sata_vsc])
Disabling IRQ #98
ata_pio_sector: data read
ata_qc_complete: EXIT
ata_dump_id: 49==0x2b00  53==0x0007  63==0x0407  64==0x0003  75==0x0000 
ata_dump_id: 80==0x007c  81==0x0019  82==0x346b  83==0x5b68  84==0x4003 
ata_dump_id: 88==0x003f  93==0x600b
ata_dev_identify: EXIT, drv_stat = 0x50
ata_dev_identify: ENTER/EXIT (host 2, dev 1) -- nodev
ata_host_set_pio: base 0x8 xfer_mode 0xc mask 0x1f x 4
ata_dev_set_xfermode: set features - xfer mode
ata_dev_select: ENTER, ata2: device 0, wait 1
ata_exec_command_mmio: ata2: cmd 0xEF

Message from syslogd@vmeexec at Wed Feb 16 11:47:39 2005 ...
vmeexec kernel: Disabling IRQ #98


The modprobe command hangs. The machine is usable
otherwise.

bash-2.05b# cat /proc/interrupts
           CPU0      
 77:       4891   OpenPIC   Level     enet_tx
 78:       5666   OpenPIC   Level     enet_rx
 82:          0   OpenPIC   Level     enet_error
 90:        257   OpenPIC   Level     serial
 96:          3   OpenPIC   Level     VMEBus (Tsi148)
 98:     100000   OpenPIC   Level     libata
100:          0   OpenPIC   Level     ohci_hcd
101:          0   OpenPIC   Level     ohci_hcd
102:          0   OpenPIC   Level     ehci_hcd
106:          2   OpenPIC   Level     phy_interrupt
BAD:          0


# lscpi -vvvxxx

00:04.0 Class 0106: 8086:3200
        Subsystem: 8086:3200
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- 
ParErr- Step
ping- SERR- FastB2B-
        Status: Cap+ 66Mhz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- 
<TAbort
- <MAbort- >SERR- <PERR-
        Latency: 128 (4000ns min, 250ns max), cache line size 08
        Interrupt: pin A routed to IRQ 98
        Region 0: Memory at dfaff000 (64-bit, non-prefetchable) [size=4K]
        Capabilities: [e0] PCI-X non-bridge device.
                Command: DPERE- ERO+ RBC=0 OST=3
                Status: Bus=255 Dev=4 Func=0 64bit+ 133MHz+ SCD- USC-, 
DC=simple
, DMMRBC=0, DMOST=3, DMCRS=1, RSCEM-    Capabilities: [e8] Power 
Management vers
ion 2
                Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA 
PME(D0-,D1-,D2-,D3hot
-,D3cold-)
                Status: D0 PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [f0] Message Signalled Interrupts: 64bit+ 
Queue=0/2 Enable
-
                Address: 0000000000000000  Data: 0000
00: 86 80 00 32 07 00 30 02 00 00 06 01 08 80 00 00
10: 04 f0 af df 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 86 80 00 32
30: 00 00 00 00 e0 00 00 00 00 00 00 00 62 01 10 01
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 03 80 00 08 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 82
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 07 e8 32 00 20 ff 83 05 01 f0 22 00 00 00 00 00
f0: 05 00 84 00 00 00 00 00 00 00 00 00 00 00 00 00

Thanks,

AP


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: 31244 & sata_vsc & PPC
  2005-02-16 19:05 31244 & sata_vsc & PPC Ajit Prem
@ 2005-02-16 19:08 ` Jeff Garzik
  2005-02-16 20:51   ` Ajit Prem
  2005-02-16 21:27   ` Ajit Prem
  0 siblings, 2 replies; 8+ messages in thread
From: Jeff Garzik @ 2005-02-16 19:08 UTC (permalink / raw)
  To: Ajit Prem; +Cc: linux-ide, Jeremy Higdon

On Wed, Feb 16, 2005 at 12:05:16PM -0700, Ajit Prem wrote:
> The email archives indicate that sata_vsc worked
> on a 31244 in a Dell Powervault once the
> kernel included the following configuration:
> 
> Processor type and features -> Local APIC support on uniprocessors
> Processor type and features -> IO-APIC support on uniprocessors
> General setup -> Power Management support -> ACPI Support
> 
> Trying to use sata_vsc on a 31244 in a PPC board
> results in the same problem as other users had on
> an X86 board configured without ACPI support - interrupts
> come in too early to vsc_sata_interrupt, the interrupt
> doesn't get cleared, and the kernel finally disables the irq.
> What should one do to get sata_vsc/libata to work on a PPC board?

Ultimately I wonder if sata_vsc is masking/clearing all interrupt
conditions during startup.

There might also be a problem with PIO polling.

	Jeff




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: 31244 & sata_vsc & PPC
  2005-02-16 19:08 ` Jeff Garzik
@ 2005-02-16 20:51   ` Ajit Prem
  2005-02-19  6:01     ` Jeremy Higdon
  2005-02-16 21:27   ` Ajit Prem
  1 sibling, 1 reply; 8+ messages in thread
From: Ajit Prem @ 2005-02-16 20:51 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: linux-ide, Jeremy Higdon


Thanks for the help.

I printed the int_status register on interrupt
entry into vsc_sata_interrupt and got 0x8300.
According to the 31244 spec, this means (I have
only 1 disk connected to port 1) :

-- SATA Port 1 IDE Interrupt (0x8000)
-- SATA Port 1 PHY Ready Interrupt (0x0200)
-- SATA Port 1 Phy Change State Interrupt (0x0100)

Any patch I can try?

Thanks,

AP


Jeff Garzik wrote:

>On Wed, Feb 16, 2005 at 12:05:16PM -0700, Ajit Prem wrote:
>  
>
>>The email archives indicate that sata_vsc worked
>>on a 31244 in a Dell Powervault once the
>>kernel included the following configuration:
>>
>>Processor type and features -> Local APIC support on uniprocessors
>>Processor type and features -> IO-APIC support on uniprocessors
>>General setup -> Power Management support -> ACPI Support
>>
>>Trying to use sata_vsc on a 31244 in a PPC board
>>results in the same problem as other users had on
>>an X86 board configured without ACPI support - interrupts
>>come in too early to vsc_sata_interrupt, the interrupt
>>doesn't get cleared, and the kernel finally disables the irq.
>>What should one do to get sata_vsc/libata to work on a PPC board?
>>    
>>
>
>Ultimately I wonder if sata_vsc is masking/clearing all interrupt
>conditions during startup.
>
>There might also be a problem with PIO polling.
>
>	Jeff
>
>
>
>  
>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: 31244 & sata_vsc & PPC
  2005-02-16 19:08 ` Jeff Garzik
  2005-02-16 20:51   ` Ajit Prem
@ 2005-02-16 21:27   ` Ajit Prem
  2005-02-16 22:25     ` Jeff Garzik
  1 sibling, 1 reply; 8+ messages in thread
From: Ajit Prem @ 2005-02-16 21:27 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: linux-ide, Jeremy Higdon


As a follow-up to my previous email where
I indicated that int_status on entry into
vsc_sata_interrupt indicates 0x8300, I
put in a crude fix in the vsc_sata_interrupt
handler to read the taskfile status register,
and to clear the appropriate bits in the
SATA SError register, and now things work
just fine.

Thank you very much for your help.

AP


Jeff Garzik wrote:

>On Wed, Feb 16, 2005 at 12:05:16PM -0700, Ajit Prem wrote:
>  
>
>>The email archives indicate that sata_vsc worked
>>on a 31244 in a Dell Powervault once the
>>kernel included the following configuration:
>>
>>Processor type and features -> Local APIC support on uniprocessors
>>Processor type and features -> IO-APIC support on uniprocessors
>>General setup -> Power Management support -> ACPI Support
>>
>>Trying to use sata_vsc on a 31244 in a PPC board
>>results in the same problem as other users had on
>>an X86 board configured without ACPI support - interrupts
>>come in too early to vsc_sata_interrupt, the interrupt
>>doesn't get cleared, and the kernel finally disables the irq.
>>What should one do to get sata_vsc/libata to work on a PPC board?
>>    
>>
>
>Ultimately I wonder if sata_vsc is masking/clearing all interrupt
>conditions during startup.
>
>There might also be a problem with PIO polling.
>
>	Jeff
>
>
>
>  
>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: 31244 & sata_vsc & PPC
  2005-02-16 21:27   ` Ajit Prem
@ 2005-02-16 22:25     ` Jeff Garzik
  2005-02-17  1:21       ` Ajit Prem
  0 siblings, 1 reply; 8+ messages in thread
From: Jeff Garzik @ 2005-02-16 22:25 UTC (permalink / raw)
  To: Ajit Prem; +Cc: linux-ide, Jeremy Higdon

Ajit Prem wrote:
> 
> As a follow-up to my previous email where
> I indicated that int_status on entry into
> vsc_sata_interrupt indicates 0x8300, I
> put in a crude fix in the vsc_sata_interrupt
> handler to read the taskfile status register,
> and to clear the appropriate bits in the
> SATA SError register, and now things work
> just fine.

Wanna post your crude patch to the list?

	Jeff




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: 31244 & sata_vsc & PPC
  2005-02-16 22:25     ` Jeff Garzik
@ 2005-02-17  1:21       ` Ajit Prem
  2005-02-19  6:02         ` Jeremy Higdon
  0 siblings, 1 reply; 8+ messages in thread
From: Ajit Prem @ 2005-02-17  1:21 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: linux-ide, Jeremy Higdon


It's just a dirty hack that works
for the limited case where I'm
using only 1 disk off port 1 on a
board that makes 3 ports available.
I'm not sure what the side effects
are, or how things will work if
all 3 ports are used (which I'm
unable to test).

Anyway, here's the hack I used:

@@ -174,6 +174,9 @@
    if (ap && (!(ap->flags & ATA_FLAG_PORT_DISABLED))) {
        struct ata_queued_cmd *qc;
 
+       vsc_sata_scr_write(ap, VSC_SATA_SCR_ERROR_OFFSET, 0x00010001);
+       readl((void *)ap->ioaddr.status_addr);
+
        qc = ata_qc_from_tag(ap, ap->active_tag);
        if (qc && (!(qc->tf.ctl & ATA_NIEN)))
            handled += ata_host_intr(ap, qc);


Now, on "modprobe sata_vsc", I get:

 ata1: SATA max UDMA/133 cmd 0xE107C200 ctl 0xE107C229 bmdma 0xE107C270 
irq 98
 ata2: SATA max UDMA/133 cmd 0xE107C400 ctl 0xE107C429 bmdma 0xE107C470 
irq 98
 ata3: SATA max UDMA/133 cmd 0xE107C600 ctl 0xE107C629 bmdma 0xE107C670 
irq 98
 ata4: SATA max UDMA/133 cmd 0xE107C800 ctl 0xE107C829 bmdma 0xE107C870 
irq 98
 ata1: no device found (phy stat 00000000)
 scsi0 : sata_vsc
 ata2: dev 0 ATA, max UDMA/100, 78140160 sectors:
 ata2(0): applying bridge limits
 ata2: dev 0 configured for UDMA/100
 scsi1 : sata_vsc
 ata3: no device found (phy stat 00000000)
 scsi2 : sata_vsc
 ata4: no device found (phy stat 00000000)
 scsi3 : sata_vsc
   Vendor: ATA       Model: FUJITSU MHS2040A  Rev   : C003
   Type:   Direct-Access                      ANSI SCSI revision: 05
 SCSI device sda: 78140160 512-byte hdwr sectors (40008 MB)
 SCSI device sda: drive cache: write back
 SCSI device sda: 78140160 512-byte hdwr sectors (40008 MB)
 SCSI device sda: drive cache: write back
  sda: sda1 sda2 sda3
 Attached scsi disk sda at scsi1, channel 0, id 0, lun 0
 Attached scsi generic sg0 at scsi1, channel 0, id 0, lun 0,  type 0


I can then fdisk, mount, and use the SATA disk with no problems.

AP


Jeff Garzik wrote:

> Ajit Prem wrote:
>
>>
>> As a follow-up to my previous email where
>> I indicated that int_status on entry into
>> vsc_sata_interrupt indicates 0x8300, I
>> put in a crude fix in the vsc_sata_interrupt
>> handler to read the taskfile status register,
>> and to clear the appropriate bits in the
>> SATA SError register, and now things work
>> just fine.
>
>
> Wanna post your crude patch to the list?
>
>     Jeff
>
>
>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: 31244 & sata_vsc & PPC
  2005-02-16 20:51   ` Ajit Prem
@ 2005-02-19  6:01     ` Jeremy Higdon
  0 siblings, 0 replies; 8+ messages in thread
From: Jeremy Higdon @ 2005-02-19  6:01 UTC (permalink / raw)
  To: Ajit Prem; +Cc: Jeff Garzik, linux-ide

On Wed, Feb 16, 2005 at 01:51:24PM -0700, Ajit Prem wrote:
> 
> Thanks for the help.
> 
> I printed the int_status register on interrupt
> entry into vsc_sata_interrupt and got 0x8300.
> According to the 31244 spec, this means (I have
> only 1 disk connected to port 1) :
> 
> -- SATA Port 1 IDE Interrupt (0x8000)
> -- SATA Port 1 PHY Ready Interrupt (0x0200)
> -- SATA Port 1 Phy Change State Interrupt (0x0100)
> 
> Any patch I can try?
> 
> Thanks,
> 
> AP

Interesting that I haven't seen this, but then I only have
the Vitesse part.

Jeff, I don't see where libata-core writes to the SCR_ERROR
register to clear the PHY Ready and Phy Change State interrupts.
Is this something that sata_vsc is supposed to do in its
interrupt handler?  The core would miss such info if sata_vsc
did this . . . .

jeremy

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: 31244 & sata_vsc & PPC
  2005-02-17  1:21       ` Ajit Prem
@ 2005-02-19  6:02         ` Jeremy Higdon
  0 siblings, 0 replies; 8+ messages in thread
From: Jeremy Higdon @ 2005-02-19  6:02 UTC (permalink / raw)
  To: Ajit Prem; +Cc: Jeff Garzik, linux-ide

On Wed, Feb 16, 2005 at 06:21:46PM -0700, Ajit Prem wrote:
> 
> It's just a dirty hack that works
> for the limited case where I'm
> using only 1 disk off port 1 on a
> board that makes 3 ports available.
> I'm not sure what the side effects
> are, or how things will work if
> all 3 ports are used (which I'm
> unable to test).
> 
> Anyway, here's the hack I used:
> 
> @@ -174,6 +174,9 @@
>    if (ap && (!(ap->flags & ATA_FLAG_PORT_DISABLED))) {
>        struct ata_queued_cmd *qc;
> 
> +       vsc_sata_scr_write(ap, VSC_SATA_SCR_ERROR_OFFSET, 0x00010001);

I think this should be 0x00010002, since you're trying to clear
bits 1 and 16.

> +       readl((void *)ap->ioaddr.status_addr);
> +
>        qc = ata_qc_from_tag(ap, ap->active_tag);
>        if (qc && (!(qc->tf.ctl & ATA_NIEN)))
>            handled += ata_host_intr(ap, qc);


jeremy

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2005-02-19  6:03 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-02-16 19:05 31244 & sata_vsc & PPC Ajit Prem
2005-02-16 19:08 ` Jeff Garzik
2005-02-16 20:51   ` Ajit Prem
2005-02-19  6:01     ` Jeremy Higdon
2005-02-16 21:27   ` Ajit Prem
2005-02-16 22:25     ` Jeff Garzik
2005-02-17  1:21       ` Ajit Prem
2005-02-19  6:02         ` Jeremy Higdon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).