linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/3] Enable LP2 CPUIDLE state on NVIDIA Tegra30
@ 2020-03-24 22:43 Dmitry Osipenko
  2020-03-24 22:43 ` [PATCH v1 1/3] ARM: tegra: Initialize r0 register for firmware wake-up Dmitry Osipenko
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Dmitry Osipenko @ 2020-03-24 22:43 UTC (permalink / raw)
  To: Thierry Reding, Jonathan Hunter, Peter De Schrijver,
	Rafael J. Wysocki, Daniel Lezcano, Michał Mirosław,
	Jasper Korten, David Heidelberg, Peter Geis
  Cc: linux-pm, linux-tegra, linux-kernel

Hello,

This series enables LP2 CPU idling state on Tegra30. Previously,
Michał Mirosław reported that this wasn't working on ASUS Transformer
device and we found that replicating the Transformer's downstream kernel
behavior (in regards to the firmware) helps. Later on Michał told that
LP2 works without the firmware changes using a different kernel version /
config, we don't know for sure what was the cause of the original problem.

This series makes the TF firmware changes that are known to work well
in regards to LP2 idling on all devices and then the LP2 idling state
is enabled.

Please review and apply, thanks in advance.

Dmitry Osipenko (3):
  ARM: tegra: Initialize r0 register for firmware wake-up
  firmware: trusted_foundations: Different way of L2 cache enabling
    after LP2 suspend
  cpuidle: tegra: Support CPU cluster power-down state on Tegra30

 arch/arm/mach-tegra/pm.c                     |  4 ++++
 arch/arm/mach-tegra/reset-handler.S          |  7 ++++++-
 drivers/cpuidle/cpuidle-tegra.c              |  1 -
 drivers/firmware/trusted_foundations.c       | 21 ++++++++++++++++++--
 include/linux/firmware/trusted_foundations.h |  1 +
 5 files changed, 30 insertions(+), 4 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v1 1/3] ARM: tegra: Initialize r0 register for firmware wake-up
  2020-03-24 22:43 [PATCH v1 0/3] Enable LP2 CPUIDLE state on NVIDIA Tegra30 Dmitry Osipenko
@ 2020-03-24 22:43 ` Dmitry Osipenko
  2020-05-06 16:34   ` Thierry Reding
  2020-03-24 22:43 ` [PATCH v1 2/3] firmware: trusted_foundations: Different way of L2 cache enabling after LP2 suspend Dmitry Osipenko
  2020-03-24 22:43 ` [PATCH v1 3/3] cpuidle: tegra: Support CPU cluster power-down state on Tegra30 Dmitry Osipenko
  2 siblings, 1 reply; 9+ messages in thread
From: Dmitry Osipenko @ 2020-03-24 22:43 UTC (permalink / raw)
  To: Thierry Reding, Jonathan Hunter, Peter De Schrijver,
	Rafael J. Wysocki, Daniel Lezcano, Michał Mirosław,
	Jasper Korten, David Heidelberg, Peter Geis
  Cc: linux-pm, linux-tegra, linux-kernel

Downstream kernel of ASUS TF300T sets r0 to #3. There is no explanation in
downstream code whether this is really needed and some of T30 downstream
kernels have and explicit comment telling that all arguments are ignored
by firmware. Let's take a safe side by replicating behavior of the TF300T
downstream kernel. This change works fine on Ouya and Nexus 7 devices.

Tested-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Tested-by: Jasper Korten <jja2000@gmail.com>
Tested-by: David Heidelberg <david@ixit.cz>
Tested-by: Peter Geis <pgwipeout@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 arch/arm/mach-tegra/reset-handler.S | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-tegra/reset-handler.S b/arch/arm/mach-tegra/reset-handler.S
index 53123ae4ac3b..06ca44b09381 100644
--- a/arch/arm/mach-tegra/reset-handler.S
+++ b/arch/arm/mach-tegra/reset-handler.S
@@ -98,7 +98,12 @@ ENTRY(tegra_resume_trusted_foundations)
 	reteq	lr
 
  .arch_extension sec
-	/* First call after suspend wakes firmware. No arguments required. */
+	/*
+	 * First call after suspend wakes firmware. No arguments required
+	 * for some firmware versions. Downstream kernel of ASUS TF300T uses
+	 * r0=3 for the wake-up notification.
+	 */
+	mov	r0, #3
 	smc	#0
 
 	b	cpu_resume
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v1 2/3] firmware: trusted_foundations: Different way of L2 cache enabling after LP2 suspend
  2020-03-24 22:43 [PATCH v1 0/3] Enable LP2 CPUIDLE state on NVIDIA Tegra30 Dmitry Osipenko
  2020-03-24 22:43 ` [PATCH v1 1/3] ARM: tegra: Initialize r0 register for firmware wake-up Dmitry Osipenko
