linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] ARM: dts: bcm283x: Switch to firmware clocks for Pi0-3
@ 2022-10-26 13:17 maxime
  2022-10-26 13:17 ` [PATCH 1/2] ARM: dts: bcm283x: Remove bcm2835-rpi-common.dtsi from SoC DTSI maxime
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: maxime @ 2022-10-26 13:17 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Ray Jui, Scott Branden,
	Broadcom internal kernel review list, Florian Fainelli
  Cc: linux-rpi-kernel, Maxime Ripard, Dave Stevenson, devicetree,
	linux-arm-kernel, Phil Elwell, linux-kernel, Dom Cobley

Hi,

Over the years, the differences between the Pi0-3 and the Pi4 created a bunch
of issues in the KMS driver that trace back to the policy differences between
the clk-bcm2835 and clk-raspberrypi drivers.

Instead of piling hacks over hacks to work around those differences, let's just
follow what downstream is doing and use the clk-raspberrypi for all the KMS
related devices.

Let me know what you think,
Maxime

To: Rob Herring <robh+dt@kernel.org>
To: Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
To: Florian Fainelli <f.fainelli@gmail.com>
To: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
To: Ray Jui <rjui@broadcom.com>
To: Scott Branden <sbranden@broadcom.com>
Cc: Dave Stevenson <dave.stevenson@raspberrypi.com>
Cc: Dom Cobley <dom@raspberrypi.com>
Cc: Phil Elwell <phil@raspberrypi.com>
Cc: devicetree@vger.kernel.org
Cc: linux-rpi-kernel@lists.infradead.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Maxime Ripard <maxime@cerno.tech>

---
Maxime Ripard (2):
      ARM: dts: bcm283x: Remove bcm2835-rpi-common.dtsi from SoC DTSI
      ARM: dts: bcm2835-rpi: Use firmware clocks for display

 arch/arm/boot/dts/bcm2835-rpi-a-plus.dts  |  1 +
 arch/arm/boot/dts/bcm2835-rpi-a.dts       |  1 +
 arch/arm/boot/dts/bcm2835-rpi-b-plus.dts  |  1 +
 arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts  |  1 +
 arch/arm/boot/dts/bcm2835-rpi-b.dts       |  1 +
 arch/arm/boot/dts/bcm2835-rpi-cm1.dtsi    |  1 +
 arch/arm/boot/dts/bcm2835-rpi-common.dtsi | 17 +++++++++++++++++
 arch/arm/boot/dts/bcm2835-rpi-zero-w.dts  |  1 +
 arch/arm/boot/dts/bcm2835-rpi-zero.dts    |  1 +
 arch/arm/boot/dts/bcm2835.dtsi            |  1 -
 arch/arm/boot/dts/bcm2836-rpi.dtsi        |  1 +
 arch/arm/boot/dts/bcm2836.dtsi            |  1 -
 arch/arm/boot/dts/bcm2837.dtsi            |  1 -
 13 files changed, 26 insertions(+), 3 deletions(-)
---
base-commit: 5398aeb71349b5e67658d51f46e12117060d867d
change-id: 20221026-rpi-display-fw-clk-0382f7afa5e8

Best regards,
-- 
Maxime Ripard <maxime@cerno.tech>

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

* [PATCH 1/2] ARM: dts: bcm283x: Remove bcm2835-rpi-common.dtsi from SoC DTSI
  2022-10-26 13:17 [PATCH 0/2] ARM: dts: bcm283x: Switch to firmware clocks for Pi0-3 maxime
@ 2022-10-26 13:17 ` maxime
  2022-11-09 18:24   ` Florian Fainelli
  2022-10-26 13:17 ` [PATCH 2/2] ARM: dts: bcm2835-rpi: Use firmware clocks for display maxime
  2022-11-10 18:16 ` [PATCH 0/2] ARM: dts: bcm283x: Switch to firmware clocks for Pi0-3 Florian Fainelli
  2 siblings, 1 reply; 6+ messages in thread
From: maxime @ 2022-10-26 13:17 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Ray Jui, Scott Branden,
	Broadcom internal kernel review list, Florian Fainelli
  Cc: linux-rpi-kernel, Maxime Ripard, Dave Stevenson, devicetree,
	linux-arm-kernel, Phil Elwell, linux-kernel, Dom Cobley

According to the commit log of the commit 3ac395a5b3f3 ("ARM: dts:
bcm283x: Use firmware PM driver for V3D"), the initial intent behind the
bcm2835-rpi-common DTSI was to share data between the RaspberryPies
based on the BCM2835, 36 and 37.

However, it was included by these SoCs' main DTSI. This is creating an
improper layering.

On top of that, bcm2835.dtsi is being included by bcm2711.dtsi, which
means that, even though the bcm2835-rpi-common DTSI wasn't actually
meant to contain data for the BCM2711, it actually leaks into the
BCM2711 DTSI.

In order to remove both issues, let's remove the include of
bcm2835-rpi-common.dtsi from bcm283{5-7}.dtsi and put them into the
bcm283{6,7}-rpi.dtsi.

BCM2835 has to be handled with special care due to the fact that
bcm2835.dtsi is being included by bcm2711.dtsi. Thus, we chose to
include bcm2835-rpi-common.dtsi directly into the board DTS. This will
be more error-prone, but given that it's a fairly old SoC by now, the
chance that we will get more BCM2835 boards is fairly low.

BCM2711 isn't modified since the content of bcm2835-rpi-common.dtsi was
only a power-domain for the v3d that was overridden anyway.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 arch/arm/boot/dts/bcm2835-rpi-a-plus.dts | 1 +
 arch/arm/boot/dts/bcm2835-rpi-a.dts      | 1 +
 arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 1 +
 arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 1 +
 arch/arm/boot/dts/bcm2835-rpi-b.dts      | 1 +
 arch/arm/boot/dts/bcm2835-rpi-cm1.dtsi   | 1 +
 arch/arm/boot/dts/bcm2835-rpi-zero-w.dts | 1 +
 arch/arm/boot/dts/bcm2835-rpi-zero.dts   | 1 +
 arch/arm/boot/dts/bcm2835.dtsi           | 1 -
 arch/arm/boot/dts/bcm2836-rpi.dtsi       | 1 +
 arch/arm/boot/dts/bcm2836.dtsi           | 1 -
 arch/arm/boot/dts/bcm2837.dtsi           | 1 -
 12 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts
index 9b9a18bbb20a..1470d2049f74 100644
--- a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts
+++ b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts
@@ -2,6 +2,7 @@
 /dts-v1/;
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
+#include "bcm2835-rpi-common.dtsi"
 #include "bcm283x-rpi-usb-host.dtsi"
 
 / {
diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts
index f664e4fced93..89be496f84f8 100644
--- a/arch/arm/boot/dts/bcm2835-rpi-a.dts
+++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts
@@ -2,6 +2,7 @@
 /dts-v1/;
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
+#include "bcm2835-rpi-common.dtsi"
 #include "bcm283x-rpi-usb-host.dtsi"
 
 / {
diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
index 248feb2ed23d..7f653f11788d 100644
--- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
+++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
@@ -2,6 +2,7 @@
 /dts-v1/;
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
+#include "bcm2835-rpi-common.dtsi"
 #include "bcm283x-rpi-smsc9514.dtsi"
 #include "bcm283x-rpi-usb-host.dtsi"
 
diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
index f5b66d3f4ff3..55e7cb0a242f 100644
--- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
+++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
@@ -2,6 +2,7 @@
 /dts-v1/;
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
+#include "bcm2835-rpi-common.dtsi"
 #include "bcm283x-rpi-smsc9512.dtsi"
 #include "bcm283x-rpi-usb-host.dtsi"
 
diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts
index f589bede2b11..3020c42ea8d7 100644
--- a/arch/arm/boot/dts/bcm2835-rpi-b.dts
+++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts
@@ -2,6 +2,7 @@
 /dts-v1/;
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
+#include "bcm2835-rpi-common.dtsi"
 #include "bcm283x-rpi-smsc9512.dtsi"
 #include "bcm283x-rpi-usb-host.dtsi"
 
diff --git a/arch/arm/boot/dts/bcm2835-rpi-cm1.dtsi b/arch/arm/boot/dts/bcm2835-rpi-cm1.dtsi
index e4e6b6abbfc1..f71d7e9e5895 100644
--- a/arch/arm/boot/dts/bcm2835-rpi-cm1.dtsi
+++ b/arch/arm/boot/dts/bcm2835-rpi-cm1.dtsi
@@ -2,6 +2,7 @@
 /dts-v1/;
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
+#include "bcm2835-rpi-common.dtsi"
 
 / {
 	leds {
diff --git a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
index 596bb1ef994e..9b3a2070a629 100644
--- a/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
+++ b/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
@@ -6,6 +6,7 @@
 /dts-v1/;
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
+#include "bcm2835-rpi-common.dtsi"
 #include "bcm283x-rpi-usb-otg.dtsi"
 #include "bcm283x-rpi-wifi-bt.dtsi"
 
diff --git a/arch/arm/boot/dts/bcm2835-rpi-zero.dts b/arch/arm/boot/dts/bcm2835-rpi-zero.dts
index a65c2bca69ea..f9359ac2bb92 100644
--- a/arch/arm/boot/dts/bcm2835-rpi-zero.dts
+++ b/arch/arm/boot/dts/bcm2835-rpi-zero.dts
@@ -6,6 +6,7 @@
 /dts-v1/;
 #include "bcm2835.dtsi"
 #include "bcm2835-rpi.dtsi"
+#include "bcm2835-rpi-common.dtsi"
 #include "bcm283x-rpi-usb-otg.dtsi"
 
 / {
diff --git a/arch/arm/boot/dts/bcm2835.dtsi b/arch/arm/boot/dts/bcm2835.dtsi
index 1c90e5a44283..15cb331febbb 100644
--- a/arch/arm/boot/dts/bcm2835.dtsi
+++ b/arch/arm/boot/dts/bcm2835.dtsi
@@ -1,7 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 #include "bcm283x.dtsi"
 #include "bcm2835-common.dtsi"
-#include "bcm2835-rpi-common.dtsi"
 
 / {
 	compatible = "brcm,bcm2835";
diff --git a/arch/arm/boot/dts/bcm2836-rpi.dtsi b/arch/arm/boot/dts/bcm2836-rpi.dtsi
index c4c858b984c6..48b03b55ff56 100644
--- a/arch/arm/boot/dts/bcm2836-rpi.dtsi
+++ b/arch/arm/boot/dts/bcm2836-rpi.dtsi
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 #include "bcm2835-rpi.dtsi"
+#include "bcm2835-rpi-common.dtsi"
 
 &vchiq {
 	compatible = "brcm,bcm2836-vchiq", "brcm,bcm2835-vchiq";
diff --git a/arch/arm/boot/dts/bcm2836.dtsi b/arch/arm/boot/dts/bcm2836.dtsi
index 534dacfc4dd5..db56a3443a4a 100644
--- a/arch/arm/boot/dts/bcm2836.dtsi
+++ b/arch/arm/boot/dts/bcm2836.dtsi
@@ -1,7 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 #include "bcm283x.dtsi"
 #include "bcm2835-common.dtsi"
-#include "bcm2835-rpi-common.dtsi"
 
 / {
 	compatible = "brcm,bcm2836";
diff --git a/arch/arm/boot/dts/bcm2837.dtsi b/arch/arm/boot/dts/bcm2837.dtsi
index 5dbdebc46259..58b3efe483c3 100644
--- a/arch/arm/boot/dts/bcm2837.dtsi
+++ b/arch/arm/boot/dts/bcm2837.dtsi
@@ -1,6 +1,5 @@
 #include "bcm283x.dtsi"
 #include "bcm2835-common.dtsi"
-#include "bcm2835-rpi-common.dtsi"
 
 / {
 	compatible = "brcm,bcm2837";

-- 
b4 0.10.1

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

* [PATCH 2/2] ARM: dts: bcm2835-rpi: Use firmware clocks for display
  2022-10-26 13:17 [PATCH 0/2] ARM: dts: bcm283x: Switch to firmware clocks for Pi0-3 maxime
  2022-10-26 13:17 ` [PATCH 1/2] ARM: dts: bcm283x: Remove bcm2835-rpi-common.dtsi from SoC DTSI maxime
