All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Sebastian Reichel" <sebastian.reichel@collabora.com>
Cc: olteanv@gmail.com, neil.armstrong@linaro.org, robh@kernel.org,
	vkoul@kernel.org, linux-phy@lists.infradead.org,
	conor+dt@kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH v11 07/36] phy: rockchip: usbdp: Keep clocks running on PHY re-init
Date: Thu, 09 Jul 2026 19:18:26 +0000	[thread overview]
Message-ID: <20260709191827.080291F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260709-rockchip-usbdp-cleanup-v11-7-a149ac60f76c@collabora.com>

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:

Pre-existing issues:
- [High] The USB3 (U3) port is not re-enabled when the PHY dynamically switches from DP-only mode to DP+USB mode, breaking USB3 functionality.
- [High] PHY clock and power leak due to early exit during power off based on current mode instead of active status.
- [High] The DisplayPort PHY init function fails to replay a cached HPD (Hot Plug Detect) event if the Type-C cable was connected before the DP controller probed.
--

--- Patch [7]: [PATCH v11 07/36] phy: rockchip: usbdp: Keep clocks running on PHY re-init ---
commit 79bb98238750965863b0b02f66603b673864fa91
Author: Sebastian Reichel <sebastian.reichel@collabora.com>

phy: rockchip: usbdp: Keep clocks running on PHY re-init

This commit optimizes PHY re-initialization by avoiding the redundant disable
and re-enable of clocks. Instead of calling rk_udphy_disable() and
rk_udphy_setup(), it directly calls rk_udphy_init().

> diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockchip/phy-rockchip-usbdp.c
> index 6cb9f6b4dbf6d..e3f5a26c876a5 100644
> --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c
> +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c
> @@ -987,8 +987,7 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, u8 mode)
>  		if (udphy->mode == UDPHY_MODE_DP)
>  			rk_udphy_u3_port_disable(udphy, true);
>  
> -		rk_udphy_disable(udphy);
> -		ret = rk_udphy_setup(udphy);
> +		ret = rk_udphy_init(udphy);

[Severity: High]
This isn't a bug introduced by this patch, but does this logic leave the USB3
port disabled when dynamically switching from DP-only back to DP+USB mode?

When the Type-C mux transitions from DP+USB to DP-only mode,
rk_udphy_power_on() executes rk_udphy_u3_port_disable(udphy, true) because
udphy->mode == UDPHY_MODE_DP.

If the mux later switches back to DP+USB mode (where
udphy->mode == UDPHY_MODE_DP_USB), rk_udphy_power_on() is called again with
udphy->mode_change == true, but there is no corresponding
rk_udphy_u3_port_disable(udphy, false) call here to re-enable the U3 port.

Consequently, the USB 3.0 port appears to remain disabled in the GRF registers
until a full PHY power cycle.

>  		if (ret)
>  			return ret;
>  		udphy->mode_change = false;

There are also two other pre-existing issues in this file that might need
attention.

[Severity: High]
This is a pre-existing issue, but does rk_udphy_usb3_phy_exit() permanently
leak PHY clock and power resources if the Type-C mode changes before the USB
controller exits?

If the mode changes (e.g., from DP+USB to DP-only) before the USB controller
calls phy_exit, the mode will be updated. When rk_udphy_usb3_phy_exit() is
subsequently called:

static int rk_udphy_usb3_phy_exit(struct phy *phy)
{
	...
	/* DP only or high-speed */
	if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs)
		goto unlock;

	rk_udphy_power_off(udphy, UDPHY_MODE_USB);
	...
}

Since udphy->mode was already updated, this condition evaluates to true,
causing an early return. The UDPHY_MODE_USB bit is never cleared from
udphy->status, permanently skipping rk_udphy_disable() and leaving clocks
running even when all devices detach.

The same logic flaw exists in rk_udphy_power_off():

