All of lore.kernel.org
 help / color / mirror / Atom feed
From: Viresh Kumar <viresh.kumar@linaro.org>
To: arm@kernel.org, olof@lixom.net, arnd@arndb.de
Cc: sr@denx.de, Viresh Kumar <viresh.kumar@linaro.org>,
	devicetree-discuss@lists.ozlabs.org, spear-devel@list.st.com,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH] fixup! ARM: SPEAr3xx: shirq: simplify and move the shared irq multiplexor to DT
Date: Mon, 12 Nov 2012 22:46:15 +0530	[thread overview]
Message-ID: <d9fab7cf89c07d00311f9b3dbf7c0987f813c71d.1352740385.git.viresh.kumar@linaro.org> (raw)
In-Reply-To: <71bbb1faf3cd048953dcf24ef9ce6d9dd37fe8e1.1352608333.git.viresh.kumar@linaro.org>

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---

Hi Arnd,

This is the fixup of the major issues you pointed out. Please go ahead
and apply this series. I will then move all this out of plat.

 arch/arm/mach-spear3xx/spear3xx.c        |  6 +--
 arch/arm/plat-spear/include/plat/shirq.h |  6 ++-
 arch/arm/plat-spear/shirq.c              | 70 ++++++++++++++------------------
 3 files changed, 39 insertions(+), 43 deletions(-)

