* PCI SATA controllers on embedded, no-BIOS targets
@ 2006-08-22 16:37 Kevin Hilman
2006-08-22 16:41 ` Tejun Heo
0 siblings, 1 reply; 17+ messages in thread
From: Kevin Hilman @ 2006-08-22 16:37 UTC (permalink / raw)
To: linux-ide; +Cc: Deepak Saxena
I have a Silicon Images 3112 PCI card on an XScale IXP425 platform. The
card works well in a PC, but I haven't got it to work in on the ARM
platform. On the PC, I see the cards BIOS executed and am guessing that
since this can't happen on the ARM, that's why things aren't working.
The card is at least detected on the ARM, and the driver tries to probe
for devices, but times out an moves on.
Before I debug this too deeply, I want to make sure this should work on
embedded boards, even without the BIOS execution.
Thanks,
Kevin
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-08-22 16:37 PCI SATA controllers on embedded, no-BIOS targets Kevin Hilman
@ 2006-08-22 16:41 ` Tejun Heo
2006-08-22 16:52 ` Kevin Hilman
0 siblings, 1 reply; 17+ messages in thread
From: Tejun Heo @ 2006-08-22 16:41 UTC (permalink / raw)
To: Kevin Hilman; +Cc: linux-ide, Deepak Saxena
Kevin Hilman wrote:
> I have a Silicon Images 3112 PCI card on an XScale IXP425 platform. The
> card works well in a PC, but I haven't got it to work in on the ARM
> platform. On the PC, I see the cards BIOS executed and am guessing that
> since this can't happen on the ARM, that's why things aren't working.
>
> The card is at least detected on the ARM, and the driver tries to probe
> for devices, but times out an moves on.
>
> Before I debug this too deeply, I want to make sure this should work on
> embedded boards, even without the BIOS execution.
sil3112 works fine w/o any BIOS initialization.
--
tejun
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-08-22 16:41 ` Tejun Heo
@ 2006-08-22 16:52 ` Kevin Hilman
2006-08-22 17:26 ` Tejun Heo
0 siblings, 1 reply; 17+ messages in thread
From: Kevin Hilman @ 2006-08-22 16:52 UTC (permalink / raw)
To: Tejun Heo; +Cc: linux-ide, Deepak Saxena
Tejun Heo wrote:
> Kevin Hilman wrote:
>> I have a Silicon Images 3112 PCI card on an XScale IXP425 platform.
>> The card works well in a PC, but I haven't got it to work in on the
>> ARM platform. On the PC, I see the cards BIOS executed and am
>> guessing that since this can't happen on the ARM, that's why things
>> aren't working.
>>
>> The card is at least detected on the ARM, and the driver tries to
>> probe for devices, but times out an moves on.
>>
>> Before I debug this too deeply, I want to make sure this should work
>> on embedded boards, even without the BIOS execution.
>
> sil3112 works fine w/o any BIOS initialization.
>
I'm curious what platforms this has been tested. Any non-x86 platforms?
Any big endian platforms?
Thanks for the quick response.
Kevin
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-08-22 16:52 ` Kevin Hilman
@ 2006-08-22 17:26 ` Tejun Heo
2006-08-22 17:31 ` Tejun Heo
0 siblings, 1 reply; 17+ messages in thread
From: Tejun Heo @ 2006-08-22 17:26 UTC (permalink / raw)
To: Kevin Hilman; +Cc: linux-ide, Deepak Saxena
Kevin Hilman wrote:
> Tejun Heo wrote:
>> Kevin Hilman wrote:
>>> I have a Silicon Images 3112 PCI card on an XScale IXP425 platform.
>>> The card works well in a PC, but I haven't got it to work in on the
>>> ARM platform. On the PC, I see the cards BIOS executed and am
>>> guessing that since this can't happen on the ARM, that's why things
>>> aren't working.
>>>
>>> The card is at least detected on the ARM, and the driver tries to
>>> probe for devices, but times out an moves on.
>>>
>>> Before I debug this too deeply, I want to make sure this should work
>>> on embedded boards, even without the BIOS execution.
>>
>> sil3112 works fine w/o any BIOS initialization.
>>
>
> I'm curious what platforms this has been tested. Any non-x86 platforms?
> Any big endian platforms?
>
> Thanks for the quick response.
I've personally seen it working on XScale and ATI's mips.
--
tejun
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-08-22 17:26 ` Tejun Heo
@ 2006-08-22 17:31 ` Tejun Heo
2006-08-22 17:37 ` Kevin Hilman
0 siblings, 1 reply; 17+ messages in thread
From: Tejun Heo @ 2006-08-22 17:31 UTC (permalink / raw)
To: Tejun Heo; +Cc: Kevin Hilman, linux-ide, Deepak Saxena
Tejun Heo wrote:
> Kevin Hilman wrote:
>> Tejun Heo wrote:
>>> Kevin Hilman wrote:
>>>> I have a Silicon Images 3112 PCI card on an XScale IXP425 platform.
>>>> The card works well in a PC, but I haven't got it to work in on the
>>>> ARM platform. On the PC, I see the cards BIOS executed and am
>>>> guessing that since this can't happen on the ARM, that's why things
>>>> aren't working.
>>>>
>>>> The card is at least detected on the ARM, and the driver tries to
>>>> probe for devices, but times out an moves on.
>>>>
>>>> Before I debug this too deeply, I want to make sure this should work
>>>> on embedded boards, even without the BIOS execution.
>>>
>>> sil3112 works fine w/o any BIOS initialization.
>>>
>>
>> I'm curious what platforms this has been tested. Any non-x86
>> platforms? Any big endian platforms?
>>
>> Thanks for the quick response.
>
> I've personally seen it working on XScale and ATI's mips.
For the record, for ATI's new mips platform, sata_sil needs some
modifications. Their PCI bridge can't handle byte-aligned mmio and the
driver had to be modified to use IO address space.
--
tejun
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-08-22 17:31 ` Tejun Heo
@ 2006-08-22 17:37 ` Kevin Hilman
2006-08-22 18:00 ` Tejun Heo
0 siblings, 1 reply; 17+ messages in thread
From: Kevin Hilman @ 2006-08-22 17:37 UTC (permalink / raw)
To: Tejun Heo; +Cc: linux-ide, Deepak Saxena
Tejun Heo wrote:
> Tejun Heo wrote:
>> Kevin Hilman wrote:
>>> Tejun Heo wrote:
>>>> Kevin Hilman wrote:
>>>>> I have a Silicon Images 3112 PCI card on an XScale IXP425
>>>>> platform. The card works well in a PC, but I haven't got it to
>>>>> work in on the ARM platform. On the PC, I see the cards BIOS
>>>>> executed and am guessing that since this can't happen on the ARM,
>>>>> that's why things aren't working.
>>>>>
>>>>> The card is at least detected on the ARM, and the driver tries to
>>>>> probe for devices, but times out an moves on.
>>>>>
>>>>> Before I debug this too deeply, I want to make sure this should
>>>>> work on embedded boards, even without the BIOS execution.
>>>>
>>>> sil3112 works fine w/o any BIOS initialization.
>>>>
>>>
>>> I'm curious what platforms this has been tested. Any non-x86
>>> platforms? Any big endian platforms?
>>>
>>> Thanks for the quick response.
>>
>> I've personally seen it working on XScale and ATI's mips.
OK, that's good to know.
> For the record, for ATI's new mips platform, sata_sil needs some
> modifications. Their PCI bridge can't handle byte-aligned mmio and the
> driver had to be modified to use IO address space.
I'm using 2.6.18-rc4 on this XScale IXP425 (big endian) and both the
legacy driver (drivers/ide/pci/siimage.c) and the libata driver
(drivers/scsi/sata_sil.c) cause crashes during probing due to bad memory
accesses.
Switching the legacy driver into PIO mode makes the probing work well,
but still can't figure out what's happening in the libata driver, AFICT,
it can't do PIO.
Any chance you can share the changes to use IO address space? Maybe the
PCI on this XScale has similar limitations.
Kevin
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-08-22 17:37 ` Kevin Hilman
@ 2006-08-22 18:00 ` Tejun Heo
2006-08-22 18:02 ` Tejun Heo
2006-08-22 21:58 ` Kevin Hilman
0 siblings, 2 replies; 17+ messages in thread
From: Tejun Heo @ 2006-08-22 18:00 UTC (permalink / raw)
To: Kevin Hilman; +Cc: linux-ide, Deepak Saxena
[-- Attachment #1: Type: text/plain, Size: 1282 bytes --]
Kevin Hilman wrote:
>>> I've personally seen it working on XScale and ATI's mips.
>
> OK, that's good to know.
>
>> For the record, for ATI's new mips platform, sata_sil needs some
>> modifications. Their PCI bridge can't handle byte-aligned mmio and
>> the driver had to be modified to use IO address space.
>
> I'm using 2.6.18-rc4 on this XScale IXP425 (big endian) and both the
> legacy driver (drivers/ide/pci/siimage.c) and the libata driver
> (drivers/scsi/sata_sil.c) cause crashes during probing due to bad memory
> accesses.
So, that one can't do byte-aligned mmio either?
> Switching the legacy driver into PIO mode makes the probing work well,
> but still can't figure out what's happening in the libata driver, AFICT,
> it can't do PIO.
By PIO, you mean accessing registers via IO address space instead of
memory address space, right? Not PIO as opposed to DMA.
> Any chance you can share the changes to use IO address space? Maybe the
> PCI on this XScale has similar limitations.
Sure, I've just got okay for releasing the code and am going to post the
patches on my website anyway. I'm attaching a patch. This might not
apply cleanly to your kernel but it should give enough idea. Oh the
code kills 4 ports support for 3114 too.
--
tejun
[-- Attachment #2: use-pio-instead-of-mmio --]
[-- Type: text/plain, Size: 4155 bytes --]
Index: work1/drivers/scsi/sata_sil.c
===================================================================
--- work1.orig/drivers/scsi/sata_sil.c 2006-06-14 10:44:43.000000000 +0900
+++ work1/drivers/scsi/sata_sil.c 2006-06-15 19:15:08.000000000 +0900
@@ -57,14 +57,10 @@ enum {
sil_3512 = 2,
sil_3114 = 3,
- SIL_FIFO_R0 = 0x40,
- SIL_FIFO_W0 = 0x41,
- SIL_FIFO_R1 = 0x44,
- SIL_FIFO_W1 = 0x45,
- SIL_FIFO_R2 = 0x240,
- SIL_FIFO_W2 = 0x241,
- SIL_FIFO_R3 = 0x244,
- SIL_FIFO_W3 = 0x245,
+ SIL_FIFO_0 = 0x40,
+ SIL_FIFO_1 = 0x44,
+ SIL_FIFO_2 = 0x240,
+ SIL_FIFO_3 = 0x244,
SIL_SYSCFG = 0x48,
SIL_MASK_IDE0_INT = (1 << 22),
@@ -181,7 +177,7 @@ static const struct ata_port_info sil_po
{
.sht = &sil_sht,
.host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
- ATA_FLAG_SRST | ATA_FLAG_MMIO,
+ ATA_FLAG_SRST,
.pio_mask = 0x1f, /* pio0-4 */
.mwdma_mask = 0x07, /* mwdma0-2 */
.udma_mask = 0x3f, /* udma0-5 */
@@ -191,8 +187,7 @@ static const struct ata_port_info sil_po
{
.sht = &sil_sht,
.host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
- ATA_FLAG_SRST | ATA_FLAG_MMIO |
- SIL_FLAG_MOD15WRITE,
+ ATA_FLAG_SRST | SIL_FLAG_MOD15WRITE,
.pio_mask = 0x1f, /* pio0-4 */
.mwdma_mask = 0x07, /* mwdma0-2 */
.udma_mask = 0x3f, /* udma0-5 */
@@ -202,8 +197,7 @@ static const struct ata_port_info sil_po
{
.sht = &sil_sht,
.host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
- ATA_FLAG_SRST | ATA_FLAG_MMIO |
- SIL_FLAG_RERR_ON_DMA_ACT,
+ ATA_FLAG_SRST | SIL_FLAG_RERR_ON_DMA_ACT,
.pio_mask = 0x1f, /* pio0-4 */
.mwdma_mask = 0x07, /* mwdma0-2 */
.udma_mask = 0x3f, /* udma0-5 */
@@ -459,13 +453,34 @@ static int sil_init_one (struct pci_dev
base = (unsigned long) mmio_base;
- for (i = 0; i < probe_ent->n_ports; i++) {
- probe_ent->port[i].cmd_addr = base + sil_port[i].tf;
- probe_ent->port[i].altstatus_addr =
- probe_ent->port[i].ctl_addr = base + sil_port[i].ctl;
- probe_ent->port[i].bmdma_addr = base + sil_port[i].bmdma;
- probe_ent->port[i].scr_addr = base + sil_port[i].scr;
- ata_std_ports(&probe_ent->port[i]);
+ if (ent->driver_data == 3114) {
+ for (i = 0; i < probe_ent->n_ports; i++) {
+ probe_ent->port[i].cmd_addr = base + sil_port[i].tf;
+ probe_ent->port[i].altstatus_addr =
+ probe_ent->port[i].ctl_addr = base + sil_port[i].ctl;
+ probe_ent->port[i].bmdma_addr = base + sil_port[i].bmdma;
+ probe_ent->port[i].scr_addr = base + sil_port[i].scr;
+ ata_std_ports(&probe_ent->port[i]);
+ }
+ } else {
+ /* Use PIO for 3112/3512. Some platforms barf on
+ * byte-wide mmio on odd boundary.
+ */
+ probe_ent->port[0].cmd_addr = pci_resource_start(pdev, 0);
+ probe_ent->port[0].altstatus_addr =
+ probe_ent->port[0].ctl_addr =
+ pci_resource_start(pdev, 1) | ATA_PCI_CTL_OFS;
+ probe_ent->port[0].bmdma_addr = pci_resource_start(pdev, 4);
+ probe_ent->port[0].scr_addr = base + sil_port[0].scr;
+ ata_std_ports(&probe_ent->port[0]);
+
+ probe_ent->port[1].cmd_addr = pci_resource_start(pdev, 2);
+ probe_ent->port[1].altstatus_addr =
+ probe_ent->port[1].ctl_addr =
+ pci_resource_start(pdev, 3) | ATA_PCI_CTL_OFS;
+ probe_ent->port[1].bmdma_addr = pci_resource_start(pdev, 4) + 8;
+ probe_ent->port[1].scr_addr = base + sil_port[1].scr;
+ ata_std_ports(&probe_ent->port[1]);
}
/* Initialize FIFO PCI bus arbitration */
@@ -473,15 +488,12 @@ static int sil_init_one (struct pci_dev
if (cls) {
cls >>= 3;
cls++; /* cls = (line_size/8)+1 */
- writeb(cls, mmio_base + SIL_FIFO_R0);
- writeb(cls, mmio_base + SIL_FIFO_W0);
- writeb(cls, mmio_base + SIL_FIFO_R1);
- writeb(cls, mmio_base + SIL_FIFO_W1);
+ tmp = cls << 8 | cls;
+ writew(tmp, mmio_base + SIL_FIFO_0);
+ writew(tmp, mmio_base + SIL_FIFO_1);
if (ent->driver_data == sil_3114) {
- writeb(cls, mmio_base + SIL_FIFO_R2);
- writeb(cls, mmio_base + SIL_FIFO_W2);
- writeb(cls, mmio_base + SIL_FIFO_R3);
- writeb(cls, mmio_base + SIL_FIFO_W3);
+ writew(tmp, mmio_base + SIL_FIFO_2);
+ writew(tmp, mmio_base + SIL_FIFO_3);
}
} else
dev_printk(KERN_WARNING, &pdev->dev,
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-08-22 18:00 ` Tejun Heo
@ 2006-08-22 18:02 ` Tejun Heo
2006-08-22 21:58 ` Kevin Hilman
1 sibling, 0 replies; 17+ messages in thread
From: Tejun Heo @ 2006-08-22 18:02 UTC (permalink / raw)
To: Kevin Hilman; +Cc: linux-ide, Deepak Saxena
Tejun Heo wrote:
> Kevin Hilman wrote:
>>>> I've personally seen it working on XScale and ATI's mips.
>>
>> OK, that's good to know.
>>
>>> For the record, for ATI's new mips platform, sata_sil needs some
>>> modifications. Their PCI bridge can't handle byte-aligned mmio and
>>> the driver had to be modified to use IO address space.
>>
>> I'm using 2.6.18-rc4 on this XScale IXP425 (big endian) and both the
>> legacy driver (drivers/ide/pci/siimage.c) and the libata driver
>> (drivers/scsi/sata_sil.c) cause crashes during probing due to bad
>> memory accesses.
>
> So, that one can't do byte-aligned mmio either?
>
>> Switching the legacy driver into PIO mode makes the probing work well,
>> but still can't figure out what's happening in the libata driver,
>> AFICT, it can't do PIO.
>
> By PIO, you mean accessing registers via IO address space instead of
> memory address space, right? Not PIO as opposed to DMA.
>
>> Any chance you can share the changes to use IO address space? Maybe
>> the PCI on this XScale has similar limitations.
>
> Sure, I've just got okay for releasing the code and am going to post the
> patches on my website anyway. I'm attaching a patch. This might not
> apply cleanly to your kernel but it should give enough idea. Oh the
> code kills 4 ports support for 3114 too.
s/kills/doesn't support/
--
tejun
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-08-22 18:00 ` Tejun Heo
2006-08-22 18:02 ` Tejun Heo
@ 2006-08-22 21:58 ` Kevin Hilman
2006-08-23 3:24 ` Tejun Heo
1 sibling, 1 reply; 17+ messages in thread
From: Kevin Hilman @ 2006-08-22 21:58 UTC (permalink / raw)
To: Tejun Heo; +Cc: linux-ide, Deepak Saxena
[-- Attachment #1: Type: text/plain, Size: 1712 bytes --]
Tejun Heo wrote:
> Kevin Hilman wrote:
>>>> I've personally seen it working on XScale and ATI's mips.
>>
>> OK, that's good to know.
>>
>>> For the record, for ATI's new mips platform, sata_sil needs some
>>> modifications. Their PCI bridge can't handle byte-aligned mmio and
>>> the driver had to be modified to use IO address space.
>>
>> I'm using 2.6.18-rc4 on this XScale IXP425 (big endian) and both the
>> legacy driver (drivers/ide/pci/siimage.c) and the libata driver
>> (drivers/scsi/sata_sil.c) cause crashes during probing due to bad
>> memory accesses.
>
> So, that one can't do byte-aligned mmio either?
>
>> Switching the legacy driver into PIO mode makes the probing work well,
>> but still can't figure out what's happening in the libata driver,
>> AFICT, it can't do PIO.
>
> By PIO, you mean accessing registers via IO address space instead of
> memory address space, right? Not PIO as opposed to DMA.
yes, I mean using PCI IO address space.
>> Any chance you can share the changes to use IO address space? Maybe
>> the PCI on this XScale has similar limitations.
>
> Sure, I've just got okay for releasing the code and am going to post the
> patches on my website anyway. I'm attaching a patch. This might not
> apply cleanly to your kernel but it should give enough idea. Oh the
> code kills 4 ports support for 3114 too.
OK, tweaking your patch onto 2.6.18-rc4, I've got it to work using IO
address space. My patch attached for reference. FYI, in addition to
your changes, I also had to change the data_xfer method to use
ata_pio_data_xfer instead of ata_mmio_data_xfer which was faulting since
my arch doesn't have direct memory access to IO space.
Kevin
[-- Attachment #2: sata_sil-use-pio-instead-of-mmio.patch --]
[-- Type: text/plain, Size: 2472 bytes --]
Index: dev/drivers/scsi/sata_sil.c
===================================================================
--- dev.orig/drivers/scsi/sata_sil.c
+++ dev/drivers/scsi/sata_sil.c
@@ -57,7 +57,7 @@ enum {
SIL_FLAG_MOD15WRITE = (1 << 30),
SIL_DFL_HOST_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
- ATA_FLAG_MMIO | ATA_FLAG_HRST_TO_RESUME,
+ ATA_FLAG_HRST_TO_RESUME,
/*
* Controller IDs
@@ -200,7 +200,7 @@ static const struct ata_port_operations
.bmdma_status = ata_bmdma_status,
.qc_prep = ata_qc_prep,
.qc_issue = ata_qc_issue_prot,
- .data_xfer = ata_mmio_data_xfer,
+ .data_xfer = ata_pio_data_xfer,
.freeze = sil_freeze,
.thaw = sil_thaw,
.error_handler = ata_bmdma_error_handler,
@@ -670,13 +670,35 @@ static int sil_init_one (struct pci_dev
base = (unsigned long) mmio_base;
- for (i = 0; i < probe_ent->n_ports; i++) {
- probe_ent->port[i].cmd_addr = base + sil_port[i].tf;
- probe_ent->port[i].altstatus_addr =
- probe_ent->port[i].ctl_addr = base + sil_port[i].ctl;
- probe_ent->port[i].bmdma_addr = base + sil_port[i].bmdma;
- probe_ent->port[i].scr_addr = base + sil_port[i].scr;
- ata_std_ports(&probe_ent->port[i]);
+ if (ent->driver_data == sil_3114) {
+ for (i = 0; i < probe_ent->n_ports; i++) {
+ probe_ent->port[i].cmd_addr = base + sil_port[i].tf;
+ probe_ent->port[i].altstatus_addr =
+ probe_ent->port[i].ctl_addr = base + sil_port[i].ctl;
+ probe_ent->port[i].bmdma_addr = base + sil_port[i].bmdma;
+ probe_ent->port[i].scr_addr = base + sil_port[i].scr;
+ ata_std_ports(&probe_ent->port[i]);
+ }
+ } else {
+ /* Use PIO for 3112/3512. Some platforms barf on
+ * byte-wide mmio on odd boundary.
+ */
+ probe_ent->port[0].cmd_addr = pci_resource_start(pdev, 0);
+ probe_ent->port[0].altstatus_addr =
+ probe_ent->port[0].ctl_addr =
+ pci_resource_start(pdev, 1) | ATA_PCI_CTL_OFS;
+ probe_ent->port[0].bmdma_addr = pci_resource_start(pdev, 4);
+ probe_ent->port[0].scr_addr = base + sil_port[0].scr;
+ ata_std_ports(&probe_ent->port[0]);
+
+ probe_ent->port[1].cmd_addr = pci_resource_start(pdev, 2);
+ probe_ent->port[1].altstatus_addr =
+ probe_ent->port[1].ctl_addr =
+ pci_resource_start(pdev, 3) | ATA_PCI_CTL_OFS;
+ probe_ent->port[1].bmdma_addr = pci_resource_start(pdev, 4) + 8;
+ probe_ent->port[1].scr_addr = base + sil_port[1].scr;
+ ata_std_ports(&probe_ent->port[1]);
+
}
sil_init_controller(pdev, probe_ent->n_ports, probe_ent->host_flags,
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-08-22 21:58 ` Kevin Hilman
@ 2006-08-23 3:24 ` Tejun Heo
2006-08-23 3:52 ` Tejun Heo
2006-09-07 23:05 ` Kevin Hilman
0 siblings, 2 replies; 17+ messages in thread
From: Tejun Heo @ 2006-08-23 3:24 UTC (permalink / raw)
To: Kevin Hilman; +Cc: linux-ide, Deepak Saxena
Kevin Hilman wrote:
> Tejun Heo wrote:
>> Kevin Hilman wrote:
>>>>> I've personally seen it working on XScale and ATI's mips.
>>>
>>> OK, that's good to know.
>>>
>>>> For the record, for ATI's new mips platform, sata_sil needs some
>>>> modifications. Their PCI bridge can't handle byte-aligned mmio and
>>>> the driver had to be modified to use IO address space.
>>>
>>> I'm using 2.6.18-rc4 on this XScale IXP425 (big endian) and both the
>>> legacy driver (drivers/ide/pci/siimage.c) and the libata driver
>>> (drivers/scsi/sata_sil.c) cause crashes during probing due to bad
>>> memory accesses.
>>
>> So, that one can't do byte-aligned mmio either?
>>
>>> Switching the legacy driver into PIO mode makes the probing work
>>> well, but still can't figure out what's happening in the libata
>>> driver, AFICT, it can't do PIO.
>>
>> By PIO, you mean accessing registers via IO address space instead of
>> memory address space, right? Not PIO as opposed to DMA.
>
> yes, I mean using PCI IO address space.
>
>>> Any chance you can share the changes to use IO address space? Maybe
>>> the PCI on this XScale has similar limitations.
>>
>> Sure, I've just got okay for releasing the code and am going to post
>> the patches on my website anyway. I'm attaching a patch. This might
>> not apply cleanly to your kernel but it should give enough idea. Oh
>> the code kills 4 ports support for 3114 too.
>
> OK, tweaking your patch onto 2.6.18-rc4, I've got it to work using IO
> address space. My patch attached for reference. FYI, in addition to
> your changes, I also had to change the data_xfer method to use
> ata_pio_data_xfer instead of ata_mmio_data_xfer which was faulting since
> my arch doesn't have direct memory access to IO space.
Ah... right. ATI is okay with work/double word aligned PIO, so I didn't
notice it.
Thanks.
--
tejun
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-08-23 3:24 ` Tejun Heo
@ 2006-08-23 3:52 ` Tejun Heo
2006-09-07 23:05 ` Kevin Hilman
1 sibling, 0 replies; 17+ messages in thread
From: Tejun Heo @ 2006-08-23 3:52 UTC (permalink / raw)
To: Kevin Hilman; +Cc: linux-ide, Deepak Saxena
Tejun Heo wrote:
> Kevin Hilman wrote:
>> Tejun Heo wrote:
>>> Kevin Hilman wrote:
>>>>>> I've personally seen it working on XScale and ATI's mips.
>>>>
>>>> OK, that's good to know.
>>>>
>>>>> For the record, for ATI's new mips platform, sata_sil needs some
>>>>> modifications. Their PCI bridge can't handle byte-aligned mmio and
>>>>> the driver had to be modified to use IO address space.
>>>>
>>>> I'm using 2.6.18-rc4 on this XScale IXP425 (big endian) and both the
>>>> legacy driver (drivers/ide/pci/siimage.c) and the libata driver
>>>> (drivers/scsi/sata_sil.c) cause crashes during probing due to bad
>>>> memory accesses.
>>>
>>> So, that one can't do byte-aligned mmio either?
>>>
>>>> Switching the legacy driver into PIO mode makes the probing work
>>>> well, but still can't figure out what's happening in the libata
>>>> driver, AFICT, it can't do PIO.
>>>
>>> By PIO, you mean accessing registers via IO address space instead of
>>> memory address space, right? Not PIO as opposed to DMA.
>>
>> yes, I mean using PCI IO address space.
>>
>>>> Any chance you can share the changes to use IO address space? Maybe
>>>> the PCI on this XScale has similar limitations.
>>>
>>> Sure, I've just got okay for releasing the code and am going to post
>>> the patches on my website anyway. I'm attaching a patch. This might
>>> not apply cleanly to your kernel but it should give enough idea. Oh
>>> the code kills 4 ports support for 3114 too.
>>
>> OK, tweaking your patch onto 2.6.18-rc4, I've got it to work using IO
>> address space. My patch attached for reference. FYI, in addition to
>> your changes, I also had to change the data_xfer method to use
>> ata_pio_data_xfer instead of ata_mmio_data_xfer which was faulting
>> since my arch doesn't have direct memory access to IO space.
>
> Ah... right. ATI is okay with work/double word aligned PIO, so I didn't
> notice it.
s/work/word/
s/PIO/mmio/
Sorry. Just woke up and before coffee.
--
tejun
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-08-23 3:24 ` Tejun Heo
2006-08-23 3:52 ` Tejun Heo
@ 2006-09-07 23:05 ` Kevin Hilman
2006-09-08 1:46 ` Jeff Garzik
1 sibling, 1 reply; 17+ messages in thread
From: Kevin Hilman @ 2006-09-07 23:05 UTC (permalink / raw)
To: Tejun Heo; +Cc: linux-ide
Tejun Heo wrote:
> Kevin Hilman wrote:
>> Tejun Heo wrote:
>>> Kevin Hilman wrote:
>>>>>> I've personally seen it working on XScale and ATI's mips.
>>>>
>>>> OK, that's good to know.
>>>>
>>>>> For the record, for ATI's new mips platform, sata_sil needs some
>>>>> modifications. Their PCI bridge can't handle byte-aligned mmio and
>>>>> the driver had to be modified to use IO address space.
>>>>
>>>> I'm using 2.6.18-rc4 on this XScale IXP425 (big endian) and both the
>>>> legacy driver (drivers/ide/pci/siimage.c) and the libata driver
>>>> (drivers/scsi/sata_sil.c) cause crashes during probing due to bad
>>>> memory accesses.
>>>
>>> So, that one can't do byte-aligned mmio either?
>>>
>>>> Switching the legacy driver into PIO mode makes the probing work
>>>> well, but still can't figure out what's happening in the libata
>>>> driver, AFICT, it can't do PIO.
>>>
>>> By PIO, you mean accessing registers via IO address space instead of
>>> memory address space, right? Not PIO as opposed to DMA.
>>
>> yes, I mean using PCI IO address space.
>>
>>>> Any chance you can share the changes to use IO address space? Maybe
>>>> the PCI on this XScale has similar limitations.
>>>
>>> Sure, I've just got okay for releasing the code and am going to post
>>> the patches on my website anyway. I'm attaching a patch. This might
>>> not apply cleanly to your kernel but it should give enough idea. Oh
>>> the code kills 4 ports support for 3114 too.
>>
>> OK, tweaking your patch onto 2.6.18-rc4, I've got it to work using IO
>> address space. My patch attached for reference. FYI, in addition to
>> your changes, I also had to change the data_xfer method to use
>> ata_pio_data_xfer instead of ata_mmio_data_xfer which was faulting
>> since my arch doesn't have direct memory access to IO space.
>
> Ah... right. ATI is okay with work/double word aligned PIO, so I didn't
> notice it.
I've now been using a patched sata_sil driver for a while to support PCI
IO space on my embedded ARM target. Do you have any plans of pushing
support for this upstream?
Kevin
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-09-07 23:05 ` Kevin Hilman
@ 2006-09-08 1:46 ` Jeff Garzik
2006-09-08 7:27 ` Tejun Heo
0 siblings, 1 reply; 17+ messages in thread
From: Jeff Garzik @ 2006-09-08 1:46 UTC (permalink / raw)
To: Kevin Hilman; +Cc: Tejun Heo, linux-ide
Kevin Hilman wrote:
> I've now been using a patched sata_sil driver for a while to support PCI
> IO space on my embedded ARM target. Do you have any plans of pushing
> support for this upstream?
MMIO doesn't work at all?
I'm a bit reluctant to push this into mainline, particularly when I feel
that the sata_sil driver could still be updated to use only 32-bit MMIO
transactions without much problem.
Jeff
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-09-08 1:46 ` Jeff Garzik
@ 2006-09-08 7:27 ` Tejun Heo
2006-09-08 12:00 ` Jeff Garzik
2006-09-08 16:29 ` Kevin Hilman
0 siblings, 2 replies; 17+ messages in thread
From: Tejun Heo @ 2006-09-08 7:27 UTC (permalink / raw)
To: Jeff Garzik; +Cc: Kevin Hilman, linux-ide
Jeff Garzik wrote:
> Kevin Hilman wrote:
>> I've now been using a patched sata_sil driver for a while to support PCI
>> IO space on my embedded ARM target. Do you have any plans of pushing
>> support for this upstream?
>
> MMIO doesn't work at all?
>
> I'm a bit reluctant to push this into mainline, particularly when I feel
> that the sata_sil driver could still be updated to use only 32-bit MMIO
> transactions without much problem.
Hello, Kevin, Jeff.
IIRC, Kevin's platform can't do any MMIO. Also, although sata_sil can
be made to use 32-bit address space exclusively, I think having PIO
access in the meantime can be helpful to many newer ATI mips platforms
out there. Please note that w/ ioread/write change, the modified code
is isolated into init_one(), so the added complexity is small.
Thanks.
--
tejun
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-09-08 7:27 ` Tejun Heo
@ 2006-09-08 12:00 ` Jeff Garzik
2006-09-08 16:29 ` Kevin Hilman
1 sibling, 0 replies; 17+ messages in thread
From: Jeff Garzik @ 2006-09-08 12:00 UTC (permalink / raw)
To: Tejun Heo; +Cc: Kevin Hilman, linux-ide
Tejun Heo wrote:
> IIRC, Kevin's platform can't do any MMIO. Also, although sata_sil can
> be made to use 32-bit address space exclusively, I think having PIO
> access in the meantime can be helpful to many newer ATI mips platforms
> out there. Please note that w/ ioread/write change, the modified code
> is isolated into init_one(), so the added complexity is small.
Having PIO but not MMIO is _highly_ irregular, especially for non-x86
platforms. MMIO is much more common because it is easier to implement
in hardware than PIO.
As an aside: We should add a 32-bit variant of ->data_xfer hooks, and
use where appropriate.
Jeff
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-09-08 7:27 ` Tejun Heo
2006-09-08 12:00 ` Jeff Garzik
@ 2006-09-08 16:29 ` Kevin Hilman
2006-09-08 16:40 ` Sergei Shtylyov
1 sibling, 1 reply; 17+ messages in thread
From: Kevin Hilman @ 2006-09-08 16:29 UTC (permalink / raw)
To: Tejun Heo; +Cc: Jeff Garzik, linux-ide
Tejun Heo wrote:
> Jeff Garzik wrote:
>> Kevin Hilman wrote:
>>> I've now been using a patched sata_sil driver for a while to support PCI
>>> IO space on my embedded ARM target. Do you have any plans of pushing
>>> support for this upstream?
>>
>> MMIO doesn't work at all?
>>
>> I'm a bit reluctant to push this into mainline, particularly when I
>> feel that the sata_sil driver could still be updated to use only
>> 32-bit MMIO transactions without much problem.
>
> Hello, Kevin, Jeff.
>
> IIRC, Kevin's platform can't do any MMIO.
Actually, this platform (XScale IXP425, big-endian) can do MMIO. I have
an e100 PCI card on this board where the driver is using MMIO. I also
have a Promise Ultra133 PCI card, but not sure if that driver is using
memory space or IO space.
Kevin
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: PCI SATA controllers on embedded, no-BIOS targets
2006-09-08 16:29 ` Kevin Hilman
@ 2006-09-08 16:40 ` Sergei Shtylyov
0 siblings, 0 replies; 17+ messages in thread
From: Sergei Shtylyov @ 2006-09-08 16:40 UTC (permalink / raw)
To: Kevin Hilman; +Cc: Tejun Heo, Jeff Garzik, linux-ide
Hello.
Kevin Hilman wrote:
>>>>I've now been using a patched sata_sil driver for a while to support PCI
>>>>IO space on my embedded ARM target. Do you have any plans of pushing
>>>>support for this upstream?
>>>MMIO doesn't work at all?
>>>I'm a bit reluctant to push this into mainline, particularly when I
>>>feel that the sata_sil driver could still be updated to use only
>>>32-bit MMIO transactions without much problem.
>>Hello, Kevin, Jeff.
>>IIRC, Kevin's platform can't do any MMIO.
> Actually, this platform (XScale IXP425, big-endian) can do MMIO. I have
> an e100 PCI card on this board where the driver is using MMIO. I also
> have a Promise Ultra133 PCI card, but not sure if that driver is using
> memory space or IO space.
The legacy driver uses strictly I/O space; libata one uses MMIO but I
guess you haven't tried that one...
WBR, Sergei
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2006-09-08 16:38 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-22 16:37 PCI SATA controllers on embedded, no-BIOS targets Kevin Hilman
2006-08-22 16:41 ` Tejun Heo
2006-08-22 16:52 ` Kevin Hilman
2006-08-22 17:26 ` Tejun Heo
2006-08-22 17:31 ` Tejun Heo
2006-08-22 17:37 ` Kevin Hilman
2006-08-22 18:00 ` Tejun Heo
2006-08-22 18:02 ` Tejun Heo
2006-08-22 21:58 ` Kevin Hilman
2006-08-23 3:24 ` Tejun Heo
2006-08-23 3:52 ` Tejun Heo
2006-09-07 23:05 ` Kevin Hilman
2006-09-08 1:46 ` Jeff Garzik
2006-09-08 7:27 ` Tejun Heo
2006-09-08 12:00 ` Jeff Garzik
2006-09-08 16:29 ` Kevin Hilman
2006-09-08 16:40 ` Sergei Shtylyov
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).