linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/3] Add reset deassertion for Aspeed MDIO
@ 2022-04-12  6:56 Dylan Hung
  2022-04-12  6:56 ` [PATCH v4 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding Dylan Hung
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Dylan Hung @ 2022-04-12  6:56 UTC (permalink / raw)
  To: robh+dt, joel, andrew, andrew, hkallweit1, linux, davem, kuba,
	pabeni, p.zabel, devicetree, linux-arm-kernel, linux-aspeed,
	linux-kernel, netdev, krzk+dt
  Cc: BMC-SW

Add missing reset deassertion for Aspeed MDIO bus controller. The reset
is asserted by the hardware when power-on so the driver only needs to
deassert it. To be able to work with the old DT blobs, the reset is
optional since it may be deasserted by the bootloader or the previous
kernel.

V4:
- use ASPEED_RESET_MII instead of hardcoding in dt-binding example

V3:
- remove reset property from the required list of the device tree
  bindings
- remove "Cc: stable@vger.kernel.org" from the commit messages
- add more description in the commit message of the dt-binding

V2:
- add reset property in the device tree bindings
- add reset assertion in the error path and driver remove

Dylan Hung (3):
  dt-bindings: net: add reset property for aspeed, ast2600-mdio binding
  net: mdio: add reset control for Aspeed MDIO
  ARM: dts: aspeed: add reset properties into MDIO nodes

 .../bindings/net/aspeed,ast2600-mdio.yaml         |  5 +++++
 arch/arm/boot/dts/aspeed-g6.dtsi                  |  4 ++++
 drivers/net/mdio/mdio-aspeed.c                    | 15 ++++++++++++++-
 3 files changed, 23 insertions(+), 1 deletion(-)

-- 
2.25.1


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

* [PATCH v4 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding
  2022-04-12  6:56 [PATCH v4 0/3] Add reset deassertion for Aspeed MDIO Dylan Hung
@ 2022-04-12  6:56 ` Dylan Hung
  2022-04-12 13:14   ` Rob Herring
  2022-04-13  2:34   ` Joel Stanley
  2022-04-12  6:56 ` [PATCH v4 2/3] net: mdio: add reset control for Aspeed MDIO Dylan Hung
  2022-04-12  6:56 ` [PATCH v4 3/3] ARM: dts: aspeed: add reset properties into MDIO nodes Dylan Hung
  2 siblings, 2 replies; 8+ messages in thread
From: Dylan Hung @ 2022-04-12  6:56 UTC (permalink / raw)
  To: robh+dt, joel, andrew, andrew, hkallweit1, linux, davem, kuba,
	pabeni, p.zabel, devicetree, linux-arm-kernel, linux-aspeed,
	linux-kernel, netdev, krzk+dt
  Cc: BMC-SW, Krzysztof Kozlowski

The AST2600 MDIO bus controller has a reset control bit and must be
deasserted before manipulating the MDIO controller. By default, the
hardware asserts the reset so the driver only need to deassert it.

Regarding to the old DT blobs which don't have reset property in them,
the reset deassertion is usually done by the bootloader so the reset
property is optional to work with them.

Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com>
Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
---
 .../devicetree/bindings/net/aspeed,ast2600-mdio.yaml         | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml b/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml
index 1c88820cbcdf..1174c14898e1 100644
--- a/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml
+++ b/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml
@@ -20,10 +20,14 @@ allOf:
 properties:
   compatible:
     const: aspeed,ast2600-mdio
+
   reg:
     maxItems: 1
     description: The register range of the MDIO controller instance
 
+  resets:
+    maxItems: 1
+
 required:
   - compatible
   - reg
@@ -39,6 +43,7 @@ examples:
             reg = <0x1e650000 0x8>;
             #address-cells = <1>;
             #size-cells = <0>;
