From: Kory Maincent <kory.maincent@bootlin.com>
To: Jonas Jelonek <jonas@jonasjelonek.de>,
Oleksij Rempel <o.rempel@pengutronix.de>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@kernel.org>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
netdev@vger.kernel.org, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>
Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
Sander Vanheule <sander@svanheule.net>,
Russell Senior <russell@personaltelco.net>
Subject: Re: [PATCH net-next 1/4] net: pse-pd: realtek-pse-mcu: ensure MCU does dynamic power management
Date: Wed, 4 Nov 2026 11:02:50 +0100 [thread overview]
Message-ID: <c0af13a8-5ea6-47d3-9c6c-2935f8cd8ce0@bootlin.com> (raw)
In-Reply-To: <20261103220312.860629-2-jonas@jonasjelonek.de>
On 11/3/26 23:03, Jonas Jelonek wrote:
> From: Russell Senior <russell@personaltelco.net>
>
> The MCU may have any power management mode configuration by default
> but the driver should ensure that the MCU performs dynamic power
> management with priorities as advertised. On certain devices, the
> default MCU configuration ships with another default, possibly
> preventing any power delivery.
>
> Select the mode before deasserting the hardware port gate, so a failure
> to establish the management policy does not ungate the ports.
>
> Signed-off-by: Russell Senior <russell@personaltelco.net>
> [jonas@jonasjelonek.de: adjust commit message, macro naming and comment;
> change error handling and select the mode before ungating ports]
> Signed-off-by: Jonas Jelonek <jonas@jonasjelonek.de>
> ---
> drivers/net/pse-pd/realtek-pse-mcu-core.c | 32 +++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
>
> diff --git a/drivers/net/pse-pd/realtek-pse-mcu-core.c b/drivers/net/pse-pd/realtek-pse-mcu-core.c
> index c70b09ca2012..f3fc67fe29d3 100644
> --- a/drivers/net/pse-pd/realtek-pse-mcu-core.c
> +++ b/drivers/net/pse-pd/realtek-pse-mcu-core.c
> @@ -68,10 +68,14 @@
> /* Nominal PSE rail; 802.3at/bt operating range. */
> #define RTPSE_MCU_PSE_VOLTAGE_UV 54000000
>
> +/* RTPSE_MCU_CMD_SET_POWER_MANAGEMENT_MODE values */
> +#define RTPSE_MCU_POWER_MGMT_DYNAMIC_PRIO 0x02 /* dynamic, with port priority */
> +
> enum rtpse_mcu_cmd {
> RTPSE_MCU_CMD_SET_GLOBAL_STATE,
> RTPSE_MCU_CMD_GET_SYSTEM_INFO,
> RTPSE_MCU_CMD_GET_EXT_CONFIG,
> + RTPSE_MCU_CMD_SET_POWER_MANAGEMENT_MODE,
>
> RTPSE_MCU_CMD_PORT_ENABLE,
> RTPSE_MCU_CMD_PORT_SET_POWER_LIMIT_TYPE,
> @@ -369,6 +373,26 @@ static int rtpse_mcu_set_global_state(struct rtpse_mcu_ctrl *pse, bool enable)
> return (resp.payload[0] == 0x0) ? 0 : -EIO;
> }
>
> +static int rtpse_mcu_set_power_management_mode(struct rtpse_mcu_ctrl *pse, u8 value)
> +{
> + struct rtpse_mcu_msg req, resp;
> + const struct rtpse_mcu_opcode *opc;
> + int ret;
> +
> + opc = &pse->dialect->opcode[RTPSE_MCU_CMD_SET_POWER_MANAGEMENT_MODE];
> + if (!opc->valid)
> + return -EOPNOTSUPP;
> +
> + rtpse_mcu_msg_init(&req, opc->op);
> + req.payload[0] = value;
> +
> + ret = rtpse_mcu_do_xfer(pse, &req, &resp);
> + if (ret)
> + return ret;
> +
> + return (resp.payload[0] == 0x0) ? 0 : -EIO;
> +}
> +
> /* Port operations */
>
> static int rtpse_mcu_port_get_status(struct rtpse_mcu_ctrl *pse, unsigned int port,
> @@ -826,6 +850,12 @@ int rtpse_mcu_register(struct rtpse_mcu_ctrl *pse)
> if (ret)
> return ret;
>
> + /* ensure the MCU does dynamic power management with priorities */
> + ret = rtpse_mcu_set_power_management_mode(pse, RTPSE_MCU_POWER_MGMT_DYNAMIC_PRIO);
Why do you pass RTPSE_MCU_POWER_MGMT_DYNAMIC_PRIO as parameter?
You are calling this function only once in the whole series so you can
directly use it in the function.
pw-bot: cr
> + if (ret)
> + return dev_err_probe(pse->dev, ret,
> + "failed to set power management mode\n");
> +
> /*
> * Some boards gate all ports through a hardware line; deassert it only
> * after the MCU is confirmed, so a discover failure never ungates the
> @@ -944,6 +974,7 @@ static const struct rtpse_mcu_dialect rtpse_mcu_dialect_gen2 = {
> [RTPSE_MCU_CMD_SET_GLOBAL_STATE] = RTPSE_MCU_OP(0x00),
> [RTPSE_MCU_CMD_GET_SYSTEM_INFO] = RTPSE_MCU_OP(0x40),
> [RTPSE_MCU_CMD_GET_EXT_CONFIG] = RTPSE_MCU_OP(0x4a),
> + [RTPSE_MCU_CMD_SET_POWER_MANAGEMENT_MODE] = RTPSE_MCU_OP(0x10),
>
> [RTPSE_MCU_CMD_PORT_ENABLE] = RTPSE_MCU_OP(0x01),
> [RTPSE_MCU_CMD_PORT_SET_POWER_LIMIT_TYPE] = RTPSE_MCU_OP(0x12),
> @@ -964,6 +995,7 @@ static const struct rtpse_mcu_dialect rtpse_mcu_dialect_gen1 = {
> .opcode = {
> [RTPSE_MCU_CMD_GET_SYSTEM_INFO] = RTPSE_MCU_OP(0x20),
> [RTPSE_MCU_CMD_GET_EXT_CONFIG] = RTPSE_MCU_OP(0x2b),
> + [RTPSE_MCU_CMD_SET_POWER_MANAGEMENT_MODE] = RTPSE_MCU_OP(0x17),
>
> [RTPSE_MCU_CMD_PORT_ENABLE] = RTPSE_MCU_OP(0x00),
> [RTPSE_MCU_CMD_PORT_SET_POWER_LIMIT_TYPE] = RTPSE_MCU_OP(0x15),
--
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2026-11-04 10:03 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-03 22:03 [PATCH net-next 0/4] net: pse-pd: realtek-pse-mcu: establish power management configuration Jonas Jelonek
2026-11-03 22:03 ` [PATCH net-next 1/4] net: pse-pd: realtek-pse-mcu: ensure MCU does dynamic power management Jonas Jelonek
2026-11-04 10:02 ` Kory Maincent [this message]
2026-11-03 22:03 ` [PATCH net-next 2/4] dt-bindings: net: pse-pd: realtek,pse-mcu: add VMAIN supply Jonas Jelonek
2026-11-04 10:04 ` Kory Maincent
2026-11-04 21:49 ` Rob Herring (Arm)
2026-11-03 22:03 ` [PATCH net-next 3/4] net: pse-pd: realtek-pse-mcu: configure global power budget Jonas Jelonek
2026-11-04 11:32 ` Kory Maincent
2026-11-04 12:20 ` Jonas Jelonek
2026-11-04 12:36 ` Kory Maincent
2026-11-04 12:51 ` Jonas Jelonek
2026-11-03 22:03 ` [PATCH net-next 4/4] net: pse-pd: realtek-pse-mcu: avoid global disable on teardown Jonas Jelonek
2026-11-04 9:45 ` Kory Maincent
2026-11-04 9:51 ` Jonas Jelonek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c0af13a8-5ea6-47d3-9c6c-2935f8cd8ce0@bootlin.com \
--to=kory.maincent@bootlin.com \
--cc=andrew+netdev@lunn.ch \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@kernel.org \
--cc=jonas@jonasjelonek.de \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=o.rempel@pengutronix.de \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
--cc=russell@personaltelco.net \
--cc=sander@svanheule.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®