From: "G, Manjunath Kondaiah" <manjugk@ti.com>
To: "Cousson, Benoit" <b-cousson@ti.com>
Cc: "G, Manjunath Kondaiah" <manjugk@ti.com>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"tony@atomide.com" <tony@atomide.com>,
"khilman@deeprootsystems.com" <khilman@deeprootsystems.com>,
"Shilimkar, Santosh" <santosh.shilimkar@ti.com>,
"paul@pwsan.com" <paul@pwsan.com>
Subject: Re: [PATCH v2 6/9] OMAP4: hwmod data: add system DMA
Date: Mon, 20 Dec 2010 18:42:21 +0530 [thread overview]
Message-ID: <20101220131221.GB15602@GLPP-machine> (raw)
In-Reply-To: <4D0F3E43.6090207@ti.com>
On Mon, Dec 20, 2010 at 12:30:11PM +0100, Cousson, Benoit wrote:
> On 12/17/2010 4:39 PM, G, Manjunath Kondaiah wrote:
> >From: Benoit Cousson<b-cousson@ti.com>
> >
> >Add OMAP4 DMA hwmod data
> >
> >Signed-off-by: Benoit Cousson<b-cousson@ti.com>
> >Signed-off-by: G, Manjunath Kondaiah<manjugk@ti.com>
>
> It will be good to explicitly list the changes you did compared to
> the original generated version. Even if these are some minor
> changes.
I can add if it is informative.
> I thought it was the original patch and it appears it is not the case :-(
Indeed, it is original patch. Only device attributes and no idlest flags
are added.
>
> The general minor commestic comment is you should try to keep the
> original order of the structures. That does not changes anything,
> but that will keep the file in sync with the generated one.
The order might have slightly changed when I am rebasing every time. I
can restore the order from full hwmod db if you want maintain
consistency.
>
> >Tested-by: Kevin Hilman<khilman@deeprootsystems.com>
> >Acked-by: Kevin Hilman<khilman@deeprootsystems.com>
> >---
> > arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 101 ++++++++++++++++++++++++++++
> > 1 files changed, 101 insertions(+), 0 deletions(-)
> >
> >diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> >index d258936..50c00d6 100644
> >--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> >+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> >@@ -23,6 +23,7 @@
> > #include<plat/omap_hwmod.h>
> > #include<plat/cpu.h>
> > #include<plat/gpio.h>
> >+#include<plat/dma.h>
> >
> > #include "omap_hwmod_common_data.h"
> >
> >@@ -36,6 +37,7 @@
> > #define OMAP44XX_DMA_REQ_START 1
> >
> > /* Backward references (IPs with Bus Master capability) */
> >+static struct omap_hwmod omap44xx_dma_system_hwmod;
> > static struct omap_hwmod omap44xx_dmm_hwmod;
> > static struct omap_hwmod omap44xx_emif_fw_hwmod;
> > static struct omap_hwmod omap44xx_l3_instr_hwmod;
> >@@ -216,6 +218,14 @@ static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_2 = {
> > .user = OCP_USER_MPU | OCP_USER_SDMA,
> > };
> >
> >+/* dma_system -> l3_main_2 */
> >+static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = {
> >+ .master =&omap44xx_dma_system_hwmod,
> >+ .slave =&omap44xx_l3_main_2_hwmod,
> >+ .clk = "l3_div_ck",
> >+ .user = OCP_USER_MPU | OCP_USER_SDMA,
> >+};
> >+
> > /* l4_cfg -> l3_main_2 */
> > static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
> > .master =&omap44xx_l4_cfg_hwmod,
> >@@ -227,6 +237,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
> > /* l3_main_2 slave ports */
> > static struct omap_hwmod_ocp_if *omap44xx_l3_main_2_slaves[] = {
> > &omap44xx_l3_main_1__l3_main_2,
> >+ &omap44xx_dma_system__l3_main_2,
> > &omap44xx_l4_cfg__l3_main_2,
> > };
> >
> >@@ -1376,6 +1387,93 @@ static struct omap_hwmod omap44xx_gpio6_hwmod = {
> > .slaves_cnt = ARRAY_SIZE(omap44xx_gpio6_slaves),
> > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
> > };
> >+
> >+/*
> >+ * 'dma' class
> >+ * dma controller for data exchange between memory to memory (i.e. internal or
> >+ * external memory) and gp peripherals to memory or memory to gp peripherals
> >+ */
> >+
> >+static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
> >+ .rev_offs = 0x0000,
> >+ .sysc_offs = 0x002c,
> >+ .syss_offs = 0x0028,
> >+ .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
> >+ SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
> >+ SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
>
> A new flag was introduce in 2.6.37 to handle properly the softreset
> (SYSS_HAS_RESET_STATUS). You should use it otherwise the reset might
> not work properly. The generated hwmod data was updated accordingly
> at that time (git://gitorious.org/omap-pm/linux.git
> hwmods-omap4-full)
ok.
>
> Here are the proper data:
>
> +static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x002c,
> + .syss_offs = 0x0028,
> + .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
> + SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
> + SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
> + SYSS_HAS_RESET_STATUS),
>
> >+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
> >+ MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
> >+ .sysc_fields =&omap_hwmod_sysc_type1,
> >+};
> >+
> >+static struct omap_hwmod_class omap44xx_dma_hwmod_class = {
> >+ .name = "dma",
> >+ .sysc =&omap44xx_dma_sysc,
> >+};
> >+
> >+/* dma attributes */
> >+static struct omap_dma_dev_attr dma_dev_attr = {
> >+ .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
> >+ IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
> >+ .lch_count = 32,
> >+};
> >+
> >+/* dma_system */
> >+static struct omap_hwmod_irq_info omap44xx_dma_system_irqs[] = {
> >+ { .name = "0", .irq = 12 + OMAP44XX_IRQ_GIC_START },
> >+ { .name = "1", .irq = 13 + OMAP44XX_IRQ_GIC_START },
> >+ { .name = "2", .irq = 14 + OMAP44XX_IRQ_GIC_START },
> >+ { .name = "3", .irq = 15 + OMAP44XX_IRQ_GIC_START },
> >+};
> >+
> >+static struct omap_hwmod_addr_space omap44xx_dma_system_addrs[] = {
> >+ {
> >+ .pa_start = 0x4a056000,
> >+ .pa_end = 0x4a0560ff,
> >+ .flags = ADDR_TYPE_RT
> >+ },
> >+};
> >+
> >+/* dma_system master ports */
> >+static struct omap_hwmod_ocp_if *omap44xx_dma_system_masters[] = {
> >+ &omap44xx_dma_system__l3_main_2,
> >+};
> >+
> >+/* l4_cfg -> dma_system */
> >+static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dma_system = {
> >+ .master =&omap44xx_l4_cfg_hwmod,
> >+ .slave =&omap44xx_dma_system_hwmod,
> >+ .clk = "l4_div_ck",
> >+ .addr = omap44xx_dma_system_addrs,
> >+ .addr_cnt = ARRAY_SIZE(omap44xx_dma_system_addrs),
> >+ .user = OCP_USER_MPU | OCP_USER_SDMA,
> >+};
> >+
> >+/* dma_system slave ports */
> >+static struct omap_hwmod_ocp_if *omap44xx_dma_system_slaves[] = {
> >+ &omap44xx_l4_cfg__dma_system,
> >+};
> >+
> >+static struct omap_hwmod omap44xx_dma_system_hwmod = {
> >+ .name = "dma_system",
> >+ .class =&omap44xx_dma_hwmod_class,
> >+ .mpu_irqs = omap44xx_dma_system_irqs,
> >+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dma_system_irqs),
> >+ .main_clk = "l3_div_ck",
> >+ .prcm = {
> >+ .omap4 = {
> >+ .clkctrl_reg = OMAP4430_CM_SDMA_SDMA_CLKCTRL,
> >+ },
> >+ },
> >+ .slaves = omap44xx_dma_system_slaves,
> >+ .slaves_cnt = ARRAY_SIZE(omap44xx_dma_system_slaves),
> >+ .masters = omap44xx_dma_system_masters,
> >+ .masters_cnt = ARRAY_SIZE(omap44xx_dma_system_masters),
> >+ .dev_attr =&dma_dev_attr,
> >+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
> >+ .flags = HWMOD_NO_IDLEST,
>
> That one is wrong! It was the case on OMAP 2& 3, but we do have an
> IDLEST on OMAP4.
> TRM vM page 958: Table 3-1210. CM_SDMA_SDMA_CLKCTRL.IDLEST
>
> It might not work, but that's another story. Why did you add that?
When we were discussing omap3 idlest issue, I was under impression that,
it is applicable to omap4 also. If that is not the case, I will remove
this entry.
-Manjunath
WARNING: multiple messages have this Message-ID (diff)
From: manjugk@ti.com (G, Manjunath Kondaiah)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 6/9] OMAP4: hwmod data: add system DMA
Date: Mon, 20 Dec 2010 18:42:21 +0530 [thread overview]
Message-ID: <20101220131221.GB15602@GLPP-machine> (raw)
In-Reply-To: <4D0F3E43.6090207@ti.com>
On Mon, Dec 20, 2010 at 12:30:11PM +0100, Cousson, Benoit wrote:
> On 12/17/2010 4:39 PM, G, Manjunath Kondaiah wrote:
> >From: Benoit Cousson<b-cousson@ti.com>
> >
> >Add OMAP4 DMA hwmod data
> >
> >Signed-off-by: Benoit Cousson<b-cousson@ti.com>
> >Signed-off-by: G, Manjunath Kondaiah<manjugk@ti.com>
>
> It will be good to explicitly list the changes you did compared to
> the original generated version. Even if these are some minor
> changes.
I can add if it is informative.
> I thought it was the original patch and it appears it is not the case :-(
Indeed, it is original patch. Only device attributes and no idlest flags
are added.
>
> The general minor commestic comment is you should try to keep the
> original order of the structures. That does not changes anything,
> but that will keep the file in sync with the generated one.
The order might have slightly changed when I am rebasing every time. I
can restore the order from full hwmod db if you want maintain
consistency.
>
> >Tested-by: Kevin Hilman<khilman@deeprootsystems.com>
> >Acked-by: Kevin Hilman<khilman@deeprootsystems.com>
> >---
> > arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 101 ++++++++++++++++++++++++++++
> > 1 files changed, 101 insertions(+), 0 deletions(-)
> >
> >diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> >index d258936..50c00d6 100644
> >--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> >+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> >@@ -23,6 +23,7 @@
> > #include<plat/omap_hwmod.h>
> > #include<plat/cpu.h>
> > #include<plat/gpio.h>
> >+#include<plat/dma.h>
> >
> > #include "omap_hwmod_common_data.h"
> >
> >@@ -36,6 +37,7 @@
> > #define OMAP44XX_DMA_REQ_START 1
> >
> > /* Backward references (IPs with Bus Master capability) */
> >+static struct omap_hwmod omap44xx_dma_system_hwmod;
> > static struct omap_hwmod omap44xx_dmm_hwmod;
> > static struct omap_hwmod omap44xx_emif_fw_hwmod;
> > static struct omap_hwmod omap44xx_l3_instr_hwmod;
> >@@ -216,6 +218,14 @@ static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_2 = {
> > .user = OCP_USER_MPU | OCP_USER_SDMA,
> > };
> >
> >+/* dma_system -> l3_main_2 */
> >+static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = {
> >+ .master =&omap44xx_dma_system_hwmod,
> >+ .slave =&omap44xx_l3_main_2_hwmod,
> >+ .clk = "l3_div_ck",
> >+ .user = OCP_USER_MPU | OCP_USER_SDMA,
> >+};
> >+
> > /* l4_cfg -> l3_main_2 */
> > static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
> > .master =&omap44xx_l4_cfg_hwmod,
> >@@ -227,6 +237,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
> > /* l3_main_2 slave ports */
> > static struct omap_hwmod_ocp_if *omap44xx_l3_main_2_slaves[] = {
> > &omap44xx_l3_main_1__l3_main_2,
> >+ &omap44xx_dma_system__l3_main_2,
> > &omap44xx_l4_cfg__l3_main_2,
> > };
> >
> >@@ -1376,6 +1387,93 @@ static struct omap_hwmod omap44xx_gpio6_hwmod = {
> > .slaves_cnt = ARRAY_SIZE(omap44xx_gpio6_slaves),
> > .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
> > };
> >+
> >+/*
> >+ * 'dma' class
> >+ * dma controller for data exchange between memory to memory (i.e. internal or
> >+ * external memory) and gp peripherals to memory or memory to gp peripherals
> >+ */
> >+
> >+static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
> >+ .rev_offs = 0x0000,
> >+ .sysc_offs = 0x002c,
> >+ .syss_offs = 0x0028,
> >+ .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
> >+ SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
> >+ SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
>
> A new flag was introduce in 2.6.37 to handle properly the softreset
> (SYSS_HAS_RESET_STATUS). You should use it otherwise the reset might
> not work properly. The generated hwmod data was updated accordingly
> at that time (git://gitorious.org/omap-pm/linux.git
> hwmods-omap4-full)
ok.
>
> Here are the proper data:
>
> +static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x002c,
> + .syss_offs = 0x0028,
> + .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
> + SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
> + SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
> + SYSS_HAS_RESET_STATUS),
>
> >+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
> >+ MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
> >+ .sysc_fields =&omap_hwmod_sysc_type1,
> >+};
> >+
> >+static struct omap_hwmod_class omap44xx_dma_hwmod_class = {
> >+ .name = "dma",
> >+ .sysc =&omap44xx_dma_sysc,
> >+};
> >+
> >+/* dma attributes */
> >+static struct omap_dma_dev_attr dma_dev_attr = {
> >+ .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
> >+ IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
> >+ .lch_count = 32,
> >+};
> >+
> >+/* dma_system */
> >+static struct omap_hwmod_irq_info omap44xx_dma_system_irqs[] = {
> >+ { .name = "0", .irq = 12 + OMAP44XX_IRQ_GIC_START },
> >+ { .name = "1", .irq = 13 + OMAP44XX_IRQ_GIC_START },
> >+ { .name = "2", .irq = 14 + OMAP44XX_IRQ_GIC_START },
> >+ { .name = "3", .irq = 15 + OMAP44XX_IRQ_GIC_START },
> >+};
> >+
> >+static struct omap_hwmod_addr_space omap44xx_dma_system_addrs[] = {
> >+ {
> >+ .pa_start = 0x4a056000,
> >+ .pa_end = 0x4a0560ff,
> >+ .flags = ADDR_TYPE_RT
> >+ },
> >+};
> >+
> >+/* dma_system master ports */
> >+static struct omap_hwmod_ocp_if *omap44xx_dma_system_masters[] = {
> >+ &omap44xx_dma_system__l3_main_2,
> >+};
> >+
> >+/* l4_cfg -> dma_system */
> >+static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dma_system = {
> >+ .master =&omap44xx_l4_cfg_hwmod,
> >+ .slave =&omap44xx_dma_system_hwmod,
> >+ .clk = "l4_div_ck",
> >+ .addr = omap44xx_dma_system_addrs,
> >+ .addr_cnt = ARRAY_SIZE(omap44xx_dma_system_addrs),
> >+ .user = OCP_USER_MPU | OCP_USER_SDMA,
> >+};
> >+
> >+/* dma_system slave ports */
> >+static struct omap_hwmod_ocp_if *omap44xx_dma_system_slaves[] = {
> >+ &omap44xx_l4_cfg__dma_system,
> >+};
> >+
> >+static struct omap_hwmod omap44xx_dma_system_hwmod = {
> >+ .name = "dma_system",
> >+ .class =&omap44xx_dma_hwmod_class,
> >+ .mpu_irqs = omap44xx_dma_system_irqs,
> >+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dma_system_irqs),
> >+ .main_clk = "l3_div_ck",
> >+ .prcm = {
> >+ .omap4 = {
> >+ .clkctrl_reg = OMAP4430_CM_SDMA_SDMA_CLKCTRL,
> >+ },
> >+ },
> >+ .slaves = omap44xx_dma_system_slaves,
> >+ .slaves_cnt = ARRAY_SIZE(omap44xx_dma_system_slaves),
> >+ .masters = omap44xx_dma_system_masters,
> >+ .masters_cnt = ARRAY_SIZE(omap44xx_dma_system_masters),
> >+ .dev_attr =&dma_dev_attr,
> >+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
> >+ .flags = HWMOD_NO_IDLEST,
>
> That one is wrong! It was the case on OMAP 2& 3, but we do have an
> IDLEST on OMAP4.
> TRM vM page 958: Table 3-1210. CM_SDMA_SDMA_CLKCTRL.IDLEST
>
> It might not work, but that's another story. Why did you add that?
When we were discussing omap3 idlest issue, I was under impression that,
it is applicable to omap4 also. If that is not the case, I will remove
this entry.
-Manjunath
next prev parent reply other threads:[~2010-12-20 13:10 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-17 15:39 [PATCH v2 0/9] OMAP: DMA: hwmod and DMA as platform device G, Manjunath Kondaiah
2010-12-17 15:39 ` [PATCH v2 1/9] OMAP: DMA: Replace read/write macros with functions G, Manjunath Kondaiah
2010-12-17 15:39 ` [PATCH v2 2/9] OMAP: DMA: Introduce errata handling feature G, Manjunath Kondaiah
2010-12-17 15:39 ` [PATCH v2 3/9] OMAP2420: hwmod data: add system DMA G, Manjunath Kondaiah
2010-12-18 6:55 ` G, Manjunath Kondaiah
2010-12-18 6:55 ` G, Manjunath Kondaiah
2010-12-18 9:23 ` Paul Walmsley
2010-12-18 9:23 ` Paul Walmsley
2010-12-18 9:03 ` Paul Walmsley
2010-12-18 9:03 ` Paul Walmsley
2010-12-19 3:18 ` G, Manjunath Kondaiah
2010-12-19 3:18 ` G, Manjunath Kondaiah
2010-12-17 15:39 ` [PATCH v2 4/9] OMAP2430: " G, Manjunath Kondaiah
2010-12-18 9:11 ` Paul Walmsley
2010-12-18 9:11 ` Paul Walmsley
2010-12-18 9:37 ` Russell King - ARM Linux
2010-12-18 9:37 ` Russell King - ARM Linux
2010-12-18 9:42 ` Paul Walmsley
2010-12-18 9:42 ` Paul Walmsley
2010-12-19 3:20 ` G, Manjunath Kondaiah
2010-12-19 3:20 ` G, Manjunath Kondaiah
2010-12-17 15:39 ` [PATCH v2 5/9] OMAP3: " G, Manjunath Kondaiah
2010-12-17 15:39 ` [PATCH v2 6/9] OMAP4: " G, Manjunath Kondaiah
2010-12-20 11:30 ` Cousson, Benoit
2010-12-20 11:30 ` Cousson, Benoit
2010-12-20 13:12 ` G, Manjunath Kondaiah [this message]
2010-12-20 13:12 ` G, Manjunath Kondaiah
2010-12-17 15:39 ` [PATCH v2 7/9] OMAP1: DMA: Implement in platform device model G, Manjunath Kondaiah
2010-12-17 15:39 ` [PATCH v2 8/9] OMAP2+: DMA: hwmod: Device registration G, Manjunath Kondaiah
2010-12-17 15:39 ` [PATCH v2 9/9] OMAP: DMA: Convert DMA library into platform driver G, Manjunath Kondaiah
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=20101220131221.GB15602@GLPP-machine \
--to=manjugk@ti.com \
--cc=b-cousson@ti.com \
--cc=khilman@deeprootsystems.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=paul@pwsan.com \
--cc=santosh.shilimkar@ti.com \
--cc=tony@atomide.com \
/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.