diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/can/c_can/c_can_pci.c | 1 | ||||
| -rw-r--r-- | drivers/net/can/c_can/c_can_platform.c | 1 | ||||
| -rw-r--r-- | drivers/net/can/ifi_canfd/ifi_canfd.c | 6 | ||||
| -rw-r--r-- | drivers/net/can/peak_canfd/peak_pciefd_main.c | 14 | ||||
| -rw-r--r-- | drivers/net/can/sun4i_can.c | 12 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/dev.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en.h | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 12 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c | 10 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/main.c | 7 |
10 files changed, 45 insertions, 22 deletions
diff --git a/drivers/net/can/c_can/c_can_pci.c b/drivers/net/can/c_can/c_can_pci.c index cf7c18947189..d065c0e2d18e 100644 --- a/drivers/net/can/c_can/c_can_pci.c +++ b/drivers/net/can/c_can/c_can_pci.c | |||
| @@ -178,7 +178,6 @@ static int c_can_pci_probe(struct pci_dev *pdev, | |||
| 178 | break; | 178 | break; |
| 179 | case BOSCH_D_CAN: | 179 | case BOSCH_D_CAN: |
| 180 | priv->regs = reg_map_d_can; | 180 | priv->regs = reg_map_d_can; |
| 181 | priv->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES; | ||
| 182 | break; | 181 | break; |
| 183 | default: | 182 | default: |
| 184 | ret = -EINVAL; | 183 | ret = -EINVAL; |
diff --git a/drivers/net/can/c_can/c_can_platform.c b/drivers/net/can/c_can/c_can_platform.c index 46a746ee80bb..b5145a7f874c 100644 --- a/drivers/net/can/c_can/c_can_platform.c +++ b/drivers/net/can/c_can/c_can_platform.c | |||
| @@ -320,7 +320,6 @@ static int c_can_plat_probe(struct platform_device *pdev) | |||
| 320 | break; | 320 | break; |
| 321 | case BOSCH_D_CAN: | 321 | case BOSCH_D_CAN: |
| 322 | priv->regs = reg_map_d_can; | 322 | priv->regs = reg_map_d_can; |
| 323 | priv->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES; | ||
| 324 | priv->read_reg = c_can_plat_read_reg_aligned_to_16bit; | 323 | priv->read_reg = c_can_plat_read_reg_aligned_to_16bit; |
| 325 | priv->write_reg = c_can_plat_write_reg_aligned_to_16bit; | 324 | priv->write_reg = c_can_plat_write_reg_aligned_to_16bit; |
| 326 | priv->read_reg32 = d_can_plat_read_reg32; | 325 | priv->read_reg32 = d_can_plat_read_reg32; |
diff --git a/drivers/net/can/ifi_canfd/ifi_canfd.c b/drivers/net/can/ifi_canfd/ifi_canfd.c index 4d1fe8d95042..2772d05ff11c 100644 --- a/drivers/net/can/ifi_canfd/ifi_canfd.c +++ b/drivers/net/can/ifi_canfd/ifi_canfd.c | |||
| @@ -670,9 +670,9 @@ static void ifi_canfd_set_bittiming(struct net_device *ndev) | |||
| 670 | priv->base + IFI_CANFD_FTIME); | 670 | priv->base + IFI_CANFD_FTIME); |
| 671 | 671 | ||
| 672 | /* Configure transmitter delay */ | 672 | /* Configure transmitter delay */ |
| 673 | tdc = (dbt->brp * (dbt->phase_seg1 + 1)) & IFI_CANFD_TDELAY_MASK; | 673 | tdc = dbt->brp * (dbt->prop_seg + dbt->phase_seg1); |
| 674 | writel(IFI_CANFD_TDELAY_EN | IFI_CANFD_TDELAY_ABS | tdc, | 674 | tdc &= IFI_CANFD_TDELAY_MASK; |
| 675 | priv->base + IFI_CANFD_TDELAY); | 675 | writel(IFI_CANFD_TDELAY_EN | tdc, priv->base + IFI_CANFD_TDELAY); |
| 676 | } | 676 | } |
| 677 | 677 | ||
| 678 | static void ifi_canfd_set_filter(struct net_device *ndev, const u32 id, | 678 | static void ifi_canfd_set_filter(struct net_device *ndev, const u32 id, |
diff --git a/drivers/net/can/peak_canfd/peak_pciefd_main.c b/drivers/net/can/peak_canfd/peak_pciefd_main.c index 51c2d182a33a..b4efd711f824 100644 --- a/drivers/net/can/peak_canfd/peak_pciefd_main.c +++ b/drivers/net/can/peak_canfd/peak_pciefd_main.c | |||
| @@ -29,14 +29,19 @@ | |||
| 29 | #include "peak_canfd_user.h" | 29 | #include "peak_canfd_user.h" |
| 30 | 30 | ||
| 31 | MODULE_AUTHOR("Stephane Grosjean <s.grosjean@peak-system.com>"); | 31 | MODULE_AUTHOR("Stephane Grosjean <s.grosjean@peak-system.com>"); |
| 32 | MODULE_DESCRIPTION("Socket-CAN driver for PEAK PCAN PCIe FD family cards"); | 32 | MODULE_DESCRIPTION("Socket-CAN driver for PEAK PCAN PCIe/M.2 FD family cards"); |
| 33 | MODULE_SUPPORTED_DEVICE("PEAK PCAN PCIe FD CAN cards"); | 33 | MODULE_SUPPORTED_DEVICE("PEAK PCAN PCIe/M.2 FD CAN cards"); |
| 34 | MODULE_LICENSE("GPL v2"); | 34 | MODULE_LICENSE("GPL v2"); |
| 35 | 35 | ||
| 36 | #define PCIEFD_DRV_NAME "peak_pciefd" | 36 | #define PCIEFD_DRV_NAME "peak_pciefd" |
| 37 | 37 | ||
| 38 | #define PEAK_PCI_VENDOR_ID 0x001c /* The PCI device and vendor IDs */ | 38 | #define PEAK_PCI_VENDOR_ID 0x001c /* The PCI device and vendor IDs */ |
| 39 | #define PEAK_PCIEFD_ID 0x0013 /* for PCIe slot cards */ | 39 | #define PEAK_PCIEFD_ID 0x0013 /* for PCIe slot cards */ |
| 40 | #define PCAN_CPCIEFD_ID 0x0014 /* for Compact-PCI Serial slot cards */ | ||
| 41 | #define PCAN_PCIE104FD_ID 0x0017 /* for PCIe-104 Express slot cards */ | ||
| 42 | #define PCAN_MINIPCIEFD_ID 0x0018 /* for mini-PCIe slot cards */ | ||
| 43 | #define PCAN_PCIEFD_OEM_ID 0x0019 /* for PCIe slot OEM cards */ | ||
| 44 | #define PCAN_M2_ID 0x001a /* for M2 slot cards */ | ||
| 40 | 45 | ||
| 41 | /* PEAK PCIe board access description */ | 46 | /* PEAK PCIe board access description */ |
| 42 | #define PCIEFD_BAR0_SIZE (64 * 1024) | 47 | #define PCIEFD_BAR0_SIZE (64 * 1024) |
| @@ -203,6 +208,11 @@ struct pciefd_board { | |||
| 203 | /* supported device ids. */ | 208 | /* supported device ids. */ |
| 204 | static const struct pci_device_id peak_pciefd_tbl[] = { | 209 | static const struct pci_device_id peak_pciefd_tbl[] = { |
| 205 | {PEAK_PCI_VENDOR_ID, PEAK_PCIEFD_ID, PCI_ANY_ID, PCI_ANY_ID,}, | 210 | {PEAK_PCI_VENDOR_ID, PEAK_PCIEFD_ID, PCI_ANY_ID, PCI_ANY_ID,}, |
| 211 | {PEAK_PCI_VENDOR_ID, PCAN_CPCIEFD_ID, PCI_ANY_ID, PCI_ANY_ID,}, | ||
| 212 | {PEAK_PCI_VENDOR_ID, PCAN_PCIE104FD_ID, PCI_ANY_ID, PCI_ANY_ID,}, | ||
| 213 | {PEAK_PCI_VENDOR_ID, PCAN_MINIPCIEFD_ID, PCI_ANY_ID, PCI_ANY_ID,}, | ||
| 214 | {PEAK_PCI_VENDOR_ID, PCAN_PCIEFD_OEM_ID, PCI_ANY_ID, PCI_ANY_ID,}, | ||
| 215 | {PEAK_PCI_VENDOR_ID, PCAN_M2_ID, PCI_ANY_ID, PCI_ANY_ID,}, | ||
| 206 | {0,} | 216 | {0,} |
| 207 | }; | 217 | }; |
| 208 | 218 | ||
diff --git a/drivers/net/can/sun4i_can.c b/drivers/net/can/sun4i_can.c index b0c80859f746..1ac2090a1721 100644 --- a/drivers/net/can/sun4i_can.c +++ b/drivers/net/can/sun4i_can.c | |||
| @@ -539,6 +539,13 @@ static int sun4i_can_err(struct net_device *dev, u8 isrc, u8 status) | |||
| 539 | } | 539 | } |
| 540 | stats->rx_over_errors++; | 540 | stats->rx_over_errors++; |
| 541 | stats->rx_errors++; | 541 | stats->rx_errors++; |
| 542 | |||
| 543 | /* reset the CAN IP by entering reset mode | ||
| 544 | * ignoring timeout error | ||
| 545 | */ | ||
| 546 | set_reset_mode(dev); | ||
| 547 | set_normal_mode(dev); | ||
| 548 | |||
| 542 | /* clear bit */ | 549 | /* clear bit */ |
| 543 | sun4i_can_write_cmdreg(priv, SUN4I_CMD_CLEAR_OR_FLAG); | 550 | sun4i_can_write_cmdreg(priv, SUN4I_CMD_CLEAR_OR_FLAG); |
| 544 | } | 551 | } |
| @@ -653,8 +660,9 @@ static irqreturn_t sun4i_can_interrupt(int irq, void *dev_id) | |||
| 653 | netif_wake_queue(dev); | 660 | netif_wake_queue(dev); |
| 654 | can_led_event(dev, CAN_LED_EVENT_TX); | 661 | can_led_event(dev, CAN_LED_EVENT_TX); |
| 655 | } | 662 | } |
| 656 | if (isrc & SUN4I_INT_RBUF_VLD) { | 663 | if ((isrc & SUN4I_INT_RBUF_VLD) && |
| 657 | /* receive interrupt */ | 664 | !(isrc & SUN4I_INT_DATA_OR)) { |
| 665 | /* receive interrupt - don't read if overrun occurred */ | ||
| 658 | while (status & SUN4I_STA_RBUF_RDY) { | 666 | while (status & SUN4I_STA_RBUF_RDY) { |
| 659 | /* RX buffer is not empty */ | 667 | /* RX buffer is not empty */ |
| 660 | sun4i_can_rx(dev); | 668 | sun4i_can_rx(dev); |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/dev.c b/drivers/net/ethernet/mellanox/mlx5/core/dev.c index fc281712869b..17b723218b0c 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/dev.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/dev.c | |||
| @@ -93,7 +93,7 @@ static void delayed_event_release(struct mlx5_device_context *dev_ctx, | |||
| 93 | list_splice_init(&priv->waiting_events_list, &temp); | 93 | list_splice_init(&priv->waiting_events_list, &temp); |
| 94 | if (!dev_ctx->context) | 94 | if (!dev_ctx->context) |
| 95 | goto out; | 95 | goto out; |
| 96 | list_for_each_entry_safe(de, n, &priv->waiting_events_list, list) | 96 | list_for_each_entry_safe(de, n, &temp, list) |
| 97 | dev_ctx->intf->event(dev, dev_ctx->context, de->event, de->param); | 97 | dev_ctx->intf->event(dev, dev_ctx->context, de->event, de->param); |
| 98 | 98 | ||
| 99 | out: | 99 | out: |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h index cc13d3dbd366..13b5ef9d8703 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h | |||
| @@ -67,7 +67,7 @@ | |||
| 67 | #define MLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE 0xa | 67 | #define MLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE 0xa |
| 68 | #define MLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE 0xd | 68 | #define MLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE 0xd |
| 69 | 69 | ||
| 70 | #define MLX5E_PARAMS_MINIMUM_LOG_RQ_SIZE_MPW 0x1 | 70 | #define MLX5E_PARAMS_MINIMUM_LOG_RQ_SIZE_MPW 0x2 |
| 71 | #define MLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE_MPW 0x3 | 71 | #define MLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE_MPW 0x3 |
| 72 | #define MLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE_MPW 0x6 | 72 | #define MLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE_MPW 0x6 |
| 73 | 73 | ||
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c index 15a1687483cc..91b1b0938931 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | |||
| @@ -215,22 +215,20 @@ static inline bool mlx5e_rx_cache_get(struct mlx5e_rq *rq, | |||
| 215 | static inline int mlx5e_page_alloc_mapped(struct mlx5e_rq *rq, | 215 | static inline int mlx5e_page_alloc_mapped(struct mlx5e_rq *rq, |
| 216 | struct mlx5e_dma_info *dma_info) | 216 | struct mlx5e_dma_info *dma_info) |
| 217 | { | 217 | { |
| 218 | struct page *page; | ||
| 219 | |||
| 220 | if (mlx5e_rx_cache_get(rq, dma_info)) | 218 | if (mlx5e_rx_cache_get(rq, dma_info)) |
| 221 | return 0; | 219 | return 0; |
| 222 | 220 | ||
| 223 | page = dev_alloc_pages(rq->buff.page_order); | 221 | dma_info->page = dev_alloc_pages(rq->buff.page_order); |
| 224 | if (unlikely(!page)) | 222 | if (unlikely(!dma_info->page)) |
| 225 | return -ENOMEM; | 223 | return -ENOMEM; |
| 226 | 224 | ||
| 227 | dma_info->addr = dma_map_page(rq->pdev, page, 0, | 225 | dma_info->addr = dma_map_page(rq->pdev, dma_info->page, 0, |
| 228 | RQ_PAGE_SIZE(rq), rq->buff.map_dir); | 226 | RQ_PAGE_SIZE(rq), rq->buff.map_dir); |
| 229 | if (unlikely(dma_mapping_error(rq->pdev, dma_info->addr))) { | 227 | if (unlikely(dma_mapping_error(rq->pdev, dma_info->addr))) { |
| 230 | put_page(page); | 228 | put_page(dma_info->page); |
| 229 | dma_info->page = NULL; | ||
| 231 | return -ENOMEM; | 230 | return -ENOMEM; |
| 232 | } | 231 | } |
| 233 | dma_info->page = page; | ||
| 234 | 232 | ||
| 235 | return 0; | 233 | return 0; |
| 236 | } | 234 | } |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c index e906b754415c..ab92298eafc3 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c | |||
| @@ -49,7 +49,7 @@ int mlx5e_napi_poll(struct napi_struct *napi, int budget) | |||
| 49 | struct mlx5e_channel *c = container_of(napi, struct mlx5e_channel, | 49 | struct mlx5e_channel *c = container_of(napi, struct mlx5e_channel, |
| 50 | napi); | 50 | napi); |
| 51 | bool busy = false; | 51 | bool busy = false; |
| 52 | int work_done; | 52 | int work_done = 0; |
| 53 | int i; | 53 | int i; |
| 54 | 54 | ||
| 55 | for (i = 0; i < c->num_tc; i++) | 55 | for (i = 0; i < c->num_tc; i++) |
| @@ -58,15 +58,17 @@ int mlx5e_napi_poll(struct napi_struct *napi, int budget) | |||
| 58 | if (c->xdp) | 58 | if (c->xdp) |
| 59 | busy |= mlx5e_poll_xdpsq_cq(&c->rq.xdpsq.cq); | 59 | busy |= mlx5e_poll_xdpsq_cq(&c->rq.xdpsq.cq); |
| 60 | 60 | ||
| 61 | work_done = mlx5e_poll_rx_cq(&c->rq.cq, budget); | 61 | if (likely(budget)) { /* budget=0 means: don't poll rx rings */ |
| 62 | busy |= work_done == budget; | 62 | work_done = mlx5e_poll_rx_cq(&c->rq.cq, budget); |
| 63 | busy |= work_done == budget; | ||
| 64 | } | ||
| 63 | 65 | ||
| 64 | busy |= c->rq.post_wqes(&c->rq); | 66 | busy |= c->rq.post_wqes(&c->rq); |
| 65 | 67 | ||
| 66 | if (busy) { | 68 | if (busy) { |
| 67 | if (likely(mlx5e_channel_no_affinity_change(c))) | 69 | if (likely(mlx5e_channel_no_affinity_change(c))) |
| 68 | return budget; | 70 | return budget; |
| 69 | if (work_done == budget) | 71 | if (budget && work_done == budget) |
| 70 | work_done--; | 72 | work_done--; |
| 71 | } | 73 | } |
| 72 | 74 | ||
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c index 0d2c8dcd6eae..06562c9a6b9c 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c | |||
| @@ -1482,9 +1482,16 @@ static int mlx5_try_fast_unload(struct mlx5_core_dev *dev) | |||
| 1482 | return -EAGAIN; | 1482 | return -EAGAIN; |
| 1483 | } | 1483 | } |
| 1484 | 1484 | ||
| 1485 | /* Panic tear down fw command will stop the PCI bus communication | ||
| 1486 | * with the HCA, so the health polll is no longer needed. | ||
| 1487 | */ | ||
| 1488 | mlx5_drain_health_wq(dev); | ||
| 1489 | mlx5_stop_health_poll(dev); | ||
| 1490 | |||
| 1485 | ret = mlx5_cmd_force_teardown_hca(dev); | 1491 | ret = mlx5_cmd_force_teardown_hca(dev); |
| 1486 | if (ret) { | 1492 | if (ret) { |
| 1487 | mlx5_core_dbg(dev, "Firmware couldn't do fast unload error: %d\n", ret); | 1493 | mlx5_core_dbg(dev, "Firmware couldn't do fast unload error: %d\n", ret); |
| 1494 | mlx5_start_health_poll(dev); | ||
| 1488 | return ret; | 1495 | return ret; |
| 1489 | } | 1496 | } |
| 1490 | 1497 | ||
