Message ID | 1397107468-640-3-git-send-email-wangkefeng.wang@huawei.com |
---|---|
State | New |
Headers | show |
Hello, On Thu, Apr 10, 2014 at 01:24:28PM +0800, Kefeng Wang wrote: > From: Kefeng Wang <kefeng.wang@linaro.org> > > The hip04 SoC of hisilicon has an AHCI compliant SATA controller, > and it is compliant with the ahci 1.3 and sata 3.0 specification. > > There is a wrong bit in HOST_CAP of hip04 sata controller, which > enable unsupported feature of FBS, use AHCI_HFLAG_NO_FBS hflag to > disable it. > > Cc: Hans de Geode <hdegoede@redhat.com> > Signed-off-by: Kefeng Wang <kefeng.wang@linaro.org> > @@ -54,8 +55,10 @@ static int ahci_probe(struct platform_device *pdev) > if (rc) > goto disable_resources; > } > + if (of_device_is_compatible(pdev->dev.of_node, "hisilicon,hisi-ahci")) > + pi.private_data = (void *)AHCI_HFLAG_NO_FBS; Hmmm.... this should work but looks a bit tedious and it could be better to have a better mechanism to match devices to their port_infos. Hans, can you please comment? If getting something more structured is too much work, I can go with this but wanna find out whether that's the case. Thanks.
Hi, On 04/16/2014 10:49 PM, Tejun Heo wrote: > Hello, > > On Thu, Apr 10, 2014 at 01:24:28PM +0800, Kefeng Wang wrote: >> From: Kefeng Wang <kefeng.wang@linaro.org> >> >> The hip04 SoC of hisilicon has an AHCI compliant SATA controller, >> and it is compliant with the ahci 1.3 and sata 3.0 specification. >> >> There is a wrong bit in HOST_CAP of hip04 sata controller, which >> enable unsupported feature of FBS, use AHCI_HFLAG_NO_FBS hflag to >> disable it. >> >> Cc: Hans de Geode <hdegoede@redhat.com> >> Signed-off-by: Kefeng Wang <kefeng.wang@linaro.org> >> @@ -54,8 +55,10 @@ static int ahci_probe(struct platform_device *pdev) >> if (rc) >> goto disable_resources; >> } >> + if (of_device_is_compatible(pdev->dev.of_node, "hisilicon,hisi-ahci")) >> + pi.private_data = (void *)AHCI_HFLAG_NO_FBS; > > Hmmm.... this should work but looks a bit tedious and it could be > better to have a better mechanism to match devices to their > port_infos. Hans, can you please comment? If getting something more > structured is too much work, I can go with this but wanna find out > whether that's the case. The more structured solution would be v1 of this patch, which I asked Kefan to change since it seemed overkill. But if you prefer that version that is fine with me. Note that as I've already mentioned earlier in the thread this could be made somewhat cleaner by having an host_flags parameter to ahci_platform_init_host(). Regards, Hans -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
On Thu, Apr 17, 2014 at 09:48:03AM +0200, Hans de Goede wrote: > > Hmmm.... this should work but looks a bit tedious and it could be > > better to have a better mechanism to match devices to their > > port_infos. Hans, can you please comment? If getting something more > > structured is too much work, I can go with this but wanna find out > > whether that's the case. > > The more structured solution would be v1 of this patch, which I asked > Kefan to change since it seemed overkill. But if you prefer that version > that is fine with me. I don't care either way at this point but if this grows to a large list, having a matching mechanism will probably be more manageable. > Note that as I've already mentioned earlier in the thread this could be > made somewhat cleaner by having an host_flags parameter to > ahci_platform_init_host(). Kefeng, can you please update accordingly to Hans' comment and repost? Thanks.
On 04/17 21:31, Tejun Heo wrote: > On Thu, Apr 17, 2014 at 09:48:03AM +0200, Hans de Goede wrote: >>> Hmmm.... this should work but looks a bit tedious and it could be >>> better to have a better mechanism to match devices to their >>> port_infos. Hans, can you please comment? If getting something more >>> structured is too much work, I can go with this but wanna find out >>> whether that's the case. >> >> The more structured solution would be v1 of this patch, which I asked >> Kefan to change since it seemed overkill. But if you prefer that version >> that is fine with me. > > I don't care either way at this point but if this grows to a large > list, having a matching mechanism will probably be more manageable. > >> Note that as I've already mentioned earlier in the thread this could be >> made somewhat cleaner by having an host_flags parameter to >> ahci_platform_init_host(). > > Kefeng, can you please update accordingly to Hans' comment and repost? Sure, Thanks for the advice from you and Hans, will update. > > Thanks. > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt index 48b285f..aab1d70 100644 --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt @@ -7,7 +7,8 @@ Required properties: - compatible : compatible list, one of "snps,spear-ahci", "snps,exynos5440-ahci", "ibm,476gtr-ahci", "allwinner,sun4i-a10-ahci", "fsl,imx53-ahci" - "fsl,imx6q-ahci" or "snps,dwc-ahci" + "fsl,imx6q-ahci", "snps,dwc-ahci" or + "hisilicon,hisi-ahci" - interrupts : <interrupt mapping for SATA IRQ> - reg : <registers mapping> diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index ef67e79..2ee1923 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c @@ -32,6 +32,7 @@ static int ahci_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct ahci_platform_data *pdata = dev_get_platdata(dev); + struct ata_port_info pi = ahci_port_info; struct ahci_host_priv *hpriv; int rc; @@ -54,8 +55,10 @@ static int ahci_probe(struct platform_device *pdev) if (rc) goto disable_resources; } + if (of_device_is_compatible(pdev->dev.of_node, "hisilicon,hisi-ahci")) + pi.private_data = (void *)AHCI_HFLAG_NO_FBS; - rc = ahci_platform_init_host(pdev, hpriv, &ahci_port_info, 0, 0); + rc = ahci_platform_init_host(pdev, hpriv, &pi, 0, 0); if (rc) goto pdata_exit; @@ -76,6 +79,7 @@ static const struct of_device_id ahci_of_match[] = { { .compatible = "snps,exynos5440-ahci", }, { .compatible = "ibm,476gtr-ahci", }, { .compatible = "snps,dwc-ahci", }, + { .compatible = "hisilicon,hisi-ahci", }, {}, }; MODULE_DEVICE_TABLE(of, ahci_of_match);