Ability to set hmask in the device-tree,
which can be used to change address
filtering of packets.

Signed-off-by: David Gounaris <david.gouna...@infinera.com>
---
 Documentation/devicetree/bindings/soc/fsl/cpm_qe/network.txt | 6 ++++++
 drivers/net/wan/fsl_ucc_hdlc.c                               | 5 ++++-
 drivers/net/wan/fsl_ucc_hdlc.h                               | 1 +
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/soc/fsl/cpm_qe/network.txt 
b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/network.txt
index 03c741602c6d..6d2dd8a31482 100644
--- a/Documentation/devicetree/bindings/soc/fsl/cpm_qe/network.txt
+++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/network.txt
@@ -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:
 
diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
index 2aaa5e1959a9..3dacafb219c6 100644
--- a/drivers/net/wan/fsl_ucc_hdlc.c
+++ b/drivers/net/wan/fsl_ucc_hdlc.c
@@ -263,7 +263,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);
@@ -1097,6 +1097,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");
diff --git a/drivers/net/wan/fsl_ucc_hdlc.h b/drivers/net/wan/fsl_ucc_hdlc.h
index c21134c1f180..b99fa2f1cd99 100644
--- a/drivers/net/wan/fsl_ucc_hdlc.h
+++ b/drivers/net/wan/fsl_ucc_hdlc.h
@@ -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
-- 
2.13.6

Reply via email to