From: "Chai, Chong Yi" <chong.yi.c...@intel.com>

---
 features/soc/baytrail/baytrail.scc                 |   3 +
 .../libata-add-curr_xfer_mode-attribute.patch      |  71 ++++++++++++++
 .../libata-enable-atapi_an-by-default.patch        |  30 ++++++
 ...ta-handle-HDIO_SET_DMA-HDIO_GET_DMA-ioctl.patch | 104 +++++++++++++++++++++
 4 files changed, 208 insertions(+)
 create mode 100644 
features/soc/baytrail/libata-add-curr_xfer_mode-attribute.patch
 create mode 100644 
features/soc/baytrail/libata-enable-atapi_an-by-default.patch
 create mode 100644 
features/soc/baytrail/libata-handle-HDIO_SET_DMA-HDIO_GET_DMA-ioctl.patch

diff --git a/features/soc/baytrail/baytrail.scc 
b/features/soc/baytrail/baytrail.scc
index e6abaa2..57c4cd7 100644
--- a/features/soc/baytrail/baytrail.scc
+++ b/features/soc/baytrail/baytrail.scc
@@ -65,3 +65,6 @@ patch 
serial-8250-Override-the-DCD-and-DSR-pin-status-for-.patch
 patch hpet-refactor-driver.patch
 patch hpet-implement-start-stop-query-API.patch
 patch hpet-Fix-checkpatch.pl-warnings.patch
