Message ID | 20250120184728.18325-1-ansuelsmth@gmail.com |
---|---|
State | New |
Headers | show |
Series | [v2,1/2] dt-bindings: mmc: mtk-sd: Add eMMC for AN7581 | expand |
On Mon, 20 Jan 2025 19:47:01 +0100, Christian Marangi wrote: > Document eMMC compatible for AN7581. This eMMC controller doesn't have > regulator exposed to the system and have a single clock only for source > clock and only default pintctrl. > > Rework the schema to permit these new requirements and make supply > optional only for airoha,an7581-mmc compatible. > > Also provide an example for airoha,an7581-mmc. > > Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> > --- > Changes v2: > - Drop else condition > - Move Required and pinctrl property to dedicated if condition > > .../devicetree/bindings/mmc/mtk-sd.yaml | 116 +++++++++++++++++- > 1 file changed, 110 insertions(+), 6 deletions(-) > My bot found errors running 'make dt_binding_check' on your patch: yamllint warnings/errors: dtschema/dtc warnings/errors: Error: Documentation/devicetree/bindings/mmc/mtk-sd.example.dts:104.31-32 syntax error FATAL ERROR: Unable to parse input tree make[2]: *** [scripts/Makefile.dtbs:131: Documentation/devicetree/bindings/mmc/mtk-sd.example.dtb] Error 1 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [/builds/robherring/dt-review-ci/linux/Makefile:1506: dt_binding_check] Error 2 make: *** [Makefile:251: __sub-make] Error 2 doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20250120184728.18325-1-ansuelsmth@gmail.com The base for the series is generally the latest rc1. A different dependency should be noted in *this* patch. If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date: pip3 install dtschema --upgrade Please check and re-submit after running the above command yourself. Note that DT_SCHEMA_FILES can be set to your schema file to speed up checking your schema. However, it must be unset to test all examples with your schema.
On Mon, Jan 20, 2025 at 07:47:02PM +0100, Christian Marangi wrote: > - pinctrl_select_state(host->pinctrl, host->pins_uhs); > + /* Skip setting uhs pins if not supported */ > + if (host->pins_uhs) > + pinctrl_select_state(host->pinctrl, host->pins_uhs); > } else { > dev_pm_clear_wake_irq(host->dev); > } > @@ -2816,9 +2835,12 @@ static int msdc_of_clock_parse(struct platform_device *pdev, > if (IS_ERR(host->src_clk)) > return PTR_ERR(host->src_clk); > > - host->h_clk = devm_clk_get(&pdev->dev, "hclk"); > - if (IS_ERR(host->h_clk)) > - return PTR_ERR(host->h_clk); > + /* AN7581 SoC doesn't have hclk */ > + if (!device_is_compatible(&pdev->dev, "airoha,an7581-mmc")) { Please avoid coding compatible in multiple places. Not only because above check is slow comparing to check on integer, but it just scales poorly and leads to less readable further code. Use driver data with model name or flags/quirks bitmask. Best regards, Krzysztof
On Tue, Jan 21, 2025 at 08:59:19AM +0100, Krzysztof Kozlowski wrote: > On Mon, Jan 20, 2025 at 07:47:02PM +0100, Christian Marangi wrote: > > - pinctrl_select_state(host->pinctrl, host->pins_uhs); > > + /* Skip setting uhs pins if not supported */ > > + if (host->pins_uhs) > > + pinctrl_select_state(host->pinctrl, host->pins_uhs); > > } else { > > dev_pm_clear_wake_irq(host->dev); > > } > > @@ -2816,9 +2835,12 @@ static int msdc_of_clock_parse(struct platform_device *pdev, > > if (IS_ERR(host->src_clk)) > > return PTR_ERR(host->src_clk); > > > > - host->h_clk = devm_clk_get(&pdev->dev, "hclk"); > > - if (IS_ERR(host->h_clk)) > > - return PTR_ERR(host->h_clk); > > + /* AN7581 SoC doesn't have hclk */ > > + if (!device_is_compatible(&pdev->dev, "airoha,an7581-mmc")) { > > Please avoid coding compatible in multiple places. Not only because > above check is slow comparing to check on integer, but it just scales > poorly and leads to less readable further code. Use driver data with > model name or flags/quirks bitmask. > I implemented this in a more compatible way so we don't need an additional compatible anymore. Soo this series is not needed anymore. Should I flag these as not applicable anywhere in the patchwork systems?
On Mon, 27 Jan 2025 at 12:41, Christian Marangi <ansuelsmth@gmail.com> wrote: > > On Tue, Jan 21, 2025 at 08:59:19AM +0100, Krzysztof Kozlowski wrote: > > On Mon, Jan 20, 2025 at 07:47:02PM +0100, Christian Marangi wrote: > > > - pinctrl_select_state(host->pinctrl, host->pins_uhs); > > > + /* Skip setting uhs pins if not supported */ > > > + if (host->pins_uhs) > > > + pinctrl_select_state(host->pinctrl, host->pins_uhs); > > > } else { > > > dev_pm_clear_wake_irq(host->dev); > > > } > > > @@ -2816,9 +2835,12 @@ static int msdc_of_clock_parse(struct platform_device *pdev, > > > if (IS_ERR(host->src_clk)) > > > return PTR_ERR(host->src_clk); > > > > > > - host->h_clk = devm_clk_get(&pdev->dev, "hclk"); > > > - if (IS_ERR(host->h_clk)) > > > - return PTR_ERR(host->h_clk); > > > + /* AN7581 SoC doesn't have hclk */ > > > + if (!device_is_compatible(&pdev->dev, "airoha,an7581-mmc")) { > > > > Please avoid coding compatible in multiple places. Not only because > > above check is slow comparing to check on integer, but it just scales > > poorly and leads to less readable further code. Use driver data with > > model name or flags/quirks bitmask. > > > > I implemented this in a more compatible way so we don't need an > additional compatible anymore. Soo this series is not needed anymore. > > Should I flag these as not applicable anywhere in the patchwork systems? No need to, just send new versions. Kind regards Uffe
diff --git a/Documentation/devicetree/bindings/mmc/mtk-sd.yaml b/Documentation/devicetree/bindings/mmc/mtk-sd.yaml index f86ebd81f5a5..4c1da48aaa1b 100644 --- a/Documentation/devicetree/bindings/mmc/mtk-sd.yaml +++ b/Documentation/devicetree/bindings/mmc/mtk-sd.yaml @@ -14,6 +14,7 @@ properties: compatible: oneOf: - enum: + - airoha,an7581-mmc - mediatek,mt2701-mmc - mediatek,mt2712-mmc - mediatek,mt6779-mmc @@ -48,11 +49,11 @@ properties: clocks: description: Should contain phandle for the clock feeding the MMC controller. - minItems: 2 + minItems: 1 maxItems: 7 clock-names: - minItems: 2 + minItems: 1 maxItems: 7 interrupts: @@ -72,7 +73,7 @@ properties: Should at least contain default and state_uhs. To support SDIO in-band wakeup, dat1 pin will be switched between GPIO mode and SDIO DAT1 mode, state_eint is mandatory in this scenario. - minItems: 2 + minItems: 1 items: - const: default - const: state_uhs @@ -170,9 +171,6 @@ required: - clock-names - pinctrl-names - pinctrl-0 - - pinctrl-1 - - vmmc-supply - - vqmmc-supply allOf: - $ref: mmc-controller.yaml# @@ -275,12 +273,14 @@ allOf: then: properties: clocks: + minItems: 2 items: - description: source clock - description: HCLK which used for host - description: Advanced eXtensible Interface - description: Advanced High-performance Bus clock clock-names: + minItems: 2 items: - const: source - const: hclk @@ -317,6 +317,7 @@ allOf: then: properties: clocks: + minItems: 2 items: - description: source clock - description: HCLK which used for host @@ -326,6 +327,7 @@ allOf: - description: AXI bus clock gate - description: AHB bus clock gate clock-names: + minItems: 2 items: - const: source - const: hclk @@ -335,6 +337,89 @@ allOf: - const: axi_cg - const: ahb_cg + - if: + properties: + compatible: + contains: + const: airoha,an7581-mmc + then: + properties: + clocks: + items: + - description: source clock + + clock-names: + items: + - const: source + + - if: + properties: + compatible: + enum: + - mediatek,mt2701-mmc + - mediatek,mt2712-mmc + - mediatek,mt6779-mmc + - mediatek,mt6795-mmc + - mediatek,mt7620-mmc + - mediatek,mt7622-mmc + - mediatek,mt7623-mmc + - mediatek,mt7986-mmc + - mediatek,mt7988-mmc + - mediatek,mt8135-mmc + - mediatek,mt8173-mmc + - mediatek,mt8183-mmc + - mediatek,mt8186-mmc + - mediatek,mt8188-mmc + - mediatek,mt8192-mmc + - mediatek,mt8195-mmc + - mediatek,mt8196-mmc + - mediatek,mt8365-mmc + - mediatek,mt8516-mmc + then: + properties: + pinctrl-names: + minItems: 2 + + - if: + properties: + compatible: + contains: + const: airoha,an7581-mmc + then: + properties: + pinctrl-names: + items: + - const: default + + - if: + properties: + compatible: + enum: + - mediatek,mt2701-mmc + - mediatek,mt2712-mmc + - mediatek,mt6779-mmc + - mediatek,mt6795-mmc + - mediatek,mt7620-mmc + - mediatek,mt7622-mmc + - mediatek,mt7623-mmc + - mediatek,mt7986-mmc + - mediatek,mt7988-mmc + - mediatek,mt8135-mmc + - mediatek,mt8173-mmc + - mediatek,mt8183-mmc + - mediatek,mt8186-mmc + - mediatek,mt8188-mmc + - mediatek,mt8192-mmc + - mediatek,mt8195-mmc + - mediatek,mt8196-mmc + - mediatek,mt8365-mmc + - mediatek,mt8516-mmc + then: + required: + - pinctrl-1 + - vmmc-supply + - vqmmc-supply + unevaluatedProperties: false examples: @@ -389,5 +474,24 @@ examples: vqmmc-supply = <&mt6397_vgp3_reg>; mmc-pwrseq = <&wifi_pwrseq>; }; + - | + #include <dt-bindings/interrupt-controller/irq.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/clock/en7523-clk.h> + mmc@1fa0e000 { + compatible = "airoha,an7581-mmc"; + reg = <0x1fa0e000 0x1000>, + <0x1fa0c000 0x60>; + clocks = <&scuclk EN7581_CLK_EMMC>; + clock-names = "source"; + interrupts = <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&mmc_pins>; + bus-width = <4>; + max-frequency = <52000000>; + disable-wp; + cap-mmc-highspeed; + non-removable; + }; ...
Document eMMC compatible for AN7581. This eMMC controller doesn't have regulator exposed to the system and have a single clock only for source clock and only default pintctrl. Rework the schema to permit these new requirements and make supply optional only for airoha,an7581-mmc compatible. Also provide an example for airoha,an7581-mmc. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> --- Changes v2: - Drop else condition - Move Required and pinctrl property to dedicated if condition .../devicetree/bindings/mmc/mtk-sd.yaml | 116 +++++++++++++++++- 1 file changed, 110 insertions(+), 6 deletions(-)