@ 2020-03-24 22:43 ` Dmitry Osipenko
  2020-05-06 16:34   ` Thierry Reding
  2020-03-24 22:43 ` [PATCH v1 3/3] cpuidle: tegra: Support CPU cluster power-down state on Tegra30 Dmitry Osipenko
  2 siblings, 1 reply; 9+ messages in thread
From: Dmitry Osipenko @ 2020-03-24 22:43 UTC (permalink / raw)
  To: Thierry Reding, Jonathan Hunter, Peter De Schrijver,
	Rafael J. Wysocki, Daniel Lezcano, Michał Mirosław,
	Jasper Korten, David Heidelberg, Peter Geis
  Cc: linux-pm, linux-tegra, linux-kernel

ASUS TF300T device may not work properly if firmware is asked to fully
re-initialize L2 cache after resume from LP2 suspend. The downstream
kernel of TF300T uses different opcode to enable cache after resuming
from LP2, this opcode also works fine on Nexus 7 and Ouya devices.
Supposedly, this may be needed by an older firmware versions.

Reported-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Tested-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Tested-by: Jasper Korten <jja2000@gmail.com>
Tested-by: David Heidelberg <david@ixit.cz>
Tested-by: Peter Geis <pgwipeout@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 arch/arm/mach-tegra/pm.c                     |  4 ++++
 drivers/firmware/trusted_foundations.c       | 21 ++++++++++++++++++--
 include/linux/firmware/trusted_foundations.h |  1 +
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-tegra/pm.c b/arch/arm/mach-tegra/pm.c
index d1e1a61b12cf..6452ebf68d40 100644
--- a/arch/arm/mach-tegra/pm.c
+++ b/arch/arm/mach-tegra/pm.c
@@ -216,6 +216,8 @@ int tegra_pm_enter_lp2(void)
 	restore_cpu_complex();
 	cpu_cluster_pm_exit();
 
+	call_firmware_op(prepare_idle, TF_PM_MODE_NONE);
+
 	return err;
 }
 
@@ -391,6 +393,8 @@ static int tegra_suspend_enter(suspend_state_t state)
 
 	local_fiq_enable();
 
+	call_firmware_op(prepare_idle, TF_PM_MODE_NONE);
+
 	return 0;
 }
 
diff --git a/drivers/firmware/trusted_foundations.c b/drivers/firmware/trusted_foundations.c
index fc544e19b0a1..1389fa9418a7 100644
--- a/drivers/firmware/trusted_foundations.c
+++ b/drivers/firmware/trusted_foundations.c
@@ -19,6 +19,7 @@
 
 #define TF_CACHE_ENABLE		1
 #define TF_CACHE_DISABLE	2
+#define TF_CACHE_REENABLE	4
 
 #define TF_SET_CPU_BOOT_ADDR_SMC 0xfffff200
 
@@ -29,6 +30,7 @@
 #define TF_CPU_PM_S1		0xffffffe4
 #define TF_CPU_PM_S1_NOFLUSH_L2	0xffffffe7
 
+static unsigned long tf_idle_mode = TF_PM_MODE_NONE;
 static unsigned long cpu_boot_addr;
 
 static void tf_generic_smc(u32 type, u32 arg1, u32 arg2)
@@ -85,25 +87,40 @@ static int tf_prepare_idle(unsigned long mode)
 			       cpu_boot_addr);
 		break;
 
+	case TF_PM_MODE_NONE:
+		break;
+
 	default:
 		return -EINVAL;
 	}
 
+	tf_idle_mode = mode;
+
 	return 0;
 }
 
 #ifdef CONFIG_CACHE_L2X0
 static void tf_cache_write_sec(unsigned long val, unsigned int reg)
 {
-	u32 l2x0_way_mask = 0xff;
+	u32 enable_op, l2x0_way_mask = 0xff;
 
 	switch (reg) {
 	case L2X0_CTRL:
 		if (l2x0_saved_regs.aux_ctrl & L310_AUX_CTRL_ASSOCIATIVITY_16)
 			l2x0_way_mask = 0xffff;
 
+		switch (tf_idle_mode) {
+		case TF_PM_MODE_LP2:
+			enable_op = TF_CACHE_REENABLE;
+			break;
+
+		default:
+			enable_op = TF_CACHE_ENABLE;
+			break;
+		}
+
 		if (val == L2X0_CTRL_EN)
-			tf_generic_smc(TF_CACHE_MAINT, TF_CACHE_ENABLE,
+			tf_generic_smc(TF_CACHE_MAINT, enable_op,
 				       l2x0_saved_regs.aux_ctrl);
 		else
 			tf_generic_smc(TF_CACHE_MAINT, TF_CACHE_DISABLE,
diff --git a/include/linux/firmware/trusted_foundations.h b/include/linux/firmware/trusted_foundations.h
index 2549a2db56aa..be5984bda592 100644
--- a/include/linux/firmware/trusted_foundations.h
+++ b/include/linux/firmware/trusted_foundations.h
@@ -32,6 +32,7 @@
 #define TF_PM_MODE_LP1_NO_MC_CLK	2
 #define TF_PM_MODE_LP2			3
 #define TF_PM_MODE_LP2_NOFLUSH_L2	4
+#define TF_PM_MODE_NONE			5
 
 struct trusted_foundations_platform_data {
 	unsigned int version_major;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v1 3/3] cpuidle: tegra: Support CPU cluster power-down state on Tegra30
  2020-03-24 22:43 [PATCH v1 0/3] Enable LP2 CPUIDLE state on NVIDIA Tegra30 Dmitry Osipenko
  2020-03-24 22:43 ` [PATCH v1 1/3] ARM: tegra: Initialize r0 register for firmware wake-up Dmitry Osipenko
  2020-03-24 22:43 ` [PATCH v1 2/3] firmware: trusted_foundations: Different way of L2 cache enabling after LP2 suspend Dmitry Osipenko
@ 2020-03-24 22:43 ` Dmitry Osipenko
  2020-05-06 16:33   ` Thierry Reding
  2020-05-22 16:42   ` Daniel Lezcano
  2 siblings, 2 replies; 9+ messages in thread
