Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/altera/altera_sgdma.c net/netlink/af_netlink.c net/sched/cls_api.c net/sched/sch_api.c The netlink conflict dealt with moving to netlink_capable() and netlink_ns_capable() in the 'net' tree vs. supporting 'tc' operations in non-init namespaces. These were simple transformations from netlink_capable to netlink_ns_capable. The Altera driver conflict was simply code removal overlapping some void pointer cast cleanups in net-next. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -358,6 +358,8 @@ struct sxgbe_core_ops {
|
||||
/* Enable disable checksum offload operations */
|
||||
void (*enable_rx_csum)(void __iomem *ioaddr);
|
||||
void (*disable_rx_csum)(void __iomem *ioaddr);
|
||||
void (*enable_rxqueue)(void __iomem *ioaddr, int queue_num);
|
||||
void (*disable_rxqueue)(void __iomem *ioaddr, int queue_num);
|
||||
};
|
||||
|
||||
const struct sxgbe_core_ops *sxgbe_get_core_ops(void);
|
||||
|
@@ -165,6 +165,26 @@ static void sxgbe_core_set_speed(void __iomem *ioaddr, unsigned char speed)
|
||||
writel(tx_cfg, ioaddr + SXGBE_CORE_TX_CONFIG_REG);
|
||||
}
|
||||
|
||||
static void sxgbe_core_enable_rxqueue(void __iomem *ioaddr, int queue_num)
|
||||
{
|
||||
u32 reg_val;
|
||||
|
||||
reg_val = readl(ioaddr + SXGBE_CORE_RX_CTL0_REG);
|
||||
reg_val &= ~(SXGBE_CORE_RXQ_ENABLE_MASK << queue_num);
|
||||
reg_val |= SXGBE_CORE_RXQ_ENABLE;
|
||||
writel(reg_val, ioaddr + SXGBE_CORE_RX_CTL0_REG);
|
||||
}
|
||||
|
||||
static void sxgbe_core_disable_rxqueue(void __iomem *ioaddr, int queue_num)
|
||||
{
|
||||
u32 reg_val;
|
||||
|
||||
reg_val = readl(ioaddr + SXGBE_CORE_RX_CTL0_REG);
|
||||
reg_val &= ~(SXGBE_CORE_RXQ_ENABLE_MASK << queue_num);
|
||||
reg_val |= SXGBE_CORE_RXQ_DISABLE;
|
||||
writel(reg_val, ioaddr + SXGBE_CORE_RX_CTL0_REG);
|
||||
}
|
||||
|
||||
static void sxgbe_set_eee_mode(void __iomem *ioaddr)
|
||||
{
|
||||
u32 ctrl;
|
||||
@@ -254,6 +274,8 @@ static const struct sxgbe_core_ops core_ops = {
|
||||
.set_eee_pls = sxgbe_set_eee_pls,
|
||||
.enable_rx_csum = sxgbe_enable_rx_csum,
|
||||
.disable_rx_csum = sxgbe_disable_rx_csum,
|
||||
.enable_rxqueue = sxgbe_core_enable_rxqueue,
|
||||
.disable_rxqueue = sxgbe_core_disable_rxqueue,
|
||||
};
|
||||
|
||||
const struct sxgbe_core_ops *sxgbe_get_core_ops(void)
|
||||
|
@@ -233,6 +233,12 @@ static void sxgbe_set_rx_owner(struct sxgbe_rx_norm_desc *p)
|
||||
p->rdes23.rx_rd_des23.own_bit = 1;
|
||||
}
|
||||
|
||||
/* Set Interrupt on completion bit */
|
||||
static void sxgbe_set_rx_int_on_com(struct sxgbe_rx_norm_desc *p)
|
||||
{
|
||||
p->rdes23.rx_rd_des23.int_on_com = 1;
|
||||
}
|
||||
|
||||
/* Get the receive frame size */
|
||||
static int sxgbe_get_rx_frame_len(struct sxgbe_rx_norm_desc *p)
|
||||
{
|
||||
@@ -498,6 +504,7 @@ static const struct sxgbe_desc_ops desc_ops = {
|
||||
.init_rx_desc = sxgbe_init_rx_desc,
|
||||
.get_rx_owner = sxgbe_get_rx_owner,
|
||||
.set_rx_owner = sxgbe_set_rx_owner,
|
||||
.set_rx_int_on_com = sxgbe_set_rx_int_on_com,
|
||||
.get_rx_frame_len = sxgbe_get_rx_frame_len,
|
||||
.get_rx_fd_status = sxgbe_get_rx_fd_status,
|
||||
.get_rx_ld_status = sxgbe_get_rx_ld_status,
|
||||
|
@@ -258,6 +258,9 @@ struct sxgbe_desc_ops {
|
||||
/* Set own bit */
|
||||
void (*set_rx_owner)(struct sxgbe_rx_norm_desc *p);
|
||||
|
||||
/* Set Interrupt on completion bit */
|
||||
void (*set_rx_int_on_com)(struct sxgbe_rx_norm_desc *p);
|
||||
|
||||
/* Get the receive frame size */
|
||||
int (*get_rx_frame_len)(struct sxgbe_rx_norm_desc *p);
|
||||
|
||||
|
@@ -23,21 +23,8 @@
|
||||
/* DMA core initialization */
|
||||
static int sxgbe_dma_init(void __iomem *ioaddr, int fix_burst, int burst_map)
|
||||
{
|
||||
int retry_count = 10;
|
||||
u32 reg_val;
|
||||
|
||||
/* reset the DMA */
|
||||
writel(SXGBE_DMA_SOFT_RESET, ioaddr + SXGBE_DMA_MODE_REG);
|
||||
while (retry_count--) {
|
||||
if (!(readl(ioaddr + SXGBE_DMA_MODE_REG) &
|
||||
SXGBE_DMA_SOFT_RESET))
|
||||
break;
|
||||
mdelay(10);
|
||||
}
|
||||
|
||||
if (retry_count < 0)
|
||||
return -EBUSY;
|
||||
|
||||
reg_val = readl(ioaddr + SXGBE_DMA_SYSBUS_MODE_REG);
|
||||
|
||||
/* if fix_burst = 0, Set UNDEF = 1 of DMA_Sys_Mode Register.
|
||||
|
@@ -1076,6 +1076,9 @@ static int sxgbe_open(struct net_device *dev)
|
||||
|
||||
/* Initialize the MAC Core */
|
||||
priv->hw->mac->core_init(priv->ioaddr);
|
||||
SXGBE_FOR_EACH_QUEUE(SXGBE_RX_QUEUES, queue_num) {
|
||||
priv->hw->mac->enable_rxqueue(priv->ioaddr, queue_num);
|
||||
}
|
||||
|
||||
/* Request the IRQ lines */
|
||||
ret = devm_request_irq(priv->device, priv->irq, sxgbe_common_interrupt,
|
||||
@@ -1452,6 +1455,7 @@ static void sxgbe_rx_refill(struct sxgbe_priv_data *priv)
|
||||
/* Added memory barrier for RX descriptor modification */
|
||||
wmb();
|
||||
priv->hw->desc->set_rx_owner(p);
|
||||
priv->hw->desc->set_rx_int_on_com(p);
|
||||
/* Added memory barrier for RX descriptor modification */
|
||||
wmb();
|
||||
}
|
||||
@@ -2034,6 +2038,24 @@ static int sxgbe_hw_init(struct sxgbe_priv_data * const priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sxgbe_sw_reset(void __iomem *addr)
|
||||
{
|
||||
int retry_count = 10;
|
||||
|
||||
writel(SXGBE_DMA_SOFT_RESET, addr + SXGBE_DMA_MODE_REG);
|
||||
while (retry_count--) {
|
||||
if (!(readl(addr + SXGBE_DMA_MODE_REG) &
|
||||
SXGBE_DMA_SOFT_RESET))
|
||||
break;
|
||||
mdelay(10);
|
||||
}
|
||||
|
||||
if (retry_count < 0)
|
||||
return -EBUSY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* sxgbe_drv_probe
|
||||
* @device: device pointer
|
||||
@@ -2066,6 +2088,10 @@ struct sxgbe_priv_data *sxgbe_drv_probe(struct device *device,
|
||||
priv->plat = plat_dat;
|
||||
priv->ioaddr = addr;
|
||||
|
||||
ret = sxgbe_sw_reset(priv->ioaddr);
|
||||
if (ret)
|
||||
goto error_free_netdev;
|
||||
|
||||
/* Verify driver arguments */
|
||||
sxgbe_verify_args();
|
||||
|
||||
@@ -2182,9 +2208,14 @@ error_free_netdev:
|
||||
int sxgbe_drv_remove(struct net_device *ndev)
|
||||
{
|
||||
struct sxgbe_priv_data *priv = netdev_priv(ndev);
|
||||
u8 queue_num;
|
||||
|
||||
netdev_info(ndev, "%s: removing driver\n", __func__);
|
||||
|
||||
SXGBE_FOR_EACH_QUEUE(SXGBE_RX_QUEUES, queue_num) {
|
||||
priv->hw->mac->disable_rxqueue(priv->ioaddr, queue_num);
|
||||
}
|
||||
|
||||
priv->hw->dma->stop_rx(priv->ioaddr, SXGBE_RX_QUEUES);
|
||||
priv->hw->dma->stop_tx(priv->ioaddr, SXGBE_TX_QUEUES);
|
||||
|
||||
|
@@ -52,6 +52,10 @@
|
||||
#define SXGBE_CORE_RX_CTL2_REG 0x00A8
|
||||
#define SXGBE_CORE_RX_CTL3_REG 0x00AC
|
||||
|
||||
#define SXGBE_CORE_RXQ_ENABLE_MASK 0x0003
|
||||
#define SXGBE_CORE_RXQ_ENABLE 0x0002
|
||||
#define SXGBE_CORE_RXQ_DISABLE 0x0000
|
||||
|
||||
/* Interrupt Registers */
|
||||
#define SXGBE_CORE_INT_STATUS_REG 0x00B0
|
||||
#define SXGBE_CORE_INT_ENABLE_REG 0x00B4
|
||||
|
Reference in New Issue
Block a user