提交 f273827e 编写于 作者: M Mark Lord 提交者: Jeff Garzik

sata_mv ncq Restrict max sectors to 8-bits on GenII NCQ

The GenII chips have only 8-bits for the sector_count field when performing NCQ.
Add a dev_config method to restrict this when necessary, taking care not to
override any other restriction already in place (likely none, but someday.. ?).
Signed-off-by: NMark Lord <mlord@pobox.com>
Signed-off-by: NJeff Garzik <jeff@garzik.org>
上级 cb924419
...@@ -449,6 +449,7 @@ static void mv_error_handler(struct ata_port *ap); ...@@ -449,6 +449,7 @@ static void mv_error_handler(struct ata_port *ap);
static void mv_post_int_cmd(struct ata_queued_cmd *qc); static void mv_post_int_cmd(struct ata_queued_cmd *qc);
static void mv_eh_freeze(struct ata_port *ap); static void mv_eh_freeze(struct ata_port *ap);
static void mv_eh_thaw(struct ata_port *ap); static void mv_eh_thaw(struct ata_port *ap);
static void mv6_dev_config(struct ata_device *dev);
static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
...@@ -541,6 +542,7 @@ static const struct ata_port_operations mv5_ops = { ...@@ -541,6 +542,7 @@ static const struct ata_port_operations mv5_ops = {
}; };
static const struct ata_port_operations mv6_ops = { static const struct ata_port_operations mv6_ops = {
.dev_config = mv6_dev_config,
.tf_load = ata_tf_load, .tf_load = ata_tf_load,
.tf_read = ata_tf_read, .tf_read = ata_tf_read,
.check_status = ata_check_status, .check_status = ata_check_status,
...@@ -1054,6 +1056,17 @@ static int mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val) ...@@ -1054,6 +1056,17 @@ static int mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val)
return -EINVAL; return -EINVAL;
} }
static void mv6_dev_config(struct ata_device *adev)
{
/*
* We don't have hob_nsect when doing NCQ commands on Gen-II.
* See mv_qc_prep() for more info.
*/
if (adev->flags & ATA_DFLAG_NCQ)
if (adev->max_sectors > ATA_MAX_SECTORS)
adev->max_sectors = ATA_MAX_SECTORS;
}
static void mv_edma_cfg(struct mv_port_priv *pp, struct mv_host_priv *hpriv, static void mv_edma_cfg(struct mv_port_priv *pp, struct mv_host_priv *hpriv,
void __iomem *port_mmio, int want_ncq) void __iomem *port_mmio, int want_ncq)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册