@ 2022-10-26 13:17 ` maxime
  2022-11-09 18:24   ` Florian Fainelli
  2022-11-10 18:16 ` [PATCH 0/2] ARM: dts: bcm283x: Switch to firmware clocks for Pi0-3 Florian Fainelli
  2 siblings, 1 reply; 6+ messages in thread
From: maxime @ 2022-10-26 13:17 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Ray Jui, Scott Branden,
	Broadcom internal kernel review list, Florian Fainelli
  Cc: linux-rpi-kernel, Maxime Ripard, Dave Stevenson, devicetree,
	linux-arm-kernel, Phil Elwell, linux-kernel, Dom Cobley

We've experienced a number of issues around the cohabitation between the
"real" clock driver in Linux and the one backed by the firmware.

One solution around this is to follow what the RaspberryPi foundation
in its downstream clock, which is also what we've been doing on the
RaspberryPi4: to use the clocks exposed by the firmware.

Link: https://lore.kernel.org/linux-clk/20221021140505.kjmw5x4s6qhnrfif@houat/
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 arch/arm/boot/dts/bcm2835-rpi-common.dtsi | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/arch/arm/boot/dts/bcm2835-rpi-common.dtsi b/arch/arm/boot/dts/bcm2835-rpi-common.dtsi
index 8a55b6cded59..4e7b4a592da7 100644
--- a/arch/arm/boot/dts/bcm2835-rpi-common.dtsi
+++ b/arch/arm/boot/dts/bcm2835-rpi-common.dtsi
@@ -7,6 +7,23 @@
 
 #include <dt-bindings/power/raspberrypi-power.h>
 
+&firmware {
+	firmware_clocks: clocks {
+		compatible = "raspberrypi,firmware-clocks";
+		#clock-cells = <1>;
+	};
+};
+
+&hdmi {
+	clocks = <&firmware_clocks 9>,
+		 <&firmware_clocks 13>;
+	clock-names = "pixel", "hdmi";
+};
+
 &v3d {
 	power-domains = <&power RPI_POWER_DOMAIN_V3D>;
 };
+
+&vec {
+	clocks = <&firmware_clocks 15>;
+};

-- 
b4 0.10.1

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

* Re: [PATCH 1/2] ARM: dts: bcm283x: Remove bcm2835-rpi-common.dtsi from SoC DTSI
  2022-10-26 13:17 ` [PATCH 1/2] ARM: dts: bcm283x: Remove bcm2835-rpi-common.dtsi from SoC DTSI maxime