+            resets = <&syscon ASPEED_RESET_MII>;
 
             ethphy0: ethernet-phy@0 {
                     compatible = "ethernet-phy-ieee802.3-c22";
-- 
2.25.1


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

* [PATCH v4 2/3] net: mdio: add reset control for Aspeed MDIO
  2022-04-12  6:56 [PATCH v4 0/3] Add reset deassertion for Aspeed MDIO Dylan Hung
  2022-04-12  6:56 ` [PATCH v4 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding Dylan Hung
@ 2022-04-12  6:56 ` Dylan Hung
  2022-04-12 14:24   ` Andrew Lunn
  2022-04-12  6:56 ` [PATCH v4 3/3] ARM: dts: aspeed: add reset properties into MDIO nodes Dylan Hung
  2 siblings, 1 reply; 8+ messages in thread
From: Dylan Hung @ 2022-04-12  6:56 UTC (permalink / raw)
  To: robh+dt, joel, andrew, andrew, hkallweit1, linux, davem, kuba,
	pabeni, p.zabel, devicetree, linux-arm-kernel, linux-aspeed,
	linux-kernel, netdev, krzk+dt
  Cc: BMC-SW

Add reset assertion/deassertion for Aspeed MDIO.  There are 4 MDIO
controllers embedded in Aspeed AST2600 SOC and share one reset control
register SCU50[3].  To work with old DT blobs which don't have the reset
property, devm_reset_control_get_optional_shared is used in this change.

Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
---
 drivers/net/mdio/mdio-aspeed.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/net/mdio/mdio-aspeed.c b/drivers/net/mdio/mdio-aspeed.c
index e2273588c75b..1afb58ccc524 100644
--- a/drivers/net/mdio/mdio-aspeed.c
+++ b/drivers/net/mdio/mdio-aspeed.c
@@ -3,6 +3,7 @@
 
 #include <linux/bitfield.h>
 #include <linux/delay.h>
+#include <linux/reset.h>
 #include <linux/iopoll.h>
 #include <linux/mdio.h>
 #include <linux/module.h>
@@ -37,6 +38,7 @@
 
 struct aspeed_mdio {
 	void __iomem *base;
+	struct reset_control *reset;
 };
 
 static int aspeed_mdio_read(struct mii_bus *bus, int addr, int regnum)
@@ -120,6 +122,12 @@ static int aspeed_mdio_probe(struct platform_device *pdev)
 	if (IS_ERR(ctx->base))
 		return PTR_ERR(ctx->base);
 
+	ctx->reset = devm_reset_control_get_optional_shared(&pdev->dev, NULL);
+	if (IS_ERR(ctx->reset))
+		return PTR_ERR(ctx->reset);
+
+	reset_control_deassert(ctx->reset);
+
 	bus->name = DRV_NAME;
 	snprintf(bus->id, MII_BUS_ID_SIZE, "%s%d", pdev->name, pdev->id);
 	bus->parent = &pdev->dev;
@@ -129,6 +137,7 @@ static int aspeed_mdio_probe(struct platform_device *pdev)
 	rc = of_mdiobus_register(bus, pdev->dev.of_node);
 	if (rc) {
 		dev_err(&pdev->dev, "Cannot register MDIO bus!\n");
+		reset_control_assert(ctx->reset);
 		return rc;
 	}
 
@@ -139,7 +148,11 @@ static int aspeed_mdio_probe(struct platform_device *pdev)
 
 static int aspeed_mdio_remove(struct platform_device *pdev)
 {
-	mdiobus_unregister(platform_get_drvdata(pdev));
+	struct mii_bus *bus = (struct mii_bus *)platform_get_drvdata(pdev);
+	struct aspeed_mdio *ctx = bus->priv;
+
+	reset_control_assert(ctx->reset);
+	mdiobus_unregister(bus);
 
 	return 0;
 }
-- 
2.25.1


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

* [PATCH v4 3/3] ARM: dts: aspeed: add reset properties into MDIO nodes
  2022-04-12  6:56 [PATCH v4 0/3] Add reset deassertion for Aspeed MDIO Dylan Hung
  2022-04-12  6:56 ` [PATCH v4 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding Dylan Hung
  2022-04-12  6:56 ` [PATCH v4 2/3] net: mdio: add reset control for Aspeed MDIO Dylan Hung
@ 2022-04-12  6:56 ` Dylan Hung
  2 siblings, 0 replies; 8+ messages in thread
From: Dylan Hung @ 2022-04-12  6:56 UTC (permalink / raw)
  To: robh+dt, joel, andrew, andrew, hkallweit1, linux, davem, kuba,
	pabeni, p.zabel, devicetree, linux-arm-kernel, linux-aspeed,
	linux-kernel, netdev, krzk+dt
  Cc: BMC-SW

Add reset control properties into MDIO nodes.  The 4 MDIO controllers in
AST2600 SOC share one reset control bit SCU50[3].

Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com>
Reviewed-by: Andrew Jeffery <andrew@aj.id.au>
---
 arch/arm/boot/dts/aspeed-g6.dtsi | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
index c32e87fad4dc..ab20ea8d829d 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
@@ -181,6 +181,7 @@ mdio0: mdio@1e650000 {
 			status = "disabled";
 			pinctrl-names = "default";
 			pinctrl-0 = <&pinctrl_mdio1_default>;
+			resets = <&syscon ASPEED_RESET_MII>;
 		};
 
 		mdio1: mdio@1e650008 {
@@ -191,6 +192,7 @@ mdio1: mdio@1e650008 {
 			status = "disabled";
 			pinctrl-names = "default";
 			pinctrl-0 = <&pinctrl_mdio2_default>;
+			resets = <&syscon ASPEED_RESET_MII>;
 		};
 
 		mdio2: mdio@1e650010 {
@@ -201,6 +203,7 @@ mdio2: mdio@1e650010 {
 			status = "disabled";
 			pinctrl-names = "default";
 			pinctrl-0 = <&pinctrl_mdio3_default>;
+			resets = <&syscon ASPEED_RESET_MII>;
 		};
 
 		mdio3: mdio@1e650018 {
@@ -211,6 +214,7 @@ mdio3: mdio@1e650018 {
 			status = "disabled";
 			pinctrl-names = "default";
 			pinctrl-0 = <&pinctrl_mdio4_default>;
+			resets = <&syscon ASPEED_RESET_MII>;
 		};
 
 		mac0: ftgmac@1e660000 {
-- 
2.25.1


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

* Re: [PATCH v4 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding
  2022-04-12  6:56 ` [PATCH v4 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding Dylan Hung
@ 2022-04-12 13:14   ` Rob Herring
  2022-04-13  2:34   ` Joel Stanley
  1 sibling, 0 replies; 8+ messages in thread
From: Rob Herring @ 2022-04-12 13:14 UTC (permalink / raw)
  To: Dylan Hung
  Cc: netdev, kuba, linux-aspeed, Krzysztof Kozlowski, devicetree,
	joel, hkallweit1, pabeni, linux-arm-kernel, andrew, robh+dt,
	p.zabel, krzk+dt, linux-kernel, andrew, BMC-SW, linux, davem

On Tue, 12 Apr 2022 14:56:09 +0800, Dylan Hung wrote:
> The AST2600 MDIO bus controller has a reset control bit and must be
> deasserted before manipulating the MDIO controller. By default, the
> hardware asserts the reset so the driver only need to deassert it.
> 
> Regarding to the old DT blobs which don't have reset property in them,
> the reset deassertion is usually done by the bootloader so the reset
> property is optional to work with them.
> 
> Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com>
> Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
> ---
>  .../devicetree/bindings/net/aspeed,ast2600-mdio.yaml         | 5 +++++
>  1 file changed, 5 insertions(+)
> 

My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):

yamllint warnings/errors:

dtschema/dtc warnings/errors:
Error: Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.example.dts:25.35-36 syntax error
FATAL ERROR: Unable to parse input tree
make[1]: *** [scripts/Makefile.lib:364: Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.example.dtb] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:1401: dt_binding_check] Error 2

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/patch/