static void rk_udphy_power_off(struct rk_udphy *udphy, u8 mode)
{
	if (!(udphy->mode & mode)) {
		dev_info(udphy->dev, "mode 0x%02x is not support\n", mode);
		return;
	}
	...
}

Checking udphy->mode instead of the active udphy->status prevents the status
bit from being cleared.


[Severity: High]
This is a pre-existing issue, but does rk_udphy_dp_phy_init() silently miss
the initial connection event if the Type-C cable is connected before the
DisplayPort controller driver probes?

When a connection occurs, rk_udphy_dp_hpd_event_trigger() is called:

static void rk_udphy_dp_hpd_event_trigger(struct rk_udphy *udphy, bool hpd)
{
	...
	udphy->dp_sink_hpd_sel = true;
	udphy->dp_sink_hpd_cfg = hpd;

	if (!udphy->dp_in_use)
		return;

	rk_udphy_grfreg_write(udphy->vogrf, &cfg->vogrfcfg[udphy->id].hpd_trigger, hpd);
}

If the DP controller hasn't probed yet, the event is merely cached and not
written to the GRF register.

When the DP controller later probes and calls rk_udphy_dp_phy_init():

static int rk_udphy_dp_phy_init(struct phy *phy)
{
	...
	udphy->dp_in_use = true;
	...
	return 0;
}

The init function sets dp_in_use to true but never checks or applies the
cached HPD state (dp_sink_hpd_sel and dp_sink_hpd_cfg), leaving the display
blank until a physical replug.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260709-rockchip-usbdp-cleanup-v11-0-a149ac60f76c@collabora.com?part=7

WARNING: multiple messages have this Message-ID (diff)
From: sashiko-bot@kernel.org
To: "Sebastian Reichel" <sebastian.reichel@collabora.com>
Cc: olteanv@gmail.com, neil.armstrong@linaro.org, robh@kernel.org,
	vkoul@kernel.org, linux-phy@lists.infradead.org,
	conor+dt@kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH v11 07/36] phy: rockchip: usbdp: Keep clocks running on PHY re-init
Date: Thu, 09 Jul 2026 19:18:26 +0000	[thread overview]
Message-ID: <20260709191827.080291F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260709-rockchip-usbdp-cleanup-v11-7-a149ac60f76c@collabora.com>

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:

Pre-existing issues:
- [High] The USB3 (U3) port is not re-enabled when the PHY dynamically switches from DP-only mode to DP+USB mode, breaking USB3 functionality.
- [High] PHY clock and power leak due to early exit during power off based on current mode instead of active status.
- [High] The DisplayPort PHY init function fails to replay a cached HPD (Hot Plug Detect) event if the Type-C cable was connected before the DP controller probed.
--

--- Patch [7]: [PATCH v11 07/36] phy: rockchip: usbdp: Keep clocks running on PHY re-init ---
commit 79bb98238750965863b0b02f66603b673864fa91
Author: Sebastian Reichel <sebastian.reichel@collabora.com>

phy: rockchip: usbdp: Keep clocks running on PHY re-init

This commit optimizes PHY re-initialization by avoiding the redundant disable
and re-enable of clocks. Instead of calling rk_udphy_disable() and
rk_udphy_setup(), it directly calls rk_udphy_init().

> diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockchip/phy-rockchip-usbdp.c
> index 6cb9f6b4dbf6d..e3f5a26c876a5 100644
> --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c
> +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c
> @@ -987,8 +987,7 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, u8 mode)
>  		if (udphy->mode == UDPHY_MODE_DP)
>  			rk_udphy_u3_port_disable(udphy, true);
>  
> -		rk_udphy_disable(udphy);
> -		ret = rk_udphy_setup(udphy);
> +		ret = rk_udphy_init(udphy);

[Severity: High]
This isn't a bug introduced by this patch, but does this logic leave the USB3
port disabled when dynamically switching from DP-only back to DP+USB mode?

When the Type-C mux transitions from DP+USB to DP-only mode,
rk_udphy_power_on() executes rk_udphy_u3_port_disable(udphy, true) because
udphy->mode == UDPHY_MODE_DP.

