From: Jani Nikula <jani.nikula@intel.com>
To: "Murthy, Arun R" <arun.r.murthy@intel.com>,
"intel-gfx@lists.freedesktop.org"
<intel-gfx@lists.freedesktop.org>
Subject: Re: [Intel-gfx] [PATCH] drm/i915/backlight: split out backlight registers to a separate file
Date: Wed, 17 Aug 2022 14:34:46 +0300 [thread overview]
Message-ID: <87edxfp0h5.fsf@intel.com> (raw)
In-Reply-To: <DM6PR11MB317705D4A120988DE483E3F6BA6B9@DM6PR11MB3177.namprd11.prod.outlook.com>
On Tue, 16 Aug 2022, "Murthy, Arun R" <arun.r.murthy@intel.com> wrote:
>> -----Original Message-----
>> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Jani
>> Nikula
>> Sent: Monday, August 15, 2022 3:19 PM
>> To: intel-gfx@lists.freedesktop.org
>> Cc: Nikula, Jani <jani.nikula@intel.com>
>> Subject: [Intel-gfx] [PATCH] drm/i915/backlight: split out backlight registers to
>> a separate file
>>
>> Declutter i915_reg.h by splitting backlight registers to a separate file. Also
>> include the utility pin definitions, even though they are used for non-
>> backlight things too.
>>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>
> Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>
Thanks for the review, pushed to drm-intel-next.
BR,
Jani.
>
> Thanks and Regards,
> Arun R Murthy
> --------------------
>
>> drivers/gpu/drm/i915/display/icl_dsi.c | 1 +
>> .../gpu/drm/i915/display/intel_backlight.c | 1 +
>> .../drm/i915/display/intel_backlight_regs.h | 124 ++++++++++++++++++
>> .../drm/i915/display/intel_display_power.c | 1 +
>> .../i915/display/intel_display_power_well.c | 1 +
>> drivers/gpu/drm/i915/i915_reg.h | 112 ----------------
>> drivers/gpu/drm/i915/intel_gvt_mmio_table.c | 1 +
>> 7 files changed, 129 insertions(+), 112 deletions(-) create mode 100644
>> drivers/gpu/drm/i915/display/intel_backlight_regs.h
>>
>> diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c
>> b/drivers/gpu/drm/i915/display/icl_dsi.c
>> index 5dcfa7feffa9..c182253196f3 100644
>> --- a/drivers/gpu/drm/i915/display/icl_dsi.c
>> +++ b/drivers/gpu/drm/i915/display/icl_dsi.c
>> @@ -33,6 +33,7 @@
>> #include "icl_dsi_regs.h"
>> #include "intel_atomic.h"
>> #include "intel_backlight.h"
>> +#include "intel_backlight_regs.h"
>> #include "intel_combo_phy.h"
>> #include "intel_combo_phy_regs.h"
>> #include "intel_connector.h"
>> diff --git a/drivers/gpu/drm/i915/display/intel_backlight.c
>> b/drivers/gpu/drm/i915/display/intel_backlight.c
>> index 110fc98ec280..262b2fda37e5 100644
>> --- a/drivers/gpu/drm/i915/display/intel_backlight.c
>> +++ b/drivers/gpu/drm/i915/display/intel_backlight.c
>> @@ -9,6 +9,7 @@
>> #include <linux/string_helpers.h>
>>
>> #include "intel_backlight.h"
>> +#include "intel_backlight_regs.h"
>> #include "intel_connector.h"
>> #include "intel_de.h"
>> #include "intel_display_types.h"
>> diff --git a/drivers/gpu/drm/i915/display/intel_backlight_regs.h
>> b/drivers/gpu/drm/i915/display/intel_backlight_regs.h
>> new file mode 100644
>> index 000000000000..50c1210f6d5d
>> --- /dev/null
>> +++ b/drivers/gpu/drm/i915/display/intel_backlight_regs.h
>> @@ -0,0 +1,124 @@
>> +/* SPDX-License-Identifier: MIT */
>> +/*
>> + * Copyright © 2022 Intel Corporation
>> + */
>> +
>> +#ifndef __INTEL_BACKLIGHT_REGS_H__
>> +#define __INTEL_BACKLIGHT_REGS_H__
>> +
>> +#include "i915_reg_defs.h"
>> +
>> +#define _VLV_BLC_PWM_CTL2_A (DISPLAY_MMIO_BASE(dev_priv) +
>> 0x61250)
>> +#define _VLV_BLC_PWM_CTL2_B (DISPLAY_MMIO_BASE(dev_priv) +
>> 0x61350)
>> +#define VLV_BLC_PWM_CTL2(pipe) _MMIO_PIPE(pipe,
>> _VLV_BLC_PWM_CTL2_A, \
>> + _VLV_BLC_PWM_CTL2_B)
>> +
>> +#define _VLV_BLC_PWM_CTL_A (DISPLAY_MMIO_BASE(dev_priv) +
>> 0x61254)
>> +#define _VLV_BLC_PWM_CTL_B (DISPLAY_MMIO_BASE(dev_priv) +
>> 0x61354)
>> +#define VLV_BLC_PWM_CTL(pipe) _MMIO_PIPE(pipe,
>> _VLV_BLC_PWM_CTL_A, \
>> + _VLV_BLC_PWM_CTL_B)
>> +
>> +#define _VLV_BLC_HIST_CTL_A (DISPLAY_MMIO_BASE(dev_priv) + 0x61260)
>> +#define _VLV_BLC_HIST_CTL_B (DISPLAY_MMIO_BASE(dev_priv) + 0x61360)
>> +#define VLV_BLC_HIST_CTL(pipe) _MMIO_PIPE(pipe,
>> _VLV_BLC_HIST_CTL_A, \
>> + _VLV_BLC_HIST_CTL_B)
>> +
>> +/* Backlight control */
>> +#define BLC_PWM_CTL2 _MMIO(DISPLAY_MMIO_BASE(dev_priv) +
>> 0x61250) /* 965+ only */
>> +#define BLM_PWM_ENABLE (1 << 31)
>> +#define BLM_COMBINATION_MODE (1 << 30) /* gen4 only */
>> +#define BLM_PIPE_SELECT (1 << 29)
>> +#define BLM_PIPE_SELECT_IVB (3 << 29)
>> +#define BLM_PIPE_A (0 << 29)
>> +#define BLM_PIPE_B (1 << 29)
>> +#define BLM_PIPE_C (2 << 29) /* ivb + */
>> +#define BLM_TRANSCODER_A BLM_PIPE_A /* hsw */
>> +#define BLM_TRANSCODER_B BLM_PIPE_B
>> +#define BLM_TRANSCODER_C BLM_PIPE_C
>> +#define BLM_TRANSCODER_EDP (3 << 29)
>> +#define BLM_PIPE(pipe) ((pipe) << 29)
>> +#define BLM_POLARITY_I965 (1 << 28) /* gen4 only */
>> +#define BLM_PHASE_IN_INTERUPT_STATUS (1 << 26)
>> +#define BLM_PHASE_IN_ENABLE (1 << 25)
>> +#define BLM_PHASE_IN_INTERUPT_ENABL (1 << 24)
>> +#define BLM_PHASE_IN_TIME_BASE_SHIFT (16)
>> +#define BLM_PHASE_IN_TIME_BASE_MASK (0xff << 16)
>> +#define BLM_PHASE_IN_COUNT_SHIFT (8)
>> +#define BLM_PHASE_IN_COUNT_MASK (0xff << 8)
>> +#define BLM_PHASE_IN_INCR_SHIFT (0)
>> +#define BLM_PHASE_IN_INCR_MASK (0xff << 0)
>> +#define BLC_PWM_CTL _MMIO(DISPLAY_MMIO_BASE(dev_priv) +
>> 0x61254)
>> +/*
>> + * This is the most significant 15 bits of the number of backlight
>> +cycles in a
>> + * complete cycle of the modulated backlight control.
>> + *
>> + * The actual value is this field multiplied by two.
>> + */
>> +#define BACKLIGHT_MODULATION_FREQ_SHIFT (17)
>> +#define BACKLIGHT_MODULATION_FREQ_MASK (0x7fff << 17)
>> +#define BLM_LEGACY_MODE (1 << 16) /* gen2 only */
>> +/*
>> + * This is the number of cycles out of the backlight modulation cycle
>> +for which
>> + * the backlight is on.
>> + *
>> + * This field must be no greater than the number of cycles in the
>> +complete
>> + * backlight modulation cycle.
>> + */
>> +#define BACKLIGHT_DUTY_CYCLE_SHIFT (0)
>> +#define BACKLIGHT_DUTY_CYCLE_MASK (0xffff)
>> +#define BACKLIGHT_DUTY_CYCLE_MASK_PNV (0xfffe)
>> +#define BLM_POLARITY_PNV (1 << 0) /* pnv only */
>> +
>> +#define BLC_HIST_CTL _MMIO(DISPLAY_MMIO_BASE(dev_priv) + 0x61260)
>> +#define BLM_HISTOGRAM_ENABLE (1 << 31)
>> +
>> +/* New registers for PCH-split platforms. Safe where new bits show up,
>> +the
>> + * register layout machtes with gen4 BLC_PWM_CTL[12]. */
>> +#define BLC_PWM_CPU_CTL2 _MMIO(0x48250)
>> +#define BLC_PWM_CPU_CTL _MMIO(0x48254)
>> +
>> +#define HSW_BLC_PWM2_CTL _MMIO(0x48350)
>> +
>> +/* PCH CTL1 is totally different, all but the below bits are reserved.
>> +CTL2 is
>> + * like the normal CTL from gen4 and earlier. Hooray for confusing naming.
>> */
>> +#define BLC_PWM_PCH_CTL1 _MMIO(0xc8250)
>> +#define BLM_PCH_PWM_ENABLE (1 << 31)
>> +#define BLM_PCH_OVERRIDE_ENABLE (1 << 30)
>> +#define BLM_PCH_POLARITY (1 << 29)
>> +#define BLC_PWM_PCH_CTL2 _MMIO(0xc8254)
>> +
>> +/* BXT backlight register definition. */
>> +#define _BXT_BLC_PWM_CTL1 0xC8250
>> +#define BXT_BLC_PWM_ENABLE (1 << 31)
>> +#define BXT_BLC_PWM_POLARITY (1 << 29)
>> +#define _BXT_BLC_PWM_FREQ1 0xC8254
>> +#define _BXT_BLC_PWM_DUTY1 0xC8258
>> +
>> +#define _BXT_BLC_PWM_CTL2 0xC8350
>> +#define _BXT_BLC_PWM_FREQ2 0xC8354
>> +#define _BXT_BLC_PWM_DUTY2 0xC8358
>> +
>> +#define BXT_BLC_PWM_CTL(controller) _MMIO_PIPE(controller,
>> \
>> + _BXT_BLC_PWM_CTL1,
>> _BXT_BLC_PWM_CTL2)
>> +#define BXT_BLC_PWM_FREQ(controller) _MMIO_PIPE(controller, \
>> + _BXT_BLC_PWM_FREQ1,
>> _BXT_BLC_PWM_FREQ2)
>> +#define BXT_BLC_PWM_DUTY(controller) _MMIO_PIPE(controller, \
>> + _BXT_BLC_PWM_DUTY1,
>> _BXT_BLC_PWM_DUTY2)
>> +
>> +/* Utility pin */
>> +#define UTIL_PIN_CTL _MMIO(0x48400)
>> +#define UTIL_PIN_ENABLE (1 << 31)
>> +#define UTIL_PIN_PIPE_MASK (3 << 29)
>> +#define UTIL_PIN_PIPE(x) ((x) << 29)
>> +#define UTIL_PIN_MODE_MASK (0xf << 24)
>> +#define UTIL_PIN_MODE_DATA (0 << 24)
>> +#define UTIL_PIN_MODE_PWM (1 << 24)
>> +#define UTIL_PIN_MODE_VBLANK (4 << 24)
>> +#define UTIL_PIN_MODE_VSYNC (5 << 24)
>> +#define UTIL_PIN_MODE_EYE_LEVEL (8 << 24)
>> +#define UTIL_PIN_OUTPUT_DATA (1 << 23)
>> +#define UTIL_PIN_POLARITY (1 << 22)
>> +#define UTIL_PIN_DIRECTION_INPUT (1 << 19)
>> +#define UTIL_PIN_INPUT_DATA (1 << 16)
>> +
>> +#endif /* __INTEL_BACKLIGHT_REGS_H__ */
>> diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c
>> b/drivers/gpu/drm/i915/display/intel_display_power.c
>> index 3f84af6beff3..1d8f2935ed98 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display_power.c
>> +++ b/drivers/gpu/drm/i915/display/intel_display_power.c
>> @@ -7,6 +7,7 @@
>>
>> #include "i915_drv.h"
>> #include "i915_irq.h"
>> +#include "intel_backlight_regs.h"
>> #include "intel_cdclk.h"
>> #include "intel_combo_phy.h"
>> #include "intel_de.h"
>> diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c
>> b/drivers/gpu/drm/i915/display/intel_display_power_well.c
>> index 91cfd5890f46..7044016d4d98 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
>> +++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
>> @@ -5,6 +5,7 @@
>>
>> #include "i915_drv.h"
>> #include "i915_irq.h"
>> +#include "intel_backlight_regs.h"
>> #include "intel_combo_phy.h"
>> #include "intel_combo_phy_regs.h"
>> #include "intel_crt.h"
>> diff --git a/drivers/gpu/drm/i915/i915_reg.h
>> b/drivers/gpu/drm/i915/i915_reg.h index ad2c441aceca..50d7bfd541ad
>> 100644
>> --- a/drivers/gpu/drm/i915/i915_reg.h
>> +++ b/drivers/gpu/drm/i915/i915_reg.h
>> @@ -2925,118 +2925,6 @@
>>
>> #define PFIT_AUTO_RATIOS _MMIO(DISPLAY_MMIO_BASE(dev_priv) +
>> 0x61238)
>>
>> -#define _VLV_BLC_PWM_CTL2_A (DISPLAY_MMIO_BASE(dev_priv) +
>> 0x61250) -#define _VLV_BLC_PWM_CTL2_B (DISPLAY_MMIO_BASE(dev_priv)
>> + 0x61350) -#define VLV_BLC_PWM_CTL2(pipe) _MMIO_PIPE(pipe,
>> _VLV_BLC_PWM_CTL2_A, \
>> - _VLV_BLC_PWM_CTL2_B)
>> -
>> -#define _VLV_BLC_PWM_CTL_A (DISPLAY_MMIO_BASE(dev_priv) +
>> 0x61254) -#define _VLV_BLC_PWM_CTL_B (DISPLAY_MMIO_BASE(dev_priv)
>> + 0x61354) -#define VLV_BLC_PWM_CTL(pipe) _MMIO_PIPE(pipe,
>> _VLV_BLC_PWM_CTL_A, \
>> - _VLV_BLC_PWM_CTL_B)
>> -
>> -#define _VLV_BLC_HIST_CTL_A (DISPLAY_MMIO_BASE(dev_priv) + 0x61260)
>> -#define _VLV_BLC_HIST_CTL_B (DISPLAY_MMIO_BASE(dev_priv) + 0x61360)
>> -#define VLV_BLC_HIST_CTL(pipe) _MMIO_PIPE(pipe,
>> _VLV_BLC_HIST_CTL_A, \
>> - _VLV_BLC_HIST_CTL_B)
>> -
>> -/* Backlight control */
>> -#define BLC_PWM_CTL2 _MMIO(DISPLAY_MMIO_BASE(dev_priv) +
>> 0x61250) /* 965+ only */
>> -#define BLM_PWM_ENABLE (1 << 31)
>> -#define BLM_COMBINATION_MODE (1 << 30) /* gen4 only */
>> -#define BLM_PIPE_SELECT (1 << 29)
>> -#define BLM_PIPE_SELECT_IVB (3 << 29)
>> -#define BLM_PIPE_A (0 << 29)
>> -#define BLM_PIPE_B (1 << 29)
>> -#define BLM_PIPE_C (2 << 29) /* ivb + */
>> -#define BLM_TRANSCODER_A BLM_PIPE_A /* hsw */
>> -#define BLM_TRANSCODER_B BLM_PIPE_B
>> -#define BLM_TRANSCODER_C BLM_PIPE_C
>> -#define BLM_TRANSCODER_EDP (3 << 29)
>> -#define BLM_PIPE(pipe) ((pipe) << 29)
>> -#define BLM_POLARITY_I965 (1 << 28) /* gen4 only */
>> -#define BLM_PHASE_IN_INTERUPT_STATUS (1 << 26)
>> -#define BLM_PHASE_IN_ENABLE (1 << 25)
>> -#define BLM_PHASE_IN_INTERUPT_ENABL (1 << 24)
>> -#define BLM_PHASE_IN_TIME_BASE_SHIFT (16)
>> -#define BLM_PHASE_IN_TIME_BASE_MASK (0xff << 16)
>> -#define BLM_PHASE_IN_COUNT_SHIFT (8)
>> -#define BLM_PHASE_IN_COUNT_MASK (0xff << 8)
>> -#define BLM_PHASE_IN_INCR_SHIFT (0)
>> -#define BLM_PHASE_IN_INCR_MASK (0xff << 0)
>> -#define BLC_PWM_CTL _MMIO(DISPLAY_MMIO_BASE(dev_priv) +
>> 0x61254)
>> -/*
>> - * This is the most significant 15 bits of the number of backlight cycles in a
>> - * complete cycle of the modulated backlight control.
>> - *
>> - * The actual value is this field multiplied by two.
>> - */
>> -#define BACKLIGHT_MODULATION_FREQ_SHIFT (17)
>> -#define BACKLIGHT_MODULATION_FREQ_MASK (0x7fff << 17)
>> -#define BLM_LEGACY_MODE (1 << 16) /* gen2 only */
>> -/*
>> - * This is the number of cycles out of the backlight modulation cycle for
>> which
>> - * the backlight is on.
>> - *
>> - * This field must be no greater than the number of cycles in the complete
>> - * backlight modulation cycle.
>> - */
>> -#define BACKLIGHT_DUTY_CYCLE_SHIFT (0)
>> -#define BACKLIGHT_DUTY_CYCLE_MASK (0xffff)
>> -#define BACKLIGHT_DUTY_CYCLE_MASK_PNV (0xfffe)
>> -#define BLM_POLARITY_PNV (1 << 0) /* pnv only */
>> -
>> -#define BLC_HIST_CTL _MMIO(DISPLAY_MMIO_BASE(dev_priv) + 0x61260)
>> -#define BLM_HISTOGRAM_ENABLE (1 << 31)
>> -
>> -/* New registers for PCH-split platforms. Safe where new bits show up, the
>> - * register layout machtes with gen4 BLC_PWM_CTL[12]. */
>> -#define BLC_PWM_CPU_CTL2 _MMIO(0x48250)
>> -#define BLC_PWM_CPU_CTL _MMIO(0x48254)
>> -
>> -#define HSW_BLC_PWM2_CTL _MMIO(0x48350)
>> -
>> -/* PCH CTL1 is totally different, all but the below bits are reserved. CTL2 is
>> - * like the normal CTL from gen4 and earlier. Hooray for confusing naming.
>> */
>> -#define BLC_PWM_PCH_CTL1 _MMIO(0xc8250)
>> -#define BLM_PCH_PWM_ENABLE (1 << 31)
>> -#define BLM_PCH_OVERRIDE_ENABLE (1 << 30)
>> -#define BLM_PCH_POLARITY (1 << 29)
>> -#define BLC_PWM_PCH_CTL2 _MMIO(0xc8254)
>> -
>> -#define UTIL_PIN_CTL _MMIO(0x48400)
>> -#define UTIL_PIN_ENABLE (1 << 31)
>> -#define UTIL_PIN_PIPE_MASK (3 << 29)
>> -#define UTIL_PIN_PIPE(x) ((x) << 29)
>> -#define UTIL_PIN_MODE_MASK (0xf << 24)
>> -#define UTIL_PIN_MODE_DATA (0 << 24)
>> -#define UTIL_PIN_MODE_PWM (1 << 24)
>> -#define UTIL_PIN_MODE_VBLANK (4 << 24)
>> -#define UTIL_PIN_MODE_VSYNC (5 << 24)
>> -#define UTIL_PIN_MODE_EYE_LEVEL (8 << 24)
>> -#define UTIL_PIN_OUTPUT_DATA (1 << 23)
>> -#define UTIL_PIN_POLARITY (1 << 22)
>> -#define UTIL_PIN_DIRECTION_INPUT (1 << 19)
>> -#define UTIL_PIN_INPUT_DATA (1 << 16)
>> -
>> -/* BXT backlight register definition. */
>> -#define _BXT_BLC_PWM_CTL1 0xC8250
>> -#define BXT_BLC_PWM_ENABLE (1 << 31)
>> -#define BXT_BLC_PWM_POLARITY (1 << 29)
>> -#define _BXT_BLC_PWM_FREQ1 0xC8254
>> -#define _BXT_BLC_PWM_DUTY1 0xC8258
>> -
>> -#define _BXT_BLC_PWM_CTL2 0xC8350
>> -#define _BXT_BLC_PWM_FREQ2 0xC8354
>> -#define _BXT_BLC_PWM_DUTY2 0xC8358
>> -
>> -#define BXT_BLC_PWM_CTL(controller) _MMIO_PIPE(controller,
>> \
>> - _BXT_BLC_PWM_CTL1,
>> _BXT_BLC_PWM_CTL2)
>> -#define BXT_BLC_PWM_FREQ(controller) _MMIO_PIPE(controller, \
>> - _BXT_BLC_PWM_FREQ1,
>> _BXT_BLC_PWM_FREQ2)
>> -#define BXT_BLC_PWM_DUTY(controller) _MMIO_PIPE(controller, \
>> - _BXT_BLC_PWM_DUTY1,
>> _BXT_BLC_PWM_DUTY2)
>> -
>> #define PCH_GTC_CTL _MMIO(0xe7000)
>> #define PCH_GTC_ENABLE (1 << 31)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_gvt_mmio_table.c
>> b/drivers/gpu/drm/i915/intel_gvt_mmio_table.c
>> index 157e166672d7..e015bc91a26f 100644
>> --- a/drivers/gpu/drm/i915/intel_gvt_mmio_table.c
>> +++ b/drivers/gpu/drm/i915/intel_gvt_mmio_table.c
>> @@ -4,6 +4,7 @@
>> */
>>
>> #include "display/intel_audio_regs.h"
>> +#include "display/intel_backlight_regs.h"
>> #include "display/intel_dmc_regs.h"
>> #include "display/vlv_dsi_pll_regs.h"
>> #include "gt/intel_gt_regs.h"
>> --
>> 2.34.1
>
--
Jani Nikula, Intel Open Source Graphics Center
prev parent reply other threads:[~2022-08-17 11:35 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-15 9:48 [Intel-gfx] [PATCH] drm/i915/backlight: split out backlight registers to a separate file Jani Nikula
2022-08-15 10:14 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for " Patchwork
2022-08-15 10:33 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-08-15 15:48 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2022-08-16 4:18 ` [Intel-gfx] [PATCH] " Murthy, Arun R
2022-08-17 11:34 ` Jani Nikula [this message]
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=87edxfp0h5.fsf@intel.com \
--to=jani.nikula@intel.com \
--cc=arun.r.murthy@intel.com \
--cc=intel-gfx@lists.freedesktop.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.