* [PATCH v6 0/1] ata: ahci_xgene: Add support for 2nd HW version of APM X-Gene SoC AHCI SATA Host controller driver.
@ 2015-05-11 8:36 Suman Tripathi
2015-05-11 8:36 ` [PATCH v6 1/1] ata: ahci_xgene: Add AHCI Support for 2nd HW version of APM X-Gene SoC AHCI SATA Host controller Suman Tripathi
0 siblings, 1 reply; 6+ messages in thread
From: Suman Tripathi @ 2015-05-11 8:36 UTC (permalink / raw)
To: olof, tj, arnd
Cc: linux-scsi, linux-ide, devicetree, linux-arm-kernel, mlangsdo,
jcm, patches, Suman Tripathi
V2 change:
* Drop the MIDR based implementation.
V3 change:
* Implement the support for HOST_IRQ_STAT as edge trigger latch.
V4 change:
* Implement seperate irq handler for level and edge trigger latch.
V5 change:
* Refactoring the ahci_single_irq_intr.
* Split refactoring of level trigger and edge trigger into 2 patches.
V6 change:
* Drop patch 1 and 2 as it is applied.
* Implement the structure based solution to tweak version1 and 2 of HW.
Signed-off-by: Suman Tripathi <stripathi@apm.com>
---
Suman Tripathi (1):
ata: ahci_xgene: Add AHCI Support for 2nd HW version of APM X-Gene SoC
AHCI SATA Host controller.
drivers/ata/ahci_xgene.c | 105 ++++++++++++++++++++++++++++++++++++++---------
1 file changed, 86 insertions(+), 19 deletions(-)
--
1.8.2.1
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v6 1/1] ata: ahci_xgene: Add AHCI Support for 2nd HW version of APM X-Gene SoC AHCI SATA Host controller. 2015-05-11 8:36 [PATCH v6 0/1] ata: ahci_xgene: Add support for 2nd HW version of APM X-Gene SoC AHCI SATA Host controller driver Suman Tripathi @ 2015-05-11 8:36 ` Suman Tripathi 2015-05-11 11:28 ` Tejun Heo 0 siblings, 1 reply; 6+ messages in thread From: Suman Tripathi @ 2015-05-11 8:36 UTC (permalink / raw) To: olof, tj, arnd Cc: linux-scsi, linux-ide, devicetree, linux-arm-kernel, mlangsdo, jcm, patches, Suman Tripathi This patch enables full AHCI feature support for APM X-Gene SoC SATA host controller. The following errata's are removed: 1. 2a0bdff6b95 ("ahci-xgene: fix the dma state machine lockup for the IDENTIFY DEVICE PIO mode command") 2. 09c32aaa368 ("ahci_xgene: Fix the dma state machine lockup for the ATA_CMD_SMART PIO mode command") 3. 1540035da71 ("ahci_xgene: Implement the xgene_ahci_poll_reg_val to support PMP") 4. a3a84bc7c88 ("ahci_xgene: Implement the workaround to support PMP enumeration and discovery") 5. 1102407bb71 ("ahci_xgene: Fix the DMA state machine lockup for the ATA_CMD_PACKET PIO mode command") 6. 72f79f9e35b ("ahci_xgene: Removing NCQ support from the APM X-Gene SoC AHCI SATA Host Controller driver") In addition, enable PMP support for APM X-Gene SoC and enable FBS support for second generation APM X-Gene SoC. Signed-off-by: Suman Tripathi <stripathi@apm.com> --- drivers/ata/ahci_xgene.c | 105 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 86 insertions(+), 19 deletions(-) diff --git a/drivers/ata/ahci_xgene.c b/drivers/ata/ahci_xgene.c index 2b78510..2add250 100644 --- a/drivers/ata/ahci_xgene.c +++ b/drivers/ata/ahci_xgene.c @@ -27,6 +27,7 @@ #include <linux/platform_device.h> #include <linux/ahci_platform.h> #include <linux/of_address.h> +#include <linux/of_device.h> #include <linux/of_irq.h> #include <linux/phy/phy.h> #include "ahci.h" @@ -84,6 +85,11 @@ /* Max retry for link down */ #define MAX_LINK_DOWN_RETRY 3 +enum xgene_ahci_version { + XGENE_AHCI_V1 = 1, + XGENE_AHCI_V2, +}; + struct xgene_ahci_context { struct ahci_host_priv *hpriv; struct device *dev; @@ -542,7 +548,7 @@ softreset_retry: return rc; } -static struct ata_port_operations xgene_ahci_ops = { +static struct ata_port_operations xgene_ahci_v1_ops = { .inherits = &ahci_ops, .host_stop = xgene_ahci_host_stop, .hardreset = xgene_ahci_hardreset, @@ -552,11 +558,25 @@ static struct ata_port_operations xgene_ahci_ops = { .pmp_softreset = xgene_ahci_pmp_softreset }; -static const struct ata_port_info xgene_ahci_port_info = { +static const struct ata_port_info xgene_ahci_v1_port_info = { .flags = AHCI_FLAG_COMMON | ATA_FLAG_PMP, .pio_mask = ATA_PIO4, .udma_mask = ATA_UDMA6, - .port_ops = &xgene_ahci_ops, + .port_ops = &xgene_ahci_v1_ops, +}; + +static struct ata_port_operations xgene_ahci_v2_ops = { + .inherits = &ahci_ops, + .host_stop = xgene_ahci_host_stop, + .hardreset = xgene_ahci_hardreset, + .read_id = xgene_ahci_read_id, +}; + +static const struct ata_port_info xgene_ahci_v2_port_info = { + .flags = AHCI_FLAG_COMMON | ATA_FLAG_PMP, + .pio_mask = ATA_PIO4, + .udma_mask = ATA_UDMA6, + .port_ops = &xgene_ahci_v2_ops, }; static int xgene_ahci_hw_init(struct ahci_host_priv *hpriv) @@ -629,12 +649,32 @@ static struct scsi_host_template ahci_platform_sht = { AHCI_SHT(DRV_NAME), }; +#ifdef CONFIG_ACPI +static const struct acpi_device_id xgene_ahci_acpi_match[] = { + { "APMC0D0D", XGENE_AHCI_V1}, + { "APMC0D32", XGENE_AHCI_V2}, + {}, +}; +MODULE_DEVICE_TABLE(acpi, xgene_ahci_acpi_match); +#endif + +static const struct of_device_id xgene_ahci_of_match[] = { + {.compatible = "apm,xgene-ahci", .data = (void *) XGENE_AHCI_V1}, + {.compatible = "apm,xgene-ahci-v2", .data = (void *) XGENE_AHCI_V2}, + {}, +}; +MODULE_DEVICE_TABLE(of, xgene_ahci_of_match); + static int xgene_ahci_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct ahci_host_priv *hpriv; struct xgene_ahci_context *ctx; struct resource *res; + const struct of_device_id *of_devid; + enum xgene_ahci_version version = XGENE_AHCI_V1; + const struct ata_port_info *ppi[] = { &xgene_ahci_v1_port_info, + &xgene_ahci_v2_port_info }; int rc; hpriv = ahci_platform_get_resources(pdev); @@ -677,6 +717,37 @@ static int xgene_ahci_probe(struct platform_device *pdev) ctx->csr_mux = csr; } + of_devid = of_match_device(xgene_ahci_of_match, dev); + if (of_devid) { + if (of_devid->data) + version = (enum xgene_ahci_version) of_devid->data; + } +#ifdef CONFIG_ACPI + else { + const struct acpi_device_id *acpi_id; + struct acpi_device_info *info; + acpi_status status; + + acpi_id = acpi_match_device(xgene_ahci_acpi_match, &pdev->dev); + if (!acpi_id) { + dev_warn(&pdev->dev, "No node entry in ACPI table. Assume version1\n"); + version = XGENE_AHCI_V1; + } + + if (acpi_id->driver_data) { + version = (enum xgene_ahci_version) acpi_id->driver_data; + status = acpi_get_object_info(ACPI_HANDLE(&pdev->dev), &info); + if (ACPI_FAILURE(status)) { + dev_warn(&pdev->dev, "%s: Error reading device info. Assume version1\n", + __func__); + version = XGENE_AHCI_V1; + } + if (info->valid & ACPI_VALID_CID) + version = XGENE_AHCI_V2; + } + } +#endif + dev_dbg(dev, "VAddr 0x%p Mmio VAddr 0x%p\n", ctx->csr_core, hpriv->mmio); @@ -704,9 +775,19 @@ static int xgene_ahci_probe(struct platform_device *pdev) /* Configure the host controller */ xgene_ahci_hw_init(hpriv); skip_clk_phy: - hpriv->flags = AHCI_HFLAG_NO_PMP | AHCI_HFLAG_NO_NCQ; - rc = ahci_platform_init_host(pdev, hpriv, &xgene_ahci_port_info, + switch (version) { + case XGENE_AHCI_V1: + hpriv->flags = AHCI_HFLAG_NO_NCQ; + break; + case XGENE_AHCI_V2: + hpriv->flags |= AHCI_HFLAG_YES_FBS | AHCI_HFLAG_EDGE_IRQ; + break; + default: + break; + } + + rc = ahci_platform_init_host(pdev, hpriv, ppi[version - 1], &ahci_platform_sht); if (rc) goto disable_resources; @@ -719,20 +800,6 @@ disable_resources: return rc; } -#ifdef CONFIG_ACPI -static const struct acpi_device_id xgene_ahci_acpi_match[] = { - { "APMC0D0D", }, - { } -}; -MODULE_DEVICE_TABLE(acpi, xgene_ahci_acpi_match); -#endif - -static const struct of_device_id xgene_ahci_of_match[] = { - {.compatible = "apm,xgene-ahci"}, - {}, -}; -MODULE_DEVICE_TABLE(of, xgene_ahci_of_match); - static struct platform_driver xgene_ahci_driver = { .probe = xgene_ahci_probe, .remove = ata_platform_remove_one, -- 1.8.2.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v6 1/1] ata: ahci_xgene: Add AHCI Support for 2nd HW version of APM X-Gene SoC AHCI SATA Host controller. 2015-05-11 8:36 ` [PATCH v6 1/1] ata: ahci_xgene: Add AHCI Support for 2nd HW version of APM X-Gene SoC AHCI SATA Host controller Suman Tripathi @ 2015-05-11 11:28 ` Tejun Heo 0 siblings, 0 replies; 6+ messages in thread From: Tejun Heo @ 2015-05-11 11:28 UTC (permalink / raw) To: Suman Tripathi Cc: olof, arnd, linux-scsi, linux-ide, devicetree, linux-arm-kernel, mlangsdo, jcm, patches Hello, Suman. On Mon, May 11, 2015 at 02:06:15PM +0530, Suman Tripathi wrote: > -#ifdef CONFIG_ACPI > -static const struct acpi_device_id xgene_ahci_acpi_match[] = { > - { "APMC0D0D", }, > - { } > -}; > -MODULE_DEVICE_TABLE(acpi, xgene_ahci_acpi_match); > -#endif > - > -static const struct of_device_id xgene_ahci_of_match[] = { > - {.compatible = "apm,xgene-ahci"}, > - {}, > -}; > -MODULE_DEVICE_TABLE(of, xgene_ahci_of_match); I applied the patch as-is this time but please don't combine code movement with actual changes in the future. Split them out to separate patches. It makes the changes a lot easier to follow and verify. Thanks. -- tejun ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v6 1/1] ata: ahci_xgene: Add AHCI Support for 2nd HW version of APM X-Gene SoC AHCI SATA Host controller. @ 2015-05-11 11:28 ` Tejun Heo 0 siblings, 0 replies; 6+ messages in thread From: Tejun Heo @ 2015-05-11 11:28 UTC (permalink / raw) To: linux-arm-kernel Hello, Suman. On Mon, May 11, 2015 at 02:06:15PM +0530, Suman Tripathi wrote: > -#ifdef CONFIG_ACPI > -static const struct acpi_device_id xgene_ahci_acpi_match[] = { > - { "APMC0D0D", }, > - { } > -}; > -MODULE_DEVICE_TABLE(acpi, xgene_ahci_acpi_match); > -#endif > - > -static const struct of_device_id xgene_ahci_of_match[] = { > - {.compatible = "apm,xgene-ahci"}, > - {}, > -}; > -MODULE_DEVICE_TABLE(of, xgene_ahci_of_match); I applied the patch as-is this time but please don't combine code movement with actual changes in the future. Split them out to separate patches. It makes the changes a lot easier to follow and verify. Thanks. -- tejun ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v6 1/1] ata: ahci_xgene: Add AHCI Support for 2nd HW version of APM X-Gene SoC AHCI SATA Host controller. 2015-05-11 11:28 ` Tejun Heo @ 2015-05-11 13:31 ` Suman Tripathi -1 siblings, 0 replies; 6+ messages in thread From: Suman Tripathi @ 2015-05-11 13:31 UTC (permalink / raw) To: Tejun Heo Cc: Olof Johansson, Arnd Bergmann, Linux SCSI List, linux-ide@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel, Mark Langsdorf, Jon Masters, patches Hi Tejun, On Mon, May 11, 2015 at 4:58 PM, Tejun Heo <tj@kernel.org> wrote: > Hello, Suman. > > On Mon, May 11, 2015 at 02:06:15PM +0530, Suman Tripathi wrote: >> -#ifdef CONFIG_ACPI >> -static const struct acpi_device_id xgene_ahci_acpi_match[] = { >> - { "APMC0D0D", }, >> - { } >> -}; >> -MODULE_DEVICE_TABLE(acpi, xgene_ahci_acpi_match); >> -#endif >> - >> -static const struct of_device_id xgene_ahci_of_match[] = { >> - {.compatible = "apm,xgene-ahci"}, >> - {}, >> -}; >> -MODULE_DEVICE_TABLE(of, xgene_ahci_of_match); > > I applied the patch as-is this time but please don't combine code > movement with actual changes in the future. Split them out to > separate patches. It makes the changes a lot easier to follow and > verify. Sorry . I will take care of it next time onwards. > > Thanks. > > -- > tejun -- Thanks, with regards, Suman Tripathi ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v6 1/1] ata: ahci_xgene: Add AHCI Support for 2nd HW version of APM X-Gene SoC AHCI SATA Host controller. @ 2015-05-11 13:31 ` Suman Tripathi 0 siblings, 0 replies; 6+ messages in thread From: Suman Tripathi @ 2015-05-11 13:31 UTC (permalink / raw) To: linux-arm-kernel Hi Tejun, On Mon, May 11, 2015 at 4:58 PM, Tejun Heo <tj@kernel.org> wrote: > Hello, Suman. > > On Mon, May 11, 2015 at 02:06:15PM +0530, Suman Tripathi wrote: >> -#ifdef CONFIG_ACPI >> -static const struct acpi_device_id xgene_ahci_acpi_match[] = { >> - { "APMC0D0D", }, >> - { } >> -}; >> -MODULE_DEVICE_TABLE(acpi, xgene_ahci_acpi_match); >> -#endif >> - >> -static const struct of_device_id xgene_ahci_of_match[] = { >> - {.compatible = "apm,xgene-ahci"}, >> - {}, >> -}; >> -MODULE_DEVICE_TABLE(of, xgene_ahci_of_match); > > I applied the patch as-is this time but please don't combine code > movement with actual changes in the future. Split them out to > separate patches. It makes the changes a lot easier to follow and > verify. Sorry . I will take care of it next time onwards. > > Thanks. > > -- > tejun -- Thanks, with regards, Suman Tripathi ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-05-11 13:31 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-05-11 8:36 [PATCH v6 0/1] ata: ahci_xgene: Add support for 2nd HW version of APM X-Gene SoC AHCI SATA Host controller driver Suman Tripathi 2015-05-11 8:36 ` [PATCH v6 1/1] ata: ahci_xgene: Add AHCI Support for 2nd HW version of APM X-Gene SoC AHCI SATA Host controller Suman Tripathi 2015-05-11 11:28 ` Tejun Heo 2015-05-11 11:28 ` Tejun Heo 2015-05-11 13:31 ` Suman Tripathi 2015-05-11 13:31 ` Suman Tripathi
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.