Add support for AST2700 clk driver
Ryan Chen
reviewerv2 cover Add support for AST2700 clk driver
This patch series is add clk driver for AST2700.
AST2700 is the 8th generation of Integrated Remote Management Processor introduced by ASPEED Technology Inc. Which is Board Management controller (BMC) SoC family. AST2700 have two SoC connected, one is SoC0, another is SoC1, it has it's own scu, this driver inlcude SCU0 and SCU1 driver.
v2:
-yaml: drop 64bits address example.
-yaml: add discription about soc0 and soc1
-dt-bindings: remove (), *_NUMS, reserved.
-dt-bindings: remove dulipated define number
-clk-ast2700: drop WARN_ON, weird comment.
Ryan Chen (3):
dt-bindings: reset Add AST2700 reset bindings
dt-bindings: clock: Add AST2700 clock bindings
clk: aspeed: add AST2700 clk driver
drivers/clk/Kconfig | 10 + drivers/clk/Makefile | 1 + drivers/clk/clk-ast2700.c | 1198 +++++++++++++++++ .../dt-bindings/clock/aspeed,ast2700-clk.h | 165 +++ .../dt-bindings/reset/aspeed,ast2700-reset.h | 125 ++ 5 files changed, 1499 insertions(+) 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
Signature · 1 line
2.34.1
Ryan Chen
reviewerPATCH v2 1/3 dt-bindings: reset Add AST2700 reset bindings
Add dt bindings for AST2700 reset driver.
--- .../dt-bindings/reset/aspeed,ast2700-reset.h | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 include/dt-bindings/reset/aspeed,ast2700-reset.h
include/dt-bindings/reset/aspeed,ast2700-reset.h new file +125 -0
@@ -0,0 +1,125 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ +/* +* Device Tree binding constants for AST2700 reset controller. +* +* Copyright (c) 2024 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_USB 38 +#define SCU0_RESET_PORTB_USB 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 + +/* 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 +#define SCU1_RESET_FSI 43 +#define SCU1_RESET_CAN 44 +#define SCU1_RESET_MCTP 45 +#define SCU1_RESET_I2C 46 +#define SCU1_RESET_UART6 47 +#define SCU1_RESET_UART7 48 +#define SCU1_RESET_UART8 49 +#define SCU1_RESET_UART9 50 +#define SCU1_RESET_LTPI0 51 +#define SCU1_RESET_VGAL 52 +#define SCU1_RESET_LTPI1 53 +#define SCU1_RESET_ACE 54 +#define SCU1_RESET_E2M 55 +#define SCU1_RESET_UHCI 56 +#define SCU1_RESET_PORTC_USB2UART 57 +#define SCU1_RESET_PORTC_USB 58 +#define SCU1_RESET_PORTD_USB2UART 69 +#define SCU1_RESET_PORTD_USB 70 +#define SCU1_RESET_H2X 71 +#define SCU1_RESET_I3CDMA 72 +#define SCU1_RESET_PCIE2RST 73 + +#endif /* _MACH_ASPEED_AST2700_RESET_H_ */
Signature · 1 line
2.34.1
Re: [PATCH v2 1/3] dt-bindings: reset Add AST2700 reset bindings
Quoted 7 lines · Ryan Chen
Add dt bindings for AST2700 reset driver.
Signed-off-by Ryan Chen <[email protected]>--- .../dt-bindings/reset/aspeed,ast2700-reset.h | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 include/dt-bindings/reset/aspeed,ast2700-reset.h
NAK.
You still did not respond to my previous comments and did not implement them.
Month ago I told you this is not a separate patch.
https://lore.kernel.org/all/e13c16db-e1a7-4ee0-867b-b184d421de7f at kernel.org/
Best regards,
Krzysztof
Ryan Chen
reviewerRE: [PATCH v2 1/3] dt-bindings: reset Add AST2700 reset bindings
Quoted 14 lines
Subject: Re: [PATCH v2 1/3] dt-bindings: reset Add AST2700 reset bindings
Quoted 8 lines · Ryan Chen
Add dt bindings for AST2700 reset driver.
Signed-off-by Ryan Chen <[email protected]>--- .../dt-bindings/reset/aspeed,ast2700-reset.h | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 include/dt-bindings/reset/aspeed,ast2700-reset.hNAK.
Quoted 8 lines
You still did not respond to my previous comments and did not implement them.
Month ago I told you this is not a separate patch.
https://lore.kernel.org/all/e13c16db-e1a7-4ee0-867b-b184d421de7f at kernel .org/
Sorry, I think your point is still two files, but it should be at 1 patch. am I right? If yes, I will put aspeed,ast2700-reset.h and aspeed,ast2700-clk.h to be 1 patch.
Quoted 2 lines
Best regards,
Krzysztof
Re: [PATCH v2 1/3] dt-bindings: reset Add AST2700 reset bindings
Quoted 17 lines · Ryan Chen
Quoted 17 lines
Subject: Re: [PATCH v2 1/3] dt-bindings: reset Add AST2700 reset bindings
Quoted 8 lines · Ryan Chen
Add dt bindings for AST2700 reset driver.
Signed-off-by Ryan Chen <[email protected]>--- .../dt-bindings/reset/aspeed,ast2700-reset.h | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 include/dt-bindings/reset/aspeed,ast2700-reset.hNAK.
You still did not respond to my previous comments and did not implement them.
Quoted 7 lines
Quoted 5 lines
Month ago I told you this is not a separate patch.
https://lore.kernel.org/all/e13c16db-e1a7-4ee0-867b-b184d421de7f at kernel .org/
Sorry, I think your point is still two files, but it should be at 1 patch. am I right? If yes, I will put aspeed,ast2700-reset.h and aspeed,ast2700-clk.h to be 1 patch.
Binding headers are part of bindings patch.
Best regards,
Krzysztof
Ryan Chen
reviewerPATCH v2 2/3 dt-bindings: clock: Add AST2700 clock bindings
In reply to Ryan ChenAdd dt bindings for AST2700 clock controller
--- .../dt-bindings/clock/aspeed,ast2700-clk.h | 165 ++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 include/dt-bindings/clock/aspeed,ast2700-clk.h
include/dt-bindings/clock/aspeed,ast2700-clk.h new file +165 -0
@@ -0,0 +1,165 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ +/* +* Device Tree binding constants for AST2700 clock controller. +* +* Copyright (c) 2024 Aspeed Technology Inc. +*/ + +#ifndef __DT_BINDINGS_CLOCK_AST2700_H +#define __DT_BINDINGS_CLOCK_AST2700_H + +/* SOC0 clk */ +#define SCU0_CLKIN 0 +#define SCU0_CLK_24M 1 +#define SCU0_CLK_192M 2 +#define SCU0_CLK_UART 3 +#define SCU0_CLK_PSP 4 +#define SCU0_CLK_HPLL 5 +#define SCU0_CLK_HPLL_DIV2 6 +#define SCU0_CLK_HPLL_DIV4 7 +#define SCU0_CLK_DPLL 8 +#define SCU0_CLK_MPLL 9 +#define SCU0_CLK_MPLL_DIV2 10 +#define SCU0_CLK_MPLL_DIV4 11 +#define SCU0_CLK_MPLL_DIV8 12 +#define SCU0_CLK_D0 13 +#define SCU0_CLK_D1 14 +#define SCU0_CLK_CRT0 15 +#define SCU0_CLK_CRT1 16 +#define SCU0_CLK_MPHY 17 +#define SCU0_CLK_AXI0 18 +#define SCU0_CLK_AXI1 19 +#define SCU0_CLK_AHB 20 +#define SCU0_CLK_APB 21 +#define SCU0_CLK_MCLK 22 +#define SCU0_CLK_ECLK 23 +#define SCU0_CLK_VCLK 24 +#define SCU0_CLK_BCLK 25 +#define SCU0_CLK_REF 26 +#define SCU0_CLK_UART4 27 +#define SCU0_CLK_SLI 28 +#define SCU0_CLK_UFS 29 +#define SCU0_CLK_EMMCMUX 30 +#define SCU0_CLK_EMMC 31 +#define SCU0_CLK_U2PHY_CLK12M 32 +#define SCU0_CLK_U2PHY_REFCLK 33 + +/* SOC0 clk-gate */ +#define SCU0_CLK_GATE_MCLK 34 +#define SCU0_CLK_GATE_ECLK 35 +#define SCU0_CLK_GATE_2DCLK 36 +#define SCU0_CLK_GATE_VCLK 37 +#define SCU0_CLK_GATE_BCLK 38 +#define SCU0_CLK_GATE_VGA0CLK 39 +#define SCU0_CLK_GATE_REFCLK 40 +#define SCU0_CLK_GATE_PORTBUSB2CLK 41 +#define SCU0_CLK_GATE_UHCICLK 42 +#define SCU0_CLK_GATE_VGA1CLK 43 +#define SCU0_CLK_GATE_DDRPHYCLK 44 +#define SCU0_CLK_GATE_E2M0CLK 45 +#define SCU0_CLK_GATE_HACCLK 46 +#define SCU0_CLK_GATE_PORTAUSB2CLK 47 +#define SCU0_CLK_GATE_UART4CLK 48 +#define SCU0_CLK_GATE_SLICLK 49 +#define SCU0_CLK_GATE_DACCLK 50 +#define SCU0_CLK_GATE_DP 51 +#define SCU0_CLK_GATE_E2M1CLK 52 +#define SCU0_CLK_GATE_CRT0CLK 53 +#define SCU0_CLK_GATE_CRT1CLK 54 +#define SCU0_CLK_GATE_VLCLK 55 +#define SCU0_CLK_GATE_ECDSACLK 56 +#define SCU0_CLK_GATE_RSACLK 57 +#define SCU0_CLK_GATE_RVAS0CLK 58 +#define SCU0_CLK_GATE_UFSCLK 59 +#define SCU0_CLK_GATE_EMMCCLK 60 +#define SCU0_CLK_GATE_RVAS1CLK 61 + +/* SOC1 clk */ +#define SCU1_CLKIN 0 +#define SCU1_CLK_HPLL 1 +#define SCU1_CLK_APLL 2 +#define SCU1_CLK_APLL_DIV2 3 +#define SCU1_CLK_APLL_DIV4 4 +#define SCU1_CLK_DPLL 5 +#define SCU1_CLK_UXCLK 6 +#define SCU1_CLK_HUXCLK 7 +#define SCU1_CLK_UARTX 8 +#define SCU1_CLK_HUARTX 9 +#define SCU1_CLK_AHB 10 +#define SCU1_CLK_APB 11 +#define SCU1_CLK_UART0 12 +#define SCU1_CLK_UART1 13 +#define SCU1_CLK_UART2 14 +#define SCU1_CLK_UART3 15 +#define SCU1_CLK_UART5 16 +#define SCU1_CLK_UART6 17 +#define SCU1_CLK_UART7 18 +#define SCU1_CLK_UART8 19 +#define SCU1_CLK_UART9 20 +#define SCU1_CLK_UART10 21 +#define SCU1_CLK_UART11 22 +#define SCU1_CLK_UART12 23 +#define SCU1_CLK_APLL_DIVN 24 +#define SCU1_CLK_SDMUX 25 +#define SCU1_CLK_SDCLK 26 +#define SCU1_CLK_RMII 27 +#define SCU1_CLK_RGMII 28 +#define SCU1_CLK_MACHCLK 29 +#define SCU1_CLK_MAC0RCLK 30 +#define SCU1_CLK_MAC1RCLK 31 + +/* SOC1 clk gate */ +#define SCU1_CLK_GATE_LCLK0 32 +#define SCU1_CLK_GATE_LCLK1 33 +#define SCU1_CLK_GATE_ESPI0CLK 34 +#define SCU1_CLK_GATE_ESPI1CLK 35 +#define SCU1_CLK_GATE_SDCLK 36 +#define SCU1_CLK_GATE_IPEREFCLK 37 +#define SCU1_CLK_GATE_RSV5CLK 38 +#define SCU1_CLK_GATE_LPCHCLK 39 +#define SCU1_CLK_GATE_MAC0CLK 40 +#define SCU1_CLK_GATE_MAC1CLK 41 +#define SCU1_CLK_GATE_MAC2CLK 42 +#define SCU1_CLK_GATE_UART0CLK 43 +#define SCU1_CLK_GATE_UART1CLK 44 +#define SCU1_CLK_GATE_UART2CLK 45 +#define SCU1_CLK_GATE_UART3CLK 46 +#define SCU1_CLK_GATE_I2CCLK 47 +#define SCU1_CLK_GATE_I3C0CLK 48 +#define SCU1_CLK_GATE_I3C1CLK 49 +#define SCU1_CLK_GATE_I3C2CLK 50 +#define SCU1_CLK_GATE_I3C3CLK 51 +#define SCU1_CLK_GATE_I3C4CLK 52 +#define SCU1_CLK_GATE_I3C5CLK 53 +#define SCU1_CLK_GATE_I3C6CLK 54 +#define SCU1_CLK_GATE_I3C7CLK 55 +#define SCU1_CLK_GATE_I3C8CLK 56 +#define SCU1_CLK_GATE_I3C9CLK 57 +#define SCU1_CLK_GATE_I3C10CLK 58 +#define SCU1_CLK_GATE_I3C11CLK 59 +#define SCU1_CLK_GATE_I3C12CLK 60 +#define SCU1_CLK_GATE_I3C13CLK 61 +#define SCU1_CLK_GATE_I3C14CLK 62 +#define SCU1_CLK_GATE_I3C15CLK 63 +#define SCU1_CLK_GATE_UART5CLK 64 +#define SCU1_CLK_GATE_UART6CLK 65 +#define SCU1_CLK_GATE_UART7CLK 66 +#define SCU1_CLK_GATE_UART8CLK 67 +#define SCU1_CLK_GATE_UART9CLK 68 +#define SCU1_CLK_GATE_UART10CLK 69 +#define SCU1_CLK_GATE_UART11CLK 70 +#define SCU1_CLK_GATE_UART12CLK 71 +#define SCU1_CLK_GATE_FSICLK 72 +#define SCU1_CLK_GATE_LTPIPHYCLK 73 +#define SCU1_CLK_GATE_LTPICLK 74 +#define SCU1_CLK_GATE_VGALCLK 75 +#define SCU1_CLK_GATE_USBUARTCLK 76 +#define SCU1_CLK_GATE_CANCLK 77 +#define SCU1_CLK_GATE_PCICLK 78 +#define SCU1_CLK_GATE_SLICLK 79 +#define SCU1_CLK_GATE_E2MCLK 80 +#define SCU1_CLK_GATE_PORTCUSB2CLK 81 +#define SCU1_CLK_GATE_PORTDUSB2CLK 82 +#define SCU1_CLK_GATE_LTPI1TXCLK 83 + +#endif
Signature · 1 line
2.34.1
Re: [PATCH v2 2/3] dt-bindings: clock: Add AST2700 clock bindings
Quoted 4 lines · Ryan Chen
Add dt bindings for AST2700 clock controller
Signed-off-by Ryan Chen <[email protected]>---
Read previous comments. This is not a separate patch.
Best regards,
Krzysztof
Ryan Chen
reviewerPATCH v2 3/3 clk: aspeed: add AST2700 clk driver
In reply to Ryan ChenAdd AST2700 clock controller driver. This driver also selects MFD_SYSCON, which provides access to system controller registers, and register the reset controller.
--- drivers/clk/Kconfig | 10 + drivers/clk/Makefile | 1 + drivers/clk/clk-ast2700.c | 1198 +++++++++++++++++++++++++++++++++++++ 3 files changed, 1209 insertions(+) create mode 100644 drivers/clk/clk-ast2700.c
drivers/clk/Kconfig +10 -0
@@ -269,6 +269,16 @@ config COMMON_CLK_ASPEED The G4 and G5 series, including the ast2400 and ast2500, are supported by this driver. +config COMMON_CLK_AST2700 + bool "Clock driver for AST2700 SoC" + depends on ARCH_ASPEED || COMPILE_TEST + select MFD_SYSCON + select RESET_CONTROLLER + help + This driver provides support for clock on AST2700 SoC. + This driver is responsible for managing the various clocks required + by the peripherals and cores within the AST2700. + config COMMON_CLK_S2MPS11 tristate "Clock driver for S2MPS1X/S5M8767 MFD" depends on MFD_SEC_CORE || COMPILE_TEST
drivers/clk/Makefile +1 -0
@@ -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_COMMON_CLK_AST2700) += 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
drivers/clk/clk-ast2700.c new file +1198 -0
1,198 lines not on this page · raw message
Signature · 1 line
2.34.1
Re: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoted 14 lines · Ryan Chen
Add AST2700 clock controller driver. This driver also selects
MFD_SYSCON, which provides access to system controller registers, and register the reset controller.Signed-off-by Ryan Chen <[email protected]>drivers/clk/clk-ast2700.c new file +7
-0+ 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,
drivers/clk/clk-ast2700.c line 1198
Quoted 10 lines
drivers/clk/clk-ast2700.c new file +10
-0+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);
Nope, this is not documented.
You cannot add new compatibles without bindings.
Best regards,
Krzysztof
Ryan Chen
reviewerRE: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoted 31 lines
Subject: Re: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoted 15 lines · Ryan Chen
Add AST2700 clock controller driver. This driver also selects
MFD_SYSCON, which provides access to system controller registers, and register the reset controller.Signed-off-by Ryan Chen <[email protected]>drivers/clk/clk-ast2700.c new file +8
-0+ 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,drivers/clk/clk-ast2700.c
Quoted 10 lines
drivers/clk/clk-ast2700.c new file +10
-0+ 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);Nope, this is not documented.
Quoted 2 lines
You cannot add new compatibles without bindings.
Sorry, I miss yaml file patch. will send it in next version.
Quoted 2 lines
Best regards,
Krzysztof
Stephen Boyd
maintainerRe: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
In reply to Ryan ChenQuoting Ryan Chen (2024-08-27 23:27:40)
drivers/clk/Kconfig config COMMON_CLK_ASPEED · line 275
Quoted 12 lines
drivers/clk/Kconfig +4
-0@@ -269,6 +269,16 @@ config COMMON_CLK_ASPEED The G4 and G5 series, including the ast2400 and ast2500, are supported by this driver. +config COMMON_CLK_AST2700 + bool "Clock driver for AST2700 SoC" + depends on ARCH_ASPEED || COMPILE_TEST + select MFD_SYSCON
Why is this a syscon?
Quoted 23 lines
drivers/clk/Kconfig +6
-0+ select RESET_CONTROLLER + help + This driver provides support for clock on AST2700 SoC. + This driver is responsible for managing the various clocks required + by the peripherals and cores within the AST2700. + config COMMON_CLK_S2MPS11 tristate "Clock driver for S2MPS1X/S5M8767 MFD" depends on MFD_SEC_CORE || COMPILE_TESTdrivers/clk/clk-ast2700.c new file +8
-0@@ -0,0 +1,1198 @@ +// SPDX-License-Identifier: GPL-2.0 +/* +* Copyright (c) 2024 ASPEED Technology Inc. +* Author: Ryan Chen <[email protected]> +*/ + +#include <linux/bits.h> +#include <linux/clk-provider.h>
[...]
drivers/clk/clk-ast2700.c line 409
Quoted 6 lines
drivers/clk/clk-ast2700.c new file +6
-0+ +struct ast2700_reset { +void __iomem *base; +struct ast2700_reset_signal const *signal; +struct reset_controller_dev rcdev; +};
Please move the reset controller to the drivers/reset directory by means of using an auxiliary device. There are some existing examples in there if you grep for auxiliary_device in drivers/reset to help guide.
Quoted 3 lines
drivers/clk/clk-ast2700.c new file +3
-0+ +#define to_rc_data (p) container_of(p, struct ast2700_reset, rcdev) +
[...]
Quoted 5 lines
drivers/clk/clk-ast2700.c new file +5
-0+ +static int ast2700_soc0_clk_init (struct device_node *soc0_node) +{ +struct clk_hw_onecell_data *clk_data; +void __iomem *clk_base;
[...]
drivers/clk/clk-ast2700.c line 1198
Quoted 10 lines
drivers/clk/clk-ast2700.c new file +10
-0+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);
Why can't this be a platform driver?
Ryan Chen
reviewerRE: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoted 10 lines
Subject: Re: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoting Ryan Chen (2024-08-27 23:27:40)
drivers/clk/Kconfig config COMMON_CLK_ASPEED · line 269
Quoted 6 lines
drivers/clk/Kconfig index renamed from drivers/clk/Kconfig +0
-0
983ef4f36d8c..855b65f2d6dd100644drivers/clk/Kconfig +0
-0@@ -269,6 +269,16 @@ config COMMON_CLK_ASPEED The G4 and G5 series, including the ast2400 and ast2500, aresupported
Quoted 8 lines
drivers/clk/Kconfig config COMMON_CLK_ASPEED · line 275
Quoted 6 lines
drivers/clk/Kconfig +4
-0by this driver. +config COMMON_CLK_AST2700 + bool "Clock driver for AST2700 SoC" + depends on ARCH_ASPEED || COMPILE_TEST + select MFD_SYSCONWhy is this a syscon?
I will remove it.
Quoted 24 lines
drivers/clk/Kconfig config COMMON_CLK_ASPEED
Quoted 5 lines
drivers/clk/Kconfig +4
-0+ select RESET_CONTROLLER + help + This driver provides support for clock on AST2700 SoC. + This driver is responsible for managing the various clocksrequired
Quoted 17 lines
drivers/clk/Kconfig +2
-0+ by the peripherals and cores within the AST2700. + config COMMON_CLK_S2MPS11 tristate "Clock driver for S2MPS1X/S5M8767 MFD" depends on MFD_SEC_CORE || COMPILE_TEST diff --git
a/drivers/clk/clk-ast2700.cb/drivers/clk/clk-ast2700.cnew file mode 100644 index 000000000000..7e0466e73980drivers/clk/clk-ast2700.c new file +7
-0@@ -0,0 +1,1198 @@ +// SPDX-License-Identifier: GPL-2.0 +/* +* Copyright (c) 2024 ASPEED Technology Inc. +* Author: Ryan Chen <[email protected]> */ + +#include <linux/bits.h> +#include <linux/clk-provider.h> [...]
Quoted 9 lines
drivers/clk/clk-ast2700.c
Quoted 5 lines
drivers/clk/clk-ast2700.c new file +5
-0+ +struct ast2700_reset { +void __iomem *base; +struct ast2700_reset_signal const *signal; +struct reset_controller_dev rcdev; };Please move the reset controller to the
drivers/resetdirectory by means of using an auxiliary device. There are some existing examples in there if you grep forauxiliary_deviceindrivers/resetto help guide.
Do you mean to have another reset controller driver? If yes, I may need syscon for remap two drivers.
Quoted 12 lines
Quoted 4 lines
drivers/clk/clk-ast2700.c new file +3
-0+ +#define to_rc_data (p) container_of(p, struct ast2700_reset, rcdev) +[...]
Quoted 4 lines
drivers/clk/clk-ast2700.c new file +4
-0+ +static int ast2700_soc0_clk_init (struct device_node *soc0_node) { +struct clk_hw_onecell_data *clk_data; +void __iomem *clk_base;[...]
Quoted 1 line
+ 0,
clk_base+
SCU0_CLK_STOP,
Quoted 14 lines
drivers/clk/clk-ast2700.c
Quoted 12 lines
drivers/clk/clk-ast2700.c new file +12
-0+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);Why can't this be a platform driver?
Due to clk and reset will be the first driver in core. Do you think all drivers should be platform driver?
Stephen Boyd
maintainerRE: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoting Ryan Chen (2024-08-29 00:09:12)
Quoted 26 lines
Quoted 16 lines
Subject: Re: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoting Ryan Chen (2024-08-27 23:27:40)
Quoted 12 lines
a/drivers/clk/clk-ast2700.cb/drivers/clk/clk-ast2700.cnew file mode 100644 index 000000000000..7e0466e73980drivers/clk/clk-ast2700.c new file +7
-0@@ -0,0 +1,1198 @@ +// SPDX-License-Identifier: GPL-2.0 +/* +* Copyright (c) 2024 ASPEED Technology Inc. +* Author: Ryan Chen <[email protected]> */ + +#include <linux/bits.h> +#include <linux/clk-provider.h> [...]
Quoted 9 lines
drivers/clk/clk-ast2700.c
Quoted 5 lines
drivers/clk/clk-ast2700.c new file +5
-0+ +struct ast2700_reset { +void __iomem *base; +struct ast2700_reset_signal const *signal; +struct reset_controller_dev rcdev; };Please move the reset controller to the
drivers/resetdirectory by means of using an auxiliary device. There are some existing examples in there if you grep forauxiliary_deviceindrivers/resetto help guide.
Quoted 2 lines
Do you mean to have another reset controller driver? If yes, I may need syscon for remap two drivers.
Yes. A syscon is not necessary to do that.
Quoted 26 lines
Quoted 12 lines
Quoted 4 lines
drivers/clk/clk-ast2700.c new file +3
-0+ +#define to_rc_data (p) container_of(p, struct ast2700_reset, rcdev) +[...]
Quoted 4 lines
drivers/clk/clk-ast2700.c new file +4
-0+ +static int ast2700_soc0_clk_init (struct device_node *soc0_node) { +struct clk_hw_onecell_data *clk_data; +void __iomem *clk_base;[...]
Quoted 1 line
+ 0,
clk_base+
SCU0_CLK_STOP,Quoted 14 lines
drivers/clk/clk-ast2700.c
Quoted 12 lines
drivers/clk/clk-ast2700.c new file +12
-0+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);Why can't this be a platform driver?
Quoted 2 lines
Due to clk and reset will be the first driver in core. Do you think all drivers should be platform driver?
Yes all drivers should be a platform driver.
Ryan Chen
reviewerRE: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoted 30 lines
Subject: RE: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoting Ryan Chen (2024-08-29 00:09:12)
Quoted 27 lines
Quoted 26 lines
Subject: Re: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoting Ryan Chen (2024-08-27 23:27:40)
Quoted 13 lines
a/drivers/clk/clk-ast2700.cb/drivers/clk/clk-ast2700.cnew file mode
100644 index 000000000000..7e0466e73980drivers/clk/clk-ast2700.c new file +7
-0@@ -0,0 +1,1198 @@ +// SPDX-License-Identifier: GPL-2.0 +/* +* Copyright (c) 2024 ASPEED Technology Inc. +* Author: Ryan Chen <[email protected]> */ + +#include <linux/bits.h> +#include <linux/clk-provider.h> [...]
drivers/clk/clk-ast2700.c
Quoted 5 lines
drivers/clk/clk-ast2700.c new file +5
-0+ +struct ast2700_reset { +void __iomem *base; +struct ast2700_reset_signal const *signal; +struct reset_controller_dev rcdev; };Please move the reset controller to the
drivers/resetdirectory by means of using an auxiliary device. There are some existing examples in there if you grep forauxiliary_deviceindrivers/resetto help guide.
Quoted 4 lines
Quoted 2 lines
Do you mean to have another reset controller driver? If yes, I may need syscon for remap two drivers.
Yes. A syscon is not necessary to do that.
Thanks for point out auxiliary device.
Since our SoC reset and clock share the same register region. Your recommend will use clk auxiliary_device_add for reset driver am I right?
Quoted 32 lines
Quoted 28 lines
Quoted 14 lines
Quoted 6 lines
drivers/clk/clk-ast2700.c new file +4
-0+ +#define to_rc_data (p) container_of(p, struct ast2700_reset, +rcdev) +[...]
Quoted 4 lines
drivers/clk/clk-ast2700.c new file +4
-0+ +static int ast2700_soc0_clk_init (struct device_node *soc0_node) { +struct clk_hw_onecell_data *clk_data; +void __iomem *clk_base;[...]
Quoted 1 line
+ 0,
clk_base+
SCU0_CLK_STOP,Quoted 14 lines
drivers/clk/clk-ast2700.c
Quoted 12 lines
drivers/clk/clk-ast2700.c new file +12
-0+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);Why can't this be a platform driver?
Quoted 2 lines
Due to clk and reset will be the first driver in core. Do you think all drivers should be platform driver?
Yes all drivers should be a platform driver.
Stephen Boyd
maintainerRE: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoting Ryan Chen (2024-08-30 00:50:21)
Quoted 30 lines
Quoted 30 lines
Subject: RE: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoting Ryan Chen (2024-08-29 00:09:12)
Quoted 27 lines
Quoted 26 lines
Subject: Re: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
Quoting Ryan Chen (2024-08-27 23:27:40)
Quoted 13 lines
a/drivers/clk/clk-ast2700.cb/drivers/clk/clk-ast2700.cnew file mode
100644 index 000000000000..7e0466e73980drivers/clk/clk-ast2700.c new file +7
-0@@ -0,0 +1,1198 @@ +// SPDX-License-Identifier: GPL-2.0 +/* +* Copyright (c) 2024 ASPEED Technology Inc. +* Author: Ryan Chen <[email protected]> */ + +#include <linux/bits.h> +#include <linux/clk-provider.h> [...]
drivers/clk/clk-ast2700.c
Quoted 5 lines
drivers/clk/clk-ast2700.c new file +5
-0+ +struct ast2700_reset { +void __iomem *base; +struct ast2700_reset_signal const *signal; +struct reset_controller_dev rcdev; };Please move the reset controller to the
drivers/resetdirectory by means of using an auxiliary device. There are some existing examples in there if you grep forauxiliary_deviceindrivers/resetto help guide.
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
Do you mean to have another reset controller driver? If yes, I may need syscon for remap two drivers.
Yes. A syscon is not necessary to do that.
Thanks for point out auxiliary device.
Since our SoC reset and clock share the same register region. Your recommend will use clkauxiliary_device_addfor reset driver am I right?
Yes. Either the clk or the reset driver can be a platform driver and the other an auxiliary driver.
kernel test robot
build botRe: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver
In reply to Ryan Chenkernel test robot noticed the following build warnings:
Hi Ryan,
kernel test robot noticed the following build warnings:
[auto build test WARNING on clk/clk-next]
[also build test WARNING on linus/master v6.11-rc5 next-20240828] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Ryan-Chen/dt-bindings-reset-Add-AST2700-reset-bindings/20240828-143005 base: https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next patch link: https://lore.kernel.org/r/20240828062740.1614744-4-ryan_chen%40aspeedtech.com patch subject: [PATCH v2 3/3] clk: aspeed: add AST2700 clk driver config: microblaze-randconfig-r111-20240829 (https://download.01.org/0day-ci/archive/20240829/202408290836.KrEafUdK-lkp at intel.com/config) compiler: microblaze-linux-gcc (GCC) 14.1.0 reproduce: (https://download.01.org/0day-ci/archive/20240829/202408290836.KrEafUdK-lkp at intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/202408290836.KrEafUdK-lkp at intel.com/
sparse warnings: (new ones prefixed by >>)
drivers/clk/clk-ast2700.c: note: in included file (through include/linux/mmzone.h, include/linux/gfp.h, include/linux/xarray.h, ...):
include/linux/page-flags.h:235:46: sparse: sparse: self-comparison always evaluates to false include/linux/page-flags.h:235:46: sparse: sparse: self-comparison always evaluates to false
>> drivers/clk/clk-ast2700.c:100:10: sparse: sparse: Initializer entry defined twice
drivers/clk/clk-ast2700.c:107:10: sparse: also defined here
vim +100 drivers/clk/clk-ast2700.c
66
67 static const struct ast2700_reset_signal ast2700_reset0_signals[] = {
68 [SCU0_RESET_SDRAM] = { 1, SCU0_RESET_CTRL1, BIT(0) },
69 [SCU0_RESET_DDRPHY] = { 1, SCU0_RESET_CTRL1, BIT(1) },
70 [SCU0_RESET_RSA] = { 1, SCU0_RESET_CTRL1, BIT(2) },
71 [SCU0_RESET_SHA3] = { 1, SCU0_RESET_CTRL1, BIT(3) },
72 [SCU0_RESET_HACE] = { 1, SCU0_RESET_CTRL1, BIT(4) },
73 [SCU0_RESET_SOC] = { 1, SCU0_RESET_CTRL1, BIT(5) },
74 [SCU0_RESET_VIDEO] = { 1, SCU0_RESET_CTRL1, BIT(6) },
75 [SCU0_RESET_2D] = { 1, SCU0_RESET_CTRL1, BIT(7) },
76 [SCU0_RESET_PCIS] = { 1, SCU0_RESET_CTRL1, BIT(8) },
77 [SCU0_RESET_RVAS0] = { 1, SCU0_RESET_CTRL1, BIT(9) },
78 [SCU0_RESET_RVAS1] = { 1, SCU0_RESET_CTRL1, BIT(10) },
79 [SCU0_RESET_SM3] = { 1, SCU0_RESET_CTRL1, BIT(11) },
80 [SCU0_RESET_SM4] = { 1, SCU0_RESET_CTRL1, BIT(12) },
81 [SCU0_RESET_CRT0] = { 1, SCU0_RESET_CTRL1, BIT(13) },
82 [SCU0_RESET_ECC] = { 1, SCU0_RESET_CTRL1, BIT(14) },
83 [SCU0_RESET_DP_PCI] = { 1, SCU0_RESET_CTRL1, BIT(15) },
84 [SCU0_RESET_UFS] = { 1, SCU0_RESET_CTRL1, BIT(16) },
85 [SCU0_RESET_EMMC] = { 1, SCU0_RESET_CTRL1, BIT(17) },
86 [SCU0_RESET_PCIE1RST] = { 1, SCU0_RESET_CTRL1, BIT(18) },
87 [SCU0_RESET_PCIE1RSTOE] = { 1, SCU0_RESET_CTRL1, BIT(19) },
88 [SCU0_RESET_PCIE0RST] = { 1, SCU0_RESET_CTRL1, BIT(20) },
89 [SCU0_RESET_PCIE0RSTOE] = { 1, SCU0_RESET_CTRL1, BIT(21) },
90 [SCU0_RESET_JTAG] = { 1, SCU0_RESET_CTRL1, BIT(22) },
91 [SCU0_RESET_MCTP0] = { 1, SCU0_RESET_CTRL1, BIT(23) },
92 [SCU0_RESET_MCTP1] = { 1, SCU0_RESET_CTRL1, BIT(24) },
93 [SCU0_RESET_XDMA0] = { 1, SCU0_RESET_CTRL1, BIT(25) },
94 [SCU0_RESET_XDMA1] = { 1, SCU0_RESET_CTRL1, BIT(26) },
95 [SCU0_RESET_H2X1] = { 1, SCU0_RESET_CTRL1, BIT(27) },
96 [SCU0_RESET_DP] = { 1, SCU0_RESET_CTRL1, BIT(28) },
97 [SCU0_RESET_DP_MCU] = { 1, SCU0_RESET_CTRL1, BIT(29) },
98 [SCU0_RESET_SSP] = { 1, SCU0_RESET_CTRL1, BIT(30) },
99 [SCU0_RESET_H2X0] = { 1, SCU0_RESET_CTRL1, BIT(31) },
> 100 [SCU0_RESET_PORTA_USB] = { 1, SCU0_RESET_CTRL2, BIT(0) }, 101 [SCU0_RESET_PORTA_PHY3] = { 1, SCU0_RESET_CTRL2, BIT(1) },
102 [SCU0_RESET_PORTA_XHCI] = { 1, SCU0_RESET_CTRL2, BIT(2) },
103 [SCU0_RESET_PORTB_VHUB1] = { 1, SCU0_RESET_CTRL2, BIT(3) },
104 [SCU0_RESET_PORTB_PHY3] = { 1, SCU0_RESET_CTRL2, BIT(4) },
105 [SCU0_RESET_PORTB_XHCI] = { 1, SCU0_RESET_CTRL2, BIT(5) },
106 /*PORTA EHCI/VHUB share reset */
107 [SCU0_RESET_PORTA_USB] = { 1, SCU0_RESET_CTRL2, BIT(6) },
108 /*PORTB EHCI/VHUB share reset */
109 [SCU0_RESET_PORTB_USB] = { 1, SCU0_RESET_CTRL2, BIT(7) },
110 [SCU0_RESET_UHCI] = { 1, SCU0_RESET_CTRL2, BIT(8) },
111 [SCU0_RESET_TSP] = { 1, SCU0_RESET_CTRL2, BIT(9) },
112 [SCU0_RESET_E2M0] = { 1, SCU0_RESET_CTRL2, BIT(10) },
113 [SCU0_RESET_E2M1] = { 1, SCU0_RESET_CTRL2, BIT(11) },
114 [SCU0_RESET_VLINK] = { 1, SCU0_RESET_CTRL2, BIT(12) },
115 };
116
Signature · 2 lines
0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
Review
Quoted 10 lines · Ryan Chen
This patch series is add clk driver for AST2700.
AST2700 is the 8th generation of Integrated Remote Management Processor introduced by ASPEED Technology Inc. Which is Board Management controller (BMC) SoC family. AST2700 have two SoC connected, one is SoC0, another is SoC1, it has it's own scu, this driver inlcude SCU0 and SCU1 driver.
v2:
(quoted diff) +0
-2-yaml: drop 64bits address example. -yaml: add discription about soc0 and soc1
Where?
Proof read your patches before sending.
Best regards,
Krzysztof
Review
Quoted 13 lines · Ryan Chen
This patch series is add clk driver for AST2700.
AST2700 is the 8th generation of Integrated Remote Management Processor introduced by ASPEED Technology Inc. Which is Board Management controller (BMC) SoC family. AST2700 have two SoC connected, one is SoC0, another is SoC1, it has it's own scu, this driver inlcude SCU0 and SCU1 driver.
v2:
(quoted diff) +0
-5-yaml: drop 64bits address example. -yaml: add discription about soc0 and soc1 -dt-bindings: remove (), *_NUMS, reserved. -dt-bindings: remove dulipated define number -clk-ast2700: drop WARN_ON, weird comment.
As LKP pointed out, this fails on certain static tests. It is expected that new drvier will pass the open/free static analysis tools we use in the kernel.
Please run standard kernel tools for static analysis, like coccinelle, smatch and sparse, and fix reported warnings. Also please check for warnings when building with W=1. Most of these commands (checks or W=1 build) can build specific targets, like some directory, to narrow the scope to only your code. The code here looks like it needs a fix. Feel free to get in touch if the warning is not clear.
Best regards,
Krzysztof