net/wan/fsl_ucc_hdlc: hmask
authorDavid Gounaris <david.gounaris@infinera.com>
Mon, 3 Sep 2018 12:47:28 +0000 (14:47 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 4 Sep 2018 05:14:41 +0000 (22:14 -0700)
Ability to set hmask in the device-tree,
which can be used to change address
filtering of packets.

Signed-off-by: David Gounaris <david.gounaris@infinera.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/devicetree/bindings/soc/fsl/cpm_qe/network.txt
drivers/net/wan/fsl_ucc_hdlc.c
drivers/net/wan/fsl_ucc_hdlc.h

index 03c741602c6d1d2178216afd4c6721a479111d98..6d2dd8a31482a4abea194ca8c78d7b026beb2d95 100644 (file)
@@ -98,6 +98,12 @@ The property below is dependent on fsl,tdm-interface:
        usage: optional for tdm interface
        value type: <empty>
        Definition : Internal loopback connecting on TDM layer.
+- fsl,hmask
+       usage: optional
+       Value type: <u16>
+       Definition: HDLC address recognition. Set to zero to disable
+                   address filtering of packets:
+                   fsl,hmask = /bits/ 16 <0x0000>;
 
 Example for tdm interface:
 
index 128230ab53a763be847050987ad4701ec49e906a..bb52c4dcf22c59a71b25f340f71dabeb62680cda 100644 (file)
@@ -265,7 +265,7 @@ static int uhdlc_init(struct ucc_hdlc_private *priv)
        iowrite16be(MAX_FRAME_LENGTH, &priv->ucc_pram->mflr);
        iowrite16be(DEFAULT_RFTHR, &priv->ucc_pram->rfthr);
        iowrite16be(DEFAULT_RFTHR, &priv->ucc_pram->rfcnt);
-       iowrite16be(DEFAULT_ADDR_MASK, &priv->ucc_pram->hmask);
+       iowrite16be(priv->hmask, &priv->ucc_pram->hmask);
        iowrite16be(DEFAULT_HDLC_ADDR, &priv->ucc_pram->haddr1);
        iowrite16be(DEFAULT_HDLC_ADDR, &priv->ucc_pram->haddr2);
        iowrite16be(DEFAULT_HDLC_ADDR, &priv->ucc_pram->haddr3);
@@ -1096,6 +1096,9 @@ static int ucc_hdlc_probe(struct platform_device *pdev)
                        goto free_utdm;
        }
 
+       if (of_property_read_u16(np, "fsl,hmask", &uhdlc_priv->hmask))
+               uhdlc_priv->hmask = DEFAULT_ADDR_MASK;
+
        ret = uhdlc_init(uhdlc_priv);
        if (ret) {
                dev_err(&pdev->dev, "Failed to init uhdlc\n");
index c21134c1f180df28316605c3f267501fa8ffe8f8..b99fa2f1cd99b341067ed6d92a78f4c9c59dfe82 100644 (file)
@@ -106,6 +106,7 @@ struct ucc_hdlc_private {
 
        unsigned short encoding;
        unsigned short parity;
+       unsigned short hmask;
        u32 clocking;
        spinlock_t lock;        /* lock for Tx BD and Tx buffer */
 #ifdef CONFIG_PM