From: Neil Armstrong <neil.armstrong@linaro.org>
To: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
Rob Clark <robdclark@gmail.com>, Sean Paul <sean@poorly.run>,
Abhinav Kumar <quic_abhinavk@quicinc.com>
Cc: Marijn Suijten <marijn.suijten@somainline.org>,
Stephen Boyd <swboyd@chromium.org>,
David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
Bjorn Andersson <andersson@kernel.org>,
linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org,
freedreno@lists.freedesktop.org
Subject: Re: [PATCH 5/6] drm/msm/dpu: drop now-unused mdss_irqs field from hw catalog
Date: Mon, 22 May 2023 16:37:03 +0200 [thread overview]
Message-ID: <b32f9e5b-7d98-dfc5-12f1-691fa0ee6ddc@linaro.org> (raw)
In-Reply-To: <20230522004227.134501-6-dmitry.baryshkov@linaro.org>
On 22/05/2023 02:42, Dmitry Baryshkov wrote:
> Now as the list of the interrupts is constructed from the catalog
> data, drop the mdss_irqs field from catalog.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> .../drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h | 8 --------
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_4_0_sdm845.h | 9 ---------
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h | 11 -----------
> .../drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h | 13 -------------
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h | 10 ----------
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h | 6 ------
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h | 5 -----
> .../drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h | 5 -----
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_7_0_sm8350.h | 9 ---------
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h | 7 -------
> .../drm/msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h | 14 --------------
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h | 9 ---------
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_9_0_sm8550.h | 9 ---------
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 3 ---
> 14 files changed, 118 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
> index 3c732a0360c7..ff7c3d522046 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
> @@ -204,14 +204,6 @@ const struct dpu_mdss_cfg dpu_msm8998_cfg = {
> .vbif_count = ARRAY_SIZE(msm8998_vbif),
> .vbif = msm8998_vbif,
> .perf = &msm8998_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF0_INTR) | \
> - BIT(MDP_INTF1_INTR) | \
> - BIT(MDP_INTF2_INTR) | \
> - BIT(MDP_INTF3_INTR) | \
> - BIT(MDP_INTF4_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_4_0_sdm845.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_4_0_sdm845.h
> index 36ea1af10894..c4ccd742690a 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_4_0_sdm845.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_4_0_sdm845.h
> @@ -202,15 +202,6 @@ const struct dpu_mdss_cfg dpu_sdm845_cfg = {
> .vbif_count = ARRAY_SIZE(sdm845_vbif),
> .vbif = sdm845_vbif,
> .perf = &sdm845_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF0_INTR) | \
> - BIT(MDP_INTF1_INTR) | \
> - BIT(MDP_INTF2_INTR) | \
> - BIT(MDP_INTF3_INTR) | \
> - BIT(MDP_AD4_0_INTR) | \
> - BIT(MDP_AD4_1_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h
> index b5f751354267..fb7069d470ff 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h
> @@ -231,17 +231,6 @@ const struct dpu_mdss_cfg dpu_sm8150_cfg = {
> .vbif_count = ARRAY_SIZE(sdm845_vbif),
> .vbif = sdm845_vbif,
> .perf = &sm8150_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF0_INTR) | \
> - BIT(MDP_INTF1_INTR) | \
> - BIT(MDP_INTF1_TEAR_INTR) | \
> - BIT(MDP_INTF2_INTR) | \
> - BIT(MDP_INTF2_TEAR_INTR) | \
> - BIT(MDP_INTF3_INTR) | \
> - BIT(MDP_AD4_0_INTR) | \
> - BIT(MDP_AD4_1_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h
> index 8ed2b263c5ea..bd7422e597aa 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h
> @@ -237,19 +237,6 @@ const struct dpu_mdss_cfg dpu_sc8180x_cfg = {
> .vbif_count = ARRAY_SIZE(sdm845_vbif),
> .vbif = sdm845_vbif,
> .perf = &sc8180x_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF0_INTR) | \
> - BIT(MDP_INTF1_INTR) | \
> - BIT(MDP_INTF1_TEAR_INTR) | \
> - BIT(MDP_INTF2_INTR) | \
> - BIT(MDP_INTF2_TEAR_INTR) | \
> - BIT(MDP_INTF3_INTR) | \
> - BIT(MDP_INTF4_INTR) | \
> - BIT(MDP_INTF5_INTR) | \
> - BIT(MDP_AD4_0_INTR) | \
> - BIT(MDP_AD4_1_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h
> index daebd2170041..75a5c1b5a74a 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h
> @@ -239,16 +239,6 @@ const struct dpu_mdss_cfg dpu_sm8250_cfg = {
> .wb_count = ARRAY_SIZE(sm8250_wb),
> .wb = sm8250_wb,
> .perf = &sm8250_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF0_INTR) | \
> - BIT(MDP_INTF1_INTR) | \
> - BIT(MDP_INTF1_TEAR_INTR) | \
> - BIT(MDP_INTF2_INTR) | \
> - BIT(MDP_INTF2_TEAR_INTR) | \
> - BIT(MDP_INTF3_INTR) | \
> - BIT(MDP_INTF4_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h
> index 0b05da2592c0..84be02ce9c9c 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h
> @@ -149,12 +149,6 @@ const struct dpu_mdss_cfg dpu_sc7180_cfg = {
> .vbif_count = ARRAY_SIZE(sdm845_vbif),
> .vbif = sdm845_vbif,
> .perf = &sc7180_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF0_INTR) | \
> - BIT(MDP_INTF1_INTR) | \
> - BIT(MDP_INTF1_TEAR_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h
> index ba9de008519b..71d6e036a7a7 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h
> @@ -122,11 +122,6 @@ const struct dpu_mdss_cfg dpu_sm6115_cfg = {
> .vbif_count = ARRAY_SIZE(sdm845_vbif),
> .vbif = sdm845_vbif,
> .perf = &sm6115_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF1_INTR) | \
> - BIT(MDP_INTF1_TEAR_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h
> index 92ac348eea6b..d80b383d874d 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h
> @@ -112,11 +112,6 @@ const struct dpu_mdss_cfg dpu_qcm2290_cfg = {
> .vbif_count = ARRAY_SIZE(sdm845_vbif),
> .vbif = sdm845_vbif,
> .perf = &qcm2290_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF1_INTR) | \
> - BIT(MDP_INTF1_TEAR_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_0_sm8350.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_0_sm8350.h
> index 3c1b2c13398d..f9e5f252ae54 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_0_sm8350.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_0_sm8350.h
> @@ -222,15 +222,6 @@ const struct dpu_mdss_cfg dpu_sm8350_cfg = {
> .vbif_count = ARRAY_SIZE(sdm845_vbif),
> .vbif = sdm845_vbif,
> .perf = &sm8350_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF0_7xxx_INTR) | \
> - BIT(MDP_INTF1_7xxx_INTR) | \
> - BIT(MDP_INTF1_7xxx_TEAR_INTR) | \
> - BIT(MDP_INTF2_7xxx_INTR) | \
> - BIT(MDP_INTF2_7xxx_TEAR_INTR) | \
> - BIT(MDP_INTF3_7xxx_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h
> index 5d894cbb0a62..dede8cb2d784 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h
> @@ -162,13 +162,6 @@ const struct dpu_mdss_cfg dpu_sc7280_cfg = {
> .vbif_count = ARRAY_SIZE(sdm845_vbif),
> .vbif = sdm845_vbif,
> .perf = &sc7280_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF0_7xxx_INTR) | \
> - BIT(MDP_INTF1_7xxx_INTR) | \
> - BIT(MDP_INTF1_7xxx_TEAR_INTR) | \
> - BIT(MDP_INTF5_7xxx_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h
> index c3f1ae000a21..79ab2d015a44 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h
> @@ -224,20 +224,6 @@ const struct dpu_mdss_cfg dpu_sc8280xp_cfg = {
> .vbif_count = ARRAY_SIZE(sdm845_vbif),
> .vbif = sdm845_vbif,
> .perf = &sc8280xp_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF0_7xxx_INTR) | \
> - BIT(MDP_INTF1_7xxx_INTR) | \
> - BIT(MDP_INTF1_7xxx_TEAR_INTR) | \
> - BIT(MDP_INTF2_7xxx_INTR) | \
> - BIT(MDP_INTF2_7xxx_TEAR_INTR) | \
> - BIT(MDP_INTF3_7xxx_INTR) | \
> - BIT(MDP_INTF4_7xxx_INTR) | \
> - BIT(MDP_INTF5_7xxx_INTR) | \
> - BIT(MDP_INTF6_7xxx_INTR) | \
> - BIT(MDP_INTF7_7xxx_INTR) | \
> - BIT(MDP_INTF8_7xxx_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h
> index 86c2e68ebd2c..b0bc88136e86 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h
> @@ -230,15 +230,6 @@ const struct dpu_mdss_cfg dpu_sm8450_cfg = {
> .vbif_count = ARRAY_SIZE(sdm845_vbif),
> .vbif = sdm845_vbif,
> .perf = &sm8450_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF0_7xxx_INTR) | \
> - BIT(MDP_INTF1_7xxx_INTR) | \
> - BIT(MDP_INTF1_7xxx_TEAR_INTR) | \
> - BIT(MDP_INTF2_7xxx_INTR) | \
> - BIT(MDP_INTF2_7xxx_TEAR_INTR) | \
> - BIT(MDP_INTF3_7xxx_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_0_sm8550.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_0_sm8550.h
> index 85dc34458b88..afed62e44f90 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_0_sm8550.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_0_sm8550.h
> @@ -234,15 +234,6 @@ const struct dpu_mdss_cfg dpu_sm8550_cfg = {
> .vbif_count = ARRAY_SIZE(sdm845_vbif),
> .vbif = sdm845_vbif,
> .perf = &sm8550_perf_data,
> - .mdss_irqs = BIT(MDP_SSPP_TOP0_INTR) | \
> - BIT(MDP_SSPP_TOP0_INTR2) | \
> - BIT(MDP_SSPP_TOP0_HIST_INTR) | \
> - BIT(MDP_INTF0_7xxx_INTR) | \
> - BIT(MDP_INTF1_7xxx_INTR) | \
> - BIT(MDP_INTF1_7xxx_TEAR_INTR) | \
> - BIT(MDP_INTF2_7xxx_INTR) | \
> - BIT(MDP_INTF2_7xxx_TEAR_INTR) | \
> - BIT(MDP_INTF3_7xxx_INTR),
> };
>
> #endif
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> index 72530ebb0ae6..6d8c2fa8558a 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> @@ -777,7 +777,6 @@ struct dpu_perf_cfg {
> * @dma_formats Supported formats for dma pipe
> * @cursor_formats Supported formats for cursor pipe
> * @vig_formats Supported formats for vig pipe
> - * @mdss_irqs: Bitmap with the irqs supported by the target
> */
> struct dpu_mdss_cfg {
> const struct dpu_caps *caps;
> @@ -825,8 +824,6 @@ struct dpu_mdss_cfg {
> const struct dpu_format_extended *dma_formats;
> const struct dpu_format_extended *cursor_formats;
> const struct dpu_format_extended *vig_formats;
> -
> - unsigned long mdss_irqs;
> };
>
> extern const struct dpu_mdss_cfg dpu_msm8998_cfg;
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
next prev parent reply other threads:[~2023-05-22 14:37 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-22 0:42 [PATCH 0/6] drm/msm/dpu: rework interrupt handling Dmitry Baryshkov
2023-05-22 0:42 ` [PATCH 1/6] drm/msm/dpu: don't set DPU_INTF_TE globally Dmitry Baryshkov
2023-05-22 14:29 ` Neil Armstrong
2023-05-22 0:42 ` [PATCH 2/6] drm/msm/dpu: inline __intr_offset Dmitry Baryshkov
2023-05-22 14:30 ` Neil Armstrong
2023-05-22 0:42 ` [PATCH 3/6] drm/msm/dpu: split interrupt address arrays Dmitry Baryshkov
2023-05-22 14:36 ` Neil Armstrong
2023-05-22 14:58 ` Dmitry Baryshkov
2023-05-22 0:42 ` [PATCH 4/6] drm/msm/dpu: autodetect supported interrupts Dmitry Baryshkov
2023-05-22 0:42 ` [PATCH 5/6] drm/msm/dpu: drop now-unused mdss_irqs field from hw catalog Dmitry Baryshkov
2023-05-22 14:37 ` Neil Armstrong [this message]
2023-05-22 0:42 ` [PATCH 6/6] drm/msm/dpu: drop compatibility INTR defines Dmitry Baryshkov
2023-05-22 14:37 ` Neil Armstrong
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=b32f9e5b-7d98-dfc5-12f1-691fa0ee6ddc@linaro.org \
--to=neil.armstrong@linaro.org \
--cc=airlied@gmail.com \
--cc=andersson@kernel.org \
--cc=daniel@ffwll.ch \
--cc=dmitry.baryshkov@linaro.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=marijn.suijten@somainline.org \
--cc=quic_abhinavk@quicinc.com \
--cc=robdclark@gmail.com \
--cc=sean@poorly.run \
--cc=swboyd@chromium.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox