ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/target/linux/layerscape/patches-5.4/701-net-0209-dpaa2-eth-Update-dpni_set_tx_shaping-cmd-to-v2.patch b/target/linux/layerscape/patches-5.4/701-net-0209-dpaa2-eth-Update-dpni_set_tx_shaping-cmd-to-v2.patch
new file mode 100644
index 0000000..bb80578
--- /dev/null
+++ b/target/linux/layerscape/patches-5.4/701-net-0209-dpaa2-eth-Update-dpni_set_tx_shaping-cmd-to-v2.patch
@@ -0,0 +1,147 @@
+From 81efe5fd6fac6db454ccccb1e6c280419d0885c4 Mon Sep 17 00:00:00 2001
+From: Bogdan Purcareata <bogdan.purcareata@nxp.com>
+Date: Mon, 13 Nov 2017 17:29:21 +0200
+Subject: [PATCH] dpaa2-eth: Update dpni_set_tx_shaping cmd to v2
+
+Support dual rate shaping (committed, excess) and the coupled parameter.
+
+Signed-off-by: Bogdan Purcareata <bogdan.purcareata@nxp.com>
+---
+ drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c |  5 +++--
+ drivers/net/ethernet/freescale/dpaa2/dpni-cmd.h  | 18 ++++++++++++++----
+ drivers/net/ethernet/freescale/dpaa2/dpni.c      | 23 ++++++++++++++++-------
+ drivers/net/ethernet/freescale/dpaa2/dpni.h      | 10 ++++++----
+ 4 files changed, 39 insertions(+), 17 deletions(-)
+
+--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
++++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+@@ -3895,7 +3895,7 @@ static ssize_t dpaa2_eth_write_tx_shapin
+ {
+ 	int err, items;
+ 	struct dpaa2_eth_priv *priv = netdev_priv(to_net_dev(dev));
+-	struct dpni_tx_shaping_cfg scfg;
++	struct dpni_tx_shaping_cfg scfg, ercfg = {0};
+ 
+ 	items = sscanf(buf, "%u %hu", &scfg.rate_limit, &scfg.max_burst_size);
+ 	if (items != 2) {
+@@ -3909,7 +3909,8 @@ static ssize_t dpaa2_eth_write_tx_shapin
+ 		return -EINVAL;
+ 	}
+ 
+-	err = dpni_set_tx_shaping(priv->mc_io, 0, priv->mc_token, &scfg);
++	err = dpni_set_tx_shaping(priv->mc_io, 0, priv->mc_token, &scfg,
++				  &ercfg, 0);
+ 	if (err) {
+ 		dev_err(dev, "dpni_set_tx_shaping() failed\n");
+ 		return -EPERM;
+--- a/drivers/net/ethernet/freescale/dpaa2/dpni-cmd.h
++++ b/drivers/net/ethernet/freescale/dpaa2/dpni-cmd.h
+@@ -11,9 +11,11 @@
+ #define DPNI_VER_MAJOR				7
+ #define DPNI_VER_MINOR				0
+ #define DPNI_CMD_BASE_VERSION			1
++#define DPNI_CMD_2ND_VERSION			2
+ #define DPNI_CMD_ID_OFFSET			4
+ 
+ #define DPNI_CMD(id)	(((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_BASE_VERSION)
++#define DPNI_CMD_V2(id)	(((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_2ND_VERSION)
+ 
+ #define DPNI_CMDID_OPEN					DPNI_CMD(0x801)
+ #define DPNI_CMDID_CLOSE				DPNI_CMD(0x800)
+@@ -45,7 +47,7 @@
+ #define DPNI_CMDID_SET_MAX_FRAME_LENGTH			DPNI_CMD(0x216)
+ #define DPNI_CMDID_GET_MAX_FRAME_LENGTH			DPNI_CMD(0x217)
+ #define DPNI_CMDID_SET_LINK_CFG				DPNI_CMD(0x21A)
+-#define DPNI_CMDID_SET_TX_SHAPING			DPNI_CMD(0x21B)
++#define DPNI_CMDID_SET_TX_SHAPING			DPNI_CMD_V2(0x21B)
+ 
+ #define DPNI_CMDID_SET_MCAST_PROMISC			DPNI_CMD(0x220)
+ #define DPNI_CMDID_GET_MCAST_PROMISC			DPNI_CMD(0x221)
+@@ -316,12 +318,20 @@ struct dpni_rsp_get_link_state {
+ 	__le64 options;
+ };
+ 
++#define DPNI_COUPLED_SHIFT	0
++#define DPNI_COUPLED_SIZE	1
++
+ struct dpni_cmd_set_tx_shaping {
+ 	/* cmd word 0 */
+-	__le16 max_burst_size;
+-	__le16 pad[3];
++	__le16 tx_cr_max_burst_size;
++	__le16 tx_er_max_burst_size;
++	__le32 pad;
+ 	/* cmd word 1 */
+-	__le32 rate_limit;
++	__le32 tx_cr_rate_limit;
++	__le32 tx_er_rate_limit;
++	/* cmd word 2 */
++	/* from LSB: coupled:1 */
++	u8 coupled;
+ };
+ 
+ struct dpni_cmd_set_max_frame_length {
+--- a/drivers/net/ethernet/freescale/dpaa2/dpni.c
++++ b/drivers/net/ethernet/freescale/dpaa2/dpni.c
+@@ -927,17 +927,21 @@ int dpni_get_link_state(struct fsl_mc_io
+ 
+ /**
+  * dpni_set_tx_shaping() - Set the transmit shaping
+- * @mc_io:	Pointer to MC portal's I/O object
+- * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
+- * @token:	Token of DPNI object
+- * @tx_shaper:	Tx shaping configuration
++ * @mc_io:		Pointer to MC portal's I/O object
++ * @cmd_flags:		Command flags; one or more of 'MC_CMD_FLAG_'
++ * @token:		Token of DPNI object
++ * @tx_cr_shaper:	TX committed rate shaping configuration
++ * @tx_er_shaper:	TX excess rate shaping configuration
++ * @coupled:		Committed and excess rate shapers are coupled
+  *
+  * Return:	'0' on Success; Error code otherwise.
+  */
+ int dpni_set_tx_shaping(struct fsl_mc_io *mc_io,
+ 			u32 cmd_flags,
+ 			u16 token,
+-			const struct dpni_tx_shaping_cfg *tx_shaper)
++			const struct dpni_tx_shaping_cfg *tx_cr_shaper,
++			const struct dpni_tx_shaping_cfg *tx_er_shaper,
++			int coupled)
+ {
+ 	struct fsl_mc_command cmd = { 0 };
+ 	struct dpni_cmd_set_tx_shaping *cmd_params;
+@@ -947,8 +951,13 @@ int dpni_set_tx_shaping(struct fsl_mc_io
+ 					  cmd_flags,
+ 					  token);
+ 	cmd_params = (struct dpni_cmd_set_tx_shaping *)cmd.params;
+-	cmd_params->max_burst_size = cpu_to_le16(tx_shaper->max_burst_size);
+-	cmd_params->rate_limit = cpu_to_le32(tx_shaper->rate_limit);
++	cmd_params->tx_cr_max_burst_size =
++				cpu_to_le16(tx_cr_shaper->max_burst_size);
++	cmd_params->tx_er_max_burst_size =
++				cpu_to_le16(tx_er_shaper->max_burst_size);
++	cmd_params->tx_cr_rate_limit = cpu_to_le32(tx_cr_shaper->rate_limit);
++	cmd_params->tx_er_rate_limit = cpu_to_le32(tx_er_shaper->rate_limit);
++	dpni_set_field(cmd_params->coupled, COUPLED, coupled);
+ 
+ 	/* send command to mc*/
+ 	return mc_send_command(mc_io, &cmd);
+--- a/drivers/net/ethernet/freescale/dpaa2/dpni.h
++++ b/drivers/net/ethernet/freescale/dpaa2/dpni.h
+@@ -569,10 +569,12 @@ struct dpni_tx_shaping_cfg {
+ 	u16	max_burst_size;
+ };
+ 
+-int dpni_set_tx_shaping(struct fsl_mc_io			*mc_io,
+-			u32					cmd_flags,
+-			u16					token,
+-			const struct dpni_tx_shaping_cfg	*tx_shaper);
++int dpni_set_tx_shaping(struct fsl_mc_io *mc_io,
++			u32 cmd_flags,
++			u16 token,
++			const struct dpni_tx_shaping_cfg *tx_cr_shaper,
++			const struct dpni_tx_shaping_cfg *tx_er_shaper,
++			int coupled);
+ 
+ int dpni_set_max_frame_length(struct fsl_mc_io	*mc_io,
+ 			      u32		cmd_flags,