* [PATCH v2 0/5] arm64: dts: freescale: add support for the GOcontroll Moduline IV/Mini
@ 2025-10-22 7:22 Maud Spierings via B4 Relay
2025-10-22 7:22 ` [PATCH v2 1/5] dt-bindings: arm: fsl: Add " Maud Spierings via B4 Relay
` (4 more replies)
0 siblings, 5 replies; 28+ messages in thread
From: Maud Spierings via B4 Relay @ 2025-10-22 7:22 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, linux-kernel, imx, linux-arm-kernel, Maud Spierings,
Conor Dooley
Add initial support for the Moduline IV and Moduline Mini embedded
controllers.
These systems are powered by the Ka-Ro Electronics tx8m-1610 COM, which
features an imx8mm SoC.
Signed-off-by: Maud Spierings <maudspierings@gocontroll.com>
---
Changes in v2:
- Fix allignment issue in imx8mm-tx8m-1610.dtsi (fec1)
- Move phy-reset into fec (works better in barebox)
- Make the gpio-line-names groups of four on every line
- Link to v1: https://lore.kernel.org/r/20251009-mini_iv-v1-0-f3889c492457@gocontroll.com
---
Maud Spierings (5):
dt-bindings: arm: fsl: Add GOcontroll Moduline IV/Mini
arm64: dts: imx8mm: Add pinctrl config definitions
arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
arm64: dts: freescale: Add the GOcontroll Moduline IV
arm64: dts: freescale: Add the GOcontroll Moduline Mini
Documentation/devicetree/bindings/arm/fsl.yaml | 2 +
arch/arm64/boot/dts/freescale/Makefile | 3 +
arch/arm64/boot/dts/freescale/imx8mm-pinfunc.h | 33 +
.../imx8mm-tx8m-1610-moduline-iv-306-d.dts | 801 +++++++++++++++++++++
.../imx8mm-tx8m-1610-moduline-mini-111.dts | 691 ++++++++++++++++++
.../arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi | 439 +++++++++++
6 files changed, 1969 insertions(+)
---
base-commit: 7c3ba4249a3604477ea9c077e10089ba7ddcaa03
change-id: 20251009-mini_iv-a05e5c2c1223
Best regards,
--
Maud Spierings <maudspierings@gocontroll.com>
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 1/5] dt-bindings: arm: fsl: Add GOcontroll Moduline IV/Mini
2025-10-22 7:22 [PATCH v2 0/5] arm64: dts: freescale: add support for the GOcontroll Moduline IV/Mini Maud Spierings via B4 Relay
@ 2025-10-22 7:22 ` Maud Spierings via B4 Relay
2025-10-22 7:22 ` [PATCH v2 2/5] arm64: dts: imx8mm: Add pinctrl config definitions Maud Spierings via B4 Relay
` (3 subsequent siblings)
4 siblings, 0 replies; 28+ messages in thread
From: Maud Spierings via B4 Relay @ 2025-10-22 7:22 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, linux-kernel, imx, linux-arm-kernel, Maud Spierings,
Conor Dooley
From: Maud Spierings <maudspierings@gocontroll.com>
Document the compatible strings for the Moduline IV and Mini.
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Maud Spierings <maudspierings@gocontroll.com>
---
Documentation/devicetree/bindings/arm/fsl.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/arm/fsl.yaml b/Documentation/devicetree/bindings/arm/fsl.yaml
index 00cdf490b0620..41eb19e3530da 100644
--- a/Documentation/devicetree/bindings/arm/fsl.yaml
+++ b/Documentation/devicetree/bindings/arm/fsl.yaml
@@ -963,6 +963,8 @@ properties:
- fsl,imx8mm-evkb # i.MX8MM EVKB Board
- gateworks,imx8mm-gw75xx-0x # i.MX8MM Gateworks Board
- gateworks,imx8mm-gw7904
+ - gocontroll,moduline-iv
+ - gocontroll,moduline-mini
- gw,imx8mm-gw71xx-0x # i.MX8MM Gateworks Development Kit
- gw,imx8mm-gw72xx-0x # i.MX8MM Gateworks Development Kit
- gw,imx8mm-gw73xx-0x # i.MX8MM Gateworks Development Kit
--
2.51.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v2 2/5] arm64: dts: imx8mm: Add pinctrl config definitions
2025-10-22 7:22 [PATCH v2 0/5] arm64: dts: freescale: add support for the GOcontroll Moduline IV/Mini Maud Spierings via B4 Relay
2025-10-22 7:22 ` [PATCH v2 1/5] dt-bindings: arm: fsl: Add " Maud Spierings via B4 Relay
@ 2025-10-22 7:22 ` Maud Spierings via B4 Relay
2025-10-22 7:22 ` [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM Maud Spierings via B4 Relay
` (2 subsequent siblings)
4 siblings, 0 replies; 28+ messages in thread
From: Maud Spierings via B4 Relay @ 2025-10-22 7:22 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, linux-kernel, imx, linux-arm-kernel, Maud Spierings
From: Maud Spierings <maudspierings@gocontroll.com>
Currently to configure each IOMUXC_SW_PAD_CTL_PAD the raw value of this
register is written in the dts, these values are not obvious. Add defines
which describe the fields of this register which can be or-ed together to
produce readable settings.
Signed-off-by: Maud Spierings <maudspierings@gocontroll.com>
---
arch/arm64/boot/dts/freescale/imx8mm-pinfunc.h | 33 ++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/imx8mm-pinfunc.h b/arch/arm64/boot/dts/freescale/imx8mm-pinfunc.h
index b1f11098d248e..31557b7b9ccc1 100644
--- a/arch/arm64/boot/dts/freescale/imx8mm-pinfunc.h
+++ b/arch/arm64/boot/dts/freescale/imx8mm-pinfunc.h
@@ -6,6 +6,39 @@
#ifndef __DTS_IMX8MM_PINFUNC_H
#define __DTS_IMX8MM_PINFUNC_H
+/* Drive Strength */
+#define MX8MM_DSE_X1 0x0
+#define MX8MM_DSE_X2 0x4
+#define MX8MM_DSE_X4 0x2
+#define MX8MM_DSE_X6 0x6
+
+/* Slew Rate */
+#define MX8MM_FSEL_FAST 0x10
+#define MX8MM_FSEL_SLOW 0x0
+
+/* Open Drain */
+#define MX8MM_ODE_ENABLE 0x20
+#define MX8MM_ODE_DISABLE 0x0
+
+#define MX8MM_PULL_DOWN 0x0
+#define MX8MM_PULL_UP 0x40
+
+/* Hysteresis */
+#define MX8MM_HYS_CMOS 0x0
+#define MX8MM_HYS_SCHMITT 0x80
+
+#define MX8MM_PULL_ENABLE 0x100
+#define MX8MM_PULL_DISABLE 0x0
+
+/* SION force input mode */
+#define MX8MM_SION 0x40000000
+
+/* long defaults */
+#define MX8MM_USDHC_DATA_DEFAULT (MX8MM_FSEL_FAST | MX8MM_PULL_UP | \
+ MX8MM_HYS_SCHMITT | MX8MM_PULL_ENABLE)
+#define MX8MM_I2C_DEFAULT (MX8MM_DSE_X6 | MX8MM_PULL_UP | MX8MM_HYS_SCHMITT | \
+ MX8MM_PULL_ENABLE | MX8MM_SION)
+
/*
* The pin function ID is a tuple of
* <mux_reg conf_reg input_reg mux_mode input_val>
--
2.51.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-22 7:22 [PATCH v2 0/5] arm64: dts: freescale: add support for the GOcontroll Moduline IV/Mini Maud Spierings via B4 Relay
2025-10-22 7:22 ` [PATCH v2 1/5] dt-bindings: arm: fsl: Add " Maud Spierings via B4 Relay
2025-10-22 7:22 ` [PATCH v2 2/5] arm64: dts: imx8mm: Add pinctrl config definitions Maud Spierings via B4 Relay
@ 2025-10-22 7:22 ` Maud Spierings via B4 Relay
2025-10-28 12:15 ` Matti Vaittinen
2025-10-22 7:22 ` [PATCH v2 4/5] arm64: dts: freescale: Add the GOcontroll Moduline IV Maud Spierings via B4 Relay
2025-10-22 7:22 ` [PATCH v2 5/5] arm64: dts: freescale: Add the GOcontroll Moduline Mini Maud Spierings via B4 Relay
4 siblings, 1 reply; 28+ messages in thread
From: Maud Spierings via B4 Relay @ 2025-10-22 7:22 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, linux-kernel, imx, linux-arm-kernel, Maud Spierings
From: Maud Spierings <maudspierings@gocontroll.com>
The Ka-Ro Electronics tx8m-1610 is a COM based on the imx8mm SOC. It has
1 GB of ram and 4 GB of eMMC storage on board.
Add it to enable boards based on this module
Signed-off-by: Maud Spierings <maudspierings@gocontroll.com>
---
.../arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi | 439 +++++++++++++++++++++
1 file changed, 439 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi b/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi
new file mode 100644
index 0000000000000..46d3ad80942cc
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi
@@ -0,0 +1,439 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2021 Lothar Waßmann <LW@KARO-electronics.de>
+ * 2025 Maud Spierings <maudspierings@gocontroll.com>
+ */
+
+#include "imx8mm.dtsi"
+
+/ {
+ reg_3v3_etn: regulator-3v3-etn {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ gpio = <&gpio1 23 GPIO_ACTIVE_HIGH>;
+ pinctrl-0 = <&pinctrl_reg_3v3_etn>;
+ pinctrl-names = "default";
+ regulator-boot-on;
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "3v3-etn";
+ };
+};
+
+&A53_0 {
+ cpu-supply = <®_vdd_arm>;
+};
+
+&A53_1 {
+ cpu-supply = <®_vdd_arm>;
+};
+
+&A53_2 {
+ cpu-supply = <®_vdd_arm>;
+};
+
+&A53_3 {
+ cpu-supply = <®_vdd_arm>;
+};
+
+&ddrc {
+ operating-points-v2 = <&ddrc_opp_table>;
+
+ ddrc_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-400000000 {
+ opp-hz = /bits/ 64 <400000000>;
+ };
+ };
+};
+
+&fec1 {
+ assigned-clocks = <&clk IMX8MM_CLK_ENET_AXI>,
+ <&clk IMX8MM_CLK_ENET_TIMER>,
+ <&clk IMX8MM_CLK_ENET_REF>,
+ <&clk IMX8MM_CLK_ENET_REF>;
+ assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_266M>,
+ <&clk IMX8MM_SYS_PLL2_100M>,
+ <&clk IMX8MM_SYS_PLL2_50M>,
+ <&clk IMX8MM_SYS_PLL2_50M>;
+ assigned-clock-rates = <0>, <100000000>, <50000000>, <50000000>;
+ clocks = <&clk IMX8MM_CLK_ENET1_ROOT>,
+ <&clk IMX8MM_CLK_ENET1_ROOT>,
+ <&clk IMX8MM_CLK_ENET_TIMER>,
+ <&clk IMX8MM_CLK_ENET_REF>;
+ phy-handle = <ðphy0>;
+ phy-mode = "rmii";
+ phy-reset-duration = <25>;
+ phy-reset-gpios = <&gpio1 29 GPIO_ACTIVE_LOW>;
+ phy-reset-post-delay = <1>;
+ phy-supply = <®_3v3_etn>;
+ pinctrl-0 = <&pinctrl_fec1>, <&pinctrl_ethphy_rst>;
+ pinctrl-names = "default";
+ status = "okay";
+
+ mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ethphy0: ethernet-phy@0 {
+ reg = <0>;
+ clocks = <&clk IMX8MM_CLK_ENET_REF>;
+ smsc,disable-energy-detect;
+ };
+ };
+};
+
+&gpio1 {
+ gpio-line-names = "SODIMM_152", "SODIMM_42", "SODIMM_153", "PMIC_IRQ_B",
+ "SODIMM_154", "SODIMM_155", "SODIMM_156", "SODIMM_157",
+ "SODIMM_158", "SODIMM_159", "SODIMM_161", "SODIMM_162",
+ "SODIMM_34", "SODIMM_36", "SODIMM_27", "SODIMM_28",
+ "", "", "", "",
+ "", "", "", "ENET_POWER",
+ "", "", "", "",
+ "ENET_nINT", "ENET_nRST", "", "";
+};
+
+&gpio2 {
+ gpio-line-names = "", "", "", "",
+ "", "", "", "",
+ "", "", "", "",
+ "SODIMM_51", "SODIMM_57", "SODIMM_56", "SODIMM_52",
+ "SODIMM_53", "SODIMM_54", "SODIMM_55", "SODIMM_15",
+ "SODIMM_45", "", "", "",
+ "", "", "", "",
+ "", "", "", "";
+};
+
+&gpio3 {
+ gpio-line-names = "SODIMM_103", "SODIMM_104", "SODIMM_105", "SODIMM_106",
+ "SODIMM_107", "SODIMM_112", "SODIMM_108", "SODIMM_109",
+ "SODIMM_95", "SODIMM_110", "SODIMM_96", "SODIMM_97",
+ "SODIMM_98", "SODIMM_99", "SODIMM_113", "SODIMM_114",
+ "SODIMM_115", "SODIMM_101", "SODIMM_100", "SODIMM_77",
+ "SODIMM_72", "SODIMM_73", "SODIMM_74", "SODIMM_75",
+ "SODIMM_76", "SODIMM_43", "", "",
+ "", "", "", "";
+};
+
+&gpio4 {
+ gpio-line-names = "SODIMM_178", "SODIMM_180", "SODIMM_184", "SODIMM_185",
+ "SODIMM_186", "SODIMM_187", "SODIMM_188", "SODIMM_189",
+ "SODIMM_190", "SODIMM_191", "SODIMM_179", "SODIMM_181",
+ "SODIMM_192", "SODIMM_193", "SODIMM_194", "SODIMM_195",
+ "SODIMM_196", "SODIMM_197", "SODIMM_198", "SODIMM_199",
+ "SODIMM_182", "SODIMM_79", "SODIMM_78", "SODIMM_84",
+ "SODIMM_87", "SODIMM_86", "SODIMM_85", "SODIMM_83",
+ "SODIMM_81", "SODIMM_80", "SODIMM_90", "SODIMM_93";
+};
+
+&gpio5 {
+ gpio-line-names = "SODIMM_92", "SODIMM_91", "SODIMM_89", "SODIMM_144",
+ "SODIMM_143", "SODIMM_146", "SODIMM_68", "SODIMM_67",
+ "SODIMM_70", "SODIMM_69", "SODIMM_48", "SODIMM_46",
+ "SODIMM_47", "SODIMM_44", "PMIC_SCL", "PMIC_SDA",
+ "SODIMM_41", "SODIMM_40", "SODIMM_148", "SODIMM_149",
+ "SODIMM_150", "SODIMM_151", "SODIMM_60", "SODIMM_59",
+ "SODIMM_64", "SODIMM_63", "SODIMM_62", "SODIMM_61",
+ "SODIMM_66", "SODIMM_65", "", "";
+};
+
+&i2c1 {
+ clock-frequency = <400000>;
+ pinctrl-0 = <&pinctrl_i2c1>;
+ pinctrl-1 = <&pinctrl_i2c1_gpio>;
+ pinctrl-names = "default", "gpio";
+ scl-gpios = <&gpio5 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ status = "okay";
+
+ pmic: pmic@4b {
+ compatible = "rohm,bd71847";
+ reg = <0x4b>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&pinctrl_pmic>;
+ pinctrl-names = "default";
+ rohm,reset-snvs-powered;
+
+ regulators {
+ reg_vdd_soc: BUCK1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-max-microvolt = <900000>;
+ regulator-min-microvolt = <780000>;
+ regulator-name = "buck1";
+ regulator-ramp-delay = <1250>;
+ };
+
+ reg_vdd_arm: BUCK2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-max-microvolt = <950000>;
+ regulator-min-microvolt = <805000>;
+ regulator-name = "buck2";
+ regulator-ramp-delay = <1250>;
+ rohm,dvs-run-voltage = <950000>;
+ rohm,dvs-idle-voltage = <810000>;
+ };
+
+ reg_vdd_dram: BUCK3 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-max-microvolt = <900000>;
+ regulator-min-microvolt = <805000>;
+ regulator-name = "buck3";
+ };
+
+ reg_vdd_3v3: BUCK4 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "buck4";
+ };
+
+ reg_vdd_1v8: BUCK5 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-max-microvolt = <1950000>;
+ regulator-min-microvolt = <1700000>;
+ regulator-name = "buck5";
+ };
+
+ BUCK6 {
+ regulator-always-on;
+ regulator-boot-on;
+ /*
+ * The default output voltage is 1.1V, bumped
+ * to 1.35V in HW by a 499R/2.2K voltage divider in the
+ * feedback path.
+ */
+ regulator-max-microvolt = <1100000>;
+ regulator-min-microvolt = <1100000>;
+ regulator-name = "buck6";
+ };
+
+ reg_snvs_1v8: LDO1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-max-microvolt = <1980000>;
+ regulator-min-microvolt = <1620000>;
+ regulator-name = "ldo1";
+ };
+
+ reg_snvs_0v8: LDO2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-max-microvolt = <900000>;
+ regulator-min-microvolt = <760000>;
+ regulator-name = "ldo2";
+ };
+
+ reg_vdda_1v8: LDO3 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-max-microvolt = <1890000>;
+ regulator-min-microvolt = <1710000>;
+ regulator-name = "ldo3";
+ };
+
+ reg_vdd_phy_0v9: LDO4 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-max-microvolt = <1000000>;
+ regulator-min-microvolt = <855000>;
+ regulator-name = "ldo4";
+ };
+
+ ldo5_reg: LDO5 {
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <1800000>;
+ regulator-name = "ldo5";
+ };
+
+ reg_vdd_phy_1v2: LDO6 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-max-microvolt = <1260000>;
+ regulator-min-microvolt = <1140000>;
+ regulator-name = "ldo6";
+ };
+ };
+ };
+};
+
+&iomuxc {
+ pinctrl_ethphy_int: etnphy-intgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_ENET_RD2_GPIO1_IO28
+ (MX8MM_FSEL_FAST | MX8MM_HYS_SCHMITT)
+ >;
+ };
+
+ pinctrl_ethphy_rst: etnphy-rstgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_ENET_RD3_GPIO1_IO29
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_fec1: fec1grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_ENET_MDC_ENET1_MDC
+ (MX8MM_DSE_X4 | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_ENET_MDIO_ENET1_MDIO
+ (MX8MM_DSE_X4 | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_ENET_TD2_ENET1_TX_CLK
+ (MX8MM_FSEL_FAST | MX8MM_SION)
+ MX8MM_IOMUXC_ENET_TD0_ENET1_RGMII_TD0
+ (MX8MM_DSE_X6 | MX8MM_FSEL_FAST)
+ MX8MM_IOMUXC_ENET_TD1_ENET1_RGMII_TD1
+ (MX8MM_DSE_X6 | MX8MM_FSEL_FAST)
+ MX8MM_IOMUXC_ENET_RD0_ENET1_RGMII_RD0
+ (MX8MM_FSEL_FAST | MX8MM_HYS_SCHMITT)
+ MX8MM_IOMUXC_ENET_RD1_ENET1_RGMII_RD1
+ (MX8MM_FSEL_FAST | MX8MM_HYS_SCHMITT)
+ MX8MM_IOMUXC_ENET_RXC_ENET1_RX_ER
+ MX8MM_FSEL_FAST
+ MX8MM_IOMUXC_ENET_RX_CTL_ENET1_RGMII_RX_CTL
+ MX8MM_FSEL_FAST
+ MX8MM_IOMUXC_ENET_TX_CTL_ENET1_RGMII_TX_CTL
+ (MX8MM_DSE_X6 | MX8MM_FSEL_FAST)
+ >;
+ };
+
+ pinctrl_i2c1: i2c1grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_I2C1_SCL_I2C1_SCL
+ MX8MM_I2C_DEFAULT
+ MX8MM_IOMUXC_I2C1_SDA_I2C1_SDA
+ MX8MM_I2C_DEFAULT
+ >;
+ };
+
+ pinctrl_i2c1_gpio: i2c1-gpiogrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_I2C1_SCL_GPIO5_IO14
+ MX8MM_I2C_DEFAULT
+ MX8MM_IOMUXC_I2C1_SDA_GPIO5_IO15
+ MX8MM_I2C_DEFAULT
+ >;
+ };
+
+ pinctrl_pmic: pmicgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_GPIO1_IO03_GPIO1_IO3
+ (MX8MM_PULL_UP | MX8MM_HYS_SCHMITT | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_reg_3v3_etn: reg-3v3-etngrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_ENET_TXC_GPIO1_IO23
+ (MX8MM_DSE_X4 | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_usdhc1: usdhc1grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SD1_CLK_USDHC1_CLK
+ (MX8MM_FSEL_FAST | MX8MM_HYS_SCHMITT | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SD1_CMD_USDHC1_CMD
+ MX8MM_USDHC_DATA_DEFAULT
+ MX8MM_IOMUXC_SD1_DATA0_USDHC1_DATA0
+ MX8MM_USDHC_DATA_DEFAULT
+ MX8MM_IOMUXC_SD1_DATA1_USDHC1_DATA1
+ MX8MM_USDHC_DATA_DEFAULT
+ MX8MM_IOMUXC_SD1_DATA2_USDHC1_DATA2
+ MX8MM_USDHC_DATA_DEFAULT
+ MX8MM_IOMUXC_SD1_DATA3_USDHC1_DATA3
+ MX8MM_USDHC_DATA_DEFAULT
+ MX8MM_IOMUXC_SD1_DATA4_USDHC1_DATA4
+ MX8MM_USDHC_DATA_DEFAULT
+ MX8MM_IOMUXC_SD1_DATA5_USDHC1_DATA5
+ MX8MM_USDHC_DATA_DEFAULT
+ MX8MM_IOMUXC_SD1_DATA6_USDHC1_DATA6
+ MX8MM_USDHC_DATA_DEFAULT
+ MX8MM_IOMUXC_SD1_DATA7_USDHC1_DATA7
+ MX8MM_USDHC_DATA_DEFAULT
+ MX8MM_IOMUXC_SD1_STROBE_USDHC1_STROBE
+ (MX8MM_FSEL_FAST | MX8MM_HYS_SCHMITT | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SD1_RESET_B_USDHC1_RESET_B
+ (MX8MM_DSE_X6 | MX8MM_FSEL_FAST | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_usdhc1_100mhz: usdhc1-100mhzgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SD1_CLK_USDHC1_CLK
+ (MX8MM_DSE_X2 | MX8MM_FSEL_FAST | MX8MM_HYS_SCHMITT | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SD1_CMD_USDHC1_CMD
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA0_USDHC1_DATA0
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA1_USDHC1_DATA1
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA2_USDHC1_DATA2
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA3_USDHC1_DATA3
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA4_USDHC1_DATA4
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA5_USDHC1_DATA5
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA6_USDHC1_DATA6
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA7_USDHC1_DATA7
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_STROBE_USDHC1_STROBE
+ (MX8MM_DSE_X2 | MX8MM_FSEL_FAST | MX8MM_HYS_SCHMITT | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SD1_RESET_B_USDHC1_RESET_B
+ (MX8MM_DSE_X6 | MX8MM_FSEL_FAST | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_usdhc1_200mhz: usdhc1-200mhzgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SD1_CLK_USDHC1_CLK
+ (MX8MM_DSE_X6 | MX8MM_FSEL_FAST | MX8MM_HYS_SCHMITT | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SD1_CMD_USDHC1_CMD
+ (MX8MM_DSE_X6 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA0_USDHC1_DATA0
+ (MX8MM_DSE_X6 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA1_USDHC1_DATA1
+ (MX8MM_DSE_X6 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA2_USDHC1_DATA2
+ (MX8MM_DSE_X6 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA3_USDHC1_DATA3
+ (MX8MM_DSE_X6 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA4_USDHC1_DATA4
+ (MX8MM_DSE_X6 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA5_USDHC1_DATA5
+ (MX8MM_DSE_X6 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA6_USDHC1_DATA6
+ (MX8MM_DSE_X6 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_DATA7_USDHC1_DATA7
+ (MX8MM_DSE_X6 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD1_STROBE_USDHC1_STROBE
+ (MX8MM_DSE_X6 | MX8MM_FSEL_FAST | MX8MM_HYS_SCHMITT | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SD1_RESET_B_USDHC1_RESET_B
+ (MX8MM_DSE_X6 | MX8MM_FSEL_FAST | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+};
+
+&usdhc1 {
+ assigned-clocks = <&clk IMX8MM_CLK_USDHC1>;
+ assigned-clock-rates = <400000000>;
+ bus-width = <8>;
+ non-removable;
+ pinctrl-0 = <&pinctrl_usdhc1>;
+ pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
+ pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
+ pinctrl-names = "default", "state_100mhz", "state_200mhz";
+ vmmc-supply = <®_vdd_3v3>;
+ vqmmc-supply = <®_vdd_1v8>;
+ status = "okay";
+};
--
2.51.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v2 4/5] arm64: dts: freescale: Add the GOcontroll Moduline IV
2025-10-22 7:22 [PATCH v2 0/5] arm64: dts: freescale: add support for the GOcontroll Moduline IV/Mini Maud Spierings via B4 Relay
` (2 preceding siblings ...)
2025-10-22 7:22 ` [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM Maud Spierings via B4 Relay
@ 2025-10-22 7:22 ` Maud Spierings via B4 Relay
2025-10-22 7:57 ` Marc Kleine-Budde
2025-10-22 10:18 ` Maud Spierings
2025-10-22 7:22 ` [PATCH v2 5/5] arm64: dts: freescale: Add the GOcontroll Moduline Mini Maud Spierings via B4 Relay
4 siblings, 2 replies; 28+ messages in thread
From: Maud Spierings via B4 Relay @ 2025-10-22 7:22 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, linux-kernel, imx, linux-arm-kernel, Maud Spierings
From: Maud Spierings <maudspierings@gocontroll.com>
The Moduline IV is a part of the wider GOcontroll Moduline ecosystem. These
are embedded controllers that focus on modularity with their swappable IO
modules.
Features:
- up to 8 Moduline IO modules
- 4 CAN busses
- 1 LIN bus
- 1 Ethernet
- 4 RGB leds
- optional Wi-Fi/Bluetooth
- optional 4G/GPS
Signed-off-by: Maud Spierings <maudspierings@gocontroll.com>
---
arch/arm64/boot/dts/freescale/Makefile | 2 +
.../imx8mm-tx8m-1610-moduline-iv-306-d.dts | 801 +++++++++++++++++++++
2 files changed, 803 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index 525ef180481d3..b2fef44e0a370 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -124,6 +124,8 @@ imx8mm-evk-pcie-ep-dtbs += imx8mm-evk.dtb imx-pcie0-ep.dtbo
imx8mm-evkb-pcie-ep-dtbs += imx8mm-evkb.dtb imx-pcie0-ep.dtbo
dtb-$(CONFIG_ARCH_MXC) += imx8mm-evk-pcie-ep.dtb imx8mm-evkb-pcie-ep.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mm-tx8m-1610-moduline-iv-306-d.dtb
+
dtb-$(CONFIG_ARCH_MXC) += imx8mm-icore-mx8mm-ctouch2.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mm-icore-mx8mm-edimm2.2.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mm-iot-gateway.dtb
diff --git a/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610-moduline-iv-306-d.dts b/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610-moduline-iv-306-d.dts
new file mode 100644
index 0000000000000..52a8caf4e078e
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610-moduline-iv-306-d.dts
@@ -0,0 +1,801 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2025 Maud Spierings <maudspierings@gocontroll.com>
+ */
+
+/dts-v1/;
+
+#include "imx8mm-tx8m-1610.dtsi"
+#include <dt-bindings/leds/common.h>
+
+/ {
+ chassis-type = "embedded";
+ compatible = "gocontroll,moduline-iv", "fsl,imx8mm";
+ hardware = "Moduline IV V3.06-D";
+ model = "GOcontroll Moduline IV";
+
+ aliases {
+ usb-host = &usbotg2;
+ usbotg = &usbotg1;
+ spi0 = &ecspi2; /* spidev number compatibility */
+ spi1 = &ecspi3; /* spidev number compatibility */
+ spi2 = &ecspi1; /* spidev number compatibility */
+ };
+
+ chosen {
+ stdout-path = "serial2:115200n8";
+ };
+
+ mcp_clock: mcp-clock {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <20000000>;
+ };
+
+ reg_3v3_m2: regulator-3v3-m2 {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ gpio = <&gpio4 8 GPIO_ACTIVE_HIGH>;
+ pinctrl-0 = <&pinctrl_reg_m2>;
+ pinctrl-names = "default";
+ power-supply = <®_6v4>;
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "3v3-m.2";
+ };
+
+ reg_5v0: regulator-5v0 {
+ compatible = "regulator-fixed";
+ power-supply = <®_6v4>;
+ regulator-always-on;
+ regulator-max-microvolt = <5000000>;
+ regulator-min-microvolt = <5000000>;
+ regulator-name = "5v0";
+ };
+
+ reg_6v4: regulator-6v4 {
+ compatible = "regulator-fixed";
+ regulator-always-on;
+ regulator-max-microvolt = <6400000>;
+ regulator-min-microvolt = <6400000>;
+ regulator-name = "6v4";
+ };
+
+ reg_can1_stby: regulator-can1-stby {
+ compatible = "regulator-fixed";
+ gpio = <&gpio3 16 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&pinctrl_can1_reg>;
+ pinctrl-names = "default";
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "can1-stby";
+ };
+
+ reg_can2_stby: regulator-can2-stby {
+ compatible = "regulator-fixed";
+ gpio = <&gpio3 17 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&pinctrl_can2_reg>;
+ pinctrl-names = "default";
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "can2-stby";
+ };
+
+ reg_can3_stby: regulator-can3-stby {
+ compatible = "regulator-fixed";
+ gpio = <&gpio1 11 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&pinctrl_can3_reg>;
+ pinctrl-names = "default";
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "can3-stby";
+ };
+
+ reg_can4_stby: regulator-can4-stby {
+ compatible = "regulator-fixed";
+ gpio = <&gpio3 8 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&pinctrl_can4_reg>;
+ pinctrl-names = "default";
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "can4-stby";
+ };
+
+ wifi_pwrseq: wifi-pwrseq {
+ compatible = "mmc-pwrseq-simple";
+ pinctrl-0 = <&pinctrl_wl_reg>;
+ pinctrl-names = "default";
+ post-power-on-delay-ms = <100>;
+ power-off-delay-us = <500000>;
+ reset-gpios = <&gpio3 3 GPIO_ACTIVE_LOW>;
+ };
+};
+
+/* SPI 2 */
+&ecspi1 {
+ pinctrl-0 = <&pinctrl_ecspi1>;
+ pinctrl-names = "default";
+ cs-gpios = <
+ &gpio1 9 GPIO_ACTIVE_LOW
+ &gpio1 0 GPIO_ACTIVE_LOW
+ &gpio5 2 GPIO_ACTIVE_LOW
+ &gpio4 27 GPIO_ACTIVE_LOW
+ &gpio3 1 GPIO_ACTIVE_LOW
+ >;
+ status = "okay";
+
+ connector@0 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <0>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
+ slot-number = <3>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ connector@1 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <1>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio5>;
+ interrupts = <21 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio3 15 GPIO_ACTIVE_LOW>;
+ slot-number = <4>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ connector@2 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <2>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio5>;
+ interrupts = <1 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio4 25 GPIO_ACTIVE_LOW>;
+ slot-number = <5>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ connector@3 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <3>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio4>;
+ interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
+ slot-number = <6>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ adc@4 {
+ compatible = "microchip,mcp3004";
+ reg = <4>;
+ spi-max-frequency = <2300000>;
+ vref-supply = <®_vdd_3v3>;
+ };
+};
+
+&ecspi2 {
+ pinctrl-0 = <&pinctrl_ecspi2>;
+ pinctrl-names = "default";
+ cs-gpios = <
+ &gpio3 23 GPIO_ACTIVE_LOW
+ &gpio5 9 GPIO_ACTIVE_LOW
+ &gpio3 2 GPIO_ACTIVE_LOW
+ &gpio5 25 GPIO_ACTIVE_LOW
+ >;
+ status = "okay";
+
+ connector@0 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <0>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <19 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio3 24 GPIO_ACTIVE_LOW>;
+ slot-number = <7>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ connector@1 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <1>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <22 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio3 21 GPIO_ACTIVE_LOW>;
+ slot-number = <8>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ can@2 { // reg vdd?
+ compatible = "microchip,mcp25625";
+ reg = <2>;
+ clocks = <&mcp_clock>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&pinctrl_can1>;
+ pinctrl-names = "default";
+ spi-max-frequency = <10000000>;
+ xceiver-supply = <®_can1_stby>;
+ };
+
+ can@3 {
+ compatible = "microchip,mcp25625";
+ reg = <3>;
+ clocks = <&mcp_clock>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <13 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&pinctrl_can2>;
+ pinctrl-names = "default";
+ spi-max-frequency = <10000000>;
+ xceiver-supply = <®_can2_stby>;
+ };
+};
+
+&ecspi3 {
+ pinctrl-0 = <&pinctrl_ecspi3>;
+ pinctrl-names = "default";
+ cs-gpios = <
+ &gpio1 4 GPIO_ACTIVE_LOW
+ &gpio1 10 GPIO_ACTIVE_LOW
+ &gpio5 5 GPIO_ACTIVE_LOW
+ &gpio5 4 GPIO_ACTIVE_LOW
+ >;
+ status = "okay";
+
+ connector@0 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <0>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <6 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;
+ slot-number = <1>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ connector@1 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <1>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio5>;
+ interrupts = <20 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio3 11 GPIO_ACTIVE_LOW>;
+ slot-number = <2>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ can@2 {
+ compatible = "microchip,mcp25625";
+ reg = <2>;
+ clocks = <&mcp_clock>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <12 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&pinctrl_can3>;
+ pinctrl-names = "default";
+ spi-max-frequency = <10000000>;
+ xceiver-supply = <®_can3_stby>;
+ };
+
+ can@3 {
+ compatible = "microchip,mcp25625";
+ reg = <3>;
+ clocks = <&mcp_clock>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <18 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&pinctrl_can4>;
+ pinctrl-names = "default";
+ spi-max-frequency = <10000000>;
+ xceiver-supply = <®_can4_stby>;
+ };
+};
+
+&gpu_2d {
+ status = "disabled";
+};
+
+&gpu_3d {
+ status = "disabled";
+};
+
+&i2c2 {
+ clock-frequency = <400000>;
+ pinctrl-names = "default", "gpio";
+ pinctrl-0 = <&pinctrl_i2c2>;
+ pinctrl-1 = <&pinctrl_i2c2_gpio>;
+ scl-gpios = <&gpio5 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ status = "okay";
+};
+
+&i2c3 {
+ clock-frequency = <400000>;
+ pinctrl-0 = <&pinctrl_i2c3>;
+ pinctrl-1 = <&pinctrl_i2c3_gpio>;
+ pinctrl-names = "default", "gpio";
+ scl-gpios = <&gpio5 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ sda-gpios = <&gpio5 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ status = "okay";
+
+ lp5012@14 {
+ compatible = "ti,lp5012";
+ reg = <0x14>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ multi-led@0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <0>;
+ color = <LED_COLOR_ID_RGB>;
+ label = "case-led1";
+
+ led@0 {
+ color = <LED_COLOR_ID_RED>;
+ reg = <0>;
+ };
+
+ led@1 {
+ color = <LED_COLOR_ID_GREEN>;
+ reg = <1>;
+ };
+
+ led@2 {
+ color = <LED_COLOR_ID_BLUE>;
+ reg = <2>;
+ };
+ };
+
+ multi-led@1 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <1>;
+ color = <LED_COLOR_ID_RGB>;
+ label = "case-led2";
+
+ led@0 {
+ color = <LED_COLOR_ID_RED>;
+ reg = <0>;
+ };
+
+ led@1 {
+ color = <LED_COLOR_ID_GREEN>;
+ reg = <1>;
+ };
+
+ led@2 {
+ color = <LED_COLOR_ID_BLUE>;
+ reg = <2>;
+ };
+ };
+
+ multi-led@2 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <2>;
+ color = <LED_COLOR_ID_RGB>;
+ label = "case-led3";
+
+ led@0 {
+ color = <LED_COLOR_ID_RED>;
+ reg = <0>;
+ };
+
+ led@1 {
+ color = <LED_COLOR_ID_GREEN>;
+ reg = <1>;
+ };
+
+ led@2 {
+ color = <LED_COLOR_ID_BLUE>;
+ reg = <2>;
+ };
+ };
+
+ multi-led@3 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <3>;
+ color = <LED_COLOR_ID_RGB>;
+ label = "case-led4";
+
+ led@0 {
+ color = <LED_COLOR_ID_RED>;
+ reg = <0>;
+ };
+
+ led@1 {
+ color = <LED_COLOR_ID_GREEN>;
+ reg = <1>;
+ };
+
+ led@2 {
+ color = <LED_COLOR_ID_BLUE>;
+ reg = <2>;
+ };
+ };
+ };
+};
+
+&iomuxc {
+ pinctrl_bt: btgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_GPIO1_IO01_GPIO1_IO1
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_SAI5_MCLK_GPIO3_IO25
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE | MX8MM_HYS_SCHMITT)
+ MX8MM_IOMUXC_ECSPI2_SS0_GPIO5_IO13
+ MX8MM_DSE_X1
+ >;
+ };
+
+ pinctrl_can1: can1grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_NAND_ALE_GPIO3_IO0
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_NAND_CE3_B_GPIO3_IO4
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE | MX8MM_HYS_SCHMITT)
+ >;
+ };
+
+ pinctrl_can1_reg: can1reggrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_NAND_READY_B_GPIO3_IO16
+ (MX8MM_DSE_X2 | MX8MM_FSEL_FAST | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_can2: can2grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SD2_CD_B_GPIO2_IO12
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_NAND_DATA07_GPIO3_IO13
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE | MX8MM_HYS_SCHMITT)
+ >;
+ };
+
+ pinctrl_can2_reg: can2reggrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_NAND_WE_B_GPIO3_IO17
+ (MX8MM_DSE_X2 | MX8MM_FSEL_FAST | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_can3: can3grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SPDIF_TX_GPIO5_IO3
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_NAND_DATA06_GPIO3_IO12
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE | MX8MM_HYS_SCHMITT)
+ >;
+ };
+
+ pinctrl_can3_reg: can3reggrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_GPIO1_IO11_GPIO1_IO11
+ (MX8MM_DSE_X2 | MX8MM_FSEL_FAST | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_can4: can4grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_NAND_DQS_GPIO3_IO14
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_NAND_WP_B_GPIO3_IO18
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE | MX8MM_HYS_SCHMITT)
+ >;
+ };
+
+ pinctrl_can4_reg: can4reggrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_NAND_DATA02_GPIO3_IO8
+ (MX8MM_DSE_X2 | MX8MM_FSEL_FAST | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_ecspi1: ecspi1grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_ECSPI1_MOSI_ECSPI1_MOSI
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_ECSPI1_MISO_ECSPI1_MISO
+ (MX8MM_DSE_X4 | MX8MM_HYS_SCHMITT)
+ MX8MM_IOMUXC_ECSPI1_SCLK_ECSPI1_SCLK
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_GPIO1_IO09_GPIO1_IO9
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_GPIO1_IO00_GPIO1_IO0
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_SAI3_MCLK_GPIO5_IO2
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_SAI2_MCLK_GPIO4_IO27
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_NAND_CE0_B_GPIO3_IO1
+ MX8MM_DSE_X1
+ >;
+ };
+
+ pinctrl_ecspi2: ecspi2grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_ECSPI2_MOSI_ECSPI2_MOSI
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_ECSPI2_MISO_ECSPI2_MISO
+ (MX8MM_DSE_X4 | MX8MM_HYS_SCHMITT)
+ MX8MM_IOMUXC_ECSPI2_SCLK_ECSPI2_SCLK
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_SAI5_RXD2_GPIO3_IO23
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_ECSPI1_SS0_GPIO5_IO9
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_NAND_CE1_B_GPIO3_IO2
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_UART2_TXD_GPIO5_IO25
+ MX8MM_DSE_X1
+ >;
+ };
+
+ pinctrl_ecspi3: ecspi3grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_UART1_TXD_ECSPI3_MOSI
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_UART2_RXD_ECSPI3_MISO
+ (MX8MM_DSE_X4 | MX8MM_HYS_SCHMITT)
+ MX8MM_IOMUXC_UART1_RXD_ECSPI3_SCLK
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_GPIO1_IO04_GPIO1_IO4
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_GPIO1_IO10_GPIO1_IO10
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_SPDIF_EXT_CLK_GPIO5_IO5
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_SPDIF_RX_GPIO5_IO4
+ MX8MM_DSE_X1
+ >;
+ };
+
+ pinctrl_i2c2: i2c2grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_I2C2_SCL_I2C2_SCL
+ MX8MM_I2C_DEFAULT
+ MX8MM_IOMUXC_I2C2_SDA_I2C2_SDA
+ MX8MM_I2C_DEFAULT
+ >;
+ };
+
+ pinctrl_i2c2_gpio: i2c2-gpiogrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_I2C2_SCL_GPIO5_IO16
+ MX8MM_I2C_DEFAULT
+ MX8MM_IOMUXC_I2C2_SDA_GPIO5_IO17
+ MX8MM_I2C_DEFAULT
+ >;
+ };
+
+ pinctrl_i2c3: i2c3grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_I2C3_SCL_I2C3_SCL
+ MX8MM_I2C_DEFAULT
+ MX8MM_IOMUXC_I2C3_SDA_I2C3_SDA
+ MX8MM_I2C_DEFAULT
+ >;
+ };
+
+ pinctrl_i2c3_gpio: i2c3-gpiogrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_I2C3_SCL_GPIO5_IO18
+ MX8MM_I2C_DEFAULT
+ MX8MM_IOMUXC_I2C3_SDA_GPIO5_IO19
+ MX8MM_I2C_DEFAULT
+ >;
+ };
+
+ pinctrl_reg_m2: reg-m2grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SAI1_RXD6_GPIO4_IO8
+ MX8MM_DSE_X1
+ >;
+ };
+
+ pinctrl_uart1: uart1grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SAI2_RXC_UART1_DCE_RX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI2_RXFS_UART1_DCE_TX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI2_RXD0_UART1_DCE_RTS_B
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI2_TXFS_UART1_DCE_CTS_B
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_uart2: uart2grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SAI3_TXFS_UART2_DCE_RX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI3_TXC_UART2_DCE_TX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI3_RXD_UART2_DCE_RTS_B
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI3_RXC_UART2_DCE_CTS_B
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_uart3: uart3grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_UART3_RXD_UART3_DCE_RX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_UART3_TXD_UART3_DCE_TX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_uart4: uart4grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_UART4_RXD_UART4_DCE_RX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_UART4_TXD_UART4_DCE_TX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_usdhc2: pinctrlusdhc2grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SD2_CLK_USDHC2_CLK
+ (MX8MM_DSE_X2 | MX8MM_FSEL_FAST | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SD2_CMD_USDHC2_CMD
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD2_DATA0_USDHC2_DATA0
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD2_DATA1_USDHC2_DATA1
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD2_DATA2_USDHC2_DATA2
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD2_DATA3_USDHC2_DATA3
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ >;
+ };
+
+ pinctrl_wl_int: wlintgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SAI5_RXC_GPIO3_IO20
+ (MX8MM_PULL_UP | MX8MM_HYS_SCHMITT | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_wl_reg: wlreggrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_NAND_CE2_B_GPIO3_IO3
+ MX8MM_DSE_X1
+ >;
+ };
+};
+
+&uart1 {
+ pinctrl-0 = <&pinctrl_uart1>;
+ pinctrl-names = "default";
+ uart-has-rtscts;
+ status = "okay";
+
+ bluetooth {
+ compatible = "infineon,cyw43439-bt", "brcm,bcm4329-bt";
+ device-wakeup-gpios = <&gpio5 13 GPIO_ACTIVE_HIGH>;
+ interrupt-names = "host-wakeup";
+ interrupt-parent = <&gpio3>;
+ interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
+ max-speed = <921600>;
+ pinctrl-0 = <&pinctrl_bt>;
+ pinctrl-names = "default";
+ shutdown-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
+ vbat-supply = <®_3v3_m2>;
+ vddio-supply = <®_3v3_m2>;
+ };
+};
+
+&uart2 {
+ pinctrl-0 = <&pinctrl_uart2>;
+ pinctrl-names = "default";
+ uart-has-rtscts;
+ status = "okay";
+};
+
+&uart3 {
+ pinctrl-0 = <&pinctrl_uart3>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&uart4 {
+ pinctrl-0 = <&pinctrl_uart4>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&usbotg1 {
+ disable-over-current;
+ dr_mode = "peripheral";
+ status = "okay";
+};
+
+&usbotg2 {
+ disable-over-current;
+ dr_mode = "host";
+ vbus-supply = <®_5v0>;
+ status = "okay";
+};
+
+&usdhc2 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cap-power-off-card;
+ keep-power-in-suspend;
+ max-frequency = <50000000>;
+ mmc-pwrseq = <&wifi_pwrseq>;
+ non-removable;
+ pinctrl-0 = <&pinctrl_usdhc2>;
+ pinctrl-names = "default";
+ sd-uhs-sdr25;
+ vmmc-supply = <®_3v3_m2>;
+ status = "okay";
+
+ wifi@1 {
+ compatible = "infineon,cyw43439-fmac", "brcm,bcm4329-fmac";
+ reg = <1>;
+ pinctrl-0 = <&pinctrl_wl_int>;
+ pinctrl-names = "default";
+ interrupt-names = "host-wake";
+ interrupt-parent = <&gpio3>;
+ interrupts = <20 IRQ_TYPE_LEVEL_LOW>;
+ brcm,board-type = "GOcontroll,moduline";
+ };
+};
+
+&vpu_blk_ctrl {
+ status = "disabled";
+};
+
+&vpu_g1 {
+ status = "disabled";
+};
+
+&vpu_g2 {
+ status = "disabled";
+};
+
+&wdog1 {
+ status = "okay";
+};
--
2.51.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v2 5/5] arm64: dts: freescale: Add the GOcontroll Moduline Mini
2025-10-22 7:22 [PATCH v2 0/5] arm64: dts: freescale: add support for the GOcontroll Moduline IV/Mini Maud Spierings via B4 Relay
` (3 preceding siblings ...)
2025-10-22 7:22 ` [PATCH v2 4/5] arm64: dts: freescale: Add the GOcontroll Moduline IV Maud Spierings via B4 Relay
@ 2025-10-22 7:22 ` Maud Spierings via B4 Relay
4 siblings, 0 replies; 28+ messages in thread
From: Maud Spierings via B4 Relay @ 2025-10-22 7:22 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, linux-kernel, imx, linux-arm-kernel, Maud Spierings
From: Maud Spierings <maudspierings@gocontroll.com>
The Moduline Mini is a part of the wider GOcontroll Moduline ecosystem. These
are embedded controllers that focus on modularity with their swappable IO
modules.
Features:
- up to 4 Moduline IO modules
- 2 CAN busses
- 1 Ethernet
- 4 RGB leds
- 1 3D accelerometer
- optional Wi-Fi/Bluetooth
- optional 4G/GPS
Signed-off-by: Maud Spierings <maudspierings@gocontroll.com>
---
arch/arm64/boot/dts/freescale/Makefile | 1 +
.../imx8mm-tx8m-1610-moduline-mini-111.dts | 691 +++++++++++++++++++++
2 files changed, 692 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index b2fef44e0a370..0a84c7dc89e39 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -125,6 +125,7 @@ imx8mm-evkb-pcie-ep-dtbs += imx8mm-evkb.dtb imx-pcie0-ep.dtbo
dtb-$(CONFIG_ARCH_MXC) += imx8mm-evk-pcie-ep.dtb imx8mm-evkb-pcie-ep.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mm-tx8m-1610-moduline-iv-306-d.dtb
+dtb-$(CONFIG_ARCH_MXC) += imx8mm-tx8m-1610-moduline-mini-111.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mm-icore-mx8mm-ctouch2.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mm-icore-mx8mm-edimm2.2.dtb
diff --git a/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610-moduline-mini-111.dts b/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610-moduline-mini-111.dts
new file mode 100644
index 0000000000000..651524781a7ba
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610-moduline-mini-111.dts
@@ -0,0 +1,691 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2025 Maud Spierings <maudspierings@gocontroll.com>
+ */
+
+/dts-v1/;
+
+#include "imx8mm-tx8m-1610.dtsi"
+#include <dt-bindings/leds/common.h>
+
+/ {
+ chassis-type = "embedded";
+ compatible = "gocontroll,moduline-mini", "fsl,imx8mm";
+ hardware = "Moduline Mini V1.11";
+ model = "GOcontroll Moduline Mini";
+
+ aliases {
+ usb-host = &usbotg2;
+ usbotg = &usbotg1;
+ spi0 = &ecspi2; /* spidev number compatibility */
+ spi1 = &ecspi3; /* spidev number compatibility */
+ spi2 = &ecspi1; /* spidev number compatibility */
+ };
+
+ chosen {
+ stdout-path = "serial2:115200n8";
+ };
+
+ mcp_clock: mcp-clock {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <20000000>;
+ };
+
+ reg_3v3_comm: regulator-3v3-communication {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ gpio = <&gpio1 11 GPIO_ACTIVE_HIGH>;
+ pinctrl-0 = <&pinctrl_reg_comm>;
+ pinctrl-names = "default";
+ power-supply = <®_6v4>;
+ /* also powers the cellular modem which can't vote on the regulator */
+ regulator-always-on;
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "3v3_comm";
+ };
+
+ reg_5v0: regulator-5v0 {
+ compatible = "regulator-fixed";
+ power-supply = <®_6v4>;
+ regulator-always-on;
+ regulator-max-microvolt = <5000000>;
+ regulator-min-microvolt = <5000000>;
+ regulator-name = "5v0";
+ };
+
+ reg_6v4: regulator-6v4 {
+ compatible = "regulator-fixed";
+ regulator-always-on;
+ regulator-max-microvolt = <6400000>;
+ regulator-min-microvolt = <6400000>;
+ regulator-name = "6v4";
+ };
+
+ reg_can1_stby: regulator-can1-stby {
+ compatible = "regulator-fixed";
+ gpio = <&gpio2 12 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&pinctrl_can1_reg>;
+ pinctrl-names = "default";
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "can1-stby";
+ };
+
+ reg_can2_stby: regulator-can2-stby {
+ compatible = "regulator-fixed";
+ gpio = <&gpio3 15 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&pinctrl_can2_reg>;
+ pinctrl-names = "default";
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "can2-stby";
+ };
+
+ wifi_pwrseq: wifi-pwrseq {
+ compatible = "mmc-pwrseq-simple";
+ pinctrl-0 = <&pinctrl_wl_reg>;
+ pinctrl-names = "default";
+ post-power-on-delay-ms = <100>;
+ power-off-delay-us = <500000>;
+ reset-gpios = <&gpio5 28 GPIO_ACTIVE_LOW>;
+ };
+};
+
+&ecspi1 {
+ pinctrl-0 = <&pinctrl_ecspi1>;
+ pinctrl-names = "default";
+ cs-gpios = <
+ &gpio4 27 GPIO_ACTIVE_LOW
+ &gpio3 23 GPIO_ACTIVE_LOW
+ &gpio3 1 GPIO_ACTIVE_LOW
+ >;
+ status = "okay";
+
+ connector@0 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <0>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio4>;
+ interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
+ slot-number = <3>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ connector@1 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <1>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <19 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio3 21 GPIO_ACTIVE_LOW>;
+ slot-number = <4>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ adc@2 {
+ compatible = "microchip,mcp3004";
+ reg = <2>;
+ spi-max-frequency = <2300000>;
+ vref-supply = <®_vdd_3v3>;
+ };
+};
+
+&ecspi2 {
+ pinctrl-0 = <&pinctrl_ecspi2>;
+ pinctrl-names = "default";
+ cs-gpios = <
+ &gpio3 24 GPIO_ACTIVE_LOW
+ &gpio3 9 GPIO_ACTIVE_LOW
+ >;
+ status = "okay";
+
+ can@0 {
+ compatible = "microchip,mcp25625";
+ reg = <0>;
+ clocks = <&mcp_clock>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <22 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&pinctrl_can1>;
+ pinctrl-names = "default";
+ spi-max-frequency = <10000000>;
+ xceiver-supply = <®_can1_stby>;
+ };
+
+ can@1 {
+ compatible = "microchip,mcp25625";
+ reg = <1>;
+ clocks = <&mcp_clock>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <6 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&pinctrl_can2>;
+ pinctrl-names = "default";
+ spi-max-frequency = <10000000>;
+ xceiver-supply = <®_can2_stby>;
+ };
+};
+
+&ecspi3 {
+ pinctrl-0 = <&pinctrl_ecspi3>;
+ pinctrl-names = "default";
+ cs-gpios = <
+ &gpio1 9 GPIO_ACTIVE_LOW
+ &gpio1 2 GPIO_ACTIVE_LOW
+ >;
+ status = "okay";
+
+ connector@0 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <0>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <10 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;
+ slot-number = <1>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ connector@1 {
+ compatible = "gocontroll,moduline-module-slot";
+ reg = <1>;
+ i2c-bus = <&i2c2>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
+ reset-gpios = <&gpio5 21 GPIO_ACTIVE_LOW>;
+ slot-number = <2>;
+ spi-max-frequency = <54000000>;
+ sync-gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
+ vddhpp-supply = <®_6v4>;
+ vddp-supply = <®_5v0>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+};
+
+&gpu_2d {
+ status = "disabled";
+};
+
+&gpu_3d {
+ status = "disabled";
+};
+
+&i2c2 {
+ clock-frequency = <400000>;
+ pinctrl-0 = <&pinctrl_i2c2>;
+ pinctrl-1 = <&pinctrl_i2c2_gpio>;
+ pinctrl-names = "default", "gpio";
+ scl-gpios = <&gpio5 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ status = "okay";
+};
+
+&i2c3 {
+ clock-frequency = <400000>;
+ pinctrl-0 = <&pinctrl_i2c3>;
+ pinctrl-1 = <&pinctrl_i2c3_gpio>;
+ pinctrl-names = "default", "gpio";
+ scl-gpios = <&gpio5 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ sda-gpios = <&gpio5 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ status = "okay";
+
+ lp5012@14 {
+ compatible = "ti,lp5012";
+ reg = <0x14>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ multi-led@0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <0>;
+ color = <LED_COLOR_ID_RGB>;
+ label = "case-led1";
+
+ led@0 {
+ reg = <0>;
+ color = <LED_COLOR_ID_RED>;
+ };
+
+ led@1 {
+ reg = <1>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led@2 {
+ reg = <2>;
+ color = <LED_COLOR_ID_BLUE>;
+ };
+ };
+
+ multi-led@1 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <1>;
+ color = <LED_COLOR_ID_RGB>;
+ label = "case-led2";
+
+ led@0 {
+ reg = <0>;
+ color = <LED_COLOR_ID_RED>;
+ };
+
+ led@1 {
+ reg = <1>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led@2 {
+ reg = <2>;
+ color = <LED_COLOR_ID_BLUE>;
+ };
+ };
+
+ multi-led@2 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <2>;
+ color = <LED_COLOR_ID_RGB>;
+ label = "case-led3";
+
+ led@0 {
+ reg = <0>;
+ color = <LED_COLOR_ID_RED>;
+ };
+
+ led@1 {
+ reg = <1>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led@2 {
+ reg = <2>;
+ color = <LED_COLOR_ID_BLUE>;
+ };
+ };
+
+ multi-led@3 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <3>;
+ color = <LED_COLOR_ID_RGB>;
+ label = "case-led4";
+
+ led@0 {
+ reg = <0>;
+ color = <LED_COLOR_ID_RED>;
+ };
+
+ led@1 {
+ reg = <1>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led@2 {
+ reg = <2>;
+ color = <LED_COLOR_ID_BLUE>;
+ };
+ };
+ };
+
+ accelerometer@18 {
+ compatible = "st,lis2dw12";
+ reg = <0x18>;
+ interrupt-parent = <&gpio5>;
+ interrupts = <3 IRQ_TYPE_EDGE_RISING>, <5 IRQ_TYPE_EDGE_RISING>;
+ pinctrl-0 = <&pinctrl_lis_int>;
+ pinctrl-names = "default";
+ vddio-supply = <®_vdd_3v3>;
+ vdd-supply = <®_vdd_3v3>;
+ };
+
+ humidity-sensor@5f {
+ compatible = "st,hts221";
+ reg = <0x5f>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <10 IRQ_TYPE_EDGE_RISING>;
+ pinctrl-0 = <&pinctrl_hts_int>;
+ pinctrl-names = "default";
+ vdd-supply = <®_vdd_3v3>;
+ };
+};
+
+&iomuxc {
+ pinctrl_bt: btgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_GPIO1_IO01_GPIO1_IO1
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_SAI5_MCLK_GPIO3_IO25
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE | MX8MM_HYS_SCHMITT)
+ MX8MM_IOMUXC_ECSPI2_SS0_GPIO5_IO13
+ MX8MM_DSE_X1
+ >;
+ };
+
+ pinctrl_can1: can1grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SAI2_TXC_GPIO4_IO25
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI5_RXD1_GPIO3_IO22
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE | MX8MM_HYS_SCHMITT)
+ >;
+ };
+
+ pinctrl_can1_reg: can1reggrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SD2_CD_B_GPIO2_IO12
+ (MX8MM_DSE_X2 | MX8MM_FSEL_FAST | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_can2: can2grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_NAND_CLE_GPIO3_IO5
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_NAND_DATA00_GPIO3_IO6
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE | MX8MM_HYS_SCHMITT)
+ >;
+ };
+
+ pinctrl_can2_reg: can2reggrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_NAND_RE_B_GPIO3_IO15
+ (MX8MM_DSE_X2 | MX8MM_FSEL_FAST | MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_ecspi1: ecspi1grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_ECSPI1_MOSI_ECSPI1_MOSI
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_ECSPI1_MISO_ECSPI1_MISO
+ (MX8MM_DSE_X4 | MX8MM_HYS_SCHMITT)
+ MX8MM_IOMUXC_ECSPI1_SCLK_ECSPI1_SCLK
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_SAI2_MCLK_GPIO4_IO27
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_SAI5_RXD2_GPIO3_IO23
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_NAND_CE0_B_GPIO3_IO1
+ MX8MM_DSE_X1
+ >;
+ };
+
+ pinctrl_ecspi2: ecspi2grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_ECSPI2_MOSI_ECSPI2_MOSI
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_ECSPI2_MISO_ECSPI2_MISO
+ (MX8MM_DSE_X4 | MX8MM_HYS_SCHMITT)
+ MX8MM_IOMUXC_ECSPI2_SCLK_ECSPI2_SCLK
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_SAI5_RXD3_GPIO3_IO24
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_NAND_DATA03_GPIO3_IO9
+ MX8MM_DSE_X1
+ >;
+ };
+
+ pinctrl_ecspi3: ecspi3grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_UART1_TXD_ECSPI3_MOSI
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_UART2_RXD_ECSPI3_MISO
+ (MX8MM_DSE_X4 | MX8MM_HYS_SCHMITT)
+ MX8MM_IOMUXC_UART1_RXD_ECSPI3_SCLK
+ MX8MM_DSE_X4
+ MX8MM_IOMUXC_GPIO1_IO09_GPIO1_IO9
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_GPIO1_IO02_GPIO1_IO2
+ MX8MM_DSE_X1
+ >;
+ };
+
+ pinctrl_hts_int: htsintgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_NAND_DATA04_GPIO3_IO10
+ (MX8MM_PULL_ENABLE | MX8MM_HYS_SCHMITT)
+ >;
+ };
+
+ pinctrl_i2c2: i2c2grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_I2C2_SCL_I2C2_SCL
+ MX8MM_I2C_DEFAULT
+ MX8MM_IOMUXC_I2C2_SDA_I2C2_SDA
+ MX8MM_I2C_DEFAULT
+ >;
+ };
+
+ pinctrl_i2c2_gpio: i2c2-gpiogrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_I2C2_SCL_GPIO5_IO16
+ MX8MM_I2C_DEFAULT
+ MX8MM_IOMUXC_I2C2_SDA_GPIO5_IO17
+ MX8MM_I2C_DEFAULT
+ >;
+ };
+
+ pinctrl_i2c3: i2c3grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_I2C3_SCL_I2C3_SCL
+ MX8MM_I2C_DEFAULT
+ MX8MM_IOMUXC_I2C3_SDA_I2C3_SDA
+ MX8MM_I2C_DEFAULT
+ >;
+ };
+
+ pinctrl_i2c3_gpio: i2c3-gpiogrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_I2C3_SCL_GPIO5_IO18
+ MX8MM_I2C_DEFAULT
+ MX8MM_IOMUXC_I2C3_SDA_GPIO5_IO19
+ MX8MM_I2C_DEFAULT
+ >;
+ };
+
+ pinctrl_lis_int: lisintgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SPDIF_TX_GPIO5_IO3
+ (MX8MM_PULL_ENABLE | MX8MM_HYS_SCHMITT)
+ MX8MM_IOMUXC_SPDIF_EXT_CLK_GPIO5_IO5
+ (MX8MM_PULL_ENABLE | MX8MM_HYS_SCHMITT)
+ >;
+ };
+
+ pinctrl_reg_comm: reg_commgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_GPIO1_IO11_GPIO1_IO11
+ MX8MM_DSE_X1
+ >;
+ };
+
+ pinctrl_sysfs_gpios: sysfsgpiogrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_GPIO1_IO07_GPIO1_IO7
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_I2C4_SDA_GPIO5_IO21
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_SAI3_RXFS_GPIO4_IO28
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_SAI5_RXD0_GPIO3_IO21
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_SD2_WP_GPIO2_IO20
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_GPIO1_IO00_GPIO1_IO0
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_GPIO1_IO04_GPIO1_IO4
+ MX8MM_DSE_X1
+ MX8MM_IOMUXC_GPIO1_IO06_GPIO1_IO6
+ MX8MM_DSE_X1
+ >;
+ };
+
+ pinctrl_uart1: uart1grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SAI2_RXC_UART1_DCE_RX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI2_RXFS_UART1_DCE_TX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI2_RXD0_UART1_DCE_RTS_B
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI2_TXFS_UART1_DCE_CTS_B
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_uart2: uart2grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SAI3_TXFS_UART2_DCE_RX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI3_TXC_UART2_DCE_TX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI3_RXD_UART2_DCE_RTS_B
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SAI3_RXC_UART2_DCE_CTS_B
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_uart3: uart3grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_UART3_RXD_UART3_DCE_RX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_UART3_TXD_UART3_DCE_TX
+ (MX8MM_PULL_UP | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_usdhc2: pinctrlusdhc2grp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SD2_CLK_USDHC2_CLK
+ (MX8MM_DSE_X2 | MX8MM_FSEL_FAST | MX8MM_PULL_ENABLE)
+ MX8MM_IOMUXC_SD2_CMD_USDHC2_CMD
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD2_DATA0_USDHC2_DATA0
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD2_DATA1_USDHC2_DATA1
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD2_DATA2_USDHC2_DATA2
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ MX8MM_IOMUXC_SD2_DATA3_USDHC2_DATA3
+ (MX8MM_DSE_X2 | MX8MM_USDHC_DATA_DEFAULT)
+ >;
+ };
+
+ pinctrl_wl_int: wlintgrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_SAI5_RXC_GPIO3_IO20
+ (MX8MM_PULL_UP | MX8MM_HYS_SCHMITT | MX8MM_PULL_ENABLE)
+ >;
+ };
+
+ pinctrl_wl_reg: wlreggrp {
+ fsl,pins = <
+ MX8MM_IOMUXC_UART4_RXD_GPIO5_IO28
+ MX8MM_DSE_X1
+ >;
+ };
+};
+
+&uart1 {
+ pinctrl-0 = <&pinctrl_uart1>;
+ pinctrl-names = "default";
+ uart-has-rtscts;
+ status = "okay";
+
+ bluetooth {
+ compatible = "infineon,cyw43439-bt", "brcm,bcm4329-bt";
+ device-wakeup-gpios = <&gpio5 13 GPIO_ACTIVE_HIGH>;
+ interrupt-names = "host-wakeup";
+ interrupt-parent = <&gpio3>;
+ interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
+ max-speed = <921600>;
+ pinctrl-0 = <&pinctrl_bt>;
+ pinctrl-names = "default";
+ shutdown-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
+ vbat-supply = <®_3v3_comm>;
+ vddio-supply = <®_3v3_comm>;
+ };
+};
+
+&uart2 {
+ pinctrl-0 = <&pinctrl_uart2>;
+ pinctrl-names = "default";
+ uart-has-rtscts;
+ status = "okay";
+};
+
+&uart3 {
+ pinctrl-0 = <&pinctrl_uart3>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&usbotg1 {
+ disable-over-current;
+ dr_mode = "peripheral";
+ status = "okay";
+};
+
+&usbotg2 {
+ disable-over-current;
+ dr_mode = "host";
+ vbus-supply = <®_5v0>;
+ status = "okay";
+};
+
+&usdhc2 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cap-power-off-card;
+ keep-power-in-suspend;
+ max-frequency = <50000000>;
+ mmc-pwrseq = <&wifi_pwrseq>;
+ non-removable;
+ pinctrl-0 = <&pinctrl_usdhc2>;
+ pinctrl-names = "default";
+ sd-uhs-sdr25;
+ vmmc-supply = <®_3v3_comm>;
+ status = "okay";
+
+ wifi@1 {
+ compatible = "infineon,cyw43439-fmac", "brcm,bcm4329-fmac";
+ reg = <1>;
+ pinctrl-0 = <&pinctrl_wl_int>;
+ pinctrl-names = "default";
+ interrupt-names = "host-wake";
+ interrupt-parent = <&gpio3>;
+ interrupts = <20 IRQ_TYPE_LEVEL_LOW>;
+ brcm,board-type = "GOcontroll,moduline";
+ };
+};
+
+&vpu_blk_ctrl {
+ status = "disabled";
+};
+
+&vpu_g1 {
+ status = "disabled";
+};
+
+&vpu_g2 {
+ status = "disabled";
+};
+
+&wdog1 {
+ status = "okay";
+};
--
2.51.1
^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2 4/5] arm64: dts: freescale: Add the GOcontroll Moduline IV
2025-10-22 7:22 ` [PATCH v2 4/5] arm64: dts: freescale: Add the GOcontroll Moduline IV Maud Spierings via B4 Relay
@ 2025-10-22 7:57 ` Marc Kleine-Budde
2025-10-22 8:23 ` Maud Spierings
2025-10-22 10:18 ` Maud Spierings
1 sibling, 1 reply; 28+ messages in thread
From: Marc Kleine-Budde @ 2025-10-22 7:57 UTC (permalink / raw)
To: Maud Spierings via B4 Relay
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, devicetree,
Maud Spierings, linux-kernel, linux-arm-kernel, imx
[-- Attachment #1: Type: text/plain, Size: 721 bytes --]
On 22.10.2025 09:22:40, Maud Spierings via B4 Relay wrote:
> + can@2 { // reg vdd?
What about this comment?
> + compatible = "microchip,mcp25625";
> + reg = <2>;
> + clocks = <&mcp_clock>;
> + interrupt-parent = <&gpio3>;
> + interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
> + pinctrl-0 = <&pinctrl_can1>;
> + pinctrl-names = "default";
> + spi-max-frequency = <10000000>;
> + xceiver-supply = <®_can1_stby>;
> + };
regards,
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung Nürnberg | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 4/5] arm64: dts: freescale: Add the GOcontroll Moduline IV
2025-10-22 7:57 ` Marc Kleine-Budde
@ 2025-10-22 8:23 ` Maud Spierings
0 siblings, 0 replies; 28+ messages in thread
From: Maud Spierings @ 2025-10-22 8:23 UTC (permalink / raw)
To: Marc Kleine-Budde, Maud Spierings via B4 Relay
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, devicetree,
linux-kernel, linux-arm-kernel, imx
Hi Marc,
Thanks for the review
On 10/22/25 09:57, Marc Kleine-Budde wrote:
> On 22.10.2025 09:22:40, Maud Spierings via B4 Relay wrote:
>> + can@2 { // reg vdd?
>
> What about this comment?
Thought I resolved that oops, will be fixed in the next version
>> + compatible = "microchip,mcp25625";
>> + reg = <2>;
>> + clocks = <&mcp_clock>;
>> + interrupt-parent = <&gpio3>;
>> + interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
>> + pinctrl-0 = <&pinctrl_can1>;
>> + pinctrl-names = "default";
>> + spi-max-frequency = <10000000>;
>> + xceiver-supply = <®_can1_stby>;
>> + };
Kind regards,
Maud
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 4/5] arm64: dts: freescale: Add the GOcontroll Moduline IV
2025-10-22 7:22 ` [PATCH v2 4/5] arm64: dts: freescale: Add the GOcontroll Moduline IV Maud Spierings via B4 Relay
2025-10-22 7:57 ` Marc Kleine-Budde
@ 2025-10-22 10:18 ` Maud Spierings
1 sibling, 0 replies; 28+ messages in thread
From: Maud Spierings @ 2025-10-22 10:18 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, linux-kernel, imx, linux-arm-kernel
> +/* SPI 2 */
> +&ecspi1 {
> + pinctrl-0 = <&pinctrl_ecspi1>;
> + pinctrl-names = "default";
This is bad, missed this. Will be fixed in the next version, same for
the mini devicetree and all spi interfaces.
> + cs-gpios = <
> + &gpio1 9 GPIO_ACTIVE_LOW
> + &gpio1 0 GPIO_ACTIVE_LOW
> + &gpio5 2 GPIO_ACTIVE_LOW
> + &gpio4 27 GPIO_ACTIVE_LOW
> + &gpio3 1 GPIO_ACTIVE_LOW
> + >;
> + status = "okay";
Kind regards,
Maud
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-22 7:22 ` [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM Maud Spierings via B4 Relay
@ 2025-10-28 12:15 ` Matti Vaittinen
2025-10-28 12:42 ` Maud Spierings
0 siblings, 1 reply; 28+ messages in thread
From: Matti Vaittinen @ 2025-10-28 12:15 UTC (permalink / raw)
To: maudspierings, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, linux-kernel, imx, linux-arm-kernel
Hi Maud,
Thanks for the upstreaming work! :)
On 22/10/2025 10:22, Maud Spierings via B4 Relay wrote:
> From: Maud Spierings <maudspierings@gocontroll.com>
>
> The Ka-Ro Electronics tx8m-1610 is a COM based on the imx8mm SOC. It has
> 1 GB of ram and 4 GB of eMMC storage on board.
>
> Add it to enable boards based on this module
>
> Signed-off-by: Maud Spierings <maudspierings@gocontroll.com>
> ---
> .../arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi | 439 +++++++++++++++++++++
> 1 file changed, 439 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi b/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi
> new file mode 100644
> index 0000000000000..46d3ad80942cc
> --- /dev/null
> +++ b/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi
> @@ -0,0 +1,439 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +/*
> + * Copyright (C) 2021 Lothar Waßmann <LW@KARO-electronics.de>
> + * 2025 Maud Spierings <maudspierings@gocontroll.com>
> + */
> +
> +#include "imx8mm.dtsi"
> +
// snip
> + pmic: pmic@4b {
> + compatible = "rohm,bd71847";
> + reg = <0x4b>;
> + interrupt-parent = <&gpio1>;
> + interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
> + pinctrl-0 = <&pinctrl_pmic>;
> + pinctrl-names = "default";
> + rohm,reset-snvs-powered;
> +
> + regulators {
> + reg_vdd_soc: BUCK1 {
> + regulator-always-on;
> + regulator-boot-on;
> + regulator-max-microvolt = <900000>;
> + regulator-min-microvolt = <780000>;
> + regulator-name = "buck1";
> + regulator-ramp-delay = <1250>;
> + };
> +
> + reg_vdd_arm: BUCK2 {
> + regulator-always-on;
> + regulator-boot-on;
> + regulator-max-microvolt = <950000>;
> + regulator-min-microvolt = <805000>;
> + regulator-name = "buck2";
> + regulator-ramp-delay = <1250>;
> + rohm,dvs-run-voltage = <950000>;
> + rohm,dvs-idle-voltage = <810000>;
> + };
> +
> + reg_vdd_dram: BUCK3 {
> + regulator-always-on;
> + regulator-boot-on;
> + regulator-max-microvolt = <900000>;
> + regulator-min-microvolt = <805000>;
> + regulator-name = "buck3";
> + };
> +
> + reg_vdd_3v3: BUCK4 {
> + regulator-always-on;
> + regulator-boot-on;
> + regulator-max-microvolt = <3300000>;
> + regulator-min-microvolt = <3300000>;
> + regulator-name = "buck4";
> + };
> +
> + reg_vdd_1v8: BUCK5 {
> + regulator-always-on;
> + regulator-boot-on;
> + regulator-max-microvolt = <1950000>;
> + regulator-min-microvolt = <1700000>;
> + regulator-name = "buck5";
> + };
> +
> + BUCK6 {
> + regulator-always-on;
> + regulator-boot-on;
> + /*
> + * The default output voltage is 1.1V, bumped
> + * to 1.35V in HW by a 499R/2.2K voltage divider in the
> + * feedback path.
> + */
Could/Should this be described using the:
'rohm,feedback-pull-up-r1-ohms' and
'rohm,feedback-pull-up-r2-ohms'? If I understand the comment correctly,
that might allow the driver to be able to use correctly scaled voltages.
https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
> + regulator-max-microvolt = <1100000>;
> + regulator-min-microvolt = <1100000>;
> + regulator-name = "buck6";
> + };
Yours,
-- Matti
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-28 12:15 ` Matti Vaittinen
@ 2025-10-28 12:42 ` Maud Spierings
2025-10-28 13:10 ` Maud Spierings
0 siblings, 1 reply; 28+ messages in thread
From: Maud Spierings @ 2025-10-28 12:42 UTC (permalink / raw)
To: Matti Vaittinen, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, linux-kernel, imx, linux-arm-kernel
On 10/28/25 13:15, Matti Vaittinen wrote:
> Hi Maud,
>
> Thanks for the upstreaming work! :)
>
> On 22/10/2025 10:22, Maud Spierings via B4 Relay wrote:
>> From: Maud Spierings <maudspierings@gocontroll.com>
>>
>> The Ka-Ro Electronics tx8m-1610 is a COM based on the imx8mm SOC. It has
>> 1 GB of ram and 4 GB of eMMC storage on board.
>>
>> Add it to enable boards based on this module
>>
>> Signed-off-by: Maud Spierings <maudspierings@gocontroll.com>
>> ---
>> .../arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi | 439 +++++++++++
>> ++++++++++
>> 1 file changed, 439 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi b/
>> arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi
>> new file mode 100644
>> index 0000000000000..46d3ad80942cc
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi
>> @@ -0,0 +1,439 @@
>> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
>> +/*
>> + * Copyright (C) 2021 Lothar Waßmann <LW@KARO-electronics.de>
>> + * 2025 Maud Spierings <maudspierings@gocontroll.com>
>> + */
>> +
>> +#include "imx8mm.dtsi"
>> +
>
> // snip
>
>> + pmic: pmic@4b {
>> + compatible = "rohm,bd71847";
>> + reg = <0x4b>;
>> + interrupt-parent = <&gpio1>;
>> + interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
>> + pinctrl-0 = <&pinctrl_pmic>;
>> + pinctrl-names = "default";
>> + rohm,reset-snvs-powered;
>> +
>> + regulators {
>> + reg_vdd_soc: BUCK1 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <900000>;
>> + regulator-min-microvolt = <780000>;
>> + regulator-name = "buck1";
>> + regulator-ramp-delay = <1250>;
>> + };
>> +
>> + reg_vdd_arm: BUCK2 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <950000>;
>> + regulator-min-microvolt = <805000>;
>> + regulator-name = "buck2";
>> + regulator-ramp-delay = <1250>;
>> + rohm,dvs-run-voltage = <950000>;
>> + rohm,dvs-idle-voltage = <810000>;
>> + };
>> +
>> + reg_vdd_dram: BUCK3 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <900000>;
>> + regulator-min-microvolt = <805000>;
>> + regulator-name = "buck3";
>> + };
>> +
>> + reg_vdd_3v3: BUCK4 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <3300000>;
>> + regulator-min-microvolt = <3300000>;
>> + regulator-name = "buck4";
>> + };
>> +
>> + reg_vdd_1v8: BUCK5 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + regulator-max-microvolt = <1950000>;
>> + regulator-min-microvolt = <1700000>;
>> + regulator-name = "buck5";
>> + };
>> +
>> + BUCK6 {
>> + regulator-always-on;
>> + regulator-boot-on;
>> + /*
>> + * The default output voltage is 1.1V, bumped
>> + * to 1.35V in HW by a 499R/2.2K voltage divider in the
>> + * feedback path.
>> + */
>
> Could/Should this be described using the:
> 'rohm,feedback-pull-up-r1-ohms' and
> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment correctly,
> that might allow the driver to be able to use correctly scaled voltages.
>
> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>
Ah I didn't know those existed, should've checked the bindings in more
detail, thanks for the hint!
I will have to investigate this carefully, since I don't have access to
the actual design of the COM, so I don't know exactly what is there.
Kind regards,
Maud
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-28 12:42 ` Maud Spierings
@ 2025-10-28 13:10 ` Maud Spierings
2025-10-29 7:11 ` Lothar Waßmann
0 siblings, 1 reply; 28+ messages in thread
From: Maud Spierings @ 2025-10-28 13:10 UTC (permalink / raw)
To: Matti Vaittinen, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: devicetree, linux-kernel, imx, linux-arm-kernel, LW
On 10/28/25 13:42, Maud Spierings wrote:
> On 10/28/25 13:15, Matti Vaittinen wrote:
>> Hi Maud,
>>
>> Thanks for the upstreaming work! :)
>>
>> On 22/10/2025 10:22, Maud Spierings via B4 Relay wrote:
>>> From: Maud Spierings <maudspierings@gocontroll.com>
>>>
>>> The Ka-Ro Electronics tx8m-1610 is a COM based on the imx8mm SOC. It has
>>> 1 GB of ram and 4 GB of eMMC storage on board.
>>>
>>> Add it to enable boards based on this module
>>>
>>> Signed-off-by: Maud Spierings <maudspierings@gocontroll.com>
>>> ---
>>> .../arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi | 439 ++++++++++
>>> + ++++++++++
>>> 1 file changed, 439 insertions(+)
>>>
>>> diff --git a/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi b/
>>> arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi
>>> new file mode 100644
>>> index 0000000000000..46d3ad80942cc
>>> --- /dev/null
>>> +++ b/arch/arm64/boot/dts/freescale/imx8mm-tx8m-1610.dtsi
>>> @@ -0,0 +1,439 @@
>>> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
>>> +/*
>>> + * Copyright (C) 2021 Lothar Waßmann <LW@KARO-electronics.de>
>>> + * 2025 Maud Spierings <maudspierings@gocontroll.com>
>>> + */
>>> +
>>> +#include "imx8mm.dtsi"
>>> +
>>
>> // snip
>>
>>> + pmic: pmic@4b {
>>> + compatible = "rohm,bd71847";
>>> + reg = <0x4b>;
>>> + interrupt-parent = <&gpio1>;
>>> + interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
>>> + pinctrl-0 = <&pinctrl_pmic>;
>>> + pinctrl-names = "default";
>>> + rohm,reset-snvs-powered;
>>> +
>>> + regulators {
>>> + reg_vdd_soc: BUCK1 {
>>> + regulator-always-on;
>>> + regulator-boot-on;
>>> + regulator-max-microvolt = <900000>;
>>> + regulator-min-microvolt = <780000>;
>>> + regulator-name = "buck1";
>>> + regulator-ramp-delay = <1250>;
>>> + };
>>> +
>>> + reg_vdd_arm: BUCK2 {
>>> + regulator-always-on;
>>> + regulator-boot-on;
>>> + regulator-max-microvolt = <950000>;
>>> + regulator-min-microvolt = <805000>;
>>> + regulator-name = "buck2";
>>> + regulator-ramp-delay = <1250>;
>>> + rohm,dvs-run-voltage = <950000>;
>>> + rohm,dvs-idle-voltage = <810000>;
>>> + };
>>> +
>>> + reg_vdd_dram: BUCK3 {
>>> + regulator-always-on;
>>> + regulator-boot-on;
>>> + regulator-max-microvolt = <900000>;
>>> + regulator-min-microvolt = <805000>;
>>> + regulator-name = "buck3";
>>> + };
>>> +
>>> + reg_vdd_3v3: BUCK4 {
>>> + regulator-always-on;
>>> + regulator-boot-on;
>>> + regulator-max-microvolt = <3300000>;
>>> + regulator-min-microvolt = <3300000>;
>>> + regulator-name = "buck4";
>>> + };
>>> +
>>> + reg_vdd_1v8: BUCK5 {
>>> + regulator-always-on;
>>> + regulator-boot-on;
>>> + regulator-max-microvolt = <1950000>;
>>> + regulator-min-microvolt = <1700000>;
>>> + regulator-name = "buck5";
>>> + };
>>> +
>>> + BUCK6 {
>>> + regulator-always-on;
>>> + regulator-boot-on;
>>> + /*
>>> + * The default output voltage is 1.1V, bumped
>>> + * to 1.35V in HW by a 499R/2.2K voltage divider in the
>>> + * feedback path.
>>> + */
>>
>> Could/Should this be described using the:
>> 'rohm,feedback-pull-up-r1-ohms' and
>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>> correctly, that might allow the driver to be able to use correctly
>> scaled voltages.
>>
>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>
>
> Ah I didn't know those existed, should've checked the bindings in more
> detail, thanks for the hint!
>
> I will have to investigate this carefully, since I don't have access to
> the actual design of the COM, so I don't know exactly what is there.
>
So I am not yet entirely sure if this works out, I used the calculation
in the driver:
/*
* Setups where regulator (especially the buck8) output voltage is scaled
* by adding external connection where some other regulator output is
connected
* to feedback-pin (over suitable resistors) is getting popular amongst
users
* of BD71837. (This allows for example scaling down the buck8 voltages
to suit
* lover GPU voltages for projects where buck8 is (ab)used to supply power
* for GPU. Additionally some setups do allow DVS for buck8 but as this do
* produce voltage spikes the HW must be evaluated to be able to
survive this
* - hence I keep the DVS disabled for non DVS bucks by default. I
don't want
* to help you burn your proto board)
*
* So we allow describing this external connection from DT and scale the
* voltages accordingly. This is what the connection should look like:
*
* |------------|
* | buck 8 |-------+----->Vout
* | | |
* |------------| |
* | FB pin |
* | |
* +-------+--R2---+
* |
* R1
* |
* V FB-pull-up
*
* Here the buck output is sifted according to formula:
*
* Vout_o = Vo - (Vpu - Vo)*R2/R1
* Linear_step = step_orig*(R1+R2)/R1
*
* where:
* Vout_o is adjusted voltage output at vsel reg value 0
* Vo is original voltage output at vsel reg value 0
* Vpu is the pull-up voltage V FB-pull-up in the picture
* R1 and R2 are resistor values.
*
* As a real world example for buck8 and a specific GPU:
* VLDO = 1.6V (used as FB-pull-up)
* R1 = 1000ohms
* R2 = 150ohms
* VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
* Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
*/
Because I do not know the pull up voltage, and I am not sure if it is a
pull up.
So:
Vout_o = 1.35V
Vo = 1.1V
Vpu = unknown
R2 = 499 Ohm
R1 = 2200 Ohm
Gives:
Vpu = ~0V
And:
Vout_o = 1.35V
Vo = 1.1V
Vpu = unknown
R2 = 2200 Ohm
R1 = 499 Ohm
Gives:
Vpu = ~1.04V
I am not quite sure which resistor is R1 and which is R2 but having
there be a pull down to 0V seems the most logical answer?
I am adding Lothar from Ka-Ro to the CC maybe he can shed some light on
this setup.
Kind regards,
Maud
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-28 13:10 ` Maud Spierings
@ 2025-10-29 7:11 ` Lothar Waßmann
2025-10-29 8:42 ` Matti Vaittinen
0 siblings, 1 reply; 28+ messages in thread
From: Lothar Waßmann @ 2025-10-29 7:11 UTC (permalink / raw)
To: Maud Spierings
Cc: Matti Vaittinen, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
devicetree, linux-kernel, imx, linux-arm-kernel
Hi,
On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
> On 10/28/25 13:42, Maud Spierings wrote:
> > On 10/28/25 13:15, Matti Vaittinen wrote:
[...]
> >> Could/Should this be described using the:
> >> 'rohm,feedback-pull-up-r1-ohms' and
> >> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
> >> correctly, that might allow the driver to be able to use correctly
> >> scaled voltages.
> >>
> >> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
> >> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
> >>
> >
> > Ah I didn't know those existed, should've checked the bindings in more
> > detail, thanks for the hint!
> >
> > I will have to investigate this carefully, since I don't have access to
> > the actual design of the COM, so I don't know exactly what is there.
> >
>
> So I am not yet entirely sure if this works out, I used the calculation
> in the driver:
>
> /*
> * Setups where regulator (especially the buck8) output voltage is scaled
> * by adding external connection where some other regulator output is
> connected
> * to feedback-pin (over suitable resistors) is getting popular amongst
> users
> * of BD71837. (This allows for example scaling down the buck8 voltages
> to suit
> * lover GPU voltages for projects where buck8 is (ab)used to supply power
> * for GPU. Additionally some setups do allow DVS for buck8 but as this do
> * produce voltage spikes the HW must be evaluated to be able to
> survive this
> * - hence I keep the DVS disabled for non DVS bucks by default. I
> don't want
> * to help you burn your proto board)
> *
> * So we allow describing this external connection from DT and scale the
> * voltages accordingly. This is what the connection should look like:
> *
> * |------------|
> * | buck 8 |-------+----->Vout
> * | | |
> * |------------| |
> * | FB pin |
> * | |
> * +-------+--R2---+
> * |
> * R1
> * |
> * V FB-pull-up
> *
> * Here the buck output is sifted according to formula:
> *
> * Vout_o = Vo - (Vpu - Vo)*R2/R1
> * Linear_step = step_orig*(R1+R2)/R1
> *
> * where:
> * Vout_o is adjusted voltage output at vsel reg value 0
> * Vo is original voltage output at vsel reg value 0
> * Vpu is the pull-up voltage V FB-pull-up in the picture
> * R1 and R2 are resistor values.
> *
> * As a real world example for buck8 and a specific GPU:
> * VLDO = 1.6V (used as FB-pull-up)
> * R1 = 1000ohms
> * R2 = 150ohms
> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
> */
>
> Because I do not know the pull up voltage, and I am not sure if it is a
> pull up.
>
> So:
> Vout_o = 1.35V
> Vo = 1.1V
> Vpu = unknown
> R2 = 499 Ohm
> R1 = 2200 Ohm
> Gives:
> Vpu = ~0V
>
> And:
> Vout_o = 1.35V
> Vo = 1.1V
> Vpu = unknown
> R2 = 2200 Ohm
> R1 = 499 Ohm
> Gives:
> Vpu = ~1.04V
>
> I am not quite sure which resistor is R1 and which is R2 but having
> there be a pull down to 0V seems the most logical answer?
>
> I am adding Lothar from Ka-Ro to the CC maybe he can shed some light on
> this setup.
>
R2 is connected to GND, so Vpu = 0.
With:
regulator-min-microvolt = <1350000>;
regulator-max-microvolt = <1350000>;
rohm,fb-pull-up-microvolt = <0>;
rohm,feedback-pull-up-r1-ohms = <2200>;
rohm,feedback-pull-up-r2-ohms = <499>;
the correct voltage should be produced on the BUCK8 output, but a quick
test with these parameters led to:
|failed to get the current voltage: -EINVAL
|bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to register buck6 regulator
|bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
Apparently noone has ever tested this feature in real life.
Lothar Waßmann
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-29 7:11 ` Lothar Waßmann
@ 2025-10-29 8:42 ` Matti Vaittinen
2025-10-29 9:00 ` Maud Spierings
2025-10-29 9:48 ` Lothar Waßmann
0 siblings, 2 replies; 28+ messages in thread
From: Matti Vaittinen @ 2025-10-29 8:42 UTC (permalink / raw)
To: Lothar Waßmann, Maud Spierings
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, devicetree,
linux-kernel, imx, linux-arm-kernel
On 29/10/2025 09:11, Lothar Waßmann wrote:
> Hi,
>
> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
>> On 10/28/25 13:42, Maud Spierings wrote:
>>> On 10/28/25 13:15, Matti Vaittinen wrote:
> [...]
>>>> Could/Should this be described using the:
>>>> 'rohm,feedback-pull-up-r1-ohms' and
>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>>>> correctly, that might allow the driver to be able to use correctly
>>>> scaled voltages.
>>>>
>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>>>
>>>
>>> Ah I didn't know those existed, should've checked the bindings in more
>>> detail, thanks for the hint!
>>>
>>> I will have to investigate this carefully, since I don't have access to
>>> the actual design of the COM, so I don't know exactly what is there.
>>>
>>
>> So I am not yet entirely sure if this works out, I used the calculation
>> in the driver:
>>
>> /*
>> * Setups where regulator (especially the buck8) output voltage is scaled
>> * by adding external connection where some other regulator output is
>> connected
>> * to feedback-pin (over suitable resistors) is getting popular amongst
>> users
>> * of BD71837. (This allows for example scaling down the buck8 voltages
>> to suit
>> * lover GPU voltages for projects where buck8 is (ab)used to supply power
>> * for GPU. Additionally some setups do allow DVS for buck8 but as this do
>> * produce voltage spikes the HW must be evaluated to be able to
>> survive this
>> * - hence I keep the DVS disabled for non DVS bucks by default. I
>> don't want
>> * to help you burn your proto board)
>> *
>> * So we allow describing this external connection from DT and scale the
>> * voltages accordingly. This is what the connection should look like:
>> *
>> * |------------|
>> * | buck 8 |-------+----->Vout
>> * | | |
>> * |------------| |
>> * | FB pin |
>> * | |
>> * +-------+--R2---+
>> * |
>> * R1
>> * |
>> * V FB-pull-up
>> *
>> * Here the buck output is sifted according to formula:
>> *
>> * Vout_o = Vo - (Vpu - Vo)*R2/R1
>> * Linear_step = step_orig*(R1+R2)/R1
>> *
>> * where:
>> * Vout_o is adjusted voltage output at vsel reg value 0
>> * Vo is original voltage output at vsel reg value 0
>> * Vpu is the pull-up voltage V FB-pull-up in the picture
>> * R1 and R2 are resistor values.
>> *
>> * As a real world example for buck8 and a specific GPU:
>> * VLDO = 1.6V (used as FB-pull-up)
>> * R1 = 1000ohms
>> * R2 = 150ohms
>> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
>> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
>> */
>>
>> Because I do not know the pull up voltage, and I am not sure if it is a
>> pull up.
>>
>> So:
>> Vout_o = 1.35V
>> Vo = 1.1V
>> Vpu = unknown
>> R2 = 499 Ohm
>> R1 = 2200 Ohm
>> Gives:
>> Vpu = ~0V
>>
>> And:
>> Vout_o = 1.35V
>> Vo = 1.1V
>> Vpu = unknown
>> R2 = 2200 Ohm
>> R1 = 499 Ohm
>> Gives:
>> Vpu = ~1.04V
>>
>> I am not quite sure which resistor is R1 and which is R2 but having
>> there be a pull down to 0V seems the most logical answer?
>>
>> I am adding Lothar from Ka-Ro to the CC maybe he can shed some light on
>> this setup.
>>
> R2 is connected to GND, so Vpu = 0.
> With:
> regulator-min-microvolt = <1350000>;
> regulator-max-microvolt = <1350000>;
> rohm,fb-pull-up-microvolt = <0>;
> rohm,feedback-pull-up-r1-ohms = <2200>;
> rohm,feedback-pull-up-r2-ohms = <499>;
> the correct voltage should be produced on the BUCK8 output, but a quick
> test with these parameters led to:
> |failed to get the current voltage: -EINVAL
> |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to register buck6 regulator
> |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
>
> Apparently noone has ever tested this feature in real life.
Thanks for trying it out Lothar. I am positive this was tested - but
probably the use-case has been using a pull-up. I assume having the zero
pull-up voltage causes the driver to calculate some bogus values. I
think fixing the computation in the driver might not be that big of a
task(?) The benefit of doing it would be that the correct voltages would
be calculated by the driver.
If real voltages aren't matching what is calculated by the driver, then
the voltages requested by regulator consumers will cause wrong voltages
to be applied. Debug interfaces will also show wrong voltages, and the
safety limits set in the device-tree will not be really respected.
I think this would be well worth fixing.
Yours,
-- Matti
>
>
> Lothar Waßmann
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-29 8:42 ` Matti Vaittinen
@ 2025-10-29 9:00 ` Maud Spierings
2025-10-29 9:33 ` Matti Vaittinen
2025-10-29 9:48 ` Lothar Waßmann
1 sibling, 1 reply; 28+ messages in thread
From: Maud Spierings @ 2025-10-29 9:00 UTC (permalink / raw)
To: Matti Vaittinen, Lothar Waßmann
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, devicetree,
linux-kernel, imx, linux-arm-kernel
On 10/29/25 09:42, Matti Vaittinen wrote:
> On 29/10/2025 09:11, Lothar Waßmann wrote:
>> Hi,
>>
>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
>>> On 10/28/25 13:42, Maud Spierings wrote:
>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
>> [...]
>>>>> Could/Should this be described using the:
>>>>> 'rohm,feedback-pull-up-r1-ohms' and
>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>>>>> correctly, that might allow the driver to be able to use correctly
>>>>> scaled voltages.
>>>>>
>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>>>
>>>> Ah I didn't know those existed, should've checked the bindings in more
>>>> detail, thanks for the hint!
>>>>
>>>> I will have to investigate this carefully, since I don't have access to
>>>> the actual design of the COM, so I don't know exactly what is there.
>>>
>>> So I am not yet entirely sure if this works out, I used the calculation
>>> in the driver:
>>>
>>> /*
>>> * Setups where regulator (especially the buck8) output voltage is
>>> scaled
>>> * by adding external connection where some other regulator output is
>>> connected
>>> * to feedback-pin (over suitable resistors) is getting popular
>>> amongst
>>> users
>>> * of BD71837. (This allows for example scaling down the buck8
>>> voltages
>>> to suit
>>> * lover GPU voltages for projects where buck8 is (ab)used to
>>> supply power
>>> * for GPU. Additionally some setups do allow DVS for buck8 but as
>>> this do
>>> * produce voltage spikes the HW must be evaluated to be able to
>>> survive this
>>> * - hence I keep the DVS disabled for non DVS bucks by default. I
>>> don't want
>>> * to help you burn your proto board)
>>> *
>>> * So we allow describing this external connection from DT and
>>> scale the
>>> * voltages accordingly. This is what the connection should look like:
>>> *
>>> * |------------|
>>> * | buck 8 |-------+----->Vout
>>> * | | |
>>> * |------------| |
>>> * | FB pin |
>>> * | |
>>> * +-------+--R2---+
>>> * |
>>> * R1
>>> * |
>>> * V FB-pull-up
>>> *
>>> * Here the buck output is sifted according to formula:
>>> *
>>> * Vout_o = Vo - (Vpu - Vo)*R2/R1
>>> * Linear_step = step_orig*(R1+R2)/R1
>>> *
>>> * where:
>>> * Vout_o is adjusted voltage output at vsel reg value 0
>>> * Vo is original voltage output at vsel reg value 0
>>> * Vpu is the pull-up voltage V FB-pull-up in the picture
>>> * R1 and R2 are resistor values.
>>> *
>>> * As a real world example for buck8 and a specific GPU:
>>> * VLDO = 1.6V (used as FB-pull-up)
>>> * R1 = 1000ohms
>>> * R2 = 150ohms
>>> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
>>> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
>>> */
>>>
>>> Because I do not know the pull up voltage, and I am not sure if it is a
>>> pull up.
>>>
>>> So:
>>> Vout_o = 1.35V
>>> Vo = 1.1V
>>> Vpu = unknown
>>> R2 = 499 Ohm
>>> R1 = 2200 Ohm
>>> Gives:
>>> Vpu = ~0V
>>>
>>> And:
>>> Vout_o = 1.35V
>>> Vo = 1.1V
>>> Vpu = unknown
>>> R2 = 2200 Ohm
>>> R1 = 499 Ohm
>>> Gives:
>>> Vpu = ~1.04V
>>>
>>> I am not quite sure which resistor is R1 and which is R2 but having
>>> there be a pull down to 0V seems the most logical answer?
>>>
>>> I am adding Lothar from Ka-Ro to the CC maybe he can shed some light on
>>> this setup.
>>>
>> R2 is connected to GND, so Vpu = 0.
>> With:
>> regulator-min-microvolt = <1350000>;
>> regulator-max-microvolt = <1350000>;
>> rohm,fb-pull-up-microvolt = <0>;
>> rohm,feedback-pull-up-r1-ohms = <2200>;
>> rohm,feedback-pull-up-r2-ohms = <499>;
>> the correct voltage should be produced on the BUCK8 output, but a quick
>> test with these parameters led to:
>> |failed to get the current voltage: -EINVAL
>> |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to register
>> buck6 regulator
>> |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
>>
>> Apparently noone has ever tested this feature in real life.
>
> Thanks for trying it out Lothar. I am positive this was tested - but
> probably the use-case has been using a pull-up. I assume having the zero
> pull-up voltage causes the driver to calculate some bogus values. I
> think fixing the computation in the driver might not be that big of a
> task(?) The benefit of doing it would be that the correct voltages would
> be calculated by the driver.
>
> If real voltages aren't matching what is calculated by the driver, then
> the voltages requested by regulator consumers will cause wrong voltages
> to be applied. Debug interfaces will also show wrong voltages, and the
> safety limits set in the device-tree will not be really respected.
>
> I think this would be well worth fixing.
>
Do you intend to do this Matti?
Otherwise I will give it a try.
Kind regards,
Maud
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-29 9:00 ` Maud Spierings
@ 2025-10-29 9:33 ` Matti Vaittinen
0 siblings, 0 replies; 28+ messages in thread
From: Matti Vaittinen @ 2025-10-29 9:33 UTC (permalink / raw)
To: Maud Spierings, Lothar Waßmann
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, devicetree,
linux-kernel, imx, linux-arm-kernel
On 29/10/2025 11:00, Maud Spierings wrote:
>
>
> On 10/29/25 09:42, Matti Vaittinen wrote:
>> On 29/10/2025 09:11, Lothar Waßmann wrote:
>>> Hi,
>>>
>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
>>>> On 10/28/25 13:42, Maud Spierings wrote:
>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
>>> [...]
>>>>>> Could/Should this be described using the:
>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>>>>>> correctly, that might allow the driver to be able to use correctly
>>>>>> scaled voltages.
>>>>>>
>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>>>>
>>>>> Ah I didn't know those existed, should've checked the bindings in more
>>>>> detail, thanks for the hint!
>>>>>
>>>>> I will have to investigate this carefully, since I don't have
>>>>> access to
>>>>> the actual design of the COM, so I don't know exactly what is there.
>>>>
>>>> So I am not yet entirely sure if this works out, I used the calculation
>>>> in the driver:
>>>>
>>>> /*
>>>> * Setups where regulator (especially the buck8) output voltage is
>>>> scaled
>>>> * by adding external connection where some other regulator output is
>>>> connected
>>>> * to feedback-pin (over suitable resistors) is getting popular
>>>> amongst
>>>> users
>>>> * of BD71837. (This allows for example scaling down the buck8
>>>> voltages
>>>> to suit
>>>> * lover GPU voltages for projects where buck8 is (ab)used to
>>>> supply power
>>>> * for GPU. Additionally some setups do allow DVS for buck8 but as
>>>> this do
>>>> * produce voltage spikes the HW must be evaluated to be able to
>>>> survive this
>>>> * - hence I keep the DVS disabled for non DVS bucks by default. I
>>>> don't want
>>>> * to help you burn your proto board)
>>>> *
>>>> * So we allow describing this external connection from DT and
>>>> scale the
>>>> * voltages accordingly. This is what the connection should look
>>>> like:
>>>> *
>>>> * |------------|
>>>> * | buck 8 |-------+----->Vout
>>>> * | | |
>>>> * |------------| |
>>>> * | FB pin |
>>>> * | |
>>>> * +-------+--R2---+
>>>> * |
>>>> * R1
>>>> * |
>>>> * V FB-pull-up
>>>> *
>>>> * Here the buck output is sifted according to formula:
>>>> *
>>>> * Vout_o = Vo - (Vpu - Vo)*R2/R1
>>>> * Linear_step = step_orig*(R1+R2)/R1
>>>> *
>>>> * where:
>>>> * Vout_o is adjusted voltage output at vsel reg value 0
>>>> * Vo is original voltage output at vsel reg value 0
>>>> * Vpu is the pull-up voltage V FB-pull-up in the picture
>>>> * R1 and R2 are resistor values.
>>>> *
>>>> * As a real world example for buck8 and a specific GPU:
>>>> * VLDO = 1.6V (used as FB-pull-up)
>>>> * R1 = 1000ohms
>>>> * R2 = 150ohms
>>>> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
>>>> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
>>>> */
>>>>
>>>> Because I do not know the pull up voltage, and I am not sure if it is a
>>>> pull up.
>>>>
>>>> So:
>>>> Vout_o = 1.35V
>>>> Vo = 1.1V
>>>> Vpu = unknown
>>>> R2 = 499 Ohm
>>>> R1 = 2200 Ohm
>>>> Gives:
>>>> Vpu = ~0V
>>>>
>>>> And:
>>>> Vout_o = 1.35V
>>>> Vo = 1.1V
>>>> Vpu = unknown
>>>> R2 = 2200 Ohm
>>>> R1 = 499 Ohm
>>>> Gives:
>>>> Vpu = ~1.04V
>>>>
>>>> I am not quite sure which resistor is R1 and which is R2 but having
>>>> there be a pull down to 0V seems the most logical answer?
>>>>
>>>> I am adding Lothar from Ka-Ro to the CC maybe he can shed some light on
>>>> this setup.
>>>>
>>> R2 is connected to GND, so Vpu = 0.
>>> With:
>>> regulator-min-microvolt = <1350000>;
>>> regulator-max-microvolt = <1350000>;
>>> rohm,fb-pull-up-microvolt = <0>;
>>> rohm,feedback-pull-up-r1-ohms = <2200>;
>>> rohm,feedback-pull-up-r2-ohms = <499>;
>>> the correct voltage should be produced on the BUCK8 output, but a quick
>>> test with these parameters led to:
>>> |failed to get the current voltage: -EINVAL
>>> |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to register
>>> buck6 regulator
>>> |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
>>>
>>> Apparently noone has ever tested this feature in real life.
>>
>> Thanks for trying it out Lothar. I am positive this was tested - but
>> probably the use-case has been using a pull-up. I assume having the
>> zero pull-up voltage causes the driver to calculate some bogus values.
>> I think fixing the computation in the driver might not be that big of
>> a task(?) The benefit of doing it would be that the correct voltages
>> would be calculated by the driver.
>>
>> If real voltages aren't matching what is calculated by the driver,
>> then the voltages requested by regulator consumers will cause wrong
>> voltages to be applied. Debug interfaces will also show wrong
>> voltages, and the safety limits set in the device-tree will not be
>> really respected.
>>
>> I think this would be well worth fixing.
>>
>
> Do you intend to do this Matti?
>
> Otherwise I will give it a try.
It would be great if you had the time and enthusiasm to take a look at it!
Yours,
-- Matti
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-29 8:42 ` Matti Vaittinen
2025-10-29 9:00 ` Maud Spierings
@ 2025-10-29 9:48 ` Lothar Waßmann
2025-10-29 10:05 ` Matti Vaittinen
1 sibling, 1 reply; 28+ messages in thread
From: Lothar Waßmann @ 2025-10-29 9:48 UTC (permalink / raw)
To: Matti Vaittinen
Cc: Maud Spierings, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
devicetree, linux-kernel, imx, linux-arm-kernel
Hi,
On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
> On 29/10/2025 09:11, Lothar Waßmann wrote:
> > Hi,
> >
> > On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
> >> On 10/28/25 13:42, Maud Spierings wrote:
> >>> On 10/28/25 13:15, Matti Vaittinen wrote:
> > [...]
> >>>> Could/Should this be described using the:
> >>>> 'rohm,feedback-pull-up-r1-ohms' and
> >>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
> >>>> correctly, that might allow the driver to be able to use correctly
> >>>> scaled voltages.
> >>>>
> >>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
> >>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
> >>>>
> >>>
> >>> Ah I didn't know those existed, should've checked the bindings in more
> >>> detail, thanks for the hint!
> >>>
> >>> I will have to investigate this carefully, since I don't have access to
> >>> the actual design of the COM, so I don't know exactly what is there.
> >>>
> >>
> >> So I am not yet entirely sure if this works out, I used the calculation
> >> in the driver:
> >>
> >> /*
> >> * Setups where regulator (especially the buck8) output voltage is scaled
> >> * by adding external connection where some other regulator output is
> >> connected
> >> * to feedback-pin (over suitable resistors) is getting popular amongst
> >> users
> >> * of BD71837. (This allows for example scaling down the buck8 voltages
> >> to suit
> >> * lover GPU voltages for projects where buck8 is (ab)used to supply power
> >> * for GPU. Additionally some setups do allow DVS for buck8 but as this do
> >> * produce voltage spikes the HW must be evaluated to be able to
> >> survive this
> >> * - hence I keep the DVS disabled for non DVS bucks by default. I
> >> don't want
> >> * to help you burn your proto board)
> >> *
> >> * So we allow describing this external connection from DT and scale the
> >> * voltages accordingly. This is what the connection should look like:
> >> *
> >> * |------------|
> >> * | buck 8 |-------+----->Vout
> >> * | | |
> >> * |------------| |
> >> * | FB pin |
> >> * | |
> >> * +-------+--R2---+
> >> * |
> >> * R1
> >> * |
> >> * V FB-pull-up
> >> *
> >> * Here the buck output is sifted according to formula:
> >> *
> >> * Vout_o = Vo - (Vpu - Vo)*R2/R1
> >> * Linear_step = step_orig*(R1+R2)/R1
> >> *
> >> * where:
> >> * Vout_o is adjusted voltage output at vsel reg value 0
> >> * Vo is original voltage output at vsel reg value 0
> >> * Vpu is the pull-up voltage V FB-pull-up in the picture
> >> * R1 and R2 are resistor values.
> >> *
> >> * As a real world example for buck8 and a specific GPU:
> >> * VLDO = 1.6V (used as FB-pull-up)
> >> * R1 = 1000ohms
> >> * R2 = 150ohms
> >> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
> >> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
> >> */
> >>
> >> Because I do not know the pull up voltage, and I am not sure if it is a
> >> pull up.
> >>
> >> So:
> >> Vout_o = 1.35V
> >> Vo = 1.1V
> >> Vpu = unknown
> >> R2 = 499 Ohm
> >> R1 = 2200 Ohm
> >> Gives:
> >> Vpu = ~0V
> >>
> >> And:
> >> Vout_o = 1.35V
> >> Vo = 1.1V
> >> Vpu = unknown
> >> R2 = 2200 Ohm
> >> R1 = 499 Ohm
> >> Gives:
> >> Vpu = ~1.04V
> >>
> >> I am not quite sure which resistor is R1 and which is R2 but having
> >> there be a pull down to 0V seems the most logical answer?
> >>
> >> I am adding Lothar from Ka-Ro to the CC maybe he can shed some light on
> >> this setup.
> >>
> > R2 is connected to GND, so Vpu = 0.
> > With:
> > regulator-min-microvolt = <1350000>;
> > regulator-max-microvolt = <1350000>;
> > rohm,fb-pull-up-microvolt = <0>;
> > rohm,feedback-pull-up-r1-ohms = <2200>;
> > rohm,feedback-pull-up-r2-ohms = <499>;
> > the correct voltage should be produced on the BUCK8 output, but a quick
> > test with these parameters led to:
> > |failed to get the current voltage: -EINVAL
> > |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to register buck6 regulator
> > |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
> >
> > Apparently noone has ever tested this feature in real life.
>
> Thanks for trying it out Lothar. I am positive this was tested - but
> probably the use-case has been using a pull-up. I assume having the zero
> pull-up voltage causes the driver to calculate some bogus values. I
> think fixing the computation in the driver might not be that big of a
> task(?) The benefit of doing it would be that the correct voltages would
> be calculated by the driver.
>
> If real voltages aren't matching what is calculated by the driver, then
> the voltages requested by regulator consumers will cause wrong voltages
> to be applied. Debug interfaces will also show wrong voltages, and the
> safety limits set in the device-tree will not be really respected.
>
> I think this would be well worth fixing.
>
Before doing the real-life test I did the same calculation that's done
in the driver to be sure that it will generate the correct values:
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
fb_uv=0
r1=2200
r2=499
min=800000
step=10000
# default voltage without divider
min+30*step
1100000
min=min-(fb_uv-min)*r2/r1
step=step*(r1+r2)/r1
min
981454
step
12268
# default voltage with divider
min+30*step
1349494
Probably we need to use this value rather than the nominal 135000 as
the target voltage in the DTB.
Lothar Waßmann
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-29 9:48 ` Lothar Waßmann
@ 2025-10-29 10:05 ` Matti Vaittinen
2025-10-29 15:35 ` Maud Spierings
0 siblings, 1 reply; 28+ messages in thread
From: Matti Vaittinen @ 2025-10-29 10:05 UTC (permalink / raw)
To: Lothar Waßmann
Cc: Maud Spierings, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
devicetree, linux-kernel, imx, linux-arm-kernel
On 29/10/2025 11:48, Lothar Waßmann wrote:
> Hi,
>
> On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
>> On 29/10/2025 09:11, Lothar Waßmann wrote:
>>> Hi,
>>>
>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
>>>> On 10/28/25 13:42, Maud Spierings wrote:
>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
>>> [...]
>>>>>> Could/Should this be described using the:
>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>>>>>> correctly, that might allow the driver to be able to use correctly
>>>>>> scaled voltages.
>>>>>>
>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>>>>>
>>>>>
>>>>> Ah I didn't know those existed, should've checked the bindings in more
>>>>> detail, thanks for the hint!
>>>>>
>>>>> I will have to investigate this carefully, since I don't have access to
>>>>> the actual design of the COM, so I don't know exactly what is there.
>>>>>
>>>>
>>>> So I am not yet entirely sure if this works out, I used the calculation
>>>> in the driver:
>>>>
>>>> /*
>>>> * Setups where regulator (especially the buck8) output voltage is scaled
>>>> * by adding external connection where some other regulator output is
>>>> connected
>>>> * to feedback-pin (over suitable resistors) is getting popular amongst
>>>> users
>>>> * of BD71837. (This allows for example scaling down the buck8 voltages
>>>> to suit
>>>> * lover GPU voltages for projects where buck8 is (ab)used to supply power
>>>> * for GPU. Additionally some setups do allow DVS for buck8 but as this do
>>>> * produce voltage spikes the HW must be evaluated to be able to
>>>> survive this
>>>> * - hence I keep the DVS disabled for non DVS bucks by default. I
>>>> don't want
>>>> * to help you burn your proto board)
>>>> *
>>>> * So we allow describing this external connection from DT and scale the
>>>> * voltages accordingly. This is what the connection should look like:
>>>> *
>>>> * |------------|
>>>> * | buck 8 |-------+----->Vout
>>>> * | | |
>>>> * |------------| |
>>>> * | FB pin |
>>>> * | |
>>>> * +-------+--R2---+
>>>> * |
>>>> * R1
>>>> * |
>>>> * V FB-pull-up
>>>> *
>>>> * Here the buck output is sifted according to formula:
>>>> *
>>>> * Vout_o = Vo - (Vpu - Vo)*R2/R1
>>>> * Linear_step = step_orig*(R1+R2)/R1
>>>> *
>>>> * where:
>>>> * Vout_o is adjusted voltage output at vsel reg value 0
>>>> * Vo is original voltage output at vsel reg value 0
>>>> * Vpu is the pull-up voltage V FB-pull-up in the picture
>>>> * R1 and R2 are resistor values.
>>>> *
>>>> * As a real world example for buck8 and a specific GPU:
>>>> * VLDO = 1.6V (used as FB-pull-up)
>>>> * R1 = 1000ohms
>>>> * R2 = 150ohms
>>>> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
>>>> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
>>>> */
>>>>
>>>> Because I do not know the pull up voltage, and I am not sure if it is a
>>>> pull up.
>>>>
>>>> So:
>>>> Vout_o = 1.35V
>>>> Vo = 1.1V
>>>> Vpu = unknown
>>>> R2 = 499 Ohm
>>>> R1 = 2200 Ohm
>>>> Gives:
>>>> Vpu = ~0V
>>>>
>>>> And:
>>>> Vout_o = 1.35V
>>>> Vo = 1.1V
>>>> Vpu = unknown
>>>> R2 = 2200 Ohm
>>>> R1 = 499 Ohm
>>>> Gives:
>>>> Vpu = ~1.04V
>>>>
>>>> I am not quite sure which resistor is R1 and which is R2 but having
>>>> there be a pull down to 0V seems the most logical answer?
>>>>
>>>> I am adding Lothar from Ka-Ro to the CC maybe he can shed some light on
>>>> this setup.
>>>>
>>> R2 is connected to GND, so Vpu = 0.
>>> With:
>>> regulator-min-microvolt = <1350000>;
>>> regulator-max-microvolt = <1350000>;
>>> rohm,fb-pull-up-microvolt = <0>;
>>> rohm,feedback-pull-up-r1-ohms = <2200>;
>>> rohm,feedback-pull-up-r2-ohms = <499>;
>>> the correct voltage should be produced on the BUCK8 output, but a quick
>>> test with these parameters led to:
>>> |failed to get the current voltage: -EINVAL
>>> |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to register buck6 regulator
>>> |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
>>>
>>> Apparently noone has ever tested this feature in real life.
>>
>> Thanks for trying it out Lothar. I am positive this was tested - but
>> probably the use-case has been using a pull-up. I assume having the zero
>> pull-up voltage causes the driver to calculate some bogus values. I
>> think fixing the computation in the driver might not be that big of a
>> task(?) The benefit of doing it would be that the correct voltages would
>> be calculated by the driver.
>>
>> If real voltages aren't matching what is calculated by the driver, then
>> the voltages requested by regulator consumers will cause wrong voltages
>> to be applied. Debug interfaces will also show wrong voltages, and the
>> safety limits set in the device-tree will not be really respected.
>>
>> I think this would be well worth fixing.
>>
> Before doing the real-life test I did the same calculation that's done
> in the driver to be sure that it will generate the correct values:
> bc 1.07.1
> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
> This is free software with ABSOLUTELY NO WARRANTY.
> For details type `warranty'.
> fb_uv=0
> r1=2200
> r2=499
> min=800000
> step=10000
> # default voltage without divider
> min+30*step
> 1100000
> min=min-(fb_uv-min)*r2/r1
> step=step*(r1+r2)/r1
> min
> 981454
> step
> 12268
> # default voltage with divider
> min+30*step
> 1349494
>
> Probably we need to use this value rather than the nominal 135000 as
> the target voltage in the DTB.
Yes. When the driver calculates the voltages which match the actual
voltages, then you should also use the actual voltages in the device-tree.
Yours,
-- Matti
>
>
> Lothar Waßmann
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-29 10:05 ` Matti Vaittinen
@ 2025-10-29 15:35 ` Maud Spierings
2025-10-29 15:51 ` Maud Spierings
2025-10-30 8:54 ` Lothar Waßmann
0 siblings, 2 replies; 28+ messages in thread
From: Maud Spierings @ 2025-10-29 15:35 UTC (permalink / raw)
To: Matti Vaittinen, Lothar Waßmann
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, devicetree,
linux-kernel, imx, linux-arm-kernel
Hi Matti,
On 10/29/25 11:05, Matti Vaittinen wrote:
> On 29/10/2025 11:48, Lothar Waßmann wrote:
>> Hi,
>>
>> On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
>>> On 29/10/2025 09:11, Lothar Waßmann wrote:
>>>> Hi,
>>>>
>>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
>>>>> On 10/28/25 13:42, Maud Spierings wrote:
>>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
>>>> [...]
>>>>>>> Could/Should this be described using the:
>>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
>>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>>>>>>> correctly, that might allow the driver to be able to use correctly
>>>>>>> scaled voltages.
>>>>>>>
>>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>>>>>
>>>>>> Ah I didn't know those existed, should've checked the bindings in
>>>>>> more
>>>>>> detail, thanks for the hint!
>>>>>>
>>>>>> I will have to investigate this carefully, since I don't have
>>>>>> access to
>>>>>> the actual design of the COM, so I don't know exactly what is there.
>>>>>
>>>>> So I am not yet entirely sure if this works out, I used the
>>>>> calculation
>>>>> in the driver:
>>>>>
>>>>> /*
>>>>> * Setups where regulator (especially the buck8) output voltage
>>>>> is scaled
>>>>> * by adding external connection where some other regulator
>>>>> output is
>>>>> connected
>>>>> * to feedback-pin (over suitable resistors) is getting popular
>>>>> amongst
>>>>> users
>>>>> * of BD71837. (This allows for example scaling down the buck8
>>>>> voltages
>>>>> to suit
>>>>> * lover GPU voltages for projects where buck8 is (ab)used to
>>>>> supply power
>>>>> * for GPU. Additionally some setups do allow DVS for buck8 but
>>>>> as this do
>>>>> * produce voltage spikes the HW must be evaluated to be able to
>>>>> survive this
>>>>> * - hence I keep the DVS disabled for non DVS bucks by default. I
>>>>> don't want
>>>>> * to help you burn your proto board)
>>>>> *
>>>>> * So we allow describing this external connection from DT and
>>>>> scale the
>>>>> * voltages accordingly. This is what the connection should look
>>>>> like:
>>>>> *
>>>>> * |------------|
>>>>> * | buck 8 |-------+----->Vout
>>>>> * | | |
>>>>> * |------------| |
>>>>> * | FB pin |
>>>>> * | |
>>>>> * +-------+--R2---+
>>>>> * |
>>>>> * R1
>>>>> * |
>>>>> * V FB-pull-up
>>>>> *
>>>>> * Here the buck output is sifted according to formula:
>>>>> *
>>>>> * Vout_o = Vo - (Vpu - Vo)*R2/R1
>>>>> * Linear_step = step_orig*(R1+R2)/R1
>>>>> *
>>>>> * where:
>>>>> * Vout_o is adjusted voltage output at vsel reg value 0
>>>>> * Vo is original voltage output at vsel reg value 0
>>>>> * Vpu is the pull-up voltage V FB-pull-up in the picture
>>>>> * R1 and R2 are resistor values.
>>>>> *
>>>>> * As a real world example for buck8 and a specific GPU:
>>>>> * VLDO = 1.6V (used as FB-pull-up)
>>>>> * R1 = 1000ohms
>>>>> * R2 = 150ohms
>>>>> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
>>>>> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
>>>>> */
>>>>>
>>>>> Because I do not know the pull up voltage, and I am not sure if it
>>>>> is a
>>>>> pull up.
>>>>>
>>>>> So:
>>>>> Vout_o = 1.35V
>>>>> Vo = 1.1V
>>>>> Vpu = unknown
>>>>> R2 = 499 Ohm
>>>>> R1 = 2200 Ohm
>>>>> Gives:
>>>>> Vpu = ~0V
>>>>>
>>>>> And:
>>>>> Vout_o = 1.35V
>>>>> Vo = 1.1V
>>>>> Vpu = unknown
>>>>> R2 = 2200 Ohm
>>>>> R1 = 499 Ohm
>>>>> Gives:
>>>>> Vpu = ~1.04V
>>>>>
>>>>> I am not quite sure which resistor is R1 and which is R2 but having
>>>>> there be a pull down to 0V seems the most logical answer?
>>>>>
>>>>> I am adding Lothar from Ka-Ro to the CC maybe he can shed some
>>>>> light on
>>>>> this setup.
>>>> R2 is connected to GND, so Vpu = 0.
>>>> With:
>>>> regulator-min-microvolt = <1350000>;
>>>> regulator-max-microvolt = <1350000>;
>>>> rohm,fb-pull-up-microvolt = <0>;
>>>> rohm,feedback-pull-up-r1-ohms = <2200>;
>>>> rohm,feedback-pull-up-r2-ohms = <499>;
>>>> the correct voltage should be produced on the BUCK8 output, but a quick
>>>> test with these parameters led to:
>>>> |failed to get the current voltage: -EINVAL
>>>> |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to register
>>>> buck6 regulator
>>>> |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
>>>>
>>>> Apparently noone has ever tested this feature in real life.
>>>
>>> Thanks for trying it out Lothar. I am positive this was tested - but
>>> probably the use-case has been using a pull-up. I assume having the zero
>>> pull-up voltage causes the driver to calculate some bogus values. I
>>> think fixing the computation in the driver might not be that big of a
>>> task(?) The benefit of doing it would be that the correct voltages would
>>> be calculated by the driver.
>>>
>>> If real voltages aren't matching what is calculated by the driver, then
>>> the voltages requested by regulator consumers will cause wrong voltages
>>> to be applied. Debug interfaces will also show wrong voltages, and the
>>> safety limits set in the device-tree will not be really respected.
>>>
>>> I think this would be well worth fixing.
>>>
>> Before doing the real-life test I did the same calculation that's done
>> in the driver to be sure that it will generate the correct values:
>> bc 1.07.1
>> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
>> Free Software Foundation, Inc.
>> This is free software with ABSOLUTELY NO WARRANTY.
>> For details type `warranty'.
>> fb_uv=0
>> r1=2200
>> r2=499
>> min=800000
>> step=10000
>> # default voltage without divider
>> min+30*step
>> 1100000
>> min=min-(fb_uv-min)*r2/r1
>> step=step*(r1+r2)/r1
>> min
>> 981454
>> step
>> 12268
>> # default voltage with divider
>> min+30*step
>> 1349494
>>
>> Probably we need to use this value rather than the nominal 135000 as
>> the target voltage in the DTB.
>
> Yes. When the driver calculates the voltages which match the actual
> voltages, then you should also use the actual voltages in the device-tree.
>
Think I've got it:
diff --git a/drivers/regulator/bd718x7-regulator.c
b/drivers/regulator/bd718x7-regulator.c
index 022d98f3c32a2..ea9c4058ee6a5 100644
--- a/drivers/regulator/bd718x7-regulator.c
+++ b/drivers/regulator/bd718x7-regulator.c
@@ -1613,6 +1613,8 @@ static int setup_feedback_loop(struct device *dev,
struct device_node *np,
step /= r1;
new[j].min = min;
+ new[j].min_sel =
desc->linear_ranges[j].min_sel;
+ new[j].max_sel =
desc->linear_ranges[j].max_sel;
new[j].step = step;
dev_dbg(dev, "%s: old range min %d,
step %d\n",
the min_sel and max_sel fields were uninitialized in the new
linear_range, copying them over from the old one (they refer to the
register range if I understand correctly so they should not change)
initializes them.
Then setting 1349494 as the actual voltage makes it fully work.
Otherwise it complains:
buck6: failed to apply 1350000-1350000uV constraint: -EINVAL
Final debug output now:
[ 0.327807] rohm-bd718x7 0-004b: buck6: old range min 800000, step 10000
[ 0.327813] rohm-bd718x7 0-004b: new range min 981454, step 12268
[ 0.327819] rohm-bd718x7 0-004b: regulator 'buck6' has FB pull-up
configured
I will add this fix to the next version of this patchset and include
your requested change in the dts.
Kind regards,
Maud
^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-29 15:35 ` Maud Spierings
@ 2025-10-29 15:51 ` Maud Spierings
2025-10-29 19:04 ` Matti Vaittinen
2025-10-30 8:54 ` Lothar Waßmann
1 sibling, 1 reply; 28+ messages in thread
From: Maud Spierings @ 2025-10-29 15:51 UTC (permalink / raw)
To: Matti Vaittinen, Lothar Waßmann
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, devicetree,
linux-kernel, imx, linux-arm-kernel
On 10/29/25 16:35, Maud Spierings wrote:
> Hi Matti,
>
> On 10/29/25 11:05, Matti Vaittinen wrote:
>> On 29/10/2025 11:48, Lothar Waßmann wrote:
>>> Hi,
>>>
>>> On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
>>>> On 29/10/2025 09:11, Lothar Waßmann wrote:
>>>>> Hi,
>>>>>
>>>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
>>>>>> On 10/28/25 13:42, Maud Spierings wrote:
>>>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
>>>>> [...]
>>>>>>>> Could/Should this be described using the:
>>>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
>>>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>>>>>>>> correctly, that might allow the driver to be able to use correctly
>>>>>>>> scaled voltages.
>>>>>>>>
>>>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>>>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>>>>>>
>>>>>>> Ah I didn't know those existed, should've checked the bindings in
>>>>>>> more
>>>>>>> detail, thanks for the hint!
>>>>>>>
>>>>>>> I will have to investigate this carefully, since I don't have
>>>>>>> access to
>>>>>>> the actual design of the COM, so I don't know exactly what is there.
>>>>>>
>>>>>> So I am not yet entirely sure if this works out, I used the
>>>>>> calculation
>>>>>> in the driver:
>>>>>>
>>>>>> /*
>>>>>> * Setups where regulator (especially the buck8) output voltage
>>>>>> is scaled
>>>>>> * by adding external connection where some other regulator
>>>>>> output is
>>>>>> connected
>>>>>> * to feedback-pin (over suitable resistors) is getting popular
>>>>>> amongst
>>>>>> users
>>>>>> * of BD71837. (This allows for example scaling down the buck8
>>>>>> voltages
>>>>>> to suit
>>>>>> * lover GPU voltages for projects where buck8 is (ab)used to
>>>>>> supply power
>>>>>> * for GPU. Additionally some setups do allow DVS for buck8 but
>>>>>> as this do
>>>>>> * produce voltage spikes the HW must be evaluated to be able to
>>>>>> survive this
>>>>>> * - hence I keep the DVS disabled for non DVS bucks by default. I
>>>>>> don't want
>>>>>> * to help you burn your proto board)
>>>>>> *
>>>>>> * So we allow describing this external connection from DT and
>>>>>> scale the
>>>>>> * voltages accordingly. This is what the connection should
>>>>>> look like:
>>>>>> *
>>>>>> * |------------|
>>>>>> * | buck 8 |-------+----->Vout
>>>>>> * | | |
>>>>>> * |------------| |
>>>>>> * | FB pin |
>>>>>> * | |
>>>>>> * +-------+--R2---+
>>>>>> * |
>>>>>> * R1
>>>>>> * |
>>>>>> * V FB-pull-up
>>>>>> *
>>>>>> * Here the buck output is sifted according to formula:
>>>>>> *
>>>>>> * Vout_o = Vo - (Vpu - Vo)*R2/R1
>>>>>> * Linear_step = step_orig*(R1+R2)/R1
>>>>>> *
>>>>>> * where:
>>>>>> * Vout_o is adjusted voltage output at vsel reg value 0
>>>>>> * Vo is original voltage output at vsel reg value 0
>>>>>> * Vpu is the pull-up voltage V FB-pull-up in the picture
>>>>>> * R1 and R2 are resistor values.
>>>>>> *
>>>>>> * As a real world example for buck8 and a specific GPU:
>>>>>> * VLDO = 1.6V (used as FB-pull-up)
>>>>>> * R1 = 1000ohms
>>>>>> * R2 = 150ohms
>>>>>> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
>>>>>> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
>>>>>> */
>>>>>>
>>>>>> Because I do not know the pull up voltage, and I am not sure if it
>>>>>> is a
>>>>>> pull up.
>>>>>>
>>>>>> So:
>>>>>> Vout_o = 1.35V
>>>>>> Vo = 1.1V
>>>>>> Vpu = unknown
>>>>>> R2 = 499 Ohm
>>>>>> R1 = 2200 Ohm
>>>>>> Gives:
>>>>>> Vpu = ~0V
>>>>>>
>>>>>> And:
>>>>>> Vout_o = 1.35V
>>>>>> Vo = 1.1V
>>>>>> Vpu = unknown
>>>>>> R2 = 2200 Ohm
>>>>>> R1 = 499 Ohm
>>>>>> Gives:
>>>>>> Vpu = ~1.04V
>>>>>>
>>>>>> I am not quite sure which resistor is R1 and which is R2 but having
>>>>>> there be a pull down to 0V seems the most logical answer?
>>>>>>
>>>>>> I am adding Lothar from Ka-Ro to the CC maybe he can shed some
>>>>>> light on
>>>>>> this setup.
>>>>> R2 is connected to GND, so Vpu = 0.
>>>>> With:
>>>>> regulator-min-microvolt = <1350000>;
>>>>> regulator-max-microvolt = <1350000>;
>>>>> rohm,fb-pull-up-microvolt = <0>;
>>>>> rohm,feedback-pull-up-r1-ohms = <2200>;
>>>>> rohm,feedback-pull-up-r2-ohms = <499>;
>>>>> the correct voltage should be produced on the BUCK8 output, but a
>>>>> quick
>>>>> test with these parameters led to:
>>>>> |failed to get the current voltage: -EINVAL
>>>>> |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to
>>>>> register buck6 regulator
>>>>> |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
>>>>>
>>>>> Apparently noone has ever tested this feature in real life.
>>>>
>>>> Thanks for trying it out Lothar. I am positive this was tested - but
>>>> probably the use-case has been using a pull-up. I assume having the
>>>> zero
>>>> pull-up voltage causes the driver to calculate some bogus values. I
>>>> think fixing the computation in the driver might not be that big of a
>>>> task(?) The benefit of doing it would be that the correct voltages
>>>> would
>>>> be calculated by the driver.
>>>>
>>>> If real voltages aren't matching what is calculated by the driver, then
>>>> the voltages requested by regulator consumers will cause wrong voltages
>>>> to be applied. Debug interfaces will also show wrong voltages, and the
>>>> safety limits set in the device-tree will not be really respected.
>>>>
>>>> I think this would be well worth fixing.
>>>>
>>> Before doing the real-life test I did the same calculation that's done
>>> in the driver to be sure that it will generate the correct values:
>>> bc 1.07.1
>>> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
>>> Free Software Foundation, Inc.
>>> This is free software with ABSOLUTELY NO WARRANTY.
>>> For details type `warranty'.
>>> fb_uv=0
>>> r1=2200
>>> r2=499
>>> min=800000
>>> step=10000
>>> # default voltage without divider
>>> min+30*step
>>> 1100000
>>> min=min-(fb_uv-min)*r2/r1
>>> step=step*(r1+r2)/r1
>>> min
>>> 981454
>>> step
>>> 12268
>>> # default voltage with divider
>>> min+30*step
>>> 1349494
>>>
>>> Probably we need to use this value rather than the nominal 135000 as
>>> the target voltage in the DTB.
>>
>> Yes. When the driver calculates the voltages which match the actual
>> voltages, then you should also use the actual voltages in the device-
>> tree.
>>
>
> Think I've got it:
>
> diff --git a/drivers/regulator/bd718x7-regulator.c b/drivers/regulator/
> bd718x7-regulator.c
> index 022d98f3c32a2..ea9c4058ee6a5 100644
> --- a/drivers/regulator/bd718x7-regulator.c
> +++ b/drivers/regulator/bd718x7-regulator.c
> @@ -1613,6 +1613,8 @@ static int setup_feedback_loop(struct device *dev,
> struct device_node *np,
> step /= r1;
>
> new[j].min = min;
> + new[j].min_sel = desc-
> >linear_ranges[j].min_sel;
> + new[j].max_sel = desc-
> >linear_ranges[j].max_sel;
> new[j].step = step;
>
> dev_dbg(dev, "%s: old range min %d,
> step %d\n",
>
>
> the min_sel and max_sel fields were uninitialized in the new
> linear_range, copying them over from the old one (they refer to the
> register range if I understand correctly so they should not change)
> initializes them.
>
> Then setting 1349494 as the actual voltage makes it fully work.
> Otherwise it complains:
> buck6: failed to apply 1350000-1350000uV constraint: -EINVAL
>
> Final debug output now:
> [ 0.327807] rohm-bd718x7 0-004b: buck6: old range min 800000, step 10000
> [ 0.327813] rohm-bd718x7 0-004b: new range min 981454, step 12268
> [ 0.327819] rohm-bd718x7 0-004b: regulator 'buck6' has FB pull-up
> configured
>
> I will add this fix to the next version of this patchset and include
> your requested change in the dts.
New idea, why don't we just change the values of the original
linear_range? Do away with the allocation there entirely.
Kind regards,
Maud
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-29 15:51 ` Maud Spierings
@ 2025-10-29 19:04 ` Matti Vaittinen
0 siblings, 0 replies; 28+ messages in thread
From: Matti Vaittinen @ 2025-10-29 19:04 UTC (permalink / raw)
To: Maud Spierings, Lothar Waßmann
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, devicetree,
linux-kernel, imx, linux-arm-kernel
On 29/10/2025 17:51, Maud Spierings wrote:
>
>
> On 10/29/25 16:35, Maud Spierings wrote:
>> Hi Matti,
>>
>> On 10/29/25 11:05, Matti Vaittinen wrote:
>>> On 29/10/2025 11:48, Lothar Waßmann wrote:
>>>> Hi,
>>>>
>>>> On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
>>>>> On 29/10/2025 09:11, Lothar Waßmann wrote:
>>>>>> Hi,
>>>>>>
>>>>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
>>>>>>> On 10/28/25 13:42, Maud Spierings wrote:
>>>>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
>>>>>> [...]
>>>>>>>>> Could/Should this be described using the:
>>>>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
>>>>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>>>>>>>>> correctly, that might allow the driver to be able to use correctly
>>>>>>>>> scaled voltages.
>>>>>>>>>
>>>>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>>>>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>>>>>>>
>>>>>>>> Ah I didn't know those existed, should've checked the bindings
>>>>>>>> in more
>>>>>>>> detail, thanks for the hint!
>>>>>>>>
>>>>>>>> I will have to investigate this carefully, since I don't have
>>>>>>>> access to
>>>>>>>> the actual design of the COM, so I don't know exactly what is
>>>>>>>> there.
>>>>>>>
>>>>>>> So I am not yet entirely sure if this works out, I used the
>>>>>>> calculation
>>>>>>> in the driver:
>>>>>>>
>>>>>>> /*
>>>>>>> * Setups where regulator (especially the buck8) output
>>>>>>> voltage is scaled
>>>>>>> * by adding external connection where some other regulator
>>>>>>> output is
>>>>>>> connected
>>>>>>> * to feedback-pin (over suitable resistors) is getting
>>>>>>> popular amongst
>>>>>>> users
>>>>>>> * of BD71837. (This allows for example scaling down the buck8
>>>>>>> voltages
>>>>>>> to suit
>>>>>>> * lover GPU voltages for projects where buck8 is (ab)used to
>>>>>>> supply power
>>>>>>> * for GPU. Additionally some setups do allow DVS for buck8
>>>>>>> but as this do
>>>>>>> * produce voltage spikes the HW must be evaluated to be able to
>>>>>>> survive this
>>>>>>> * - hence I keep the DVS disabled for non DVS bucks by
>>>>>>> default. I
>>>>>>> don't want
>>>>>>> * to help you burn your proto board)
>>>>>>> *
>>>>>>> * So we allow describing this external connection from DT and
>>>>>>> scale the
>>>>>>> * voltages accordingly. This is what the connection should
>>>>>>> look like:
>>>>>>> *
>>>>>>> * |------------|
>>>>>>> * | buck 8 |-------+----->Vout
>>>>>>> * | | |
>>>>>>> * |------------| |
>>>>>>> * | FB pin |
>>>>>>> * | |
>>>>>>> * +-------+--R2---+
>>>>>>> * |
>>>>>>> * R1
>>>>>>> * |
>>>>>>> * V FB-pull-up
>>>>>>> *
>>>>>>> * Here the buck output is sifted according to formula:
>>>>>>> *
>>>>>>> * Vout_o = Vo - (Vpu - Vo)*R2/R1
>>>>>>> * Linear_step = step_orig*(R1+R2)/R1
>>>>>>> *
>>>>>>> * where:
>>>>>>> * Vout_o is adjusted voltage output at vsel reg value 0
>>>>>>> * Vo is original voltage output at vsel reg value 0
>>>>>>> * Vpu is the pull-up voltage V FB-pull-up in the picture
>>>>>>> * R1 and R2 are resistor values.
>>>>>>> *
>>>>>>> * As a real world example for buck8 and a specific GPU:
>>>>>>> * VLDO = 1.6V (used as FB-pull-up)
>>>>>>> * R1 = 1000ohms
>>>>>>> * R2 = 150ohms
>>>>>>> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
>>>>>>> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
>>>>>>> */
>>>>>>>
>>>>>>> Because I do not know the pull up voltage, and I am not sure if
>>>>>>> it is a
>>>>>>> pull up.
>>>>>>>
>>>>>>> So:
>>>>>>> Vout_o = 1.35V
>>>>>>> Vo = 1.1V
>>>>>>> Vpu = unknown
>>>>>>> R2 = 499 Ohm
>>>>>>> R1 = 2200 Ohm
>>>>>>> Gives:
>>>>>>> Vpu = ~0V
>>>>>>>
>>>>>>> And:
>>>>>>> Vout_o = 1.35V
>>>>>>> Vo = 1.1V
>>>>>>> Vpu = unknown
>>>>>>> R2 = 2200 Ohm
>>>>>>> R1 = 499 Ohm
>>>>>>> Gives:
>>>>>>> Vpu = ~1.04V
>>>>>>>
>>>>>>> I am not quite sure which resistor is R1 and which is R2 but having
>>>>>>> there be a pull down to 0V seems the most logical answer?
>>>>>>>
>>>>>>> I am adding Lothar from Ka-Ro to the CC maybe he can shed some
>>>>>>> light on
>>>>>>> this setup.
>>>>>> R2 is connected to GND, so Vpu = 0.
>>>>>> With:
>>>>>> regulator-min-microvolt = <1350000>;
>>>>>> regulator-max-microvolt = <1350000>;
>>>>>> rohm,fb-pull-up-microvolt = <0>;
>>>>>> rohm,feedback-pull-up-r1-ohms = <2200>;
>>>>>> rohm,feedback-pull-up-r2-ohms = <499>;
>>>>>> the correct voltage should be produced on the BUCK8 output, but a
>>>>>> quick
>>>>>> test with these parameters led to:
>>>>>> |failed to get the current voltage: -EINVAL
>>>>>> |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to
>>>>>> register buck6 regulator
>>>>>> |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
>>>>>>
>>>>>> Apparently noone has ever tested this feature in real life.
>>>>>
>>>>> Thanks for trying it out Lothar. I am positive this was tested - but
>>>>> probably the use-case has been using a pull-up. I assume having the
>>>>> zero
>>>>> pull-up voltage causes the driver to calculate some bogus values. I
>>>>> think fixing the computation in the driver might not be that big of a
>>>>> task(?) The benefit of doing it would be that the correct voltages
>>>>> would
>>>>> be calculated by the driver.
>>>>>
>>>>> If real voltages aren't matching what is calculated by the driver,
>>>>> then
>>>>> the voltages requested by regulator consumers will cause wrong
>>>>> voltages
>>>>> to be applied. Debug interfaces will also show wrong voltages, and the
>>>>> safety limits set in the device-tree will not be really respected.
>>>>>
>>>>> I think this would be well worth fixing.
>>>>>
>>>> Before doing the real-life test I did the same calculation that's done
>>>> in the driver to be sure that it will generate the correct values:
>>>> bc 1.07.1
>>>> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
>>>> Free Software Foundation, Inc.
>>>> This is free software with ABSOLUTELY NO WARRANTY.
>>>> For details type `warranty'.
>>>> fb_uv=0
>>>> r1=2200
>>>> r2=499
>>>> min=800000
>>>> step=10000
>>>> # default voltage without divider
>>>> min+30*step
>>>> 1100000
>>>> min=min-(fb_uv-min)*r2/r1
>>>> step=step*(r1+r2)/r1
>>>> min
>>>> 981454
>>>> step
>>>> 12268
>>>> # default voltage with divider
>>>> min+30*step
>>>> 1349494
>>>>
>>>> Probably we need to use this value rather than the nominal 135000 as
>>>> the target voltage in the DTB.
>>>
>>> Yes. When the driver calculates the voltages which match the actual
>>> voltages, then you should also use the actual voltages in the device-
>>> tree.
>>>
>>
>> Think I've got it:
>>
>> diff --git a/drivers/regulator/bd718x7-regulator.c b/drivers/
>> regulator/ bd718x7-regulator.c
>> index 022d98f3c32a2..ea9c4058ee6a5 100644
>> --- a/drivers/regulator/bd718x7-regulator.c
>> +++ b/drivers/regulator/bd718x7-regulator.c
>> @@ -1613,6 +1613,8 @@ static int setup_feedback_loop(struct device
>> *dev, struct device_node *np,
>> step /= r1;
>>
>> new[j].min = min;
>> + new[j].min_sel = desc-
>> >linear_ranges[j].min_sel;
>> + new[j].max_sel = desc-
>> >linear_ranges[j].max_sel;
>> new[j].step = step;
>>
>> dev_dbg(dev, "%s: old range min %d,
>> step %d\n",
>>
>>
>> the min_sel and max_sel fields were uninitialized in the new
>> linear_range, copying them over from the old one (they refer to the
>> register range if I understand correctly so they should not change)
>> initializes them.
Ah, indeed. Well spotted! Thanks for debugging it :)
>> Then setting 1349494 as the actual voltage makes it fully work.
>> Otherwise it complains:
>> buck6: failed to apply 1350000-1350000uV constraint: -EINVAL
>>
>> Final debug output now:
>> [ 0.327807] rohm-bd718x7 0-004b: buck6: old range min 800000, step
>> 10000
>> [ 0.327813] rohm-bd718x7 0-004b: new range min 981454, step 12268
>> [ 0.327819] rohm-bd718x7 0-004b: regulator 'buck6' has FB pull-up
>> configured
>>
>> I will add this fix to the next version of this patchset and include
>> your requested change in the dts.
>
> New idea, why don't we just change the values of the original
> linear_range? Do away with the allocation there entirely.
I kind of like to keep the global structs const, and allocate new memory
for anything we need to change. That should help us if we ever need to
support more than 1 instance of the driver (Eg, on a system with
multiple PMICs) - although that's not likely, and AFAIR, the driver is
currently not written to work in such use-case.
Anyways, the selectors won't change when voltage gets scaled. Maybe just
allocate with kmemdup, update the min and step, and be done with it(?)
Well, hard to say what's the best approach without seeing it :) I'd
suggest you consider what you think is the best solution, write a patch
and let's see how it looks like (and, at the end of the day, what Mark
thinks of it).Yours, -- Matti
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-29 15:35 ` Maud Spierings
2025-10-29 15:51 ` Maud Spierings
@ 2025-10-30 8:54 ` Lothar Waßmann
2025-10-30 11:01 ` Matti Vaittinen
2025-10-30 14:45 ` Maud Spierings
1 sibling, 2 replies; 28+ messages in thread
From: Lothar Waßmann @ 2025-10-30 8:54 UTC (permalink / raw)
To: Maud Spierings
Cc: Matti Vaittinen, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
devicetree, linux-kernel, imx, linux-arm-kernel
Hi,
On Wed, 29 Oct 2025 16:35:25 +0100 Maud Spierings wrote:
> Hi Matti,
>
> On 10/29/25 11:05, Matti Vaittinen wrote:
> > On 29/10/2025 11:48, Lothar Waßmann wrote:
> >> Hi,
> >>
> >> On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
> >>> On 29/10/2025 09:11, Lothar Waßmann wrote:
> >>>> Hi,
> >>>>
> >>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
> >>>>> On 10/28/25 13:42, Maud Spierings wrote:
> >>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
> >>>> [...]
> >>>>>>> Could/Should this be described using the:
> >>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
> >>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
> >>>>>>> correctly, that might allow the driver to be able to use correctly
> >>>>>>> scaled voltages.
> >>>>>>>
> >>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
> >>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
> >>>>>>
> >>>>>> Ah I didn't know those existed, should've checked the bindings in
> >>>>>> more
> >>>>>> detail, thanks for the hint!
> >>>>>>
> >>>>>> I will have to investigate this carefully, since I don't have
> >>>>>> access to
> >>>>>> the actual design of the COM, so I don't know exactly what is there.
> >>>>>
> >>>>> So I am not yet entirely sure if this works out, I used the
> >>>>> calculation
> >>>>> in the driver:
> >>>>>
> >>>>> /*
> >>>>> * Setups where regulator (especially the buck8) output voltage
> >>>>> is scaled
> >>>>> * by adding external connection where some other regulator
> >>>>> output is
> >>>>> connected
> >>>>> * to feedback-pin (over suitable resistors) is getting popular
> >>>>> amongst
> >>>>> users
> >>>>> * of BD71837. (This allows for example scaling down the buck8
> >>>>> voltages
> >>>>> to suit
> >>>>> * lover GPU voltages for projects where buck8 is (ab)used to
> >>>>> supply power
> >>>>> * for GPU. Additionally some setups do allow DVS for buck8 but
> >>>>> as this do
> >>>>> * produce voltage spikes the HW must be evaluated to be able to
> >>>>> survive this
> >>>>> * - hence I keep the DVS disabled for non DVS bucks by default. I
> >>>>> don't want
> >>>>> * to help you burn your proto board)
> >>>>> *
> >>>>> * So we allow describing this external connection from DT and
> >>>>> scale the
> >>>>> * voltages accordingly. This is what the connection should look
> >>>>> like:
> >>>>> *
> >>>>> * |------------|
> >>>>> * | buck 8 |-------+----->Vout
> >>>>> * | | |
> >>>>> * |------------| |
> >>>>> * | FB pin |
> >>>>> * | |
> >>>>> * +-------+--R2---+
> >>>>> * |
> >>>>> * R1
> >>>>> * |
> >>>>> * V FB-pull-up
> >>>>> *
> >>>>> * Here the buck output is sifted according to formula:
> >>>>> *
> >>>>> * Vout_o = Vo - (Vpu - Vo)*R2/R1
> >>>>> * Linear_step = step_orig*(R1+R2)/R1
> >>>>> *
> >>>>> * where:
> >>>>> * Vout_o is adjusted voltage output at vsel reg value 0
> >>>>> * Vo is original voltage output at vsel reg value 0
> >>>>> * Vpu is the pull-up voltage V FB-pull-up in the picture
> >>>>> * R1 and R2 are resistor values.
> >>>>> *
> >>>>> * As a real world example for buck8 and a specific GPU:
> >>>>> * VLDO = 1.6V (used as FB-pull-up)
> >>>>> * R1 = 1000ohms
> >>>>> * R2 = 150ohms
> >>>>> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
> >>>>> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
> >>>>> */
> >>>>>
> >>>>> Because I do not know the pull up voltage, and I am not sure if it
> >>>>> is a
> >>>>> pull up.
> >>>>>
> >>>>> So:
> >>>>> Vout_o = 1.35V
> >>>>> Vo = 1.1V
> >>>>> Vpu = unknown
> >>>>> R2 = 499 Ohm
> >>>>> R1 = 2200 Ohm
> >>>>> Gives:
> >>>>> Vpu = ~0V
> >>>>>
> >>>>> And:
> >>>>> Vout_o = 1.35V
> >>>>> Vo = 1.1V
> >>>>> Vpu = unknown
> >>>>> R2 = 2200 Ohm
> >>>>> R1 = 499 Ohm
> >>>>> Gives:
> >>>>> Vpu = ~1.04V
> >>>>>
> >>>>> I am not quite sure which resistor is R1 and which is R2 but having
> >>>>> there be a pull down to 0V seems the most logical answer?
> >>>>>
> >>>>> I am adding Lothar from Ka-Ro to the CC maybe he can shed some
> >>>>> light on
> >>>>> this setup.
> >>>> R2 is connected to GND, so Vpu = 0.
> >>>> With:
> >>>> regulator-min-microvolt = <1350000>;
> >>>> regulator-max-microvolt = <1350000>;
> >>>> rohm,fb-pull-up-microvolt = <0>;
> >>>> rohm,feedback-pull-up-r1-ohms = <2200>;
> >>>> rohm,feedback-pull-up-r2-ohms = <499>;
> >>>> the correct voltage should be produced on the BUCK8 output, but a quick
> >>>> test with these parameters led to:
> >>>> |failed to get the current voltage: -EINVAL
> >>>> |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to register
> >>>> buck6 regulator
> >>>> |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
> >>>>
> >>>> Apparently noone has ever tested this feature in real life.
> >>>
> >>> Thanks for trying it out Lothar. I am positive this was tested - but
> >>> probably the use-case has been using a pull-up. I assume having the zero
> >>> pull-up voltage causes the driver to calculate some bogus values. I
> >>> think fixing the computation in the driver might not be that big of a
> >>> task(?) The benefit of doing it would be that the correct voltages would
> >>> be calculated by the driver.
> >>>
> >>> If real voltages aren't matching what is calculated by the driver, then
> >>> the voltages requested by regulator consumers will cause wrong voltages
> >>> to be applied. Debug interfaces will also show wrong voltages, and the
> >>> safety limits set in the device-tree will not be really respected.
> >>>
> >>> I think this would be well worth fixing.
> >>>
> >> Before doing the real-life test I did the same calculation that's done
> >> in the driver to be sure that it will generate the correct values:
> >> bc 1.07.1
> >> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
> >> Free Software Foundation, Inc.
> >> This is free software with ABSOLUTELY NO WARRANTY.
> >> For details type `warranty'.
> >> fb_uv=0
> >> r1=2200
> >> r2=499
> >> min=800000
> >> step=10000
> >> # default voltage without divider
> >> min+30*step
> >> 1100000
> >> min=min-(fb_uv-min)*r2/r1
> >> step=step*(r1+r2)/r1
> >> min
> >> 981454
> >> step
> >> 12268
> >> # default voltage with divider
> >> min+30*step
> >> 1349494
> >>
> >> Probably we need to use this value rather than the nominal 135000 as
> >> the target voltage in the DTB.
> >
> > Yes. When the driver calculates the voltages which match the actual
> > voltages, then you should also use the actual voltages in the device-tree.
> >
>
> Think I've got it:
>
> diff --git a/drivers/regulator/bd718x7-regulator.c
> b/drivers/regulator/bd718x7-regulator.c
> index 022d98f3c32a2..ea9c4058ee6a5 100644
> --- a/drivers/regulator/bd718x7-regulator.c
> +++ b/drivers/regulator/bd718x7-regulator.c
> @@ -1613,6 +1613,8 @@ static int setup_feedback_loop(struct device *dev,
> struct device_node *np,
> step /= r1;
>
> new[j].min = min;
> + new[j].min_sel =
> desc->linear_ranges[j].min_sel;
> + new[j].max_sel =
> desc->linear_ranges[j].max_sel;
> new[j].step = step;
>
> dev_dbg(dev, "%s: old range min %d,
> step %d\n",
>
>
> the min_sel and max_sel fields were uninitialized in the new
> linear_range, copying them over from the old one (they refer to the
> register range if I understand correctly so they should not change)
> initializes them.
>
> Then setting 1349494 as the actual voltage makes it fully work.
> Otherwise it complains:
> buck6: failed to apply 1350000-1350000uV constraint: -EINVAL
>
> Final debug output now:
> [ 0.327807] rohm-bd718x7 0-004b: buck6: old range min 800000, step 10000
> [ 0.327813] rohm-bd718x7 0-004b: new range min 981454, step 12268
> [ 0.327819] rohm-bd718x7 0-004b: regulator 'buck6' has FB pull-up
> configured
>
> I will add this fix to the next version of this patchset and include
> your requested change in the dts.
>
Does it also work with min/max settings in the DTS that are taken from
the designated value +/- 5% tolerance margin, so that the DTS contains
reasonable values determined by the HW requirements, rather than some
artificial number that is enforced by the SW behaviour?
E.g.:
regulator-min-microvolts = <(135000 - 6750)>;
regulator-min-microvolts = <(135000 + 6750)>;
Thus, the nominal value of the voltage is explicitly shown in the DTS
file.
Lothar Waßmann
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-30 8:54 ` Lothar Waßmann
@ 2025-10-30 11:01 ` Matti Vaittinen
2025-10-30 12:00 ` Lothar Waßmann
2025-10-30 14:45 ` Maud Spierings
1 sibling, 1 reply; 28+ messages in thread
From: Matti Vaittinen @ 2025-10-30 11:01 UTC (permalink / raw)
To: Lothar Waßmann, Maud Spierings
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, devicetree,
linux-kernel, imx, linux-arm-kernel
On 30/10/2025 10:54, Lothar Waßmann wrote:
> Hi,
>
> On Wed, 29 Oct 2025 16:35:25 +0100 Maud Spierings wrote:
>> Hi Matti,
>>
>> On 10/29/25 11:05, Matti Vaittinen wrote:
>>> On 29/10/2025 11:48, Lothar Waßmann wrote:
>>>> Hi,
>>>>
>>>> On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
>>>>> On 29/10/2025 09:11, Lothar Waßmann wrote:
>>>>>> Hi,
>>>>>>
>>>>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
>>>>>>> On 10/28/25 13:42, Maud Spierings wrote:
>>>>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
>>>>>> [...]
>>>>>>>>> Could/Should this be described using the:
>>>>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
>>>>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>>>>>>>>> correctly, that might allow the driver to be able to use correctly
>>>>>>>>> scaled voltages.
>>>>>>>>>
>>>>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>>>>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>>>>>>>
// snip
>>>>>
>>>>> If real voltages aren't matching what is calculated by the driver, then
>>>>> the voltages requested by regulator consumers will cause wrong voltages
>>>>> to be applied. Debug interfaces will also show wrong voltages, and the
>>>>> safety limits set in the device-tree will not be really respected.
>>>>>
>>>>> I think this would be well worth fixing.
>>>>>
>>>> Before doing the real-life test I did the same calculation that's done
>>>> in the driver to be sure that it will generate the correct values:
>>>> bc 1.07.1
>>>> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
>>>> Free Software Foundation, Inc.
>>>> This is free software with ABSOLUTELY NO WARRANTY.
>>>> For details type `warranty'.
>>>> fb_uv=0
>>>> r1=2200
>>>> r2=499
>>>> min=800000
>>>> step=10000
>>>> # default voltage without divider
>>>> min+30*step
>>>> 1100000
>>>> min=min-(fb_uv-min)*r2/r1
>>>> step=step*(r1+r2)/r1
>>>> min
>>>> 981454
>>>> step
>>>> 12268
>>>> # default voltage with divider
>>>> min+30*step
>>>> 1349494
>>>>
>>>> Probably we need to use this value rather than the nominal 135000 as
>>>> the target voltage in the DTB.
>>>
>>> Yes. When the driver calculates the voltages which match the actual
>>> voltages, then you should also use the actual voltages in the device-tree.
>>>
>>
// snip
>>
>> Then setting 1349494 as the actual voltage makes it fully work.
>> Otherwise it complains:
>> buck6: failed to apply 1350000-1350000uV constraint: -EINVAL
>>
>> Final debug output now:
>> [ 0.327807] rohm-bd718x7 0-004b: buck6: old range min 800000, step 10000
>> [ 0.327813] rohm-bd718x7 0-004b: new range min 981454, step 12268
>> [ 0.327819] rohm-bd718x7 0-004b: regulator 'buck6' has FB pull-up
>> configured
>>
>> I will add this fix to the next version of this patchset and include
>> your requested change in the dts.
>>
> Does it also work with min/max settings in the DTS that are taken from
> the designated value +/- 5% tolerance margin, so that the DTS contains
> reasonable values determined by the HW requirements, rather than some
> artificial number that is enforced by the SW behaviour?
I am unsure what you mean by "artificial number that is enforced by the
SW behaviour"?
As far as I understand, the PMIC operation is altered by modifying the
feedback-pin voltage, right? So, the HW _really_ outputs something else
but the 'PMIC nominal voltage'? When this hardware connection to the
feedback-pin is done, the nominal voltage is never really seen anywhere
else but the PMIC data-sheet, right?
> E.g.:
> regulator-min-microvolts = <(135000 - 6750)>;
> regulator-min-microvolts = <(135000 + 6750)>;
> Thus, the nominal value of the voltage is explicitly shown in the DTS
> file.
I don't know why there should be two different min values? Assuming the
latter should be max - I have no problem seeing a range of allowed
voltages in constrains - if the hardware can tolerate voltages within
the range.
In my opinion, the values used should however reflect the _actual_
output voltage, taking the effect of the feedback-pin modification into
account. This is also what using the:
'rohm,feedback-pull-up-r1-ohms'
'rohm,feedback-pull-up-r2-ohms'
and the pull-up voltage property allows one to use.
In general, regulator consumers expect to get the _actual_ voltage the
regulator outputs, via regulator APIs. Think for example of an ADC
getting reference voltage from a regulator. If it asks for used voltage
and gets 1350000uV from the regulator subsystem it will use that to
calculate the scale. If voltage really is something else, altered by a
feedback-pin connection, the ADC will be having offset. I don't know if
voltages reported by the framework matter in your specific use-case -
but it doesn't mean letting the regulator subsystem use bogus voltages
is right.
Yours,
-- Matti
--
Matti Vaittinen
Linux kernel developer at ROHM Semiconductors
Oulu Finland
~~ When things go utterly wrong vim users can always type :help! ~~
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-30 11:01 ` Matti Vaittinen
@ 2025-10-30 12:00 ` Lothar Waßmann
2025-10-31 12:07 ` Matti Vaittinen
0 siblings, 1 reply; 28+ messages in thread
From: Lothar Waßmann @ 2025-10-30 12:00 UTC (permalink / raw)
To: Matti Vaittinen
Cc: Maud Spierings, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
devicetree, linux-kernel, imx, linux-arm-kernel
Hi,
On Thu, 30 Oct 2025 13:01:52 +0200 Matti Vaittinen wrote:
> On 30/10/2025 10:54, Lothar Waßmann wrote:
> > Hi,
> >
> > On Wed, 29 Oct 2025 16:35:25 +0100 Maud Spierings wrote:
> >> Hi Matti,
> >>
> >> On 10/29/25 11:05, Matti Vaittinen wrote:
> >>> On 29/10/2025 11:48, Lothar Waßmann wrote:
> >>>> Hi,
> >>>>
> >>>> On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
> >>>>> On 29/10/2025 09:11, Lothar Waßmann wrote:
> >>>>>> Hi,
> >>>>>>
> >>>>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
> >>>>>>> On 10/28/25 13:42, Maud Spierings wrote:
> >>>>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
> >>>>>> [...]
> >>>>>>>>> Could/Should this be described using the:
> >>>>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
> >>>>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
> >>>>>>>>> correctly, that might allow the driver to be able to use correctly
> >>>>>>>>> scaled voltages.
> >>>>>>>>>
> >>>>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
> >>>>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
> >>>>>>>>
>
> // snip
>
> >>>>>
> >>>>> If real voltages aren't matching what is calculated by the driver, then
> >>>>> the voltages requested by regulator consumers will cause wrong voltages
> >>>>> to be applied. Debug interfaces will also show wrong voltages, and the
> >>>>> safety limits set in the device-tree will not be really respected.
> >>>>>
> >>>>> I think this would be well worth fixing.
> >>>>>
> >>>> Before doing the real-life test I did the same calculation that's done
> >>>> in the driver to be sure that it will generate the correct values:
> >>>> bc 1.07.1
> >>>> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
> >>>> Free Software Foundation, Inc.
> >>>> This is free software with ABSOLUTELY NO WARRANTY.
> >>>> For details type `warranty'.
> >>>> fb_uv=0
> >>>> r1=2200
> >>>> r2=499
> >>>> min=800000
> >>>> step=10000
> >>>> # default voltage without divider
> >>>> min+30*step
> >>>> 1100000
> >>>> min=min-(fb_uv-min)*r2/r1
> >>>> step=step*(r1+r2)/r1
> >>>> min
> >>>> 981454
> >>>> step
> >>>> 12268
> >>>> # default voltage with divider
> >>>> min+30*step
> >>>> 1349494
> >>>>
> >>>> Probably we need to use this value rather than the nominal 135000 as
> >>>> the target voltage in the DTB.
> >>>
> >>> Yes. When the driver calculates the voltages which match the actual
> >>> voltages, then you should also use the actual voltages in the device-tree.
> >>>
> >>
>
> // snip
>
> >>
> >> Then setting 1349494 as the actual voltage makes it fully work.
> >> Otherwise it complains:
> >> buck6: failed to apply 1350000-1350000uV constraint: -EINVAL
> >>
> >> Final debug output now:
> >> [ 0.327807] rohm-bd718x7 0-004b: buck6: old range min 800000, step 10000
> >> [ 0.327813] rohm-bd718x7 0-004b: new range min 981454, step 12268
> >> [ 0.327819] rohm-bd718x7 0-004b: regulator 'buck6' has FB pull-up
> >> configured
> >>
> >> I will add this fix to the next version of this patchset and include
> >> your requested change in the dts.
> >>
> > Does it also work with min/max settings in the DTS that are taken from
> > the designated value +/- 5% tolerance margin, so that the DTS contains
> > reasonable values determined by the HW requirements, rather than some
> > artificial number that is enforced by the SW behaviour?
>
> I am unsure what you mean by "artificial number that is enforced by the
> SW behaviour"?
>
The nominal voltage that is required by the consumer is 1.35 V. That's
the voltage I would expect to set as target for the regulator.
If that voltage cannot be achieved exactly, I would prefer to have the
intended voltage listed explicitly rather than listing a value that
accidentally can be achieved by the regulator but has nothing to do with
the requirements of the consumer.
> I don't know why there should be two different min values? Assuming the
> latter should be max - I have no problem seeing a range of allowed
>
My copypaste is obviously spoiled... ;)
Lothar Waßmann
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-30 8:54 ` Lothar Waßmann
2025-10-30 11:01 ` Matti Vaittinen
@ 2025-10-30 14:45 ` Maud Spierings
2025-10-31 5:36 ` Lothar Waßmann
1 sibling, 1 reply; 28+ messages in thread
From: Maud Spierings @ 2025-10-30 14:45 UTC (permalink / raw)
To: Lothar Waßmann
Cc: Matti Vaittinen, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
devicetree, linux-kernel, imx, linux-arm-kernel
Hi Lothar,
On 10/30/25 09:54, Lothar Waßmann wrote:
> Hi,
>
> On Wed, 29 Oct 2025 16:35:25 +0100 Maud Spierings wrote:
>> Hi Matti,
>>
>> On 10/29/25 11:05, Matti Vaittinen wrote:
>>> On 29/10/2025 11:48, Lothar Waßmann wrote:
>>>> Hi,
>>>>
>>>> On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
>>>>> On 29/10/2025 09:11, Lothar Waßmann wrote:
>>>>>> Hi,
>>>>>>
>>>>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
>>>>>>> On 10/28/25 13:42, Maud Spierings wrote:
>>>>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
>>>>>> [...]
>>>>>>>>> Could/Should this be described using the:
>>>>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
>>>>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>>>>>>>>> correctly, that might allow the driver to be able to use correctly
>>>>>>>>> scaled voltages.
>>>>>>>>>
>>>>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>>>>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>>>>>>>
>>>>>>>> Ah I didn't know those existed, should've checked the bindings in
>>>>>>>> more
>>>>>>>> detail, thanks for the hint!
>>>>>>>>
>>>>>>>> I will have to investigate this carefully, since I don't have
>>>>>>>> access to
>>>>>>>> the actual design of the COM, so I don't know exactly what is there.
>>>>>>>
>>>>>>> So I am not yet entirely sure if this works out, I used the
>>>>>>> calculation
>>>>>>> in the driver:
>>>>>>>
>>>>>>> /*
>>>>>>> * Setups where regulator (especially the buck8) output voltage
>>>>>>> is scaled
>>>>>>> * by adding external connection where some other regulator
>>>>>>> output is
>>>>>>> connected
>>>>>>> * to feedback-pin (over suitable resistors) is getting popular
>>>>>>> amongst
>>>>>>> users
>>>>>>> * of BD71837. (This allows for example scaling down the buck8
>>>>>>> voltages
>>>>>>> to suit
>>>>>>> * lover GPU voltages for projects where buck8 is (ab)used to
>>>>>>> supply power
>>>>>>> * for GPU. Additionally some setups do allow DVS for buck8 but
>>>>>>> as this do
>>>>>>> * produce voltage spikes the HW must be evaluated to be able to
>>>>>>> survive this
>>>>>>> * - hence I keep the DVS disabled for non DVS bucks by default. I
>>>>>>> don't want
>>>>>>> * to help you burn your proto board)
>>>>>>> *
>>>>>>> * So we allow describing this external connection from DT and
>>>>>>> scale the
>>>>>>> * voltages accordingly. This is what the connection should look
>>>>>>> like:
>>>>>>> *
>>>>>>> * |------------|
>>>>>>> * | buck 8 |-------+----->Vout
>>>>>>> * | | |
>>>>>>> * |------------| |
>>>>>>> * | FB pin |
>>>>>>> * | |
>>>>>>> * +-------+--R2---+
>>>>>>> * |
>>>>>>> * R1
>>>>>>> * |
>>>>>>> * V FB-pull-up
>>>>>>> *
>>>>>>> * Here the buck output is sifted according to formula:
>>>>>>> *
>>>>>>> * Vout_o = Vo - (Vpu - Vo)*R2/R1
>>>>>>> * Linear_step = step_orig*(R1+R2)/R1
>>>>>>> *
>>>>>>> * where:
>>>>>>> * Vout_o is adjusted voltage output at vsel reg value 0
>>>>>>> * Vo is original voltage output at vsel reg value 0
>>>>>>> * Vpu is the pull-up voltage V FB-pull-up in the picture
>>>>>>> * R1 and R2 are resistor values.
>>>>>>> *
>>>>>>> * As a real world example for buck8 and a specific GPU:
>>>>>>> * VLDO = 1.6V (used as FB-pull-up)
>>>>>>> * R1 = 1000ohms
>>>>>>> * R2 = 150ohms
>>>>>>> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
>>>>>>> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
>>>>>>> */
>>>>>>>
>>>>>>> Because I do not know the pull up voltage, and I am not sure if it
>>>>>>> is a
>>>>>>> pull up.
>>>>>>>
>>>>>>> So:
>>>>>>> Vout_o = 1.35V
>>>>>>> Vo = 1.1V
>>>>>>> Vpu = unknown
>>>>>>> R2 = 499 Ohm
>>>>>>> R1 = 2200 Ohm
>>>>>>> Gives:
>>>>>>> Vpu = ~0V
>>>>>>>
>>>>>>> And:
>>>>>>> Vout_o = 1.35V
>>>>>>> Vo = 1.1V
>>>>>>> Vpu = unknown
>>>>>>> R2 = 2200 Ohm
>>>>>>> R1 = 499 Ohm
>>>>>>> Gives:
>>>>>>> Vpu = ~1.04V
>>>>>>>
>>>>>>> I am not quite sure which resistor is R1 and which is R2 but having
>>>>>>> there be a pull down to 0V seems the most logical answer?
>>>>>>>
>>>>>>> I am adding Lothar from Ka-Ro to the CC maybe he can shed some
>>>>>>> light on
>>>>>>> this setup.
>>>>>> R2 is connected to GND, so Vpu = 0.
>>>>>> With:
>>>>>> regulator-min-microvolt = <1350000>;
>>>>>> regulator-max-microvolt = <1350000>;
>>>>>> rohm,fb-pull-up-microvolt = <0>;
>>>>>> rohm,feedback-pull-up-r1-ohms = <2200>;
>>>>>> rohm,feedback-pull-up-r2-ohms = <499>;
>>>>>> the correct voltage should be produced on the BUCK8 output, but a quick
>>>>>> test with these parameters led to:
>>>>>> |failed to get the current voltage: -EINVAL
>>>>>> |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to register
>>>>>> buck6 regulator
>>>>>> |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
>>>>>>
>>>>>> Apparently noone has ever tested this feature in real life.
>>>>>
>>>>> Thanks for trying it out Lothar. I am positive this was tested - but
>>>>> probably the use-case has been using a pull-up. I assume having the zero
>>>>> pull-up voltage causes the driver to calculate some bogus values. I
>>>>> think fixing the computation in the driver might not be that big of a
>>>>> task(?) The benefit of doing it would be that the correct voltages would
>>>>> be calculated by the driver.
>>>>>
>>>>> If real voltages aren't matching what is calculated by the driver, then
>>>>> the voltages requested by regulator consumers will cause wrong voltages
>>>>> to be applied. Debug interfaces will also show wrong voltages, and the
>>>>> safety limits set in the device-tree will not be really respected.
>>>>>
>>>>> I think this would be well worth fixing.
>>>>>
>>>> Before doing the real-life test I did the same calculation that's done
>>>> in the driver to be sure that it will generate the correct values:
>>>> bc 1.07.1
>>>> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
>>>> Free Software Foundation, Inc.
>>>> This is free software with ABSOLUTELY NO WARRANTY.
>>>> For details type `warranty'.
>>>> fb_uv=0
>>>> r1=2200
>>>> r2=499
>>>> min=800000
>>>> step=10000
>>>> # default voltage without divider
>>>> min+30*step
>>>> 1100000
>>>> min=min-(fb_uv-min)*r2/r1
>>>> step=step*(r1+r2)/r1
>>>> min
>>>> 981454
>>>> step
>>>> 12268
>>>> # default voltage with divider
>>>> min+30*step
>>>> 1349494
>>>>
>>>> Probably we need to use this value rather than the nominal 135000 as
>>>> the target voltage in the DTB.
>>>
>>> Yes. When the driver calculates the voltages which match the actual
>>> voltages, then you should also use the actual voltages in the device-tree.
>>>
>>
>> Think I've got it:
>>
>> diff --git a/drivers/regulator/bd718x7-regulator.c
>> b/drivers/regulator/bd718x7-regulator.c
>> index 022d98f3c32a2..ea9c4058ee6a5 100644
>> --- a/drivers/regulator/bd718x7-regulator.c
>> +++ b/drivers/regulator/bd718x7-regulator.c
>> @@ -1613,6 +1613,8 @@ static int setup_feedback_loop(struct device *dev,
>> struct device_node *np,
>> step /= r1;
>>
>> new[j].min = min;
>> + new[j].min_sel =
>> desc->linear_ranges[j].min_sel;
>> + new[j].max_sel =
>> desc->linear_ranges[j].max_sel;
>> new[j].step = step;
>>
>> dev_dbg(dev, "%s: old range min %d,
>> step %d\n",
>>
>>
>> the min_sel and max_sel fields were uninitialized in the new
>> linear_range, copying them over from the old one (they refer to the
>> register range if I understand correctly so they should not change)
>> initializes them.
>>
>> Then setting 1349494 as the actual voltage makes it fully work.
>> Otherwise it complains:
>> buck6: failed to apply 1350000-1350000uV constraint: -EINVAL
>>
>> Final debug output now:
>> [ 0.327807] rohm-bd718x7 0-004b: buck6: old range min 800000, step 10000
>> [ 0.327813] rohm-bd718x7 0-004b: new range min 981454, step 12268
>> [ 0.327819] rohm-bd718x7 0-004b: regulator 'buck6' has FB pull-up
>> configured
>>
>> I will add this fix to the next version of this patchset and include
>> your requested change in the dts.
>>
> Does it also work with min/max settings in the DTS that are taken from
> the designated value +/- 5% tolerance margin, so that the DTS contains
> reasonable values determined by the HW requirements, rather than some
> artificial number that is enforced by the SW behaviour?
> E.g.:
> regulator-min-microvolts = <(135000 - 6750)>;
> regulator-min-microvolts = <(135000 + 6750)>;
> Thus, the nominal value of the voltage is explicitly shown in the DTS
> file.
Setting that range seems to work:
regulator use open bypass opmode voltage current
min max
---------------------------------------------------------------------------------------
regulator-dummy 1 1 0 unknown 0mV
0mA 0mV 0mV
2-0014-vled 0
0mA 0mV 0mV
6v4 1 0 0 unknown 6400mV
0mA 6400mV 6400mV
3v3-etn 1 1 0 unknown 3300mV
0mA 3300mV 3300mV
30be0000.ethernet-phy 1
0mA 0mV 0mV
3v3-m.2 3 3 0 unknown 3300mV
0mA 3300mV 3300mV
30b50000.mmc-vmmc 1
0mA 3300mV 3400mV
serial0-0-vddio 1
0mA 0mV 0mV
serial0-0-vbat 1
0mA 0mV 0mV
5v0 2 1 0 unknown 5000mV
0mA 5000mV 5000mV
32e50000.usb-vbus 1
0mA 0mV 0mV
can1-stby 1 1 0 unknown 3300mV
0mA 3300mV 3300mV
spi0.2-xceiver 1
0mA 0mV 0mV
can2-stby 1 1 0 unknown 3300mV
0mA 3300mV 3300mV
spi0.3-xceiver 1
0mA 0mV 0mV
can3-stby 1 1 0 unknown 3300mV
0mA 3300mV 3300mV
spi1.2-xceiver 1
0mA 0mV 0mV
can4-stby 1 1 0 unknown 3300mV
0mA 3300mV 3300mV
spi1.3-xceiver 1
0mA 0mV 0mV
buck1 1 0 0 unknown 900mV
0mA 780mV 900mV
buck2 2 1 0 unknown 850mV
0mA 810mV 950mV
cpu0-cpu 1
0mA 850mV 850mV
buck3 1 0 0 unknown 900mV
0mA 850mV 900mV
buck4 7 6 0 unknown 3300mV
0mA 3300mV 3300mV
30b40000.mmc-vmmc 1
0mA 3300mV 3400mV
spi1.3-vdd 1
0mA 0mV 0mV
spi1.2-vdd 1
0mA 0mV 0mV
spi0.3-vdd 1
0mA 0mV 0mV
spi0.2-vdd 1
0mA 0mV 0mV
spi2.4-vref 1
0mA 0mV 0mV
buck5 3 2 0 unknown 1800mV
0mA 1755mV 1950mV
30b40000.mmc-vqmmc 1
0mA 0mV 0mV
ldo6 1 0 0 unknown 1200mV
0mA 1200mV 1200mV
buck6 1 0 0 unknown 1349mV
0mA 1288mV 1410mV
ldo1 1 0 0 unknown 1800mV
0mA 1700mV 1900mV
ldo2 1 0 0 unknown 800mV
0mA 800mV 900mV
ldo3 1 0 0 unknown 1800mV
0mA 1800mV 1800mV
ldo4 1 0 0 unknown 900mV
0mA 900mV 1000mV
ldo5 0 0 0 unknown 3300mV
0mA 1800mV 3300mV
buck6 at 1349 mV
Kind regards,
Maud
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-30 14:45 ` Maud Spierings
@ 2025-10-31 5:36 ` Lothar Waßmann
2025-10-31 7:26 ` Maud Spierings
0 siblings, 1 reply; 28+ messages in thread
From: Lothar Waßmann @ 2025-10-31 5:36 UTC (permalink / raw)
To: Maud Spierings
Cc: Matti Vaittinen, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
devicetree, linux-kernel, imx, linux-arm-kernel
Hi,
On Thu, 30 Oct 2025 15:45:14 +0100 Maud Spierings wrote:
> Hi Lothar,
>
> On 10/30/25 09:54, Lothar Waßmann wrote:
> > Hi,
> >
> > On Wed, 29 Oct 2025 16:35:25 +0100 Maud Spierings wrote:
> >> Hi Matti,
> >>
> >> On 10/29/25 11:05, Matti Vaittinen wrote:
> >>> On 29/10/2025 11:48, Lothar Waßmann wrote:
> >>>> Hi,
> >>>>
> >>>> On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
> >>>>> On 29/10/2025 09:11, Lothar Waßmann wrote:
> >>>>>> Hi,
> >>>>>>
> >>>>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
> >>>>>>> On 10/28/25 13:42, Maud Spierings wrote:
> >>>>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
> >>>>>> [...]
> >>>>>>>>> Could/Should this be described using the:
> >>>>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
> >>>>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
> >>>>>>>>> correctly, that might allow the driver to be able to use correctly
> >>>>>>>>> scaled voltages.
> >>>>>>>>>
> >>>>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
> >>>>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
> >>>>>>>>
> >>>>>>>> Ah I didn't know those existed, should've checked the bindings in
> >>>>>>>> more
> >>>>>>>> detail, thanks for the hint!
> >>>>>>>>
> >>>>>>>> I will have to investigate this carefully, since I don't have
> >>>>>>>> access to
> >>>>>>>> the actual design of the COM, so I don't know exactly what is there.
> >>>>>>>
> >>>>>>> So I am not yet entirely sure if this works out, I used the
> >>>>>>> calculation
> >>>>>>> in the driver:
> >>>>>>>
> >>>>>>> /*
> >>>>>>> * Setups where regulator (especially the buck8) output voltage
> >>>>>>> is scaled
> >>>>>>> * by adding external connection where some other regulator
> >>>>>>> output is
> >>>>>>> connected
> >>>>>>> * to feedback-pin (over suitable resistors) is getting popular
> >>>>>>> amongst
> >>>>>>> users
> >>>>>>> * of BD71837. (This allows for example scaling down the buck8
> >>>>>>> voltages
> >>>>>>> to suit
> >>>>>>> * lover GPU voltages for projects where buck8 is (ab)used to
> >>>>>>> supply power
> >>>>>>> * for GPU. Additionally some setups do allow DVS for buck8 but
> >>>>>>> as this do
> >>>>>>> * produce voltage spikes the HW must be evaluated to be able to
> >>>>>>> survive this
> >>>>>>> * - hence I keep the DVS disabled for non DVS bucks by default. I
> >>>>>>> don't want
> >>>>>>> * to help you burn your proto board)
> >>>>>>> *
> >>>>>>> * So we allow describing this external connection from DT and
> >>>>>>> scale the
> >>>>>>> * voltages accordingly. This is what the connection should look
> >>>>>>> like:
> >>>>>>> *
> >>>>>>> * |------------|
> >>>>>>> * | buck 8 |-------+----->Vout
> >>>>>>> * | | |
> >>>>>>> * |------------| |
> >>>>>>> * | FB pin |
> >>>>>>> * | |
> >>>>>>> * +-------+--R2---+
> >>>>>>> * |
> >>>>>>> * R1
> >>>>>>> * |
> >>>>>>> * V FB-pull-up
> >>>>>>> *
> >>>>>>> * Here the buck output is sifted according to formula:
> >>>>>>> *
> >>>>>>> * Vout_o = Vo - (Vpu - Vo)*R2/R1
> >>>>>>> * Linear_step = step_orig*(R1+R2)/R1
> >>>>>>> *
> >>>>>>> * where:
> >>>>>>> * Vout_o is adjusted voltage output at vsel reg value 0
> >>>>>>> * Vo is original voltage output at vsel reg value 0
> >>>>>>> * Vpu is the pull-up voltage V FB-pull-up in the picture
> >>>>>>> * R1 and R2 are resistor values.
> >>>>>>> *
> >>>>>>> * As a real world example for buck8 and a specific GPU:
> >>>>>>> * VLDO = 1.6V (used as FB-pull-up)
> >>>>>>> * R1 = 1000ohms
> >>>>>>> * R2 = 150ohms
> >>>>>>> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
> >>>>>>> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
> >>>>>>> */
> >>>>>>>
> >>>>>>> Because I do not know the pull up voltage, and I am not sure if it
> >>>>>>> is a
> >>>>>>> pull up.
> >>>>>>>
> >>>>>>> So:
> >>>>>>> Vout_o = 1.35V
> >>>>>>> Vo = 1.1V
> >>>>>>> Vpu = unknown
> >>>>>>> R2 = 499 Ohm
> >>>>>>> R1 = 2200 Ohm
> >>>>>>> Gives:
> >>>>>>> Vpu = ~0V
> >>>>>>>
> >>>>>>> And:
> >>>>>>> Vout_o = 1.35V
> >>>>>>> Vo = 1.1V
> >>>>>>> Vpu = unknown
> >>>>>>> R2 = 2200 Ohm
> >>>>>>> R1 = 499 Ohm
> >>>>>>> Gives:
> >>>>>>> Vpu = ~1.04V
> >>>>>>>
> >>>>>>> I am not quite sure which resistor is R1 and which is R2 but having
> >>>>>>> there be a pull down to 0V seems the most logical answer?
> >>>>>>>
> >>>>>>> I am adding Lothar from Ka-Ro to the CC maybe he can shed some
> >>>>>>> light on
> >>>>>>> this setup.
> >>>>>> R2 is connected to GND, so Vpu = 0.
> >>>>>> With:
> >>>>>> regulator-min-microvolt = <1350000>;
> >>>>>> regulator-max-microvolt = <1350000>;
> >>>>>> rohm,fb-pull-up-microvolt = <0>;
> >>>>>> rohm,feedback-pull-up-r1-ohms = <2200>;
> >>>>>> rohm,feedback-pull-up-r2-ohms = <499>;
> >>>>>> the correct voltage should be produced on the BUCK8 output, but a quick
> >>>>>> test with these parameters led to:
> >>>>>> |failed to get the current voltage: -EINVAL
> >>>>>> |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to register
> >>>>>> buck6 regulator
> >>>>>> |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
> >>>>>>
> >>>>>> Apparently noone has ever tested this feature in real life.
> >>>>>
> >>>>> Thanks for trying it out Lothar. I am positive this was tested - but
> >>>>> probably the use-case has been using a pull-up. I assume having the zero
> >>>>> pull-up voltage causes the driver to calculate some bogus values. I
> >>>>> think fixing the computation in the driver might not be that big of a
> >>>>> task(?) The benefit of doing it would be that the correct voltages would
> >>>>> be calculated by the driver.
> >>>>>
> >>>>> If real voltages aren't matching what is calculated by the driver, then
> >>>>> the voltages requested by regulator consumers will cause wrong voltages
> >>>>> to be applied. Debug interfaces will also show wrong voltages, and the
> >>>>> safety limits set in the device-tree will not be really respected.
> >>>>>
> >>>>> I think this would be well worth fixing.
> >>>>>
> >>>> Before doing the real-life test I did the same calculation that's done
> >>>> in the driver to be sure that it will generate the correct values:
> >>>> bc 1.07.1
> >>>> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
> >>>> Free Software Foundation, Inc.
> >>>> This is free software with ABSOLUTELY NO WARRANTY.
> >>>> For details type `warranty'.
> >>>> fb_uv=0
> >>>> r1=2200
> >>>> r2=499
> >>>> min=800000
> >>>> step=10000
> >>>> # default voltage without divider
> >>>> min+30*step
> >>>> 1100000
> >>>> min=min-(fb_uv-min)*r2/r1
> >>>> step=step*(r1+r2)/r1
> >>>> min
> >>>> 981454
> >>>> step
> >>>> 12268
> >>>> # default voltage with divider
> >>>> min+30*step
> >>>> 1349494
> >>>>
> >>>> Probably we need to use this value rather than the nominal 135000 as
> >>>> the target voltage in the DTB.
> >>>
> >>> Yes. When the driver calculates the voltages which match the actual
> >>> voltages, then you should also use the actual voltages in the device-tree.
> >>>
> >>
> >> Think I've got it:
> >>
> >> diff --git a/drivers/regulator/bd718x7-regulator.c
> >> b/drivers/regulator/bd718x7-regulator.c
> >> index 022d98f3c32a2..ea9c4058ee6a5 100644
> >> --- a/drivers/regulator/bd718x7-regulator.c
> >> +++ b/drivers/regulator/bd718x7-regulator.c
> >> @@ -1613,6 +1613,8 @@ static int setup_feedback_loop(struct device *dev,
> >> struct device_node *np,
> >> step /= r1;
> >>
> >> new[j].min = min;
> >> + new[j].min_sel =
> >> desc->linear_ranges[j].min_sel;
> >> + new[j].max_sel =
> >> desc->linear_ranges[j].max_sel;
> >> new[j].step = step;
> >>
> >> dev_dbg(dev, "%s: old range min %d,
> >> step %d\n",
> >>
> >>
> >> the min_sel and max_sel fields were uninitialized in the new
> >> linear_range, copying them over from the old one (they refer to the
> >> register range if I understand correctly so they should not change)
> >> initializes them.
> >>
> >> Then setting 1349494 as the actual voltage makes it fully work.
> >> Otherwise it complains:
> >> buck6: failed to apply 1350000-1350000uV constraint: -EINVAL
> >>
> >> Final debug output now:
> >> [ 0.327807] rohm-bd718x7 0-004b: buck6: old range min 800000, step 10000
> >> [ 0.327813] rohm-bd718x7 0-004b: new range min 981454, step 12268
> >> [ 0.327819] rohm-bd718x7 0-004b: regulator 'buck6' has FB pull-up
> >> configured
> >>
> >> I will add this fix to the next version of this patchset and include
> >> your requested change in the dts.
> >>
> > Does it also work with min/max settings in the DTS that are taken from
> > the designated value +/- 5% tolerance margin, so that the DTS contains
> > reasonable values determined by the HW requirements, rather than some
> > artificial number that is enforced by the SW behaviour?
> > E.g.:
> > regulator-min-microvolts = <(135000 - 6750)>;
> > regulator-min-microvolts = <(135000 + 6750)>;
> > Thus, the nominal value of the voltage is explicitly shown in the DTS
> > file.
>
> Setting that range seems to work:
>
I just checked the datasheet of the DRAM powered by the regulator. The voltage
tolerance of the 1.35V supply is -.067 V + .1 V.
I.e. the voltage settings should be:
regulator-min-microvolts = <(135000 - 6700)>;
regulator-max-microvolts = <(135000 + 10000)>;
to match the actual requirements of the consumer for this regulator.
Lothar Waßmann
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-31 5:36 ` Lothar Waßmann
@ 2025-10-31 7:26 ` Maud Spierings
0 siblings, 0 replies; 28+ messages in thread
From: Maud Spierings @ 2025-10-31 7:26 UTC (permalink / raw)
To: Lothar Waßmann
Cc: Matti Vaittinen, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
devicetree, linux-kernel, imx, linux-arm-kernel
Hi Lothar,
On 10/31/25 06:36, Lothar Waßmann wrote:
> Hi,
>
> On Thu, 30 Oct 2025 15:45:14 +0100 Maud Spierings wrote:
>> Hi Lothar,
>>
>> On 10/30/25 09:54, Lothar Waßmann wrote:
>>> Hi,
>>>
>>> On Wed, 29 Oct 2025 16:35:25 +0100 Maud Spierings wrote:
>>>> Hi Matti,
>>>>
>>>> On 10/29/25 11:05, Matti Vaittinen wrote:
>>>>> On 29/10/2025 11:48, Lothar Waßmann wrote:
>>>>>> Hi,
>>>>>>
>>>>>> On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
>>>>>>> On 29/10/2025 09:11, Lothar Waßmann wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
>>>>>>>>> On 10/28/25 13:42, Maud Spierings wrote:
>>>>>>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
>>>>>>>> [...]
>>>>>>>>>>> Could/Should this be described using the:
>>>>>>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
>>>>>>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>>>>>>>>>>> correctly, that might allow the driver to be able to use correctly
>>>>>>>>>>> scaled voltages.
>>>>>>>>>>>
>>>>>>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>>>>>>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>>>>>>>>>
>>>>>>>>>> Ah I didn't know those existed, should've checked the bindings in
>>>>>>>>>> more
>>>>>>>>>> detail, thanks for the hint!
>>>>>>>>>>
>>>>>>>>>> I will have to investigate this carefully, since I don't have
>>>>>>>>>> access to
>>>>>>>>>> the actual design of the COM, so I don't know exactly what is there.
>>>>>>>>>
>>>>>>>>> So I am not yet entirely sure if this works out, I used the
>>>>>>>>> calculation
>>>>>>>>> in the driver:
>>>>>>>>>
>>>>>>>>> /*
>>>>>>>>> * Setups where regulator (especially the buck8) output voltage
>>>>>>>>> is scaled
>>>>>>>>> * by adding external connection where some other regulator
>>>>>>>>> output is
>>>>>>>>> connected
>>>>>>>>> * to feedback-pin (over suitable resistors) is getting popular
>>>>>>>>> amongst
>>>>>>>>> users
>>>>>>>>> * of BD71837. (This allows for example scaling down the buck8
>>>>>>>>> voltages
>>>>>>>>> to suit
>>>>>>>>> * lover GPU voltages for projects where buck8 is (ab)used to
>>>>>>>>> supply power
>>>>>>>>> * for GPU. Additionally some setups do allow DVS for buck8 but
>>>>>>>>> as this do
>>>>>>>>> * produce voltage spikes the HW must be evaluated to be able to
>>>>>>>>> survive this
>>>>>>>>> * - hence I keep the DVS disabled for non DVS bucks by default. I
>>>>>>>>> don't want
>>>>>>>>> * to help you burn your proto board)
>>>>>>>>> *
>>>>>>>>> * So we allow describing this external connection from DT and
>>>>>>>>> scale the
>>>>>>>>> * voltages accordingly. This is what the connection should look
>>>>>>>>> like:
>>>>>>>>> *
>>>>>>>>> * |------------|
>>>>>>>>> * | buck 8 |-------+----->Vout
>>>>>>>>> * | | |
>>>>>>>>> * |------------| |
>>>>>>>>> * | FB pin |
>>>>>>>>> * | |
>>>>>>>>> * +-------+--R2---+
>>>>>>>>> * |
>>>>>>>>> * R1
>>>>>>>>> * |
>>>>>>>>> * V FB-pull-up
>>>>>>>>> *
>>>>>>>>> * Here the buck output is sifted according to formula:
>>>>>>>>> *
>>>>>>>>> * Vout_o = Vo - (Vpu - Vo)*R2/R1
>>>>>>>>> * Linear_step = step_orig*(R1+R2)/R1
>>>>>>>>> *
>>>>>>>>> * where:
>>>>>>>>> * Vout_o is adjusted voltage output at vsel reg value 0
>>>>>>>>> * Vo is original voltage output at vsel reg value 0
>>>>>>>>> * Vpu is the pull-up voltage V FB-pull-up in the picture
>>>>>>>>> * R1 and R2 are resistor values.
>>>>>>>>> *
>>>>>>>>> * As a real world example for buck8 and a specific GPU:
>>>>>>>>> * VLDO = 1.6V (used as FB-pull-up)
>>>>>>>>> * R1 = 1000ohms
>>>>>>>>> * R2 = 150ohms
>>>>>>>>> * VSEL 0x0 => 0.8V – (VLDO – 0.8) * R2 / R1 = 0.68V
>>>>>>>>> * Linear Step = 10mV * (R1 + R2) / R1 = 11.5mV
>>>>>>>>> */
>>>>>>>>>
>>>>>>>>> Because I do not know the pull up voltage, and I am not sure if it
>>>>>>>>> is a
>>>>>>>>> pull up.
>>>>>>>>>
>>>>>>>>> So:
>>>>>>>>> Vout_o = 1.35V
>>>>>>>>> Vo = 1.1V
>>>>>>>>> Vpu = unknown
>>>>>>>>> R2 = 499 Ohm
>>>>>>>>> R1 = 2200 Ohm
>>>>>>>>> Gives:
>>>>>>>>> Vpu = ~0V
>>>>>>>>>
>>>>>>>>> And:
>>>>>>>>> Vout_o = 1.35V
>>>>>>>>> Vo = 1.1V
>>>>>>>>> Vpu = unknown
>>>>>>>>> R2 = 2200 Ohm
>>>>>>>>> R1 = 499 Ohm
>>>>>>>>> Gives:
>>>>>>>>> Vpu = ~1.04V
>>>>>>>>>
>>>>>>>>> I am not quite sure which resistor is R1 and which is R2 but having
>>>>>>>>> there be a pull down to 0V seems the most logical answer?
>>>>>>>>>
>>>>>>>>> I am adding Lothar from Ka-Ro to the CC maybe he can shed some
>>>>>>>>> light on
>>>>>>>>> this setup.
>>>>>>>> R2 is connected to GND, so Vpu = 0.
>>>>>>>> With:
>>>>>>>> regulator-min-microvolt = <1350000>;
>>>>>>>> regulator-max-microvolt = <1350000>;
>>>>>>>> rohm,fb-pull-up-microvolt = <0>;
>>>>>>>> rohm,feedback-pull-up-r1-ohms = <2200>;
>>>>>>>> rohm,feedback-pull-up-r2-ohms = <499>;
>>>>>>>> the correct voltage should be produced on the BUCK8 output, but a quick
>>>>>>>> test with these parameters led to:
>>>>>>>> |failed to get the current voltage: -EINVAL
>>>>>>>> |bd718xx-pmic bd71847-pmic.3.auto: error -EINVAL: failed to register
>>>>>>>> buck6 regulator
>>>>>>>> |bd718xx-pmic: probe of bd71847-pmic.3.auto failed with error -22
>>>>>>>>
>>>>>>>> Apparently noone has ever tested this feature in real life.
>>>>>>>
>>>>>>> Thanks for trying it out Lothar. I am positive this was tested - but
>>>>>>> probably the use-case has been using a pull-up. I assume having the zero
>>>>>>> pull-up voltage causes the driver to calculate some bogus values. I
>>>>>>> think fixing the computation in the driver might not be that big of a
>>>>>>> task(?) The benefit of doing it would be that the correct voltages would
>>>>>>> be calculated by the driver.
>>>>>>>
>>>>>>> If real voltages aren't matching what is calculated by the driver, then
>>>>>>> the voltages requested by regulator consumers will cause wrong voltages
>>>>>>> to be applied. Debug interfaces will also show wrong voltages, and the
>>>>>>> safety limits set in the device-tree will not be really respected.
>>>>>>>
>>>>>>> I think this would be well worth fixing.
>>>>>>>
>>>>>> Before doing the real-life test I did the same calculation that's done
>>>>>> in the driver to be sure that it will generate the correct values:
>>>>>> bc 1.07.1
>>>>>> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
>>>>>> Free Software Foundation, Inc.
>>>>>> This is free software with ABSOLUTELY NO WARRANTY.
>>>>>> For details type `warranty'.
>>>>>> fb_uv=0
>>>>>> r1=2200
>>>>>> r2=499
>>>>>> min=800000
>>>>>> step=10000
>>>>>> # default voltage without divider
>>>>>> min+30*step
>>>>>> 1100000
>>>>>> min=min-(fb_uv-min)*r2/r1
>>>>>> step=step*(r1+r2)/r1
>>>>>> min
>>>>>> 981454
>>>>>> step
>>>>>> 12268
>>>>>> # default voltage with divider
>>>>>> min+30*step
>>>>>> 1349494
>>>>>>
>>>>>> Probably we need to use this value rather than the nominal 135000 as
>>>>>> the target voltage in the DTB.
>>>>>
>>>>> Yes. When the driver calculates the voltages which match the actual
>>>>> voltages, then you should also use the actual voltages in the device-tree.
>>>>>
>>>>
>>>> Think I've got it:
>>>>
>>>> diff --git a/drivers/regulator/bd718x7-regulator.c
>>>> b/drivers/regulator/bd718x7-regulator.c
>>>> index 022d98f3c32a2..ea9c4058ee6a5 100644
>>>> --- a/drivers/regulator/bd718x7-regulator.c
>>>> +++ b/drivers/regulator/bd718x7-regulator.c
>>>> @@ -1613,6 +1613,8 @@ static int setup_feedback_loop(struct device *dev,
>>>> struct device_node *np,
>>>> step /= r1;
>>>>
>>>> new[j].min = min;
>>>> + new[j].min_sel =
>>>> desc->linear_ranges[j].min_sel;
>>>> + new[j].max_sel =
>>>> desc->linear_ranges[j].max_sel;
>>>> new[j].step = step;
>>>>
>>>> dev_dbg(dev, "%s: old range min %d,
>>>> step %d\n",
>>>>
>>>>
>>>> the min_sel and max_sel fields were uninitialized in the new
>>>> linear_range, copying them over from the old one (they refer to the
>>>> register range if I understand correctly so they should not change)
>>>> initializes them.
>>>>
>>>> Then setting 1349494 as the actual voltage makes it fully work.
>>>> Otherwise it complains:
>>>> buck6: failed to apply 1350000-1350000uV constraint: -EINVAL
>>>>
>>>> Final debug output now:
>>>> [ 0.327807] rohm-bd718x7 0-004b: buck6: old range min 800000, step 10000
>>>> [ 0.327813] rohm-bd718x7 0-004b: new range min 981454, step 12268
>>>> [ 0.327819] rohm-bd718x7 0-004b: regulator 'buck6' has FB pull-up
>>>> configured
>>>>
>>>> I will add this fix to the next version of this patchset and include
>>>> your requested change in the dts.
>>>>
>>> Does it also work with min/max settings in the DTS that are taken from
>>> the designated value +/- 5% tolerance margin, so that the DTS contains
>>> reasonable values determined by the HW requirements, rather than some
>>> artificial number that is enforced by the SW behaviour?
>>> E.g.:
>>> regulator-min-microvolts = <(135000 - 6750)>;
>>> regulator-min-microvolts = <(135000 + 6750)>;
>>> Thus, the nominal value of the voltage is explicitly shown in the DTS
>>> file.
>>
>> Setting that range seems to work:
>>
> I just checked the datasheet of the DRAM powered by the regulator. The voltage
> tolerance of the 1.35V supply is -.067 V + .1 V.
> I.e. the voltage settings should be:
> regulator-min-microvolts = <(135000 - 6700)>;
> regulator-max-microvolts = <(135000 + 10000)>;
> to match the actual requirements of the consumer for this regulator.
Thank you very much for providing these numbers and verifying the
calculations. I've incorperated them into my V4 of the patchset.
Kind regards,
Maud
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM
2025-10-30 12:00 ` Lothar Waßmann
@ 2025-10-31 12:07 ` Matti Vaittinen
0 siblings, 0 replies; 28+ messages in thread
From: Matti Vaittinen @ 2025-10-31 12:07 UTC (permalink / raw)
To: Lothar Waßmann
Cc: Maud Spierings, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
devicetree, linux-kernel, imx, linux-arm-kernel
On 30/10/2025 14:00, Lothar Waßmann wrote:
> Hi,
>
> On Thu, 30 Oct 2025 13:01:52 +0200 Matti Vaittinen wrote:
>> On 30/10/2025 10:54, Lothar Waßmann wrote:
>>> Hi,
>>>
>>> On Wed, 29 Oct 2025 16:35:25 +0100 Maud Spierings wrote:
>>>> Hi Matti,
>>>>
>>>> On 10/29/25 11:05, Matti Vaittinen wrote:
>>>>> On 29/10/2025 11:48, Lothar Waßmann wrote:
>>>>>> Hi,
>>>>>>
>>>>>> On Wed, 29 Oct 2025 10:42:17 +0200 Matti Vaittinen wrote:
>>>>>>> On 29/10/2025 09:11, Lothar Waßmann wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> On Tue, 28 Oct 2025 14:10:04 +0100 Maud Spierings wrote:
>>>>>>>>> On 10/28/25 13:42, Maud Spierings wrote:
>>>>>>>>>> On 10/28/25 13:15, Matti Vaittinen wrote:
>>>>>>>> [...]
>>>>>>>>>>> Could/Should this be described using the:
>>>>>>>>>>> 'rohm,feedback-pull-up-r1-ohms' and
>>>>>>>>>>> 'rohm,feedback-pull-up-r2-ohms'? If I understand the comment
>>>>>>>>>>> correctly, that might allow the driver to be able to use correctly
>>>>>>>>>>> scaled voltages.
>>>>>>>>>>>
>>>>>>>>>>> https://elixir.bootlin.com/linux/v6.18-rc1/source/Documentation/
>>>>>>>>>>> devicetree/bindings/regulator/rohm,bd71837-regulator.yaml#L108
>>>>>>>>>>
>>
>> // snip
>>
>>>>>>>
>>>>>>> If real voltages aren't matching what is calculated by the driver, then
>>>>>>> the voltages requested by regulator consumers will cause wrong voltages
>>>>>>> to be applied. Debug interfaces will also show wrong voltages, and the
>>>>>>> safety limits set in the device-tree will not be really respected.
>>>>>>>
>>>>>>> I think this would be well worth fixing.
>>>>>>>
>>>>>> Before doing the real-life test I did the same calculation that's done
>>>>>> in the driver to be sure that it will generate the correct values:
>>>>>> bc 1.07.1
>>>>>> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
>>>>>> Free Software Foundation, Inc.
>>>>>> This is free software with ABSOLUTELY NO WARRANTY.
>>>>>> For details type `warranty'.
>>>>>> fb_uv=0
>>>>>> r1=2200
>>>>>> r2=499
>>>>>> min=800000
>>>>>> step=10000
>>>>>> # default voltage without divider
>>>>>> min+30*step
>>>>>> 1100000
>>>>>> min=min-(fb_uv-min)*r2/r1
>>>>>> step=step*(r1+r2)/r1
>>>>>> min
>>>>>> 981454
>>>>>> step
>>>>>> 12268
>>>>>> # default voltage with divider
>>>>>> min+30*step
>>>>>> 1349494
>>>>>>
>>>>>> Probably we need to use this value rather than the nominal 135000 as
>>>>>> the target voltage in the DTB.
>>>>>
>>>>> Yes. When the driver calculates the voltages which match the actual
>>>>> voltages, then you should also use the actual voltages in the device-tree.
>>>>>
>>>>
>>
>> // snip
>>
>>>>
>>>> Then setting 1349494 as the actual voltage makes it fully work.
>>>> Otherwise it complains:
>>>> buck6: failed to apply 1350000-1350000uV constraint: -EINVAL
>>>>
>>>> Final debug output now:
>>>> [ 0.327807] rohm-bd718x7 0-004b: buck6: old range min 800000, step 10000
>>>> [ 0.327813] rohm-bd718x7 0-004b: new range min 981454, step 12268
>>>> [ 0.327819] rohm-bd718x7 0-004b: regulator 'buck6' has FB pull-up
>>>> configured
>>>>
>>>> I will add this fix to the next version of this patchset and include
>>>> your requested change in the dts.
>>>>
>>> Does it also work with min/max settings in the DTS that are taken from
>>> the designated value +/- 5% tolerance margin, so that the DTS contains
>>> reasonable values determined by the HW requirements, rather than some
>>> artificial number that is enforced by the SW behaviour?
>>
>> I am unsure what you mean by "artificial number that is enforced by the
>> SW behaviour"?
>>
> The nominal voltage that is required by the consumer is 1.35 V. That's
> the voltage I would expect to set as target for the regulator.
> If that voltage cannot be achieved exactly, I would prefer to have the
> intended voltage listed explicitly rather than listing a value that
> accidentally can be achieved by the regulator but has nothing to do with
> the requirements of the consumer.
Ah. Thanks for the explanation. I get it now - sorry for the noise.
--
Matti Vaittinen
Linux kernel developer at ROHM Semiconductors
Oulu Finland
~~ When things go utterly wrong vim users can always type :help! ~~
^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2025-10-31 12:07 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-22 7:22 [PATCH v2 0/5] arm64: dts: freescale: add support for the GOcontroll Moduline IV/Mini Maud Spierings via B4 Relay
2025-10-22 7:22 ` [PATCH v2 1/5] dt-bindings: arm: fsl: Add " Maud Spierings via B4 Relay
2025-10-22 7:22 ` [PATCH v2 2/5] arm64: dts: imx8mm: Add pinctrl config definitions Maud Spierings via B4 Relay
2025-10-22 7:22 ` [PATCH v2 3/5] arm64: dts: freescale: add Ka-Ro Electronics tx8m-1610 COM Maud Spierings via B4 Relay
2025-10-28 12:15 ` Matti Vaittinen
2025-10-28 12:42 ` Maud Spierings
2025-10-28 13:10 ` Maud Spierings
2025-10-29 7:11 ` Lothar Waßmann
2025-10-29 8:42 ` Matti Vaittinen
2025-10-29 9:00 ` Maud Spierings
2025-10-29 9:33 ` Matti Vaittinen
2025-10-29 9:48 ` Lothar Waßmann
2025-10-29 10:05 ` Matti Vaittinen
2025-10-29 15:35 ` Maud Spierings
2025-10-29 15:51 ` Maud Spierings
2025-10-29 19:04 ` Matti Vaittinen
2025-10-30 8:54 ` Lothar Waßmann
2025-10-30 11:01 ` Matti Vaittinen
2025-10-30 12:00 ` Lothar Waßmann
2025-10-31 12:07 ` Matti Vaittinen
2025-10-30 14:45 ` Maud Spierings
2025-10-31 5:36 ` Lothar Waßmann
2025-10-31 7:26 ` Maud Spierings
2025-10-22 7:22 ` [PATCH v2 4/5] arm64: dts: freescale: Add the GOcontroll Moduline IV Maud Spierings via B4 Relay
2025-10-22 7:57 ` Marc Kleine-Budde
2025-10-22 8:23 ` Maud Spierings
2025-10-22 10:18 ` Maud Spierings
2025-10-22 7:22 ` [PATCH v2 5/5] arm64: dts: freescale: Add the GOcontroll Moduline Mini Maud Spierings via B4 Relay
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).