2011-07-05 오후 7:11, saeed bishara 쓴 글:
On Tue, Jul 5, 2011 at 11:26 AM, Richard Kang<turquesa@xxxxxxxxx> wrote:
2011/6/29 Richard Kang<turquesa@xxxxxxxxx>:
Hello.
I have a sil3132 pci-e card and a DB-88F6282-A-BP(Marvell development
board based on Arm9).
I compiled sata_sil24 driver as a module with a cross-compiler.
But, when loading the driver, qc timeout error was occurred during
ata_read_dev_id.
What is wrong, IRQ or DMA ?
looks to me this is DMA issue, can you force pio mode? you can do that
by adding "libata.dma=0" to the kernel command line.
saeed
I have 2.6.31.8
Dear saeed,
I excuted libata.dma=0 through "$modprobe libata dma=0"
Then I excuted "$modprobe sata_sil24"
But, result is same as before.
I think sata_sil24 supports only dma not pio, right?
I don't think so.
can you check if interrupts working fine?
you can test that by loading the driver without any connected disk,
then check if the controller raises any interrupt from
/proc/interrupts when plugging a disk,
saeed
Dear saeed,
As your instructions, I checked interrupt.
At first, I load a sata_sil24 driver without a disk. (I added the log.)
--------------------------------------------------------------------------------
sil24_init_one: @@@ ENTER
(arch/arm/mm/ioremap.c) __arm_ioremap: phys_addr=e8084000
(arch/arm/mm/ioremap.c) __arm_ioremap_pfn: addr=e0a22000
(arch/arm/mm/ioremap.c) __arm_ioremap: phys_addr=e8080000
(arch/arm/mm/ioremap.c) __arm_ioremap_pfn: addr=e0a28000
ata_host_alloc: ### ENTER: max_ports=2
ata_port_alloc: ENTER
(libata-core.c) ata_link_init
ata_dev_init: (libata-core.c) ENTER
ata_dev_init: (libata-core.c) LEAVE
ata_dev_init: (libata-core.c) ENTER
ata_dev_init: (libata-core.c) LEAVE
ata_port_alloc: LEAVE
ata_port_alloc: ENTER
(libata-core.c) ata_link_init
ata_dev_init: (libata-core.c) ENTER
ata_dev_init: (libata-core.c) LEAVE
ata_dev_init: (libata-core.c) ENTER
ata_dev_init: (libata-core.c) LEAVE
ata_port_alloc: LEAVE
ata_host_alloc: ### LEAVE
sil24_init_one: DMA_MASK_64 rc=0
sil24_init_controller: === ENTER : sil24_init_controller
sil24_init_controller: host_base=e0a22000 HOST_CTRL(0x40)=81000000
sil24_init_controller: === LEAVE: HOST_CTRL=1000003
sil24_init_one: @@@ LEAVE
sil24_port_start: ENTER ap=d1668000 ata4294967295
sil24_port_start: kernel va=ffc08000 cb_dma=11800000
sil24_port_start: LEAVE
__ata_port_freeze: ENTER: ap=d1668000
__ata_port_freeze: LEAVE: ata4294967295 port frozen
sil24_port_start: ENTER ap=d164c000 ata4294967295
sil24_port_start: kernel va=ffc27000 cb_dma=117a0000
sil24_port_start: LEAVE
__ata_port_freeze: ENTER: ap=d164c000
__ata_port_freeze: LEAVE: ata4294967295 port frozen
sil24_interrupt: ***** ENTER: sil24_interrupt
sil24_interrupt: host_base=e0a22000 HOST_IRQ_STAT=0
sil24_interrupt: ***** LEAVE
(libata-core.c) ata_host_register *ENTER*
scsi2 : sata_sil24
scsi3 : sata_sil24
ata1: SATA max UDMA/100 host m128@0xe8084000 port 0xe8080000 irq 10
ata2: SATA max UDMA/100 host m128@0xe8084000 port 0xe8082000 irq 10
(libata-core.c) ata_host_register *LEAVE*
ata_port_schedule_eh: port EH scheduled
ata_scsi_error: ENTER
(libata-eh.c) ata_scsi_error
ata_port_flush_task: ENTER
sil24_error_handler: ENTER
sil24_init_port: +++ ENTER port_base=e0a28000
sil24_init_port: +++ LEAVE
ata_eh_link_autopsy: ENTER
ata_eh_recover: ENTER
ata_dev_init: (libata-core.c) ENTER
ata_dev_init: (libata-core.c) LEAVE
__ata_port_freeze: ENTER: ap=d1668000
__ata_port_freeze: LEAVE: ata1 port frozen
sil24_thaw: ENTER
sil24_thaw: LEAVE: irq_enabled=8d3
ata_eh_thaw_port: ata1 port thawed
ata_std_postreset: ENTER
ata1: SATA link down (SStatus 0 SControl 0)
ata_std_postreset: EXIT
ata_eh_revalidate_and_attach: ENTER
ata_eh_recover: EXIT, rc=0
sil24_error_handler: LEAVE
ata_scsi_error: EXIT
ata_port_schedule_eh: port EH scheduled
ata_scsi_error: ENTER
(libata-eh.c) ata_scsi_error
ata_port_flush_task: ENTER
sil24_error_handler: ENTER
sil24_init_port: +++ ENTER port_base=e0a2a000
sil24_init_port: +++ LEAVE
ata_eh_link_autopsy: ENTER
ata_eh_recover: ENTER
ata_dev_init: (libata-core.c) ENTER
ata_dev_init: (libata-core.c) LEAVE
__ata_port_freeze: ENTER: ap=d164c000
__ata_port_freeze: LEAVE: ata2 port frozen
sil24_thaw: ENTER
sil24_thaw: LEAVE: irq_enabled=8d3
ata_eh_thaw_port: ata2 port thawed
ata_std_postreset: ENTER
ata2: SATA link down (SStatus 0 SControl 0)
ata_std_postreset: EXIT
ata_eh_revalidate_and_attach: ENTER
ata_eh_recover: EXIT, rc=0
sil24_error_handler: LEAVE
ata_scsi_error: EXIT
--------------------------------------------------------------------------------
It seems no problem.
Then I plug a disk. Followings are debug msg of sil24_interrupt and
contents of /proc/interrupts.
An interrupt is occurred and no error.
--------------------------------------------------------------------------------
sil24_interrupt: ***** ENTER: sil24_interrupt
sil24_interrupt: host_base=e0a22000 HOST_IRQ_STAT=2
(sata_sil24.c) sil24_host_intr
(sata_sil24.c) sil24_host_intr -> sil24_error_intr
ata_port_schedule_eh: port EH scheduled
__ata_port_freeze: ENTER: ap=d164c000
__ata_port_freeze: LEAVE: ata2 port frozen
sil24_interrupt: ***** LEAVE
--------------------------------------------------------------------------------
sh-3.2# cat /proc/interrupts
CPU0
1: 20689 - kw_tick
10: 1 - sata_sil24
11: 2901 - mv_ethernet
19: 0 - ehci_hcd:usb1
21: 0 - mvSata
22: 0 - cesa
28: 2145 - mvsdio
29: 0 - mv64xxx_i2c
33: 242 - serial
Err: 0
--------------------------------------------------------------------------------
I can't find reason of not working. Please advise to me.
Thank you.
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html