@ 2022-11-09 18:24   ` Florian Fainelli
  0 siblings, 0 replies; 6+ messages in thread
From: Florian Fainelli @ 2022-11-09 18:24 UTC (permalink / raw)
  To: bcm-kernel-feedback-list, maxime, Rob Herring,
	Krzysztof Kozlowski, Ray Jui, Scott Branden
  Cc: linux-rpi-kernel, Dave Stevenson, devicetree, linux-arm-kernel,
	Phil Elwell, linux-kernel, Dom Cobley

On Wed, 26 Oct 2022 15:17:38 +0200, maxime@cerno.tech wrote:
> According to the commit log of the commit 3ac395a5b3f3 ("ARM: dts:
> bcm283x: Use firmware PM driver for V3D"), the initial intent behind the
> bcm2835-rpi-common DTSI was to share data between the RaspberryPies
> based on the BCM2835, 36 and 37.
> 
> However, it was included by these SoCs' main DTSI. This is creating an
> improper layering.
> 
> On top of that, bcm2835.dtsi is being included by bcm2711.dtsi, which
> means that, even though the bcm2835-rpi-common DTSI wasn't actually
> meant to contain data for the BCM2711, it actually leaks into the
> BCM2711 DTSI.
> 
> In order to remove both issues, let's remove the include of
> bcm2835-rpi-common.dtsi from bcm283{5-7}.dtsi and put them into the
> bcm283{6,7}-rpi.dtsi.
> 
> BCM2835 has to be handled with special care due to the fact that
> bcm2835.dtsi is being included by bcm2711.dtsi. Thus, we chose to
> include bcm2835-rpi-common.dtsi directly into the board DTS. This will
> be more error-prone, but given that it's a fairly old SoC by now, the
> chance that we will get more BCM2835 boards is fairly low.
> 
> BCM2711 isn't modified since the content of bcm2835-rpi-common.dtsi was
> only a power-domain for the v3d that was overridden anyway.
> 
> Signed-off-by: Maxime Ripard <maxime@cerno.tech>
> ---

Applied to https://github.com/Broadcom/stblinux/commits/devicetree/next, thanks!
--
Florian

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

* Re: [PATCH 2/2] ARM: dts: bcm2835-rpi: Use firmware clocks for display
  2022-10-26 13:17 ` [PATCH 2/2] ARM: dts: bcm2835-rpi: Use firmware clocks for display maxime