From: Dmitry Osipenko @ 2020-03-24 22:43 UTC (permalink / raw)
  To: Thierry Reding, Jonathan Hunter, Peter De Schrijver,
	Rafael J. Wysocki, Daniel Lezcano, Michał Mirosław,
	Jasper Korten, David Heidelberg, Peter Geis
  Cc: linux-pm, linux-tegra, linux-kernel

The new Tegra CPU Idle driver now has a unified code path for the coupled
CC6 (LP2) state, this allows to enable the deepest idling state on Tegra30
SoC where the whole CPU cluster is power-gated.

Tested-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Tested-by: Jasper Korten <jja2000@gmail.com>
Tested-by: David Heidelberg <david@ixit.cz>
Tested-by: Peter Geis <pgwipeout@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/cpuidle/cpuidle-tegra.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/cpuidle/cpuidle-tegra.c b/drivers/cpuidle/cpuidle-tegra.c
index 313b0290e97b..150045849d78 100644
--- a/drivers/cpuidle/cpuidle-tegra.c
+++ b/drivers/cpuidle/cpuidle-tegra.c
@@ -365,7 +365,6 @@ static int tegra_cpuidle_probe(struct platform_device *pdev)
 		break;
 
 	case TEGRA30:
-		tegra_cpuidle_disable_state(TEGRA_CC6);
 		break;
 
 	case TEGRA114:
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 3/3] cpuidle: tegra: Support CPU cluster power-down state on Tegra30
  2020-03-24 22:43 ` [PATCH v1 3/3] cpuidle: tegra: Support CPU cluster power-down state on Tegra30 Dmitry Osipenko
@ 2020-05-06 16:33   ` Thierry Reding
  2020-05-22 16:42     ` Daniel Lezcano
  2020-05-22 16:42   ` Daniel Lezcano
  1 sibling, 1 reply; 9+ messages in thread
