<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel about="http://blog.gmane.org/gmane.linux.ide">
    <title>gmane.linux.ide</title>
    <link>http://blog.gmane.org/gmane.linux.ide</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36412"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36411"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36410"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36409"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36408"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36407"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36406"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36405"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36404"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36403"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36402"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36401"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36400"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36399"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36398"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36397"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36396"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36394"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36393"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.ide/36392"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36412">
    <title>Re: Promise PDC20376</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36412</link>
    <description>
A small update to this. It seems the above mentioned interrupt fails
somewhere around the 128GB boundary. Interrupt 13h, AH=42 uses a 64
bit sector address and should be capable of addressing the entire
drive. For a SATA controller, this limitation seems relatively
arbitrary. For IDE controllers, a limitation such as this is
apparently common.

Regards,

David Ellingsworth
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>David Ellingsworth</dc:creator>
    <dc:date>2008-12-02T01:43:38</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36411">
    <title>Re: [PATCH #upstream-fixes] ata_piix: add borked Tecra M4 to broken suspend list</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36411</link>
    <description>
applied


--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Jeff Garzik</dc:creator>
    <dc:date>2008-12-01T19:24:44</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36410">
    <title>Re: [PATCH] pata-rb532-cf: fix signature of the xfer function</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36410</link>
    <description>
applied


--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Jeff Garzik</dc:creator>
    <dc:date>2008-12-01T19:24:35</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36409">
    <title>Re: [PATCH] pata-rb532-cf: fix and rename register definitions</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36409</link>
    <description>
applied


--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Jeff Garzik</dc:creator>
    <dc:date>2008-12-01T19:24:25</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36408">
    <title>Re: [PATCH #upstream-fixes] libata: blacklist Seagate drives which time out FLUSH_CACHE when used with NCQ</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36408</link>
    <description>
applied


--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Jeff Garzik</dc:creator>
    <dc:date>2008-12-01T19:24:15</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36407">
    <title>[git patches] libata fixes</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36407</link>
    <description>
1) pata_rb532_cf significant fixes
2) laptop- and drive-specific workarounds

Please pull from 'upstream-linus' branch of
master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git upstream-linus

to receive the following updates:

 drivers/ata/ata_piix.c      |   15 +++++++++++++++
 drivers/ata/libata-core.c   |   21 +++++++++++++++++++++
 drivers/ata/pata_rb532_cf.c |   15 ++++++++++-----
 include/linux/libata.h      |    1 +
 4 files changed, 47 insertions(+), 5 deletions(-)

Phil Sutter (2):
      [libata] pata_rb532_cf: fix and rename register definitions
      [libata] pata_rb532_cf: fix signature of the xfer function

Tejun Heo (2):
      ata_piix: add borked Tecra M4 to broken suspend list
      libata: blacklist Seagate drives which time out FLUSH_CACHE when used with NCQ

diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index 8e37be1..d6d97d8 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
&lt; at &gt;&lt; at &gt; -1066,6 +1066,21 &lt; at &gt;&lt; at &gt; static int piix_broken_suspend(void)
 if (dmi_find_device(DMI_DEV_TYPE_OEM_STRING, oemstrs[i], NULL))
 return 1;
 
+/* TECRA M4 sometimes forgets its identify and reports bogus
+ * DMI information.  As the bogus information is a bit
+ * generic, match as many entries as possible.  This manual
+ * matching is necessary because dmi_system_id.matches is
+ * limited to four entries.
+ */
+if (!strcmp(dmi_get_system_info(DMI_SYS_VENDOR), "TOSHIBA") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_PRODUCT_NAME), "000000") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_PRODUCT_VERSION), "000000") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_PRODUCT_SERIAL), "000000") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_BOARD_VENDOR), "TOSHIBA") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_BOARD_NAME), "Portable PC") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_BOARD_VERSION), "Version A0"))
+return 1;
+
 return 0;
 }
 
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 4214bfb..5e2eb74 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
&lt; at &gt;&lt; at &gt; -2492,6 +2492,13 &lt; at &gt;&lt; at &gt; int ata_dev_configure(struct ata_device *dev)
 }
 }
 
+if ((dev-&gt;horkage &amp; ATA_HORKAGE_FIRMWARE_WARN) &amp;&amp; print_info) {
+ata_dev_printk(dev, KERN_WARNING, "WARNING: device requires "
+       "firmware update to be fully functional.\n");
+ata_dev_printk(dev, KERN_WARNING, "         contact the vendor "
+       "or visit http://ata.wiki.kernel.org.\n");
+}
+
 return 0;
 
 err_out_nosup:
&lt; at &gt;&lt; at &gt; -4042,6 +4049,20 &lt; at &gt;&lt; at &gt; static const struct ata_blacklist_entry ata_device_blacklist [] = {
 { "ST380817AS","3.42",ATA_HORKAGE_NONCQ },
 { "ST3160023AS","3.42",ATA_HORKAGE_NONCQ },
 
+/* Seagate NCQ + FLUSH CACHE firmware bug */
+{ "ST31500341AS","9JU138",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+{ "ST31000333AS","9FZ136",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+{ "ST3640623AS","9FZ164",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+{ "ST3640323AS","9FZ134",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+{ "ST3320813AS","9FZ182",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+{ "ST3320613AS","9FZ162",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+
 /* Blacklist entries taken from Silicon Image 3124/3132
    Windows driver .inf file - also several Linux problem reports */
 { "HTS541060G9SA00",    "MB3OC60D",     ATA_HORKAGE_NONCQ, },
diff --git a/drivers/ata/pata_rb532_cf.c b/drivers/ata/pata_rb532_cf.c
index f8b3ffc..c2e6fb9 100644
--- a/drivers/ata/pata_rb532_cf.c
+++ b/drivers/ata/pata_rb532_cf.c
&lt; at &gt;&lt; at &gt; -39,9 +39,11 &lt; at &gt;&lt; at &gt;
 #define RB500_CF_MAXPORTS1
 #define RB500_CF_IO_DELAY400
 
-#define RB500_CF_REG_CMD0x0800
+#define RB500_CF_REG_BASE0x0800
+#define RB500_CF_REG_ERR0x080D
 #define RB500_CF_REG_CTRL0x080E
-#define RB500_CF_REG_DATA0x0C00
+/* 32bit buffered data register offset */
+#define RB500_CF_REG_DBUF320x0C00
 
 struct rb532_cf_info {
 void __iomem*iobase;
&lt; at &gt;&lt; at &gt; -72,11 +74,12 &lt; at &gt;&lt; at &gt; static void rb532_pata_exec_command(struct ata_port *ap,
 rb532_pata_finish_io(ap);
 }
 
-static void rb532_pata_data_xfer(struct ata_device *adev, unsigned char *buf,
+static unsigned int rb532_pata_data_xfer(struct ata_device *adev, unsigned char *buf,
 unsigned int buflen, int write_data)
 {
 struct ata_port *ap = adev-&gt;link-&gt;ap;
 void __iomem *ioaddr = ap-&gt;ioaddr.data_addr;
+int retlen = buflen;
 
 if (write_data) {
 for (; buflen &gt; 0; buflen--, buf++)
&lt; at &gt;&lt; at &gt; -87,6 +90,7 &lt; at &gt;&lt; at &gt; static void rb532_pata_data_xfer(struct ata_device *adev, unsigned char *buf,
 }
 
 rb532_pata_finish_io(adev-&gt;link-&gt;ap);
+return retlen;
 }
 
 static void rb532_pata_freeze(struct ata_port *ap)
&lt; at &gt;&lt; at &gt; -146,13 +150,14 &lt; at &gt;&lt; at &gt; static void rb532_pata_setup_ports(struct ata_host *ah)
 ap-&gt;pio_mask= 0x1f; /* PIO4 */
 ap-&gt;flags= ATA_FLAG_NO_LEGACY | ATA_FLAG_MMIO;
 
-ap-&gt;ioaddr.cmd_addr= info-&gt;iobase + RB500_CF_REG_CMD;
+ap-&gt;ioaddr.cmd_addr= info-&gt;iobase + RB500_CF_REG_BASE;
 ap-&gt;ioaddr.ctl_addr= info-&gt;iobase + RB500_CF_REG_CTRL;
 ap-&gt;ioaddr.altstatus_addr = info-&gt;iobase + RB500_CF_REG_CTRL;
 
 ata_sff_std_ports(&amp;ap-&gt;ioaddr);
 
-ap-&gt;ioaddr.data_addr= info-&gt;iobase + RB500_CF_REG_DATA;
+ap-&gt;ioaddr.data_addr= info-&gt;iobase + RB500_CF_REG_DBUF32;
+ap-&gt;ioaddr.error_addr= info-&gt;iobase + RB500_CF_REG_ERR;
 }
 
 static __devinit int rb532_pata_driver_probe(struct platform_device *pdev)
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 59b0f1c..ed3f26e 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
&lt; at &gt;&lt; at &gt; -375,6 +375,7 &lt; at &gt;&lt; at &gt; enum {
 ATA_HORKAGE_BRIDGE_OK= (1 &lt;&lt; 10),/* no bridge limits */
 ATA_HORKAGE_ATAPI_MOD16_DMA = (1 &lt;&lt; 11), /* use ATAPI DMA for commands
     not multiple of 16 bytes */
+ATA_HORKAGE_FIRMWARE_WARN = (1 &lt;&lt; 12),/* firwmare update warning */
 
  /* DMA mask for user DMA control: User visible values; DO NOT
     renumber */
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Jeff Garzik</dc:creator>
    <dc:date>2008-12-01T19:06:53</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36406">
    <title>Re: [PATCH #upstream-fixes] sata_promise: request follow-up SRST</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36406</link>
    <description>Hi Mikael and list,

Mikael Pettersson wrote:
 &gt; ...snip...
 &gt; Testers welcome.

I don't have physical access to my system at the moment, and some 
channels/drives had already failed during previous testing. Without a 
proper power-cycle the system did not recover the failed channels when 
rebooted into 2.6.28-rc6 with your patch :-(

Best regards,

Peter

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Peter Favrholdt</dc:creator>
    <dc:date>2008-11-30T15:06:23</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36405">
    <title>Re: about TRIM/DISCARD support and barriers</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36405</link>
    <description>hello,

Raz Ben-Yehuda wrote:

Not that I know of.


FTL (flash translation layer) in SSDs can do better job if the OS
tells it which area is unused so that the SSD can just drop or
overwrite those regions.

</description>
    <dc:creator>Tejun Heo</dc:creator>
    <dc:date>2008-11-29T22:57:36</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36404">
    <title>Re: [PATCH #upstream-fixes] sata_promise: request follow-up SRST</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36404</link>
    <description> &gt; hrm....   at this point we have deviated massively from the standard 
 &gt; Promise method of hard reset...
 &gt; 
 &gt; * set PMP port
 &gt; * make hotplug irqs
 &gt; * reset port# in PDC_GLOBAL_CTL
 &gt; * pdc_reset_port()
 &gt; * reset FPDMA -- probably a good idea even if not doing FPDMA
 &gt; * clear SATA Error register (0xffffffff)
 &gt; * clear errors-reported-from-link-layer register
 &gt; * wait standard length of time for SATA connection
 &gt; * clear hotplug bits
 &gt; * set PMP port
 &gt; 
 &gt; The PDC_GLOBAL_CTL bitbang is the most notable missing element in the 

I assume you meant the PCI control register (offset 0x48).

 &gt; hard reset path, though we also miss clearing an apparently-important 
 &gt; error register as well.  FPDMA reset would be a good idea I think, even 
 &gt; if not in use, mainly for paranoia's sake and because that's what 
 &gt; Promise's driver does.

Here's a patch on top of 2.6.28-rc6 that should make sata_promise's
reset sequences a closer match to what Promise's drivers do.

- soft reset (pdc_reset_port):
  * wait for ATA engine to not be in packet command mode (2nd gen only)
  * write reset bit in PDC_CTLSTAT before the first read in the loop
  * for 2nd gen SATA follow up with FPDMA reset and clearing error status registers
- hard reset (pdc_sata_hardreset):
  * wait for ATA engine to not be in packet command mode (2nd gen only)
  * reset ATA engine via the PCI control register
  * Tejun's change to use non-waiting hardreset + follow-up SRST

I'm not changing the hotplug mask bits since they are taken care
of by sata_promise's -&gt;freeze() and -&gt;thaw() operations. And I'm
not writing the PMP port # because that's always zero (for now).

Tested here on a SATAII150 TX2plus w/ two sata disks, some hdparm -y
+ smartctl tests which used to cause timeouts on one of those disks,
and some parallel dd:s to stress things a little. No issues found.
I'll test it on a 1st gen 20378 next week.

Testers welcome.

/Mikael

--- linux-2.6.28-rc6/drivers/ata/sata_promise.c.~1~2008-11-29 16:05:04.000000000 +0100
+++ linux-2.6.28-rc6/drivers/ata/sata_promise.c2008-11-29 20:26:26.000000000 +0100
&lt; at &gt;&lt; at &gt; -56,6 +56,7 &lt; at &gt;&lt; at &gt; enum {
 /* host register offsets (from host-&gt;iomap[PDC_MMIO_BAR]) */
 PDC_INT_SEQMASK= 0x40,/* Mask of asserted SEQ INTs */
 PDC_FLASH_CTL= 0x44, /* Flash control register */
+PDC_PCI_CTL= 0x48, /* PCI control/status reg */
 PDC_SATA_PLUG_CSR= 0x6C, /* SATA Plug control/status reg */
 PDC2_SATA_PLUG_CSR= 0x60, /* SATAII Plug control/status reg */
 PDC_TBG_MODE= 0x41C, /* TBG mode (not SATAII) */
&lt; at &gt;&lt; at &gt; -75,7 +76,17 &lt; at &gt;&lt; at &gt; enum {
 PDC_CTLSTAT= 0x60,/* IDE control and status (per port) */
 
 /* per-port SATA register offsets (from ap-&gt;ioaddr.scr_addr) */
+PDC_SATA_ERROR= 0x04,
 PDC_PHYMODE4= 0x14,
+PDC_LINK_LAYER_ERRORS= 0x6C,
+PDC_FPDMA_CTLSTAT= 0xD8,
+PDC_INTERNAL_DEBUG_1= 0xF8,/* also used for PATA */
+PDC_INTERNAL_DEBUG_2= 0xFC,/* also used for PATA */
+
+/* PDC_FPDMA_CTLSTAT bit definitions */
+PDC_FPDMA_CTLSTAT_RESET= 1 &lt;&lt; 3,
+PDC_FPDMA_CTLSTAT_DMASETUP_INT_FLAG= 1 &lt;&lt; 10,
+PDC_FPDMA_CTLSTAT_SETDB_INT_FLAG= 1 &lt;&lt; 11,
 
 /* PDC_GLOBAL_CTL bit definitions */
 PDC_PH_ERR= (1 &lt;&lt;  8), /* PCI error while loading packet */
&lt; at &gt;&lt; at &gt; -354,12 +365,76 &lt; at &gt;&lt; at &gt; static int pdc_sata_port_start(struct at
 return 0;
 }
 
+static void pdc_fpdma_clear_interrupt_flag(struct ata_port *ap)
+{
+void __iomem *sata_mmio = ap-&gt;ioaddr.scr_addr;
+u32 tmp;
+
+tmp = readl(sata_mmio + PDC_FPDMA_CTLSTAT);
+tmp |= PDC_FPDMA_CTLSTAT_DMASETUP_INT_FLAG;
+tmp |= PDC_FPDMA_CTLSTAT_SETDB_INT_FLAG;
+
+/* It's not allowed to write to the entire FPDMA_CTLSTAT register
+   when NCQ is running. So do a byte-sized write to bits 10 and 11. */
+writeb(tmp &gt;&gt; 8, sata_mmio + PDC_FPDMA_CTLSTAT + 1);
+readb(sata_mmio + PDC_FPDMA_CTLSTAT + 1); /* flush */
+}
+
+static void pdc_fpdma_reset(struct ata_port *ap)
+{
+void __iomem *sata_mmio = ap-&gt;ioaddr.scr_addr;
+u8 tmp;
+
+tmp = (u8)readl(sata_mmio + PDC_FPDMA_CTLSTAT);
+tmp &amp;= 0x7F;
+tmp |= PDC_FPDMA_CTLSTAT_RESET;
+writeb(tmp, sata_mmio + PDC_FPDMA_CTLSTAT);
+readl(sata_mmio + PDC_FPDMA_CTLSTAT); /* flush */
+udelay(100);
+tmp &amp;= ~PDC_FPDMA_CTLSTAT_RESET;
+writeb(tmp, sata_mmio + PDC_FPDMA_CTLSTAT);
+readl(sata_mmio + PDC_FPDMA_CTLSTAT); /* flush */
+
+pdc_fpdma_clear_interrupt_flag(ap);
+}
+
+static void pdc_not_at_command_packet_phase(struct ata_port *ap)
+{
+void __iomem *sata_mmio = ap-&gt;ioaddr.scr_addr;
+unsigned int i;
+u32 tmp;
+
+/* check not at ASIC packet command phase */
+for (i = 0; i &lt; 100; ++i) {
+writel(0, sata_mmio + PDC_INTERNAL_DEBUG_1);
+tmp = readl(sata_mmio + PDC_INTERNAL_DEBUG_2);
+if ((tmp &amp; 0xF) != 1)
+break;
+udelay(100);
+}
+}
+
+static void pdc_clear_internal_debug_record_error_register(struct ata_port *ap)
+{
+void __iomem *sata_mmio = ap-&gt;ioaddr.scr_addr;
+
+writel(0xffffffff, sata_mmio + PDC_SATA_ERROR);
+writel(0xffff0000, sata_mmio + PDC_LINK_LAYER_ERRORS);
+}
+
 static void pdc_reset_port(struct ata_port *ap)
 {
 void __iomem *ata_ctlstat_mmio = ap-&gt;ioaddr.cmd_addr + PDC_CTLSTAT;
 unsigned int i;
 u32 tmp;
 
+if (ap-&gt;flags &amp; PDC_FLAG_GEN_II)
+pdc_not_at_command_packet_phase(ap);
+
+tmp = readl(ata_ctlstat_mmio);
+tmp |= PDC_RESET;
+writel(tmp, ata_ctlstat_mmio);
+
 for (i = 11; i &gt; 0; i--) {
 tmp = readl(ata_ctlstat_mmio);
 if (tmp &amp; PDC_RESET)
&lt; at &gt;&lt; at &gt; -374,6 +449,11 &lt; at &gt;&lt; at &gt; static void pdc_reset_port(struct ata_po
 tmp &amp;= ~PDC_RESET;
 writel(tmp, ata_ctlstat_mmio);
 readl(ata_ctlstat_mmio);/* flush */
+
+if (sata_scr_valid(&amp;ap-&gt;link) &amp;&amp; (ap-&gt;flags &amp; PDC_FLAG_GEN_II)) {
+pdc_fpdma_reset(ap);
+pdc_clear_internal_debug_record_error_register(ap);
+}
 }
 
 static int pdc_pata_cable_detect(struct ata_port *ap)
&lt; at &gt;&lt; at &gt; -706,11 +786,50 &lt; at &gt;&lt; at &gt; static int pdc_pata_softreset(struct ata
 return ata_sff_softreset(link, class, deadline);
 }
 
+static unsigned int pdc_ata_port_to_ata_no(const struct ata_port *ap)
+{
+void __iomem *ata_mmio = ap-&gt;ioaddr.cmd_addr;
+void __iomem *host_mmio = ap-&gt;host-&gt;iomap[PDC_MMIO_BAR];
+
+/* ata_mmio == host_mmio + 0x200 + ata_no * 0x80 */
+return (ata_mmio - host_mmio - 0x200) / 0x80;
+}
+
+static void pdc_hard_reset_port(struct ata_port *ap)
+{
+void __iomem *host_mmio = ap-&gt;host-&gt;iomap[PDC_MMIO_BAR];
+void __iomem *pcictl_b1_mmio = host_mmio + PDC_PCI_CTL + 1;
+unsigned int ata_no = pdc_ata_port_to_ata_no(ap);
+u8 tmp;
+
+spin_lock(&amp;ap-&gt;host-&gt;lock);
+
+tmp = readb(pcictl_b1_mmio);
+tmp &amp;= ~(0x10 &lt;&lt; ata_no);
+writeb(tmp, pcictl_b1_mmio);
+readb(pcictl_b1_mmio); /* flush */
+udelay(100);
+tmp |= (0x10 &lt;&lt; ata_no);
+writeb(tmp, pcictl_b1_mmio);
+readb(pcictl_b1_mmio); /* flush */
+
+spin_unlock(&amp;ap-&gt;host-&gt;lock);
+}
+
 static int pdc_sata_hardreset(struct ata_link *link, unsigned int *class,
       unsigned long deadline)
 {
+if (link-&gt;ap-&gt;flags &amp; PDC_FLAG_GEN_II)
+pdc_not_at_command_packet_phase(link-&gt;ap);
+/* hotplug IRQs should have been masked by pdc_sata_freeze() */
+pdc_hard_reset_port(link-&gt;ap);
 pdc_reset_port(link-&gt;ap);
-return sata_sff_hardreset(link, class, deadline);
+
+/* sata_promise can't reliably acquire the first D2H Reg FIS
+ * after hardreset.  Do non-waiting hardreset and request
+ * follow-up SRST.
+ */
+return sata_std_hardreset(link, class, deadline);
 }
 
 static void pdc_error_handler(struct ata_port *ap)
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Mikael Pettersson</dc:creator>
    <dc:date>2008-11-29T21:50:39</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36403">
    <title>PHP購物車資料庫網站專案</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36403</link>
    <description>山鉧科技網頁設計

○我們的宗旨：客戶的每ㄧ件小事情，都是山鉧的大事情

＆我們在推出企業形象網站包含前台網頁美工+後台管理程式

⊕限時限量專案價 只要$29,900

↑(在送ㄧ年100MB不限流量網站空間)

□我們做的不只是網站，而是您企業的入口

※ㄧ個好的企業網站資料即時更新的速度是很重要的

▼企業ｅ化的高品質團隊，打造您的網路門面

￥選擇山鉧成就您的夢想

～～～～～～～～～～～～～～～～～～～～～～～～～～
PS: 線上購物網站我們還可提供刷卡機制，
　　與線上列印帳單全省超商+郵局繳費......等金流服務機制
～～～～～～～～～～～～～～～～～～～～～～～～～～

歡迎來電洽詢黃專員（Sam）：0980119812 / 0938764395

～～～～～～～～～～～～～～～～～～～～～～～～～～
本公司另外提供關鍵字SEO排序服務
保證將您的網站在Yx / Gx ...排在第一頁
　　　　　　　　　　　　　　　　　　 歡迎來電詢問!!!
～～～～～～～～～～～～～～～～～～～～～～～～～～
</description>
    <dc:creator>王冠宇</dc:creator>
    <dc:date>2008-11-29T21:10:21</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36402">
    <title>[PATCH #upstream-fixes] ata_piix: add borked Tecra M4 to broken suspend list</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36402</link>
    <description>Tecra M4 sometimes forget what it is and reports bogus data via DMI
which makes the machine evade broken suspend matching and thus fail
suspend/resume.  This patch updates piix_broken_suspend() such that it
can match such case.  As the borked DMI data is a bit generic,
matching many entries to make the match more specific is necessary.
As the usual DMI matching is limited to four entries, this patch uses
hard coded manual matching.

This is reported by Alexandru Romanescu.

Signed-off-by: Tejun Heo &lt;tj&lt; at &gt;kernel.org&gt;
Cc: Alexandru Romanescu &lt;a_romanescu&lt; at &gt;yahoo.co.uk&gt;
---
 drivers/ata/ata_piix.c |   15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index 8e37be1..d6d97d8 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
&lt; at &gt;&lt; at &gt; -1066,6 +1066,21 &lt; at &gt;&lt; at &gt; static int piix_broken_suspend(void)
 if (dmi_find_device(DMI_DEV_TYPE_OEM_STRING, oemstrs[i], NULL))
 return 1;
 
+/* TECRA M4 sometimes forgets its identify and reports bogus
+ * DMI information.  As the bogus information is a bit
+ * generic, match as many entries as possible.  This manual
+ * matching is necessary because dmi_system_id.matches is
+ * limited to four entries.
+ */
+if (!strcmp(dmi_get_system_info(DMI_SYS_VENDOR), "TOSHIBA") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_PRODUCT_NAME), "000000") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_PRODUCT_VERSION), "000000") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_PRODUCT_SERIAL), "000000") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_BOARD_VENDOR), "TOSHIBA") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_BOARD_NAME), "Portable PC") &amp;&amp;
+    !strcmp(dmi_get_system_info(DMI_BOARD_VERSION), "Version A0"))
+return 1;
+
 return 0;
 }
 
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Tejun Heo</dc:creator>
    <dc:date>2008-11-29T13:37:21</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36401">
    <title>[PATCH] pata-rb532-cf: read/write data in 4-byte blocks</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36401</link>
    <description>* rename the offset definition to avoid abiguity with the standard ATA
  IO address
* read and write four bytes at once like the original driver does
* use writesl() and readsl() which implicitly iterate over the data

This patch assumes buflen to be a multiple of four, which is true for
ATA devices. ATAPI support is not known, though unlikely, as the
original driver always transfers 512 Bytes at once. In doubt, do the
right thing and return the number of bytes actually consumed.

Signed-off-by: Phil Sutter &lt;n0-1&lt; at &gt;freewrt.org&gt;
Acked-by: Sergei Shtyltov &lt;sshtylyov&lt; at &gt;ru.mvista.com&gt;
Acked-by: Bartlomiej Zolnierkiewicz &lt;bzolnier&lt; at &gt;gmail.com&gt;
Acked-by: Florian Fainelli &lt;florian&lt; at &gt;openwrt.org&gt;
---
 drivers/ata/pata_rb532_cf.c |   14 +++++---------
 1 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/drivers/ata/pata_rb532_cf.c b/drivers/ata/pata_rb532_cf.c
index c2e6fb9..362af11 100644
--- a/drivers/ata/pata_rb532_cf.c
+++ b/drivers/ata/pata_rb532_cf.c
&lt; at &gt;&lt; at &gt; -79,18 +79,14 &lt; at &gt;&lt; at &gt; static unsigned int rb532_pata_data_xfer(struct ata_device *adev, unsigned char
 {
 struct ata_port *ap = adev-&gt;link-&gt;ap;
 void __iomem *ioaddr = ap-&gt;ioaddr.data_addr;
-int retlen = buflen;
 
-if (write_data) {
-for (; buflen &gt; 0; buflen--, buf++)
-writeb(*buf, ioaddr);
-} else {
-for (; buflen &gt; 0; buflen--, buf++)
-*buf = readb(ioaddr);
-}
+if (write_data)
+writesl(ioaddr, buf, buflen / sizeof(u32));
+else
+readsl(ioaddr, buf, buflen / sizeof(u32));
 
 rb532_pata_finish_io(adev-&gt;link-&gt;ap);
-return retlen;
+return buflen - buflen % sizeof(u32);
 }
 
 static void rb532_pata_freeze(struct ata_port *ap)
</description>
    <dc:creator>Phil Sutter</dc:creator>
    <dc:date>2008-11-28T19:48:43</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36400">
    <title>[PATCH] pata-rb532-cf: fix signature of the xfer function</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36400</link>
    <description>Per definition, this function should return the number of bytes
consumed. As the original parameter "buflen" is being decremented inside
the read/write loop, save it in "retlen" at the beginning.

Signed-off-by: Phil Sutter &lt;n0-1&lt; at &gt;freewrt.org&gt;
Acked-by: Sergei Shtyltov &lt;sshtylyov&lt; at &gt;ru.mvista.com&gt;
Acked-by: Bartlomiej Zolnierkiewicz &lt;bzolnier&lt; at &gt;gmail.com&gt;
Acked-by: Florian Fainelli &lt;florian&lt; at &gt;openwrt.org&gt;
---
 drivers/ata/pata_rb532_cf.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/ata/pata_rb532_cf.c b/drivers/ata/pata_rb532_cf.c
index 392116c..c2e6fb9 100644
--- a/drivers/ata/pata_rb532_cf.c
+++ b/drivers/ata/pata_rb532_cf.c
&lt; at &gt;&lt; at &gt; -74,11 +74,12 &lt; at &gt;&lt; at &gt; static void rb532_pata_exec_command(struct ata_port *ap,
 rb532_pata_finish_io(ap);
 }
 
-static void rb532_pata_data_xfer(struct ata_device *adev, unsigned char *buf,
+static unsigned int rb532_pata_data_xfer(struct ata_device *adev, unsigned char *buf,
 unsigned int buflen, int write_data)
 {
 struct ata_port *ap = adev-&gt;link-&gt;ap;
 void __iomem *ioaddr = ap-&gt;ioaddr.data_addr;
+int retlen = buflen;
 
 if (write_data) {
 for (; buflen &gt; 0; buflen--, buf++)
&lt; at &gt;&lt; at &gt; -89,6 +90,7 &lt; at &gt;&lt; at &gt; static void rb532_pata_data_xfer(struct ata_device *adev, unsigned char *buf,
 }
 
 rb532_pata_finish_io(adev-&gt;link-&gt;ap);
+return retlen;
 }
 
 static void rb532_pata_freeze(struct ata_port *ap)
</description>
    <dc:creator>Phil Sutter</dc:creator>
    <dc:date>2008-11-28T19:48:35</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36399">
    <title>[PATCH] pata-rb532-cf: fix and rename register definitions</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36399</link>
    <description>The original standalone driver uses a custom address for the error
register. Use it in pata-rb532-cf, too.

Rename two register definitions:
- The address offset 0x0800 in fact is the ATA base, not ATA command
  address.
- The offset 0x0C00 is not a regular ATA data address, but a buffered one
  allowing 4-byte IO.

Signed-off-by: Phil Sutter &lt;n0-1&lt; at &gt;freewrt.org&gt;
---
 drivers/ata/pata_rb532_cf.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/ata/pata_rb532_cf.c b/drivers/ata/pata_rb532_cf.c
index f8b3ffc..392116c 100644
--- a/drivers/ata/pata_rb532_cf.c
+++ b/drivers/ata/pata_rb532_cf.c
&lt; at &gt;&lt; at &gt; -39,9 +39,11 &lt; at &gt;&lt; at &gt;
 #define RB500_CF_MAXPORTS1
 #define RB500_CF_IO_DELAY400
 
-#define RB500_CF_REG_CMD0x0800
+#define RB500_CF_REG_BASE0x0800
+#define RB500_CF_REG_ERR0x080D
 #define RB500_CF_REG_CTRL0x080E
-#define RB500_CF_REG_DATA0x0C00
+/* 32bit buffered data register offset */
+#define RB500_CF_REG_DBUF320x0C00
 
 struct rb532_cf_info {
 void __iomem*iobase;
&lt; at &gt;&lt; at &gt; -146,13 +148,14 &lt; at &gt;&lt; at &gt; static void rb532_pata_setup_ports(struct ata_host *ah)
 ap-&gt;pio_mask= 0x1f; /* PIO4 */
 ap-&gt;flags= ATA_FLAG_NO_LEGACY | ATA_FLAG_MMIO;
 
-ap-&gt;ioaddr.cmd_addr= info-&gt;iobase + RB500_CF_REG_CMD;
+ap-&gt;ioaddr.cmd_addr= info-&gt;iobase + RB500_CF_REG_BASE;
 ap-&gt;ioaddr.ctl_addr= info-&gt;iobase + RB500_CF_REG_CTRL;
 ap-&gt;ioaddr.altstatus_addr = info-&gt;iobase + RB500_CF_REG_CTRL;
 
 ata_sff_std_ports(&amp;ap-&gt;ioaddr);
 
-ap-&gt;ioaddr.data_addr= info-&gt;iobase + RB500_CF_REG_DATA;
+ap-&gt;ioaddr.data_addr= info-&gt;iobase + RB500_CF_REG_DBUF32;
+ap-&gt;ioaddr.error_addr= info-&gt;iobase + RB500_CF_REG_ERR;
 }
 
 static __devinit int rb532_pata_driver_probe(struct platform_device *pdev)
</description>
    <dc:creator>Phil Sutter</dc:creator>
    <dc:date>2008-11-28T19:48:26</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36398">
    <title>Re: MIPS: RB532: Provide functions for gpio configuration</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36398</link>
    <description>Hi!

I fullquote here because of the lists and people added to Cc.

On Thu, Nov 20, 2008 at 08:02:15PM -0800, David Brownell wrote:

Thanks for your hints, Dave. I already had a patch flying around adding
a set_type() function to the irq_chip (merely a dummy to shut up
warnings in the boot log). After extending it to cover the needs of the
mapped GPIO pins and some other work, I could drop that CompactFlash
initialisation code in gpio.c completely.

As a side effect, many of my changes to pata-rb532-cf got unnecessary
which I consider a very good sign.

I'll reply to this mail with the relevant patches for each list and
maintainer. 

Greetings, Phil
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Phil Sutter</dc:creator>
    <dc:date>2008-11-28T19:35:57</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36397">
    <title>RE: about TRIM/DISCARD support and barriers</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36397</link>
    <description>
Tejun Hello
Is there a WIKI for SSD disk in Linux?
I want to understand what is the rational for the OS intervention. Why
and when you discard, fsck changes, why and how IO scheduling is
changed...
Thank you

-----Original Message-----
From: linux-ide-owner&lt; at &gt;vger.kernel.org
[mailto:linux-ide-owner&lt; at &gt;vger.kernel.org] On Behalf Of Tejun Heo
Sent: Sunday, November 23, 2008 6:46 AM
To: Linux Kernel Mailing List; dwmw2&lt; at &gt;infradead.org; Nick Piggin; Jens
Axboe; IDE/ATA development list; Jeff Garzik; Dongjun Shin;
chris.mason&lt; at &gt;oracle.com; Jens Axboe
Subject: about TRIM/DISCARD support and barriers

Hello, all.

Dongjun Shin who works for Samsung SSD dep asked me about libata TRIM
support and pointed me to the new DISCARD support David Woodhouse got
merged for 2.6.28.  I took a look at the code and blk-layer
interface-wise we seemed to be ready both for filesystems and userland
(so that fsck or something which runs background can mark unused
blocks) but there doesn't seem to be any low level driver which
actually implements -&gt;prepare_discard_fn or fs which sets the DISCARD
flag.

Adding -&gt;prepare_discard_fn wouldn't be difficult at all but I became
curious about a few things after looking at the DISCARD interface.
First of all - how to avoid racing aginst reusing and how to schedule
DISCARDs.

* There are two variants of DISCARD - DISCARD w/o barrier and DISCARD
  w/ barrier, if a fs uses the former, it would need to make sure that
  it the DISCARD finishes before re-using the block.  Block layer will
  make sure order will be kept for the latter but depending on how
  often those DICARDs are issued it can disrupt IO scheduling.

* It looks like non-barrier DISCARD will be put into the IO sched and
  scheduled the same way as regular IOs.  I don't relly think this is
  necessary or a good idea.  DISCARDs probably don't need any kind of
  sorting anyway and it's likely to disrupt IO sched heuristics.
  Also, DISCARDs can be postponed w/o affecting correct operation.
  However, DISCARDs are not likely to take a long time and we might
  not have to worry about it too much unless it starves regular IOs.

With the above three points, I think it might be better to make block
layer manage and order DISCARD requests than putting it onto the
filesystem or barrier mechanism.  If block layer manages map of
pending DISCARDs and FSes just tell block layer newly freed blocks,
block layer can schedule DISCARDs as it sees fit and cancels pending
ones if IO access to it occurs before the DISCARD is issued to the
drive.  This way, adding DISCARD support to FSes become much easier -
it can just put blk_discard(lba, range) where it's discarding blocks
and don't have to worry about ordering or error handling.

What do you think?

Also, I have a question regarding the current barrier implementation.
When I asked it to Chris Mason some time ago, I was told that btrfs
doesn't really make use of barrier in that btrfs itself waits for the
barrier to complete before proceeding.  I've been thinking about
colored barrier implementation because I heard that the current
barrier ordering is too crude or heavy handed.  But, then again, if
the filesystem waits for requests to complete itself and those
dependent requests are marked SYNC as necessary so that they don't get
postponed too much, all that's needed is flush cache.  Doing it that
way will add a bit of latency but as long as things can progress in
parallel, it will probably perform better than the current barrier.

After all, it's not like we have selective FLUSH on actual devices
anyway.  Where the selective barriering can make difference is how
it's handled in the IO scheduler and FS waiting for requests to finish
and then issuing barrier achieves that quite alright and communicating
the partitial ordering of requests to block layer wouldn't be much
simpler than doing it in FS proper and there's also the problem of how
to communicate or handle when one of the request in the partial
ordering fails.  So, would selective / more intelligent barrier be
beneficial to filesystems or is the way things are just fine?

Thanks.

</description>
    <dc:creator>Raz Ben-Yehuda</dc:creator>
    <dc:date>2008-11-28T13:21:45</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36396">
    <title>Re: [PATCH #upstraem-fixes] ata_piix: detect and clear spurious IRQs</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36396</link>
    <description>
OSDL bz#10884 seems to suffer similar problem.  The patch fixes it.

  http://bugzilla.kernel.org/show_bug.cgi?id=10884

We definitely need to do something about it.

</description>
    <dc:creator>Tejun Heo</dc:creator>
    <dc:date>2008-11-28T02:31:31</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36394">
    <title>[PATCH #upstream-fixes] libata: blacklist Seagate drives which time out FLUSH_CACHE when used with NCQ</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36394</link>
    <description>Some recent Seagate harddrives have firmware bug which causes FLUSH
CACHE to timeout under certain circumstances if NCQ is being used.
This can be worked around by disabling NCQ and fixed by updating the
firmware.  Implement ATA_HORKAGE_FIRMWARE_UPDATE and blacklist these
devices.

The wiki page has been updated to contain information on this issue.

  http://ata.wiki.kernel.org/index.php/Known_issues

Signed-off-by: Tejun Heo &lt;tj&lt; at &gt;kernel.org&gt;
---
 drivers/ata/libata-core.c |   21 +++++++++++++++++++++
 include/linux/libata.h    |    1 +
 2 files changed, 22 insertions(+)

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 4214bfb..5e2eb74 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
&lt; at &gt;&lt; at &gt; -2492,6 +2492,13 &lt; at &gt;&lt; at &gt; int ata_dev_configure(struct ata_device *dev)
 }
 }
 
+if ((dev-&gt;horkage &amp; ATA_HORKAGE_FIRMWARE_WARN) &amp;&amp; print_info) {
+ata_dev_printk(dev, KERN_WARNING, "WARNING: device requires "
+       "firmware update to be fully functional.\n");
+ata_dev_printk(dev, KERN_WARNING, "         contact the vendor "
+       "or visit http://ata.wiki.kernel.org.\n");
+}
+
 return 0;
 
 err_out_nosup:
&lt; at &gt;&lt; at &gt; -4042,6 +4049,20 &lt; at &gt;&lt; at &gt; static const struct ata_blacklist_entry ata_device_blacklist [] = {
 { "ST380817AS","3.42",ATA_HORKAGE_NONCQ },
 { "ST3160023AS","3.42",ATA_HORKAGE_NONCQ },
 
+/* Seagate NCQ + FLUSH CACHE firmware bug */
+{ "ST31500341AS","9JU138",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+{ "ST31000333AS","9FZ136",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+{ "ST3640623AS","9FZ164",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+{ "ST3640323AS","9FZ134",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+{ "ST3320813AS","9FZ182",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+{ "ST3320613AS","9FZ162",ATA_HORKAGE_NONCQ |
+ATA_HORKAGE_FIRMWARE_WARN },
+
 /* Blacklist entries taken from Silicon Image 3124/3132
    Windows driver .inf file - also several Linux problem reports */
 { "HTS541060G9SA00",    "MB3OC60D",     ATA_HORKAGE_NONCQ, },
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 59b0f1c..ed3f26e 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
&lt; at &gt;&lt; at &gt; -375,6 +375,7 &lt; at &gt;&lt; at &gt; enum {
 ATA_HORKAGE_BRIDGE_OK= (1 &lt;&lt; 10),/* no bridge limits */
 ATA_HORKAGE_ATAPI_MOD16_DMA = (1 &lt;&lt; 11), /* use ATAPI DMA for commands
     not multiple of 16 bytes */
+ATA_HORKAGE_FIRMWARE_WARN = (1 &lt;&lt; 12),/* firwmare update warning */
 
  /* DMA mask for user DMA control: User visible values; DO NOT
     renumber */
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Tejun Heo</dc:creator>
    <dc:date>2008-11-27T04:36:48</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36393">
    <title>Re: [PATCH #upstream-fixes] sata_promise: request follow-up SRST</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36393</link>
    <description>Hi Tejun and list,

Replying to my own mail, but now with the dmesg output which was missing 
earlier:

Peter Favrholdt wrote:

Well, ran the tests again and here is the errors from the new run:

[114851.970088] ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x1380000 
action 0x6 frozen
[114851.970098] ata1: SError: { 10B8B Dispar BadCRC TrStaTrns }
[114851.970107] ata1.00: cmd 25/00:00:00:3f:e6/00:02:01:00:00/e0 tag 0 
dma 262144 in
[114851.970108]          res 40/00:28:00:00:00/00:00:00:00:00/40 Emask 
0x4 (timeout)
[114851.970112] ata1.00: status: { DRDY }
[114851.970164] ata1: hard resetting link
[114857.520147] ata1: link is slow to respond, please be patient (ready=-19)
[114862.030032] ata1: SRST failed (errno=-16)
[114862.030121] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[114867.050164] ata1.00: qc timeout (cmd 0xec)
[114867.050533] ata1.00: failed to IDENTIFY (I/O error, err_mask=0x5)
[114867.050537] ata1.00: revalidation failed (errno=-5)
[114867.050560] ata1: hard resetting link
[114872.610029] ata1: link is slow to respond, please be patient (ready=-19)
[114877.111605] ata1: SRST failed (errno=-16)
[114877.111697] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[114887.110131] ata1.00: qc timeout (cmd 0xec)
[114887.110457] ata1.00: failed to IDENTIFY (I/O error, err_mask=0x5)
[114887.110461] ata1.00: revalidation failed (errno=-5)
[114887.110490] ata1: hard resetting link
[114892.660241] ata1: link is slow to respond, please be patient (ready=-19)
[114897.160046] ata1: SRST failed (errno=-16)
[114897.160148] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[114927.160160] ata1.00: qc timeout (cmd 0xec)
[114927.160406] ata1.00: failed to IDENTIFY (I/O error, err_mask=0x5)
[114927.160410] ata1.00: revalidation failed (errno=-5)
[114927.160413] ata1.00: disabled
[114927.160441] ata1: exception Emask 0x10 SAct 0x0 SErr 0x0 action 0xe 
frozen t4
[114927.160444] ata1: hotplug_status 0x80
[114927.160487] ata1: hard resetting link
[114933.110040] ata1: link is slow to respond, please be patient (ready=-19)
[114937.190038] ata1: SRST failed (errno=-16)
[114937.190132] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[114937.190179] ata1: link online but device misclassified, retrying
[114937.190227] ata1: hard resetting link
[114943.140073] ata1: link is slow to respond, please be patient (ready=-19)
[114947.220400] ata1: SRST failed (errno=-16)
[114947.220508] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[114947.220542] ata1: link online but device misclassified, retrying
[114947.220576] ata1: hard resetting link
[114953.170035] ata1: link is slow to respond, please be patient (ready=-19)
[114982.280039] ata1: SRST failed (errno=-16)
[114982.280148] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[114982.280196] ata1: link online but device misclassified, retrying
[114982.280205] ata1: limiting SATA link speed to 1.5 Gbps
[114982.280255] ata1: hard resetting link
[114987.330035] ata1: SRST failed (errno=-16)
[114987.330145] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[114987.330178] ata1: link online but device misclassified, device 
detection might fail
[114987.330438] ata1: exception Emask 0x10 SAct 0x0 SErr 0x0 action 0x9 t3
[114987.330441] ata1: hotplug_status 0x80
[114987.330493] ata1: hard resetting link
[114993.280035] ata1: link is slow to respond, please be patient (ready=-19)
[114997.360597] ata1: SRST failed (errno=-16)
[114997.360699] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[114997.360740] ata1: link online but device misclassified, retrying
[114997.360781] ata1: hard resetting link
[115003.330084] ata1: link is slow to respond, please be patient (ready=-19)
[115007.410222] ata1: SRST failed (errno=-16)
[115007.410327] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[115007.410363] ata1: link online but device misclassified, retrying
[115007.410399] ata1: hard resetting link
[115013.360038] ata1: link is slow to respond, please be patient (ready=-19)
[115042.460168] ata1: SRST failed (errno=-16)
[115042.460271] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[115042.460304] ata1: link online but device misclassified, retrying
[115042.460313] ata1: limiting SATA link speed to 1.5 Gbps
[115042.460346] ata1: hard resetting link
[115047.510048] ata1: SRST failed (errno=-16)
[115047.510143] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[115047.510176] ata1: link online but device misclassified, device 
detection might fail
[115047.510524] ata1: exception Emask 0x10 SAct 0x0 SErr 0x0 action 0x9 t2
[115047.510527] ata1: hotplug_status 0x80
[115047.510578] ata1: hard resetting link
[115053.460097] ata1: link is slow to respond, please be patient (ready=-19)
[115057.540039] ata1: SRST failed (errno=-16)
[115057.540141] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[115057.540175] ata1: link online but device misclassified, retrying
[115057.540222] ata1: hard resetting link
[115063.510044] ata1: link is slow to respond, please be patient (ready=-19)
[115067.590036] ata1: SRST failed (errno=-16)
[115067.590137] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[115067.590178] ata1: link online but device misclassified, retrying
[115067.590226] ata1: hard resetting link
[115073.550062] ata1: link is slow to respond, please be patient (ready=-19)
[115102.650031] ata1: SRST failed (errno=-16)
[115102.650130] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[115102.650264] ata1: link online but device misclassified, retrying
[115102.650274] ata1: limiting SATA link speed to 1.5 Gbps
[115102.650310] ata1: hard resetting link
[115107.700035] ata1: SRST failed (errno=-16)
[115107.700131] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[115107.700171] ata1: link online but device misclassified, device 
detection might fail
[115107.700500] ata1: exception Emask 0x10 SAct 0x0 SErr 0x0 action 0x9 t1
[115107.700503] ata1: hotplug_status 0x80
[115107.700556] ata1: hard resetting link
[115113.652245] ata1: link is slow to respond, please be patient (ready=-19)
[115117.740038] ata1: SRST failed (errno=-16)
[115117.740133] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[115117.740173] ata1: link online but device misclassified, retrying
[115117.740207] ata1: hard resetting link
[115123.690028] ata1: link is slow to respond, please be patient (ready=-19)
[115127.770479] ata1: SRST failed (errno=-16)
[115127.770587] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[115127.770626] ata1: link online but device misclassified, retrying
[115127.770646] ata1: hard resetting link
[115133.720038] ata1: link is slow to respond, please be patient (ready=-19)
[115162.830077] ata1: SRST failed (errno=-16)
[115162.830179] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[115162.830212] ata1: link online but device misclassified, retrying
[115162.830220] ata1: limiting SATA link speed to 1.5 Gbps
[115162.830268] ata1: hard resetting link
[115167.880253] ata1: SRST failed (errno=-16)
[115167.880362] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[115167.880404] ata1: link online but device misclassified, device 
detection might fail
[115167.880414] ata1: EH pending after 5 tries, giving up
[115167.880436] sd 0:0:0:0: [sda] Result: hostbyte=0x00 driverbyte=0x08
[115167.880440] sd 0:0:0:0: [sda] Sense Key : 0xb [current] [descriptor]
[115167.880445] Descriptor sense data with sense descriptors (in hex):
[115167.880447]         72 0b 00 00 00 00 00 0c 00 0a 80 00 00 00 00 00
[115167.880454]         00 00 00 00
[115167.880457] sd 0:0:0:0: [sda] ASC=0x0 ASCQ=0x0
[115167.880461] end_request: I/O error, dev sda, sector 31866624
[115167.880465] Buffer I/O error on device sda, logical block 3983328
[115167.880470] Buffer I/O error on device sda, logical block 3983329
[115167.880473] Buffer I/O error on device sda, logical block 3983330
[115167.880476] Buffer I/O error on device sda, logical block 3983331
[115167.880479] Buffer I/O error on device sda, logical block 3983332
[115167.880483] Buffer I/O error on device sda, logical block 3983333
[115167.880486] Buffer I/O error on device sda, logical block 3983334
[115167.880489] Buffer I/O error on device sda, logical block 3983335
[115167.880492] Buffer I/O error on device sda, logical block 3983336
[115167.880496] Buffer I/O error on device sda, logical block 3983337
[115167.880644] ata1: EH complete
[115167.880653] ata1.00: detaching (SCSI 0:0:0:0)
[115167.880945] sd 0:0:0:0: [sda] Synchronizing SCSI cache
[115167.883403] sd 0:0:0:0: [sda] Result: hostbyte=0x04 driverbyte=0x00
[115167.883412] sd 0:0:0:0: [sda] Stopping disk
[115167.883895] sd 0:0:0:0: [sda] START_STOP FAILED
[115167.883897] sd 0:0:0:0: [sda] Result: hostbyte=0x04 driverbyte=0x00

modprobe -r sata_promise adds the following to dmesg:

[115788.005895] ata2.00: disabled
[115788.006119] sd 1:0:0:0: [sdb] Synchronizing SCSI cache
[115788.006153] sd 1:0:0:0: [sdb] Result: hostbyte=0x04 driverbyte=0x00
[115788.006157] sd 1:0:0:0: [sdb] Stopping disk
[115788.006165] sd 1:0:0:0: [sdb] START_STOP FAILED
[115788.006167] sd 1:0:0:0: [sdb] Result: hostbyte=0x04 driverbyte=0x00
[115788.006438] ata3.00: disabled
[115788.006588] sd 2:0:0:0: [sdc] Synchronizing SCSI cache
[115788.006610] sd 2:0:0:0: [sdc] Result: hostbyte=0x04 driverbyte=0x00
[115788.006614] sd 2:0:0:0: [sdc] Stopping disk
[115788.006621] sd 2:0:0:0: [sdc] START_STOP FAILED
[115788.006623] sd 2:0:0:0: [sdc] Result: hostbyte=0x04 driverbyte=0x00
[115788.006743] ata4.00: disabled
[115788.006892] sd 3:0:0:0: [sdd] Synchronizing SCSI cache
[115788.006914] sd 3:0:0:0: [sdd] Result: hostbyte=0x04 driverbyte=0x00
[115788.006918] sd 3:0:0:0: [sdd] Stopping disk
[115788.006925] sd 3:0:0:0: [sdd] START_STOP FAILED
[115788.006927] sd 3:0:0:0: [sdd] Result: hostbyte=0x04 driverbyte=0x00
[115788.007073] sata_promise 0000:01:08.0: PCI INT A disabled

Then modprobe sata_promise adds to dmesg:

[115974.655463] sata_promise 0000:01:08.0: version 2.12
[115974.655717] sata_promise 0000:01:08.0: PCI INT A -&gt; Link[APC3] -&gt; 
GSI 18 (level, high) -&gt; IRQ 18
[115974.656113] scsi4 : sata_promise
[115974.657795] scsi5 : sata_promise
[115974.657947] scsi6 : sata_promise
[115974.658400] scsi7 : sata_promise
[115974.658466] ata5: SATA max UDMA/133 mmio m4096&lt; at &gt;0xe9024000 ata 
0xe9024380 irq 18
[115974.658473] ata6: SATA max UDMA/133 mmio m4096&lt; at &gt;0xe9024000 ata 
0xe9024280 irq 18
[115974.658477] ata7: SATA max UDMA/133 mmio m4096&lt; at &gt;0xe9024000 ata 
0xe9024200 irq 18
[115974.658482] ata8: SATA max UDMA/133 mmio m4096&lt; at &gt;0xe9024000 ata 
0xe9024300 irq 18
[115980.200009] ata5: link is slow to respond, please be patient (ready=-19)
[115984.700016] ata5: SRST failed (errno=-16)
[115984.700040] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[115984.700050] ata5: link online but device misclassified, retrying
[115990.250010] ata5: link is slow to respond, please be patient (ready=-19)
[115994.750011] ata5: SRST failed (errno=-16)
[115994.750035] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[115994.750045] ata5: link online but device misclassified, retrying
[116000.300013] ata5: link is slow to respond, please be patient (ready=-19)
[116029.760011] ata5: SRST failed (errno=-16)
[116029.760034] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116029.760043] ata5: link online but device misclassified, retrying
[116029.760048] ata5: limiting SATA link speed to 1.5 Gbps
[116034.770011] ata5: SRST failed (errno=-16)
[116034.770035] ata5: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[116034.770045] ata5: link online but device misclassified, device 
detection might fail
[116035.280132] ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116040.280657] ata6.00: qc timeout (cmd 0xec)
[116040.280871] ata6.00: failed to IDENTIFY (I/O error, err_mask=0x4)
[116045.830011] ata6: link is slow to respond, please be patient (ready=-19)
[116050.330012] ata6: SRST failed (errno=-16)
[116050.330034] ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116050.330043] ata6: link online but device misclassified, retrying
[116055.880744] ata6: link is slow to respond, please be patient (ready=-19)
[116060.380009] ata6: SRST failed (errno=-16)
[116060.380032] ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116060.380042] ata6: link online but device misclassified, retrying
[116065.930012] ata6: link is slow to respond, please be patient (ready=-19)
[116095.390009] ata6: SRST failed (errno=-16)
[116095.390032] ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116095.390041] ata6: link online but device misclassified, retrying
[116095.390046] ata6: limiting SATA link speed to 1.5 Gbps
[116100.400009] ata6: SRST failed (errno=-16)
[116100.400031] ata6: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[116100.400041] ata6: link online but device misclassified, device 
detection might fail
[116100.910044] ata7: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116105.910028] ata7.00: qc timeout (cmd 0xec)
[116105.910242] ata7.00: failed to IDENTIFY (I/O error, err_mask=0x4)
[116111.460073] ata7: link is slow to respond, please be patient (ready=-19)
[116115.960011] ata7: SRST failed (errno=-16)
[116115.960033] ata7: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116115.960043] ata7: link online but device misclassified, retrying
[116121.510016] ata7: link is slow to respond, please be patient (ready=-19)
[116126.010016] ata7: SRST failed (errno=-16)
[116126.010039] ata7: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116126.010048] ata7: link online but device misclassified, retrying
[116131.560010] ata7: link is slow to respond, please be patient (ready=-19)
[116161.020012] ata7: SRST failed (errno=-16)
[116161.020035] ata7: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116161.020044] ata7: link online but device misclassified, retrying
[116161.020049] ata7: limiting SATA link speed to 1.5 Gbps
[116166.030012] ata7: SRST failed (errno=-16)
[116166.030035] ata7: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[116166.030044] ata7: link online but device misclassified, device 
detection might fail
[116166.540047] ata8: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116171.540029] ata8.00: qc timeout (cmd 0xec)
[116171.540244] ata8.00: failed to IDENTIFY (I/O error, err_mask=0x4)
[116177.090018] ata8: link is slow to respond, please be patient (ready=-19)
[116181.590010] ata8: SRST failed (errno=-16)
[116181.590033] ata8: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116181.590042] ata8: link online but device misclassified, retrying
[116187.140011] ata8: link is slow to respond, please be patient (ready=-19)
[116191.640010] ata8: SRST failed (errno=-16)
[116191.640034] ata8: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116191.640043] ata8: link online but device misclassified, retrying
[116197.190010] ata8: link is slow to respond, please be patient (ready=-19)
[116226.650011] ata8: SRST failed (errno=-16)
[116226.650034] ata8: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[116226.650044] ata8: link online but device misclassified, retrying
[116226.650048] ata8: limiting SATA link speed to 1.5 Gbps
[116231.660075] ata8: SRST failed (errno=-16)
[116231.660098] ata8: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[116231.660107] ata8: link online but device misclassified, device 
detection might fail

I tried modprobe -r and modprobing again but with the same result.

Best regards,

Peter

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Peter Favrholdt</dc:creator>
    <dc:date>2008-11-26T23:07:13</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36392">
    <title>Re: [PATCH #upstraem-fixes] ata_piix: detect and clear spurious IRQs</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36392</link>
    <description>
Right, the attached patch fixed it so it must have been the controller
latching the IRQ.


Agreed.  I think we should use disable/enable_irq for all controller
which don't have proper IRQ masking mechanism (NIEN doesn't count) for
both reliability and so that we move PIO out of irq handler.  Jeff,
this has come up quite a few times now, what do you think?

Thanks.

</description>
    <dc:creator>Tejun Heo</dc:creator>
    <dc:date>2008-11-26T18:57:52</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.ide/36391">
    <title>Re: [PATCH #upstraem-fixes] ata_piix: detect and clear spurious IRQs</title>
    <link>http://permalink.gmane.org/gmane.linux.ide/36391</link>
    <description>
There is. It also means your patch isn't sufficient - if that IRQ had
been level triggered you'd have hung the box solid.

The old IDE code makes use of disable_irq/enable_irq (and really ought to
make use of on chip private IRQ mask bits as first choice but doesn't).

Sounds to me like there are two things we can do to help

Make the nIEN masking via a helper that can on suitable chips also mask
on chip.

Make use of disable_irq_nosync() in the case of devices that ignore nIEN
in the IRQ handler, setting a flag then re-enable it when the driver
path completes the reset and the bit goes clear.

We need to start using enable/disable_irq and/or local chip IRQ masking
for PIO in some places anyway.

Alan
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo&lt; at &gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

</description>
    <dc:creator>Alan Cox</dc:creator>
    <dc:date>2008-11-26T18:40:24</dc:date>
  </item>
  <textinput about="http://search.gmane.org/?group=$group=gmane.linux.ide">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.linux.ide</link>
  </textinput>
</rdf:RDF>