This check can fail if there are any dependencies. The base for a patch
series is generally the most recent rc1.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit.


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

* Re: [PATCH v4 2/3] net: mdio: add reset control for Aspeed MDIO
  2022-04-12  6:56 ` [PATCH v4 2/3] net: mdio: add reset control for Aspeed MDIO Dylan Hung
@ 2022-04-12 14:24   ` Andrew Lunn
  0 siblings, 0 replies; 8+ messages in thread
From: Andrew Lunn @ 2022-04-12 14:24 UTC (permalink / raw)
  To: Dylan Hung
  Cc: robh+dt, joel, andrew, hkallweit1, linux, davem, kuba, pabeni,
	p.zabel, devicetree, linux-arm-kernel, linux-aspeed,
	linux-kernel, netdev, krzk+dt, BMC-SW

On Tue, Apr 12, 2022 at 02:56:10PM +0800, Dylan Hung wrote:
> Add reset assertion/deassertion for Aspeed MDIO.  There are 4 MDIO
> controllers embedded in Aspeed AST2600 SOC and share one reset control
> register SCU50[3].  To work with old DT blobs which don't have the reset
> property, devm_reset_control_get_optional_shared is used in this change.
> 
> Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com>
> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

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

* Re: [PATCH v4 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding
  2022-04-12  6:56 ` [PATCH v4 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding Dylan Hung
  2022-04-12 13:14   ` Rob Herring
@ 2022-04-13  2:34   ` Joel Stanley
  2022-04-13  2:59     ` Dylan Hung
  1 sibling, 1 reply; 8+ messages in thread
From: Joel Stanley @ 2022-04-13  2:34 UTC (permalink / raw)
  To: Dylan Hung
  Cc: Rob Herring, Andrew Jeffery, Andrew Lunn, hkallweit1,
	Russell King, David S . Miller, Jakub Kicinski, pabeni,
	Philipp Zabel, devicetree, Linux ARM, linux-aspeed,
	Linux Kernel Mailing List, Networking, Krzysztof Kozlowski,
	BMC-SW, Krzysztof Kozlowski

On Tue, 12 Apr 2022 at 06:55, Dylan Hung <dylan_hung@aspeedtech.com> wrote:
>
> The AST2600 MDIO bus controller has a reset control bit and must be
> deasserted before manipulating the MDIO controller. By default, the
> hardware asserts the reset so the driver only need to deassert it.
>
> Regarding to the old DT blobs which don't have reset property in them,
> the reset deassertion is usually done by the bootloader so the reset
> property is optional to work with them.
>
> Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com>
> Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
> ---
>  .../devicetree/bindings/net/aspeed,ast2600-mdio.yaml         | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml b/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml
> index 1c88820cbcdf..1174c14898e1 100644
> --- a/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml
> +++ b/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml
> @@ -20,10 +20,14 @@ allOf:
>  properties:
>    compatible:
>      const: aspeed,ast2600-mdio
> +
>    reg:
>      maxItems: 1
>      description: The register range of the MDIO controller instance
>
> +  resets:
> +    maxItems: 1
> +
>  required:
>    - compatible
>    - reg
> @@ -39,6 +43,7 @@ examples:
>              reg = <0x1e650000 0x8>;
>              #address-cells = <1>;
>              #size-cells = <0>;
> +            resets = <&syscon ASPEED_RESET_MII>;

You will need to include the definition for ASPEED_RESET_MII at the
start of the example:

#include <dt-bindings/clock/ast2600-clock.h>

You can test the bindings example by doing this:

pip install dtschema

make dt_binding_check
DT_SCHEMA_FILES=Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml

Cheers,

Joel

>
>              ethphy0: ethernet-phy@0 {
>                      compatible = "ethernet-phy-ieee802.3-c22";
> --
> 2.25.1
>

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

* RE: [PATCH v4 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding
  2022-04-13  2:34   ` Joel Stanley
@ 2022-04-13  2:59     ` Dylan Hung
  0 siblings, 0 replies; 8+ messages in thread
From: Dylan Hung @ 2022-04-13  2:59 UTC (permalink / raw)
  To: Joel Stanley
  Cc: Rob Herring, Andrew Jeffery, Andrew Lunn, hkallweit1,
	Russell King, David S . Miller, Jakub Kicinski, pabeni,
	Philipp Zabel, devicetree, Linux ARM, linux-aspeed,
	Linux Kernel Mailing List, Networking, Krzysztof Kozlowski,
	BMC-SW, Krzysztof Kozlowski

> -----Original Message-----
> From: Joel Stanley [mailto:joel@jms.id.au]
> Sent: 2022年4月13日 10:34 AM
> To: Dylan Hung <dylan_hung@aspeedtech.com>
> Cc: Rob Herring <robh+dt@kernel.org>; Andrew Jeffery <andrew@aj.id.au>;
> Andrew Lunn <andrew@lunn.ch>; hkallweit1@gmail.com; Russell King
> <linux@armlinux.org.uk>; David S . Miller <davem@davemloft.net>; Jakub
> Kicinski <kuba@kernel.org>; pabeni@redhat.com; Philipp Zabel
> <p.zabel@pengutronix.de>; devicetree <devicetree@vger.kernel.org>; Linux
> ARM <linux-arm-kernel@lists.infradead.org>; linux-aspeed
> <linux-aspeed@lists.ozlabs.org>; Linux Kernel Mailing List
> <linux-kernel@vger.kernel.org>; Networking <netdev@vger.kernel.org>;
> Krzysztof Kozlowski <krzk+dt@kernel.org>; BMC-SW
> <BMC-SW@aspeedtech.com>; Krzysztof Kozlowski <krzk@kernel.org>
> Subject: Re: [PATCH v4 1/3] dt-bindings: net: add reset property for aspeed,
> ast2600-mdio binding
> 
> On Tue, 12 Apr 2022 at 06:55, Dylan Hung <dylan_hung@aspeedtech.com>
> wrote:
> >
> > The AST2600 MDIO bus controller has a reset control bit and must be
> > deasserted before manipulating the MDIO controller. By default, the
> > hardware asserts the reset so the driver only need to deassert it.
> >
> > Regarding to the old DT blobs which don't have reset property in them,
> > the reset deassertion is usually done by the bootloader so the reset
> > property is optional to work with them.
> >
> > Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com>
> > Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
> > ---
> >  .../devicetree/bindings/net/aspeed,ast2600-mdio.yaml         | 5 +++++
> >  1 file changed, 5 insertions(+)
> >
> > diff --git
> > a/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml
> > b/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml
> > index 1c88820cbcdf..1174c14898e1 100644
> > --- a/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml
> > +++ b/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml
> > @@ -20,10 +20,14 @@ allOf:
> >  properties:
> >    compatible:
> >      const: aspeed,ast2600-mdio
> > +
> >    reg:
> >      maxItems: 1
> >      description: The register range of the MDIO controller instance
> >
> > +  resets:
> > +    maxItems: 1
> > +
> >  required:
> >    - compatible
> >    - reg
> > @@ -39,6 +43,7 @@ examples:
> >              reg = <0x1e650000 0x8>;
> >              #address-cells = <1>;
> >              #size-cells = <0>;
> > +            resets = <&syscon ASPEED_RESET_MII>;
> 
> You will need to include the definition for ASPEED_RESET_MII at the start of
> the example:
> 
> #include <dt-bindings/clock/ast2600-clock.h>
> 
> You can test the bindings example by doing this:
> 
> pip install dtschema
> 
> make dt_binding_check
> DT_SCHEMA_FILES=Documentation/devicetree/bindings/net/aspeed,ast2600-
> mdio.yaml
> 

Thank you for your comment, I have reproduced this error and fixed it on my side.
The change will be included in V5.

> Cheers,
> 
> Joel
> 
> >
> >              ethphy0: ethernet-phy@0 {
> >                      compatible = "ethernet-phy-ieee802.3-c22";
> > --
> > 2.25.1
> >

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

end of thread, other threads:[~2022-04-13  2:59 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-12  6:56 [PATCH v4 0/3] Add reset deassertion for Aspeed MDIO Dylan Hung
2022-04-12  6:56 ` [PATCH v4 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding Dylan Hung
2022-04-12 13:14   ` Rob Herring
2022-04-13  2:34   ` Joel Stanley
2022-04-13  2:59     ` Dylan Hung
2022-04-12  6:56 ` [PATCH v4 2/3] net: mdio: add reset control for Aspeed MDIO Dylan Hung
2022-04-12 14:24   ` Andrew Lunn
2022-04-12  6:56 ` [PATCH v4 3/3] ARM: dts: aspeed: add reset properties into MDIO nodes Dylan Hung

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