If the mux later switches back to DP+USB mode (where
udphy->mode == UDPHY_MODE_DP_USB), rk_udphy_power_on() is called again with
udphy->mode_change == true, but there is no corresponding
rk_udphy_u3_port_disable(udphy, false) call here to re-enable the U3 port.

Consequently, the USB 3.0 port appears to remain disabled in the GRF registers
until a full PHY power cycle.

>  		if (ret)
>  			return ret;
>  		udphy->mode_change = false;

There are also two other pre-existing issues in this file that might need
attention.

[Severity: High]
This is a pre-existing issue, but does rk_udphy_usb3_phy_exit() permanently
leak PHY clock and power resources if the Type-C mode changes before the USB
controller exits?

If the mode changes (e.g., from DP+USB to DP-only) before the USB controller
calls phy_exit, the mode will be updated. When rk_udphy_usb3_phy_exit() is
subsequently called:

static int rk_udphy_usb3_phy_exit(struct phy *phy)
{
	...
	/* DP only or high-speed */
	if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs)
		goto unlock;

	rk_udphy_power_off(udphy, UDPHY_MODE_USB);
	...
}

Since udphy->mode was already updated, this condition evaluates to true,
causing an early return. The UDPHY_MODE_USB bit is never cleared from
udphy->status, permanently skipping rk_udphy_disable() and leaving clocks
running even when all devices detach.

The same logic flaw exists in rk_udphy_power_off():

static void rk_udphy_power_off(struct rk_udphy *udphy, u8 mode)
{
	if (!(udphy->mode & mode)) {
		dev_info(udphy->dev, "mode 0x%02x is not support\n", mode);
		return;
	}
	...
}

Checking udphy->mode instead of the active udphy->status prevents the status
bit from being cleared.


[Severity: High]
This is a pre-existing issue, but does rk_udphy_dp_phy_init() silently miss
the initial connection event if the Type-C cable is connected before the
DisplayPort controller driver probes?

When a connection occurs, rk_udphy_dp_hpd_event_trigger() is called:

static void rk_udphy_dp_hpd_event_trigger(struct rk_udphy *udphy, bool hpd)
{
	...
	udphy->dp_sink_hpd_sel = true;
	udphy->dp_sink_hpd_cfg = hpd;

	if (!udphy->dp_in_use)
		return;

	rk_udphy_grfreg_write(udphy->vogrf, &cfg->vogrfcfg[udphy->id].hpd_trigger, hpd);
}

If the DP controller hasn't probed yet, the event is merely cached and not
written to the GRF register.

When the DP controller later probes and calls rk_udphy_dp_phy_init():

static int rk_udphy_dp_phy_init(struct phy *phy)
{
	...
	udphy->dp_in_use = true;
	...
	return 0;
}

The init function sets dp_in_use to true but never checks or applies the
cached HPD state (dp_sink_hpd_sel and dp_sink_hpd_cfg), leaving the display
blank until a physical replug.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260709-rockchip-usbdp-cleanup-v11-0-a149ac60f76c@collabora.com?part=7

-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

  reply	other threads:[~2026-07-09 19:18 UTC|newest]