diff --git a/arch/arm/mach-spear3xx/spear3xx.c b/arch/arm/mach-spear3xx/spear3xx.c
index 781aec9..f1aaf5b 100644
--- a/arch/arm/mach-spear3xx/spear3xx.c
+++ b/arch/arm/mach-spear3xx/spear3xx.c
@@ -122,9 +122,9 @@ struct sys_timer spear3xx_timer = {
 
 static const struct of_device_id vic_of_match[] __initconst = {
 	{ .compatible = "arm,pl190-vic", .data = vic_of_init, },
-	{ .compatible = "st,spear300-shirq", .data = spear3xx_shirq_of_init, },
-	{ .compatible = "st,spear310-shirq", .data = spear3xx_shirq_of_init, },
-	{ .compatible = "st,spear320-shirq", .data = spear3xx_shirq_of_init, },
+	{ .compatible = "st,spear300-shirq", .data = spear300_shirq_of_init, },
+	{ .compatible = "st,spear310-shirq", .data = spear310_shirq_of_init, },
+	{ .compatible = "st,spear320-shirq", .data = spear320_shirq_of_init, },
 	{ /* Sentinel */ }
 };
 
diff --git a/arch/arm/plat-spear/include/plat/shirq.h b/arch/arm/plat-spear/include/plat/shirq.h
index 1215afe..c51b355 100644
--- a/arch/arm/plat-spear/include/plat/shirq.h
+++ b/arch/arm/plat-spear/include/plat/shirq.h
@@ -56,7 +56,11 @@ struct spear_shirq {
 	struct shirq_regs regs;
 };
 
-int __init spear3xx_shirq_of_init(struct device_node *np,
+int __init spear300_shirq_of_init(struct device_node *np,
+		struct device_node *parent);
+int __init spear310_shirq_of_init(struct device_node *np,
+		struct device_node *parent);
+int __init spear320_shirq_of_init(struct device_node *np,
 		struct device_node *parent);
 
 #endif /* __PLAT_SHIRQ_H */
diff --git a/arch/arm/plat-spear/shirq.c b/arch/arm/plat-spear/shirq.c
index 3912646..955c724 100644
--- a/arch/arm/plat-spear/shirq.c
+++ b/arch/arm/plat-spear/shirq.c
@@ -246,10 +246,17 @@ static void __init spear_shirq_register(struct spear_shirq *shirq)
 }
 
 static int __init shirq_init(struct spear_shirq **shirq_blocks, int block_nr,
-		void __iomem *base, struct device_node *np)
+		struct device_node *np)
 {
 	int i, irq_base, hwirq = 0, irq_nr = 0;
 	static struct irq_domain *shirq_domain;
+	void __iomem *base;
+
+	base = of_iomap(np, 0);
+	if (!base) {
+		pr_err("%s: failed to map shirq registers\n", __func__);
+		return -ENXIO;
+	}
 
 	for (i = 0; i < block_nr; i++)
 		irq_nr += shirq_blocks[i]->irq_nr;
@@ -257,15 +264,14 @@ static int __init shirq_init(struct spear_shirq **shirq_blocks, int block_nr,
 	irq_base = irq_alloc_descs(-1, 0, irq_nr, 0);
 	if (IS_ERR_VALUE(irq_base)) {
 		pr_err("%s: irq desc alloc failed\n", __func__);
-		return -ENXIO;
+		goto err_unmap;
 	}
 
 	shirq_domain = irq_domain_add_legacy(np, irq_nr, irq_base, 0,
 			&irq_domain_simple_ops, NULL);
 	if (WARN_ON(!shirq_domain)) {
 		pr_warn("%s: irq domain init failed\n", __func__);
-		irq_free_descs(irq_base, irq_nr);
-		return -ENXIO;
+		goto err_free_desc;
 	}
 
 	for (i = 0; i < block_nr; i++) {
@@ -279,45 +285,31 @@ static int __init shirq_init(struct spear_shirq **shirq_blocks, int block_nr,
 	}
 
 	return 0;
+
+err_free_desc:
+	irq_free_descs(irq_base, irq_nr);
+err_unmap:
+	iounmap(base);
+	return -ENXIO;
 }
 
-int __init spear3xx_shirq_of_init(struct device_node *np,
+int __init spear300_shirq_of_init(struct device_node *np,
 		struct device_node *parent)
 {
-	struct spear_shirq **shirq_blocks;
-	void __iomem *base;
-	int block_nr, ret;
-
-	base = of_iomap(np, 0);
-	if (!base) {
-		pr_err("%s: failed to map shirq registers\n", __func__);
-		return -ENXIO;
-	}
-
-	if (of_device_is_compatible(np, "st,spear300-shirq")) {
-		shirq_blocks = spear300_shirq_blocks;
-		block_nr = ARRAY_SIZE(spear300_shirq_blocks);
-	} else if (of_device_is_compatible(np, "st,spear310-shirq")) {
-		shirq_blocks = spear310_shirq_blocks;
-		block_nr = ARRAY_SIZE(spear310_shirq_blocks);
-	} else if (of_device_is_compatible(np, "st,spear320-shirq")) {
-		shirq_blocks = spear320_shirq_blocks;
-		block_nr = ARRAY_SIZE(spear320_shirq_blocks);
-	} else {
-		pr_err("%s: unknown platform\n", __func__);
-		ret = -EINVAL;
-		goto unmap;
-	}
-
-	ret = shirq_init(shirq_blocks, block_nr, base, np);
-	if (ret) {
-		pr_err("%s: shirq initialization failed\n", __func__);
-		goto unmap;
-	}
+	return shirq_init(spear300_shirq_blocks,
+			ARRAY_SIZE(spear300_shirq_blocks), np);
+}
 
-	return ret;
+int __init spear310_shirq_of_init(struct device_node *np,
+		struct device_node *parent)
+{
+	return shirq_init(spear310_shirq_blocks,
+			ARRAY_SIZE(spear310_shirq_blocks), np);
+}
 
-unmap:
-	iounmap(base);
-	return ret;
+int __init spear320_shirq_of_init(struct device_node *np,
+		struct device_node *parent)
+{
+	return shirq_init(spear320_shirq_blocks,
+			ARRAY_SIZE(spear320_shirq_blocks), np);
 }
-- 
1.7.12.rc2.18.g61b472e

WARNING: multiple messages have this Message-ID (diff)
From: viresh.kumar@linaro.org (Viresh Kumar)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] fixup! ARM: SPEAr3xx: shirq: simplify and move the shared irq multiplexor to DT
Date: Mon, 12 Nov 2012 22:46:15 +0530	[thread overview]
Message-ID: <d9fab7cf89c07d00311f9b3dbf7c0987f813c71d.1352740385.git.viresh.kumar@linaro.org> (raw)
In-Reply-To: <71bbb1faf3cd048953dcf24ef9ce6d9dd37fe8e1.1352608333.git.viresh.kumar@linaro.org>

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---

Hi Arnd,

This is the fixup of the major issues you pointed out. Please go ahead
and apply this series. I will then move all this out of plat.

 arch/arm/mach-spear3xx/spear3xx.c        |  6 +--
 arch/arm/plat-spear/include/plat/shirq.h |  6 ++-
 arch/arm/plat-spear/shirq.c              | 70 ++++++++++++++------------------
 3 files changed, 39 insertions(+), 43 deletions(-)

diff --git a/arch/arm/mach-spear3xx/spear3xx.c b/arch/arm/mach-spear3xx/spear3xx.c
index 781aec9..f1aaf5b 100644
--- a/arch/arm/mach-spear3xx/spear3xx.c
+++ b/arch/arm/mach-spear3xx/spear3xx.c
@@ -122,9 +122,9 @@ struct sys_timer spear3xx_timer = {
 
 static const struct of_device_id vic_of_match[] __initconst = {
 	{ .compatible = "arm,pl190-vic", .data = vic_of_init, },
-	{ .compatible = "st,spear300-shirq", .data = spear3xx_shirq_of_init, },
-	{ .compatible = "st,spear310-shirq", .data = spear3xx_shirq_of_init, },
-	{ .compatible = "st,spear320-shirq", .data = spear3xx_shirq_of_init, },
+	{ .compatible = "st,spear300-shirq", .data = spear300_shirq_of_init, },
+	{ .compatible = "st,spear310-shirq", .data = spear310_shirq_of_init, },
+	{ .compatible = "st,spear320-shirq", .data = spear320_shirq_of_init, },
 	{ /* Sentinel */ }
 };
 
diff --git a/arch/arm/plat-spear/include/plat/shirq.h b/arch/arm/plat-spear/include/plat/shirq.h
index 1215afe..c51b355 100644
--- a/arch/arm/plat-spear/include/plat/shirq.h
+++ b/arch/arm/plat-spear/include/plat/shirq.h
@@ -56,7 +56,11 @@ struct spear_shirq {
 	struct shirq_regs regs;
 };
 
-int __init spear3xx_shirq_of_init(struct device_node *np,
+int __init spear300_shirq_of_init(struct device_node *np,
+		struct device_node *parent);
+int __init spear310_shirq_of_init(struct device_node *np,
+		struct device_node *parent);
+int __init spear320_shirq_of_init(struct device_node *np,
 		struct device_node *parent);
 
 #endif /* __PLAT_SHIRQ_H */
diff --git a/arch/arm/plat-spear/shirq.c b/arch/arm/plat-spear/shirq.c
index 3912646..955c724 100644
--- a/arch/arm/plat-spear/shirq.c
+++ b/arch/arm/plat-spear/shirq.c
@@ -246,10 +246,17 @@ static void __init spear_shirq_register(struct spear_shirq *shirq)
 }
 
 static int __init shirq_init(struct spear_shirq **shirq_blocks, int block_nr,
-		void __iomem *base, struct device_node *np)
+		struct device_node *np)
 {
 	int i, irq_base, hwirq = 0, irq_nr = 0;
 	static struct irq_domain *shirq_domain;
+	void __iomem *base;
+
+	base = of_iomap(np, 0);
+	if (!base) {
+		pr_err("%s: failed to map shirq registers\n", __func__);
+		return -ENXIO;
+	}
 
 	for (i = 0; i < block_nr; i++)
 		irq_nr += shirq_blocks[i]->irq_nr;
@@ -257,15 +264,14 @@ static int __init shirq_init(struct spear_shirq **shirq_blocks, int block_nr,
 	irq_base = irq_alloc_descs(-1, 0, irq_nr, 0);
 	if (IS_ERR_VALUE(irq_base)) {
 		pr_err("%s: irq desc alloc failed\n", __func__);
-		return -ENXIO;
+		goto err_unmap;
 	}
 
 	shirq_domain = irq_domain_add_legacy(np, irq_nr, irq_base, 0,
 			&irq_domain_simple_ops, NULL);
 	if (WARN_ON(!shirq_domain)) {
 		pr_warn("%s: irq domain init failed\n", __func__);
-		irq_free_descs(irq_base, irq_nr);
-		return -ENXIO;
+		goto err_free_desc;
 	}
 
 	for (i = 0; i < block_nr; i++) {
@@ -279,45 +285,31 @@ static int __init shirq_init(struct spear_shirq **shirq_blocks, int block_nr,
 	}
 
 	return 0;
+
+err_free_desc:
+	irq_free_descs(irq_base, irq_nr);
+err_unmap:
+	iounmap(base);
+	return -ENXIO;
 }
 
-int __init spear3xx_shirq_of_init(struct device_node *np,
+int __init spear300_shirq_of_init(struct device_node *np,
 		struct device_node *parent)
 {
-	struct spear_shirq **shirq_blocks;
-	void __iomem *base;
-	int block_nr, ret;
-
-	base = of_iomap(np, 0);
-	if (!base) {
-		pr_err("%s: failed to map shirq registers\n", __func__);
-		return -ENXIO;
-	}
-
-	if (of_device_is_compatible(np, "st,spear300-shirq")) {
-		shirq_blocks = spear300_shirq_blocks;
-		block_nr = ARRAY_SIZE(spear300_shirq_blocks);
-	} else if (of_device_is_compatible(np, "st,spear310-shirq")) {
-		shirq_blocks = spear310_shirq_blocks;
-		block_nr = ARRAY_SIZE(spear310_shirq_blocks);
-	} else if (of_device_is_compatible(np, "st,spear320-shirq")) {
-		shirq_blocks = spear320_shirq_blocks;
-		block_nr = ARRAY_SIZE(spear320_shirq_blocks);
-	} else {
-		pr_err("%s: unknown platform\n", __func__);
-		ret = -EINVAL;
-		goto unmap;
-	}
-
-	ret = shirq_init(shirq_blocks, block_nr, base, np);
-	if (ret) {
-		pr_err("%s: shirq initialization failed\n", __func__);
-		goto unmap;
-	}
+	return shirq_init(spear300_shirq_blocks,
+			ARRAY_SIZE(spear300_shirq_blocks), np);
+}
 
-	return ret;
+int __init spear310_shirq_of_init(struct device_node *np,
+		struct device_node *parent)
+{
+	return shirq_init(spear310_shirq_blocks,
+			ARRAY_SIZE(spear310_shirq_blocks), np);
+}
 
-unmap:
-	iounmap(base);
-	return ret;
+int __init spear320_shirq_of_init(struct device_node *np,
+		struct device_node *parent)
+{
+	return shirq_init(spear320_shirq_blocks,
+			ARRAY_SIZE(spear320_shirq_blocks), np);
 }
-- 
1.7.12.rc2.18.g61b472e

  parent reply	other threads:[~2012-11-12 17:16 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-11  4:39 [PATCH 00/14] ARM: SPEAr: DT updates Viresh Kumar
2012-11-11  4:39 ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 01/14] pinctrl: SPEAr: add spi chipselect control driver Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
     [not found]   ` <4a92290e8a3b1a19c3a5e864edfa7badfc2af5d0.1352608333.git.viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2012-11-12 15:03     ` Arnd Bergmann
2012-11-12 15:03       ` Arnd Bergmann
2012-11-15 14:17     ` Linus Walleij
2012-11-15 14:17       ` Linus Walleij
     [not found]       ` <CACRpkdb9tSUUGQjWdHqRr5rUSyiPgWm2i3-QZq9VbWFY2EAQeQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-11-15 14:19         ` Viresh Kumar
2012-11-15 14:19           ` Viresh Kumar
     [not found]           ` <CAKohpomLRYAKJ=dNLVsjj1xf=G6xj4EcTpPmhSDvgBYUMXc1mA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-11-15 19:09             ` Linus Walleij
2012-11-15 19:09               ` Linus Walleij
2012-11-16  5:15     ` [PATCH 01/16] gpio: " Viresh Kumar
2012-11-16  5:15       ` Viresh Kumar
     [not found]       ` <3702a1036f8e714e6d18e4726569bbb1eadd65bf.1353042873.git.viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2012-11-16  8:19         ` Arnd Bergmann
2012-11-16  8:19           ` Arnd Bergmann
     [not found]           ` <201211160819.04343.arnd-r2nGTMty4D4@public.gmane.org>
2012-11-16  8:19             ` Viresh Kumar
2012-11-16  8:19               ` Viresh Kumar
2012-11-17 23:02         ` Linus Walleij
2012-11-17 23:02           ` Linus Walleij
2012-11-11  4:39 ` [PATCH 02/14] ARM: SPEAr13xx: DT: Add spics gpio controller nodes Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
     [not found]   ` <58a7d91cab20b924784fb5a09e16ca08e6f13318.1352608333.git.viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2012-11-13 14:08     ` Linus Walleij
2012-11-13 14:08       ` Linus Walleij
2012-11-13 14:34       ` Viresh Kumar
2012-11-13 14:34         ` Viresh Kumar
     [not found]         ` <CAKohpon=AVGZmR_cwUZ4=buw0kr3JVtXh51BtXteWkJ7E-f_bQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-11-15 14:06           ` Linus Walleij
2012-11-15 14:06             ` Linus Walleij
     [not found]             ` <CACRpkdaJ2kCYfSP=xCRQAG2wDnkMKX9fey+ByhDDiOS==u+XwA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-11-15 14:08               ` Viresh Kumar
2012-11-15 14:08                 ` Viresh Kumar
     [not found]                 ` <CAKohpok7-iBCoYk+aAXZPsOODyh6tp2nutC+6wYOot-bK3=wkg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-11-15 17:25                   ` Linus Walleij
2012-11-15 17:25                     ` Linus Walleij
2012-11-11  4:39 ` [PATCH 03/14] ARM: SPEAr: DT: Update pinctrl list Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 04/14] ARM: SPEAr: DT: Update partition info for MTD devices Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 05/14] ARM: SPEAr: DT: Fix existing DT support Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 06/14] ARM: SPEAr: DT: Modify DT bindings for STMMAC Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 07/14] ARM: SPEAr: DT: add uart state to fix warning Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 08/14] ARM: SPEAr: DT: Update device nodes Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
     [not found]   ` <b3925b105ee2c6fe828ef3b54928aeee02a801ae.1352608333.git.viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2012-11-26 11:25     ` Viresh Kumar
2012-11-26 11:25       ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 09/14] ARM: SPEAr1310: Move 1310 specific misc register into machine specific files Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 10/14] ARM: SPEAr13xx: Remove fields not required for ssp controller Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 11/14] ARM: SPEAr1310: Fix AUXDATA for compact flash controller Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 12/14] ARM: SPEAr3xx: shirq: simplify and move the shared irq multiplexor to DT Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
2012-11-12 15:09   ` Arnd Bergmann
2012-11-12 15:09     ` Arnd Bergmann
2012-11-12 16:37     ` viresh kumar
2012-11-12 16:37       ` viresh kumar
     [not found]       ` <CAOh2x=nJXVVjFmDFnTN_02PSG9hcDuXToRUzRMi5jwJqUFtgfw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-11-12 17:00         ` Arnd Bergmann
2012-11-12 17:00           ` Arnd Bergmann
2012-11-12 17:16   ` Viresh Kumar [this message]
2012-11-12 17:16     ` [PATCH] fixup! " Viresh Kumar
2012-11-12 17:35   ` [PATCH] ARM: SPEAr3xx: Shirq: Move shirq controller out of plat/ Viresh Kumar
2012-11-12 17:35     ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 13/14] ARM: SPEAr3xx: DT: add shirq node for interrupt multiplexor Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
2012-11-11  4:39 ` [PATCH 14/14] ARM: SPEAr320: DT: Add SPEAr 320 HMI board support Viresh Kumar
2012-11-11  4:39   ` Viresh Kumar
     [not found] ` <cover.1352608333.git.viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2012-11-12 15:21   ` [PATCH 00/14] ARM: SPEAr: DT updates Arnd Bergmann
2012-11-12 15:21     ` Arnd Bergmann
2012-11-12 16:39     ` viresh kumar
2012-11-12 16:39       ` viresh kumar
2012-11-12 17:18     ` Viresh Kumar
2012-11-12 17:18       ` Viresh Kumar
     [not found]       ` <CAKohpom0kMjuHx5jO-LTPKQhy_-r4khKi7UBPB_O-50K42FOeQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-11-21 20:24         ` Olof Johansson
2012-11-21 20:24           ` Olof Johansson
     [not found]           ` <20121121202405.GA15549-O5ziIzlqnXUVNXGz7ipsyg@public.gmane.org>
2012-11-22  3:19             ` Viresh Kumar
2012-11-22  3:19               ` Viresh Kumar
     [not found]               ` <CAKohpokMUTQja6tCz1RmKXFgu+X7MGFAi1+UWLgKhpViOuiMSA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-11-22  9:47                 ` Linus Walleij
2012-11-22  9:47                   ` Linus Walleij

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=d9fab7cf89c07d00311f9b3dbf7c0987f813c71d.1352740385.git.viresh.kumar@linaro.org \
    --to=viresh.kumar@linaro.org \
    --cc=arm@kernel.org \
    --cc=arnd@arndb.de \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=olof@lixom.net \
    --cc=spear-devel@list.st.com \
    --cc=sr@denx.de \
    /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.