@ 2022-11-09 18:24   ` Florian Fainelli
  0 siblings, 0 replies; 6+ messages in thread
From: Florian Fainelli @ 2022-11-09 18:24 UTC (permalink / raw)
  To: bcm-kernel-feedback-list, maxime, Rob Herring,
	Krzysztof Kozlowski, Ray Jui, Scott Branden
  Cc: linux-rpi-kernel, Dave Stevenson, devicetree, linux-arm-kernel,
	Phil Elwell, linux-kernel, Dom Cobley

On Wed, 26 Oct 2022 15:17:39 +0200, maxime@cerno.tech wrote:
> We've experienced a number of issues around the cohabitation between the
> "real" clock driver in Linux and the one backed by the firmware.
> 
> One solution around this is to follow what the RaspberryPi foundation
> in its downstream clock, which is also what we've been doing on the
> RaspberryPi4: to use the clocks exposed by the firmware.
> 
> Link: https://lore.kernel.org/linux-clk/20221021140505.kjmw5x4s6qhnrfif@houat/
> Signed-off-by: Maxime Ripard <maxime@cerno.tech>
> ---

Applied to https://github.com/Broadcom/stblinux/commits/devicetree/next, thanks!
--
Florian

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

* Re: [PATCH 0/2] ARM: dts: bcm283x: Switch to firmware clocks for Pi0-3
  2022-10-26 13:17 [PATCH 0/2] ARM: dts: bcm283x: Switch to firmware clocks for Pi0-3 maxime
  2022-10-26 13:17 ` [PATCH 1/2] ARM: dts: bcm283x: Remove bcm2835-rpi-common.dtsi from SoC DTSI maxime
  2022-10-26 13:17 ` [PATCH 2/2] ARM: dts: bcm2835-rpi: Use firmware clocks for display maxime
@ 2022-11-10 18:16 ` Florian Fainelli
  2 siblings, 0 replies; 6+ messages in thread
