Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c88758b authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik
Browse files

libata-link: make two port flags HRST_TO_RESUME and SKIP_D2H_BSY link flags



HRST_TO_RESUME and SKIP_D2H_BSY are link attributes.  Move them to
ata_link->flags.  This will allow host and PMP links to have different
attributes.  ata_port_info->link_flags is added and used by LLDs to
specify these flags during initialization.

Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 0260731f
Loading
Loading
Loading
Loading
+10 −6
Original line number Original line Diff line number Diff line
@@ -178,8 +178,8 @@ enum {


	AHCI_FLAG_COMMON		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
	AHCI_FLAG_COMMON		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
					  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
					  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
					  ATA_FLAG_SKIP_D2H_BSY |
					  ATA_FLAG_ACPI_SATA,
					  ATA_FLAG_ACPI_SATA,
	AHCI_LFLAG_COMMON		= ATA_LFLAG_SKIP_D2H_BSY,
};
};


struct ahci_cmd_hdr {
struct ahci_cmd_hdr {
@@ -333,6 +333,7 @@ static const struct ata_port_info ahci_port_info[] = {
	/* board_ahci */
	/* board_ahci */
	{
	{
		.flags		= AHCI_FLAG_COMMON,
		.flags		= AHCI_FLAG_COMMON,
		.link_flags	= AHCI_LFLAG_COMMON,
		.pio_mask	= 0x1f, /* pio0-4 */
		.pio_mask	= 0x1f, /* pio0-4 */
		.udma_mask	= ATA_UDMA6,
		.udma_mask	= ATA_UDMA6,
		.port_ops	= &ahci_ops,
		.port_ops	= &ahci_ops,
@@ -340,14 +341,15 @@ static const struct ata_port_info ahci_port_info[] = {
	/* board_ahci_pi */
	/* board_ahci_pi */
	{
	{
		.flags		= AHCI_FLAG_COMMON | AHCI_FLAG_HONOR_PI,
		.flags		= AHCI_FLAG_COMMON | AHCI_FLAG_HONOR_PI,
		.link_flags	= AHCI_LFLAG_COMMON,
		.pio_mask	= 0x1f, /* pio0-4 */
		.pio_mask	= 0x1f, /* pio0-4 */
		.udma_mask	= ATA_UDMA6,
		.udma_mask	= ATA_UDMA6,
		.port_ops	= &ahci_ops,
		.port_ops	= &ahci_ops,
	},
	},
	/* board_ahci_vt8251 */
	/* board_ahci_vt8251 */
	{
	{
		.flags		= AHCI_FLAG_COMMON | ATA_FLAG_HRST_TO_RESUME |
		.flags		= AHCI_FLAG_COMMON | AHCI_FLAG_NO_NCQ,
				  AHCI_FLAG_NO_NCQ,
		.link_flags	= AHCI_LFLAG_COMMON | ATA_LFLAG_HRST_TO_RESUME,
		.pio_mask	= 0x1f, /* pio0-4 */
		.pio_mask	= 0x1f, /* pio0-4 */
		.udma_mask	= ATA_UDMA6,
		.udma_mask	= ATA_UDMA6,
		.port_ops	= &ahci_vt8251_ops,
		.port_ops	= &ahci_vt8251_ops,
@@ -355,6 +357,7 @@ static const struct ata_port_info ahci_port_info[] = {
	/* board_ahci_ign_iferr */
	/* board_ahci_ign_iferr */
	{
	{
		.flags		= AHCI_FLAG_COMMON | AHCI_FLAG_IGN_IRQ_IF_ERR,
		.flags		= AHCI_FLAG_COMMON | AHCI_FLAG_IGN_IRQ_IF_ERR,
		.link_flags	= AHCI_LFLAG_COMMON,
		.pio_mask	= 0x1f, /* pio0-4 */
		.pio_mask	= 0x1f, /* pio0-4 */
		.udma_mask	= ATA_UDMA6,
		.udma_mask	= ATA_UDMA6,
		.port_ops	= &ahci_ops,
		.port_ops	= &ahci_ops,
@@ -364,6 +367,7 @@ static const struct ata_port_info ahci_port_info[] = {
		.flags		= AHCI_FLAG_COMMON |
		.flags		= AHCI_FLAG_COMMON |
				  AHCI_FLAG_IGN_SERR_INTERNAL |
				  AHCI_FLAG_IGN_SERR_INTERNAL |
				  AHCI_FLAG_32BIT_ONLY,
				  AHCI_FLAG_32BIT_ONLY,
		.link_flags	= AHCI_LFLAG_COMMON,
		.pio_mask	= 0x1f, /* pio0-4 */
		.pio_mask	= 0x1f, /* pio0-4 */
		.udma_mask	= ATA_UDMA6,
		.udma_mask	= ATA_UDMA6,
		.port_ops	= &ahci_ops,
		.port_ops	= &ahci_ops,
@@ -373,9 +377,9 @@ static const struct ata_port_info ahci_port_info[] = {
		.sht		= &ahci_sht,
		.sht		= &ahci_sht,
		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
				  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
				  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
				  ATA_FLAG_SKIP_D2H_BSY | AHCI_FLAG_HONOR_PI |
				  AHCI_FLAG_HONOR_PI | AHCI_FLAG_NO_NCQ |
				  AHCI_FLAG_NO_NCQ | AHCI_FLAG_NO_MSI |
				  AHCI_FLAG_NO_MSI | AHCI_FLAG_MV_PATA,
				  AHCI_FLAG_MV_PATA,
		.link_flags	= AHCI_LFLAG_COMMON,
		.pio_mask	= 0x1f, /* pio0-4 */
		.pio_mask	= 0x1f, /* pio0-4 */
		.udma_mask	= ATA_UDMA6,
		.udma_mask	= ATA_UDMA6,
		.port_ops	= &ahci_ops,
		.port_ops	= &ahci_ops,
+3 −2
Original line number Original line Diff line number Diff line
@@ -3332,7 +3332,7 @@ int ata_std_prereset(struct ata_link *link, unsigned long deadline)


	/* handle link resume */
	/* handle link resume */
	if ((ehc->i.flags & ATA_EHI_RESUME_LINK) &&
	if ((ehc->i.flags & ATA_EHI_RESUME_LINK) &&
	    (ap->flags & ATA_FLAG_HRST_TO_RESUME))
	    (link->flags & ATA_LFLAG_HRST_TO_RESUME))
		ehc->i.action |= ATA_EH_HARDRESET;
		ehc->i.action |= ATA_EH_HARDRESET;


	/* if we're about to do hardreset, nothing more to do */
	/* if we're about to do hardreset, nothing more to do */
@@ -3351,7 +3351,7 @@ int ata_std_prereset(struct ata_link *link, unsigned long deadline)
	/* Wait for !BSY if the controller can wait for the first D2H
	/* Wait for !BSY if the controller can wait for the first D2H
	 * Reg FIS and we don't know that no device is attached.
	 * Reg FIS and we don't know that no device is attached.
	 */
	 */
	if (!(ap->flags & ATA_FLAG_SKIP_D2H_BSY) && !ata_link_offline(link)) {
	if (!(link->flags & ATA_LFLAG_SKIP_D2H_BSY) && !ata_link_offline(link)) {
		rc = ata_wait_ready(ap, deadline);
		rc = ata_wait_ready(ap, deadline);
		if (rc && rc != -ENODEV) {
		if (rc && rc != -ENODEV) {
			ata_link_printk(link, KERN_WARNING, "device not ready "
			ata_link_printk(link, KERN_WARNING, "device not ready "
@@ -6269,6 +6269,7 @@ struct ata_host *ata_host_alloc_pinfo(struct device *dev,
		ap->mwdma_mask = pi->mwdma_mask;
		ap->mwdma_mask = pi->mwdma_mask;
		ap->udma_mask = pi->udma_mask;
		ap->udma_mask = pi->udma_mask;
		ap->flags |= pi->flags;
		ap->flags |= pi->flags;
		ap->link.flags |= pi->link_flags;
		ap->ops = pi->port_ops;
		ap->ops = pi->port_ops;


		if (!host->ops && (pi->port_ops != &ata_dummy_port_ops))
		if (!host->ops && (pi->port_ops != &ata_dummy_port_ops))
+7 −7
Original line number Original line Diff line number Diff line
@@ -455,8 +455,8 @@ static const struct ata_port_info nv_port_info[] = {
	/* generic */
	/* generic */
	{
	{
		.sht		= &nv_sht,
		.sht		= &nv_sht,
		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
				  ATA_FLAG_HRST_TO_RESUME,
		.link_flags	= ATA_LFLAG_HRST_TO_RESUME,
		.pio_mask	= NV_PIO_MASK,
		.pio_mask	= NV_PIO_MASK,
		.mwdma_mask	= NV_MWDMA_MASK,
		.mwdma_mask	= NV_MWDMA_MASK,
		.udma_mask	= NV_UDMA_MASK,
		.udma_mask	= NV_UDMA_MASK,
@@ -466,8 +466,8 @@ static const struct ata_port_info nv_port_info[] = {
	/* nforce2/3 */
	/* nforce2/3 */
	{
	{
		.sht		= &nv_sht,
		.sht		= &nv_sht,
		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
				  ATA_FLAG_HRST_TO_RESUME,
		.link_flags	= ATA_LFLAG_HRST_TO_RESUME,
		.pio_mask	= NV_PIO_MASK,
		.pio_mask	= NV_PIO_MASK,
		.mwdma_mask	= NV_MWDMA_MASK,
		.mwdma_mask	= NV_MWDMA_MASK,
		.udma_mask	= NV_UDMA_MASK,
		.udma_mask	= NV_UDMA_MASK,
@@ -477,8 +477,8 @@ static const struct ata_port_info nv_port_info[] = {
	/* ck804 */
	/* ck804 */
	{
	{
		.sht		= &nv_sht,
		.sht		= &nv_sht,
		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
				  ATA_FLAG_HRST_TO_RESUME,
		.link_flags	= ATA_LFLAG_HRST_TO_RESUME,
		.pio_mask	= NV_PIO_MASK,
		.pio_mask	= NV_PIO_MASK,
		.mwdma_mask	= NV_MWDMA_MASK,
		.mwdma_mask	= NV_MWDMA_MASK,
		.udma_mask	= NV_UDMA_MASK,
		.udma_mask	= NV_UDMA_MASK,
@@ -489,8 +489,8 @@ static const struct ata_port_info nv_port_info[] = {
	{
	{
		.sht		= &nv_adma_sht,
		.sht		= &nv_adma_sht,
		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
				  ATA_FLAG_HRST_TO_RESUME |
				  ATA_FLAG_MMIO | ATA_FLAG_NCQ,
				  ATA_FLAG_MMIO | ATA_FLAG_NCQ,
		.link_flags	= ATA_LFLAG_HRST_TO_RESUME,
		.pio_mask	= NV_PIO_MASK,
		.pio_mask	= NV_PIO_MASK,
		.mwdma_mask	= NV_MWDMA_MASK,
		.mwdma_mask	= NV_MWDMA_MASK,
		.udma_mask	= NV_UDMA_MASK,
		.udma_mask	= NV_UDMA_MASK,
+6 −1
Original line number Original line Diff line number Diff line
@@ -59,7 +59,8 @@ enum {
	SIL_FLAG_MOD15WRITE	= (1 << 30),
	SIL_FLAG_MOD15WRITE	= (1 << 30),


	SIL_DFL_PORT_FLAGS	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
	SIL_DFL_PORT_FLAGS	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
				  ATA_FLAG_MMIO | ATA_FLAG_HRST_TO_RESUME,
				  ATA_FLAG_MMIO,
	SIL_DFL_LINK_FLAGS	= ATA_LFLAG_HRST_TO_RESUME,


	/*
	/*
	 * Controller IDs
	 * Controller IDs
@@ -216,6 +217,7 @@ static const struct ata_port_info sil_port_info[] = {
	/* sil_3112 */
	/* sil_3112 */
	{
	{
		.flags		= SIL_DFL_PORT_FLAGS | SIL_FLAG_MOD15WRITE,
		.flags		= SIL_DFL_PORT_FLAGS | SIL_FLAG_MOD15WRITE,
		.link_flags	= SIL_DFL_LINK_FLAGS,
		.pio_mask	= 0x1f,			/* pio0-4 */
		.pio_mask	= 0x1f,			/* pio0-4 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.udma_mask	= ATA_UDMA5,
		.udma_mask	= ATA_UDMA5,
@@ -225,6 +227,7 @@ static const struct ata_port_info sil_port_info[] = {
	{
	{
		.flags		= SIL_DFL_PORT_FLAGS | SIL_FLAG_MOD15WRITE |
		.flags		= SIL_DFL_PORT_FLAGS | SIL_FLAG_MOD15WRITE |
				  SIL_FLAG_NO_SATA_IRQ,
				  SIL_FLAG_NO_SATA_IRQ,
		.link_flags	= SIL_DFL_LINK_FLAGS,
		.pio_mask	= 0x1f,			/* pio0-4 */
		.pio_mask	= 0x1f,			/* pio0-4 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.udma_mask	= ATA_UDMA5,
		.udma_mask	= ATA_UDMA5,
@@ -233,6 +236,7 @@ static const struct ata_port_info sil_port_info[] = {
	/* sil_3512 */
	/* sil_3512 */
	{
	{
		.flags		= SIL_DFL_PORT_FLAGS | SIL_FLAG_RERR_ON_DMA_ACT,
		.flags		= SIL_DFL_PORT_FLAGS | SIL_FLAG_RERR_ON_DMA_ACT,
		.link_flags	= SIL_DFL_LINK_FLAGS,
		.pio_mask	= 0x1f,			/* pio0-4 */
		.pio_mask	= 0x1f,			/* pio0-4 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.udma_mask	= ATA_UDMA5,
		.udma_mask	= ATA_UDMA5,
@@ -241,6 +245,7 @@ static const struct ata_port_info sil_port_info[] = {
	/* sil_3114 */
	/* sil_3114 */
	{
	{
		.flags		= SIL_DFL_PORT_FLAGS | SIL_FLAG_RERR_ON_DMA_ACT,
		.flags		= SIL_DFL_PORT_FLAGS | SIL_FLAG_RERR_ON_DMA_ACT,
		.link_flags	= SIL_DFL_LINK_FLAGS,
		.pio_mask	= 0x1f,			/* pio0-4 */
		.pio_mask	= 0x1f,			/* pio0-4 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.udma_mask	= ATA_UDMA5,
		.udma_mask	= ATA_UDMA5,
+5 −2
Original line number Original line Diff line number Diff line
@@ -237,8 +237,8 @@ enum {
	/* host flags */
	/* host flags */
	SIL24_COMMON_FLAGS	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
	SIL24_COMMON_FLAGS	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
				  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
				  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
				  ATA_FLAG_NCQ | ATA_FLAG_SKIP_D2H_BSY |
				  ATA_FLAG_NCQ | ATA_FLAG_ACPI_SATA,
				  ATA_FLAG_ACPI_SATA,
	SIL24_COMMON_LFLAGS	= ATA_LFLAG_SKIP_D2H_BSY,
	SIL24_FLAG_PCIX_IRQ_WOC	= (1 << 24), /* IRQ loss errata on PCI-X */
	SIL24_FLAG_PCIX_IRQ_WOC	= (1 << 24), /* IRQ loss errata on PCI-X */


	IRQ_STAT_4PORTS		= 0xf,
	IRQ_STAT_4PORTS		= 0xf,
@@ -424,6 +424,7 @@ static const struct ata_port_info sil24_port_info[] = {
	{
	{
		.flags		= SIL24_COMMON_FLAGS | SIL24_NPORTS2FLAG(4) |
		.flags		= SIL24_COMMON_FLAGS | SIL24_NPORTS2FLAG(4) |
				  SIL24_FLAG_PCIX_IRQ_WOC,
				  SIL24_FLAG_PCIX_IRQ_WOC,
		.link_flags	= SIL24_COMMON_LFLAGS,
		.pio_mask	= 0x1f,			/* pio0-4 */
		.pio_mask	= 0x1f,			/* pio0-4 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.udma_mask	= ATA_UDMA5,		/* udma0-5 */
		.udma_mask	= ATA_UDMA5,		/* udma0-5 */
@@ -432,6 +433,7 @@ static const struct ata_port_info sil24_port_info[] = {
	/* sil_3132 */
	/* sil_3132 */
	{
	{
		.flags		= SIL24_COMMON_FLAGS | SIL24_NPORTS2FLAG(2),
		.flags		= SIL24_COMMON_FLAGS | SIL24_NPORTS2FLAG(2),
		.link_flags	= SIL24_COMMON_LFLAGS,
		.pio_mask	= 0x1f,			/* pio0-4 */
		.pio_mask	= 0x1f,			/* pio0-4 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.udma_mask	= ATA_UDMA5,		/* udma0-5 */
		.udma_mask	= ATA_UDMA5,		/* udma0-5 */
@@ -440,6 +442,7 @@ static const struct ata_port_info sil24_port_info[] = {
	/* sil_3131/sil_3531 */
	/* sil_3131/sil_3531 */
	{
	{
		.flags		= SIL24_COMMON_FLAGS | SIL24_NPORTS2FLAG(1),
		.flags		= SIL24_COMMON_FLAGS | SIL24_NPORTS2FLAG(1),
		.link_flags	= SIL24_COMMON_LFLAGS,
		.pio_mask	= 0x1f,			/* pio0-4 */
		.pio_mask	= 0x1f,			/* pio0-4 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.mwdma_mask	= 0x07,			/* mwdma0-2 */
		.udma_mask	= ATA_UDMA5,		/* udma0-5 */
		.udma_mask	= ATA_UDMA5,		/* udma0-5 */
Loading