On Wed, Jan 29, 2020 at 12:12:42PM +0530, Sunil Kumar Kori wrote:
> Earlier after a successful mac_addr_add operation, index was returned
> by underlying layer which was unused but same as provided by DPDK API.
> 
> So API is enhanced to use application provided index location to add
> MAC address entry.
> 
> Fixes: e4373bf1b3f5 ("net/octeontx: add unicast MAC filter")
> 
> Signed-off-by: Sunil Kumar Kori <sk...@marvell.com>

Acked-by: Harman Kalra <hka...@marvell.com>

> ---
> v2:
>  - Disable promiscuous mode flag when default MAC address is set.
> 
>  drivers/net/octeontx/base/octeontx_bgx.c | 13 ++++++-------
>  drivers/net/octeontx/base/octeontx_bgx.h |  7 ++++++-
>  drivers/net/octeontx/octeontx_ethdev.c   | 21 +++++++++++++++++----
>  3 files changed, 29 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/net/octeontx/base/octeontx_bgx.c 
> b/drivers/net/octeontx/base/octeontx_bgx.c
> index e70255b11..a2d615fb2 100644
> --- a/drivers/net/octeontx/base/octeontx_bgx.c
> +++ b/drivers/net/octeontx/base/octeontx_bgx.c
> @@ -245,22 +245,21 @@ octeontx_bgx_port_mac_set(int port, uint8_t *mac_addr)
>  }
>  
>  int
> -octeontx_bgx_port_mac_add(int port, uint8_t *mac_addr)
> +octeontx_bgx_port_mac_add(int port, uint8_t *mac_addr, int index)
>  {
> +     struct octeontx_mbox_bgx_port_mac_filter filter;
>       struct octeontx_mbox_hdr hdr;
> -     int resp = 0;
>       int len = 6;
> -     int res = 0;
>  
>       hdr.coproc = OCTEONTX_BGX_COPROC;
>       hdr.msg = MBOX_BGX_PORT_ADD_MACADDR;
>       hdr.vfid = port;
>  
> -     res = octeontx_mbox_send(&hdr, mac_addr, len, &resp, sizeof(int));
> -     if (res < 0)
> -             return -EACCES;
> +     memcpy(filter.mac_addr, mac_addr, len);
> +     filter.index = index;
> +     len = sizeof(struct octeontx_mbox_bgx_port_mac_filter);
>  
> -     return res;
> +     return octeontx_mbox_send(&hdr, &filter, len, NULL, 0);
>  }
>  
>  int
> diff --git a/drivers/net/octeontx/base/octeontx_bgx.h 
> b/drivers/net/octeontx/base/octeontx_bgx.h
> index caaff179c..11c25db67 100644
> --- a/drivers/net/octeontx/base/octeontx_bgx.h
> +++ b/drivers/net/octeontx/base/octeontx_bgx.h
> @@ -112,6 +112,11 @@ typedef struct octeontx_mbox_bgx_port_stats {
>       uint64_t rx_jabber_errors;
>  } octeontx_mbox_bgx_port_stats_t;
>  
> +struct octeontx_mbox_bgx_port_mac_filter {
> +     uint8_t mac_addr[6];
> +     int index;
> +};
> +
>  int octeontx_bgx_port_open(int port, octeontx_mbox_bgx_port_conf_t *conf);
>  int octeontx_bgx_port_close(int port);
>  int octeontx_bgx_port_start(int port);
> @@ -123,7 +128,7 @@ int octeontx_bgx_port_stats_clr(int port);
>  int octeontx_bgx_port_link_status(int port);
>  int octeontx_bgx_port_promisc_set(int port, int en);
>  int octeontx_bgx_port_mac_set(int port, uint8_t *mac_addr);
> -int octeontx_bgx_port_mac_add(int port, uint8_t *mac_addr);
> +int octeontx_bgx_port_mac_add(int port, uint8_t *mac_addr, int index);
>  int octeontx_bgx_port_mac_del(int port, uint32_t index);
>  int octeontx_bgx_port_mac_entries_get(int port);
>  
> diff --git a/drivers/net/octeontx/octeontx_ethdev.c 
> b/drivers/net/octeontx/octeontx_ethdev.c
> index e23162d8a..f965b946e 100644
> --- a/drivers/net/octeontx/octeontx_ethdev.c
> +++ b/drivers/net/octeontx/octeontx_ethdev.c
> @@ -573,13 +573,14 @@ octeontx_dev_mac_addr_del(struct rte_eth_dev *dev, 
> uint32_t index)
>  static int
>  octeontx_dev_mac_addr_add(struct rte_eth_dev *dev,
>                         struct rte_ether_addr *mac_addr,
> -                       __rte_unused uint32_t index,
> +                       uint32_t index,
>                         __rte_unused uint32_t vmdq)
>  {
>       struct octeontx_nic *nic = octeontx_pmd_priv(dev);
>       int ret;
>  
> -     ret = octeontx_bgx_port_mac_add(nic->port_id, mac_addr->addr_bytes);
> +     ret = octeontx_bgx_port_mac_add(nic->port_id, mac_addr->addr_bytes,
> +                                     index);
>       if (ret < 0) {
>               octeontx_log_err("failed to add MAC address filter on port %d",
>                                nic->port_id);
> @@ -594,12 +595,21 @@ octeontx_dev_default_mac_addr_set(struct rte_eth_dev 
> *dev,
>                                       struct rte_ether_addr *addr)
>  {
>       struct octeontx_nic *nic = octeontx_pmd_priv(dev);
> +     uint8_t prom_mode = dev->data->promiscuous;
>       int ret;
>  
> +     dev->data->promiscuous = 0;
>       ret = octeontx_bgx_port_mac_set(nic->port_id, addr->addr_bytes);
> -     if (ret != 0)
> +     if (ret == 0) {
> +             /* Update same mac address to BGX CAM table */
> +             ret = octeontx_bgx_port_mac_add(nic->port_id, addr->addr_bytes,
> +                                             0);
> +     }
> +     if (ret < 0) {
> +             dev->data->promiscuous = prom_mode;
>               octeontx_log_err("failed to set MAC address on port %d",
> -                             nic->port_id);
> +                              nic->port_id);
> +     }
>  
>       return ret;
>  }
> @@ -1149,6 +1159,9 @@ octeontx_create(struct rte_vdev_device *dev, int port, 
> uint8_t evdev,
>       /* Update port_id mac to eth_dev */
>       memcpy(data->mac_addrs, nic->mac_addr, RTE_ETHER_ADDR_LEN);
>  
> +     /* Update same mac address to BGX CAM table at index 0 */
> +     octeontx_bgx_port_mac_add(nic->port_id, nic->mac_addr, 0);
> +
>       PMD_INIT_LOG(DEBUG, "ethdev info: ");
>       PMD_INIT_LOG(DEBUG, "port %d, port_ena %d ochan %d num_ochan %d tx_q 
> %d",
>                               nic->port_id, nic->port_ena,
> -- 
> 2.17.1
> 

Reply via email to