* [PATCH v6 0/5] add different OF board fixups
@ 2022-05-03 9:12 Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 1/5] common: add $global.serial_number with device tree fixup Oleksij Rempel
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Oleksij Rempel @ 2022-05-03 9:12 UTC (permalink / raw)
To: barebox; +Cc: Oleksij Rempel
changes v6:
- remove MACHINE_FIXUP Kconfig
- use barebox_get_serial_number instead of getenv
- use of_device_is_compatible() instead of of_machine_is_compatible()
and remove warning if compatible is already registered.
changes v5:
- remove SERIAL_NUMBER_FIXUP Kconfig
- s/of_fixup_machine_compatible/of_prepend_machine_compatible
- remove bogus comment
- check if the passed device tree already is compatible to @compat
changes v4:
- s/code info device/code into device/
changes v3:
- rename global.of_machine_compatible to global.of.kernel.add_machine_compatible
changes v2:
- protonic: use only allowed chars for generated compatible
- protonic: make use of of_get_machine_compatible() to get board name
- of_fixup_machine_compatible: make curcompat optional
- add $global.of_machine_compatible
Add optional fixups for board serial-number and machine compatible.
Ahmad Fatoum (1):
common: add $global.serial_number with device tree fixup
Oleksij Rempel (4):
ARM: boards: protonic-imx6: make use of barebox_set_serial_number()
of: add generic of_prepend_machine_compatible()
ARM: boards: skov-imx6: make use of of_prepend_machine_compatible()
ARM: boards: protonic-imx6: add HW revision specific machine
compatible
arch/arm/boards/protonic-imx6/board.c | 42 ++++++++++++---------------
arch/arm/boards/skov-imx6/board.c | 40 ++-----------------------
common/misc.c | 39 +++++++++++++++++++++++++
common/oftree.c | 41 ++++++++++++++++++++++++++
include/common.h | 6 ++++
include/of.h | 6 ++++
6 files changed, 114 insertions(+), 60 deletions(-)
--
2.30.2
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v6 1/5] common: add $global.serial_number with device tree fixup
2022-05-03 9:12 [PATCH v6 0/5] add different OF board fixups Oleksij Rempel
@ 2022-05-03 9:12 ` Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 2/5] ARM: boards: protonic-imx6: make use of barebox_set_serial_number() Oleksij Rempel
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Oleksij Rempel @ 2022-05-03 9:12 UTC (permalink / raw)
To: barebox; +Cc: Ahmad Fatoum, Oleksij Rempel
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
This new variable can be set by boards from C code or from the
environment to change the serial number fixed up into the kernel device
tree.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
common/misc.c | 16 ++++++++++++++++
common/oftree.c | 5 +++++
include/common.h | 3 +++
3 files changed, 24 insertions(+)
diff --git a/common/misc.c b/common/misc.c
index 226635f0d4..3b3bc05bfd 100644
--- a/common/misc.c
+++ b/common/misc.c
@@ -149,6 +149,7 @@ EXPORT_SYMBOL(barebox_get_model);
BAREBOX_MAGICVAR(global.model, "Product name of this hardware");
static char *hostname;
+static char *serial_number;
/*
* The hostname is supposed to be the shortname of a board. It should
@@ -179,6 +180,21 @@ EXPORT_SYMBOL(barebox_set_hostname_no_overwrite);
BAREBOX_MAGICVAR(global.hostname,
"shortname of the board. Also used as hostname for DHCP requests");
+void barebox_set_serial_number(const char *__serial_number)
+{
+ globalvar_add_simple_string("serial_number", &serial_number);
+
+ free(serial_number);
+ serial_number = xstrdup(__serial_number);
+}
+
+const char *barebox_get_serial_number(void)
+{
+ return serial_number;
+}
+
+BAREBOX_MAGICVAR(global.serial_number, "Board serial number");
+
void __noreturn panic(const char *fmt, ...)
{
va_list args;
diff --git a/common/oftree.c b/common/oftree.c
index bce0ff09d6..51f825c3f3 100644
--- a/common/oftree.c
+++ b/common/oftree.c
@@ -206,6 +206,11 @@ static int of_fixup_bootargs(struct device_node *root, void *unused)
int err;
int instance = reset_source_get_instance();
struct device_d *dev;
+ const char *serialno;
+
+ serialno = barebox_get_serial_number();
+ if (serialno)
+ of_property_write_string(root, "serial-number", serialno);
node = of_create_node(root, "/chosen");
if (!node)
diff --git a/include/common.h b/include/common.h
index 4167d4676e..967502a7ab 100644
--- a/include/common.h
+++ b/include/common.h
@@ -126,4 +126,7 @@ const char *barebox_get_hostname(void);
void barebox_set_hostname(const char *);
void barebox_set_hostname_no_overwrite(const char *);
+const char *barebox_get_serial_number(void);
+void barebox_set_serial_number(const char *);
+
#endif /* __COMMON_H_ */
--
2.30.2
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v6 2/5] ARM: boards: protonic-imx6: make use of barebox_set_serial_number()
2022-05-03 9:12 [PATCH v6 0/5] add different OF board fixups Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 1/5] common: add $global.serial_number with device tree fixup Oleksij Rempel
@ 2022-05-03 9:12 ` Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 3/5] of: add generic of_prepend_machine_compatible() Oleksij Rempel
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Oleksij Rempel @ 2022-05-03 9:12 UTC (permalink / raw)
To: barebox; +Cc: Oleksij Rempel
Replace board specific serial-number fixup with common
barebox_set_serial_number().
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
arch/arm/boards/protonic-imx6/board.c | 20 +-------------------
1 file changed, 1 insertion(+), 19 deletions(-)
diff --git a/arch/arm/boards/protonic-imx6/board.c b/arch/arm/boards/protonic-imx6/board.c
index 52cf39917a..0fadd148b4 100644
--- a/arch/arm/boards/protonic-imx6/board.c
+++ b/arch/arm/boards/protonic-imx6/board.c
@@ -196,30 +196,12 @@ static int prt_imx6_set_mac(struct prt_imx6_priv *priv,
return 0;
}
-static int prt_of_fixup_serial(struct device_node *dstroot, void *arg)
-{
- struct device_node *srcroot = arg;
- const char *ser;
- int len;
-
- ser = of_get_property(srcroot, "serial-number", &len);
- return of_set_property(dstroot, "serial-number", ser, len, 1);
-}
-
-static void prt_oftree_fixup_serial(const char *serial)
-{
- struct device_node *root = of_get_root_node();
-
- of_set_property(root, "serial-number", serial, strlen(serial) + 1, 1);
- of_register_fixup(prt_of_fixup_serial, root);
-}
-
static int prt_imx6_set_serial(struct prt_imx6_priv *priv,
struct prti6q_rfid_contents *rfid)
{
rfid->serial[9] = 0; /* Failsafe */
dev_info(priv->dev, "Serial number: %s\n", rfid->serial);
- prt_oftree_fixup_serial(rfid->serial);
+ barebox_set_serial_number(rfid->serial);
return 0;
}
--
2.30.2
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v6 3/5] of: add generic of_prepend_machine_compatible()
2022-05-03 9:12 [PATCH v6 0/5] add different OF board fixups Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 1/5] common: add $global.serial_number with device tree fixup Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 2/5] ARM: boards: protonic-imx6: make use of barebox_set_serial_number() Oleksij Rempel
@ 2022-05-03 9:12 ` Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 4/5] ARM: boards: skov-imx6: make use of of_prepend_machine_compatible() Oleksij Rempel
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Oleksij Rempel @ 2022-05-03 9:12 UTC (permalink / raw)
To: barebox; +Cc: Oleksij Rempel
Add generic function to extend/fixup machine compatible.
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
common/misc.c | 23 +++++++++++++++++++++++
common/oftree.c | 36 ++++++++++++++++++++++++++++++++++++
include/common.h | 3 +++
include/of.h | 6 ++++++
4 files changed, 68 insertions(+)
diff --git a/common/misc.c b/common/misc.c
index 3b3bc05bfd..0f6de3e9e5 100644
--- a/common/misc.c
+++ b/common/misc.c
@@ -150,6 +150,7 @@ BAREBOX_MAGICVAR(global.model, "Product name of this hardware");
static char *hostname;
static char *serial_number;
+static char *of_machine_compatible;
/*
* The hostname is supposed to be the shortname of a board. It should
@@ -195,6 +196,28 @@ const char *barebox_get_serial_number(void)
BAREBOX_MAGICVAR(global.serial_number, "Board serial number");
+void barebox_set_of_machine_compatible(const char *__compatible)
+{
+ free(of_machine_compatible);
+ of_machine_compatible = xstrdup(__compatible);
+}
+
+const char *barebox_get_of_machine_compatible(void)
+{
+ return of_machine_compatible;
+}
+
+static int of_kernel_init(void)
+{
+ globalvar_add_simple_string("of.kernel.add_machine_compatible",
+ &of_machine_compatible);
+
+ return 0;
+}
+device_initcall(of_kernel_init);
+
+BAREBOX_MAGICVAR(global.of.kernel.add_machine_compatible, "Additional machine/board compatible");
+
void __noreturn panic(const char *fmt, ...)
{
va_list args;
diff --git a/common/oftree.c b/common/oftree.c
index 51f825c3f3..91b3fcc9fa 100644
--- a/common/oftree.c
+++ b/common/oftree.c
@@ -207,11 +207,16 @@ static int of_fixup_bootargs(struct device_node *root, void *unused)
int instance = reset_source_get_instance();
struct device_d *dev;
const char *serialno;
+ const char *compat;
serialno = barebox_get_serial_number();
if (serialno)
of_property_write_string(root, "serial-number", serialno);
+ compat = barebox_get_of_machine_compatible();
+ if (compat)
+ of_prepend_machine_compatible(root, compat);
+
node = of_create_node(root, "/chosen");
if (!node)
return -ENOMEM;
@@ -483,3 +488,34 @@ int of_autoenable_i2c_by_component(char *path)
return ret;
}
+
+int of_prepend_machine_compatible(struct device_node *root, const char *compat)
+{
+ int cclen = 0, clen = strlen(compat) + 1;
+ const char *curcompat;
+ void *buf;
+
+ if (!root) {
+ root = of_get_root_node();
+ if (!root)
+ return -ENODEV;
+ }
+
+ if (of_device_is_compatible(root, compat))
+ return 0;
+
+ curcompat = of_get_property(root, "compatible", &cclen);
+
+ buf = xzalloc(cclen + clen);
+
+ memcpy(buf, compat, clen);
+
+ if (curcompat)
+ memcpy(buf + clen, curcompat, cclen);
+
+ of_set_property(root, "compatible", buf, cclen + clen, true);
+
+ free(buf);
+
+ return 0;
+}
diff --git a/include/common.h b/include/common.h
index 967502a7ab..bd12035688 100644
--- a/include/common.h
+++ b/include/common.h
@@ -129,4 +129,7 @@ void barebox_set_hostname_no_overwrite(const char *);
const char *barebox_get_serial_number(void);
void barebox_set_serial_number(const char *);
+void barebox_set_of_machine_compatible(const char *);
+const char *barebox_get_of_machine_compatible(void);
+
#endif /* __COMMON_H_ */
diff --git a/include/of.h b/include/of.h
index cf9950e9b3..3a8e32f69c 100644
--- a/include/of.h
+++ b/include/of.h
@@ -316,6 +316,7 @@ struct device_node *of_find_node_by_path_or_alias(struct device_node *root,
const char *str);
int of_autoenable_device_by_path(char *path);
int of_autoenable_i2c_by_component(char *path);
+int of_prepend_machine_compatible(struct device_node *root, const char *compat);
#else
static inline bool of_node_name_eq(const struct device_node *np, const char *name)
{
@@ -834,6 +835,11 @@ static inline int of_autoenable_i2c_by_component(char *path)
return -ENODEV;
}
+static int of_prepend_machine_compatible(struct device_node *root,
+ const char *compat)
+{
+ return -ENODEV;
+}
#endif
--
2.30.2
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v6 4/5] ARM: boards: skov-imx6: make use of of_prepend_machine_compatible()
2022-05-03 9:12 [PATCH v6 0/5] add different OF board fixups Oleksij Rempel
` (2 preceding siblings ...)
2022-05-03 9:12 ` [PATCH v6 3/5] of: add generic of_prepend_machine_compatible() Oleksij Rempel
@ 2022-05-03 9:12 ` Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 5/5] ARM: boards: protonic-imx6: add HW revision specific machine compatible Oleksij Rempel
2022-05-05 7:15 ` [PATCH v6 0/5] add different OF board fixups Sascha Hauer
5 siblings, 0 replies; 7+ messages in thread
From: Oleksij Rempel @ 2022-05-03 9:12 UTC (permalink / raw)
To: barebox; +Cc: Oleksij Rempel
Replace board specific fixup_machine_compatible() with generic
of_prepend_machine_compatible()
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
arch/arm/boards/skov-imx6/board.c | 40 +++----------------------------
1 file changed, 3 insertions(+), 37 deletions(-)
diff --git a/arch/arm/boards/skov-imx6/board.c b/arch/arm/boards/skov-imx6/board.c
index 2702bc1de9..bceb215a01 100644
--- a/arch/arm/boards/skov-imx6/board.c
+++ b/arch/arm/boards/skov-imx6/board.c
@@ -312,55 +312,21 @@ static int skov_board_no = -1;
static bool skov_have_switch = true;
static const char *no_switch_suffix = "-noswitch";
-static void fixup_machine_compatible(const char *compat,
- struct device_node *root)
-{
- int cclen = 0, clen = strlen(compat) + 1;
- const char *curcompat;
- void *buf;
-
- if (!root) {
- root = of_get_root_node();
- if (!root)
- return;
- }
-
- curcompat = of_get_property(root, "compatible", &cclen);
-
- buf = xzalloc(cclen + clen);
-
- memcpy(buf, compat, clen);
- memcpy(buf + clen, curcompat, cclen);
-
- /*
- * Prepend the compatible from board entry to the machine compatible.
- * Used to match bootspec entries against it.
- */
- of_set_property(root, "compatible", buf, cclen + clen, true);
-
- free(buf);
-}
-
static void fixup_noswitch_machine_compatible(struct device_node *root)
{
const char *compat = imx6_variants[skov_board_no].dts_compatible;
const char *generic = "skov,imx6";
- size_t size, size_generic;
char *buf;
- size = strlen(compat) + strlen(no_switch_suffix) + 1;
- size_generic = strlen(generic) + strlen(no_switch_suffix) + 1;
- size = max(size, size_generic);
-
/* add generic compatible, so systemd&co can make right decisions */
buf = xasprintf("%s%s", generic, no_switch_suffix);
- fixup_machine_compatible(buf, root);
+ of_prepend_machine_compatible(root, buf);
/* add specific compatible as fallback, in case this board has new
* challenges.
*/
buf = xasprintf("%s%s", compat, no_switch_suffix);
- fixup_machine_compatible(buf, root);
+ of_prepend_machine_compatible(root, buf);
free(buf);
}
@@ -648,7 +614,7 @@ static int skov_imx6_probe(struct device_d *dev)
globalvar_add_simple("board.dts", variant->dts_compatible);
globalvar_add_simple("board.display", variant->display ?: NULL);
- fixup_machine_compatible(variant->dts_compatible, NULL);
+ of_prepend_machine_compatible(NULL, variant->dts_compatible);
skov_init_board(variant);
--
2.30.2
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v6 5/5] ARM: boards: protonic-imx6: add HW revision specific machine compatible
2022-05-03 9:12 [PATCH v6 0/5] add different OF board fixups Oleksij Rempel
` (3 preceding siblings ...)
2022-05-03 9:12 ` [PATCH v6 4/5] ARM: boards: skov-imx6: make use of of_prepend_machine_compatible() Oleksij Rempel
@ 2022-05-03 9:12 ` Oleksij Rempel
2022-05-05 7:15 ` [PATCH v6 0/5] add different OF board fixups Sascha Hauer
5 siblings, 0 replies; 7+ messages in thread
From: Oleksij Rempel @ 2022-05-03 9:12 UTC (permalink / raw)
To: barebox; +Cc: Oleksij Rempel
Currently we use generic/pinned machine compatible for different HW
revisions. With this patch we extend this compatible string with HW
revision specific.
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
arch/arm/boards/protonic-imx6/board.c | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/arch/arm/boards/protonic-imx6/board.c b/arch/arm/boards/protonic-imx6/board.c
index 0fadd148b4..cdbb8debe6 100644
--- a/arch/arm/boards/protonic-imx6/board.c
+++ b/arch/arm/boards/protonic-imx6/board.c
@@ -126,6 +126,22 @@ static const struct gpio prt_imx6_kvg_gpios[] = {
},
};
+static int prt_of_fixup_hwrev(struct prt_imx6_priv *priv)
+{
+ const char *compat;
+ char *buf;
+
+ compat = of_device_get_match_compatible(priv->dev);
+
+ buf = xasprintf("%s-m%u-r%u", compat, priv->hw_id,
+ priv->hw_rev);
+ barebox_set_of_machine_compatible(buf);
+
+ free(buf);
+
+ return 0;
+}
+
static int prt_imx6_read_rfid(struct prt_imx6_priv *priv, void *buf,
size_t size)
{
@@ -797,7 +813,6 @@ exit_get_dcfg:
static int prt_imx6_probe(struct device_d *dev)
{
struct prt_imx6_priv *priv;
- const char *name, *ptr;
struct param_d *p;
int ret;
@@ -806,9 +821,7 @@ static int prt_imx6_probe(struct device_d *dev)
return -ENOMEM;
priv->dev = dev;
- name = of_device_get_match_compatible(priv->dev);
- ptr = strchr(name, ',');
- priv->name = ptr ? ptr + 1 : name;
+ priv->name = of_get_machine_compatible();
pr_info("Detected machine type: %s\n", priv->name);
@@ -818,6 +831,7 @@ static int prt_imx6_probe(struct device_d *dev)
pr_info(" HW type: %d\n", priv->hw_id);
pr_info(" HW revision: %d\n", priv->hw_rev);
+ prt_of_fixup_hwrev(priv);
ret = prt_imx6_get_dcfg(priv);
if (ret)
--
2.30.2
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v6 0/5] add different OF board fixups
2022-05-03 9:12 [PATCH v6 0/5] add different OF board fixups Oleksij Rempel
` (4 preceding siblings ...)
2022-05-03 9:12 ` [PATCH v6 5/5] ARM: boards: protonic-imx6: add HW revision specific machine compatible Oleksij Rempel
@ 2022-05-05 7:15 ` Sascha Hauer
5 siblings, 0 replies; 7+ messages in thread
From: Sascha Hauer @ 2022-05-05 7:15 UTC (permalink / raw)
To: Oleksij Rempel; +Cc: barebox
On Tue, May 03, 2022 at 11:12:15AM +0200, Oleksij Rempel wrote:
> changes v6:
> - remove MACHINE_FIXUP Kconfig
> - use barebox_get_serial_number instead of getenv
> - use of_device_is_compatible() instead of of_machine_is_compatible()
> and remove warning if compatible is already registered.
>
> changes v5:
> - remove SERIAL_NUMBER_FIXUP Kconfig
> - s/of_fixup_machine_compatible/of_prepend_machine_compatible
> - remove bogus comment
> - check if the passed device tree already is compatible to @compat
>
> changes v4:
> - s/code info device/code into device/
>
> changes v3:
> - rename global.of_machine_compatible to global.of.kernel.add_machine_compatible
>
> changes v2:
> - protonic: use only allowed chars for generated compatible
> - protonic: make use of of_get_machine_compatible() to get board name
> - of_fixup_machine_compatible: make curcompat optional
> - add $global.of_machine_compatible
>
> Add optional fixups for board serial-number and machine compatible.
>
> Ahmad Fatoum (1):
> common: add $global.serial_number with device tree fixup
>
> Oleksij Rempel (4):
> ARM: boards: protonic-imx6: make use of barebox_set_serial_number()
> of: add generic of_prepend_machine_compatible()
> ARM: boards: skov-imx6: make use of of_prepend_machine_compatible()
> ARM: boards: protonic-imx6: add HW revision specific machine
> compatible
>
> arch/arm/boards/protonic-imx6/board.c | 42 ++++++++++++---------------
> arch/arm/boards/skov-imx6/board.c | 40 ++-----------------------
> common/misc.c | 39 +++++++++++++++++++++++++
> common/oftree.c | 41 ++++++++++++++++++++++++++
> include/common.h | 6 ++++
> include/of.h | 6 ++++
> 6 files changed, 114 insertions(+), 60 deletions(-)
Applied, thanks
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-05-05 7:16 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-03 9:12 [PATCH v6 0/5] add different OF board fixups Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 1/5] common: add $global.serial_number with device tree fixup Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 2/5] ARM: boards: protonic-imx6: make use of barebox_set_serial_number() Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 3/5] of: add generic of_prepend_machine_compatible() Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 4/5] ARM: boards: skov-imx6: make use of of_prepend_machine_compatible() Oleksij Rempel
2022-05-03 9:12 ` [PATCH v6 5/5] ARM: boards: protonic-imx6: add HW revision specific machine compatible Oleksij Rempel
2022-05-05 7:15 ` [PATCH v6 0/5] add different OF board fixups Sascha Hauer
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.