OSDN Git Service

dpaa2-eth: add API for Tx shaping
authorIoana Ciornei <ioana.ciornei@nxp.com>
Tue, 21 Jul 2020 16:38:24 +0000 (19:38 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 21 Jul 2020 23:24:04 +0000 (16:24 -0700)
Add the necessary API (dpni_set_tx_shaping) for configuring the rate and
burst size of a per port shaper in DPAA2.

Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/dpaa2/dpni-cmd.h
drivers/net/ethernet/freescale/dpaa2/dpni.c
drivers/net/ethernet/freescale/dpaa2/dpni.h

index fd069f6..593e381 100644 (file)
@@ -626,4 +626,17 @@ struct dpni_cmd_set_congestion_notification {
        __le32 threshold_exit;
 };
 
+#define DPNI_COUPLED_SHIFT     0
+#define DPNI_COUPLED_SIZE      1
+
+struct dpni_cmd_set_tx_shaping {
+       __le16 tx_cr_max_burst_size;
+       __le16 tx_er_max_burst_size;
+       __le32 pad;
+       __le32 tx_cr_rate_limit;
+       __le32 tx_er_rate_limit;
+       /* from LSB: coupled:1 */
+       u8 coupled;
+};
+
 #endif /* _FSL_DPNI_CMD_H */
index 4261006..68ed4c4 100644 (file)
@@ -1963,3 +1963,39 @@ int dpni_clear_qos_table(struct fsl_mc_io *mc_io,
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
+
+/**
+ * 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_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_cr_shaper,
+                       const struct dpni_tx_shaping_cfg *tx_er_shaper,
+                       int coupled)
+{
+       struct dpni_cmd_set_tx_shaping *cmd_params;
+       struct fsl_mc_command cmd = { 0 };
+
+       /* prepare command */
+       cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_TX_SHAPING,
+                                         cmd_flags,
+                                         token);
+       cmd_params = (struct dpni_cmd_set_tx_shaping *)cmd.params;
+       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);
+}
index e874d80..3938799 100644 (file)
@@ -1062,5 +1062,21 @@ int dpni_get_api_version(struct fsl_mc_io *mc_io,
                         u32 cmd_flags,
                         u16 *major_ver,
                         u16 *minor_ver);
+/**
+ * struct dpni_tx_shaping - Structure representing DPNI tx shaping configuration
+ * @rate_limit:                Rate in Mbps
+ * @max_burst_size:    Burst size in bytes (up to 64KB)
+ */
+struct dpni_tx_shaping_cfg {
+       u32 rate_limit;
+       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_cr_shaper,
+                       const struct dpni_tx_shaping_cfg *tx_er_shaper,
+                       int coupled);
 
 #endif /* __FSL_DPNI_H */