From: Florian Fainelli @ 2022-11-10 18:16 UTC (permalink / raw)
  To: maxime, Rob Herring, Krzysztof Kozlowski, Ray Jui, Scott Branden,
	Broadcom internal kernel review list, Florian Fainelli
  Cc: linux-rpi-kernel, Dave Stevenson, devicetree, linux-arm-kernel,
	Phil Elwell, linux-kernel, Dom Cobley

On 10/26/22 06:17, maxime@cerno.tech wrote:
> Hi,
> 
> Over the years, the differences between the Pi0-3 and the Pi4 created a bunch
> of issues in the KMS driver that trace back to the policy differences between
> the clk-bcm2835 and clk-raspberrypi drivers.
> 
> Instead of piling hacks over hacks to work around those differences, let's just
> follow what downstream is doing and use the clk-raspberrypi for all the KMS
> related devices.
> 
> Let me know what you think,

Maxime, please fix your git configuration such that the author of the 
patches is:

Maxime Ripard <maxime@cerno.tech>

and not:

maxime@cerno.tech

which git am then translates into maxime@cerno.tech <maxime@cerno.tech>

causing the email vs. author checks to fail on my end (and then in 
linux-next).

Thanks!
-- 
Florian


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

end of thread, other threads:[~2022-11-10 18:16 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-26 13:17 [PATCH 0/2] ARM: dts: bcm283x: Switch to firmware clocks for Pi0-3 maxime
2022-10-26 13:17 ` [PATCH 1/2] ARM: dts: bcm283x: Remove bcm2835-rpi-common.dtsi from SoC DTSI maxime
2022-11-09 18:24   ` Florian Fainelli
2022-10-26 13:17 ` [PATCH 2/2] ARM: dts: bcm2835-rpi: Use firmware clocks for display maxime
2022-11-09 18:24   ` Florian Fainelli
2022-11-10 18:16 ` [PATCH 0/2] ARM: dts: bcm283x: Switch to firmware clocks for Pi0-3 Florian Fainelli

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).