+patch libata-add-curr_xfer_mode-attribute.patch
+patch libata-enable-atapi_an-by-default.patch
+patch libata-handle-HDIO_SET_DMA-HDIO_GET_DMA-ioctl.patch
diff --git a/features/soc/baytrail/libata-add-curr_xfer_mode-attribute.patch 
b/features/soc/baytrail/libata-add-curr_xfer_mode-attribute.patch
new file mode 100644
index 0000000..b556a56
--- /dev/null
+++ b/features/soc/baytrail/libata-add-curr_xfer_mode-attribute.patch
@@ -0,0 +1,71 @@
+From 1702a26d2115b6690c75ecff5f87c0eb1326531d Mon Sep 17 00:00:00 2001
+From: Wan Ahmad Zainie <wan.ahmad.zainie.wan.moha...@intel.com>
+Date: Wed, 29 Jul 2015 18:13:24 +0800
+Subject: [PATCH 115/164] libata: add curr_xfer_mode attribute
+
+xfer_mode device attribute lists all the supported transfer modes for
+the ATA device. This patch adds another attribute curr_xfer_mode which
+shows only the current transfer mode.
+
+Signed-off-by: Wan Ahmad Zainie <wan.ahmad.zainie.wan.moha...@intel.com>
+---
+ drivers/ata/libata-transport.c |   15 ++++++++++-----
+ 1 files changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/ata/libata-transport.c b/drivers/ata/libata-transport.c
+index e37413228..1f5de56 100644
+--- a/drivers/ata/libata-transport.c
++++ b/drivers/ata/libata-transport.c
+@@ -196,6 +196,7 @@ static struct {
+       { XFER_PIO_SLOW,                "XFER_PIO_SLOW" }
+ };
+ ata_bitfield_name_match(xfer,ata_xfer_names)
++ata_bitfield_name_search(curr_xfer, ata_xfer_names)
+ 
+ /*
+  * ATA Port attributes
+@@ -449,9 +450,9 @@ int ata_tlink_add(struct ata_link *link)
+  * ATA device attributes
+  */
+ 
+-#define ata_dev_show_class(title, field)                              \
++#define ata_dev_show_class(title, attrb, field)                               
\
+ static ssize_t                                                                
\
+-show_ata_dev_##field(struct device *dev,                              \
++show_ata_dev_##attrb(struct device *dev,                              \
+                    struct device_attribute *attr, char *buf)          \
+ {                                                                     \
+       struct ata_device *ata_dev = transport_class_to_dev(dev);       \
+@@ -459,15 +460,18 @@ show_ata_dev_##field(struct device *dev,                 
        \
+       return get_ata_##title##_names(ata_dev->field, buf);            \
+ }
+ 
++#define ata_dev_attr_ext(title, attrb, field)                         \
++      ata_dev_show_class(title, attrb, field)                         \
++static DEVICE_ATTR(attrb, S_IRUGO, show_ata_dev_##attrb, NULL)
++
+ #define ata_dev_attr(title, field)                                    \
+-      ata_dev_show_class(title, field)                                \
+-static DEVICE_ATTR(field, S_IRUGO, show_ata_dev_##field, NULL)
++      ata_dev_attr_ext(title, field, field)
+ 
+ ata_dev_attr(class, class);
+ ata_dev_attr(xfer, pio_mode);
+ ata_dev_attr(xfer, dma_mode);
+ ata_dev_attr(xfer, xfer_mode);
+-
++ata_dev_attr_ext(curr_xfer, curr_xfer_mode, xfer_mode);
+ 
+ #define ata_dev_show_simple(field, format_string, cast)               \
+ static ssize_t                                                                
\
+@@ -728,6 +732,7 @@ struct scsi_transport_template *ata_attach_transport(void)
+       SETUP_DEV_ATTRIBUTE(pio_mode);
+       SETUP_DEV_ATTRIBUTE(dma_mode);
+       SETUP_DEV_ATTRIBUTE(xfer_mode);
++      SETUP_DEV_ATTRIBUTE(curr_xfer_mode);
+       SETUP_DEV_ATTRIBUTE(spdn_cnt);
+       SETUP_DEV_ATTRIBUTE(ering);
+       SETUP_DEV_ATTRIBUTE(id);
+-- 
+1.7.7.6
+
diff --git a/features/soc/baytrail/libata-enable-atapi_an-by-default.patch 
b/features/soc/baytrail/libata-enable-atapi_an-by-default.patch
new file mode 100644
index 0000000..8ec2b12
--- /dev/null
+++ b/features/soc/baytrail/libata-enable-atapi_an-by-default.patch
@@ -0,0 +1,30 @@
+From 6070752f84419ef91b252e35d6fb21f43ff1c3ea Mon Sep 17 00:00:00 2001
+From: Wan Ahmad Zainie <wan.ahmad.zainie.wan.moha...@intel.com>
+Date: Wed, 29 Jul 2015 18:13:35 +0800
+Subject: [PATCH 116/164] libata: enable atapi_an by default
+
+Change the default value for atapi_an parameter within libata-core
+to enable asynchronous notifications (AN) by default for all
+ATAPI devices that support them.
+
+Signed-off-by: Wan Ahmad Zainie <wan.ahmad.zainie.wan.moha...@intel.com>
+---
+ drivers/ata/libata-core.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
+index b1c0fcd..cdf1d9c 100644
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -160,7 +160,7 @@ int libata_allow_tpm = 0;
+ module_param_named(allow_tpm, libata_allow_tpm, int, 0444);
+ MODULE_PARM_DESC(allow_tpm, "Permit the use of TPM commands (0=off [default], 
1=on)");
+ 
+-static int atapi_an;
++static int atapi_an = 1;
+ module_param(atapi_an, int, 0444);
+ MODULE_PARM_DESC(atapi_an, "Enable ATAPI AN media presence notification 
(0=0ff [default], 1=on)");
+ 
+-- 
+1.7.7.6
+
diff --git 
a/features/soc/baytrail/libata-handle-HDIO_SET_DMA-HDIO_GET_DMA-ioctl.patch 
b/features/soc/baytrail/libata-handle-HDIO_SET_DMA-HDIO_GET_DMA-ioctl.patch
new file mode 100644
index 0000000..6d8b73b
--- /dev/null
+++ b/features/soc/baytrail/libata-handle-HDIO_SET_DMA-HDIO_GET_DMA-ioctl.patch
@@ -0,0 +1,104 @@
+From 735bb5b864d0025b2f05e159ff02e19b9fd95026 Mon Sep 17 00:00:00 2001
+From: Wan Ahmad Zainie <wan.ahmad.zainie.wan.moha...@intel.com>
+Date: Sun, 12 Jul 2015 09:07:37 +0800
+Subject: [PATCH 132/164] libata: handle HDIO_SET_DMA & HDIO_GET_DMA ioctl
+
+currently HDIO_SET_DMA & HDIO_GET_DMA are not handled in libata,
+this patch add support to handle HDIO_SET_DMA & HDIO_GET_DMA ioctl,
+which enables user to set ata device work in PIO or DMA mode.
+
+Copied from http://patchwork.ozlabs.org/patch/215261/.
+
+Fix HDIO_SET_DMA to comply with the IDE ioctl of the same name.
+
+This patch is used to test the requirement "SATA - Transfer Mode Query".
+
+HSD: 4995231.
+
+Signed-off-by: Wan Ahmad Zainie <wan.ahmad.zainie.wan.moha...@intel.com>
+---
+ drivers/ata/libata-core.c |    2 +-
+ drivers/ata/libata-scsi.c |   34 ++++++++++++++++++++++++++++++++++
+ include/linux/libata.h    |    1 +
+ 3 files changed, 36 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
+index cdf1d9c..19fb2ea 100644
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -3214,7 +3214,7 @@ int ata_down_xfermask_limit(struct ata_device *dev, 
unsigned int sel)
+       return 0;
+ }
+ 
+-static int ata_dev_set_mode(struct ata_device *dev)
++int ata_dev_set_mode(struct ata_device *dev)
+ {
+       struct ata_port *ap = dev->link->ap;
+       struct ata_eh_context *ehc = &dev->link->eh_context;
+diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
+index ef8567d..9ca4259 100644
+--- a/drivers/ata/libata-scsi.c
++++ b/drivers/ata/libata-scsi.c
+@@ -676,6 +676,8 @@ int ata_sas_scsi_ioctl(struct ata_port *ap, struct 
scsi_device *scsidev,
+ {
+       int val = -EINVAL, rc = -EINVAL;
+       unsigned long flags;
++      struct ata_device *dev = __ata_scsi_find_dev(ap, scsidev);
++      int dma;
+ 
+       switch (cmd) {
+       case ATA_IOC_GET_IO32:
+@@ -715,6 +717,38 @@ int ata_sas_scsi_ioctl(struct ata_port *ap, struct 
scsi_device *scsidev,
+                       return -EACCES;
+               return ata_task_ioctl(scsidev, arg);
+ 
++      case HDIO_GET_DMA:
++              return put_user(dev->xfer_mode == dev->dma_mode,
++                              (long __user *) arg);
++      case HDIO_SET_DMA:
++              if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
++                      return -EACCES;
++
++              dma = !!(int)arg;
++              if (dma) {
++                      if (!ata_dma_enabled(dev))
++                              return -EINVAL;
++
++                      dev->xfer_mode = dev->dma_mode;
++                      dev->xfer_shift = ata_xfer_mode2shift(dev->dma_mode);
++                      if (ap->ops->set_dmamode)
++                              ap->ops->set_dmamode(ap, dev);
++              } else {
++                      if (dev->pio_mode == 0xff)
++                              return -EINVAL;
++
++                      dev->xfer_mode = dev->pio_mode;
++                      dev->xfer_shift = ATA_SHIFT_PIO;
++                      if (ap->ops->set_piomode)
++                              ap->ops->set_piomode(ap, dev);
++              }
++
++              ata_eh_acquire(ap);
++              rc = ata_dev_set_mode(dev);
++              ata_eh_release(ap);
++
++              return rc;
++
+       default:
+               rc = -ENOTTY;
+               break;
+diff --git a/include/linux/libata.h b/include/linux/libata.h
+index b84e786..e3e8cd4 100644
+--- a/include/linux/libata.h
++++ b/include/linux/libata.h
+@@ -1217,6 +1217,7 @@ extern int ata_cable_80wire(struct ata_port *ap);
+ extern int ata_cable_sata(struct ata_port *ap);
+ extern int ata_cable_ignore(struct ata_port *ap);
+ extern int ata_cable_unknown(struct ata_port *ap);
++extern int ata_dev_set_mode(struct ata_device *dev);
+ 
+ /* Timing helpers */
+ extern unsigned int ata_pio_need_iordy(const struct ata_device *);
+-- 
+1.7.7.6
+
-- 
1.9.1

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to