* [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC @ 2024-08-02 9:05 Kevin Chen 2024-08-02 9:05 ` [PATCH v2 0/9] " Kevin Chen ` (9 more replies) 0 siblings, 10 replies; 28+ messages in thread From: Kevin Chen @ 2024-08-02 9:05 UTC (permalink / raw) To: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, kevin_chen, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk This patchset adds initial support for the ASPEED. AST27XX Board Management controller (BMC) SoC family. AST2700 is ASPEED's 8th-generation server management processor. Featuring a quad-core ARM Cortex A35 64-bit processor and two independent ARM Cortex M4 processors This patchset adds minimal architecture and drivers such as: Clocksource, Clock and Reset This patchset was tested on the ASPEED AST2700 evaluation board. Kevin Chen (10): dt-binding: mfd: aspeed,ast2x00-scu: Add binding for ASPEED AST2700 SCU dt-binding: clk: ast2700: Add binding for Aspeed AST27xx Clock clk: ast2700: add clock controller dt-bindings: reset: ast2700: Add binding for ASPEED AST2700 Reset dt-bindings: arm: aspeed: Add maintainer dt-bindings: arm: aspeed: Add aspeed,ast2700-evb compatible string arm64: aspeed: Add support for ASPEED AST2700 BMC SoC arm64: dts: aspeed: Add initial AST27XX device tree arm64: dts: aspeed: Add initial AST2700 EVB device tree arm64: defconfig: Add ASPEED AST2700 family support .../bindings/arm/aspeed/aspeed.yaml | 6 + .../bindings/mfd/aspeed,ast2x00-scu.yaml | 3 + MAINTAINERS | 3 + arch/arm64/Kconfig.platforms | 14 + arch/arm64/boot/dts/Makefile | 1 + arch/arm64/boot/dts/aspeed/Makefile | 4 + arch/arm64/boot/dts/aspeed/aspeed-g7.dtsi | 217 +++ arch/arm64/boot/dts/aspeed/ast2700-evb.dts | 50 + arch/arm64/configs/defconfig | 1 + drivers/clk/Makefile | 1 + drivers/clk/clk-ast2700.c | 1166 +++++++++++++++++ .../dt-bindings/clock/aspeed,ast2700-clk.h | 180 +++ .../dt-bindings/reset/aspeed,ast2700-reset.h | 126 ++ 13 files changed, 1772 insertions(+) create mode 100644 arch/arm64/boot/dts/aspeed/Makefile create mode 100644 arch/arm64/boot/dts/aspeed/aspeed-g7.dtsi create mode 100644 arch/arm64/boot/dts/aspeed/ast2700-evb.dts create mode 100644 drivers/clk/clk-ast2700.c create mode 100644 include/dt-bindings/clock/aspeed,ast2700-clk.h create mode 100644 include/dt-bindings/reset/aspeed,ast2700-reset.h -- 2.34.1 ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 0/9] Introduce ASPEED AST27XX BMC SoC 2024-08-02 9:05 [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC Kevin Chen @ 2024-08-02 9:05 ` Kevin Chen 2024-08-02 9:18 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 1/9] dt-bindings: mfd: aspeed,ast2x00-scu: Add ASPEED AST2700-SCUX schema Kevin Chen ` (8 subsequent siblings) 9 siblings, 1 reply; 28+ messages in thread From: Kevin Chen @ 2024-08-02 9:05 UTC (permalink / raw) To: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, kevin_chen, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk This patchset adds initial support for the ASPEED. AST27XX Board Management controller (BMC) SoC family. AST2700 is ASPEED's 8th-generation server management processor. Featuring a quad-core ARM Cortex A35 64-bit processor and two independent ARM Cortex M4 processors This patchset adds minimal architecture and drivers such as: Clocksource, Clock and Reset This patchset was tested on the ASPEED AST2700 evaluation board. Kevin Chen (9): dt-bindings: mfd: aspeed,ast2x00-scu: Add ASPEED AST2700-SCUX schema dt-bindings: reset: ast2700: Add ASPEED AST27xx Reset schema dt-bindings: clk: ast2700: Add ASPEED AST27XX Clock schema clk: ast2700: add clock controller dt-bindings: arm: aspeed: Add ASPEED AST27XX SoC arm64: aspeed: Add support for ASPEED AST27XX BMC SoC arm64: defconfig: Add ASPEED AST2700 family support arm64: dts: aspeed: Add initial AST27XX device tree arm64: dts: aspeed: Add initial AST2700 EVB device tree .../bindings/arm/aspeed/aspeed.yaml | 7 + .../bindings/mfd/aspeed,ast2x00-scu.yaml | 70 +- MAINTAINERS | 3 + arch/arm64/Kconfig.platforms | 14 + arch/arm64/boot/dts/Makefile | 1 + arch/arm64/boot/dts/aspeed/Makefile | 4 + arch/arm64/boot/dts/aspeed/aspeed-g7.dtsi | 185 +++ arch/arm64/boot/dts/aspeed/ast2700-evb.dts | 58 + arch/arm64/configs/defconfig | 1 + drivers/clk/Makefile | 1 + drivers/clk/clk-ast2700.c | 1173 +++++++++++++++++ .../dt-bindings/clock/aspeed,ast2700-clk.h | 175 +++ .../dt-bindings/reset/aspeed,ast2700-reset.h | 132 ++ 13 files changed, 1804 insertions(+), 20 deletions(-) create mode 100644 arch/arm64/boot/dts/aspeed/Makefile create mode 100644 arch/arm64/boot/dts/aspeed/aspeed-g7.dtsi create mode 100644 arch/arm64/boot/dts/aspeed/ast2700-evb.dts create mode 100644 drivers/clk/clk-ast2700.c create mode 100644 include/dt-bindings/clock/aspeed,ast2700-clk.h create mode 100644 include/dt-bindings/reset/aspeed,ast2700-reset.h -- 2.34.1 ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 0/9] Introduce ASPEED AST27XX BMC SoC 2024-08-02 9:05 ` [PATCH v2 0/9] " Kevin Chen @ 2024-08-02 9:18 ` Krzysztof Kozlowski 0 siblings, 0 replies; 28+ messages in thread From: Krzysztof Kozlowski @ 2024-08-02 9:18 UTC (permalink / raw) To: Kevin Chen, robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On 02/08/2024 11:05, Kevin Chen wrote: > This patchset adds initial support for the ASPEED. > AST27XX Board Management controller (BMC) SoC family. > > AST2700 is ASPEED's 8th-generation server management processor. > Featuring a quad-core ARM Cortex A35 64-bit processor and two > independent ARM Cortex M4 processors > > This patchset adds minimal architecture and drivers such as: > Clocksource, Clock and Reset > > This patchset was tested on the ASPEED AST2700 evaluation board. Where is the changelog? You ignored several comments, did not bother to respond them, did not implement them. No changelog means you sent exactly the same? This is not how it works. Please read submitting patches, respond to all comments or implement them, provide *DETAILED* changelog in the cover letter or individual patches (---). Best regards, Krzysztof ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 1/9] dt-bindings: mfd: aspeed,ast2x00-scu: Add ASPEED AST2700-SCUX schema 2024-08-02 9:05 [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC Kevin Chen 2024-08-02 9:05 ` [PATCH v2 0/9] " Kevin Chen @ 2024-08-02 9:05 ` Kevin Chen 2024-08-02 9:13 ` Krzysztof Kozlowski 2024-08-02 10:29 ` Rob Herring (Arm) 2024-08-02 9:05 ` [PATCH v2 2/9] dt-bindings: reset: ast2700: Add ASPEED AST27xx Reset schema Kevin Chen ` (7 subsequent siblings) 9 siblings, 2 replies; 28+ messages in thread From: Kevin Chen @ 2024-08-02 9:05 UTC (permalink / raw) To: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, kevin_chen, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk Add compatible for two SCU of SCU0 and SCU1 in AST2700. Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> --- .../bindings/mfd/aspeed,ast2x00-scu.yaml | 70 +++++++++++++------ 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml b/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml index 86ee69c0f45b..3426b1c84132 100644 --- a/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml +++ b/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml @@ -13,33 +13,62 @@ description: maintainers: - Joel Stanley <joel@jms.id.au> - Andrew Jeffery <andrew@aj.id.au> + - Kevin Chen <kevin_chen@aspeedtech.com> -properties: - compatible: - items: - - enum: - - aspeed,ast2400-scu - - aspeed,ast2500-scu - - aspeed,ast2600-scu - - const: syscon - - const: simple-mfd +scu@ast2xx00-scu: + properties: + compatible: + items: + - enum: + - aspeed,ast2400-scu + - aspeed,ast2500-scu + - aspeed,ast2600-scu + - const: syscon + - const: simple-mfd - reg: - maxItems: 1 + reg: + maxItems: 1 - ranges: true + ranges: true - '#address-cells': - const: 1 + '#address-cells': + const: 1 - '#size-cells': - const: 1 + '#size-cells': + const: 1 - '#clock-cells': - const: 1 + '#clock-cells': + const: 1 - '#reset-cells': - const: 1 + '#reset-cells': + const: 1 + +scu@ast2xx00-scux: + properties: + compatible: + items: + - enum: + - aspeed,ast2700-scu0 + - aspeed,ast2700-scu1 + - const: syscon + - const: simple-mfd + + reg: + maxItems: 1 + + ranges: true + + '#address-cells': + const: 2 + + '#size-cells': + const: 2 + + '#clock-cells': + const: 1 + + '#reset-cells': + const: 1 patternProperties: '^p2a-control@[0-9a-f]+$': @@ -76,6 +105,7 @@ patternProperties: - aspeed,ast2400-silicon-id - aspeed,ast2500-silicon-id - aspeed,ast2600-silicon-id + - aspeed,ast2700-silicon-id - const: aspeed,silicon-id reg: -- 2.34.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2 1/9] dt-bindings: mfd: aspeed,ast2x00-scu: Add ASPEED AST2700-SCUX schema 2024-08-02 9:05 ` [PATCH v2 1/9] dt-bindings: mfd: aspeed,ast2x00-scu: Add ASPEED AST2700-SCUX schema Kevin Chen @ 2024-08-02 9:13 ` Krzysztof Kozlowski 2024-08-02 10:29 ` Rob Herring (Arm) 1 sibling, 0 replies; 28+ messages in thread From: Krzysztof Kozlowski @ 2024-08-02 9:13 UTC (permalink / raw) To: Kevin Chen, robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On 02/08/2024 11:05, Kevin Chen wrote: > Add compatible for two SCU of SCU0 and SCU1 in AST2700. > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> > --- A nit, subject: drop second/last, redundant "schema". The "dt-bindings" prefix is already stating that these are bindings in the schema. See also: https://elixir.bootlin.com/linux/v6.7-rc8/source/Documentation/devicetree/bindings/submitting-patches.rst#L18 > .../bindings/mfd/aspeed,ast2x00-scu.yaml | 70 +++++++++++++------ > 1 file changed, 50 insertions(+), 20 deletions(-) > > diff --git a/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml b/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml > index 86ee69c0f45b..3426b1c84132 100644 > --- a/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml > +++ b/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml > @@ -13,33 +13,62 @@ description: > maintainers: > - Joel Stanley <joel@jms.id.au> > - Andrew Jeffery <andrew@aj.id.au> > + - Kevin Chen <kevin_chen@aspeedtech.com> > > -properties: > - compatible: > - items: > - - enum: > - - aspeed,ast2400-scu > - - aspeed,ast2500-scu > - - aspeed,ast2600-scu > - - const: syscon > - - const: simple-mfd > +scu@ast2xx00-scu: > + properties: > + compatible: > + items: > + - enum: > + - aspeed,ast2400-scu > + - aspeed,ast2500-scu > + - aspeed,ast2600-scu > + - const: syscon > + - const: simple-mfd No, no, no, this code is neither correct nor makes any sense. > > - reg: > - maxItems: 1 > + reg: > + maxItems: 1 > > - ranges: true > + ranges: true What? Best regards, Krzysztof ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 1/9] dt-bindings: mfd: aspeed,ast2x00-scu: Add ASPEED AST2700-SCUX schema 2024-08-02 9:05 ` [PATCH v2 1/9] dt-bindings: mfd: aspeed,ast2x00-scu: Add ASPEED AST2700-SCUX schema Kevin Chen 2024-08-02 9:13 ` Krzysztof Kozlowski @ 2024-08-02 10:29 ` Rob Herring (Arm) 1 sibling, 0 replies; 28+ messages in thread From: Rob Herring (Arm) @ 2024-08-02 10:29 UTC (permalink / raw) To: Kevin Chen Cc: krzk+dt, linux-arm-kernel, andrew, devicetree, sboyd, olof, lee, u-kumar1, conor+dt, quic_bjorande, dmitry.baryshkov, p.zabel, linux-aspeed, m.szyprowski, nfraprado, arnd, mturquette, soc, will, geert+renesas, catalin.marinas, neil.armstrong, linux-clk, shawnguo, joel, linux-kernel On Fri, 02 Aug 2024 17:05:36 +0800, Kevin Chen wrote: > Add compatible for two SCU of SCU0 and SCU1 in AST2700. > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> > --- > .../bindings/mfd/aspeed,ast2x00-scu.yaml | 70 +++++++++++++------ > 1 file changed, 50 insertions(+), 20 deletions(-) > My bot found errors running 'make dt_binding_check' on your patch: yamllint warnings/errors: dtschema/dtc warnings/errors: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml: 'scu@ast2xx00-scu' is not one of ['$id', '$schema', 'title', 'description', 'examples', 'required', 'allOf', 'anyOf', 'oneOf', 'definitions', '$defs', 'additionalProperties', 'dependencies', 'dependentRequired', 'dependentSchemas', 'patternProperties', 'properties', 'not', 'if', 'then', 'else', 'unevaluatedProperties', 'deprecated', 'maintainers', 'select', '$ref'] from schema $id: http://devicetree.org/meta-schemas/base.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml: 'scu@ast2xx00-scux' is not one of ['$id', '$schema', 'title', 'description', 'examples', 'required', 'allOf', 'anyOf', 'oneOf', 'definitions', '$defs', 'additionalProperties', 'dependencies', 'dependentRequired', 'dependentSchemas', 'patternProperties', 'properties', 'not', 'if', 'then', 'else', 'unevaluatedProperties', 'deprecated', 'maintainers', 'select', '$ref'] from schema $id: http://devicetree.org/meta-schemas/base.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml: scu@ast2xx00-scu: Missing additionalProperties/unevaluatedProperties constraint /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/aspeed,ast2x00-scu.yaml: scu@ast2xx00-scux: Missing additionalProperties/unevaluatedProperties constraint doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20240802090544.2741206-3-kevin_chen@aspeedtech.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. ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 2/9] dt-bindings: reset: ast2700: Add ASPEED AST27xx Reset schema 2024-08-02 9:05 [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC Kevin Chen 2024-08-02 9:05 ` [PATCH v2 0/9] " Kevin Chen 2024-08-02 9:05 ` [PATCH v2 1/9] dt-bindings: mfd: aspeed,ast2x00-scu: Add ASPEED AST2700-SCUX schema Kevin Chen @ 2024-08-02 9:05 ` Kevin Chen 2024-08-02 9:15 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 3/9] dt-bindings: clk: ast2700: Add ASPEED AST27XX Clock schema Kevin Chen ` (6 subsequent siblings) 9 siblings, 1 reply; 28+ messages in thread From: Kevin Chen @ 2024-08-02 9:05 UTC (permalink / raw) To: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, kevin_chen, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk Add Reset schema for AST2700. Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> --- .../dt-bindings/reset/aspeed,ast2700-reset.h | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 include/dt-bindings/reset/aspeed,ast2700-reset.h diff --git a/include/dt-bindings/reset/aspeed,ast2700-reset.h b/include/dt-bindings/reset/aspeed,ast2700-reset.h new file mode 100644 index 000000000000..c75653c1bbf3 --- /dev/null +++ b/include/dt-bindings/reset/aspeed,ast2700-reset.h @@ -0,0 +1,132 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ +/* + * Device Tree binding constants for AST2700 reset controller. + * + * Copyright (c) 2023 Aspeed Technology Inc. + */ + +#ifndef _MACH_ASPEED_AST2700_RESET_H_ +#define _MACH_ASPEED_AST2700_RESET_H_ + +/* SOC0 */ +#define SCU0_RESET_SDRAM (0) +#define SCU0_RESET_DDRPHY (1) +#define SCU0_RESET_RSA (2) +#define SCU0_RESET_SHA3 (3) +#define SCU0_RESET_HACE (4) +#define SCU0_RESET_SOC (5) +#define SCU0_RESET_VIDEO (6) +#define SCU0_RESET_2D (7) +#define SCU0_RESET_PCIS (8) +#define SCU0_RESET_RVAS0 (9) +#define SCU0_RESET_RVAS1 (10) +#define SCU0_RESET_SM3 (11) +#define SCU0_RESET_SM4 (12) +#define SCU0_RESET_CRT0 (13) +#define SCU0_RESET_ECC (14) +#define SCU0_RESET_DP_PCI (15) +#define SCU0_RESET_UFS (16) +#define SCU0_RESET_EMMC (17) +#define SCU0_RESET_PCIE1RST (18) +#define SCU0_RESET_PCIE1RSTOE (19) +#define SCU0_RESET_PCIE0RST (20) +#define SCU0_RESET_PCIE0RSTOE (21) +#define SCU0_RESET_JTAG (22) +#define SCU0_RESET_MCTP0 (23) +#define SCU0_RESET_MCTP1 (24) +#define SCU0_RESET_XDMA0 (25) +#define SCU0_RESET_XDMA1 (26) +#define SCU0_RESET_H2X1 (27) +#define SCU0_RESET_DP (28) +#define SCU0_RESET_DP_MCU (29) +#define SCU0_RESET_SSP (30) +#define SCU0_RESET_H2X0 (31) +#define SCU0_RESET_PORTA_VHUB1 (32) +#define SCU0_RESET_PORTA_PHY3 (33) +#define SCU0_RESET_PORTA_XHCI (34) +#define SCU0_RESET_PORTB_VHUB1 (35) +#define SCU0_RESET_PORTB_PHY3 (36) +#define SCU0_RESET_PORTB_XHCI (37) +#define SCU0_RESET_PORTA_EHCI (38) +#define SCU0_RESET_PORTA_VHUB0 (38) +#define SCU0_RESET_PORTB_EHCI (39) +#define SCU0_RESET_PORTB_VHUB0 (39) +#define SCU0_RESET_UHCI (40) +#define SCU0_RESET_TSP (41) +#define SCU0_RESET_E2M0 (42) +#define SCU0_RESET_E2M1 (43) +#define SCU0_RESET_VLINK (44) + +#define SOC0_RESET_NUMS (SCU0_RESET_VLINK + 1) + +/* SOC1 */ +#define SCU1_RESET_LPC0 (0) +#define SCU1_RESET_LPC1 (1) +#define SCU1_RESET_MII (2) +#define SCU1_RESET_PECI (3) +#define SCU1_RESET_PWM (4) +#define SCU1_RESET_MAC0 (5) +#define SCU1_RESET_MAC1 (6) +#define SCU1_RESET_MAC2 (7) +#define SCU1_RESET_ADC (8) +#define SCU1_RESET_SD (9) +#define SCU1_RESET_ESPI0 (10) +#define SCU1_RESET_ESPI1 (11) +#define SCU1_RESET_JTAG1 (12) +#define SCU1_RESET_SPI0 (13) +#define SCU1_RESET_SPI1 (14) +#define SCU1_RESET_SPI2 (15) +#define SCU1_RESET_I3C0 (16) +#define SCU1_RESET_I3C1 (17) +#define SCU1_RESET_I3C2 (18) +#define SCU1_RESET_I3C3 (19) +#define SCU1_RESET_I3C4 (20) +#define SCU1_RESET_I3C5 (21) +#define SCU1_RESET_I3C6 (22) +#define SCU1_RESET_I3C7 (23) +#define SCU1_RESET_I3C8 (24) +#define SCU1_RESET_I3C9 (25) +#define SCU1_RESET_I3C10 (26) +#define SCU1_RESET_I3C11 (27) +#define SCU1_RESET_I3C12 (28) +#define SCU1_RESET_I3C13 (29) +#define SCU1_RESET_I3C14 (30) +#define SCU1_RESET_I3C15 (31) +#define SCU1_RESET_I3C15 (31) +#define SCU1_RESET_MCU0 (32) +#define SCU1_RESET_MCU1 (33) +#define SCU1_RESET_H2A_SPI1 (34) +#define SCU1_RESET_H2A_SPI2 (35) +#define SCU1_RESET_UART0 (36) +#define SCU1_RESET_UART1 (37) +#define SCU1_RESET_UART2 (38) +#define SCU1_RESET_UART3 (39) +#define SCU1_RESET_I2C_FILTER (40) +#define SCU1_RESET_CALIPTRA (41) +#define SCU1_RESET_XDMA (42) +/* reserved 43 */ +#define SCU1_RESET_FSI (44) +#define SCU1_RESET_CAN (45) +#define SCU1_RESET_MCTP (46) +#define SCU1_RESET_I2C (47) +#define SCU1_RESET_UART6 (48) +#define SCU1_RESET_UART7 (49) +#define SCU1_RESET_UART8 (50) +#define SCU1_RESET_UART9 (51) +#define SCU1_RESET_LTPI (52) +#define SCU1_RESET_VGAL (53) +#define SCU1_RESET_LTPI1 (54) +#define SCU1_RESET_ACE (55) +#define SCU1_RESET_E2M (56) +#define SCU1_RESET_UHCI (57) +#define SCU1_RESET_PORTC_EHCI (58) +#define SCU1_RESET_PORTC_VHUB (59) +#define SCU1_RESET_PORTD_EHCI (60) +#define SCU1_RESET_PORTD_VHUB (61) +#define SCU1_RESET_H2X (62) +#define SCU1_RESET_I3CDMA (63) +#define SCU1_RESET_PCIE2RST (64) + +#define SOC1_RESET_NUMS (SCU1_RESET_PCIE2RST + 1) + +#endif /* _MACH_ASPEED_AST2700_RESET_H_ */ -- 2.34.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2 2/9] dt-bindings: reset: ast2700: Add ASPEED AST27xx Reset schema 2024-08-02 9:05 ` [PATCH v2 2/9] dt-bindings: reset: ast2700: Add ASPEED AST27xx Reset schema Kevin Chen @ 2024-08-02 9:15 ` Krzysztof Kozlowski 0 siblings, 0 replies; 28+ messages in thread From: Krzysztof Kozlowski @ 2024-08-02 9:15 UTC (permalink / raw) To: Kevin Chen, robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On 02/08/2024 11:05, Kevin Chen wrote: > Add Reset schema for AST2700. > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> So you just ignored all the comments? No, respond to each of them so we will all know that you understood them. You already got this comment: A nit, subject: drop second/last, redundant "bindings". The "dt-bindings" prefix is already stating that these are bindings. See also: https://elixir.bootlin.com/linux/v6.7-rc8/source/Documentation/devicetree/bindings/submitting-patches.rst#L18 and not much improved. Drop "schema". Anyway, rest was ignored: <form letter> This is a friendly reminder during the review process. It seems my or other reviewer's previous comments were not fully addressed. Maybe the feedback got lost between the quotes, maybe you just forgot to apply it. Please go back to the previous discussion and either implement all requested changes or keep discussing them. Thank you. </form letter> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 3/9] dt-bindings: clk: ast2700: Add ASPEED AST27XX Clock schema 2024-08-02 9:05 [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC Kevin Chen ` (2 preceding siblings ...) 2024-08-02 9:05 ` [PATCH v2 2/9] dt-bindings: reset: ast2700: Add ASPEED AST27xx Reset schema Kevin Chen @ 2024-08-02 9:05 ` Kevin Chen 2024-08-02 9:15 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 4/9] clk: ast2700: add clock controller Kevin Chen ` (5 subsequent siblings) 9 siblings, 1 reply; 28+ messages in thread From: Kevin Chen @ 2024-08-02 9:05 UTC (permalink / raw) To: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, kevin_chen, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk Add Clock schema for AST2700. Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> --- .../dt-bindings/clock/aspeed,ast2700-clk.h | 175 ++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 include/dt-bindings/clock/aspeed,ast2700-clk.h diff --git a/include/dt-bindings/clock/aspeed,ast2700-clk.h b/include/dt-bindings/clock/aspeed,ast2700-clk.h new file mode 100644 index 000000000000..e2850b0b8920 --- /dev/null +++ b/include/dt-bindings/clock/aspeed,ast2700-clk.h @@ -0,0 +1,175 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ +/* + * Device Tree binding constants for AST2700 clock controller. + * + * Copyright (c) 2023 Aspeed Technology Inc. + */ + +#ifndef __DT_BINDINGS_CLOCK_AST2700_H +#define __DT_BINDINGS_CLOCK_AST2700_H + +/* SOC0 clk-gate */ +#define SCU0_CLK_GATE_MCLK (0) +#define SCU0_CLK_GATE_ECLK (1) +#define SCU0_CLK_GATE_2DCLK (2) +#define SCU0_CLK_GATE_VCLK (3) +#define SCU0_CLK_GATE_BCLK (4) +#define SCU0_CLK_GATE_VGA0CLK (5) +#define SCU0_CLK_GATE_REFCLK (6) +#define SCU0_CLK_GATE_PORTBUSB2CLK (7) +#define SCU0_CLK_GATE_RSV8 (8) +#define SCU0_CLK_GATE_UHCICLK (9) +#define SCU0_CLK_GATE_VGA1CLK (10) +#define SCU0_CLK_GATE_DDRPHYCLK (11) +#define SCU0_CLK_GATE_E2M0CLK (12) +#define SCU0_CLK_GATE_HACCLK (13) +#define SCU0_CLK_GATE_PORTAUSB2CLK (14) +#define SCU0_CLK_GATE_UART4CLK (15) +#define SCU0_CLK_GATE_SLICLK (16) +#define SCU0_CLK_GATE_DACCLK (17) +#define SCU0_CLK_GATE_DP (18) +#define SCU0_CLK_GATE_E2M1CLK (19) +#define SCU0_CLK_GATE_CRT0CLK (20) +#define SCU0_CLK_GATE_CRT1CLK (21) +#define SCU0_CLK_GATE_VLCLK (22) +#define SCU0_CLK_GATE_ECDSACLK (23) +#define SCU0_CLK_GATE_RSACLK (24) +#define SCU0_CLK_GATE_RVAS0CLK (25) +#define SCU0_CLK_GATE_UFSCLK (26) +#define SCU0_CLK_GATE_EMMCCLK (27) +#define SCU0_CLK_GATE_RVAS1CLK (28) +/* reserved 29 ~ 31*/ +#define SCU0_CLK_GATE_NUM (SCU0_CLK_GATE_RVAS1CLK + 1) + +/* SOC0 clk */ +#define SCU0_CLKIN (SCU0_CLK_GATE_NUM + 0) +#define SCU0_CLK_24M (SCU0_CLK_GATE_NUM + 1) +#define SCU0_CLK_192M (SCU0_CLK_GATE_NUM + 2) +#define SCU0_CLK_UART (SCU0_CLK_GATE_NUM + 3) +#define SCU0_CLK_PSP (SCU0_CLK_GATE_NUM + 4) +#define SCU0_CLK_HPLL (SCU0_CLK_GATE_NUM + 5) +#define SCU0_CLK_HPLL_DIV2 (SCU0_CLK_GATE_NUM + 6) +#define SCU0_CLK_HPLL_DIV4 (SCU0_CLK_GATE_NUM + 7) +#define SCU0_CLK_DPLL (SCU0_CLK_GATE_NUM + 8) +#define SCU0_CLK_MPLL (SCU0_CLK_GATE_NUM + 9) +#define SCU0_CLK_MPLL_DIV2 (SCU0_CLK_GATE_NUM + 10) +#define SCU0_CLK_MPLL_DIV4 (SCU0_CLK_GATE_NUM + 11) +#define SCU0_CLK_MPLL_DIV8 (SCU0_CLK_GATE_NUM + 12) +#define SCU0_CLK_VGA0 (SCU0_CLK_GATE_NUM + 13) +#define SCU0_CLK_VGA1 (SCU0_CLK_GATE_NUM + 14) +#define SCU0_CLK_CRT0 (SCU0_CLK_GATE_NUM + 15) +#define SCU0_CLK_CRT1 (SCU0_CLK_GATE_NUM + 16) +#define SCU0_CLK_MPHY (SCU0_CLK_GATE_NUM + 17) +#define SCU0_CLK_AXI0 (SCU0_CLK_GATE_NUM + 18) +#define SCU0_CLK_AXI1 (SCU0_CLK_GATE_NUM + 19) +#define SCU0_CLK_AHB (SCU0_CLK_GATE_NUM + 20) +#define SCU0_CLK_APB (SCU0_CLK_GATE_NUM + 21) +#define SCU0_CLK_MCLK (SCU0_CLK_GATE_NUM + 22) +#define SCU0_CLK_ECLK (SCU0_CLK_GATE_NUM + 23) +#define SCU0_CLK_VCLK (SCU0_CLK_GATE_NUM + 24) +#define SCU0_CLK_BCLK (SCU0_CLK_GATE_NUM + 25) +#define SCU0_CLK_REF (SCU0_CLK_GATE_NUM + 26) +#define SCU0_CLK_UART4 (SCU0_CLK_GATE_NUM + 27) +#define SCU0_CLK_SLI (SCU0_CLK_GATE_NUM + 28) +#define SCU0_CLK_UFS (SCU0_CLK_GATE_NUM + 29) +#define SCU0_CLK_EMMCMUX (SCU0_CLK_GATE_NUM + 30) +#define SCU0_CLK_EMMC (SCU0_CLK_GATE_NUM + 31) +#define SCU0_CLK_U2PHY_CLK12M (SCU0_CLK_GATE_NUM + 32) +#define SCU0_CLK_U2PHY_REFCLK (SCU0_CLK_GATE_NUM + 33) + +#define SOC0_NUM_CLKS (SCU0_CLK_U2PHY_REFCLK + 1) + +/* SOC1 clk gate */ +#define SCU1_CLK_GATE_LCLK0 (0) +#define SCU1_CLK_GATE_LCLK1 (1) +#define SCU1_CLK_GATE_ESPI0CLK (2) +#define SCU1_CLK_GATE_ESPI1CLK (3) +#define SCU1_CLK_GATE_SDCLK (4) +#define SCU1_CLK_GATE_IPEREFCLK (5) /* io die pcie ref clk */ +#define SCU1_CLK_GATE_RSV5CLK (6) +#define SCU1_CLK_GATE_LPCHCLK (7) +#define SCU1_CLK_GATE_MAC0CLK (8) +#define SCU1_CLK_GATE_MAC1CLK (9) +#define SCU1_CLK_GATE_MAC2CLK (10) +#define SCU1_CLK_GATE_UART0CLK (11) +#define SCU1_CLK_GATE_UART1CLK (12) +#define SCU1_CLK_GATE_UART2CLK (13) +#define SCU1_CLK_GATE_UART3CLK (14) +#define SCU1_CLK_GATE_I2CCLK (15) +#define SCU1_CLK_GATE_I3C0CLK (16) +#define SCU1_CLK_GATE_I3C1CLK (17) +#define SCU1_CLK_GATE_I3C2CLK (18) +#define SCU1_CLK_GATE_I3C3CLK (19) +#define SCU1_CLK_GATE_I3C4CLK (20) +#define SCU1_CLK_GATE_I3C5CLK (21) +#define SCU1_CLK_GATE_I3C6CLK (22) +#define SCU1_CLK_GATE_I3C7CLK (23) +#define SCU1_CLK_GATE_I3C8CLK (24) +#define SCU1_CLK_GATE_I3C9CLK (25) +#define SCU1_CLK_GATE_I3C10CLK (26) +#define SCU1_CLK_GATE_I3C11CLK (27) +#define SCU1_CLK_GATE_I3C12CLK (28) +#define SCU1_CLK_GATE_I3C13CLK (29) +#define SCU1_CLK_GATE_I3C14CLK (30) +#define SCU1_CLK_GATE_I3C15CLK (31) + +#define SCU1_CLK_GATE_UART5CLK (32 + 0) +#define SCU1_CLK_GATE_UART6CLK (32 + 1) +#define SCU1_CLK_GATE_UART7CLK (32 + 2) +#define SCU1_CLK_GATE_UART8CLK (32 + 3) +#define SCU1_CLK_GATE_UART9CLK (32 + 4) +#define SCU1_CLK_GATE_UART10CLK (32 + 5) +#define SCU1_CLK_GATE_UART11CLK (32 + 6) +#define SCU1_CLK_GATE_UART12CLK (32 + 7) +#define SCU1_CLK_GATE_FSICLK (32 + 8) +#define SCU1_CLK_GATE_LTPIPHYCLK (32 + 9) +#define SCU1_CLK_GATE_LTPICLK (32 + 10) +#define SCU1_CLK_GATE_VGALCLK (32 + 11) +#define SCU1_CLK_GATE_USBUARTCLK (32 + 12) +#define SCU1_CLK_GATE_CANCLK (32 + 13) +#define SCU1_CLK_GATE_PCICLK (32 + 14) +#define SCU1_CLK_GATE_SLICLK (32 + 15) +#define SCU1_CLK_GATE_E2MCLK (32 + 16) +#define SCU1_CLK_GATE_PORTCUSB2CLK (32 + 17) +#define SCU1_CLK_GATE_PORTDUSB2CLK (32 + 18) +#define SCU1_CLK_GATE_LTPI1TXCLK (32 + 19) + +#define SCU1_CLK_GATE_NUM (SCU1_CLK_GATE_LTPI1TXCLK + 1) + +/* SOC1 clk */ +#define SCU1_CLKIN (SCU1_CLK_GATE_NUM + 0) +#define SCU1_CLK_HPLL (SCU1_CLK_GATE_NUM + 1) +#define SCU1_CLK_APLL (SCU1_CLK_GATE_NUM + 2) +#define SCU1_CLK_APLL_DIV2 (SCU1_CLK_GATE_NUM + 3) +#define SCU1_CLK_APLL_DIV4 (SCU1_CLK_GATE_NUM + 4) +#define SCU1_CLK_DPLL (SCU1_CLK_GATE_NUM + 5) +#define SCU1_CLK_UXCLK (SCU1_CLK_GATE_NUM + 6) +#define SCU1_CLK_HUXCLK (SCU1_CLK_GATE_NUM + 7) +#define SCU1_CLK_UARTX (SCU1_CLK_GATE_NUM + 8) +#define SCU1_CLK_HUARTX (SCU1_CLK_GATE_NUM + 9) +#define SCU1_CLK_AHB (SCU1_CLK_GATE_NUM + 10) +#define SCU1_CLK_APB (SCU1_CLK_GATE_NUM + 11) +#define SCU1_CLK_UART0 (SCU1_CLK_GATE_NUM + 12) +#define SCU1_CLK_UART1 (SCU1_CLK_GATE_NUM + 13) +#define SCU1_CLK_UART2 (SCU1_CLK_GATE_NUM + 14) +#define SCU1_CLK_UART3 (SCU1_CLK_GATE_NUM + 15) +#define SCU1_CLK_UART5 (SCU1_CLK_GATE_NUM + 16) +#define SCU1_CLK_UART6 (SCU1_CLK_GATE_NUM + 17) +#define SCU1_CLK_UART7 (SCU1_CLK_GATE_NUM + 18) +#define SCU1_CLK_UART8 (SCU1_CLK_GATE_NUM + 19) +#define SCU1_CLK_UART9 (SCU1_CLK_GATE_NUM + 20) +#define SCU1_CLK_UART10 (SCU1_CLK_GATE_NUM + 21) +#define SCU1_CLK_UART11 (SCU1_CLK_GATE_NUM + 22) +#define SCU1_CLK_UART12 (SCU1_CLK_GATE_NUM + 23) +#define SCU1_CLK_APLL_DIVN (SCU1_CLK_GATE_NUM + 24) +#define SCU1_CLK_SDMUX (SCU1_CLK_GATE_NUM + 25) +#define SCU1_CLK_SDCLK (SCU1_CLK_GATE_NUM + 26) +#define SCU1_CLK_RMII (SCU1_CLK_GATE_NUM + 27) +#define SCU1_CLK_RGMII (SCU1_CLK_GATE_NUM + 28) +#define SCU1_CLK_MACHCLK (SCU1_CLK_GATE_NUM + 29) +#define SCU1_CLK_MAC0RCLK (SCU1_CLK_GATE_NUM + 30) +#define SCU1_CLK_MAC1RCLK (SCU1_CLK_GATE_NUM + 31) + +#define SOC1_NUM_CLKS (SCU1_CLK_MAC1RCLK + 1) + +#endif -- 2.34.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/9] dt-bindings: clk: ast2700: Add ASPEED AST27XX Clock schema 2024-08-02 9:05 ` [PATCH v2 3/9] dt-bindings: clk: ast2700: Add ASPEED AST27XX Clock schema Kevin Chen @ 2024-08-02 9:15 ` Krzysztof Kozlowski 0 siblings, 0 replies; 28+ messages in thread From: Krzysztof Kozlowski @ 2024-08-02 9:15 UTC (permalink / raw) To: Kevin Chen, robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On 02/08/2024 11:05, Kevin Chen wrote: > Add Clock schema for AST2700. > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> <form letter> This is a friendly reminder during the review process. It seems my or other reviewer's previous comments were not fully addressed. Maybe the feedback got lost between the quotes, maybe you just forgot to apply it. Please go back to the previous discussion and either implement all requested changes or keep discussing them. Thank you. </form letter> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 4/9] clk: ast2700: add clock controller 2024-08-02 9:05 [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC Kevin Chen ` (3 preceding siblings ...) 2024-08-02 9:05 ` [PATCH v2 3/9] dt-bindings: clk: ast2700: Add ASPEED AST27XX Clock schema Kevin Chen @ 2024-08-02 9:05 ` Kevin Chen 2024-08-02 9:16 ` Krzysztof Kozlowski 2024-08-02 19:33 ` Dmitry Baryshkov 2024-08-02 9:05 ` [PATCH v2 5/9] dt-bindings: arm: aspeed: Add ASPEED AST27XX SoC Kevin Chen ` (4 subsequent siblings) 9 siblings, 2 replies; 28+ messages in thread From: Kevin Chen @ 2024-08-02 9:05 UTC (permalink / raw) To: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, kevin_chen, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk Add support for ast2700 clock controller. Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> --- drivers/clk/Makefile | 1 + drivers/clk/clk-ast2700.c | 1173 +++++++++++++++++++++++++++++++++++++ 2 files changed, 1174 insertions(+) create mode 100644 drivers/clk/clk-ast2700.c diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index f793a16cad40..0d5992ea0fa4 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -38,6 +38,7 @@ obj-$(CONFIG_COMMON_CLK_FSL_SAI) += clk-fsl-sai.o obj-$(CONFIG_COMMON_CLK_GEMINI) += clk-gemini.o obj-$(CONFIG_COMMON_CLK_ASPEED) += clk-aspeed.o obj-$(CONFIG_MACH_ASPEED_G6) += clk-ast2600.o +obj-$(CONFIG_MACH_ASPEED_G7) += clk-ast2700.o obj-$(CONFIG_ARCH_HIGHBANK) += clk-highbank.o obj-$(CONFIG_CLK_HSDK) += clk-hsdk-pll.o obj-$(CONFIG_COMMON_CLK_K210) += clk-k210.o diff --git a/drivers/clk/clk-ast2700.c b/drivers/clk/clk-ast2700.c new file mode 100644 index 000000000000..eec8e0cb83d9 --- /dev/null +++ b/drivers/clk/clk-ast2700.c @@ -0,0 +1,1173 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +// Copyright ASPEED Technology + +#include <linux/clk-provider.h> +#include <linux/of_address.h> +#include <linux/of_device.h> +#include <linux/reset-controller.h> + +#include <dt-bindings/clock/aspeed,ast2700-clk.h> +#include <dt-bindings/reset/aspeed,ast2700-reset.h> + +#define SCU_CLK_24MHZ 24000000 +#define SCU_CLK_25MHZ 25000000 +#define SCU_CLK_192MHZ 192000000 +/* SOC0 USB2 PHY CLK*/ +#define SCU_CLK_12MHZ 12000000 +/* SOC0 */ +#define SCU0_HWSTRAP1 0x010 +#define SCU0_CLK_STOP 0x240 +#define SCU0_CLK_SEL1 0x280 +#define SCU0_CLK_SEL2 0x284 +#define GET_USB_REFCLK_DIV(x) ((GENMASK(23, 20) & (x)) >> 20) +#define UART_DIV13_EN BIT(30) +#define SCU0_HPLL_PARAM 0x300 +#define SCU0_DPLL_PARAM 0x308 +#define SCU0_MPLL_PARAM 0x310 +#define SCU0_D1CLK_PARAM 0x320 +#define SCU0_D2CLK_PARAM 0x330 +#define SCU0_CRT1CLK_PARAM 0x340 +#define SCU0_CRT2CLK_PARAM 0x350 +#define SCU0_MPHYCLK_PARAM 0x360 + +/* SOC1 */ +#define SCU1_CLK_STOP 0x240 +#define SCU1_CLK_STOP2 0x260 +#define SCU1_CLK_SEL1 0x280 +#define SCU1_CLK_SEL2 0x284 +#define UXCLK_MASK GENMASK(1, 0) +#define HUXCLK_MASK GENMASK(4, 3) +#define SCU1_HPLL_PARAM 0x300 +#define SCU1_APLL_PARAM 0x310 +#define SCU1_DPLL_PARAM 0x320 +#define SCU1_UXCLK_CTRL 0x330 +#define SCU1_HUXCLK_CTRL 0x334 +#define SCU1_MAC12_CLK_DLY 0x390 +#define SCU1_MAC12_CLK_DLY_100M 0x394 +#define SCU1_MAC12_CLK_DLY_10M 0x398 + +/* + * MAC Clock Delay settings + */ +#define MAC_CLK_RMII1_50M_RCLK_O_CTRL BIT(30) +#define MAC_CLK_RMII1_50M_RCLK_O_DIS 0 +#define MAC_CLK_RMII1_50M_RCLK_O_EN 1 +#define MAC_CLK_RMII0_50M_RCLK_O_CTRL BIT(29) +#define MAC_CLK_RMII0_5M_RCLK_O_DIS 0 +#define MAC_CLK_RMII0_5M_RCLK_O_EN 1 +#define MAC_CLK_RMII_TXD_FALLING_2 BIT(27) +#define MAC_CLK_RMII_TXD_FALLING_1 BIT(26) +#define MAC_CLK_RXCLK_INV_2 BIT(25) +#define MAC_CLK_RXCLK_INV_1 BIT(24) +#define MAC_CLK_1G_INPUT_DELAY_2 GENMASK(23, 18) +#define MAC_CLK_1G_INPUT_DELAY_1 GENMASK(17, 12) +#define MAC_CLK_1G_OUTPUT_DELAY_2 GENMASK(11, 6) +#define MAC_CLK_1G_OUTPUT_DELAY_1 GENMASK(5, 0) + +#define MAC_CLK_100M_10M_RESERVED GENMASK(31, 26) +#define MAC_CLK_100M_10M_RXCLK_INV_2 BIT(25) +#define MAC_CLK_100M_10M_RXCLK_INV_1 BIT(24) +#define MAC_CLK_100M_10M_INPUT_DELAY_2 GENMASK(23, 18) +#define MAC_CLK_100M_10M_INPUT_DELAY_1 GENMASK(17, 12) +#define MAC_CLK_100M_10M_OUTPUT_DELAY_2 GENMASK(11, 6) +#define MAC_CLK_100M_10M_OUTPUT_DELAY_1 GENMASK(5, 0) + +#define AST2700_DEF_MAC12_DELAY_1G 0x00CF4D75 +#define AST2700_DEF_MAC12_DELAY_100M 0x00410410 +#define AST2700_DEF_MAC12_DELAY_10M 0x00410410 + +struct mac_delay_config { + u32 tx_delay_1000; + u32 rx_delay_1000; + u32 tx_delay_100; + u32 rx_delay_100; + u32 tx_delay_10; + u32 rx_delay_10; +}; + +/* Globally visible clocks */ +static DEFINE_SPINLOCK(ast2700_clk_lock); + +/* Division of RGMII Clock */ +static const struct clk_div_table ast2700_rgmii_div_table[] = { + { 0x0, 4 }, + { 0x1, 4 }, + { 0x2, 6 }, + { 0x3, 8 }, + { 0x4, 10 }, + { 0x5, 12 }, + { 0x6, 14 }, + { 0x7, 16 }, + { 0 } +}; + +/* Division of RMII Clock */ +static const struct clk_div_table ast2700_rmii_div_table[] = { + { 0x0, 8 }, + { 0x1, 8 }, + { 0x2, 12 }, + { 0x3, 16 }, + { 0x4, 20 }, + { 0x5, 24 }, + { 0x6, 28 }, + { 0x7, 32 }, + { 0 } +}; + +/* Division of HCLK/SDIO/MAC/apll_divn CLK */ +static const struct clk_div_table ast2700_clk_div_table[] = { + { 0x0, 2 }, + { 0x1, 2 }, + { 0x2, 3 }, + { 0x3, 4 }, + { 0x4, 5 }, + { 0x5, 6 }, + { 0x6, 7 }, + { 0x7, 8 }, + { 0 } +}; + +/* Division of PCLK/EMMC CLK */ +static const struct clk_div_table ast2700_clk_div_table2[] = { + { 0x0, 2 }, + { 0x1, 4 }, + { 0x2, 6 }, + { 0x3, 8 }, + { 0x4, 10 }, + { 0x5, 12 }, + { 0x6, 14 }, + { 0x7, 16 }, + { 0 } +}; + +/* HPLL/DPLL: 2000Mhz(default) */ +static struct clk_hw *ast2700_soc0_hw_pll(const char *name, const char *parent_name, u32 val) +{ + unsigned int mult, div; + + if (val & BIT(24)) { + /* Pass through mode */ + mult = 1; + div = 1; + } else { + /* F = CLKIN(25MHz) * [(M+1) / 2(N+1)] / (P+1) */ + u32 m = val & 0x1fff; + u32 n = (val >> 13) & 0x3f; + u32 p = (val >> 19) & 0xf; + + mult = (m + 1) / (2 * (n + 1)); + div = (p + 1); + } + + return clk_hw_register_fixed_factor(NULL, name, parent_name, 0, mult, div); +}; + +/* MPLL 1600Mhz(default) */ +static struct clk_hw *ast2700_calc_mpll(const char *name, const char *parent_name, u32 val) +{ + unsigned int mult, div; + + if (val & BIT(24)) { + /* Pass through mode */ + div = 1; + mult = div; + } else { + /* F = CLKIN(25MHz) * [CLKF/(CLKR+1)] /(CLKOD+1) */ + u32 m = val & 0x1fff; + u32 n = (val >> 13) & 0x3f; + u32 p = (val >> 19) & 0xf; + + mult = m / (n + 1); + div = (p + 1); + } + return clk_hw_register_fixed_factor(NULL, name, parent_name, 0, mult, div); +}; + +static struct clk_hw *ast2700_calc_uclk(const char *name, u32 val) +{ + unsigned int mult, div; + + /* UARTCLK = UXCLK * R / (N * 2) */ + u32 r = val & 0xff; + u32 n = (val >> 8) & 0x3ff; + + mult = r; + div = n * 2; + + return clk_hw_register_fixed_factor(NULL, name, "uxclk", 0, mult, div); +}; + +static struct clk_hw *ast2700_calc_huclk(const char *name, u32 val) +{ + unsigned int mult, div; + + /* UARTCLK = UXCLK * R / (N * 2) */ + u32 r = val & 0xff; + u32 n = (val >> 8) & 0x3ff; + + mult = r; + div = n * 2; + + return clk_hw_register_fixed_factor(NULL, name, "huxclk", 0, mult, div); +}; + +static struct clk_hw *ast2700_calc_soc1_pll(const char *name, const char *parent_name, u32 val) +{ + unsigned int mult, div; + + if (val & BIT(24)) { + /* Pass through mode */ + div = 1; + mult = div; + } else { + /* F = 25Mhz * [(M + 1) / (n + 1)] / (p + 1) */ + u32 m = val & 0x1fff; + u32 n = (val >> 13) & 0x3f; + u32 p = (val >> 19) & 0xf; + + mult = (m + 1) / (n + 1); + div = (p + 1); + } + return clk_hw_register_fixed_factor(NULL, name, parent_name, 0, mult, div); +}; + +static int ast2700_clk_is_enabled(struct clk_hw *hw) +{ + struct clk_gate *gate = to_clk_gate(hw); + u32 clk = BIT(gate->bit_idx); + u32 reg; + + reg = readl(gate->reg); + + return !(reg & clk); +} + +static int ast2700_clk_enable(struct clk_hw *hw) +{ + struct clk_gate *gate = to_clk_gate(hw); + u32 clk = BIT(gate->bit_idx); + + if (readl(gate->reg) & clk) + writel(clk, gate->reg + 0x04); + + return 0; +} + +static void ast2700_clk_disable(struct clk_hw *hw) +{ + struct clk_gate *gate = to_clk_gate(hw); + u32 clk = BIT(gate->bit_idx); + + /* Clock is set to enable, so use write to set register */ + writel(clk, gate->reg); +} + +static const struct clk_ops ast2700_clk_gate_ops = { + .enable = ast2700_clk_enable, + .disable = ast2700_clk_disable, + .is_enabled = ast2700_clk_is_enabled, +}; + +static struct clk_hw *ast2700_clk_hw_register_gate(struct device *dev, const char *name, + const char *parent_name, unsigned long flags, + void __iomem *reg, u8 clock_idx, + u8 clk_gate_flags, spinlock_t *lock) +{ + struct clk_gate *gate; + struct clk_hw *hw; + struct clk_init_data init; + int ret = -EINVAL; + + gate = kzalloc(sizeof(*gate), GFP_KERNEL); + if (!gate) + return ERR_PTR(-ENOMEM); + + init.name = name; + init.ops = &ast2700_clk_gate_ops; + init.flags = flags; + init.parent_names = parent_name ? &parent_name : NULL; + init.num_parents = parent_name ? 1 : 0; + + gate->reg = reg; + gate->bit_idx = clock_idx; + gate->flags = clk_gate_flags; + gate->lock = lock; + gate->hw.init = &init; + + hw = &gate->hw; + ret = clk_hw_register(dev, hw); + if (ret) { + kfree(gate); + hw = ERR_PTR(ret); + } + + return hw; +} + +struct ast2700_reset { + void __iomem *base; + struct reset_controller_dev rcdev; +}; + +#define to_rc_data(p) container_of(p, struct ast2700_reset, rcdev) + +static int ast2700_reset_assert(struct reset_controller_dev *rcdev, unsigned long id) +{ + struct ast2700_reset *rc = to_rc_data(rcdev); + u32 rst = BIT(id % 32); + u32 reg = id >= 32 ? 0x220 : 0x200; + + if (id == SCU1_RESET_PCIE2RST) + writel(readl(rc->base + 0x908) & ~BIT(0), rc->base + 0x908); + else + writel(rst, rc->base + reg); + return 0; +} + +static int ast2700_reset_deassert(struct reset_controller_dev *rcdev, unsigned long id) +{ + struct ast2700_reset *rc = to_rc_data(rcdev); + u32 rst = BIT(id % 32); + u32 reg = id >= 32 ? 0x220 : 0x200; + + if (id == SCU1_RESET_PCIE2RST) + writel(readl(rc->base + 0x908) | BIT(0), rc->base + 0x908); + else + /* Use set to clear register */ + writel(rst, rc->base + reg + 0x04); + return 0; +} + +static int ast2700_reset_status(struct reset_controller_dev *rcdev, unsigned long id) +{ + struct ast2700_reset *rc = to_rc_data(rcdev); + u32 rst = BIT(id % 32); + u32 reg = id >= 32 ? 0x220 : 0x200; + + return (readl(rc->base + reg) & rst); +} + +static const struct reset_control_ops ast2700_reset_ops = { + .assert = ast2700_reset_assert, + .deassert = ast2700_reset_deassert, + .status = ast2700_reset_status, +}; + +static const char *const sdclk_sel[] = { + "soc1-hpll", + "soc1-apll", +}; + +static const char *const uartclk_sel[] = { + "uartxclk", + "huartxclk", +}; + +static const char *const uxclk_sel[] = { + "soc1-apll_div4", + "soc1-apll_div2", + "soc1-apll", + "soc1-hpll", +}; + +static void ast2700_soc1_configure_mac01_clk(struct device_node *np) +{ + void __iomem *clk_base; + struct mac_delay_config mac_cfg; + u32 reg[3]; + int ret; + + clk_base = of_iomap(np, 0); + if (IS_ERR(clk_base)) + return; + + reg[0] = AST2700_DEF_MAC12_DELAY_1G; + reg[1] = AST2700_DEF_MAC12_DELAY_100M; + reg[2] = AST2700_DEF_MAC12_DELAY_10M; + + ret = of_property_read_u32_array(np, "mac0-clk-delay", (u32 *)&mac_cfg, + sizeof(mac_cfg) / sizeof(u32)); + if (!ret) { + reg[0] &= ~(MAC_CLK_1G_INPUT_DELAY_1 | MAC_CLK_1G_OUTPUT_DELAY_1); + reg[0] |= FIELD_PREP(MAC_CLK_1G_INPUT_DELAY_1, mac_cfg.rx_delay_1000) | + FIELD_PREP(MAC_CLK_1G_OUTPUT_DELAY_1, mac_cfg.tx_delay_1000); + + reg[1] &= ~(MAC_CLK_100M_10M_INPUT_DELAY_1 | MAC_CLK_100M_10M_OUTPUT_DELAY_1); + reg[1] |= FIELD_PREP(MAC_CLK_100M_10M_INPUT_DELAY_1, mac_cfg.rx_delay_100) | + FIELD_PREP(MAC_CLK_100M_10M_OUTPUT_DELAY_1, mac_cfg.tx_delay_100); + + reg[2] &= ~(MAC_CLK_100M_10M_INPUT_DELAY_1 | MAC_CLK_100M_10M_OUTPUT_DELAY_1); + reg[2] |= FIELD_PREP(MAC_CLK_100M_10M_INPUT_DELAY_1, mac_cfg.rx_delay_10) | + FIELD_PREP(MAC_CLK_100M_10M_OUTPUT_DELAY_1, mac_cfg.tx_delay_10); + } + + ret = of_property_read_u32_array(np, "mac1-clk-delay", (u32 *)&mac_cfg, + sizeof(mac_cfg) / sizeof(u32)); + if (!ret) { + reg[0] &= ~(MAC_CLK_1G_INPUT_DELAY_2 | MAC_CLK_1G_OUTPUT_DELAY_2); + reg[0] |= FIELD_PREP(MAC_CLK_1G_INPUT_DELAY_2, mac_cfg.rx_delay_1000) | + FIELD_PREP(MAC_CLK_1G_OUTPUT_DELAY_2, mac_cfg.tx_delay_1000); + + reg[1] &= ~(MAC_CLK_100M_10M_INPUT_DELAY_2 | MAC_CLK_100M_10M_OUTPUT_DELAY_2); + reg[1] |= FIELD_PREP(MAC_CLK_100M_10M_INPUT_DELAY_2, mac_cfg.rx_delay_100) | + FIELD_PREP(MAC_CLK_100M_10M_OUTPUT_DELAY_2, mac_cfg.tx_delay_100); + + reg[2] &= ~(MAC_CLK_100M_10M_INPUT_DELAY_2 | MAC_CLK_100M_10M_OUTPUT_DELAY_2); + reg[2] |= FIELD_PREP(MAC_CLK_100M_10M_INPUT_DELAY_2, mac_cfg.rx_delay_10) | + FIELD_PREP(MAC_CLK_100M_10M_OUTPUT_DELAY_2, mac_cfg.tx_delay_10); + } + + reg[0] |= (readl(clk_base + SCU1_MAC12_CLK_DLY) & ~GENMASK(25, 0)); + writel(reg[0], clk_base + SCU1_MAC12_CLK_DLY); + writel(reg[1], clk_base + SCU1_MAC12_CLK_DLY_100M); + writel(reg[2], clk_base + SCU1_MAC12_CLK_DLY_10M); +} + +static int ast2700_soc1_clk_init(struct device_node *soc1_node) +{ + struct clk_hw_onecell_data *clk_data; + struct ast2700_reset *reset; + u32 uart_clk_source = 0; + void __iomem *clk_base; + struct clk_hw **clks; + u32 val, id; + int ret; + + clk_base = of_iomap(soc1_node, 0); + if (IS_ERR(clk_base)) + return PTR_ERR(clk_base); + + clk_data = kzalloc(struct_size(clk_data, hws, SOC1_NUM_CLKS), GFP_KERNEL); + if (!clk_data) + return -ENOMEM; + + clk_data->num = SOC1_NUM_CLKS; + clks = clk_data->hws; + + reset = kzalloc(sizeof(*reset), GFP_KERNEL); + if (!reset) + return -ENOMEM; + + reset->base = clk_base; + + reset->rcdev.owner = THIS_MODULE; + reset->rcdev.nr_resets = SOC1_RESET_NUMS; + reset->rcdev.ops = &ast2700_reset_ops; + reset->rcdev.of_node = soc1_node; + + ret = reset_controller_register(&reset->rcdev); + if (ret) { + pr_err("soc1 failed to register reset controller\n"); + return ret; + } + /* + * Ast2700 A0 workaround: + * I3C reset should assert all of the I3C controllers simultaneously. + * Otherwise, it may lead to failure in accessing I3C registers. + */ + for (id = SCU1_RESET_I3C0; id <= SCU1_RESET_I3C15; id++) + ast2700_reset_assert(&reset->rcdev, id); + + clks[SCU1_CLKIN] = + clk_hw_register_fixed_rate(NULL, "soc1-clkin", NULL, 0, SCU_CLK_25MHZ); + + /* HPLL 1000Mhz */ + val = readl(clk_base + SCU1_HPLL_PARAM); + clks[SCU1_CLK_HPLL] = ast2700_calc_soc1_pll("soc1-hpll", "soc1-clkin", val); + + /* HPLL 800Mhz */ + val = readl(clk_base + SCU1_APLL_PARAM); + clks[SCU1_CLK_APLL] = ast2700_calc_soc1_pll("soc1-apll", "soc1-clkin", val); + + clks[SCU1_CLK_APLL_DIV2] = + clk_hw_register_fixed_factor(NULL, "soc1-apll_div2", "soc1-apll", 0, 1, 2); + + clks[SCU1_CLK_APLL_DIV4] = + clk_hw_register_fixed_factor(NULL, "soc1-apll_div4", "soc1-apll", 0, 1, 4); + + val = readl(clk_base + SCU1_DPLL_PARAM); + clks[SCU1_CLK_DPLL] = ast2700_calc_soc1_pll("dpll", "soc1-clkin", val); + + /* uxclk mux selection */ + clks[SCU1_CLK_UXCLK] = + clk_hw_register_mux(NULL, "uxclk", uxclk_sel, ARRAY_SIZE(uxclk_sel), + 0, clk_base + SCU1_CLK_SEL2, + 0, 2, 0, &ast2700_clk_lock); + + val = readl(clk_base + SCU1_UXCLK_CTRL); + clks[SCU1_CLK_UARTX] = ast2700_calc_uclk("uartxclk", val); + + /* huxclk mux selection */ + clks[SCU1_CLK_HUXCLK] = + clk_hw_register_mux(NULL, "huxclk", uxclk_sel, ARRAY_SIZE(uxclk_sel), + 0, clk_base + SCU1_CLK_SEL2, + 3, 2, 0, &ast2700_clk_lock); + + val = readl(clk_base + SCU1_HUXCLK_CTRL); + clks[SCU1_CLK_HUARTX] = ast2700_calc_huclk("huartxclk", val); + + /* AHB CLK = 200Mhz */ + clks[SCU1_CLK_AHB] = + clk_hw_register_divider_table(NULL, "soc1-ahb", "soc1-hpll", + 0, clk_base + SCU1_CLK_SEL2, + 20, 3, 0, ast2700_clk_div_table, &ast2700_clk_lock); + + /* APB CLK = 100Mhz */ + clks[SCU1_CLK_APB] = + clk_hw_register_divider_table(NULL, "soc1-apb", "soc1-hpll", + 0, clk_base + SCU1_CLK_SEL1, + 18, 3, 0, ast2700_clk_div_table2, &ast2700_clk_lock); + + /* RMII */ + clks[SCU1_CLK_RMII] = + clk_hw_register_divider_table(NULL, "rmii", "soc1-hpll", + 0, clk_base + SCU1_CLK_SEL1, + 21, 3, 0, ast2700_rmii_div_table, &ast2700_clk_lock); + + /* RMII0 50MHz (RCLK) output enable */ + clks[SCU1_CLK_MAC0RCLK] = + clk_hw_register_gate(NULL, "mac0rclk", "rmii", 0, + clk_base + SCU1_MAC12_CLK_DLY, 29, + 0, &ast2700_clk_lock); + + /* RMII1 50MHz (RCLK) output enable */ + clks[SCU1_CLK_MAC1RCLK] = + clk_hw_register_gate(NULL, "mac1rclk", "rmii", 0, + clk_base + SCU1_MAC12_CLK_DLY, 30, + 0, &ast2700_clk_lock); + + /* RGMII */ + clks[SCU1_CLK_RGMII] = + clk_hw_register_divider_table(NULL, "rgmii", "soc1-hpll", + 0, clk_base + SCU1_CLK_SEL1, + 25, 3, 0, ast2700_rgmii_div_table, &ast2700_clk_lock); + + /* MAC HCLK */ + clks[SCU1_CLK_MACHCLK] = + clk_hw_register_divider_table(NULL, "machclk", "soc1-hpll", + 0, clk_base + SCU1_CLK_SEL1, + 29, 3, 0, ast2700_clk_div_table, &ast2700_clk_lock); + + /* MAC0/1 RGMII/RMII Clock Delay */ + ast2700_soc1_configure_mac01_clk(soc1_node); + + clks[SCU1_CLK_GATE_LCLK0] = + ast2700_clk_hw_register_gate(NULL, "lclk0-gate", NULL, + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP, + 0, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_LCLK0] = + ast2700_clk_hw_register_gate(NULL, "lclk1-gate", NULL, + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP, + 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_ESPI0CLK] = + ast2700_clk_hw_register_gate(NULL, "espi0clk-gate", NULL, + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP, + 2, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_ESPI1CLK] = + ast2700_clk_hw_register_gate(NULL, "espi1clk-gate", NULL, + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP, + 3, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_APLL_DIVN] = + clk_hw_register_divider_table(NULL, "soc1-apll_divn", "soc1-apll", + 0, clk_base + SCU1_CLK_SEL2, + 8, 3, 0, ast2700_clk_div_table, &ast2700_clk_lock); + + clks[SCU1_CLK_SDMUX] = + clk_hw_register_mux(NULL, "sdclk-mux", sdclk_sel, ARRAY_SIZE(sdclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 13, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_SDCLK] = + clk_hw_register_divider_table(NULL, "sdclk", "sdclk-mux", + 0, clk_base + SCU1_CLK_SEL1, + 14, 3, 0, ast2700_clk_div_table, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_SDCLK] = + ast2700_clk_hw_register_gate(NULL, "sdclk-gate", "sdclk", + 0, clk_base + SCU1_CLK_STOP, + 4, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_IPEREFCLK] = + ast2700_clk_hw_register_gate(NULL, "soc1-refclk-gate", NULL, + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP, + 6, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_LPCHCLK] = + ast2700_clk_hw_register_gate(NULL, "lpchclk-gate", NULL, + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP, + 7, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_MAC0CLK] = + ast2700_clk_hw_register_gate(NULL, "mac0clk-gate", NULL, + 0, clk_base + SCU1_CLK_STOP, + 8, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_MAC1CLK] = + ast2700_clk_hw_register_gate(NULL, "mac1clk-gate", NULL, + 0, clk_base + SCU1_CLK_STOP, + 9, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_MAC2CLK] = + ast2700_clk_hw_register_gate(NULL, "mac2clk-gate", NULL, + 0, clk_base + SCU1_CLK_STOP, + 10, 0, &ast2700_clk_lock); + + of_property_read_u32(soc1_node, "uart-clk-source", &uart_clk_source); + if (uart_clk_source) { + val = readl(clk_base + SCU1_CLK_SEL1) & ~GENMASK(12, 0); + uart_clk_source &= GENMASK(12, 0); + writel(val | uart_clk_source, clk_base + SCU1_CLK_SEL1); + } + + //UART0 + clks[SCU1_CLK_UART0] = + clk_hw_register_mux(NULL, "uart0clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 0, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART0CLK] = + ast2700_clk_hw_register_gate(NULL, "uart0clk-gate", "uart0clk", + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP, + 11, 0, &ast2700_clk_lock); + + //UART1 + clks[SCU1_CLK_UART1] = + clk_hw_register_mux(NULL, "uart1clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 1, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART1CLK] = + ast2700_clk_hw_register_gate(NULL, "uart1clk-gate", "uart1clk", + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP, + 12, 0, &ast2700_clk_lock); + + //UART2 + clks[SCU1_CLK_UART2] = + clk_hw_register_mux(NULL, "uart2clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 2, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART2CLK] = + ast2700_clk_hw_register_gate(NULL, "uart2clk-gate", "uart2clk", + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP, + 13, 0, &ast2700_clk_lock); + + //UART3 + clks[SCU1_CLK_UART3] = + clk_hw_register_mux(NULL, "uart3clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 3, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART3CLK] = + ast2700_clk_hw_register_gate(NULL, "uart3clk-gate", "uart3clk", + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP, + 14, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C0CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c0clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 16, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C1CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c1clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 17, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C2CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c2clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 18, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C3CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c3clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 19, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C4CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c4clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 20, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C5CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c5clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 21, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C6CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c6clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 22, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C7CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c7clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 23, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C8CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c8clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 24, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C9CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c9clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 25, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C10CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c10clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 26, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C11CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c11clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 27, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C12CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c12clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 28, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C13CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c13clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 29, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C14CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c14clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 30, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_I3C15CLK] = + ast2700_clk_hw_register_gate(NULL, "i3c15clk-gate", "soc1-ahb", + 0, clk_base + SCU1_CLK_STOP, + 31, 0, &ast2700_clk_lock); + + /*clk stop 2 */ + //UART5 + clks[SCU1_CLK_UART5] = + clk_hw_register_mux(NULL, "uart5clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 5, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART5CLK] = + ast2700_clk_hw_register_gate(NULL, "uart5clk-gate", "uart5clk", + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP2, + 0, 0, &ast2700_clk_lock); + + //UART6 + clks[SCU1_CLK_UART6] = + clk_hw_register_mux(NULL, "uart6clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 6, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART6CLK] = + ast2700_clk_hw_register_gate(NULL, "uart6clk-gate", "uart6clk", + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP2, + 1, 0, &ast2700_clk_lock); + + //UART7 + clks[SCU1_CLK_UART7] = + clk_hw_register_mux(NULL, "uart7clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 7, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART7CLK] = + ast2700_clk_hw_register_gate(NULL, "uart7clk-gate", "uart7clk", + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP2, + 2, 0, &ast2700_clk_lock); + + //UART8 + clks[SCU1_CLK_UART8] = + clk_hw_register_mux(NULL, "uart8clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 8, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART8CLK] = + ast2700_clk_hw_register_gate(NULL, "uart8clk-gate", "uart8clk", + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP2, + 3, 0, &ast2700_clk_lock); + + //UART9 + clks[SCU1_CLK_UART9] = + clk_hw_register_mux(NULL, "uart9clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 9, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART9CLK] = + ast2700_clk_hw_register_gate(NULL, "uart9clk-gate", "uart9clk", + 0, clk_base + SCU1_CLK_STOP2, + 4, 0, &ast2700_clk_lock); + + //UART10 + clks[SCU1_CLK_UART10] = + clk_hw_register_mux(NULL, "uart10clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 10, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART10CLK] = + ast2700_clk_hw_register_gate(NULL, "uart10clk-gate", "uart10clk", + 0, clk_base + SCU1_CLK_STOP2, + 5, 0, &ast2700_clk_lock); + + //UART11 + clks[SCU1_CLK_UART11] = + clk_hw_register_mux(NULL, "uart11clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 11, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART11CLK] = + ast2700_clk_hw_register_gate(NULL, "uart11clk-gate", "uart11clk", + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP2, + 6, 0, &ast2700_clk_lock); + + //uart12: call bmc uart + clks[SCU1_CLK_UART12] = + clk_hw_register_mux(NULL, "uart12clk", uartclk_sel, ARRAY_SIZE(uartclk_sel), + 0, clk_base + SCU1_CLK_SEL1, + 12, 1, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_UART12CLK] = + ast2700_clk_hw_register_gate(NULL, "uart12clk-gate", "uart12clk", + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP2, + 7, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_FSICLK] = + ast2700_clk_hw_register_gate(NULL, "fsiclk-gate", NULL, + 0, clk_base + SCU1_CLK_STOP2, + 8, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_LTPIPHYCLK] = + ast2700_clk_hw_register_gate(NULL, "ltpiphyclk-gate", NULL, + 0, clk_base + SCU1_CLK_STOP2, + 9, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_LTPICLK] = + ast2700_clk_hw_register_gate(NULL, "ltpiclk-gate", NULL, + 0, clk_base + SCU1_CLK_STOP2, + 10, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_VGALCLK] = + ast2700_clk_hw_register_gate(NULL, "vgalclk-gate", NULL, + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP2, + 11, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_USBUARTCLK] = + ast2700_clk_hw_register_gate(NULL, "usbuartclk-gate", NULL, + 0, clk_base + SCU1_CLK_STOP2, + 12, 0, &ast2700_clk_lock); + + clk_hw_register_fixed_factor(NULL, "canclk", "soc1-apll", 0, 1, 10); + + clks[SCU1_CLK_GATE_CANCLK] = + ast2700_clk_hw_register_gate(NULL, "canclk-gate", "canclk", + 0, clk_base + SCU1_CLK_STOP2, + 13, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_PCICLK] = + ast2700_clk_hw_register_gate(NULL, "pciclk-gate", NULL, + 0, clk_base + SCU1_CLK_STOP2, + 14, 0, &ast2700_clk_lock); + + clks[SCU1_CLK_GATE_SLICLK] = + ast2700_clk_hw_register_gate(NULL, "sliclk-gate", NULL, + CLK_IS_CRITICAL, clk_base + SCU1_CLK_STOP2, + 15, 0, &ast2700_clk_lock); + + of_clk_add_hw_provider(soc1_node, of_clk_hw_onecell_get, clk_data); + + return 0; +}; + +static const char *const pspclk_sel[] = { + "soc0-mpll", + "soc0-hpll", +}; + +static const char *const soc0_uartclk_sel[] = { + "soc0-clk24Mhz", + "soc0-clk192Mhz", +}; + +static const char *const emmcclk_sel[] = { + "soc0-mpll_div4", + "soc0-hpll_div4", +}; + +static int ast2700_soc0_clk_init(struct device_node *soc0_node) +{ + struct clk_hw_onecell_data *clk_data; + void __iomem *clk_base; + struct ast2700_reset *reset; + struct clk_hw **clks; + int div; + u32 val; + int ret; + + clk_data = kzalloc(struct_size(clk_data, hws, SOC0_NUM_CLKS), GFP_KERNEL); + if (!clk_data) + return -ENOMEM; + + clk_data->num = SOC0_NUM_CLKS; + clks = clk_data->hws; + + clk_base = of_iomap(soc0_node, 0); + if (IS_ERR(clk_base)) + return PTR_ERR(clk_base); + + reset = kzalloc(sizeof(*reset), GFP_KERNEL); + if (!reset) + return -ENOMEM; + + reset->base = clk_base; + + reset->rcdev.owner = THIS_MODULE; + reset->rcdev.nr_resets = SOC0_RESET_NUMS; + reset->rcdev.ops = &ast2700_reset_ops; + reset->rcdev.of_node = soc0_node; + + ret = reset_controller_register(&reset->rcdev); + if (ret) { + pr_err("soc0 failed to register reset controller\n"); + return ret; + } + + clks[SCU0_CLKIN] = + clk_hw_register_fixed_rate(NULL, "soc0-clkin", NULL, 0, SCU_CLK_25MHZ); + + clks[SCU0_CLK_24M] = + clk_hw_register_fixed_rate(NULL, "soc0-clk24Mhz", NULL, 0, SCU_CLK_24MHZ); + + clks[SCU0_CLK_192M] = + clk_hw_register_fixed_rate(NULL, "soc0-clk192Mhz", NULL, 0, SCU_CLK_192MHZ); + + //hpll + val = readl(clk_base + SCU0_HWSTRAP1); + if ((val & GENMASK(3, 2)) != 0) { + switch ((val & GENMASK(3, 2)) >> 2) { + case 1: + clks[SCU0_CLK_HPLL] = + clk_hw_register_fixed_rate(NULL, "soc0-hpll", NULL, 0, 1900000000); + break; + case 2: + clks[SCU0_CLK_HPLL] = + clk_hw_register_fixed_rate(NULL, "soc0-hpll", NULL, 0, 1800000000); + break; + case 3: + clks[SCU0_CLK_HPLL] = + clk_hw_register_fixed_rate(NULL, "soc0-hpll", NULL, 0, 1700000000); + break; + } + } else { + val = readl(clk_base + SCU0_HPLL_PARAM); + clks[SCU0_CLK_HPLL] = ast2700_soc0_hw_pll("soc0-hpll", "soc0-clkin", val); + } + clks[SCU0_CLK_HPLL_DIV2] = clk_hw_register_fixed_factor(NULL, "soc0-hpll_div2", "soc0-hpll", 0, 1, 2); + clks[SCU0_CLK_HPLL_DIV4] = clk_hw_register_fixed_factor(NULL, "soc0-hpll_div4", "soc0-hpll", 0, 1, 4); + + //dpll + val = readl(clk_base + SCU0_DPLL_PARAM); + clks[SCU0_CLK_DPLL] = ast2700_soc0_hw_pll("dpll", "soc0-clkin", val); + + //mpll + val = readl(clk_base + SCU0_MPLL_PARAM); + clks[SCU0_CLK_MPLL] = ast2700_calc_mpll("soc0-mpll", "soc0-clkin", val); + clks[SCU0_CLK_MPLL_DIV2] = clk_hw_register_fixed_factor(NULL, "soc0-mpll_div2", "soc0-mpll", 0, 1, 2); + clks[SCU0_CLK_MPLL_DIV4] = clk_hw_register_fixed_factor(NULL, "soc0-mpll_div4", "soc0-mpll", 0, 1, 4); + clks[SCU0_CLK_MPLL_DIV8] = clk_hw_register_fixed_factor(NULL, "soc0-mpll_div8", "soc0-mpll", 0, 1, 8); + + val = readl(clk_base + SCU0_D1CLK_PARAM); + clks[SCU0_CLK_VGA0] = ast2700_soc0_hw_pll("d1clk", "soc0-clkin", val); + + val = readl(clk_base + SCU0_D2CLK_PARAM); + clks[SCU0_CLK_VGA1] = ast2700_soc0_hw_pll("d2clk", "soc0-clkin", val); + + val = readl(clk_base + SCU0_CRT1CLK_PARAM); + clks[SCU0_CLK_CRT0] = ast2700_soc0_hw_pll("crt0clk", "soc0-clkin", val); + + val = readl(clk_base + SCU0_CRT2CLK_PARAM); + clks[SCU0_CLK_CRT1] = ast2700_soc0_hw_pll("crt1clk", "soc0-clkin", val); + + val = readl(clk_base + SCU0_MPHYCLK_PARAM); + clks[SCU0_CLK_MPHY] = clk_hw_register_fixed_factor(NULL, "mphyclk", "soc0-hpll", 0, 1, val + 1); + + clks[SCU0_CLK_PSP] = + clk_hw_register_mux(NULL, "pspclk", pspclk_sel, ARRAY_SIZE(pspclk_sel), + 0, clk_base + SCU0_HWSTRAP1, + 4, 1, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_AXI0] = + clk_hw_register_fixed_factor(NULL, "axi0clk", "pspclk", 0, 1, 2); + + val = readl(clk_base + SCU0_HWSTRAP1); + if (val & BIT(7)) { + clks[SCU0_CLK_AHB] = + clk_hw_register_divider_table(NULL, "soc0-ahb", "soc0-hpll", + 0, clk_base + SCU0_HWSTRAP1, + 5, 2, 0, ast2700_clk_div_table, &ast2700_clk_lock); + } else { + clks[SCU0_CLK_AHB] = + clk_hw_register_divider_table(NULL, "soc0-ahb", "soc0-mpll", + 0, clk_base + SCU0_HWSTRAP1, + 5, 2, 0, ast2700_clk_div_table, &ast2700_clk_lock); + } + + clks[SCU0_CLK_AXI1] = + clk_hw_register_fixed_factor(NULL, "axi1clk", "soc0-ahb", 0, 1, 2); + + clks[SCU0_CLK_APB] = + clk_hw_register_divider_table(NULL, "soc0-apb", "axi0clk", + 0, clk_base + SCU0_CLK_SEL1, + 23, 3, 0, ast2700_clk_div_table2, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_MCLK] = + ast2700_clk_hw_register_gate(NULL, "mclk", "soc0-mpll", + CLK_IS_CRITICAL, clk_base + SCU0_CLK_STOP, + 0, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_ECLK] = + ast2700_clk_hw_register_gate(NULL, "eclk", NULL, + 0, clk_base + SCU0_CLK_STOP, + 1, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_2DCLK] = + ast2700_clk_hw_register_gate(NULL, "gclk", NULL, + CLK_IS_CRITICAL, clk_base + SCU0_CLK_STOP, + 2, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_VCLK] = + ast2700_clk_hw_register_gate(NULL, "vclk", NULL, + 0, clk_base + SCU0_CLK_STOP, + 3, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_BCLK] = + ast2700_clk_hw_register_gate(NULL, "bclk", NULL, + CLK_IS_CRITICAL, clk_base + SCU0_CLK_STOP, + 4, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_VGA0CLK] = + ast2700_clk_hw_register_gate(NULL, "d1clk-gate", NULL, + CLK_IS_CRITICAL, clk_base + SCU0_CLK_STOP, + 5, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_REFCLK] = + ast2700_clk_hw_register_gate(NULL, "soc0-refclk-gate", "soc0-clkin", + CLK_IS_CRITICAL, clk_base + SCU0_CLK_STOP, + 6, 0, &ast2700_clk_lock); + + div = (GET_USB_REFCLK_DIV(readl(clk_base + SCU0_CLK_SEL2)) + 1) * 2; + clks[SCU0_CLK_U2PHY_REFCLK] = clk_hw_register_fixed_factor(NULL, "xhci_ref_clk", "soc0-mpll_div8", 0, 1, div); + + clks[SCU0_CLK_U2PHY_CLK12M] = + clk_hw_register_fixed_rate(NULL, "xhci_suspend_clk", NULL, 0, SCU_CLK_12MHZ); + + clks[SCU0_CLK_GATE_PORTBUSB2CLK] = + ast2700_clk_hw_register_gate(NULL, "portb-usb2clk", NULL, + 0, clk_base + SCU0_CLK_STOP, + 7, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_UHCICLK] = + ast2700_clk_hw_register_gate(NULL, "uhciclk", NULL, + 0, clk_base + SCU0_CLK_STOP, + 9, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_VGA1CLK] = + ast2700_clk_hw_register_gate(NULL, "d2clk-gate", NULL, + CLK_IS_CRITICAL, clk_base + SCU0_CLK_STOP, + 10, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_HACCLK] = + ast2700_clk_hw_register_gate(NULL, "hac-clk", NULL, + 0, clk_base + SCU0_CLK_STOP, + 13, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_PORTAUSB2CLK] = + ast2700_clk_hw_register_gate(NULL, "porta-usb2clk", NULL, + 0, clk_base + SCU0_CLK_STOP, + 14, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_UART] = + clk_hw_register_mux(NULL, "soc0-uartclk", soc0_uartclk_sel, ARRAY_SIZE(soc0_uartclk_sel), + 0, clk_base + SCU0_CLK_SEL2, + 14, 1, 0, &ast2700_clk_lock); + + if (readl(clk_base + SCU0_CLK_SEL2) & UART_DIV13_EN) + div = 13; + else + div = 1; + + clks[SCU0_CLK_UART4] = + clk_hw_register_fixed_factor(NULL, "uart4clk", "soc0-uartclk", 0, 1, div); + + clks[SCU0_CLK_GATE_UART4CLK] = + ast2700_clk_hw_register_gate(NULL, "uart4clk-gate", "uart4clk", + CLK_IS_CRITICAL, clk_base + SCU0_CLK_STOP, + 15, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_DACCLK] = + ast2700_clk_hw_register_gate(NULL, "dacclk", NULL, + CLK_IS_CRITICAL, clk_base + SCU0_CLK_STOP, + 17, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_CRT0CLK] = + ast2700_clk_hw_register_gate(NULL, "crt0clk-gate", NULL, + 0, clk_base + SCU0_CLK_STOP, + 20, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_CRT1CLK] = + ast2700_clk_hw_register_gate(NULL, "crt1clk-gate", NULL, + 0, clk_base + SCU0_CLK_STOP, + 21, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_ECDSACLK] = + ast2700_clk_hw_register_gate(NULL, "eccclk", NULL, + 0, clk_base + SCU0_CLK_STOP, + 23, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_RSACLK] = + ast2700_clk_hw_register_gate(NULL, "rsaclk", NULL, + 0, clk_base + SCU0_CLK_STOP, + 24, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_RVAS0CLK] = + ast2700_clk_hw_register_gate(NULL, "rvasclk", NULL, + 0, clk_base + SCU0_CLK_STOP, + 25, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_UFSCLK] = + ast2700_clk_hw_register_gate(NULL, "ufsclk", NULL, + 0, clk_base + SCU0_CLK_STOP, + 26, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_EMMCMUX] = + clk_hw_register_mux(NULL, "emmcsrc-mux", emmcclk_sel, ARRAY_SIZE(emmcclk_sel), + 0, clk_base + SCU0_CLK_SEL1, + 11, 1, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_EMMC] = + clk_hw_register_divider_table(NULL, "emmcclk", "emmcsrc-mux", + 0, clk_base + SCU0_CLK_SEL1, + 12, 3, 0, ast2700_clk_div_table2, + &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_EMMCCLK] = + ast2700_clk_hw_register_gate(NULL, "emmcclk-gate", "emmcclk", + 0, clk_base + SCU0_CLK_STOP, + 27, 0, &ast2700_clk_lock); + + clks[SCU0_CLK_GATE_RVAS1CLK] = + ast2700_clk_hw_register_gate(NULL, "rvas2clk", NULL, + 0, clk_base + SCU0_CLK_STOP, + 28, 0, &ast2700_clk_lock); + + of_clk_add_hw_provider(soc0_node, of_clk_hw_onecell_get, clk_data); + + return 0; +}; + +CLK_OF_DECLARE_DRIVER(ast2700_soc0, "aspeed,ast2700-scu0", ast2700_soc0_clk_init); +CLK_OF_DECLARE_DRIVER(ast2700_soc1, "aspeed,ast2700-scu1", ast2700_soc1_clk_init); -- 2.34.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2 4/9] clk: ast2700: add clock controller 2024-08-02 9:05 ` [PATCH v2 4/9] clk: ast2700: add clock controller Kevin Chen @ 2024-08-02 9:16 ` Krzysztof Kozlowski 2024-08-02 19:33 ` Dmitry Baryshkov 1 sibling, 0 replies; 28+ messages in thread From: Krzysztof Kozlowski @ 2024-08-02 9:16 UTC (permalink / raw) To: Kevin Chen, robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On 02/08/2024 11:05, Kevin Chen wrote: > Add support for ast2700 clock controller. > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> > --- > drivers/clk/Makefile | 1 + > drivers/clk/clk-ast2700.c | 1173 +++++++++++++++++++++++++++++++++++++ > 2 files changed, 1174 insertions(+) > create mode 100644 drivers/clk/clk-ast2700.c Missing bindings. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 4/9] clk: ast2700: add clock controller 2024-08-02 9:05 ` [PATCH v2 4/9] clk: ast2700: add clock controller Kevin Chen 2024-08-02 9:16 ` Krzysztof Kozlowski @ 2024-08-02 19:33 ` Dmitry Baryshkov 2024-10-08 3:10 ` Kevin Chen 1 sibling, 1 reply; 28+ messages in thread From: Dmitry Baryshkov @ 2024-08-02 19:33 UTC (permalink / raw) To: Kevin Chen Cc: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On Fri, 2 Aug 2024 at 12:05, Kevin Chen <kevin_chen@aspeedtech.com> wrote: > > Add support for ast2700 clock controller. > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> > --- > drivers/clk/Makefile | 1 + > drivers/clk/clk-ast2700.c | 1173 +++++++++++++++++++++++++++++++++++++ > 2 files changed, 1174 insertions(+) > create mode 100644 drivers/clk/clk-ast2700.c > > diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile > index f793a16cad40..0d5992ea0fa4 100644 > --- a/drivers/clk/Makefile > +++ b/drivers/clk/Makefile > @@ -38,6 +38,7 @@ obj-$(CONFIG_COMMON_CLK_FSL_SAI) += clk-fsl-sai.o > obj-$(CONFIG_COMMON_CLK_GEMINI) += clk-gemini.o > obj-$(CONFIG_COMMON_CLK_ASPEED) += clk-aspeed.o > obj-$(CONFIG_MACH_ASPEED_G6) += clk-ast2600.o > +obj-$(CONFIG_MACH_ASPEED_G7) += clk-ast2700.o > obj-$(CONFIG_ARCH_HIGHBANK) += clk-highbank.o > obj-$(CONFIG_CLK_HSDK) += clk-hsdk-pll.o > obj-$(CONFIG_COMMON_CLK_K210) += clk-k210.o > diff --git a/drivers/clk/clk-ast2700.c b/drivers/clk/clk-ast2700.c > new file mode 100644 > index 000000000000..eec8e0cb83d9 > --- /dev/null > +++ b/drivers/clk/clk-ast2700.c > @@ -0,0 +1,1173 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +// Copyright ASPEED Technology > + > +#include <linux/clk-provider.h> > +#include <linux/of_address.h> > +#include <linux/of_device.h> > +#include <linux/reset-controller.h> > + > +#include <dt-bindings/clock/aspeed,ast2700-clk.h> > +#include <dt-bindings/reset/aspeed,ast2700-reset.h> > + > +#define SCU_CLK_24MHZ 24000000 Are Aspeed's 24 MHz somehow different from 24 MHz on other platforms? Please use <linux/units.h> and refrain from defining just random values. If it has some special meaning (like XO clock or some other fixed funcion), please use logical names. > +#define SCU_CLK_25MHZ 25000000 > +#define SCU_CLK_192MHZ 192000000 > +/* SOC0 USB2 PHY CLK*/ > +#define SCU_CLK_12MHZ 12000000 So, this can be #define ASPEED_SOC0_USB2_PHY_RATE (12 * HZ_PER_MHZ) > +/* SOC0 */ > +#define SCU0_HWSTRAP1 0x010 > +#define SCU0_CLK_STOP 0x240 > +#define SCU0_CLK_SEL1 0x280 > +#define SCU0_CLK_SEL2 0x284 > +#define GET_USB_REFCLK_DIV(x) ((GENMASK(23, 20) & (x)) >> 20) > +#define UART_DIV13_EN BIT(30) > +#define SCU0_HPLL_PARAM 0x300 > +#define SCU0_DPLL_PARAM 0x308 > +#define SCU0_MPLL_PARAM 0x310 > +#define SCU0_D1CLK_PARAM 0x320 > +#define SCU0_D2CLK_PARAM 0x330 > +#define SCU0_CRT1CLK_PARAM 0x340 > +#define SCU0_CRT2CLK_PARAM 0x350 > +#define SCU0_MPHYCLK_PARAM 0x360 > + > +/* SOC1 */ > +#define SCU1_CLK_STOP 0x240 > +#define SCU1_CLK_STOP2 0x260 > +#define SCU1_CLK_SEL1 0x280 > +#define SCU1_CLK_SEL2 0x284 > +#define UXCLK_MASK GENMASK(1, 0) > +#define HUXCLK_MASK GENMASK(4, 3) > +#define SCU1_HPLL_PARAM 0x300 > +#define SCU1_APLL_PARAM 0x310 > +#define SCU1_DPLL_PARAM 0x320 > +#define SCU1_UXCLK_CTRL 0x330 > +#define SCU1_HUXCLK_CTRL 0x334 > +#define SCU1_MAC12_CLK_DLY 0x390 > +#define SCU1_MAC12_CLK_DLY_100M 0x394 > +#define SCU1_MAC12_CLK_DLY_10M 0x398 > + > +/* > + * MAC Clock Delay settings > + */ > +#define MAC_CLK_RMII1_50M_RCLK_O_CTRL BIT(30) > +#define MAC_CLK_RMII1_50M_RCLK_O_DIS 0 > +#define MAC_CLK_RMII1_50M_RCLK_O_EN 1 > +#define MAC_CLK_RMII0_50M_RCLK_O_CTRL BIT(29) > +#define MAC_CLK_RMII0_5M_RCLK_O_DIS 0 > +#define MAC_CLK_RMII0_5M_RCLK_O_EN 1 > +#define MAC_CLK_RMII_TXD_FALLING_2 BIT(27) > +#define MAC_CLK_RMII_TXD_FALLING_1 BIT(26) > +#define MAC_CLK_RXCLK_INV_2 BIT(25) > +#define MAC_CLK_RXCLK_INV_1 BIT(24) > +#define MAC_CLK_1G_INPUT_DELAY_2 GENMASK(23, 18) > +#define MAC_CLK_1G_INPUT_DELAY_1 GENMASK(17, 12) > +#define MAC_CLK_1G_OUTPUT_DELAY_2 GENMASK(11, 6) > +#define MAC_CLK_1G_OUTPUT_DELAY_1 GENMASK(5, 0) > + > +#define MAC_CLK_100M_10M_RESERVED GENMASK(31, 26) > +#define MAC_CLK_100M_10M_RXCLK_INV_2 BIT(25) > +#define MAC_CLK_100M_10M_RXCLK_INV_1 BIT(24) > +#define MAC_CLK_100M_10M_INPUT_DELAY_2 GENMASK(23, 18) > +#define MAC_CLK_100M_10M_INPUT_DELAY_1 GENMASK(17, 12) > +#define MAC_CLK_100M_10M_OUTPUT_DELAY_2 GENMASK(11, 6) > +#define MAC_CLK_100M_10M_OUTPUT_DELAY_1 GENMASK(5, 0) > + > +#define AST2700_DEF_MAC12_DELAY_1G 0x00CF4D75 lowcase hex, please. > +#define AST2700_DEF_MAC12_DELAY_100M 0x00410410 > +#define AST2700_DEF_MAC12_DELAY_10M 0x00410410 > + > +struct mac_delay_config { > + u32 tx_delay_1000; > + u32 rx_delay_1000; > + u32 tx_delay_100; > + u32 rx_delay_100; > + u32 tx_delay_10; > + u32 rx_delay_10; > +}; > + > +/* Globally visible clocks */ > +static DEFINE_SPINLOCK(ast2700_clk_lock); > + > +/* Division of RGMII Clock */ > +static const struct clk_div_table ast2700_rgmii_div_table[] = { > + { 0x0, 4 }, > + { 0x1, 4 }, > + { 0x2, 6 }, > + { 0x3, 8 }, > + { 0x4, 10 }, > + { 0x5, 12 }, > + { 0x6, 14 }, > + { 0x7, 16 }, > + { 0 } > +}; > + > +/* Division of RMII Clock */ > +static const struct clk_div_table ast2700_rmii_div_table[] = { > + { 0x0, 8 }, > + { 0x1, 8 }, > + { 0x2, 12 }, > + { 0x3, 16 }, > + { 0x4, 20 }, > + { 0x5, 24 }, > + { 0x6, 28 }, > + { 0x7, 32 }, > + { 0 } > +}; > + > +/* Division of HCLK/SDIO/MAC/apll_divn CLK */ > +static const struct clk_div_table ast2700_clk_div_table[] = { > + { 0x0, 2 }, > + { 0x1, 2 }, > + { 0x2, 3 }, > + { 0x3, 4 }, > + { 0x4, 5 }, > + { 0x5, 6 }, > + { 0x6, 7 }, > + { 0x7, 8 }, > + { 0 } > +}; > + > +/* Division of PCLK/EMMC CLK */ > +static const struct clk_div_table ast2700_clk_div_table2[] = { > + { 0x0, 2 }, > + { 0x1, 4 }, > + { 0x2, 6 }, > + { 0x3, 8 }, > + { 0x4, 10 }, > + { 0x5, 12 }, > + { 0x6, 14 }, > + { 0x7, 16 }, > + { 0 } > +}; > + > +/* HPLL/DPLL: 2000Mhz(default) */ > +static struct clk_hw *ast2700_soc0_hw_pll(const char *name, const char *parent_name, u32 val) Please migrate from using parent_names to either using parent_hw or using fwname to specify the parent clock. > +{ > + unsigned int mult, div; > + > + if (val & BIT(24)) { > + /* Pass through mode */ > + mult = 1; > + div = 1; > + } else { > + /* F = CLKIN(25MHz) * [(M+1) / 2(N+1)] / (P+1) */ > + u32 m = val & 0x1fff; > + u32 n = (val >> 13) & 0x3f; > + u32 p = (val >> 19) & 0xf; > + > + mult = (m + 1) / (2 * (n + 1)); > + div = (p + 1); > + } > + > + return clk_hw_register_fixed_factor(NULL, name, parent_name, 0, mult, div); > +}; > + > +/* MPLL 1600Mhz(default) */ > +static struct clk_hw *ast2700_calc_mpll(const char *name, const char *parent_name, u32 val) > +{ > + unsigned int mult, div; > + > + if (val & BIT(24)) { > + /* Pass through mode */ > + div = 1; > + mult = div; > + } else { > + /* F = CLKIN(25MHz) * [CLKF/(CLKR+1)] /(CLKOD+1) */ > + u32 m = val & 0x1fff; > + u32 n = (val >> 13) & 0x3f; > + u32 p = (val >> 19) & 0xf; > + > + mult = m / (n + 1); > + div = (p + 1); > + } > + return clk_hw_register_fixed_factor(NULL, name, parent_name, 0, mult, div); > +}; > + > +static struct clk_hw *ast2700_calc_uclk(const char *name, u32 val) > +{ > + unsigned int mult, div; > + > + /* UARTCLK = UXCLK * R / (N * 2) */ > + u32 r = val & 0xff; > + u32 n = (val >> 8) & 0x3ff; > + > + mult = r; > + div = n * 2; > + > + return clk_hw_register_fixed_factor(NULL, name, "uxclk", 0, mult, div); > +}; > + > +static struct clk_hw *ast2700_calc_huclk(const char *name, u32 val) > +{ > + unsigned int mult, div; > + > + /* UARTCLK = UXCLK * R / (N * 2) */ > + u32 r = val & 0xff; > + u32 n = (val >> 8) & 0x3ff; > + > + mult = r; > + div = n * 2; > + > + return clk_hw_register_fixed_factor(NULL, name, "huxclk", 0, mult, div); > +}; > + > +static struct clk_hw *ast2700_calc_soc1_pll(const char *name, const char *parent_name, u32 val) How is this different from ast2700_soc0_hw_pll() ? > +{ > + unsigned int mult, div; > + > + if (val & BIT(24)) { > + /* Pass through mode */ > + div = 1; > + mult = div; > + } else { > + /* F = 25Mhz * [(M + 1) / (n + 1)] / (p + 1) */ > + u32 m = val & 0x1fff; > + u32 n = (val >> 13) & 0x3f; > + u32 p = (val >> 19) & 0xf; > + > + mult = (m + 1) / (n + 1); > + div = (p + 1); > + } > + return clk_hw_register_fixed_factor(NULL, name, parent_name, 0, mult, div); > +}; > + -- With best wishes Dmitry ^ permalink raw reply [flat|nested] 28+ messages in thread
* RE: [PATCH v2 4/9] clk: ast2700: add clock controller 2024-08-02 19:33 ` Dmitry Baryshkov @ 2024-10-08 3:10 ` Kevin Chen 2024-10-08 3:41 ` Ryan Chen 0 siblings, 1 reply; 28+ messages in thread From: Kevin Chen @ 2024-10-08 3:10 UTC (permalink / raw) To: Dmitry Baryshkov Cc: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joel@jms.id.au, andrew@codeconstruct.com.au, lee@kernel.org, catalin.marinas@arm.com, will@kernel.org, arnd@arndb.de, olof@lixom.net, soc@kernel.org, mturquette@baylibre.com, sboyd@kernel.org, p.zabel@pengutronix.de, quic_bjorande@quicinc.com, geert+renesas@glider.be, shawnguo@kernel.org, neil.armstrong@linaro.org, m.szyprowski@samsung.com, nfraprado@collabora.com, u-kumar1@ti.com, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, BMC-SW > > > > Add support for ast2700 clock controller. > > > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> > > --- > > drivers/clk/Makefile | 1 + > > drivers/clk/clk-ast2700.c | 1173 > > +++++++++++++++++++++++++++++++++++++ > > 2 files changed, 1174 insertions(+) > > create mode 100644 drivers/clk/clk-ast2700.c > > > > diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index > > f793a16cad40..0d5992ea0fa4 100644 > > --- a/drivers/clk/Makefile > > +++ b/drivers/clk/Makefile > > @@ -38,6 +38,7 @@ obj-$(CONFIG_COMMON_CLK_FSL_SAI) += > clk-fsl-sai.o > > obj-$(CONFIG_COMMON_CLK_GEMINI) += clk-gemini.o > > obj-$(CONFIG_COMMON_CLK_ASPEED) += clk-aspeed.o > > obj-$(CONFIG_MACH_ASPEED_G6) += clk-ast2600.o > > +obj-$(CONFIG_MACH_ASPEED_G7) += clk-ast2700.o > > obj-$(CONFIG_ARCH_HIGHBANK) += clk-highbank.o > > obj-$(CONFIG_CLK_HSDK) += clk-hsdk-pll.o > > obj-$(CONFIG_COMMON_CLK_K210) += clk-k210.o > > diff --git a/drivers/clk/clk-ast2700.c b/drivers/clk/clk-ast2700.c new > > file mode 100644 index 000000000000..eec8e0cb83d9 > > --- /dev/null > > +++ b/drivers/clk/clk-ast2700.c > > @@ -0,0 +1,1173 @@ > > +// SPDX-License-Identifier: GPL-2.0-or-later // Copyright ASPEED > > +Technology > > + > > +#include <linux/clk-provider.h> > > +#include <linux/of_address.h> > > +#include <linux/of_device.h> > > +#include <linux/reset-controller.h> > > + > > +#include <dt-bindings/clock/aspeed,ast2700-clk.h> > > +#include <dt-bindings/reset/aspeed,ast2700-reset.h> > > + > > +#define SCU_CLK_24MHZ 24000000 > > Are Aspeed's 24 MHz somehow different from 24 MHz on other platforms? > Please use <linux/units.h> and refrain from defining just random values. If it > has some special meaning (like XO clock or some other fixed funcion), please > use logical names. Already split clock and reset to Ryan's commit. https://patchwork.kernel.org/project/linux-clk/list/?series=892020 Please check the series of " Add support for AST2700 clk driver". > > > +#define SCU_CLK_25MHZ 25000000 > > +#define SCU_CLK_192MHZ 192000000 > > +/* SOC0 USB2 PHY CLK*/ > > +#define SCU_CLK_12MHZ 12000000 > > So, this can be #define ASPEED_SOC0_USB2_PHY_RATE (12 * HZ_PER_MHZ) Already split clock and reset to Ryan's commit. https://patchwork.kernel.org/project/linux-clk/list/?series=892020 Please check the series of " Add support for AST2700 clk driver". > > > +/* SOC0 */ > > +#define SCU0_HWSTRAP1 0x010 > > +#define SCU0_CLK_STOP 0x240 > > +#define SCU0_CLK_SEL1 0x280 > > +#define SCU0_CLK_SEL2 0x284 > > +#define GET_USB_REFCLK_DIV(x) ((GENMASK(23, 20) & (x)) >> 20) #define > > +UART_DIV13_EN BIT(30) #define SCU0_HPLL_PARAM 0x300 #define > > +SCU0_DPLL_PARAM 0x308 #define SCU0_MPLL_PARAM 0x310 #define > > +SCU0_D1CLK_PARAM 0x320 #define SCU0_D2CLK_PARAM 0x330 #define > > +SCU0_CRT1CLK_PARAM 0x340 #define SCU0_CRT2CLK_PARAM 0x350 > #define > > +SCU0_MPHYCLK_PARAM 0x360 > > + > > +/* SOC1 */ > > +#define SCU1_CLK_STOP 0x240 > > +#define SCU1_CLK_STOP2 0x260 > > +#define SCU1_CLK_SEL1 0x280 > > +#define SCU1_CLK_SEL2 0x284 > > +#define UXCLK_MASK GENMASK(1, 0) > > +#define HUXCLK_MASK GENMASK(4, 3) > > +#define SCU1_HPLL_PARAM 0x300 > > +#define SCU1_APLL_PARAM 0x310 > > +#define SCU1_DPLL_PARAM 0x320 > > +#define SCU1_UXCLK_CTRL 0x330 > > +#define SCU1_HUXCLK_CTRL 0x334 > > +#define SCU1_MAC12_CLK_DLY 0x390 > > +#define SCU1_MAC12_CLK_DLY_100M 0x394 #define > SCU1_MAC12_CLK_DLY_10M > > +0x398 > > + > > +/* > > + * MAC Clock Delay settings > > + */ > > +#define MAC_CLK_RMII1_50M_RCLK_O_CTRL BIT(30) > > +#define MAC_CLK_RMII1_50M_RCLK_O_DIS 0 > > +#define MAC_CLK_RMII1_50M_RCLK_O_EN 1 > > +#define MAC_CLK_RMII0_50M_RCLK_O_CTRL BIT(29) > > +#define MAC_CLK_RMII0_5M_RCLK_O_DIS 0 > > +#define MAC_CLK_RMII0_5M_RCLK_O_EN 1 > > +#define MAC_CLK_RMII_TXD_FALLING_2 BIT(27) > > +#define MAC_CLK_RMII_TXD_FALLING_1 BIT(26) > > +#define MAC_CLK_RXCLK_INV_2 BIT(25) > > +#define MAC_CLK_RXCLK_INV_1 BIT(24) > > +#define MAC_CLK_1G_INPUT_DELAY_2 GENMASK(23, 18) > > +#define MAC_CLK_1G_INPUT_DELAY_1 GENMASK(17, 12) > > +#define MAC_CLK_1G_OUTPUT_DELAY_2 GENMASK(11, 6) > > +#define MAC_CLK_1G_OUTPUT_DELAY_1 GENMASK(5, 0) > > + > > +#define MAC_CLK_100M_10M_RESERVED GENMASK(31, > 26) > > +#define MAC_CLK_100M_10M_RXCLK_INV_2 BIT(25) > > +#define MAC_CLK_100M_10M_RXCLK_INV_1 BIT(24) > > +#define MAC_CLK_100M_10M_INPUT_DELAY_2 GENMASK(23, > 18) > > +#define MAC_CLK_100M_10M_INPUT_DELAY_1 GENMASK(17, > 12) > > +#define MAC_CLK_100M_10M_OUTPUT_DELAY_2 > GENMASK(11, 6) > > +#define MAC_CLK_100M_10M_OUTPUT_DELAY_1 > GENMASK(5, 0) > > + > > +#define AST2700_DEF_MAC12_DELAY_1G 0x00CF4D75 > > lowcase hex, please. Already split clock and reset to Ryan's commit. https://patchwork.kernel.org/project/linux-clk/list/?series=892020 Please check the series of " Add support for AST2700 clk driver". > > > +#define AST2700_DEF_MAC12_DELAY_100M 0x00410410 > > +#define AST2700_DEF_MAC12_DELAY_10M 0x00410410 > > + > > +struct mac_delay_config { > > + u32 tx_delay_1000; > > + u32 rx_delay_1000; > > + u32 tx_delay_100; > > + u32 rx_delay_100; > > + u32 tx_delay_10; > > + u32 rx_delay_10; > > +}; > > + > > +/* Globally visible clocks */ > > +static DEFINE_SPINLOCK(ast2700_clk_lock); > > + > > +/* Division of RGMII Clock */ > > +static const struct clk_div_table ast2700_rgmii_div_table[] = { > > + { 0x0, 4 }, > > + { 0x1, 4 }, > > + { 0x2, 6 }, > > + { 0x3, 8 }, > > + { 0x4, 10 }, > > + { 0x5, 12 }, > > + { 0x6, 14 }, > > + { 0x7, 16 }, > > + { 0 } > > +}; > > + > > +/* Division of RMII Clock */ > > +static const struct clk_div_table ast2700_rmii_div_table[] = { > > + { 0x0, 8 }, > > + { 0x1, 8 }, > > + { 0x2, 12 }, > > + { 0x3, 16 }, > > + { 0x4, 20 }, > > + { 0x5, 24 }, > > + { 0x6, 28 }, > > + { 0x7, 32 }, > > + { 0 } > > +}; > > + > > +/* Division of HCLK/SDIO/MAC/apll_divn CLK */ static const struct > > +clk_div_table ast2700_clk_div_table[] = { > > + { 0x0, 2 }, > > + { 0x1, 2 }, > > + { 0x2, 3 }, > > + { 0x3, 4 }, > > + { 0x4, 5 }, > > + { 0x5, 6 }, > > + { 0x6, 7 }, > > + { 0x7, 8 }, > > + { 0 } > > +}; > > + > > +/* Division of PCLK/EMMC CLK */ > > +static const struct clk_div_table ast2700_clk_div_table2[] = { > > + { 0x0, 2 }, > > + { 0x1, 4 }, > > + { 0x2, 6 }, > > + { 0x3, 8 }, > > + { 0x4, 10 }, > > + { 0x5, 12 }, > > + { 0x6, 14 }, > > + { 0x7, 16 }, > > + { 0 } > > +}; > > + > > +/* HPLL/DPLL: 2000Mhz(default) */ > > +static struct clk_hw *ast2700_soc0_hw_pll(const char *name, const > > +char *parent_name, u32 val) > > Please migrate from using parent_names to either using parent_hw or using > fwname to specify the parent clock. Already split clock and reset to Ryan's commit. https://patchwork.kernel.org/project/linux-clk/list/?series=892020 Please check the series of " Add support for AST2700 clk driver". > > > +{ > > + unsigned int mult, div; > > + > > + if (val & BIT(24)) { > > + /* Pass through mode */ > > + mult = 1; > > + div = 1; > > + } else { > > + /* F = CLKIN(25MHz) * [(M+1) / 2(N+1)] / (P+1) */ > > + u32 m = val & 0x1fff; > > + u32 n = (val >> 13) & 0x3f; > > + u32 p = (val >> 19) & 0xf; > > + > > + mult = (m + 1) / (2 * (n + 1)); > > + div = (p + 1); > > + } > > + > > + return clk_hw_register_fixed_factor(NULL, name, parent_name, > > +0, mult, div); }; > > + > > +/* MPLL 1600Mhz(default) */ > > +static struct clk_hw *ast2700_calc_mpll(const char *name, const char > > +*parent_name, u32 val) { > > + unsigned int mult, div; > > + > > + if (val & BIT(24)) { > > + /* Pass through mode */ > > + div = 1; > > + mult = div; > > + } else { > > + /* F = CLKIN(25MHz) * [CLKF/(CLKR+1)] /(CLKOD+1) */ > > + u32 m = val & 0x1fff; > > + u32 n = (val >> 13) & 0x3f; > > + u32 p = (val >> 19) & 0xf; > > + > > + mult = m / (n + 1); > > + div = (p + 1); > > + } > > + return clk_hw_register_fixed_factor(NULL, name, parent_name, > > +0, mult, div); }; > > + > > +static struct clk_hw *ast2700_calc_uclk(const char *name, u32 val) { > > + unsigned int mult, div; > > + > > + /* UARTCLK = UXCLK * R / (N * 2) */ > > + u32 r = val & 0xff; > > + u32 n = (val >> 8) & 0x3ff; > > + > > + mult = r; > > + div = n * 2; > > + > > + return clk_hw_register_fixed_factor(NULL, name, "uxclk", 0, > > +mult, div); }; > > + > > +static struct clk_hw *ast2700_calc_huclk(const char *name, u32 val) { > > + unsigned int mult, div; > > + > > + /* UARTCLK = UXCLK * R / (N * 2) */ > > + u32 r = val & 0xff; > > + u32 n = (val >> 8) & 0x3ff; > > + > > + mult = r; > > + div = n * 2; > > + > > + return clk_hw_register_fixed_factor(NULL, name, "huxclk", 0, > > +mult, div); }; > > + > > +static struct clk_hw *ast2700_calc_soc1_pll(const char *name, const > > +char *parent_name, u32 val) > > How is this different from ast2700_soc0_hw_pll() ? Already split clock and reset to Ryan's commit. https://patchwork.kernel.org/project/linux-clk/list/?series=892020 Please check the series of " Add support for AST2700 clk driver". > > > +{ > > + unsigned int mult, div; > > + > > + if (val & BIT(24)) { > > + /* Pass through mode */ > > + div = 1; > > + mult = div; > > + } else { > > + /* F = 25Mhz * [(M + 1) / (n + 1)] / (p + 1) */ > > + u32 m = val & 0x1fff; > > + u32 n = (val >> 13) & 0x3f; > > + u32 p = (val >> 19) & 0xf; > > + > > + mult = (m + 1) / (n + 1); > > + div = (p + 1); > > + } > > + return clk_hw_register_fixed_factor(NULL, name, parent_name, > > +0, mult, div); }; > > + > > > -- > With best wishes > Dmitry ^ permalink raw reply [flat|nested] 28+ messages in thread
* RE: [PATCH v2 4/9] clk: ast2700: add clock controller 2024-10-08 3:10 ` Kevin Chen @ 2024-10-08 3:41 ` Ryan Chen 0 siblings, 0 replies; 28+ messages in thread From: Ryan Chen @ 2024-10-08 3:41 UTC (permalink / raw) To: Kevin Chen, Dmitry Baryshkov Cc: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joel@jms.id.au, andrew@codeconstruct.com.au, lee@kernel.org, catalin.marinas@arm.com, will@kernel.org, arnd@arndb.de, olof@lixom.net, soc@kernel.org, mturquette@baylibre.com, sboyd@kernel.org, p.zabel@pengutronix.de, quic_bjorande@quicinc.com, geert+renesas@glider.be, shawnguo@kernel.org, neil.armstrong@linaro.org, m.szyprowski@samsung.com, nfraprado@collabora.com, u-kumar1@ti.com, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, BMC-SW Hello Dmitry, Thanks, your review. I will update in my next clk patch. And include you in review email. > Subject: RE: [PATCH v2 4/9] clk: ast2700: add clock controller > > > > > > > Add support for ast2700 clock controller. > > > > > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> > > > --- > > > drivers/clk/Makefile | 1 + > > > drivers/clk/clk-ast2700.c | 1173 > > > +++++++++++++++++++++++++++++++++++++ > > > 2 files changed, 1174 insertions(+) create mode 100644 > > > drivers/clk/clk-ast2700.c > > > > > > diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index > > > f793a16cad40..0d5992ea0fa4 100644 > > > --- a/drivers/clk/Makefile > > > +++ b/drivers/clk/Makefile > > > @@ -38,6 +38,7 @@ obj-$(CONFIG_COMMON_CLK_FSL_SAI) += > > clk-fsl-sai.o > > > obj-$(CONFIG_COMMON_CLK_GEMINI) += > clk-gemini.o > > > obj-$(CONFIG_COMMON_CLK_ASPEED) += > clk-aspeed.o > > > obj-$(CONFIG_MACH_ASPEED_G6) += clk-ast2600.o > > > +obj-$(CONFIG_MACH_ASPEED_G7) += clk-ast2700.o > > > obj-$(CONFIG_ARCH_HIGHBANK) += clk-highbank.o > > > obj-$(CONFIG_CLK_HSDK) += clk-hsdk-pll.o > > > obj-$(CONFIG_COMMON_CLK_K210) += clk-k210.o > > > diff --git a/drivers/clk/clk-ast2700.c b/drivers/clk/clk-ast2700.c > > > new file mode 100644 index 000000000000..eec8e0cb83d9 > > > --- /dev/null > > > +++ b/drivers/clk/clk-ast2700.c > > > @@ -0,0 +1,1173 @@ > > > +// SPDX-License-Identifier: GPL-2.0-or-later // Copyright ASPEED > > > +Technology > > > + > > > +#include <linux/clk-provider.h> > > > +#include <linux/of_address.h> > > > +#include <linux/of_device.h> > > > +#include <linux/reset-controller.h> > > > + > > > +#include <dt-bindings/clock/aspeed,ast2700-clk.h> > > > +#include <dt-bindings/reset/aspeed,ast2700-reset.h> > > > + > > > +#define SCU_CLK_24MHZ 24000000 > > > > Are Aspeed's 24 MHz somehow different from 24 MHz on other platforms? > > Please use <linux/units.h> and refrain from defining just random > > values. If it has some special meaning (like XO clock or some other > > fixed funcion), please use logical names. > Already split clock and reset to Ryan's commit. > https://patchwork.kernel.org/project/linux-clk/list/?series=892020 > Please check the series of " Add support for AST2700 clk driver". > > > > > > +#define SCU_CLK_25MHZ 25000000 > > > +#define SCU_CLK_192MHZ 192000000 > > > +/* SOC0 USB2 PHY CLK*/ > > > +#define SCU_CLK_12MHZ 12000000 > > > > So, this can be #define ASPEED_SOC0_USB2_PHY_RATE (12 * HZ_PER_MHZ) > Already split clock and reset to Ryan's commit. > https://patchwork.kernel.org/project/linux-clk/list/?series=892020 > Please check the series of " Add support for AST2700 clk driver". > > > > > > +/* SOC0 */ > > > +#define SCU0_HWSTRAP1 0x010 > > > +#define SCU0_CLK_STOP 0x240 > > > +#define SCU0_CLK_SEL1 0x280 > > > +#define SCU0_CLK_SEL2 0x284 > > > +#define GET_USB_REFCLK_DIV(x) ((GENMASK(23, 20) & (x)) >> 20) > > > +#define UART_DIV13_EN BIT(30) #define SCU0_HPLL_PARAM 0x300 > #define > > > +SCU0_DPLL_PARAM 0x308 #define SCU0_MPLL_PARAM 0x310 #define > > > +SCU0_D1CLK_PARAM 0x320 #define SCU0_D2CLK_PARAM 0x330 #define > > > +SCU0_CRT1CLK_PARAM 0x340 #define SCU0_CRT2CLK_PARAM 0x350 > > #define > > > +SCU0_MPHYCLK_PARAM 0x360 > > > + > > > +/* SOC1 */ > > > +#define SCU1_CLK_STOP 0x240 > > > +#define SCU1_CLK_STOP2 0x260 > > > +#define SCU1_CLK_SEL1 0x280 > > > +#define SCU1_CLK_SEL2 0x284 > > > +#define UXCLK_MASK GENMASK(1, 0) > > > +#define HUXCLK_MASK GENMASK(4, 3) > > > +#define SCU1_HPLL_PARAM 0x300 > > > +#define SCU1_APLL_PARAM 0x310 > > > +#define SCU1_DPLL_PARAM 0x320 > > > +#define SCU1_UXCLK_CTRL 0x330 > > > +#define SCU1_HUXCLK_CTRL 0x334 > > > +#define SCU1_MAC12_CLK_DLY 0x390 > > > +#define SCU1_MAC12_CLK_DLY_100M 0x394 #define > > SCU1_MAC12_CLK_DLY_10M > > > +0x398 > > > + > > > +/* > > > + * MAC Clock Delay settings > > > + */ > > > +#define MAC_CLK_RMII1_50M_RCLK_O_CTRL BIT(30) > > > +#define MAC_CLK_RMII1_50M_RCLK_O_DIS 0 > > > +#define MAC_CLK_RMII1_50M_RCLK_O_EN 1 > > > +#define MAC_CLK_RMII0_50M_RCLK_O_CTRL BIT(29) > > > +#define MAC_CLK_RMII0_5M_RCLK_O_DIS 0 > > > +#define MAC_CLK_RMII0_5M_RCLK_O_EN 1 > > > +#define MAC_CLK_RMII_TXD_FALLING_2 BIT(27) > > > +#define MAC_CLK_RMII_TXD_FALLING_1 BIT(26) > > > +#define MAC_CLK_RXCLK_INV_2 BIT(25) > > > +#define MAC_CLK_RXCLK_INV_1 BIT(24) > > > +#define MAC_CLK_1G_INPUT_DELAY_2 GENMASK(23, > 18) > > > +#define MAC_CLK_1G_INPUT_DELAY_1 GENMASK(17, > 12) > > > +#define MAC_CLK_1G_OUTPUT_DELAY_2 GENMASK(11, > 6) > > > +#define MAC_CLK_1G_OUTPUT_DELAY_1 GENMASK(5, > 0) > > > + > > > +#define MAC_CLK_100M_10M_RESERVED > GENMASK(31, > > 26) > > > +#define MAC_CLK_100M_10M_RXCLK_INV_2 BIT(25) > > > +#define MAC_CLK_100M_10M_RXCLK_INV_1 BIT(24) > > > +#define MAC_CLK_100M_10M_INPUT_DELAY_2 > GENMASK(23, > > 18) > > > +#define MAC_CLK_100M_10M_INPUT_DELAY_1 > GENMASK(17, > > 12) > > > +#define MAC_CLK_100M_10M_OUTPUT_DELAY_2 > > GENMASK(11, 6) > > > +#define MAC_CLK_100M_10M_OUTPUT_DELAY_1 > > GENMASK(5, 0) > > > + > > > +#define AST2700_DEF_MAC12_DELAY_1G 0x00CF4D75 > > > > lowcase hex, please. > Already split clock and reset to Ryan's commit. > https://patchwork.kernel.org/project/linux-clk/list/?series=892020 > Please check the series of " Add support for AST2700 clk driver". > > > > > > +#define AST2700_DEF_MAC12_DELAY_100M 0x00410410 > > > +#define AST2700_DEF_MAC12_DELAY_10M 0x00410410 > > > + > > > +struct mac_delay_config { > > > + u32 tx_delay_1000; > > > + u32 rx_delay_1000; > > > + u32 tx_delay_100; > > > + u32 rx_delay_100; > > > + u32 tx_delay_10; > > > + u32 rx_delay_10; > > > +}; > > > + > > > +/* Globally visible clocks */ > > > +static DEFINE_SPINLOCK(ast2700_clk_lock); > > > + > > > +/* Division of RGMII Clock */ > > > +static const struct clk_div_table ast2700_rgmii_div_table[] = { > > > + { 0x0, 4 }, > > > + { 0x1, 4 }, > > > + { 0x2, 6 }, > > > + { 0x3, 8 }, > > > + { 0x4, 10 }, > > > + { 0x5, 12 }, > > > + { 0x6, 14 }, > > > + { 0x7, 16 }, > > > + { 0 } > > > +}; > > > + > > > +/* Division of RMII Clock */ > > > +static const struct clk_div_table ast2700_rmii_div_table[] = { > > > + { 0x0, 8 }, > > > + { 0x1, 8 }, > > > + { 0x2, 12 }, > > > + { 0x3, 16 }, > > > + { 0x4, 20 }, > > > + { 0x5, 24 }, > > > + { 0x6, 28 }, > > > + { 0x7, 32 }, > > > + { 0 } > > > +}; > > > + > > > +/* Division of HCLK/SDIO/MAC/apll_divn CLK */ static const struct > > > +clk_div_table ast2700_clk_div_table[] = { > > > + { 0x0, 2 }, > > > + { 0x1, 2 }, > > > + { 0x2, 3 }, > > > + { 0x3, 4 }, > > > + { 0x4, 5 }, > > > + { 0x5, 6 }, > > > + { 0x6, 7 }, > > > + { 0x7, 8 }, > > > + { 0 } > > > +}; > > > + > > > +/* Division of PCLK/EMMC CLK */ > > > +static const struct clk_div_table ast2700_clk_div_table2[] = { > > > + { 0x0, 2 }, > > > + { 0x1, 4 }, > > > + { 0x2, 6 }, > > > + { 0x3, 8 }, > > > + { 0x4, 10 }, > > > + { 0x5, 12 }, > > > + { 0x6, 14 }, > > > + { 0x7, 16 }, > > > + { 0 } > > > +}; > > > + > > > +/* HPLL/DPLL: 2000Mhz(default) */ > > > +static struct clk_hw *ast2700_soc0_hw_pll(const char *name, const > > > +char *parent_name, u32 val) > > > > Please migrate from using parent_names to either using parent_hw or > > using fwname to specify the parent clock. > Already split clock and reset to Ryan's commit. > https://patchwork.kernel.org/project/linux-clk/list/?series=892020 > Please check the series of " Add support for AST2700 clk driver". > > > > > > +{ > > > + unsigned int mult, div; > > > + > > > + if (val & BIT(24)) { > > > + /* Pass through mode */ > > > + mult = 1; > > > + div = 1; > > > + } else { > > > + /* F = CLKIN(25MHz) * [(M+1) / 2(N+1)] / (P+1) */ > > > + u32 m = val & 0x1fff; > > > + u32 n = (val >> 13) & 0x3f; > > > + u32 p = (val >> 19) & 0xf; > > > + > > > + mult = (m + 1) / (2 * (n + 1)); > > > + div = (p + 1); > > > + } > > > + > > > + return clk_hw_register_fixed_factor(NULL, name, parent_name, > > > +0, mult, div); }; > > > + > > > +/* MPLL 1600Mhz(default) */ > > > +static struct clk_hw *ast2700_calc_mpll(const char *name, const > > > +char *parent_name, u32 val) { > > > + unsigned int mult, div; > > > + > > > + if (val & BIT(24)) { > > > + /* Pass through mode */ > > > + div = 1; > > > + mult = div; > > > + } else { > > > + /* F = CLKIN(25MHz) * [CLKF/(CLKR+1)] /(CLKOD+1) */ > > > + u32 m = val & 0x1fff; > > > + u32 n = (val >> 13) & 0x3f; > > > + u32 p = (val >> 19) & 0xf; > > > + > > > + mult = m / (n + 1); > > > + div = (p + 1); > > > + } > > > + return clk_hw_register_fixed_factor(NULL, name, parent_name, > > > +0, mult, div); }; > > > + > > > +static struct clk_hw *ast2700_calc_uclk(const char *name, u32 val) { > > > + unsigned int mult, div; > > > + > > > + /* UARTCLK = UXCLK * R / (N * 2) */ > > > + u32 r = val & 0xff; > > > + u32 n = (val >> 8) & 0x3ff; > > > + > > > + mult = r; > > > + div = n * 2; > > > + > > > + return clk_hw_register_fixed_factor(NULL, name, "uxclk", 0, > > > +mult, div); }; > > > + > > > +static struct clk_hw *ast2700_calc_huclk(const char *name, u32 val) { > > > + unsigned int mult, div; > > > + > > > + /* UARTCLK = UXCLK * R / (N * 2) */ > > > + u32 r = val & 0xff; > > > + u32 n = (val >> 8) & 0x3ff; > > > + > > > + mult = r; > > > + div = n * 2; > > > + > > > + return clk_hw_register_fixed_factor(NULL, name, "huxclk", 0, > > > +mult, div); }; > > > + > > > +static struct clk_hw *ast2700_calc_soc1_pll(const char *name, const > > > +char *parent_name, u32 val) > > > > How is this different from ast2700_soc0_hw_pll() ? > Already split clock and reset to Ryan's commit. > https://patchwork.kernel.org/project/linux-clk/list/?series=892020 > Please check the series of " Add support for AST2700 clk driver". > > > > > > +{ > > > + unsigned int mult, div; > > > + > > > + if (val & BIT(24)) { > > > + /* Pass through mode */ > > > + div = 1; > > > + mult = div; > > > + } else { > > > + /* F = 25Mhz * [(M + 1) / (n + 1)] / (p + 1) */ > > > + u32 m = val & 0x1fff; > > > + u32 n = (val >> 13) & 0x3f; > > > + u32 p = (val >> 19) & 0xf; > > > + > > > + mult = (m + 1) / (n + 1); > > > + div = (p + 1); > > > + } > > > + return clk_hw_register_fixed_factor(NULL, name, parent_name, > > > +0, mult, div); }; > > > + > > > > > > -- > > With best wishes > > Dmitry ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 5/9] dt-bindings: arm: aspeed: Add ASPEED AST27XX SoC 2024-08-02 9:05 [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC Kevin Chen ` (4 preceding siblings ...) 2024-08-02 9:05 ` [PATCH v2 4/9] clk: ast2700: add clock controller Kevin Chen @ 2024-08-02 9:05 ` Kevin Chen 2024-08-02 9:16 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 6/9] arm64: aspeed: Add support for ASPEED AST27XX BMC SoC Kevin Chen ` (3 subsequent siblings) 9 siblings, 1 reply; 28+ messages in thread From: Kevin Chen @ 2024-08-02 9:05 UTC (permalink / raw) To: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, kevin_chen, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> --- Documentation/devicetree/bindings/arm/aspeed/aspeed.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/aspeed/aspeed.yaml b/Documentation/devicetree/bindings/arm/aspeed/aspeed.yaml index 95113df178cc..18fcd44377bd 100644 --- a/Documentation/devicetree/bindings/arm/aspeed/aspeed.yaml +++ b/Documentation/devicetree/bindings/arm/aspeed/aspeed.yaml @@ -8,6 +8,7 @@ title: Aspeed SoC based boards maintainers: - Joel Stanley <joel@jms.id.au> + - Kevin Chen <kevin_chen@aspeedtech.com> properties: $nodename: @@ -98,4 +99,10 @@ properties: - ufispace,ncplite-bmc - const: aspeed,ast2600 + - description: AST2700 based boards + items: + - enum: + - aspeed,ast2700-evb + - const: aspeed,ast2700 + additionalProperties: true -- 2.34.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2 5/9] dt-bindings: arm: aspeed: Add ASPEED AST27XX SoC 2024-08-02 9:05 ` [PATCH v2 5/9] dt-bindings: arm: aspeed: Add ASPEED AST27XX SoC Kevin Chen @ 2024-08-02 9:16 ` Krzysztof Kozlowski 0 siblings, 0 replies; 28+ messages in thread From: Krzysztof Kozlowski @ 2024-08-02 9:16 UTC (permalink / raw) To: Kevin Chen, robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On 02/08/2024 11:05, Kevin Chen wrote: > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> <form letter> This is a friendly reminder during the review process. It seems my or other reviewer's previous comments were not fully addressed. Maybe the feedback got lost between the quotes, maybe you just forgot to apply it. Please go back to the previous discussion and either implement all requested changes or keep discussing them. Thank you. </form letter> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 6/9] arm64: aspeed: Add support for ASPEED AST27XX BMC SoC 2024-08-02 9:05 [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC Kevin Chen ` (5 preceding siblings ...) 2024-08-02 9:05 ` [PATCH v2 5/9] dt-bindings: arm: aspeed: Add ASPEED AST27XX SoC Kevin Chen @ 2024-08-02 9:05 ` Kevin Chen 2024-08-02 9:16 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 7/9] arm64: defconfig: Add ASPEED AST2700 family support Kevin Chen ` (2 subsequent siblings) 9 siblings, 1 reply; 28+ messages in thread From: Kevin Chen @ 2024-08-02 9:05 UTC (permalink / raw) To: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, kevin_chen, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk Add two configs of ARCH_ASPEED and MACH_ASPEED_G7. In current arm64 architecture, ARCH_ASPEED would select MACH_ASPEED_G7. Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> --- MAINTAINERS | 3 +++ arch/arm64/Kconfig.platforms | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 8766f3e5e87e..7d7eded0d6a3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2121,7 +2121,10 @@ Q: https://patchwork.ozlabs.org/project/linux-aspeed/list/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/joel/bmc.git F: Documentation/devicetree/bindings/arm/aspeed/ F: arch/arm/boot/dts/aspeed/ +F: arch/arm64/boot/dts/aspeed/ F: arch/arm/mach-aspeed/ +F: include/dt-bindings/clock/aspeed,ast2700-clk.h +F: include/dt-bindings/reset/aspeed,ast2700-reset.h N: aspeed ARM/AXM LSI SOC diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms index 6c6d11536b42..1db7b6f1ee0a 100644 --- a/arch/arm64/Kconfig.platforms +++ b/arch/arm64/Kconfig.platforms @@ -40,6 +40,20 @@ config ARCH_APPLE This enables support for Apple's in-house ARM SoC family, starting with the Apple M1. +config ARCH_ASPEED + bool "Aspeed SoC family" + select MACH_ASPEED_G7 + help + Say yes if you intend to run on an Aspeed ast2700 or similar + seventh generation Aspeed BMCs. + +config MACH_ASPEED_G7 + bool "Aspeed SoC AST2700" + help + Say yes if you intend to run on an Aspeed ast2700 + seventh generation Aspeed BMCs. + Aspeed ast2700 BMC based on the Cortex A35. + menuconfig ARCH_BCM bool "Broadcom SoC Support" -- 2.34.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2 6/9] arm64: aspeed: Add support for ASPEED AST27XX BMC SoC 2024-08-02 9:05 ` [PATCH v2 6/9] arm64: aspeed: Add support for ASPEED AST27XX BMC SoC Kevin Chen @ 2024-08-02 9:16 ` Krzysztof Kozlowski 0 siblings, 0 replies; 28+ messages in thread From: Krzysztof Kozlowski @ 2024-08-02 9:16 UTC (permalink / raw) To: Kevin Chen, robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On 02/08/2024 11:05, Kevin Chen wrote: > Add two configs of ARCH_ASPEED and MACH_ASPEED_G7. > In current arm64 architecture, ARCH_ASPEED would select MACH_ASPEED_G7. > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> > --- NAK. <form letter> This is a friendly reminder during the review process. It seems my or other reviewer's previous comments were not fully addressed. Maybe the feedback got lost between the quotes, maybe you just forgot to apply it. Please go back to the previous discussion and either implement all requested changes or keep discussing them. Thank you. </form letter> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 7/9] arm64: defconfig: Add ASPEED AST2700 family support 2024-08-02 9:05 [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC Kevin Chen ` (6 preceding siblings ...) 2024-08-02 9:05 ` [PATCH v2 6/9] arm64: aspeed: Add support for ASPEED AST27XX BMC SoC Kevin Chen @ 2024-08-02 9:05 ` Kevin Chen 2024-08-02 19:20 ` Dmitry Baryshkov 2024-08-02 9:05 ` [PATCH v2 8/9] arm64: dts: aspeed: Add initial AST27XX device tree Kevin Chen 2024-08-02 9:05 ` [PATCH v2 9/9] arm64: dts: aspeed: Add initial AST2700 EVB " Kevin Chen 9 siblings, 1 reply; 28+ messages in thread From: Kevin Chen @ 2024-08-02 9:05 UTC (permalink / raw) To: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, kevin_chen, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk Enable CONFIG_ARCH_ASPEED in arm64 defconfig. Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> --- arch/arm64/configs/defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig index 7d32fca64996..b393735a695f 100644 --- a/arch/arm64/configs/defconfig +++ b/arch/arm64/configs/defconfig @@ -38,6 +38,7 @@ CONFIG_ARCH_AIROHA=y CONFIG_ARCH_SUNXI=y CONFIG_ARCH_ALPINE=y CONFIG_ARCH_APPLE=y +CONFIG_ARCH_ASPEED=y CONFIG_ARCH_BCM=y CONFIG_ARCH_BCM2835=y CONFIG_ARCH_BCM_IPROC=y -- 2.34.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2 7/9] arm64: defconfig: Add ASPEED AST2700 family support 2024-08-02 9:05 ` [PATCH v2 7/9] arm64: defconfig: Add ASPEED AST2700 family support Kevin Chen @ 2024-08-02 19:20 ` Dmitry Baryshkov 2024-08-02 19:25 ` Arnd Bergmann 2024-10-08 3:11 ` Kevin Chen 0 siblings, 2 replies; 28+ messages in thread From: Dmitry Baryshkov @ 2024-08-02 19:20 UTC (permalink / raw) To: Kevin Chen Cc: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On Fri, 2 Aug 2024 at 12:05, Kevin Chen <kevin_chen@aspeedtech.com> wrote: > > Enable CONFIG_ARCH_ASPEED in arm64 defconfig. Why? Usually the defconfig changes have "Enable CONFIG_FOO as it is used on the Bar Baz platform" commit message. > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> > --- > arch/arm64/configs/defconfig | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig > index 7d32fca64996..b393735a695f 100644 > --- a/arch/arm64/configs/defconfig > +++ b/arch/arm64/configs/defconfig > @@ -38,6 +38,7 @@ CONFIG_ARCH_AIROHA=y > CONFIG_ARCH_SUNXI=y > CONFIG_ARCH_ALPINE=y > CONFIG_ARCH_APPLE=y > +CONFIG_ARCH_ASPEED=y > CONFIG_ARCH_BCM=y > CONFIG_ARCH_BCM2835=y > CONFIG_ARCH_BCM_IPROC=y > -- > 2.34.1 > -- With best wishes Dmitry ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 7/9] arm64: defconfig: Add ASPEED AST2700 family support 2024-08-02 19:20 ` Dmitry Baryshkov @ 2024-08-02 19:25 ` Arnd Bergmann 2024-10-08 3:13 ` Kevin Chen 2024-10-08 3:11 ` Kevin Chen 1 sibling, 1 reply; 28+ messages in thread From: Arnd Bergmann @ 2024-08-02 19:25 UTC (permalink / raw) To: Dmitry Baryshkov, Kevin Chen Cc: Rob Herring, krzk+dt, Conor Dooley, Joel Stanley, Andrew Jeffery, Lee Jones, Catalin Marinas, Will Deacon, Olof Johansson, soc, Michael Turquette, Stephen Boyd, Philipp Zabel, Bjorn Andersson, Geert Uytterhoeven, Shawn Guo, Neil Armstrong, Marek Szyprowski, Nícolas F. R. A. Prado, Udit Kumar, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On Fri, Aug 2, 2024, at 21:20, Dmitry Baryshkov wrote: > On Fri, 2 Aug 2024 at 12:05, Kevin Chen <kevin_chen@aspeedtech.com> wrote: >> >> Enable CONFIG_ARCH_ASPEED in arm64 defconfig. > > Why? Usually the defconfig changes have "Enable CONFIG_FOO as it is > used on the Bar Baz platform" commit message. I would also expect to see aspeed specific device drivers to get enabled in the same commit. On arm32, I see CONFIG_ASPEED_KCS_IPMI_BMC=m CONFIG_ASPEED_BT_IPMI_BMC=m CONFIG_I2C_ASPEED=m CONFIG_SPI_ASPEED_SMC=m CONFIG_GPIO_ASPEED_SGPIO=y CONFIG_SENSORS_ASPEED=m CONFIG_VIDEO_ASPEED=m CONFIG_DRM_ASPEED_GFX=m CONFIG_USB_ASPEED_VHUB=m CONFIG_RTC_DRV_ASPEED=m CONFIG_ASPEED_LPC_CTRL=m CONFIG_ASPEED_LPC_SNOOP=m CONFIG_ASPEED_P2A_CTRL=m CONFIG_ASPEED_ADC=m CONFIG_FSI_MASTER_ASPEED=m Presumably not all but a lot of these are also used on AST2700. Arnd ^ permalink raw reply [flat|nested] 28+ messages in thread
* RE: [PATCH v2 7/9] arm64: defconfig: Add ASPEED AST2700 family support 2024-08-02 19:25 ` Arnd Bergmann @ 2024-10-08 3:13 ` Kevin Chen 0 siblings, 0 replies; 28+ messages in thread From: Kevin Chen @ 2024-10-08 3:13 UTC (permalink / raw) To: Arnd Bergmann, Dmitry Baryshkov Cc: Rob Herring, krzk+dt@kernel.org, Conor Dooley, Joel Stanley, Andrew Jeffery, Lee Jones, Catalin Marinas, Will Deacon, Olof Johansson, soc@kernel.org, Michael Turquette, Stephen Boyd, Philipp Zabel, Bjorn Andersson, Geert Uytterhoeven, Shawn Guo, Neil Armstrong, Marek Szyprowski, Nícolas F. R. A. Prado, Udit Kumar, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org > >> > >> Enable CONFIG_ARCH_ASPEED in arm64 defconfig. > > > > Why? Usually the defconfig changes have "Enable CONFIG_FOO as it is > > used on the Bar Baz platform" commit message. > > I would also expect to see aspeed specific device drivers to get enabled in the > same commit. On arm32, I see For different device drivers, ASPEED would submit code by its owner with CONFIG enabled. > > CONFIG_ASPEED_KCS_IPMI_BMC=m > CONFIG_ASPEED_BT_IPMI_BMC=m > CONFIG_I2C_ASPEED=m > CONFIG_SPI_ASPEED_SMC=m > CONFIG_GPIO_ASPEED_SGPIO=y > CONFIG_SENSORS_ASPEED=m > CONFIG_VIDEO_ASPEED=m > CONFIG_DRM_ASPEED_GFX=m > CONFIG_USB_ASPEED_VHUB=m > CONFIG_RTC_DRV_ASPEED=m > CONFIG_ASPEED_LPC_CTRL=m > CONFIG_ASPEED_LPC_SNOOP=m > CONFIG_ASPEED_P2A_CTRL=m > CONFIG_ASPEED_ADC=m > CONFIG_FSI_MASTER_ASPEED=m > > Presumably not all but a lot of these are also used on AST2700. > > Arnd ^ permalink raw reply [flat|nested] 28+ messages in thread
* RE: [PATCH v2 7/9] arm64: defconfig: Add ASPEED AST2700 family support 2024-08-02 19:20 ` Dmitry Baryshkov 2024-08-02 19:25 ` Arnd Bergmann @ 2024-10-08 3:11 ` Kevin Chen 1 sibling, 0 replies; 28+ messages in thread From: Kevin Chen @ 2024-10-08 3:11 UTC (permalink / raw) To: Dmitry Baryshkov Cc: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joel@jms.id.au, andrew@codeconstruct.com.au, lee@kernel.org, catalin.marinas@arm.com, will@kernel.org, arnd@arndb.de, olof@lixom.net, soc@kernel.org, mturquette@baylibre.com, sboyd@kernel.org, p.zabel@pengutronix.de, quic_bjorande@quicinc.com, geert+renesas@glider.be, shawnguo@kernel.org, neil.armstrong@linaro.org, m.szyprowski@samsung.com, nfraprado@collabora.com, u-kumar1@ti.com, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, BMC-SW > > > > Enable CONFIG_ARCH_ASPEED in arm64 defconfig. > > Why? Usually the defconfig changes have "Enable CONFIG_FOO as it is used on > the Bar Baz platform" commit message. Agree. I will fix it in next patch. > > > > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> > > --- > > arch/arm64/configs/defconfig | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/arch/arm64/configs/defconfig > > b/arch/arm64/configs/defconfig index 7d32fca64996..b393735a695f 100644 > > --- a/arch/arm64/configs/defconfig > > +++ b/arch/arm64/configs/defconfig > > @@ -38,6 +38,7 @@ CONFIG_ARCH_AIROHA=y CONFIG_ARCH_SUNXI=y > > CONFIG_ARCH_ALPINE=y CONFIG_ARCH_APPLE=y > > +CONFIG_ARCH_ASPEED=y > > CONFIG_ARCH_BCM=y > > CONFIG_ARCH_BCM2835=y > > CONFIG_ARCH_BCM_IPROC=y > > -- > > 2.34.1 > > > > > -- > With best wishes > Dmitry ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 8/9] arm64: dts: aspeed: Add initial AST27XX device tree 2024-08-02 9:05 [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC Kevin Chen ` (7 preceding siblings ...) 2024-08-02 9:05 ` [PATCH v2 7/9] arm64: defconfig: Add ASPEED AST2700 family support Kevin Chen @ 2024-08-02 9:05 ` Kevin Chen 2024-08-02 9:12 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 9/9] arm64: dts: aspeed: Add initial AST2700 EVB " Kevin Chen 9 siblings, 1 reply; 28+ messages in thread From: Kevin Chen @ 2024-08-02 9:05 UTC (permalink / raw) To: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, kevin_chen, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk Add aspeed-g7.dtsi to be AST27XX device tree. Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> --- arch/arm64/boot/dts/Makefile | 1 + arch/arm64/boot/dts/aspeed/aspeed-g7.dtsi | 185 ++++++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 arch/arm64/boot/dts/aspeed/aspeed-g7.dtsi diff --git a/arch/arm64/boot/dts/Makefile b/arch/arm64/boot/dts/Makefile index 21cd3a87f385..c909c19dc5dd 100644 --- a/arch/arm64/boot/dts/Makefile +++ b/arch/arm64/boot/dts/Makefile @@ -34,3 +34,4 @@ subdir-y += tesla subdir-y += ti subdir-y += toshiba subdir-y += xilinx +subdir-y += aspeed diff --git a/arch/arm64/boot/dts/aspeed/aspeed-g7.dtsi b/arch/arm64/boot/dts/aspeed/aspeed-g7.dtsi new file mode 100644 index 000000000000..85f7977a753a --- /dev/null +++ b/arch/arm64/boot/dts/aspeed/aspeed-g7.dtsi @@ -0,0 +1,185 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#include <dt-bindings/clock/aspeed,ast2700-clk.h> +#include <dt-bindings/reset/aspeed,ast2700-reset.h> +#include <dt-bindings/interrupt-controller/arm-gic.h> +#include <dt-bindings/interrupt-controller/aspeed-scu-ic.h> + +/ { + compatible = "aspeed,ast2700"; + #address-cells = <2>; + #size-cells = <2>; + interrupt-parent = <&gic>; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu@0 { + compatible = "arm,cortex-a35"; + device_type = "cpu"; + enable-method = "psci"; + reg = <0>; + d-cache-size = <0x8000>; + d-cache-line-size = <64>; + d-cache-sets = <128>; + i-cache-size = <0x8000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + next-level-cache = <&l2>; + }; + + cpu@1 { + compatible = "arm,cortex-a35"; + device_type = "cpu"; + enable-method = "psci"; + reg = <1>; + d-cache-size = <0x8000>; + d-cache-line-size = <64>; + d-cache-sets = <128>; + i-cache-size = <0x8000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + next-level-cache = <&l2>; + }; + + cpu@2 { + compatible = "arm,cortex-a35"; + device_type = "cpu"; + enable-method = "psci"; + reg = <2>; + d-cache-size = <0x8000>; + d-cache-line-size = <64>; + d-cache-sets = <128>; + i-cache-size = <0x8000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + next-level-cache = <&l2>; + }; + + cpu@3 { + compatible = "arm,cortex-a35"; + device_type = "cpu"; + enable-method = "psci"; + reg = <3>; + d-cache-size = <0x8000>; + d-cache-line-size = <64>; + d-cache-sets = <128>; + i-cache-size = <0x8000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + next-level-cache = <&l2>; + }; + + l2: l2-cache0 { + compatible = "cache"; + cache-size = <0x80000>; + cache-unified; + cache-line-size = <64>; + cache-sets = <1024>; + cache-level = <2>; + }; + }; + + pmu { + compatible = "arm,cortex-a35-pmu"; + interrupt-parent = <&gic>; + interrupts = <GIC_PPI 7 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>; + }; + + psci { + compatible = "arm,psci-1.0"; + method = "smc"; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupt-parent = <&gic>; + interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>, + <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>, + <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>, + <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>; + arm,cpu-registers-not-fw-configured; + always-on; + }; + + soc0: soc@10000000 { + compatible = "simple-bus"; + reg = <0x0 0x10000000 0x0 0x10000000>; + #address-cells = <2>; + #size-cells = <2>; + ranges; + + gic: interrupt-controller@12200000 { + compatible = "arm,gic-v3"; + interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>; + #interrupt-cells = <3>; + interrupt-controller; + interrupt-parent = <&gic>; + reg = <0 0x12200000 0 0x10000>, /* GICD */ + <0 0x12280000 0 0x80000>, /* GICR */ + <0 0x40440000 0 0x1000>; /* GICC */ + #address-cells = <2>; + #size-cells = <2>; + }; + + syscon0: syscon@12c02000 { + compatible = "aspeed,ast2700-scu0", "syscon", "simple-mfd"; + reg = <0x0 0x12c02000 0x0 0x1000>; + ranges = <0x0 0x0 0 0x12c02000 0 0x1000>; + #address-cells = <2>; + #size-cells = <2>; + #clock-cells = <1>; + #reset-cells = <1>; + + silicon-id@0 { + compatible = "aspeed,ast2700-silicon-id", "aspeed,silicon-id"; + reg = <0 0x0 0 0x4>; + }; + + soc0_rst: reset-controller@200 { + reg = <0 0x200 0 0x40>; + }; + + soc0_clk: clock-controller@240 { + reg = <0 0x240 0 0x1c0>; + }; + }; + + uart4: serial@12c1a000 { + compatible = "ns16550a"; + reg = <0x0 0x12c1a000 0x0 0x1000>; + clocks = <&syscon0 SCU0_CLK_GATE_UART4CLK>; + interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>; + reg-shift = <2>; + reg-io-width = <4>; + no-loopback-test; + }; + }; + + soc1: soc@14000000 { + compatible = "simple-bus"; + reg = <0x0 0x14000000 0x0 0x10000000>; + #address-cells = <2>; + #size-cells = <2>; + ranges; + + syscon1: syscon@14c02000 { + compatible = "aspeed,ast2700-scu1", "syscon", "simple-mfd"; + reg = <0x0 0x14c02000 0x0 0x1000>; + ranges = <0x0 0x0 0x0 0x14c02000 0x0 0x1000>; + #address-cells = <2>; + #size-cells = <2>; + #clock-cells = <1>; + #reset-cells = <1>; + + soc1_rst: reset-controller@200 { + reg = <0 0x200 0 0x40>; + #reset-cells = <1>; + }; + + soc1_clk: clock-controller@240 { + reg = <0 0x240 0 0x1c0>; + }; + }; + }; +}; -- 2.34.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2 8/9] arm64: dts: aspeed: Add initial AST27XX device tree 2024-08-02 9:05 ` [PATCH v2 8/9] arm64: dts: aspeed: Add initial AST27XX device tree Kevin Chen @ 2024-08-02 9:12 ` Krzysztof Kozlowski 0 siblings, 0 replies; 28+ messages in thread From: Krzysztof Kozlowski @ 2024-08-02 9:12 UTC (permalink / raw) To: Kevin Chen, robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On 02/08/2024 11:05, Kevin Chen wrote: > Add aspeed-g7.dtsi to be AST27XX device tree. Hardware description is missing, e.g. answering why you have two "soc" nodes. > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> > + soc0: soc@10000000 { > + compatible = "simple-bus"; > + reg = <0x0 0x10000000 0x0 0x10000000>; > + #address-cells = <2>; > + #size-cells = <2>; > + ranges; > + > + gic: interrupt-controller@12200000 { > + compatible = "arm,gic-v3"; > + interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>; > + #interrupt-cells = <3>; > + interrupt-controller; > + interrupt-parent = <&gic>; > + reg = <0 0x12200000 0 0x10000>, /* GICD */ > + <0 0x12280000 0 0x80000>, /* GICR */ > + <0 0x40440000 0 0x1000>; /* GICC */ Still the same things to fix... Please go to the DTS coding style and read what is the order of properties. <form letter> This is a friendly reminder during the review process. It seems my or other reviewer's previous comments were not fully addressed. Maybe the feedback got lost between the quotes, maybe you just forgot to apply it. Please go back to the previous discussion and either implement all requested changes or keep discussing them. Thank you. </form letter> > + #address-cells = <2>; > + #size-cells = <2>; > + }; Best regards, Krzysztof ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 9/9] arm64: dts: aspeed: Add initial AST2700 EVB device tree 2024-08-02 9:05 [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC Kevin Chen ` (8 preceding siblings ...) 2024-08-02 9:05 ` [PATCH v2 8/9] arm64: dts: aspeed: Add initial AST27XX device tree Kevin Chen @ 2024-08-02 9:05 ` Kevin Chen 2024-08-02 9:17 ` Krzysztof Kozlowski 9 siblings, 1 reply; 28+ messages in thread From: Kevin Chen @ 2024-08-02 9:05 UTC (permalink / raw) To: robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, kevin_chen, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk Add EVB board of AST2700 in ASPEED G7 Architecture. Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> --- arch/arm64/boot/dts/aspeed/Makefile | 4 ++ arch/arm64/boot/dts/aspeed/ast2700-evb.dts | 58 ++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 arch/arm64/boot/dts/aspeed/Makefile create mode 100644 arch/arm64/boot/dts/aspeed/ast2700-evb.dts diff --git a/arch/arm64/boot/dts/aspeed/Makefile b/arch/arm64/boot/dts/aspeed/Makefile new file mode 100644 index 000000000000..ffe7e15017cc --- /dev/null +++ b/arch/arm64/boot/dts/aspeed/Makefile @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0 + +dtb-$(CONFIG_ARCH_ASPEED) += \ + ast2700-evb.dtb diff --git a/arch/arm64/boot/dts/aspeed/ast2700-evb.dts b/arch/arm64/boot/dts/aspeed/ast2700-evb.dts new file mode 100644 index 000000000000..09c9569c0f7b --- /dev/null +++ b/arch/arm64/boot/dts/aspeed/ast2700-evb.dts @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +/dts-v1/; + +#include "aspeed-g7.dtsi" +#include <dt-bindings/gpio/aspeed-gpio.h> + +/ { + model = "AST2700A1-EVB"; + compatible = "aspeed,ast2700-evb", "aspeed,ast2700"; + + aliases { + serial4 = &uart4; + }; + + chosen { + bootargs = "console=ttyS4,115200n8"; + stdout-path = &uart4; + }; + + firmware { + optee: optee { + compatible = "linaro,optee-tz"; + method = "smc"; + }; + }; + + memory@400000000 { + device_type = "memory"; + reg = <0x4 0x00000000 0x0 0x40000000>; + }; + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + mcu_fw: mcu-firmware@42fe00000 { + reg = <0x4 0x2fe00000 0x0 0x200000>; + no-map; + }; + + atf: trusted-firmware-a@430000000 { + reg = <0x4 0x30000000 0x0 0x80000>; + no-map; + }; + + optee_core: optee_core@430080000 { + reg = <0x4 0x30080000 0x0 0x1000000>; + no-map; + }; + }; +}; + +&uart4 { + status = "okay"; +}; + -- 2.34.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2 9/9] arm64: dts: aspeed: Add initial AST2700 EVB device tree 2024-08-02 9:05 ` [PATCH v2 9/9] arm64: dts: aspeed: Add initial AST2700 EVB " Kevin Chen @ 2024-08-02 9:17 ` Krzysztof Kozlowski 0 siblings, 0 replies; 28+ messages in thread From: Krzysztof Kozlowski @ 2024-08-02 9:17 UTC (permalink / raw) To: Kevin Chen, robh, krzk+dt, conor+dt, joel, andrew, lee, catalin.marinas, will, arnd, olof, soc, mturquette, sboyd, p.zabel, quic_bjorande, geert+renesas, dmitry.baryshkov, shawnguo, neil.armstrong, m.szyprowski, nfraprado, u-kumar1, devicetree, linux-arm-kernel, linux-aspeed, linux-kernel, linux-clk On 02/08/2024 11:05, Kevin Chen wrote: > Add EVB board of AST2700 in ASPEED G7 Architecture. > > Signed-off-by: Kevin Chen <kevin_chen@aspeedtech.com> > --- > arch/arm64/boot/dts/aspeed/Makefile | 4 ++ > arch/arm64/boot/dts/aspeed/ast2700-evb.dts | 58 ++++++++++++++++++++++ > 2 files changed, 62 insertions(+) > create mode 100644 arch/arm64/boot/dts/aspeed/Makefile > create mode 100644 arch/arm64/boot/dts/aspeed/ast2700-evb.dts > > diff --git a/arch/arm64/boot/dts/aspeed/Makefile b/arch/arm64/boot/dts/aspeed/Makefile > new file mode 100644 > index 000000000000..ffe7e15017cc > --- /dev/null > +++ b/arch/arm64/boot/dts/aspeed/Makefile > @@ -0,0 +1,4 @@ > +# SPDX-License-Identifier: GPL-2.0 > + > +dtb-$(CONFIG_ARCH_ASPEED) += \ > + ast2700-evb.dtb > diff --git a/arch/arm64/boot/dts/aspeed/ast2700-evb.dts b/arch/arm64/boot/dts/aspeed/ast2700-evb.dts > new file mode 100644 > index 000000000000..09c9569c0f7b > --- /dev/null > +++ b/arch/arm64/boot/dts/aspeed/ast2700-evb.dts > @@ -0,0 +1,58 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > + > +/dts-v1/; > + > +#include "aspeed-g7.dtsi" > +#include <dt-bindings/gpio/aspeed-gpio.h> > + > +/ { > + model = "AST2700A1-EVB"; > + compatible = "aspeed,ast2700-evb", "aspeed,ast2700"; > + > + aliases { > + serial4 = &uart4; > + }; > + > + chosen { > + bootargs = "console=ttyS4,115200n8"; > + stdout-path = &uart4; <form letter> This is a friendly reminder during the review process. It seems my or other reviewer's previous comments were not fully addressed. Maybe the feedback got lost between the quotes, maybe you just forgot to apply it. Please go back to the previous discussion and either implement all requested changes or keep discussing them. Thank you. </form letter> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2024-10-08 3:41 UTC | newest] Thread overview: 28+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-08-02 9:05 [PATCH v1 00/10] Introduce ASPEED AST27XX BMC SoC Kevin Chen 2024-08-02 9:05 ` [PATCH v2 0/9] " Kevin Chen 2024-08-02 9:18 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 1/9] dt-bindings: mfd: aspeed,ast2x00-scu: Add ASPEED AST2700-SCUX schema Kevin Chen 2024-08-02 9:13 ` Krzysztof Kozlowski 2024-08-02 10:29 ` Rob Herring (Arm) 2024-08-02 9:05 ` [PATCH v2 2/9] dt-bindings: reset: ast2700: Add ASPEED AST27xx Reset schema Kevin Chen 2024-08-02 9:15 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 3/9] dt-bindings: clk: ast2700: Add ASPEED AST27XX Clock schema Kevin Chen 2024-08-02 9:15 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 4/9] clk: ast2700: add clock controller Kevin Chen 2024-08-02 9:16 ` Krzysztof Kozlowski 2024-08-02 19:33 ` Dmitry Baryshkov 2024-10-08 3:10 ` Kevin Chen 2024-10-08 3:41 ` Ryan Chen 2024-08-02 9:05 ` [PATCH v2 5/9] dt-bindings: arm: aspeed: Add ASPEED AST27XX SoC Kevin Chen 2024-08-02 9:16 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 6/9] arm64: aspeed: Add support for ASPEED AST27XX BMC SoC Kevin Chen 2024-08-02 9:16 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 7/9] arm64: defconfig: Add ASPEED AST2700 family support Kevin Chen 2024-08-02 19:20 ` Dmitry Baryshkov 2024-08-02 19:25 ` Arnd Bergmann 2024-10-08 3:13 ` Kevin Chen 2024-10-08 3:11 ` Kevin Chen 2024-08-02 9:05 ` [PATCH v2 8/9] arm64: dts: aspeed: Add initial AST27XX device tree Kevin Chen 2024-08-02 9:12 ` Krzysztof Kozlowski 2024-08-02 9:05 ` [PATCH v2 9/9] arm64: dts: aspeed: Add initial AST2700 EVB " Kevin Chen 2024-08-02 9:17 ` Krzysztof Kozlowski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).