* [PATCH v2 0/8] Introduce HDP support for STM32MP platforms @ 2025-05-20 15:02 Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP Clément Le Goffic ` (8 more replies) 0 siblings, 9 replies; 18+ messages in thread From: Clément Le Goffic @ 2025-05-20 15:02 UTC (permalink / raw) To: Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski Cc: linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel, Clément Le Goffic This patch series introduces the Hardware Debug Port (HDP) support for STM32MP platforms. It includes the addition of device tree bindings, the HDP driver, and updates to the device tree files for STM32MP13, STM32MP15, and STM32MP25 SoCs. The series also updates the MAINTAINERS file to include myself as the maintainer for the STM32 HDP driver and adds the necessary pinmux configurations for HDP pins on STM32MP157C-DK2 as example. Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> --- Changes in v2: - Remove bindings header files with function name as #define - Add match_data with function name for three compatible: "st,stm32mp131-hdp", "st,stm32mp151-hdp" and "st,stm32mp251-hdp". - Rework a bit the driver to use match_data. - Remove the use of `dev_err_probe(` in the resume ops. - Remove `MODULE_ALIAS(`. - Remove the vertical bar in bindings description paragraph. - Fix an error in the `pinctrl-0` parameter of the binding example, it was refering a node that wasn't existing. - Use uppercase pin names. - Link to v1: https://lore.kernel.org/r/20250225-hdp-upstream-v1-0-9d049c65330a@foss.st.com --- Clément Le Goffic (8): dt-bindings: pinctrl: stm32: Introduce HDP pinctrl: stm32: Introduce HDP driver MAINTAINERS: Add Clément Le Goffic as STM32 HDP maintainer ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp13 ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp15 ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp25 ARM: dts: stm32: add alternate pinmux for HDP pin and add HDP pinctrl node ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp157c-dk2 board .../bindings/pinctrl/st,stm32-pinctrl-hdp.yaml | 188 ++++++ MAINTAINERS | 6 + arch/arm/boot/dts/st/stm32mp131.dtsi | 6 + arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi | 25 + arch/arm/boot/dts/st/stm32mp151.dtsi | 7 + arch/arm/boot/dts/st/stm32mp157c-dk2.dts | 6 + arch/arm64/boot/dts/st/stm32mp251.dtsi | 7 + drivers/pinctrl/stm32/Kconfig | 14 + drivers/pinctrl/stm32/Makefile | 1 + drivers/pinctrl/stm32/pinctrl-stm32-hdp.c | 736 +++++++++++++++++++++ 10 files changed, 996 insertions(+) --- base-commit: 09fac5c576bbff764dddf2baca0038b359376fd8 change-id: 20250224-hdp-upstream-622e5da14a9f Best regards, -- Clément Le Goffic <clement.legoffic@foss.st.com> ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP 2025-05-20 15:02 [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Clément Le Goffic @ 2025-05-20 15:02 ` Clément Le Goffic 2025-05-20 19:25 ` Rob Herring (Arm) ` (2 more replies) 2025-05-20 15:02 ` [PATCH v2 2/8] pinctrl: stm32: Introduce HDP driver Clément Le Goffic ` (7 subsequent siblings) 8 siblings, 3 replies; 18+ messages in thread From: Clément Le Goffic @ 2025-05-20 15:02 UTC (permalink / raw) To: Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski Cc: linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel, Clément Le Goffic 'HDP' stands for Hardware Debug Port, it is an hardware block in STMicrolectronics' MPUs that let the user decide which internal SoC's signal to observe. It provides 8 ports and for each port there is up to 16 different signals that can be output. Signals are different for each MPU. Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> --- .../bindings/pinctrl/st,stm32-pinctrl-hdp.yaml | 188 +++++++++++++++++++++ 1 file changed, 188 insertions(+) diff --git a/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml new file mode 100644 index 000000000000..6251e9c16ced --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml @@ -0,0 +1,188 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) STMicroelectronics 2025. +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl-hdp.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: STM32 Hardware Debug Port Mux/Config + +maintainers: + - Clément LE GOFFIC <clement.legoffic@foss.st.com> + +description: + STMicroelectronics's STM32 MPUs integrate a Hardware Debug Port (HDP). + It allows to output internal signals on SoC's GPIO. + +properties: + compatible: + enum: + - st,stm32mp131-hdp + - st,stm32mp151-hdp + - st,stm32mp251-hdp + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + +patternProperties: + "^hdp[0-7]-pins$": + type: object + $ref: pinmux-node.yaml# + additionalProperties: false + + properties: + pins: + enum: [ HDP0, HDP1, HDP2, HDP3, HDP4, HDP5, HDP6, HDP7 ] + + function: + maxItems: 1 + + required: + - function + - pins + +allOf: + - $ref: pinctrl.yaml# + - if: + properties: + compatible: + contains: + const: st,stm32mp131-hdp + then: + patternProperties: + "^hdp[0-7]-pins$": + properties: + function: + enum: [ pwr_pwrwake_sys, pwr_stop_forbidden, pwr_stdby_wakeup, pwr_encomp_vddcore, + bsec_out_sec_niden, aiec_sys_wakeup, none, ddrctrl_lp_req, + pwr_ddr_ret_enable_n, dts_clk_ptat, sram3ctrl_tamp_erase_act, gpoval0, + pwr_sel_vth_vddcpu, pwr_mpu_ram_lowspeed, ca7_naxierrirq, pwr_okin_mr, + bsec_out_sec_dbgen, aiec_c1_wakeup, rcc_pwrds_mpu, ddrctrl_dfi_ctrlupd_req, + ddrctrl_cactive_ddrc_asr, sram3ctrl_hw_erase_act, nic400_s0_bready, gpoval1, + pwr_pwrwake_mpu, pwr_mpu_clock_disable_ack, ca7_ndbgreset_i, + bsec_in_rstcore_n, bsec_out_sec_bsc_dis, ddrctrl_dfi_init_complete, + ddrctrl_perf_op_is_refresh, ddrctrl_gskp_dfi_lp_req, sram3ctrl_sw_erase_act, + nic400_s0_bvalid, gpoval2, pwr_sel_vth_vddcore, pwr_mpu_clock_disable_req, + ca7_npmuirq0, ca7_nfiqout0, bsec_out_sec_dftlock, bsec_out_sec_jtag_dis, + rcc_pwrds_sys, sram3ctrl_tamp_erase_req, ddrctrl_stat_ddrc_reg_selfref_type0, + dts_valobus1_0, dts_valobus2_0, tamp_potential_tamp_erfcfg, nic400_s0_wready, + nic400_s0_rready, gpoval3, pwr_stop2_active, ca7_nl2reset_i, + ca7_npreset_varm_i, bsec_out_sec_dften, bsec_out_sec_dbgswenable, + eth1_out_pmt_intr_o, eth2_out_pmt_intr_o, ddrctrl_stat_ddrc_reg_selfref_type1, + ddrctrl_cactive_0, dts_valobus1_1, dts_valobus2_1, tamp_nreset_sram_ercfg, + nic400_s0_wlast, nic400_s0_rlast, gpoval4, ca7_standbywfil2, + pwr_vth_vddcore_ack, ca7_ncorereset_i, ca7_nirqout0, bsec_in_pwrok, + bsec_out_sec_deviceen, eth1_out_lpi_intr_o, eth2_out_lpi_intr_o, + ddrctrl_cactive_ddrc, ddrctrl_wr_credit_cnt, dts_valobus1_2, dts_valobus2_2, + pka_pka_itamp_out, nic400_s0_wvalid, nic400_s0_rvalid, gpoval5, + ca7_standbywfe0, pwr_vth_vddcpu_ack, ca7_evento, bsec_in_tamper_det, + bsec_out_sec_spniden, eth1_out_mac_speed_o1, eth2_out_mac_speed_o1, + ddrctrl_csysack_ddrc, ddrctrl_lpr_credit_cnt, dts_valobus1_3, dts_valobus2_3, + saes_tamper_out, nic400_s0_awready, nic400_s0_arready, gpoval6, + ca7_standbywfi0, pwr_rcc_vcpu_rdy, ca7_eventi, ca7_dbgack0, bsec_out_fuse_ok, + bsec_out_sec_spiden, eth1_out_mac_speed_o0, eth2_out_mac_speed_o0, + ddrctrl_csysreq_ddrc, ddrctrl_hpr_credit_cnt, dts_valobus1_4, dts_valobus2_4, + rng_tamper_out, nic400_s0_awavalid, nic400_s0_aravalid, gpoval7 ] + - if: + properties: + compatible: + contains: + const: st,stm32mp151-hdp + then: + patternProperties: + "^hdp[0-7]-pins$": + properties: + function: + enum: [ pwr_pwrwake_sys, cm4_sleepdeep, pwr_stdby_wkup, pwr_encomp_vddcore, + bsec_out_sec_niden, none, rcc_cm4_sleepdeep, gpu_dbg7, ddrctrl_lp_req, + pwr_ddr_ret_enable_n, dts_clk_ptat, gpoval0, pwr_pwrwake_mcu, cm4_halted, + ca7_naxierrirq, pwr_okin_mr, bsec_out_sec_dbgen, exti_sys_wakeup, + rcc_pwrds_mpu, gpu_dbg6, ddrctrl_dfi_ctrlupd_req, ddrctrl_cactive_ddrc_asr, + gpoval1, pwr_pwrwake_mpu, cm4_rxev, ca7_npmuirq1, ca7_nfiqout1, + bsec_in_rstcore_n, exti_c2_wakeup, rcc_pwrds_mcu, gpu_dbg5, + ddrctrl_dfi_init_complete, ddrctrl_perf_op_is_refresh, + ddrctrl_gskp_dfi_lp_req, gpoval2, pwr_sel_vth_vddcore, cm4_txev, ca7_npmuirq0, + ca7_nfiqout0, bsec_out_sec_dftlock, exti_c1_wakeup, rcc_pwrds_sys, gpu_dbg4, + ddrctrl_stat_ddrc_reg_selfref_type0, ddrctrl_cactive_1, dts_valobus1_0, + dts_valobus2_0, gpoval3, pwr_mpu_pdds_not_cstbydis, cm4_sleeping, ca7_nreset1, + ca7_nirqout1, bsec_out_sec_dften, bsec_out_sec_dbgswenable, + eth_out_pmt_intr_o, gpu_dbg3, ddrctrl_stat_ddrc_reg_selfref_type1, + ddrctrl_cactive_0, dts_valobus1_1, dts_valobus2_1, gpoval4, ca7_standbywfil2, + pwr_vth_vddcore_ack, ca7_nreset0, ca7_nirqout0, bsec_in_pwrok, + bsec_out_sec_deviceen, eth_out_lpi_intr_o, gpu_dbg2, ddrctrl_cactive_ddrc, + ddrctrl_wr_credit_cnt, dts_valobus1_2, dts_valobus2_2, gpoval5, + ca7_standbywfi1, ca7_standbywfe1, ca7_evento, ca7_dbgack1, + bsec_out_sec_spniden, eth_out_mac_speed_o1, gpu_dbg1, ddrctrl_csysack_ddrc, + ddrctrl_lpr_credit_cnt, dts_valobus1_3, dts_valobus2_3, gpoval6, + ca7_standbywfi0, ca7_standbywfe0, ca7_dbgack0, bsec_out_fuse_ok, + bsec_out_sec_spiden, eth_out_mac_speed_o0, gpu_dbg0, ddrctrl_csysreq_ddrc, + ddrctrl_hpr_credit_cnt, dts_valobus1_4, dts_valobus2_4, gpoval7 ] + - if: + properties: + compatible: + contains: + const: st,stm32mp251-hdp + then: + patternProperties: + "^hdp[0-7]-pins$": + properties: + function: + enum: [ pwr_pwrwake_sys, cpu2_sleep_deep, bsec_out_tst_sdr_unlock_or_disable_scan, + bsec_out_nidenm, bsec_out_nidena, cpu2_state_0, rcc_pwrds_sys, gpu_dbg7, + ddrss_csysreq_ddrc, ddrss_dfi_phyupd_req, cpu3_sleep_deep, + d2_gbl_per_clk_bus_req, pcie_usb_cxpl_debug_info_ei_0, + pcie_usb_cxpl_debug_info_ei_8, d3_state_0, gpoval0, pwr_pwrwake_cpu2, + cpu2_halted, cpu2_state_1, bsec_out_dbgenm, bsec_out_dbgena, exti1_sys_wakeup, + rcc_pwrds_cpu2, gpu_dbg6, ddrss_csysack_ddrc, ddrss_dfi_phymstr_req, + cpu3_halted, d2_gbl_per_dma_req, pcie_usb_cxpl_debug_info_ei_1, + pcie_usb_cxpl_debug_info_ei_9, d3_state_1, gpoval1, pwr_pwrwake_cpu1, + cpu2_rxev, cpu1_npumirq1, cpu1_nfiqout1, bsec_out_shdbgen, exti1_cpu2_wakeup, + rcc_pwrds_cpu1, gpu_dbg5, ddrss_cactive_ddrc, ddrss_dfi_lp_req, cpu3_rxev, + hpdma1_clk_bus_req, pcie_usb_cxpl_debug_info_ei_2, + pcie_usb_cxpl_debug_info_ei_10, d3_state_2, gpoval2, pwr_sel_vth_vddcpu, + cpu2_txev, cpu1_npumirq0, cpu1_nfiqout0, bsec_out_ddbgen, exti1_cpu1_wakeup, + cpu3_state_0, gpu_dbg4, ddrss_mcdcg_en, ddrss_dfi_freq_0, cpu3_txev, + hpdma2_clk_bus_req, pcie_usb_cxpl_debug_info_ei_3, + pcie_usb_cxpl_debug_info_ei_11, d1_state_0, gpoval3, pwr_sel_vth_vddcore, + cpu2_sleeping, cpu1_evento, cpu1_nirqout1, bsec_out_spnidena, exti2_d3_wakeup, + eth1_out_pmt_intr_o, gpu_dbg3, ddrss_dphycg_en, ddrss_obsp0, cpu3_sleeping, + hpdma3_clk_bus_req, pcie_usb_cxpl_debug_info_ei_4, + pcie_usb_cxpl_debug_info_ei_12, d1_state_1, gpoval4, cpu1_standby_wfil2, + none, cpu1_nirqout0, bsec_out_spidena, exti2_cpu3_wakeup, eth1_out_lpi_intr_o, + gpu_dbg2, ddrctrl_dfi_init_start, ddrss_obsp1, cpu3_state_1, + d3_gbl_per_clk_bus_req, pcie_usb_cxpl_debug_info_ei_5, + pcie_usb_cxpl_debug_info_ei_13, d1_state_2, gpoval5, cpu1_standby_wfi1, + cpu1_standby_wfe1, cpu1_halted1, cpu1_naxierrirq, bsec_out_spnidenm, + exti2_cpu2_wakeup, eth2_out_pmt_intr_o, gpu_dbg1, ddrss_dfi_init_complete, + ddrss_obsp2, d2_state_0, d3_gbl_per_dma_req, pcie_usb_cxpl_debug_info_ei_6, + pcie_usb_cxpl_debug_info_ei_14, cpu1_state_0, gpoval6, cpu1_standby_wfi0, + cpu1_standby_wfe0, cpu1_halted0, bsec_out_spidenm, exti2_cpu1__wakeup, + eth2_out_lpi_intr_o, gpu_dbg0, ddrss_dfi_ctrlupd_req, ddrss_obsp3, d2_state_1, + lpdma1_clk_bus_req, pcie_usb_cxpl_debug_info_ei_7, + pcie_usb_cxpl_debug_info_ei_15, cpu1_state_1, gpoval7 ] + +required: + - compatible + - reg + - clocks + +additionalProperties: false + +examples: + - | + #include <dt-bindings/clock/stm32mp1-clks.h> + + pinctrl@54090000 { + compatible = "st,stm32mp15-hdp"; + reg = <0x54090000 0x400>; + clocks = <&rcc HDP>; + pinctrl-names = "default"; + pinctrl-0 = <&hdp2_gpo>; + hdp2_gpo: hdp2-pins { + function = "gpoval2"; + pins = "HDP2"; + }; + }; -- 2.43.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP 2025-05-20 15:02 ` [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP Clément Le Goffic @ 2025-05-20 19:25 ` Rob Herring (Arm) 2025-05-20 19:37 ` Rob Herring 2025-05-21 10:31 ` [Linux-stm32] " Amelie Delaunay 2 siblings, 0 replies; 18+ messages in thread From: Rob Herring (Arm) @ 2025-05-20 19:25 UTC (permalink / raw) To: Clément Le Goffic Cc: devicetree, Linus Walleij, Maxime Coquelin, linux-stm32, linux-gpio, Alexandre Torgue, linux-kernel, Conor Dooley, linux-arm-kernel, Krzysztof Kozlowski, Bartosz Golaszewski On Tue, 20 May 2025 17:02:28 +0200, Clément Le Goffic wrote: > 'HDP' stands for Hardware Debug Port, it is an hardware block in > STMicrolectronics' MPUs that let the user decide which internal SoC's > signal to observe. > It provides 8 ports and for each port there is up to 16 different > signals that can be output. > Signals are different for each MPU. > > Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> > --- > .../bindings/pinctrl/st,stm32-pinctrl-hdp.yaml | 188 +++++++++++++++++++++ > 1 file changed, 188 insertions(+) > My bot found errors running 'make dt_binding_check' on your patch: yamllint warnings/errors: dtschema/dtc warnings/errors: Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.example.dtb: /example-0/pinctrl@54090000: failed to match any schema with compatible: ['st,stm32mp15-hdp'] doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20250520-hdp-upstream-v2-1-53f6b8b5ffc8@foss.st.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] 18+ messages in thread
* Re: [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP 2025-05-20 15:02 ` [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP Clément Le Goffic 2025-05-20 19:25 ` Rob Herring (Arm) @ 2025-05-20 19:37 ` Rob Herring 2025-05-21 8:55 ` Clement LE GOFFIC 2025-05-21 10:31 ` [Linux-stm32] " Amelie Delaunay 2 siblings, 1 reply; 18+ messages in thread From: Rob Herring @ 2025-05-20 19:37 UTC (permalink / raw) To: Clément Le Goffic Cc: Linus Walleij, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski, linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel On Tue, May 20, 2025 at 05:02:28PM +0200, Clément Le Goffic wrote: > 'HDP' stands for Hardware Debug Port, it is an hardware block in > STMicrolectronics' MPUs that let the user decide which internal SoC's > signal to observe. > It provides 8 ports and for each port there is up to 16 different > signals that can be output. > Signals are different for each MPU. > > Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> > --- > .../bindings/pinctrl/st,stm32-pinctrl-hdp.yaml | 188 +++++++++++++++++++++ > 1 file changed, 188 insertions(+) > > diff --git a/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml > new file mode 100644 > index 000000000000..6251e9c16ced > --- /dev/null > +++ b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml > @@ -0,0 +1,188 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +# Copyright (C) STMicroelectronics 2025. > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl-hdp.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: STM32 Hardware Debug Port Mux/Config > + > +maintainers: > + - Clément LE GOFFIC <clement.legoffic@foss.st.com> > + > +description: > + STMicroelectronics's STM32 MPUs integrate a Hardware Debug Port (HDP). > + It allows to output internal signals on SoC's GPIO. > + > +properties: > + compatible: > + enum: > + - st,stm32mp131-hdp > + - st,stm32mp151-hdp > + - st,stm32mp251-hdp > + > + reg: > + maxItems: 1 > + > + clocks: > + maxItems: 1 > + > +patternProperties: > + "^hdp[0-7]-pins$": > + type: object > + $ref: pinmux-node.yaml# > + additionalProperties: false > + > + properties: > + pins: > + enum: [ HDP0, HDP1, HDP2, HDP3, HDP4, HDP5, HDP6, HDP7 ] This can be: pattern: '^HDP[0-7]$' > + > + function: > + maxItems: 1 This is always 1 item, so just 'function: true' here. > + > + required: > + - function > + - pins > + > +allOf: > + - $ref: pinctrl.yaml# > + - if: > + properties: > + compatible: > + contains: > + const: st,stm32mp131-hdp > + then: > + patternProperties: > + "^hdp[0-7]-pins$": > + properties: > + function: > + enum: [ pwr_pwrwake_sys, pwr_stop_forbidden, pwr_stdby_wakeup, pwr_encomp_vddcore, > + bsec_out_sec_niden, aiec_sys_wakeup, none, ddrctrl_lp_req, > + pwr_ddr_ret_enable_n, dts_clk_ptat, sram3ctrl_tamp_erase_act, gpoval0, > + pwr_sel_vth_vddcpu, pwr_mpu_ram_lowspeed, ca7_naxierrirq, pwr_okin_mr, > + bsec_out_sec_dbgen, aiec_c1_wakeup, rcc_pwrds_mpu, ddrctrl_dfi_ctrlupd_req, > + ddrctrl_cactive_ddrc_asr, sram3ctrl_hw_erase_act, nic400_s0_bready, gpoval1, > + pwr_pwrwake_mpu, pwr_mpu_clock_disable_ack, ca7_ndbgreset_i, > + bsec_in_rstcore_n, bsec_out_sec_bsc_dis, ddrctrl_dfi_init_complete, > + ddrctrl_perf_op_is_refresh, ddrctrl_gskp_dfi_lp_req, sram3ctrl_sw_erase_act, > + nic400_s0_bvalid, gpoval2, pwr_sel_vth_vddcore, pwr_mpu_clock_disable_req, > + ca7_npmuirq0, ca7_nfiqout0, bsec_out_sec_dftlock, bsec_out_sec_jtag_dis, > + rcc_pwrds_sys, sram3ctrl_tamp_erase_req, ddrctrl_stat_ddrc_reg_selfref_type0, > + dts_valobus1_0, dts_valobus2_0, tamp_potential_tamp_erfcfg, nic400_s0_wready, > + nic400_s0_rready, gpoval3, pwr_stop2_active, ca7_nl2reset_i, > + ca7_npreset_varm_i, bsec_out_sec_dften, bsec_out_sec_dbgswenable, > + eth1_out_pmt_intr_o, eth2_out_pmt_intr_o, ddrctrl_stat_ddrc_reg_selfref_type1, > + ddrctrl_cactive_0, dts_valobus1_1, dts_valobus2_1, tamp_nreset_sram_ercfg, > + nic400_s0_wlast, nic400_s0_rlast, gpoval4, ca7_standbywfil2, > + pwr_vth_vddcore_ack, ca7_ncorereset_i, ca7_nirqout0, bsec_in_pwrok, > + bsec_out_sec_deviceen, eth1_out_lpi_intr_o, eth2_out_lpi_intr_o, > + ddrctrl_cactive_ddrc, ddrctrl_wr_credit_cnt, dts_valobus1_2, dts_valobus2_2, > + pka_pka_itamp_out, nic400_s0_wvalid, nic400_s0_rvalid, gpoval5, > + ca7_standbywfe0, pwr_vth_vddcpu_ack, ca7_evento, bsec_in_tamper_det, > + bsec_out_sec_spniden, eth1_out_mac_speed_o1, eth2_out_mac_speed_o1, > + ddrctrl_csysack_ddrc, ddrctrl_lpr_credit_cnt, dts_valobus1_3, dts_valobus2_3, > + saes_tamper_out, nic400_s0_awready, nic400_s0_arready, gpoval6, > + ca7_standbywfi0, pwr_rcc_vcpu_rdy, ca7_eventi, ca7_dbgack0, bsec_out_fuse_ok, > + bsec_out_sec_spiden, eth1_out_mac_speed_o0, eth2_out_mac_speed_o0, > + ddrctrl_csysreq_ddrc, ddrctrl_hpr_credit_cnt, dts_valobus1_4, dts_valobus2_4, > + rng_tamper_out, nic400_s0_awavalid, nic400_s0_aravalid, gpoval7 ] > + - if: > + properties: > + compatible: > + contains: > + const: st,stm32mp151-hdp > + then: > + patternProperties: > + "^hdp[0-7]-pins$": > + properties: > + function: > + enum: [ pwr_pwrwake_sys, cm4_sleepdeep, pwr_stdby_wkup, pwr_encomp_vddcore, > + bsec_out_sec_niden, none, rcc_cm4_sleepdeep, gpu_dbg7, ddrctrl_lp_req, > + pwr_ddr_ret_enable_n, dts_clk_ptat, gpoval0, pwr_pwrwake_mcu, cm4_halted, > + ca7_naxierrirq, pwr_okin_mr, bsec_out_sec_dbgen, exti_sys_wakeup, > + rcc_pwrds_mpu, gpu_dbg6, ddrctrl_dfi_ctrlupd_req, ddrctrl_cactive_ddrc_asr, > + gpoval1, pwr_pwrwake_mpu, cm4_rxev, ca7_npmuirq1, ca7_nfiqout1, > + bsec_in_rstcore_n, exti_c2_wakeup, rcc_pwrds_mcu, gpu_dbg5, > + ddrctrl_dfi_init_complete, ddrctrl_perf_op_is_refresh, > + ddrctrl_gskp_dfi_lp_req, gpoval2, pwr_sel_vth_vddcore, cm4_txev, ca7_npmuirq0, > + ca7_nfiqout0, bsec_out_sec_dftlock, exti_c1_wakeup, rcc_pwrds_sys, gpu_dbg4, > + ddrctrl_stat_ddrc_reg_selfref_type0, ddrctrl_cactive_1, dts_valobus1_0, > + dts_valobus2_0, gpoval3, pwr_mpu_pdds_not_cstbydis, cm4_sleeping, ca7_nreset1, > + ca7_nirqout1, bsec_out_sec_dften, bsec_out_sec_dbgswenable, > + eth_out_pmt_intr_o, gpu_dbg3, ddrctrl_stat_ddrc_reg_selfref_type1, > + ddrctrl_cactive_0, dts_valobus1_1, dts_valobus2_1, gpoval4, ca7_standbywfil2, > + pwr_vth_vddcore_ack, ca7_nreset0, ca7_nirqout0, bsec_in_pwrok, > + bsec_out_sec_deviceen, eth_out_lpi_intr_o, gpu_dbg2, ddrctrl_cactive_ddrc, > + ddrctrl_wr_credit_cnt, dts_valobus1_2, dts_valobus2_2, gpoval5, > + ca7_standbywfi1, ca7_standbywfe1, ca7_evento, ca7_dbgack1, > + bsec_out_sec_spniden, eth_out_mac_speed_o1, gpu_dbg1, ddrctrl_csysack_ddrc, > + ddrctrl_lpr_credit_cnt, dts_valobus1_3, dts_valobus2_3, gpoval6, > + ca7_standbywfi0, ca7_standbywfe0, ca7_dbgack0, bsec_out_fuse_ok, > + bsec_out_sec_spiden, eth_out_mac_speed_o0, gpu_dbg0, ddrctrl_csysreq_ddrc, > + ddrctrl_hpr_credit_cnt, dts_valobus1_4, dts_valobus2_4, gpoval7 ] > + - if: > + properties: > + compatible: > + contains: > + const: st,stm32mp251-hdp > + then: > + patternProperties: > + "^hdp[0-7]-pins$": > + properties: > + function: > + enum: [ pwr_pwrwake_sys, cpu2_sleep_deep, bsec_out_tst_sdr_unlock_or_disable_scan, > + bsec_out_nidenm, bsec_out_nidena, cpu2_state_0, rcc_pwrds_sys, gpu_dbg7, > + ddrss_csysreq_ddrc, ddrss_dfi_phyupd_req, cpu3_sleep_deep, > + d2_gbl_per_clk_bus_req, pcie_usb_cxpl_debug_info_ei_0, > + pcie_usb_cxpl_debug_info_ei_8, d3_state_0, gpoval0, pwr_pwrwake_cpu2, > + cpu2_halted, cpu2_state_1, bsec_out_dbgenm, bsec_out_dbgena, exti1_sys_wakeup, > + rcc_pwrds_cpu2, gpu_dbg6, ddrss_csysack_ddrc, ddrss_dfi_phymstr_req, > + cpu3_halted, d2_gbl_per_dma_req, pcie_usb_cxpl_debug_info_ei_1, > + pcie_usb_cxpl_debug_info_ei_9, d3_state_1, gpoval1, pwr_pwrwake_cpu1, > + cpu2_rxev, cpu1_npumirq1, cpu1_nfiqout1, bsec_out_shdbgen, exti1_cpu2_wakeup, > + rcc_pwrds_cpu1, gpu_dbg5, ddrss_cactive_ddrc, ddrss_dfi_lp_req, cpu3_rxev, > + hpdma1_clk_bus_req, pcie_usb_cxpl_debug_info_ei_2, > + pcie_usb_cxpl_debug_info_ei_10, d3_state_2, gpoval2, pwr_sel_vth_vddcpu, > + cpu2_txev, cpu1_npumirq0, cpu1_nfiqout0, bsec_out_ddbgen, exti1_cpu1_wakeup, > + cpu3_state_0, gpu_dbg4, ddrss_mcdcg_en, ddrss_dfi_freq_0, cpu3_txev, > + hpdma2_clk_bus_req, pcie_usb_cxpl_debug_info_ei_3, > + pcie_usb_cxpl_debug_info_ei_11, d1_state_0, gpoval3, pwr_sel_vth_vddcore, > + cpu2_sleeping, cpu1_evento, cpu1_nirqout1, bsec_out_spnidena, exti2_d3_wakeup, > + eth1_out_pmt_intr_o, gpu_dbg3, ddrss_dphycg_en, ddrss_obsp0, cpu3_sleeping, > + hpdma3_clk_bus_req, pcie_usb_cxpl_debug_info_ei_4, > + pcie_usb_cxpl_debug_info_ei_12, d1_state_1, gpoval4, cpu1_standby_wfil2, > + none, cpu1_nirqout0, bsec_out_spidena, exti2_cpu3_wakeup, eth1_out_lpi_intr_o, > + gpu_dbg2, ddrctrl_dfi_init_start, ddrss_obsp1, cpu3_state_1, > + d3_gbl_per_clk_bus_req, pcie_usb_cxpl_debug_info_ei_5, > + pcie_usb_cxpl_debug_info_ei_13, d1_state_2, gpoval5, cpu1_standby_wfi1, > + cpu1_standby_wfe1, cpu1_halted1, cpu1_naxierrirq, bsec_out_spnidenm, > + exti2_cpu2_wakeup, eth2_out_pmt_intr_o, gpu_dbg1, ddrss_dfi_init_complete, > + ddrss_obsp2, d2_state_0, d3_gbl_per_dma_req, pcie_usb_cxpl_debug_info_ei_6, > + pcie_usb_cxpl_debug_info_ei_14, cpu1_state_0, gpoval6, cpu1_standby_wfi0, > + cpu1_standby_wfe0, cpu1_halted0, bsec_out_spidenm, exti2_cpu1__wakeup, > + eth2_out_lpi_intr_o, gpu_dbg0, ddrss_dfi_ctrlupd_req, ddrss_obsp3, d2_state_1, > + lpdma1_clk_bus_req, pcie_usb_cxpl_debug_info_ei_7, > + pcie_usb_cxpl_debug_info_ei_15, cpu1_state_1, gpoval7 ] > + > +required: > + - compatible > + - reg > + - clocks > + > +additionalProperties: false > + > +examples: > + - | > + #include <dt-bindings/clock/stm32mp1-clks.h> > + > + pinctrl@54090000 { > + compatible = "st,stm32mp15-hdp"; > + reg = <0x54090000 0x400>; > + clocks = <&rcc HDP>; > + pinctrl-names = "default"; > + pinctrl-0 = <&hdp2_gpo>; > + hdp2_gpo: hdp2-pins { > + function = "gpoval2"; > + pins = "HDP2"; > + }; > + }; > > -- > 2.43.0 > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP 2025-05-20 19:37 ` Rob Herring @ 2025-05-21 8:55 ` Clement LE GOFFIC 0 siblings, 0 replies; 18+ messages in thread From: Clement LE GOFFIC @ 2025-05-21 8:55 UTC (permalink / raw) To: Rob Herring Cc: Linus Walleij, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski, linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel On 5/20/25 21:37, Rob Herring wrote: > On Tue, May 20, 2025 at 05:02:28PM +0200, Clément Le Goffic wrote: >> 'HDP' stands for Hardware Debug Port, it is an hardware block in >> STMicrolectronics' MPUs that let the user decide which internal SoC's >> signal to observe. >> It provides 8 ports and for each port there is up to 16 different >> signals that can be output. >> Signals are different for each MPU. >> >> Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> >> --- >> .../bindings/pinctrl/st,stm32-pinctrl-hdp.yaml | 188 +++++++++++++++++++++ >> 1 file changed, 188 insertions(+) >> >> diff --git a/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml >> new file mode 100644 >> index 000000000000..6251e9c16ced >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml >> @@ -0,0 +1,188 @@ >> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) >> +# Copyright (C) STMicroelectronics 2025. >> +%YAML 1.2 >> +--- >> +$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl-hdp.yaml# >> +$schema: http://devicetree.org/meta-schemas/core.yaml# >> + >> +title: STM32 Hardware Debug Port Mux/Config >> + >> +maintainers: >> + - Clément LE GOFFIC <clement.legoffic@foss.st.com> >> + >> +description: >> + STMicroelectronics's STM32 MPUs integrate a Hardware Debug Port (HDP). >> + It allows to output internal signals on SoC's GPIO. >> + >> +properties: >> + compatible: >> + enum: >> + - st,stm32mp131-hdp >> + - st,stm32mp151-hdp >> + - st,stm32mp251-hdp >> + >> + reg: >> + maxItems: 1 >> + >> + clocks: >> + maxItems: 1 >> + >> +patternProperties: >> + "^hdp[0-7]-pins$": >> + type: object >> + $ref: pinmux-node.yaml# >> + additionalProperties: false >> + >> + properties: >> + pins: >> + enum: [ HDP0, HDP1, HDP2, HDP3, HDP4, HDP5, HDP6, HDP7 ] > > This can be: > > pattern: '^HDP[0-7]$' Hi Rob, thanks for pattern tips I didn't know it was possible > > >> + >> + function: >> + maxItems: 1 > > This is always 1 item, so just 'function: true' here. Yes, I know I fought to make it work, and the maxItems was the only idea that came out. > >> + >> + required: >> + - function >> + - pins >> + >> +allOf: >> + - $ref: pinctrl.yaml# >> + - if: >> + properties: >> + compatible: >> + contains: >> + const: st,stm32mp131-hdp >> + then: >> + patternProperties: >> + "^hdp[0-7]-pins$": >> + properties: >> + function: >> + enum: [ pwr_pwrwake_sys, pwr_stop_forbidden, pwr_stdby_wakeup, pwr_encomp_vddcore, >> + bsec_out_sec_niden, aiec_sys_wakeup, none, ddrctrl_lp_req, >> + pwr_ddr_ret_enable_n, dts_clk_ptat, sram3ctrl_tamp_erase_act, gpoval0, >> + pwr_sel_vth_vddcpu, pwr_mpu_ram_lowspeed, ca7_naxierrirq, pwr_okin_mr, >> + bsec_out_sec_dbgen, aiec_c1_wakeup, rcc_pwrds_mpu, ddrctrl_dfi_ctrlupd_req, >> + ddrctrl_cactive_ddrc_asr, sram3ctrl_hw_erase_act, nic400_s0_bready, gpoval1, >> + pwr_pwrwake_mpu, pwr_mpu_clock_disable_ack, ca7_ndbgreset_i, >> + bsec_in_rstcore_n, bsec_out_sec_bsc_dis, ddrctrl_dfi_init_complete, >> + ddrctrl_perf_op_is_refresh, ddrctrl_gskp_dfi_lp_req, sram3ctrl_sw_erase_act, >> + nic400_s0_bvalid, gpoval2, pwr_sel_vth_vddcore, pwr_mpu_clock_disable_req, >> + ca7_npmuirq0, ca7_nfiqout0, bsec_out_sec_dftlock, bsec_out_sec_jtag_dis, >> + rcc_pwrds_sys, sram3ctrl_tamp_erase_req, ddrctrl_stat_ddrc_reg_selfref_type0, >> + dts_valobus1_0, dts_valobus2_0, tamp_potential_tamp_erfcfg, nic400_s0_wready, >> + nic400_s0_rready, gpoval3, pwr_stop2_active, ca7_nl2reset_i, >> + ca7_npreset_varm_i, bsec_out_sec_dften, bsec_out_sec_dbgswenable, >> + eth1_out_pmt_intr_o, eth2_out_pmt_intr_o, ddrctrl_stat_ddrc_reg_selfref_type1, >> + ddrctrl_cactive_0, dts_valobus1_1, dts_valobus2_1, tamp_nreset_sram_ercfg, >> + nic400_s0_wlast, nic400_s0_rlast, gpoval4, ca7_standbywfil2, >> + pwr_vth_vddcore_ack, ca7_ncorereset_i, ca7_nirqout0, bsec_in_pwrok, >> + bsec_out_sec_deviceen, eth1_out_lpi_intr_o, eth2_out_lpi_intr_o, >> + ddrctrl_cactive_ddrc, ddrctrl_wr_credit_cnt, dts_valobus1_2, dts_valobus2_2, >> + pka_pka_itamp_out, nic400_s0_wvalid, nic400_s0_rvalid, gpoval5, >> + ca7_standbywfe0, pwr_vth_vddcpu_ack, ca7_evento, bsec_in_tamper_det, >> + bsec_out_sec_spniden, eth1_out_mac_speed_o1, eth2_out_mac_speed_o1, >> + ddrctrl_csysack_ddrc, ddrctrl_lpr_credit_cnt, dts_valobus1_3, dts_valobus2_3, >> + saes_tamper_out, nic400_s0_awready, nic400_s0_arready, gpoval6, >> + ca7_standbywfi0, pwr_rcc_vcpu_rdy, ca7_eventi, ca7_dbgack0, bsec_out_fuse_ok, >> + bsec_out_sec_spiden, eth1_out_mac_speed_o0, eth2_out_mac_speed_o0, >> + ddrctrl_csysreq_ddrc, ddrctrl_hpr_credit_cnt, dts_valobus1_4, dts_valobus2_4, >> + rng_tamper_out, nic400_s0_awavalid, nic400_s0_aravalid, gpoval7 ] Do you know if it is possible to add an "and" in the if condition ? I want to restrict the function name per pin name: If compatible is "st,stm32mp131-hdp" and pin is "HDP2" then function: enum: [..] Is it somehow feasible ? Thank you Clément [...] >> + >> +required: >> + - compatible >> + - reg >> + - clocks >> + >> +additionalProperties: false >> + >> +examples: >> + - | >> + #include <dt-bindings/clock/stm32mp1-clks.h> >> + >> + pinctrl@54090000 { >> + compatible = "st,stm32mp15-hdp"; >> + reg = <0x54090000 0x400>; >> + clocks = <&rcc HDP>; >> + pinctrl-names = "default"; >> + pinctrl-0 = <&hdp2_gpo>; >> + hdp2_gpo: hdp2-pins { >> + function = "gpoval2"; >> + pins = "HDP2"; >> + }; >> + }; >> >> -- >> 2.43.0 >> ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Linux-stm32] [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP 2025-05-20 15:02 ` [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP Clément Le Goffic 2025-05-20 19:25 ` Rob Herring (Arm) 2025-05-20 19:37 ` Rob Herring @ 2025-05-21 10:31 ` Amelie Delaunay 2 siblings, 0 replies; 18+ messages in thread From: Amelie Delaunay @ 2025-05-21 10:31 UTC (permalink / raw) To: Clément Le Goffic, Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski Cc: devicetree, linux-kernel, linux-gpio, linux-stm32, linux-arm-kernel On 5/20/25 17:02, Clément Le Goffic wrote: > 'HDP' stands for Hardware Debug Port, it is an hardware block in > STMicrolectronics' MPUs that let the user decide which internal SoC's > signal to observe. > It provides 8 ports and for each port there is up to 16 different > signals that can be output. > Signals are different for each MPU. > > Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> > --- > .../bindings/pinctrl/st,stm32-pinctrl-hdp.yaml | 188 +++++++++++++++++++++ > 1 file changed, 188 insertions(+) > > diff --git a/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml > new file mode 100644 > index 000000000000..6251e9c16ced > --- /dev/null > +++ b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml > @@ -0,0 +1,188 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +# Copyright (C) STMicroelectronics 2025. > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl-hdp.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: STM32 Hardware Debug Port Mux/Config > + > +maintainers: > + - Clément LE GOFFIC <clement.legoffic@foss.st.com> > + > +description: > + STMicroelectronics's STM32 MPUs integrate a Hardware Debug Port (HDP). > + It allows to output internal signals on SoC's GPIO. > + > +properties: > + compatible: > + enum: > + - st,stm32mp131-hdp > + - st,stm32mp151-hdp > + - st,stm32mp251-hdp > + Hi Rob, Hi Krzyztof, I hope to open Pandora's box one last time on this subject. I've read all reviews of all STM32 bindings. Very recent STM32 bindings, for STM32MP25, STM32MP23, STM32MP21, are using compatibles like st,stm32mp25-xxx, st,stm32mp23-xxx, st,stm32mp21xx (e.g. st,stm32mp25-omm, st,stm32mp21-rcc, st,stm32mp23-syscon, st,stm32mp25-lptimer, st,stm32mp25-pcie-rc, ...). If compatible should inconditionnaly match the SoC dtsi, why don't we have st,stm32mp131-hdp, st,stm32mp133-hdp, st,stm32mp135-hdp, ... ? https://www.st.com/en/microcontrollers-microprocessors/stm32mp1-series.html https://www.st.com/en/microcontrollers-microprocessors/stm32mp2-series.html "The STM32MP1 series is available in six different lines, which are, on one hand STM32MP15x pin-to-pin compatible, and on the other hand STM32MP13x pin-to-pin compatible." "The STM32MP2 series is available in seven different lines, which are pin-to-pin compatible". For HDP, it means functions will be the same for each lines of STM32MP13x, for each lines of STM32MP15x, ... So, why not having compatibles like st,stm32mp13-hdp, st,stm32mp15-hdp, st,stm32mp25-hpd? Thanks, Amelie > + reg: > + maxItems: 1 > + > + clocks: > + maxItems: 1 > + > +patternProperties: > + "^hdp[0-7]-pins$": > + type: object > + $ref: pinmux-node.yaml# > + additionalProperties: false > + > + properties: > + pins: > + enum: [ HDP0, HDP1, HDP2, HDP3, HDP4, HDP5, HDP6, HDP7 ] > + > + function: > + maxItems: 1 > + > + required: > + - function > + - pins > + > +allOf: > + - $ref: pinctrl.yaml# > + - if: > + properties: > + compatible: > + contains: > + const: st,stm32mp131-hdp > + then: > + patternProperties: > + "^hdp[0-7]-pins$": > + properties: > + function: > + enum: [ pwr_pwrwake_sys, pwr_stop_forbidden, pwr_stdby_wakeup, pwr_encomp_vddcore, > + bsec_out_sec_niden, aiec_sys_wakeup, none, ddrctrl_lp_req, > + pwr_ddr_ret_enable_n, dts_clk_ptat, sram3ctrl_tamp_erase_act, gpoval0, > + pwr_sel_vth_vddcpu, pwr_mpu_ram_lowspeed, ca7_naxierrirq, pwr_okin_mr, > + bsec_out_sec_dbgen, aiec_c1_wakeup, rcc_pwrds_mpu, ddrctrl_dfi_ctrlupd_req, > + ddrctrl_cactive_ddrc_asr, sram3ctrl_hw_erase_act, nic400_s0_bready, gpoval1, > + pwr_pwrwake_mpu, pwr_mpu_clock_disable_ack, ca7_ndbgreset_i, > + bsec_in_rstcore_n, bsec_out_sec_bsc_dis, ddrctrl_dfi_init_complete, > + ddrctrl_perf_op_is_refresh, ddrctrl_gskp_dfi_lp_req, sram3ctrl_sw_erase_act, > + nic400_s0_bvalid, gpoval2, pwr_sel_vth_vddcore, pwr_mpu_clock_disable_req, > + ca7_npmuirq0, ca7_nfiqout0, bsec_out_sec_dftlock, bsec_out_sec_jtag_dis, > + rcc_pwrds_sys, sram3ctrl_tamp_erase_req, ddrctrl_stat_ddrc_reg_selfref_type0, > + dts_valobus1_0, dts_valobus2_0, tamp_potential_tamp_erfcfg, nic400_s0_wready, > + nic400_s0_rready, gpoval3, pwr_stop2_active, ca7_nl2reset_i, > + ca7_npreset_varm_i, bsec_out_sec_dften, bsec_out_sec_dbgswenable, > + eth1_out_pmt_intr_o, eth2_out_pmt_intr_o, ddrctrl_stat_ddrc_reg_selfref_type1, > + ddrctrl_cactive_0, dts_valobus1_1, dts_valobus2_1, tamp_nreset_sram_ercfg, > + nic400_s0_wlast, nic400_s0_rlast, gpoval4, ca7_standbywfil2, > + pwr_vth_vddcore_ack, ca7_ncorereset_i, ca7_nirqout0, bsec_in_pwrok, > + bsec_out_sec_deviceen, eth1_out_lpi_intr_o, eth2_out_lpi_intr_o, > + ddrctrl_cactive_ddrc, ddrctrl_wr_credit_cnt, dts_valobus1_2, dts_valobus2_2, > + pka_pka_itamp_out, nic400_s0_wvalid, nic400_s0_rvalid, gpoval5, > + ca7_standbywfe0, pwr_vth_vddcpu_ack, ca7_evento, bsec_in_tamper_det, > + bsec_out_sec_spniden, eth1_out_mac_speed_o1, eth2_out_mac_speed_o1, > + ddrctrl_csysack_ddrc, ddrctrl_lpr_credit_cnt, dts_valobus1_3, dts_valobus2_3, > + saes_tamper_out, nic400_s0_awready, nic400_s0_arready, gpoval6, > + ca7_standbywfi0, pwr_rcc_vcpu_rdy, ca7_eventi, ca7_dbgack0, bsec_out_fuse_ok, > + bsec_out_sec_spiden, eth1_out_mac_speed_o0, eth2_out_mac_speed_o0, > + ddrctrl_csysreq_ddrc, ddrctrl_hpr_credit_cnt, dts_valobus1_4, dts_valobus2_4, > + rng_tamper_out, nic400_s0_awavalid, nic400_s0_aravalid, gpoval7 ] > + - if: > + properties: > + compatible: > + contains: > + const: st,stm32mp151-hdp > + then: > + patternProperties: > + "^hdp[0-7]-pins$": > + properties: > + function: > + enum: [ pwr_pwrwake_sys, cm4_sleepdeep, pwr_stdby_wkup, pwr_encomp_vddcore, > + bsec_out_sec_niden, none, rcc_cm4_sleepdeep, gpu_dbg7, ddrctrl_lp_req, > + pwr_ddr_ret_enable_n, dts_clk_ptat, gpoval0, pwr_pwrwake_mcu, cm4_halted, > + ca7_naxierrirq, pwr_okin_mr, bsec_out_sec_dbgen, exti_sys_wakeup, > + rcc_pwrds_mpu, gpu_dbg6, ddrctrl_dfi_ctrlupd_req, ddrctrl_cactive_ddrc_asr, > + gpoval1, pwr_pwrwake_mpu, cm4_rxev, ca7_npmuirq1, ca7_nfiqout1, > + bsec_in_rstcore_n, exti_c2_wakeup, rcc_pwrds_mcu, gpu_dbg5, > + ddrctrl_dfi_init_complete, ddrctrl_perf_op_is_refresh, > + ddrctrl_gskp_dfi_lp_req, gpoval2, pwr_sel_vth_vddcore, cm4_txev, ca7_npmuirq0, > + ca7_nfiqout0, bsec_out_sec_dftlock, exti_c1_wakeup, rcc_pwrds_sys, gpu_dbg4, > + ddrctrl_stat_ddrc_reg_selfref_type0, ddrctrl_cactive_1, dts_valobus1_0, > + dts_valobus2_0, gpoval3, pwr_mpu_pdds_not_cstbydis, cm4_sleeping, ca7_nreset1, > + ca7_nirqout1, bsec_out_sec_dften, bsec_out_sec_dbgswenable, > + eth_out_pmt_intr_o, gpu_dbg3, ddrctrl_stat_ddrc_reg_selfref_type1, > + ddrctrl_cactive_0, dts_valobus1_1, dts_valobus2_1, gpoval4, ca7_standbywfil2, > + pwr_vth_vddcore_ack, ca7_nreset0, ca7_nirqout0, bsec_in_pwrok, > + bsec_out_sec_deviceen, eth_out_lpi_intr_o, gpu_dbg2, ddrctrl_cactive_ddrc, > + ddrctrl_wr_credit_cnt, dts_valobus1_2, dts_valobus2_2, gpoval5, > + ca7_standbywfi1, ca7_standbywfe1, ca7_evento, ca7_dbgack1, > + bsec_out_sec_spniden, eth_out_mac_speed_o1, gpu_dbg1, ddrctrl_csysack_ddrc, > + ddrctrl_lpr_credit_cnt, dts_valobus1_3, dts_valobus2_3, gpoval6, > + ca7_standbywfi0, ca7_standbywfe0, ca7_dbgack0, bsec_out_fuse_ok, > + bsec_out_sec_spiden, eth_out_mac_speed_o0, gpu_dbg0, ddrctrl_csysreq_ddrc, > + ddrctrl_hpr_credit_cnt, dts_valobus1_4, dts_valobus2_4, gpoval7 ] > + - if: > + properties: > + compatible: > + contains: > + const: st,stm32mp251-hdp > + then: > + patternProperties: > + "^hdp[0-7]-pins$": > + properties: > + function: > + enum: [ pwr_pwrwake_sys, cpu2_sleep_deep, bsec_out_tst_sdr_unlock_or_disable_scan, > + bsec_out_nidenm, bsec_out_nidena, cpu2_state_0, rcc_pwrds_sys, gpu_dbg7, > + ddrss_csysreq_ddrc, ddrss_dfi_phyupd_req, cpu3_sleep_deep, > + d2_gbl_per_clk_bus_req, pcie_usb_cxpl_debug_info_ei_0, > + pcie_usb_cxpl_debug_info_ei_8, d3_state_0, gpoval0, pwr_pwrwake_cpu2, > + cpu2_halted, cpu2_state_1, bsec_out_dbgenm, bsec_out_dbgena, exti1_sys_wakeup, > + rcc_pwrds_cpu2, gpu_dbg6, ddrss_csysack_ddrc, ddrss_dfi_phymstr_req, > + cpu3_halted, d2_gbl_per_dma_req, pcie_usb_cxpl_debug_info_ei_1, > + pcie_usb_cxpl_debug_info_ei_9, d3_state_1, gpoval1, pwr_pwrwake_cpu1, > + cpu2_rxev, cpu1_npumirq1, cpu1_nfiqout1, bsec_out_shdbgen, exti1_cpu2_wakeup, > + rcc_pwrds_cpu1, gpu_dbg5, ddrss_cactive_ddrc, ddrss_dfi_lp_req, cpu3_rxev, > + hpdma1_clk_bus_req, pcie_usb_cxpl_debug_info_ei_2, > + pcie_usb_cxpl_debug_info_ei_10, d3_state_2, gpoval2, pwr_sel_vth_vddcpu, > + cpu2_txev, cpu1_npumirq0, cpu1_nfiqout0, bsec_out_ddbgen, exti1_cpu1_wakeup, > + cpu3_state_0, gpu_dbg4, ddrss_mcdcg_en, ddrss_dfi_freq_0, cpu3_txev, > + hpdma2_clk_bus_req, pcie_usb_cxpl_debug_info_ei_3, > + pcie_usb_cxpl_debug_info_ei_11, d1_state_0, gpoval3, pwr_sel_vth_vddcore, > + cpu2_sleeping, cpu1_evento, cpu1_nirqout1, bsec_out_spnidena, exti2_d3_wakeup, > + eth1_out_pmt_intr_o, gpu_dbg3, ddrss_dphycg_en, ddrss_obsp0, cpu3_sleeping, > + hpdma3_clk_bus_req, pcie_usb_cxpl_debug_info_ei_4, > + pcie_usb_cxpl_debug_info_ei_12, d1_state_1, gpoval4, cpu1_standby_wfil2, > + none, cpu1_nirqout0, bsec_out_spidena, exti2_cpu3_wakeup, eth1_out_lpi_intr_o, > + gpu_dbg2, ddrctrl_dfi_init_start, ddrss_obsp1, cpu3_state_1, > + d3_gbl_per_clk_bus_req, pcie_usb_cxpl_debug_info_ei_5, > + pcie_usb_cxpl_debug_info_ei_13, d1_state_2, gpoval5, cpu1_standby_wfi1, > + cpu1_standby_wfe1, cpu1_halted1, cpu1_naxierrirq, bsec_out_spnidenm, > + exti2_cpu2_wakeup, eth2_out_pmt_intr_o, gpu_dbg1, ddrss_dfi_init_complete, > + ddrss_obsp2, d2_state_0, d3_gbl_per_dma_req, pcie_usb_cxpl_debug_info_ei_6, > + pcie_usb_cxpl_debug_info_ei_14, cpu1_state_0, gpoval6, cpu1_standby_wfi0, > + cpu1_standby_wfe0, cpu1_halted0, bsec_out_spidenm, exti2_cpu1__wakeup, > + eth2_out_lpi_intr_o, gpu_dbg0, ddrss_dfi_ctrlupd_req, ddrss_obsp3, d2_state_1, > + lpdma1_clk_bus_req, pcie_usb_cxpl_debug_info_ei_7, > + pcie_usb_cxpl_debug_info_ei_15, cpu1_state_1, gpoval7 ] > + > +required: > + - compatible > + - reg > + - clocks > + > +additionalProperties: false > + > +examples: > + - | > + #include <dt-bindings/clock/stm32mp1-clks.h> > + > + pinctrl@54090000 { > + compatible = "st,stm32mp15-hdp"; > + reg = <0x54090000 0x400>; > + clocks = <&rcc HDP>; > + pinctrl-names = "default"; > + pinctrl-0 = <&hdp2_gpo>; > + hdp2_gpo: hdp2-pins { > + function = "gpoval2"; > + pins = "HDP2"; > + }; > + }; > ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 2/8] pinctrl: stm32: Introduce HDP driver 2025-05-20 15:02 [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP Clément Le Goffic @ 2025-05-20 15:02 ` Clément Le Goffic 2025-05-20 22:34 ` Linus Walleij 2025-05-21 21:34 ` kernel test robot 2025-05-20 15:02 ` [PATCH v2 3/8] MAINTAINERS: Add Clément Le Goffic as STM32 HDP maintainer Clément Le Goffic ` (6 subsequent siblings) 8 siblings, 2 replies; 18+ messages in thread From: Clément Le Goffic @ 2025-05-20 15:02 UTC (permalink / raw) To: Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski Cc: linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel, Clément Le Goffic This patch introduce the driver for the Hardware Debug Port available on STM32MP platforms. The HDP allows the observation of internal SoC signals by using multiplexers. Each HDP port can provide up to 16 internal signals (one of them can be software controlled as a GPO). Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> --- drivers/pinctrl/stm32/Kconfig | 14 + drivers/pinctrl/stm32/Makefile | 1 + drivers/pinctrl/stm32/pinctrl-stm32-hdp.c | 736 ++++++++++++++++++++++++++++++ 3 files changed, 751 insertions(+) diff --git a/drivers/pinctrl/stm32/Kconfig b/drivers/pinctrl/stm32/Kconfig index 2656d3d3ae40..4b474cfd1f2c 100644 --- a/drivers/pinctrl/stm32/Kconfig +++ b/drivers/pinctrl/stm32/Kconfig @@ -57,4 +57,18 @@ config PINCTRL_STM32MP257 depends on OF && HAS_IOMEM default MACH_STM32MP25 select PINCTRL_STM32 + +config PINCTRL_STM32_HDP + tristate "STMicroelectronics STM32 Hardware Debug Port (HDP) pin control" + depends on OF && HAS_IOMEM + default ARM64 || (ARM && CPU_V7) + select PINMUX + select GENERIC_PINCONF + select GPIOLIB + help + The Hardware Debug Port allows the observation of internal signals. + It uses configurable multiplexer to route signals in a dedicated observation register. + This driver also permits the observation of signals on external SoC pins. + It permits the observation of up to 16 signals per HDP line. + endif diff --git a/drivers/pinctrl/stm32/Makefile b/drivers/pinctrl/stm32/Makefile index 7b17464d8de1..98a1bbc7e16c 100644 --- a/drivers/pinctrl/stm32/Makefile +++ b/drivers/pinctrl/stm32/Makefile @@ -11,3 +11,4 @@ obj-$(CONFIG_PINCTRL_STM32H743) += pinctrl-stm32h743.o obj-$(CONFIG_PINCTRL_STM32MP135) += pinctrl-stm32mp135.o obj-$(CONFIG_PINCTRL_STM32MP157) += pinctrl-stm32mp157.o obj-$(CONFIG_PINCTRL_STM32MP257) += pinctrl-stm32mp257.o +obj-$(CONFIG_PINCTRL_STM32_HDP) += pinctrl-stm32-hdp.o diff --git a/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c b/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c new file mode 100644 index 000000000000..6c034dd43c1b --- /dev/null +++ b/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c @@ -0,0 +1,736 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) STMicroelectronics 2025 - All Rights Reserved + * Author: Clément Le Goffic <clement.legoffic@foss.st.com> for STMicroelectronics. + */ +#include <linux/bits.h> +#include <linux/clk.h> +#include <linux/gpio/driver.h> +#include <linux/io.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/pinctrl/consumer.h> +#include <linux/pinctrl/pinconf-generic.h> +#include <linux/pinctrl/pinctrl.h> +#include <linux/pinctrl/pinmux.h> +#include <linux/platform_device.h> +#include <linux/pm.h> + +#include "../core.h" + +#define DRIVER_NAME "stm32_hdp" +#define HDP_CTRL_ENABLE 1 +#define HDP_CTRL_DISABLE 0 + +#define HDP_CTRL 0x000 +#define HDP_MUX 0x004 +#define HDP_VAL 0x010 +#define HDP_GPOSET 0x014 +#define HDP_GPOCLR 0x018 +#define HDP_GPOVAL 0x01c +#define HDP_VERR 0x3f4 +#define HDP_IPIDR 0x3f8 +#define HDP_SIDR 0x3fc + +#define HDP_MUX_SHIFT(n) ((n) * 4) +#define HDP_MUX_MASK(n) (GENMASK(3, 0) << HDP_MUX_SHIFT(n)) +#define HDP_MUX_GPOVAL(n) (0xf << HDP_MUX_SHIFT(n)) + +#define HDP_PIN 8 +#define HDP_FUNC 16 +#define HDP_FUNC_TOTAL (HDP_PIN * HDP_FUNC) + +struct stm32_hdp { + struct device *dev; + void __iomem *base; + struct clk *clk; + struct pinctrl_dev *pctl_dev; + struct gpio_chip gpio_chip; + u32 mux_conf; + u32 gposet_conf; + const char * const *func_name; +}; + +static const struct pinctrl_pin_desc stm32_hdp_pins[] = { + PINCTRL_PIN(0, "HDP0"), + PINCTRL_PIN(1, "HDP1"), + PINCTRL_PIN(2, "HDP2"), + PINCTRL_PIN(3, "HDP3"), + PINCTRL_PIN(4, "HDP4"), + PINCTRL_PIN(5, "HDP5"), + PINCTRL_PIN(6, "HDP6"), + PINCTRL_PIN(7, "HDP7"), +}; + +static const char * const func_name_mp13[] = { + //HDP0 functions: + "pwr_pwrwake_sys", + "pwr_stop_forbidden", + "pwr_stdby_wakeup", + "pwr_encomp_vddcore", + "bsec_out_sec_niden", + "aiec_sys_wakeup", + "none", + "none", + "ddrctrl_lp_req", + "pwr_ddr_ret_enable_n", + "dts_clk_ptat", + "none", + "sram3ctrl_tamp_erase_act", + "none", + "none", + "gpoval0", + //HDP1 functions: + "pwr_sel_vth_vddcpu", + "pwr_mpu_ram_lowspeed", + "ca7_naxierrirq", + "pwr_okin_mr", + "bsec_out_sec_dbgen", + "aiec_c1_wakeup", + "rcc_pwrds_mpu", + "none", + "ddrctrl_dfi_ctrlupd_req", + "ddrctrl_cactive_ddrc_asr", + "none", + "none", + "sram3ctrl_hw_erase_act", + "nic400_s0_bready", + "none", + "gpoval1", + //HDP2 functions: + "pwr_pwrwake_mpu", + "pwr_mpu_clock_disable_ack", + "ca7_ndbgreset_i", + "none", + "bsec_in_rstcore_n", + "bsec_out_sec_bsc_dis", + "none", + "none", + "ddrctrl_dfi_init_complete", + "ddrctrl_perf_op_is_refresh", + "ddrctrl_gskp_dfi_lp_req", + "none", + "sram3ctrl_sw_erase_act", + "nic400_s0_bvalid", + "none", + "gpoval2", + //HDP3 functions: + "pwr_sel_vth_vddcore", + "pwr_mpu_clock_disable_req", + "ca7_npmuirq0", + "ca7_nfiqout0", + "bsec_out_sec_dftlock", + "bsec_out_sec_jtag_dis", + "rcc_pwrds_sys", + "sram3ctrl_tamp_erase_req", + "ddrctrl_stat_ddrc_reg_selfref_type0", + "none", + "dts_valobus1_0", + "dts_valobus2_0", + "tamp_potential_tamp_erfcfg", + "nic400_s0_wready", + "nic400_s0_rready", + "gpoval3", + //HDP4 functions: + "none", + "pwr_stop2_active", + "ca7_nl2reset_i", + "ca7_npreset_varm_i", + "bsec_out_sec_dften", + "bsec_out_sec_dbgswenable", + "eth1_out_pmt_intr_o", + "eth2_out_pmt_intr_o", + "ddrctrl_stat_ddrc_reg_selfref_type1", + "ddrctrl_cactive_0", + "dts_valobus1_1", + "dts_valobus2_1", + "tamp_nreset_sram_ercfg", + "nic400_s0_wlast", + "nic400_s0_rlast", + "gpoval4", + //HDP5 functions: + "ca7_standbywfil2", + "pwr_vth_vddcore_ack", + "ca7_ncorereset_i", + "ca7_nirqout0", + "bsec_in_pwrok", + "bsec_out_sec_deviceen", + "eth1_out_lpi_intr_o", + "eth2_out_lpi_intr_o", + "ddrctrl_cactive_ddrc", + "ddrctrl_wr_credit_cnt", + "dts_valobus1_2", + "dts_valobus2_2", + "pka_pka_itamp_out", + "nic400_s0_wvalid", + "nic400_s0_rvalid", + "gpoval5", + //HDP6 functions: + "ca7_standbywfe0", + "pwr_vth_vddcpu_ack", + "ca7_evento", + "none", + "bsec_in_tamper_det", + "bsec_out_sec_spniden", + "eth1_out_mac_speed_o1", + "eth2_out_mac_speed_o1", + "ddrctrl_csysack_ddrc", + "ddrctrl_lpr_credit_cnt", + "dts_valobus1_3", + "dts_valobus2_3", + "saes_tamper_out", + "nic400_s0_awready", + "nic400_s0_arready", + "gpoval6", + //HDP7 functions: + "ca7_standbywfi0", + "pwr_rcc_vcpu_rdy", + "ca7_eventi", + "ca7_dbgack0", + "bsec_out_fuse_ok", + "bsec_out_sec_spiden", + "eth1_out_mac_speed_o0", + "eth2_out_mac_speed_o0", + "ddrctrl_csysreq_ddrc", + "ddrctrl_hpr_credit_cnt", + "dts_valobus1_4", + "dts_valobus2_4", + "rng_tamper_out", + "nic400_s0_awavalid", + "nic400_s0_aravalid", + "gpoval7", +}; + +static const char * const func_name_mp15[] = { + //HDP0 functions: + "pwr_pwrwake_sys", + "cm4_sleepdeep", + "pwr_stdby_wkup", + "pwr_encomp_vddcore", + "bsec_out_sec_niden", + "none", + "rcc_cm4_sleepdeep", + "gpu_dbg7", + "ddrctrl_lp_req", + "pwr_ddr_ret_enable_n", + "dts_clk_ptat", + "none", + "none", + "none", + "none", + "gpoval0", + //HDP1 functions: + "pwr_pwrwake_mcu", + "cm4_halted", + "ca7_naxierrirq", + "pwr_okin_mr", + "bsec_out_sec_dbgen", + "exti_sys_wakeup", + "rcc_pwrds_mpu", + "gpu_dbg6", + "ddrctrl_dfi_ctrlupd_req", + "ddrctrl_cactive_ddrc_asr", + "none", + "none", + "none", + "none", + "none", + "gpoval1", + //HDP2 functions: + "pwr_pwrwake_mpu", + "cm4_rxev", + "ca7_npmuirq1", + "ca7_nfiqout1", + "bsec_in_rstcore_n", + "exti_c2_wakeup", + "rcc_pwrds_mcu", + "gpu_dbg5", + "ddrctrl_dfi_init_complete", + "ddrctrl_perf_op_is_refresh", + "ddrctrl_gskp_dfi_lp_req", + "none", + "none", + "none", + "none", + "gpoval2", + //HDP3 functions: + "pwr_sel_vth_vddcore", + "cm4_txev", + "ca7_npmuirq0", + "ca7_nfiqout0", + "bsec_out_sec_dftlock", + "exti_c1_wakeup", + "rcc_pwrds_sys", + "gpu_dbg4", + "ddrctrl_stat_ddrc_reg_selfref_type0", + "ddrctrl_cactive_1", + "dts_valobus1_0", + "dts_valobus2_0", + "none", + "none", + "none", + "gpoval3", + //HDP4 functions: + "pwr_mpu_pdds_not_cstbydis", + "cm4_sleeping", + "ca7_nreset1", + "ca7_nirqout1", + "bsec_out_sec_dften", + "bsec_out_sec_dbgswenable", + "eth_out_pmt_intr_o", + "gpu_dbg3", + "ddrctrl_stat_ddrc_reg_selfref_type1", + "ddrctrl_cactive_0", + "dts_valobus1_1", + "dts_valobus2_1", + "none", + "none", + "none", + "gpoval4", + //HDP5 functions: + "ca7_standbywfil2", + "pwr_vth_vddcore_ack", + "ca7_nreset0", + "ca7_nirqout0", + "bsec_in_pwrok", + "bsec_out_sec_deviceen", + "eth_out_lpi_intr_o", + "gpu_dbg2", + "ddrctrl_cactive_ddrc", + "ddrctrl_wr_credit_cnt", + "dts_valobus1_2", + "dts_valobus2_2", + "none", + "none", + "none", + "gpoval5", + //HDP6 functions: + "ca7_standbywfi1", + "ca7_standbywfe1", + "ca7_evento", + "ca7_dbgack1", + "none", + "bsec_out_sec_spniden", + "eth_out_mac_speed_o1", + "gpu_dbg1", + "ddrctrl_csysack_ddrc", + "ddrctrl_lpr_credit_cnt", + "dts_valobus1_3", + "dts_valobus2_3", + "none", + "none", + "none", + "gpoval6", + //HDP7 functions: + "ca7_standbywfi0", + "ca7_standbywfe0", + "none", + "ca7_dbgack0", + "bsec_out_fuse_ok", + "bsec_out_sec_spiden", + "eth_out_mac_speed_o0", + "gpu_dbg0", + "ddrctrl_csysreq_ddrc", + "ddrctrl_hpr_credit_cnt", + "dts_valobus1_4", + "dts_valobus2_4", + "none", + "none", + "none", + "gpoval7" +}; + +static const char * const func_name_mp25[] = { + //HDP0 functions: + "pwr_pwrwake_sys", + "cpu2_sleep_deep", + "bsec_out_tst_sdr_unlock_or_disable_scan", + "bsec_out_nidenm", + "bsec_out_nidena", + "cpu2_state_0", + "rcc_pwrds_sys", + "gpu_dbg7", + "ddrss_csysreq_ddrc", + "ddrss_dfi_phyupd_req", + "cpu3_sleep_deep", + "d2_gbl_per_clk_bus_req", + "pcie_usb_cxpl_debug_info_ei_0", + "pcie_usb_cxpl_debug_info_ei_8", + "d3_state_0", + "gpoval0", + //HDP1 functions: + "pwr_pwrwake_cpu2", + "cpu2_halted", + "cpu2_state_1", + "bsec_out_dbgenm", + "bsec_out_dbgena", + "exti1_sys_wakeup", + "rcc_pwrds_cpu2", + "gpu_dbg6", + "ddrss_csysack_ddrc", + "ddrss_dfi_phymstr_req", + "cpu3_halted", + "d2_gbl_per_dma_req", + "pcie_usb_cxpl_debug_info_ei_1", + "pcie_usb_cxpl_debug_info_ei_9", + "d3_state_1", + "gpoval1", + //HDP2 functions: + "pwr_pwrwake_cpu1", + "cpu2_rxev", + "cpu1_npumirq1", + "cpu1_nfiqout1", + "bsec_out_shdbgen", + "exti1_cpu2_wakeup", + "rcc_pwrds_cpu1", + "gpu_dbg5", + "ddrss_cactive_ddrc", + "ddrss_dfi_lp_req", + "cpu3_rxev", + "hpdma1_clk_bus_req", + "pcie_usb_cxpl_debug_info_ei_2", + "pcie_usb_cxpl_debug_info_ei_10", + "d3_state_2", + "gpoval2", + //HDP3 functions: + "pwr_sel_vth_vddcpu", + "cpu2_txev", + "cpu1_npumirq0", + "cpu1_nfiqout0", + "bsec_out_ddbgen", + "exti1_cpu1_wakeup", + "cpu3_state_0", + "gpu_dbg4", + "ddrss_mcdcg_en", + "ddrss_dfi_freq_0", + "cpu3_txev", + "hpdma2_clk_bus_req", + "pcie_usb_cxpl_debug_info_ei_3", + "pcie_usb_cxpl_debug_info_ei_11", + "d1_state_0", + "gpoval3", + //HDP4 functions: + "pwr_sel_vth_vddcore", + "cpu2_sleeping", + "cpu1_evento", + "cpu1_nirqout1", + "bsec_out_spnidena", + "exti2_d3_wakeup", + "eth1_out_pmt_intr_o", + "gpu_dbg3", + "ddrss_dphycg_en", + "ddrss_obsp0", + "cpu3_sleeping", + "hpdma3_clk_bus_req", + "pcie_usb_cxpl_debug_info_ei_4", + "pcie_usb_cxpl_debug_info_ei_12", + "d1_state_1", + "gpoval4", + //HDP5 functions: + "cpu1_standby_wfil2", + "none", + "none", + "cpu1_nirqout0", + "bsec_out_spidena", + "exti2_cpu3_wakeup", + "eth1_out_lpi_intr_o", + "gpu_dbg2", + "ddrctrl_dfi_init_start", + "ddrss_obsp1", + "cpu3_state_1", + "d3_gbl_per_clk_bus_req", + "pcie_usb_cxpl_debug_info_ei_5", + "pcie_usb_cxpl_debug_info_ei_13", + "d1_state_2", + "gpoval5", + //HDP6 functions: + "cpu1_standby_wfi1", + "cpu1_standby_wfe1", + "cpu1_halted1", + "cpu1_naxierrirq", + "bsec_out_spnidenm", + "exti2_cpu2_wakeup", + "eth2_out_pmt_intr_o", + "gpu_dbg1", + "ddrss_dfi_init_complete", + "ddrss_obsp2", + "d2_state_0", + "d3_gbl_per_dma_req", + "pcie_usb_cxpl_debug_info_ei_6", + "pcie_usb_cxpl_debug_info_ei_14", + "cpu1_state_0", + "gpoval6", + //HDP7 functions: + "cpu1_standby_wfi0", + "cpu1_standby_wfe0", + "cpu1_halted0", + "none", + "bsec_out_spidenm", + "exti2_cpu1__wakeup", + "eth2_out_lpi_intr_o", + "gpu_dbg0", + "ddrss_dfi_ctrlupd_req", + "ddrss_obsp3", + "d2_state_1", + "lpdma1_clk_bus_req", + "pcie_usb_cxpl_debug_info_ei_7", + "pcie_usb_cxpl_debug_info_ei_15", + "cpu1_state_1", + "gpoval7", +}; + +static const char * const stm32_hdp_pins_group[] = { + "HDP0", + "HDP1", + "HDP2", + "HDP3", + "HDP4", + "HDP5", + "HDP6", + "HDP7" +}; + +static int stm32_hdp_gpio_get_direction(struct gpio_chip *gc, unsigned int offset) +{ + return GPIO_LINE_DIRECTION_OUT; +} + +static int stm32_hdp_gpio_get(struct gpio_chip *gc, unsigned int offset) +{ + struct stm32_hdp *hdp = gpiochip_get_data(gc); + + if (((hdp->mux_conf & HDP_MUX_MASK(offset))) == HDP_MUX_GPOVAL(offset)) + return !!(readl_relaxed(hdp->base + HDP_GPOVAL) & BIT(offset)); + else + return !!(readl_relaxed(hdp->base + HDP_VAL) & BIT(offset)); +} + +static void stm32_hdp_gpio_set(struct gpio_chip *gc, unsigned int offset, int value) +{ + struct stm32_hdp *hdp = gpiochip_get_data(gc); + + if (value) + writel_relaxed(BIT(offset), hdp->base + HDP_GPOSET); + else + writel_relaxed(BIT(offset), hdp->base + HDP_GPOCLR); +} + +static int stm32_hdp_pinctrl_get_groups_count(struct pinctrl_dev *pctldev) +{ + return ARRAY_SIZE(stm32_hdp_pins); +} + +static const char *stm32_hdp_pinctrl_get_group_name(struct pinctrl_dev *pctldev, + unsigned int selector) +{ + return stm32_hdp_pins[selector].name; +} + +static int stm32_hdp_pinctrl_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selector, + const unsigned int **pins, unsigned int *num_pins) +{ + *pins = &stm32_hdp_pins[selector].number; + *num_pins = 1; + + return 0; +} + +static const struct pinctrl_ops stm32_hdp_pinctrl_ops = { + .get_groups_count = stm32_hdp_pinctrl_get_groups_count, + .get_group_name = stm32_hdp_pinctrl_get_group_name, + .get_group_pins = stm32_hdp_pinctrl_get_group_pins, + .dt_node_to_map = pinconf_generic_dt_node_to_map_all, + .dt_free_map = pinconf_generic_dt_free_map, +}; + +static int stm32_hdp_pinmux_get_functions_count(struct pinctrl_dev *pctldev) +{ + return HDP_FUNC_TOTAL; +} + +static const char *stm32_hdp_pinmux_get_function_name(struct pinctrl_dev *pctldev, + unsigned int selector) +{ + struct stm32_hdp *hdp = pinctrl_dev_get_drvdata(pctldev); + + return hdp->func_name[selector]; +} + +static int stm32_hdp_pinmux_get_function_groups(struct pinctrl_dev *pctldev, unsigned int selector, + const char *const **groups, + unsigned int *num_groups) +{ + u32 index = selector / HDP_FUNC; + + *groups = &stm32_hdp_pins[index].name; + *num_groups = 1; + + return 0; +} + +static int stm32_hdp_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector, + unsigned int group_selector) +{ + struct stm32_hdp *hdp = pinctrl_dev_get_drvdata(pctldev); + + unsigned int pin = stm32_hdp_pins[group_selector].number; + u32 mux; + + func_selector %= HDP_FUNC; + mux = readl_relaxed(hdp->base + HDP_MUX); + mux &= ~HDP_MUX_MASK(pin); + mux |= func_selector << HDP_MUX_SHIFT(pin); + + writel_relaxed(mux, hdp->base + HDP_MUX); + hdp->mux_conf = mux; + + return 0; +} + +static const struct pinmux_ops stm32_hdp_pinmux_ops = { + .get_functions_count = stm32_hdp_pinmux_get_functions_count, + .get_function_name = stm32_hdp_pinmux_get_function_name, + .get_function_groups = stm32_hdp_pinmux_get_function_groups, + .set_mux = stm32_hdp_pinmux_set_mux, + .gpio_set_direction = NULL, +}; + +static struct pinctrl_desc stm32_hdp_pdesc = { + .name = DRIVER_NAME, + .pins = stm32_hdp_pins, + .npins = ARRAY_SIZE(stm32_hdp_pins), + .pctlops = &stm32_hdp_pinctrl_ops, + .pmxops = &stm32_hdp_pinmux_ops, + .owner = THIS_MODULE, +}; + +static const struct of_device_id stm32_hdp_of_match[] = { + { + .compatible = "st,stm32mp131-hdp", + .data = &func_name_mp13, + }, + { + .compatible = "st,stm32mp151-hdp", + .data = &func_name_mp15, + }, + { + .compatible = "st,stm32mp251-hdp", + .data = &func_name_mp25, + }, + {} +}; +MODULE_DEVICE_TABLE(of, stm32_hdp_of_match); + +static int stm32_hdp_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct stm32_hdp *hdp; + u8 version; + int err; + + hdp = devm_kzalloc(dev, sizeof(*hdp), GFP_KERNEL); + if (!hdp) + return -ENOMEM; + hdp->dev = dev; + + platform_set_drvdata(pdev, hdp); + + hdp->base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(hdp->base)) + return PTR_ERR(hdp->base); + + hdp->func_name = of_device_get_match_data(dev); + if (!hdp->func_name) + return dev_err_probe(dev, -ENODEV, "No function name provided\n"); + + hdp->clk = devm_clk_get_enabled(dev, NULL); + if (IS_ERR(hdp->clk)) + return dev_err_probe(dev, PTR_ERR(hdp->clk), "No HDP clock provided\n"); + + err = devm_pinctrl_register_and_init(dev, &stm32_hdp_pdesc, hdp, &hdp->pctl_dev); + if (err) + return dev_err_probe(dev, err, "Failed to register pinctrl\n"); + + err = pinctrl_enable(hdp->pctl_dev); + if (err) + return dev_err_probe(dev, err, "Failed to enable pinctrl\n"); + + hdp->gpio_chip.label = "stm32-hdp"; + hdp->gpio_chip.parent = dev; + hdp->gpio_chip.get_direction = stm32_hdp_gpio_get_direction; + hdp->gpio_chip.get = stm32_hdp_gpio_get; + hdp->gpio_chip.set = stm32_hdp_gpio_set; + hdp->gpio_chip.base = -1; + hdp->gpio_chip.ngpio = ARRAY_SIZE(stm32_hdp_pins); + hdp->gpio_chip.can_sleep = true; + hdp->gpio_chip.names = stm32_hdp_pins_group; + + err = devm_gpiochip_add_data(dev, &hdp->gpio_chip, hdp); + if (err) + return dev_err_probe(dev, err, "Failed to add gpiochip\n"); + + writel_relaxed(HDP_CTRL_ENABLE, hdp->base + HDP_CTRL); + + version = readl_relaxed(hdp->base + HDP_VERR); + dev_dbg(dev, "STM32 HDP version %u.%u initialized\n", version >> 4, version & 0x0f); + + return 0; +} + +static void stm32_hdp_remove(struct platform_device *pdev) +{ + struct stm32_hdp *hdp = platform_get_drvdata(pdev); + + writel_relaxed(HDP_CTRL_DISABLE, hdp->base + HDP_CTRL); +} + +static int stm32_hdp_suspend(struct device *dev) +{ + struct stm32_hdp *hdp = dev_get_drvdata(dev); + + hdp->gposet_conf = readl_relaxed(hdp->base + HDP_GPOSET); + + pinctrl_pm_select_sleep_state(dev); + + clk_disable_unprepare(hdp->clk); + + return 0; +} + +static int stm32_hdp_resume(struct device *dev) +{ + struct stm32_hdp *hdp = dev_get_drvdata(dev); + int err; + + err = clk_prepare_enable(hdp->clk); + if (err) { + dev_err(dev, "Failed to prepare_enable clk (%d)\n", err); + return err; + } + + writel_relaxed(HDP_CTRL_ENABLE, hdp->base + HDP_CTRL); + writel_relaxed(hdp->gposet_conf, hdp->base + HDP_GPOSET); + writel_relaxed(hdp->mux_conf, hdp->base + HDP_MUX); + + pinctrl_pm_select_default_state(dev); + + return 0; +} + +DEFINE_SIMPLE_DEV_PM_OPS(stm32_hdp_pm_ops, stm32_hdp_suspend, stm32_hdp_resume); + +static struct platform_driver stm32_hdp_driver = { + .probe = stm32_hdp_probe, + .remove = stm32_hdp_remove, + .driver = { + .name = DRIVER_NAME, + .pm = pm_sleep_ptr(&stm32_hdp_pm_ops), + .of_match_table = stm32_hdp_of_match, + } +}; + +module_platform_driver(stm32_hdp_driver); + +MODULE_AUTHOR("Clément Le Goffic"); +MODULE_DESCRIPTION("STMicroelectronics STM32 Hardware Debug Port driver"); +MODULE_LICENSE("GPL"); -- 2.43.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH v2 2/8] pinctrl: stm32: Introduce HDP driver 2025-05-20 15:02 ` [PATCH v2 2/8] pinctrl: stm32: Introduce HDP driver Clément Le Goffic @ 2025-05-20 22:34 ` Linus Walleij 2025-05-21 9:49 ` Clement LE GOFFIC 2025-05-21 21:34 ` kernel test robot 1 sibling, 1 reply; 18+ messages in thread From: Linus Walleij @ 2025-05-20 22:34 UTC (permalink / raw) To: Clément Le Goffic Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski, linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel Hi Clément, thanks for your patch! On Tue, May 20, 2025 at 5:04 PM Clément Le Goffic <clement.legoffic@foss.st.com> wrote: > This patch introduce the driver for the Hardware Debug Port available on > STM32MP platforms. The HDP allows the observation of internal SoC > signals by using multiplexers. Each HDP port can provide up to 16 > internal signals (one of them can be software controlled as a GPO). > > Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> (...) > +static int stm32_hdp_gpio_get_direction(struct gpio_chip *gc, unsigned int offset) > +{ > + return GPIO_LINE_DIRECTION_OUT; > +} That's reasonable. > +static int stm32_hdp_gpio_get(struct gpio_chip *gc, unsigned int offset) > +{ > + struct stm32_hdp *hdp = gpiochip_get_data(gc); > + > + if (((hdp->mux_conf & HDP_MUX_MASK(offset))) == HDP_MUX_GPOVAL(offset)) > + return !!(readl_relaxed(hdp->base + HDP_GPOVAL) & BIT(offset)); > + else > + return !!(readl_relaxed(hdp->base + HDP_VAL) & BIT(offset)); > +} ...but you still make it possible to read the value of the line if it's not muxed as GPO? Should it not stm32_hdp_gpio_get_direction() return GPIO_LINE_DIRECTION_IN if HDP_MUX_MASK(offset))) != HDP_MUX_GPOVAL(offset)? > +static void stm32_hdp_gpio_set(struct gpio_chip *gc, unsigned int offset, int value) > +{ > + struct stm32_hdp *hdp = gpiochip_get_data(gc); > + > + if (value) > + writel_relaxed(BIT(offset), hdp->base + HDP_GPOSET); > + else > + writel_relaxed(BIT(offset), hdp->base + HDP_GPOCLR); > +} Can't you just use GPIO_GENERIC for this? bgpio_init(gc, dev, ARRAY_SIZE(stm32_hdp_pins), // == 8 hdp->base + HDP_VAL, hdp->base + HDP_GPOSET, hdp->base + HDP_GPOCLR, NULL, NULL, 0); The default behaviour of GPIO MMIO is to read the output register for the value if the line is in output mode. You may wanna override the .get_direction() callback after bgpio_init() and before registering the chip, either with what you have or what I described above. Yours, Linus Walleij ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 2/8] pinctrl: stm32: Introduce HDP driver 2025-05-20 22:34 ` Linus Walleij @ 2025-05-21 9:49 ` Clement LE GOFFIC 2025-05-21 10:14 ` Clement LE GOFFIC 0 siblings, 1 reply; 18+ messages in thread From: Clement LE GOFFIC @ 2025-05-21 9:49 UTC (permalink / raw) To: Linus Walleij Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski, linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel On 5/21/25 00:34, Linus Walleij wrote: > Hi Clément, > > thanks for your patch! > > On Tue, May 20, 2025 at 5:04 PM Clément Le Goffic > <clement.legoffic@foss.st.com> wrote: > >> This patch introduce the driver for the Hardware Debug Port available on >> STM32MP platforms. The HDP allows the observation of internal SoC >> signals by using multiplexers. Each HDP port can provide up to 16 >> internal signals (one of them can be software controlled as a GPO). >> >> Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> > > (...) >> +static int stm32_hdp_gpio_get_direction(struct gpio_chip *gc, unsigned int offset) >> +{ >> + return GPIO_LINE_DIRECTION_OUT; >> +} > > That's reasonable. > >> +static int stm32_hdp_gpio_get(struct gpio_chip *gc, unsigned int offset) >> +{ >> + struct stm32_hdp *hdp = gpiochip_get_data(gc); >> + >> + if (((hdp->mux_conf & HDP_MUX_MASK(offset))) == HDP_MUX_GPOVAL(offset)) >> + return !!(readl_relaxed(hdp->base + HDP_GPOVAL) & BIT(offset)); >> + else >> + return !!(readl_relaxed(hdp->base + HDP_VAL) & BIT(offset)); >> +} > > ...but you still make it possible to read the value of the line > if it's not muxed as GPO? > > Should it not stm32_hdp_gpio_get_direction() return > GPIO_LINE_DIRECTION_IN if HDP_MUX_MASK(offset))) != HDP_MUX_GPOVAL(offset)? Hi, oops, you're right ! > >> +static void stm32_hdp_gpio_set(struct gpio_chip *gc, unsigned int offset, int value) >> +{ >> + struct stm32_hdp *hdp = gpiochip_get_data(gc); >> + >> + if (value) >> + writel_relaxed(BIT(offset), hdp->base + HDP_GPOSET); >> + else >> + writel_relaxed(BIT(offset), hdp->base + HDP_GPOCLR); >> +} > > Can't you just use GPIO_GENERIC for this? > > bgpio_init(gc, dev, ARRAY_SIZE(stm32_hdp_pins), // == 8 > hdp->base + HDP_VAL, > hdp->base + HDP_GPOSET, > hdp->base + HDP_GPOCLR, > NULL, > NULL, > 0); > > The default behaviour of GPIO MMIO is to read the output register > for the value if the line is in output mode. > > You may wanna override the .get_direction() callback after bgpio_init() > and before registering the chip, either with what you have or what > I described above. I didn't know about it, I'll take a look and provide a V3. Thank you, Clément > Yours, > Linus Walleij ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 2/8] pinctrl: stm32: Introduce HDP driver 2025-05-21 9:49 ` Clement LE GOFFIC @ 2025-05-21 10:14 ` Clement LE GOFFIC 0 siblings, 0 replies; 18+ messages in thread From: Clement LE GOFFIC @ 2025-05-21 10:14 UTC (permalink / raw) To: Linus Walleij Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski, linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel On 5/21/25 11:49, Clement LE GOFFIC wrote: > On 5/21/25 00:34, Linus Walleij wrote: >> Hi Clément, >> >> thanks for your patch! >> >> On Tue, May 20, 2025 at 5:04 PM Clément Le Goffic >> <clement.legoffic@foss.st.com> wrote: >> >>> This patch introduce the driver for the Hardware Debug Port available on >>> STM32MP platforms. The HDP allows the observation of internal SoC >>> signals by using multiplexers. Each HDP port can provide up to 16 >>> internal signals (one of them can be software controlled as a GPO). >>> >>> Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> >> >> (...) >>> +static int stm32_hdp_gpio_get_direction(struct gpio_chip *gc, >>> unsigned int offset) >>> +{ >>> + return GPIO_LINE_DIRECTION_OUT; >>> +} >> >> That's reasonable. >> >>> +static int stm32_hdp_gpio_get(struct gpio_chip *gc, unsigned int >>> offset) >>> +{ >>> + struct stm32_hdp *hdp = gpiochip_get_data(gc); >>> + >>> + if (((hdp->mux_conf & HDP_MUX_MASK(offset))) == >>> HDP_MUX_GPOVAL(offset)) >>> + return !!(readl_relaxed(hdp->base + HDP_GPOVAL) & >>> BIT(offset)); >>> + else >>> + return !!(readl_relaxed(hdp->base + HDP_VAL) & >>> BIT(offset)); >>> +} >> >> ...but you still make it possible to read the value of the line >> if it's not muxed as GPO? >> >> Should it not stm32_hdp_gpio_get_direction() return >> GPIO_LINE_DIRECTION_IN if HDP_MUX_MASK(offset))) != >> HDP_MUX_GPOVAL(offset)? > > Hi, oops, you're right ! I've answer too quickly. All the pins are "out" in fact. The hardware is not able to read input signal. I wanted to implement a way to read the register value in any case by leaving the line direction unchanged. >> >>> +static void stm32_hdp_gpio_set(struct gpio_chip *gc, unsigned int >>> offset, int value) >>> +{ >>> + struct stm32_hdp *hdp = gpiochip_get_data(gc); >>> + >>> + if (value) >>> + writel_relaxed(BIT(offset), hdp->base + HDP_GPOSET); >>> + else >>> + writel_relaxed(BIT(offset), hdp->base + HDP_GPOCLR); >>> +} >> >> Can't you just use GPIO_GENERIC for this? >> >> bgpio_init(gc, dev, ARRAY_SIZE(stm32_hdp_pins), // == 8 >> hdp->base + HDP_VAL, >> hdp->base + HDP_GPOSET, >> hdp->base + HDP_GPOCLR, >> NULL, >> NULL, >> 0); >> >> The default behaviour of GPIO MMIO is to read the output register >> for the value if the line is in output mode. >> >> You may wanna override the .get_direction() callback after bgpio_init() >> and before registering the chip, either with what you have or what >> I described above. > > I didn't know about it, I'll take a look and provide a V3. > > Thank you, > > Clément > >> Yours, >> Linus Walleij > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 2/8] pinctrl: stm32: Introduce HDP driver 2025-05-20 15:02 ` [PATCH v2 2/8] pinctrl: stm32: Introduce HDP driver Clément Le Goffic 2025-05-20 22:34 ` Linus Walleij @ 2025-05-21 21:34 ` kernel test robot 1 sibling, 0 replies; 18+ messages in thread From: kernel test robot @ 2025-05-21 21:34 UTC (permalink / raw) To: Clément Le Goffic, Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski Cc: oe-kbuild-all, linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel, Clément Le Goffic Hi Clément, kernel test robot noticed the following build warnings: [auto build test WARNING on 09fac5c576bbff764dddf2baca0038b359376fd8] url: https://github.com/intel-lab-lkp/linux/commits/Cl-ment-Le-Goffic/dt-bindings-pinctrl-stm32-Introduce-HDP/20250520-230751 base: 09fac5c576bbff764dddf2baca0038b359376fd8 patch link: https://lore.kernel.org/r/20250520-hdp-upstream-v2-2-53f6b8b5ffc8%40foss.st.com patch subject: [PATCH v2 2/8] pinctrl: stm32: Introduce HDP driver config: arc-randconfig-r121-20250522 (https://download.01.org/0day-ci/archive/20250522/202505220509.cwmpJvcz-lkp@intel.com/config) compiler: arc-linux-gcc (GCC) 14.2.0 reproduce: (https://download.01.org/0day-ci/archive/20250522/202505220509.cwmpJvcz-lkp@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 <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202505220509.cwmpJvcz-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/pinctrl/stm32/pinctrl-stm32-hdp.c:720:1: sparse: sparse: symbol 'stm32_hdp_pm_ops' was not declared. Should it be static? vim +/stm32_hdp_pm_ops +720 drivers/pinctrl/stm32/pinctrl-stm32-hdp.c 719 > 720 DEFINE_SIMPLE_DEV_PM_OPS(stm32_hdp_pm_ops, stm32_hdp_suspend, stm32_hdp_resume); 721 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 3/8] MAINTAINERS: Add Clément Le Goffic as STM32 HDP maintainer 2025-05-20 15:02 [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 2/8] pinctrl: stm32: Introduce HDP driver Clément Le Goffic @ 2025-05-20 15:02 ` Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 4/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp13 Clément Le Goffic ` (5 subsequent siblings) 8 siblings, 0 replies; 18+ messages in thread From: Clément Le Goffic @ 2025-05-20 15:02 UTC (permalink / raw) To: Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski Cc: linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel, Clément Le Goffic Add Clément Le Goffic as STM32 HDP maintainer. Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> --- MAINTAINERS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index f21f1dabb5fe..c0c30fe00a2a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -23023,6 +23023,12 @@ F: drivers/bus/stm32_etzpc.c F: drivers/bus/stm32_firewall.c F: drivers/bus/stm32_rifsc.c +ST STM32 HDP PINCTRL DRIVER +M: Clément Le Goffic <clement.legoffic@foss.st.com> +S: Maintained +F: Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl-hdp.yaml +F: drivers/pinctrl/stm32/pinctrl-stm32-hdp.c + ST STM32 I2C/SMBUS DRIVER M: Pierre-Yves MORDRET <pierre-yves.mordret@foss.st.com> M: Alain Volmat <alain.volmat@foss.st.com> -- 2.43.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 4/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp13 2025-05-20 15:02 [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Clément Le Goffic ` (2 preceding siblings ...) 2025-05-20 15:02 ` [PATCH v2 3/8] MAINTAINERS: Add Clément Le Goffic as STM32 HDP maintainer Clément Le Goffic @ 2025-05-20 15:02 ` Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 5/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp15 Clément Le Goffic ` (4 subsequent siblings) 8 siblings, 0 replies; 18+ messages in thread From: Clément Le Goffic @ 2025-05-20 15:02 UTC (permalink / raw) To: Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski Cc: linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel, Clément Le Goffic Add the hdp devicetree node for stm32mp13 SoC family Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> --- arch/arm/boot/dts/st/stm32mp131.dtsi | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm/boot/dts/st/stm32mp131.dtsi b/arch/arm/boot/dts/st/stm32mp131.dtsi index 8512a6e46b33..b0537bcdb9d5 100644 --- a/arch/arm/boot/dts/st/stm32mp131.dtsi +++ b/arch/arm/boot/dts/st/stm32mp131.dtsi @@ -951,6 +951,12 @@ dts: thermal@50028000 { clocks = <&rcc DTS>; clock-names = "pclk"; #thermal-sensor-cells = <0>; + }; + + hdp: pinctrl@5002a000 { + compatible = "st,stm32mp131-hdp"; + reg = <0x5002a000 0x400>; + clocks = <&rcc HDP>; status = "disabled"; }; -- 2.43.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 5/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp15 2025-05-20 15:02 [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Clément Le Goffic ` (3 preceding siblings ...) 2025-05-20 15:02 ` [PATCH v2 4/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp13 Clément Le Goffic @ 2025-05-20 15:02 ` Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 6/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp25 Clément Le Goffic ` (3 subsequent siblings) 8 siblings, 0 replies; 18+ messages in thread From: Clément Le Goffic @ 2025-05-20 15:02 UTC (permalink / raw) To: Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski Cc: linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel, Clément Le Goffic Add the hdp devicetree node for stm32mp15 SoC family Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> --- arch/arm/boot/dts/st/stm32mp151.dtsi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm/boot/dts/st/stm32mp151.dtsi b/arch/arm/boot/dts/st/stm32mp151.dtsi index 0daa8ffe2ff5..b1b568dfd126 100644 --- a/arch/arm/boot/dts/st/stm32mp151.dtsi +++ b/arch/arm/boot/dts/st/stm32mp151.dtsi @@ -270,6 +270,13 @@ dts: thermal@50028000 { status = "disabled"; }; + hdp: pinctrl@5002a000 { + compatible = "st,stm32mp151-hdp"; + reg = <0x5002a000 0x400>; + clocks = <&rcc HDP>; + status = "disabled"; + }; + mdma1: dma-controller@58000000 { compatible = "st,stm32h7-mdma"; reg = <0x58000000 0x1000>; -- 2.43.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 6/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp25 2025-05-20 15:02 [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Clément Le Goffic ` (4 preceding siblings ...) 2025-05-20 15:02 ` [PATCH v2 5/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp15 Clément Le Goffic @ 2025-05-20 15:02 ` Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 7/8] ARM: dts: stm32: add alternate pinmux for HDP pin and add HDP pinctrl node Clément Le Goffic ` (2 subsequent siblings) 8 siblings, 0 replies; 18+ messages in thread From: Clément Le Goffic @ 2025-05-20 15:02 UTC (permalink / raw) To: Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski Cc: linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel, Clément Le Goffic Add the hdp devicetree node for stm32mp25 SoC family Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> --- arch/arm64/boot/dts/st/stm32mp251.dtsi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm64/boot/dts/st/stm32mp251.dtsi b/arch/arm64/boot/dts/st/stm32mp251.dtsi index 87110f91e489..0fd79acd458f 100644 --- a/arch/arm64/boot/dts/st/stm32mp251.dtsi +++ b/arch/arm64/boot/dts/st/stm32mp251.dtsi @@ -917,6 +917,13 @@ package_otp@1e8 { }; }; + hdp: pinctrl@44090000 { + compatible = "st,stm32mp251-hdp"; + reg = <0x44090000 0x400>; + clocks = <&rcc CK_BUS_HDP>; + status = "disabled"; + }; + rcc: clock-controller@44200000 { compatible = "st,stm32mp25-rcc"; reg = <0x44200000 0x10000>; -- 2.43.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 7/8] ARM: dts: stm32: add alternate pinmux for HDP pin and add HDP pinctrl node 2025-05-20 15:02 [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Clément Le Goffic ` (5 preceding siblings ...) 2025-05-20 15:02 ` [PATCH v2 6/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp25 Clément Le Goffic @ 2025-05-20 15:02 ` Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 8/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp157c-dk2 board Clément Le Goffic 2025-05-20 21:09 ` [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Rob Herring (Arm) 8 siblings, 0 replies; 18+ messages in thread From: Clément Le Goffic @ 2025-05-20 15:02 UTC (permalink / raw) To: Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski Cc: linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel, Clément Le Goffic Introduce hdp node to output a user defined value on port hdp2. Add pinctrl nodes to be able to output this signal on one SoC pin. Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> --- arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi b/arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi index 40605ea85ee1..4a31e9f7a897 100644 --- a/arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi +++ b/arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi @@ -5,6 +5,14 @@ */ #include <dt-bindings/pinctrl/stm32-pinfunc.h> +&hdp { + /omit-if-no-ref/ + hdp2_gpo: hdp2-pins { + function = "gpoval2"; + pins = "HDP2"; + }; +}; + &pinctrl { /omit-if-no-ref/ adc1_ain_pins_a: adc1-ain-0 { @@ -731,6 +739,23 @@ pins { }; }; + /omit-if-no-ref/ + hdp2_pins_a: hdp2-0 { + pins { + pinmux = <STM32_PINMUX('E', 13, AF0)>; /* HDP2 */ + bias-disable; + drive-push-pull; + slew-rate = <2>; + }; + }; + + /omit-if-no-ref/ + hdp2_sleep_pins_a: hdp2-sleep-0 { + pins { + pinmux = <STM32_PINMUX('E', 13, ANALOG)>; /* HDP2 */ + }; + }; + /omit-if-no-ref/ i2c1_pins_a: i2c1-0 { pins { -- 2.43.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 8/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp157c-dk2 board 2025-05-20 15:02 [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Clément Le Goffic ` (6 preceding siblings ...) 2025-05-20 15:02 ` [PATCH v2 7/8] ARM: dts: stm32: add alternate pinmux for HDP pin and add HDP pinctrl node Clément Le Goffic @ 2025-05-20 15:02 ` Clément Le Goffic 2025-05-20 21:09 ` [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Rob Herring (Arm) 8 siblings, 0 replies; 18+ messages in thread From: Clément Le Goffic @ 2025-05-20 15:02 UTC (permalink / raw) To: Linus Walleij, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin, Alexandre Torgue, Bartosz Golaszewski Cc: linux-kernel, linux-gpio, devicetree, linux-stm32, linux-arm-kernel, Clément Le Goffic On the stm32mp157fc-dk2 board, we can observe the hdp GPOVAL function on SoC pin E13 accessible on the pin 5 on the Arduino connector CN13. Add the relevant configuration but keep it disabled as it's used for debug only. Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> --- arch/arm/boot/dts/st/stm32mp157c-dk2.dts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm/boot/dts/st/stm32mp157c-dk2.dts b/arch/arm/boot/dts/st/stm32mp157c-dk2.dts index 324f7bb988d1..8a8fdf338d1d 100644 --- a/arch/arm/boot/dts/st/stm32mp157c-dk2.dts +++ b/arch/arm/boot/dts/st/stm32mp157c-dk2.dts @@ -63,6 +63,12 @@ &dsi_out { remote-endpoint = <&panel_in>; }; +&hdp { + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&hdp2_gpo &hdp2_pins_a>; + pinctrl-1 = <&hdp2_sleep_pins_a>; +}; + &i2c1 { touchscreen@38 { compatible = "focaltech,ft6236"; -- 2.43.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH v2 0/8] Introduce HDP support for STM32MP platforms 2025-05-20 15:02 [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Clément Le Goffic ` (7 preceding siblings ...) 2025-05-20 15:02 ` [PATCH v2 8/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp157c-dk2 board Clément Le Goffic @ 2025-05-20 21:09 ` Rob Herring (Arm) 8 siblings, 0 replies; 18+ messages in thread From: Rob Herring (Arm) @ 2025-05-20 21:09 UTC (permalink / raw) To: Clément Le Goffic Cc: linux-arm-kernel, Maxime Coquelin, Bartosz Golaszewski, linux-stm32, devicetree, Conor Dooley, Alexandre Torgue, Krzysztof Kozlowski, Linus Walleij, linux-gpio, linux-kernel On Tue, 20 May 2025 17:02:27 +0200, Clément Le Goffic wrote: > This patch series introduces the Hardware Debug Port (HDP) support for > STM32MP platforms. > > It includes the addition of device tree bindings, the HDP driver, > and updates to the device tree files for STM32MP13, STM32MP15, > and STM32MP25 SoCs. > The series also updates the MAINTAINERS file to include myself as the > maintainer for the STM32 HDP driver and adds the necessary > pinmux configurations for HDP pins on STM32MP157C-DK2 as example. > > Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com> > --- > Changes in v2: > - Remove bindings header files with function name as #define > - Add match_data with function name for three compatible: > "st,stm32mp131-hdp", "st,stm32mp151-hdp" and "st,stm32mp251-hdp". > - Rework a bit the driver to use match_data. > - Remove the use of `dev_err_probe(` in the resume ops. > - Remove `MODULE_ALIAS(`. > - Remove the vertical bar in bindings description paragraph. > - Fix an error in the `pinctrl-0` parameter of the binding example, it > was refering a node that wasn't existing. > - Use uppercase pin names. > - Link to v1: https://lore.kernel.org/r/20250225-hdp-upstream-v1-0-9d049c65330a@foss.st.com > > --- > Clément Le Goffic (8): > dt-bindings: pinctrl: stm32: Introduce HDP > pinctrl: stm32: Introduce HDP driver > MAINTAINERS: Add Clément Le Goffic as STM32 HDP maintainer > ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp13 > ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp15 > ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp25 > ARM: dts: stm32: add alternate pinmux for HDP pin and add HDP pinctrl node > ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp157c-dk2 board > > .../bindings/pinctrl/st,stm32-pinctrl-hdp.yaml | 188 ++++++ > MAINTAINERS | 6 + > arch/arm/boot/dts/st/stm32mp131.dtsi | 6 + > arch/arm/boot/dts/st/stm32mp15-pinctrl.dtsi | 25 + > arch/arm/boot/dts/st/stm32mp151.dtsi | 7 + > arch/arm/boot/dts/st/stm32mp157c-dk2.dts | 6 + > arch/arm64/boot/dts/st/stm32mp251.dtsi | 7 + > drivers/pinctrl/stm32/Kconfig | 14 + > drivers/pinctrl/stm32/Makefile | 1 + > drivers/pinctrl/stm32/pinctrl-stm32-hdp.c | 736 +++++++++++++++++++++ > 10 files changed, 996 insertions(+) > --- > base-commit: 09fac5c576bbff764dddf2baca0038b359376fd8 > change-id: 20250224-hdp-upstream-622e5da14a9f > > Best regards, > -- > Clément Le Goffic <clement.legoffic@foss.st.com> > > > My bot found new DTB warnings on the .dts files added or changed in this series. Some warnings may be from an existing SoC .dtsi. Or perhaps the warnings are fixed by another series. Ultimately, it is up to the platform maintainer whether these warnings are acceptable or not. No need to reply unless the platform maintainer has comments. If you already ran DT checks and didn't see these error(s), then make sure dt-schema is up to date: pip3 install dtschema --upgrade This patch series was applied (using b4) to base: Base: using specified base-commit 09fac5c576bbff764dddf2baca0038b359376fd8 If this is not the correct base, please add 'base-commit' tag (or use b4 which does this automatically) New warnings running 'make CHECK_DTBS=y for arch/arm/boot/dts/st/' for 20250520-hdp-upstream-v2-0-53f6b8b5ffc8@foss.st.com: arch/arm/boot/dts/st/ste-snowball.dtb: / (calaosystems,snowball-a9500): memory: False schema does not allow {'device_type': ['memory'], 'reg': [[0, 536870912]]} from schema $id: http://devicetree.org/schemas/root-node.yaml# arch/arm/boot/dts/st/ste-ux500-samsung-kyle.dtb: /soc/gpio@8000e100: failed to match any schema with compatible: ['stericsson,db8500-gpio', 'st,nomadik-gpio'] ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2025-05-21 21:35 UTC | newest] Thread overview: 18+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-05-20 15:02 [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 1/8] dt-bindings: pinctrl: stm32: Introduce HDP Clément Le Goffic 2025-05-20 19:25 ` Rob Herring (Arm) 2025-05-20 19:37 ` Rob Herring 2025-05-21 8:55 ` Clement LE GOFFIC 2025-05-21 10:31 ` [Linux-stm32] " Amelie Delaunay 2025-05-20 15:02 ` [PATCH v2 2/8] pinctrl: stm32: Introduce HDP driver Clément Le Goffic 2025-05-20 22:34 ` Linus Walleij 2025-05-21 9:49 ` Clement LE GOFFIC 2025-05-21 10:14 ` Clement LE GOFFIC 2025-05-21 21:34 ` kernel test robot 2025-05-20 15:02 ` [PATCH v2 3/8] MAINTAINERS: Add Clément Le Goffic as STM32 HDP maintainer Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 4/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp13 Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 5/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp15 Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 6/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp25 Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 7/8] ARM: dts: stm32: add alternate pinmux for HDP pin and add HDP pinctrl node Clément Le Goffic 2025-05-20 15:02 ` [PATCH v2 8/8] ARM: dts: stm32: add Hardware debug port (HDP) on stm32mp157c-dk2 board Clément Le Goffic 2025-05-20 21:09 ` [PATCH v2 0/8] Introduce HDP support for STM32MP platforms Rob Herring (Arm)
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).