From: Thierry Reding @ 2020-05-06 16:33 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: Dmitry Osipenko, Jonathan Hunter, Peter De Schrijver,
	Rafael J. Wysocki, Michał Mirosław, Jasper Korten,
	David Heidelberg, Peter Geis, linux-pm, linux-tegra,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 779 bytes --]

On Wed, Mar 25, 2020 at 01:43:35AM +0300, Dmitry Osipenko wrote:
> The new Tegra CPU Idle driver now has a unified code path for the coupled
> CC6 (LP2) state, this allows to enable the deepest idling state on Tegra30
> SoC where the whole CPU cluster is power-gated.
> 
> Tested-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> Tested-by: Jasper Korten <jja2000@gmail.com>
> Tested-by: David Heidelberg <david@ixit.cz>
> Tested-by: Peter Geis <pgwipeout@gmail.com>
> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
> ---
>  drivers/cpuidle/cpuidle-tegra.c | 1 -
>  1 file changed, 1 deletion(-)

Daniel,

do you mind if I pick this up into the Tegra tree because of the runtime
dependencies on the firmware and ARM core changes in patches 1 & 2?

Thierry

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 1/3] ARM: tegra: Initialize r0 register for firmware wake-up
  2020-03-24 22:43 ` [PATCH v1 1/3] ARM: tegra: Initialize r0 register for firmware wake-up Dmitry Osipenko
@ 2020-05-06 16:34   ` Thierry Reding
  0 siblings, 0 replies; 9+ messages in thread
From: Thierry Reding @ 2020-05-06 16:34 UTC (permalink / raw)
  To: Dmitry Osipenko
  Cc: Jonathan Hunter, Peter De Schrijver, Rafael J. Wysocki,
	Daniel Lezcano, Michał Mirosław, Jasper Korten,
	David Heidelberg, Peter Geis, linux-pm, linux-tegra,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 865 bytes --]

On Wed, Mar 25, 2020 at 01:43:33AM +0300, Dmitry Osipenko wrote:
> Downstream kernel of ASUS TF300T sets r0 to #3. There is no explanation in
> downstream code whether this is really needed and some of T30 downstream
> kernels have and explicit comment telling that all arguments are ignored
> by firmware. Let's take a safe side by replicating behavior of the TF300T
> downstream kernel. This change works fine on Ouya and Nexus 7 devices.
> 
> Tested-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> Tested-by: Jasper Korten <jja2000@gmail.com>
> Tested-by: David Heidelberg <david@ixit.cz>
> Tested-by: Peter Geis <pgwipeout@gmail.com>
> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
> ---
>  arch/arm/mach-tegra/reset-handler.S | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)

Applied to for-5.8/arm/core, thanks.

Thierry

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 2/3] firmware: trusted_foundations: Different way of L2 cache enabling after LP2 suspend
  2020-03-24 22:43 ` [PATCH v1 2/3] firmware: trusted_foundations: Different way of L2 cache enabling after LP2 suspend Dmitry Osipenko
@ 2020-05-06 16:34   ` Thierry Reding
  0 siblings, 0 replies; 9+ messages in thread
From: Thierry Reding @ 2020-05-06 16:34 UTC (permalink / raw)
  To: Dmitry Osipenko
  Cc: Jonathan Hunter, Peter De Schrijver, Rafael J. Wysocki,
	Daniel Lezcano, Michał Mirosław, Jasper Korten,
	David Heidelberg, Peter Geis, linux-pm, linux-tegra,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1099 bytes --]

On Wed, Mar 25, 2020 at 01:43:34AM +0300, Dmitry Osipenko wrote:
> ASUS TF300T device may not work properly if firmware is asked to fully
> re-initialize L2 cache after resume from LP2 suspend. The downstream
> kernel of TF300T uses different opcode to enable cache after resuming
> from LP2, this opcode also works fine on Nexus 7 and Ouya devices.
> Supposedly, this may be needed by an older firmware versions.
> 
> Reported-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> Tested-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> Tested-by: Jasper Korten <jja2000@gmail.com>
> Tested-by: David Heidelberg <david@ixit.cz>
> Tested-by: Peter Geis <pgwipeout@gmail.com>
> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
> ---
>  arch/arm/mach-tegra/pm.c                     |  4 ++++
>  drivers/firmware/trusted_foundations.c       | 21 ++++++++++++++++++--
>  include/linux/firmware/trusted_foundations.h |  1 +
>  3 files changed, 24 insertions(+), 2 deletions(-)

