From: Joao Pinto <joao.pi...@synopsys.com>
Date: Wed,  8 Mar 2017 11:03:09 +0000

> This patch adds the RX and TX scheduling algorithms programming.
> It introduces the multiple queues configuration function
> (stmmac_mtl_configuration) in stmmac_main.
> 
> Signed-off-by: Joao Pinto <jpi...@synopsys.com>
> ---
>  drivers/net/ethernet/stmicro/stmmac/common.h      |  4 ++
>  drivers/net/ethernet/stmicro/stmmac/dwmac4.h      | 10 +++++
>  drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 48 
> +++++++++++++++++++++++
>  drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 31 +++++++++++++--
>  4 files changed, 90 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h 
> b/drivers/net/ethernet/stmicro/stmmac/common.h
> index 04d9245..5a0a781 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/common.h
> +++ b/drivers/net/ethernet/stmicro/stmmac/common.h
> @@ -455,6 +455,10 @@ struct stmmac_ops {
>       int (*rx_ipc)(struct mac_device_info *hw);
>       /* Enable RX Queues */
>       void (*rx_queue_enable)(struct mac_device_info *hw, u32 queue);
> +     /* Program RX Algorithms */
> +     void (*prog_mtl_rx_algorithms)(struct mac_device_info *hw, u32 rx_alg);
> +     /* Program TX Algorithms */
> +     void (*prog_mtl_tx_algorithms)(struct mac_device_info *hw, u32 tx_alg);
>       /* Dump MAC registers */
>       void (*dump_regs)(struct mac_device_info *hw, u32 *reg_space);
>       /* Handle extra events on specific interrupts hw dependent */
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4.h 
> b/drivers/net/ethernet/stmicro/stmmac/dwmac4.h
> index db45134..748ab6f 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4.h
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4.h
> @@ -161,6 +161,16 @@ enum power_event {
>  #define GMAC_HI_REG_AE                       BIT(31)
>  
>  /*  MTL registers */
> +#define MTL_OPERATION_MODE           0x00000c00
> +#define MTL_OPERATION_SCHALG_MASK    GENMASK(6, 5)
> +#define MTL_OPERATION_SCHALG_WRR     (0x0 << 5)
> +#define MTL_OPERATION_SCHALG_WFQ     (0x1 << 5)
> +#define MTL_OPERATION_SCHALG_DWRR    (0x2 << 5)
> +#define MTL_OPERATION_SCHALG_SP              (0x3 << 5)
> +#define MTL_OPERATION_RAA            BIT(2)
> +#define MTL_OPERATION_RAA_SP         (0x0 << 2)
> +#define MTL_OPERATION_RAA_WSP                (0x1 << 2)
> +
>  #define MTL_INT_STATUS                       0x00000c20
>  #define MTL_INT_Q0                   BIT(0)
>  
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c 
> b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
> index 1e79e65..7503b8e 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
> @@ -70,6 +70,52 @@ static void dwmac4_rx_queue_enable(struct mac_device_info 
> *hw, u32 queue)
>       writel(value, ioaddr + GMAC_RXQ_CTRL0);
>  }
>  
> +static void dwmac4_prog_mtl_rx_algorithms(struct mac_device_info *hw,
> +                                       u32 rx_alg)
> +{
> +     void __iomem *ioaddr = hw->pcsr;
> +     u32 value = readl(ioaddr + MTL_OPERATION_MODE);
> +
> +     value &= ~MTL_OPERATION_RAA;
> +     switch (rx_alg) {
> +     case MTL_RX_ALGORITHM_SP:
> +     value |= MTL_OPERATION_RAA_SP;
> +     break;
> +     case MTL_RX_ALGORITHM_WSP:
> +     value |= MTL_OPERATION_RAA_WSP;
> +     break;
> +     default:
> +     break;
> +     }

This is not properly indented at all.  The code inside each switch statement
needs one more TAB.

Sam for dwmac4_prog_mtl_tx_algorithms().

Reply via email to