Thread overview: 149+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-09 19:02 [PATCH v11 00/36] phy: rockchip: usbdp: Clean up the mess Sebastian Reichel
2026-07-09 19:02 ` Sebastian Reichel
2026-07-09 19:02 ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 01/36] dt-bindings: phy: rockchip-usbdp: add improved ports scheme Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 02/36] phy: rockchip: usbdp: Update mode_change after error handling Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:20   ` sashiko-bot
2026-07-09 19:20     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 03/36] phy: rockchip: usbdp: Do not lose USB3 PHY status Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:19   ` sashiko-bot
2026-07-09 19:19     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 04/36] phy: rockchip: usbdp: Fix devm_clk_bulk_get_all check Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 05/36] phy: rockchip: usbdp: Handle missing clock-names DT property gracefully Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 06/36] phy: rockchip: usbdp: Drop seamless DP takeover Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:19   ` sashiko-bot
2026-07-09 19:19     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 07/36] phy: rockchip: usbdp: Keep clocks running on PHY re-init Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:18   ` sashiko-bot [this message]
2026-07-09 19:18     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 08/36] phy: rockchip: usbdp: Amend SSC modulation deviation Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:19   ` sashiko-bot
2026-07-09 19:19     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 09/36] phy: rockchip: usbdp: Fix LFPS detect threshold control Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 10/36] phy: rockchip: usbdp: Add missing mode_change update Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:19   ` sashiko-bot
2026-07-09 19:19     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 11/36] phy: rockchip: usbdp: Support single-lane DP Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:19   ` sashiko-bot
2026-07-09 19:19     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 12/36] phy: rockchip: usbdp: Limit DP lane count to muxed lanes Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:21   ` sashiko-bot
2026-07-09 19:21     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 13/36] phy: rockchip: usbdp: Rename DP lane functions Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 14/36] phy: rockchip: usbdp: Use FIELD_PREP_WM16_CONST Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 15/36] phy: rockchip: usbdp: Cleanup DP lane selection function Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 16/36] phy: rockchip: usbdp: Register DP aux bridge Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 17/36] phy: rockchip: usbdp: Drop DP HPD handling Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:23   ` sashiko-bot
2026-07-09 19:23     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 18/36] phy: rockchip: usbdp: Rename mode_change to phy_needs_reinit Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 19/36] phy: rockchip: usbdp: Re-init the PHY on orientation change Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:26   ` sashiko-bot
2026-07-09 19:26     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 20/36] phy: rockchip: usbdp: Factor out lane_mux_sel setup Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 21/36] phy: rockchip: usbdp: Properly handle TYPEC_STATE_SAFE and TYPEC_STATE_USB Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:27   ` sashiko-bot
2026-07-09 19:27     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 22/36] phy: rockchip: usbdp: Use guard functions for mutex Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 23/36] phy: rockchip: usbdp: Clear USB status on PHY exit Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:28   ` sashiko-bot
2026-07-09 19:28     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 24/36] phy: rockchip: usbdp: Hold mutex in DP PHY configure Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 25/36] phy: rockchip: usbdp: Add some extra debug messages Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 26/36] phy: rockchip: usbdp: Avoid xHCI SErrors Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:28   ` sashiko-bot
2026-07-09 19:28     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 27/36] phy: rockchip: usbdp: Handle rk_udphy_reset_deassert errors Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 28/36] phy: rockchip: usbdp: Only enable USB3 when not in high-speed mode Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:35   ` sashiko-bot
2026-07-09 19:35     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 29/36] phy: core: add notifier infrastructure Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:31   ` sashiko-bot
2026-07-09 19:31     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 30/36] usb: dwc3: core: support PHY reset notifications Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 31/36] phy: rockchip: usbdp: Add phy reset notification support Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:32   ` sashiko-bot
2026-07-09 19:32     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 32/36] phy: rockchip: usbdp: Drop -EPROBE_DEFER hack Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:34   ` sashiko-bot
2026-07-09 19:34     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 33/36] phy: rockchip: usbdp: Rename mode to hw_mode Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:35   ` sashiko-bot
2026-07-09 19:35     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 34/36] phy: rockchip: usbdp: Fix power state handling Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02 ` [PATCH v11 35/36] phy: rockchip: usbdp: Re-init PHY on mux change Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:41   ` sashiko-bot
2026-07-09 19:41     ` sashiko-bot
2026-07-09 19:02 ` [PATCH v11 36/36] phy: rockchip: usbdp: Add USB-C state without DP enabled Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel
2026-07-09 19:02   ` Sebastian Reichel

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=20260709191827.080291F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-phy@lists.infradead.org \
    --cc=neil.armstrong@linaro.org \
    --cc=olteanv@gmail.com \
    --cc=robh@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=sebastian.reichel@collabora.com \
    --cc=vkoul@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.