Add support for MediaTek AHCI SATA
Subsystems (3)
cover Add support for MediaTek AHCI SATA
Hi,
This patch series add support for AHCI compatible SATA controller, and it is compliant with the ahci 1.3 and sata 3.0 specification. This driver is slightly different than ahci_platform.c (eg. reset control, subsystem setting).
Ryder Lee (2):
ata: mediatek: add support for MediaTek SATA controller
dt-bindings: ata: add DT bindings for MediaTek SATA controller
Documentation/devicetree/bindings/ata/ahci-mtk.txt | 48 +++++ drivers/ata/Kconfig | 10 ++ drivers/ata/Makefile | 1 + drivers/ata/ahci_mtk.c | 196 +++++++++++++++++++++ 4 files changed, 255 insertions(+) create mode 100644 Documentation/devicetree/bindings/ata/ahci-mtk.txt create mode 100644 drivers/ata/ahci_mtk.c
Signature · 1 line
1.9.1
PATCH 1/2 ata: mediatek: add support for MediaTek SATA controller
This adds support the AHCI-compliant Serial ATA controller present on MediaTek SoCs.
--- drivers/ata/Kconfig | 10 +++ drivers/ata/Makefile | 1 + drivers/ata/ahci_mtk.c | 196 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 207 insertions(+) create mode 100644 drivers/ata/ahci_mtk.c
drivers/ata/Kconfig +10 -0
@@ -153,6 +153,16 @@ config AHCI_CEVA If unsure, say N. +config AHCI_MTK + tristate "MediaTek AHCI SATA support" + depends on ARCH_MEDIATEK + select MFD_SYSCON + help + This option enables support for the MediaTek SoC's + onboard AHCI SATA controller. + + If unsure, say N. + config AHCI_MVEBU tristate "Marvell EBU AHCI SATA support" depends on ARCH_MVEBU
drivers/ata/Makefile +1 -0
@@ -17,6 +17,7 @@ obj-$(CONFIG_AHCI_CEVA) += ahci_ceva.o libahci.o libahci_platform.o obj-$(CONFIG_AHCI_DA850) += ahci_da850.o libahci.o libahci_platform.o obj-$(CONFIG_AHCI_DM816) += ahci_dm816.o libahci.o libahci_platform.o obj-$(CONFIG_AHCI_IMX) += ahci_imx.o libahci.o libahci_platform.o +obj-$(CONFIG_AHCI_MTK) += ahci_mtk.o libahci.o libahci_platform.o obj-$(CONFIG_AHCI_MVEBU) += ahci_mvebu.o libahci.o libahci_platform.o obj-$(CONFIG_AHCI_OCTEON) += ahci_octeon.o obj-$(CONFIG_AHCI_SUNXI) += ahci_sunxi.o libahci.o libahci_platform.o
drivers/ata/ahci_mtk.c new file +196 -0
196 lines not on this page · raw message
Signature · 6 lines
1.9.1 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
kbuild test robot
build botRe: [PATCH 1/2] ata: mediatek: add support for MediaTek SATA controller
reproduce: wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross…
Hi Ryder,
[auto build test WARNING on tj-libata/for-next]
[also build test WARNING on v4.13-rc2 next-20170728]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Ryder-Lee/Add-support-for-MediaTek-AHCI-SATA/20170728-164513 base: https://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git for-next config: arm64-allyesconfig (attached as .config) compiler: aarch64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=arm64
All warnings (new ones prefixed by >>):
drivers/ata/ahci_mtk.c: In function 'mtk_ahci_platform_resets':
>> drivers/ata/ahci_mtk.c:60:32: warning: comparison of constant '-517' with boolean expression is always false [-Wbool-compare]
if (IS_ERR(drv_data->axi_rst) == -EPROBE_DEFER)
^~
drivers/ata/ahci_mtk.c:64:31: warning: comparison of constant '-517' with boolean expression is always false [-Wbool-compare]
if (IS_ERR(drv_data->sw_rst) == -EPROBE_DEFER)
^~
drivers/ata/ahci_mtk.c:68:32: warning: comparison of constant '-517' with boolean expression is always false [-Wbool-compare]
if (IS_ERR(drv_data->reg_rst) == -EPROBE_DEFER)
^~
>> drivers/ata/ahci_mtk.c:60:6: warning: ignoring return value of 'IS_ERR', declared with attribute warn_unused_result [-Wunused-result]
if (IS_ERR(drv_data->axi_rst) == -EPROBE_DEFER)
^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/ata/ahci_mtk.c:64:6: warning: ignoring return value of 'IS_ERR', declared with attribute warn_unused_result [-Wunused-result]
if (IS_ERR(drv_data->sw_rst) == -EPROBE_DEFER)
^~~~~~~~~~~~~~~~~~~~~~~~
drivers/ata/ahci_mtk.c:68:6: warning: ignoring return value of 'IS_ERR', declared with attribute warn_unused_result [-Wunused-result]
if (IS_ERR(drv_data->reg_rst) == -EPROBE_DEFER)
^~~~~~~~~~~~~~~~~~~~~~~~~vim +60 drivers/ata/ahci_mtk.c
51
52 static int mtk_ahci_platform_resets(struct ahci_host_priv *hpriv,
53 struct device *dev)
54 {
55 struct mtk_ahci_drv_data *drv_data = hpriv->plat_data;
56 int err;
57
58 /* reset AXI bus and phy part */
59 drv_data->axi_rst = devm_reset_control_get_optional(dev, "axi-rst");
> 60 if (IS_ERR(drv_data->axi_rst) == -EPROBE_DEFER)
61 return -EPROBE_DEFER;
62
63 drv_data->sw_rst = devm_reset_control_get_optional(dev, "sw-rst");
64 if (IS_ERR(drv_data->sw_rst) == -EPROBE_DEFER)
65 return -EPROBE_DEFER;
66
67 drv_data->reg_rst = devm_reset_control_get_optional(dev, "reg-rst");
68 if (IS_ERR(drv_data->reg_rst) == -EPROBE_DEFER)
69 return -EPROBE_DEFER;
70
71 err = reset_control_assert(drv_data->axi_rst);
72 if (err) {
73 dev_err(dev, "assert axi bus failed\n");
74 return err;
75 }
76
77 err = reset_control_assert(drv_data->sw_rst);
78 if (err) {
79 dev_err(dev, "assert phy digital part failed\n");
80 return err;
81 }
82
83 err = reset_control_assert(drv_data->reg_rst);
84 if (err) {
85 dev_err(dev, "assert phy register part failed\n");
86 return err;
87 }
88
89 err = reset_control_deassert(drv_data->reg_rst);
90 if (err) {
91 dev_err(dev, "deassert phy register part failed\n");
92 return err;
93 }
94
95 err = reset_control_deassert(drv_data->sw_rst);
96 if (err) {
97 dev_err(dev, "deassert phy digital part failed\n");
98 return err;
99 } 100
101 err = reset_control_deassert(drv_data->axi_rst);
102 if (err) {
103 dev_err(dev, "deassert axi bus failed\n");
104 return err;
105 }
106
107 return 0;
108 }
109
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
PATCH 2/2 dt-bindings: ata: add DT bindings for MediaTek SATA controller
In reply to Ryder LeeAdd DT bindings for the onboard SATA controller present on the MediaTek SoCs.
--- Documentation/devicetree/bindings/ata/ahci-mtk.txt | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Documentation/devicetree/bindings/ata/ahci-mtk.txt
Documentation/devicetree/bindings/ata/ahci-mtk.txt new file +48 -0
@@ -0,0 +1,48 @@ +MediaTek Seria ATA controller + +Required properties: + - compatible : Must be "mediatek,ahci". + - reg : Physical base addresses and length of register sets. + - interrupts : Interrupt associated with the SATA device. + - interrupt-names : Associated name must be: "hostc". + - clocks : The phandle for the clock. + - clock-names : Associated name must be: "ahb", "axi", "asic", "rbc", "pm" + - phys : The phandle for the PHY port. + - phy-names : Associated name must be: "sata-phy". + - ports-implemented : Mask that indicates which ports that the HBA supports + are available for software to use. Useful if PORTS_IMPL + is not programmed by the BIOS, which is true with some + embedded SOC's. +Optional properties: + - power-domains : A phandle and power domain specifier pair to the power + domain which is responsible for collapsing and restoring + power to the peripheral. + - resets : Must contain an entry for each entry in reset-names. + See ../reset/reset.txt for details. + - reset-names : Associated names must be: "axi-rst", "sw-rst", "reg-rst". + - mediatek,phy-mode : A phandle to the system controller, used to enable + SATA function. + +Example: + + sata: sata@1a200000 { + compatible = "mediatek,ahci"; + reg = <0 0x1a200000 0 0x1100>; + interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "hostc"; + clocks = <&pciesys CLK_SATA_AHB_EN>, + <&pciesys CLK_SATA_AXI_EN>, + <&pciesys CLK_SATA_ASIC_EN>, + <&pciesys CLK_SATA_RBC_EN>, + <&pciesys CLK_SATA_PM_EN>; + clock-names = "ahb", "axi", "asic", "rbc", "pm"; + phys = <&u3port1 PHY_TYPE_SATA>; + phy-names = "sata-phy"; + ports-implemented = <0x1>; + power-domains = <&scpsys MT7622_POWER_DOMAIN_HIF0>; + resets = <&pciesys MT7622_SATA_AXI_BUS_RST>, + <&pciesys MT7622_SATA_PHY_SW_RST>, + <&pciesys MT7622_SATA_PHY_REG_RST>; + reset-names = "axi-rst", "sw-rst", "reg-rst"; + mediatek,phy-mode = <&pciesys>; + };
Signature · 1 line
1.9.1
Re: [PATCH 2/2] dt-bindings: ata: add DT bindings for MediaTek SATA controller
Hello!
Quoted 15 lines · Ryder Lee
Add DT bindings for the onboard SATA controller present on the MediaTek SoCs.
Signed-off-by Ryder Lee <[email protected]>--- Documentation/devicetree/bindings/ata/ahci-mtk.txt | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+)create mode 100644
Documentation/devicetree/bindings/ata/ahci-mtk.txtDocumentation/devicetree/bindings/ata/ahci-mtk.txt new file +0
-0
Documentation/devicetree/bindings/ata/ahci-mtk.txt line 8
Quoted 8 lines
Documentation/devicetree/bindings/ata/ahci-mtk.txt new file +8
-0@@ -0,0 +1,48 @@ +MediaTek Seria ATA controller + +Required properties: + - compatible : Must be "mediatek,ahci". + - reg : Physical base addresses and length of register sets. + - interrupts : Interrupt associated with the SATA device. + - interrupt-names : Associated name must be: "hostc". + - clocks : The phandle for the clock.
Your example shows that you need both phandle and specifier (afetr phandle).
Documentation/devicetree/bindings/ata/ahci-mtk.txt line 10
Quoted 2 lines
Documentation/devicetree/bindings/ata/ahci-mtk.txt new file +2
-0+ - clock-names : Associated name must be: "ahb", "axi", "asic", "rbc", "pm" + - phys : The phandle for the PHY port.
Likewise.
Documentation/devicetree/bindings/ata/ahci-mtk.txt line 15
Quoted 5 lines
Documentation/devicetree/bindings/ata/ahci-mtk.txt new file +5
-0+ - phy-names : Associated name must be: "sata-phy". + - ports-implemented : Mask that indicates which ports that the HBA supports + are available for software to use. Useful if PORTS_IMPL + is not programmed by the BIOS, which is true with some + embedded SOC's.
An empty line wouldn't hurt here...
Quoted 23 lines
Documentation/devicetree/bindings/ata/ahci-mtk.txt new file +23
-0+Optional properties: + - power-domains : A phandle and power domain specifier pair to the power + domain which is responsible for collapsing and restoring + power to the peripheral. + - resets : Must contain an entry for each entry in reset-names. + See ../reset/reset.txt for details. + - reset-names : Associated names must be: "axi-rst", "sw-rst", "reg-rst". + - mediatek,phy-mode : A phandle to the system controller, used to enable + SATA function. + +Example: + + sata: sata@1a200000 { + compatible = "mediatek,ahci"; + reg = <0 0x1a200000 0 0x1100>; + interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "hostc"; + clocks = <&pciesys CLK_SATA_AHB_EN>, + <&pciesys CLK_SATA_AXI_EN>, + <&pciesys CLK_SATA_ASIC_EN>, + <&pciesys CLK_SATA_RBC_EN>, + <&pciesys CLK_SATA_PM_EN>; + clock-names = "ahb", "axi", "asic", "rbc", "pm";
Documentation/devicetree/bindings/ata/ahci-mtk.txt line 48
Quoted 10 lines
Documentation/devicetree/bindings/ata/ahci-mtk.txt new file +10
-0+ phys = <&u3port1 PHY_TYPE_SATA>; + phy-names = "sata-phy"; + ports-implemented = <0x1>; + power-domains = <&scpsys MT7622_POWER_DOMAIN_HIF0>; + resets = <&pciesys MT7622_SATA_AXI_BUS_RST>, + <&pciesys MT7622_SATA_PHY_SW_RST>, + <&pciesys MT7622_SATA_PHY_REG_RST>; + reset-names = "axi-rst", "sw-rst", "reg-rst"; + mediatek,phy-mode = <&pciesys>; + };
MBR, Sergei
Re: [PATCH 2/2] dt-bindings: ata: add DT bindings for MediaTek SATA controller
Quoted 7 lines · Sergei Shtylyov
Quoted 6 lines
+Required properties:
+ - compatible : Must be "mediatek,ahci".
+ - reg : Physical base addresses and length of register sets.
+ - interrupts : Interrupt associated with the SATA device.
+ - interrupt-names : Associated name must be: "hostc".
+ - clocks : The phandle for the clock.
Quoted 6 lines
Your example shows that you need both phandle and specifier (afetr phandle).
Quoted 2 lines
+ - clock-names : Associated name must be: "ahb", "axi", "asic", "rbc", "pm"
+ - phys : The phandle for the PHY port.Likewise.
Oh yeah, I forgot about that.
Quoted 7 lines
Documentation/devicetree/bindings/ata/ahci-mtk.txt line 15
Quoted 5 lines
+ - phy-names : Associated name must be: "sata-phy".
+ - ports-implemented : Mask that indicates which ports that the HBA supportsDocumentation/devicetree/bindings/ata/ahci-mtk.txt new file +3
-0+ are available for software to use. Useful if PORTS_IMPL + is not programmed by the BIOS, which is true with some + embedded SOC's.An empty line wouldn't hurt here...
Okay.
Quoted 9 lines
Documentation/devicetree/bindings/ata/ahci-mtk.txt line 24
Quoted 9 lines
Documentation/devicetree/bindings/ata/ahci-mtk.txt new file +9
-0+Optional properties: + - power-domains : A phandle and power domain specifier pair to the power + domain which is responsible for collapsing and restoring + power to the peripheral. + - resets : Must contain an entry for each entry in reset-names. + See ../reset/reset.txt for details. + - reset-names : Associated names must be: "axi-rst", "sw-rst", "reg-rst". + - mediatek,phy-mode : A phandle to the system controller, used to enable + SATA function.
Thanks!
Ryder.