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