I split this up and applied it to for-5.8/firmware and for-5.8/arm/core,
respectively.

Thanks,
Thierry

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 3/3] cpuidle: tegra: Support CPU cluster power-down state on Tegra30
  2020-03-24 22:43 ` [PATCH v1 3/3] cpuidle: tegra: Support CPU cluster power-down state on Tegra30 Dmitry Osipenko
  2020-05-06 16:33   ` Thierry Reding
@ 2020-05-22 16:42   ` Daniel Lezcano
  1 sibling, 0 replies; 9+ messages in thread
From: Daniel Lezcano @ 2020-05-22 16:42 UTC (permalink / raw)
  To: Dmitry Osipenko, Thierry Reding, Jonathan Hunter,
	Peter De Schrijver, Rafael J. Wysocki, Michał Mirosław,
	Jasper Korten, David Heidelberg, Peter Geis
  Cc: linux-pm, linux-tegra, linux-kernel

On 24/03/2020 23:43, Dmitry Osipenko wrote:
> The new Tegra CPU Idle driver now has a unified code path for the coupled
> CC6 (LP2) state, this allows to enable the deepest idling state on Tegra30
> SoC where the whole CPU cluster is power-gated.
> 
> Tested-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> Tested-by: Jasper Korten <jja2000@gmail.com>
> Tested-by: David Heidelberg <david@ixit.cz>
> Tested-by: Peter Geis <pgwipeout@gmail.com>
> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>

Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>


-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v1 3/3] cpuidle: tegra: Support CPU cluster power-down state on Tegra30
  2020-05-06 16:33   ` Thierry Reding
@ 2020-05-22 16:42     ` Daniel Lezcano
  0 siblings, 0 replies; 9+ messages in thread
From: Daniel Lezcano @ 2020-05-22 16:42 UTC (permalink / raw)
  To: Thierry Reding
  Cc: Dmitry Osipenko, Jonathan Hunter, Peter De Schrijver,
	Rafael J. Wysocki, Michał Mirosław, Jasper Korten,
	David Heidelberg, Peter Geis, linux-pm, linux-tegra,
	linux-kernel

On 06/05/2020 18:33, Thierry Reding wrote:
> On Wed, Mar 25, 2020 at 01:43:35AM +0300, Dmitry Osipenko wrote:
>> The new Tegra CPU Idle driver now has a unified code path for the coupled
>> CC6 (LP2) state, this allows to enable the deepest idling state on Tegra30
>> SoC where the whole CPU cluster is power-gated.
>>
>> Tested-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
>> Tested-by: Jasper Korten <jja2000@gmail.com>
>> Tested-by: David Heidelberg <david@ixit.cz>
>> Tested-by: Peter Geis <pgwipeout@gmail.com>
>> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
>> ---
>>  drivers/cpuidle/cpuidle-tegra.c | 1 -
>>  1 file changed, 1 deletion(-)
> 
> Daniel,
> 
> do you mind if I pick this up into the Tegra tree because of the runtime
> dependencies on the firmware and ARM core changes in patches 1 & 2?

Sorry for the late reply, I'm overbooked this cycle.


-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-05-22 16:42 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-24 22:43 [PATCH v1 0/3] Enable LP2 CPUIDLE state on NVIDIA Tegra30 Dmitry Osipenko
2020-03-24 22:43 ` [PATCH v1 1/3] ARM: tegra: Initialize r0 register for firmware wake-up Dmitry Osipenko
2020-05-06 16:34   ` Thierry Reding
2020-03-24 22:43 ` [PATCH v1 2/3] firmware: trusted_foundations: Different way of L2 cache enabling after LP2 suspend Dmitry Osipenko
2020-05-06 16:34   ` Thierry Reding
2020-03-24 22:43 ` [PATCH v1 3/3] cpuidle: tegra: Support CPU cluster power-down state on Tegra30 Dmitry Osipenko
2020-05-06 16:33   ` Thierry Reding
2020-05-22 16:42     ` Daniel Lezcano
2020-05-22 16:42   ` Daniel Lezcano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).