Loading drivers/net/can/Kconfig +3 −3 Original line number Diff line number Diff line Loading @@ -103,11 +103,11 @@ config CAN_FLEXCAN Say Y here if you want to support for Freescale FlexCAN. config PCH_CAN tristate "PCH CAN" tristate "Intel EG20T PCH CAN controller" depends on CAN_DEV && PCI ---help--- This driver is for PCH CAN of Topcliff which is an IOH for x86 embedded processor. This driver is for PCH CAN of Topcliff (Intel EG20T PCH) which is an IOH for x86 embedded processor (Intel Atom E6xx series). This driver can access CAN bus. source "drivers/net/can/mscan/Kconfig" Loading drivers/net/can/bfin_can.c +23 −13 Original line number Diff line number Diff line Loading @@ -82,8 +82,7 @@ static int bfin_can_set_bittiming(struct net_device *dev) bfin_write(®->clock, clk); bfin_write(®->timing, timing); dev_info(dev->dev.parent, "setting CLOCK=0x%04x TIMING=0x%04x\n", clk, timing); netdev_info(dev, "setting CLOCK=0x%04x TIMING=0x%04x\n", clk, timing); return 0; } Loading @@ -108,8 +107,7 @@ static void bfin_can_set_reset_mode(struct net_device *dev) while (!(bfin_read(®->control) & CCA)) { udelay(10); if (--timeout == 0) { dev_err(dev->dev.parent, "fail to enter configuration mode\n"); netdev_err(dev, "fail to enter configuration mode\n"); BUG(); } } Loading Loading @@ -165,8 +163,7 @@ static void bfin_can_set_normal_mode(struct net_device *dev) while (bfin_read(®->status) & CCA) { udelay(10); if (--timeout == 0) { dev_err(dev->dev.parent, "fail to leave configuration mode\n"); netdev_err(dev, "fail to leave configuration mode\n"); BUG(); } } Loading Loading @@ -224,6 +221,20 @@ static int bfin_can_set_mode(struct net_device *dev, enum can_mode mode) return 0; } static int bfin_can_get_berr_counter(const struct net_device *dev, struct can_berr_counter *bec) { struct bfin_can_priv *priv = netdev_priv(dev); struct bfin_can_regs __iomem *reg = priv->membase; u16 cec = bfin_read(®->cec); bec->txerr = cec >> 8; bec->rxerr = cec; return 0; } static int bfin_can_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct bfin_can_priv *priv = netdev_priv(dev); Loading Loading @@ -331,7 +342,7 @@ static int bfin_can_err(struct net_device *dev, u16 isrc, u16 status) if (isrc & RMLIS) { /* data overrun interrupt */ dev_dbg(dev->dev.parent, "data overrun interrupt\n"); netdev_dbg(dev, "data overrun interrupt\n"); cf->can_id |= CAN_ERR_CRTL; cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW; stats->rx_over_errors++; Loading @@ -339,7 +350,7 @@ static int bfin_can_err(struct net_device *dev, u16 isrc, u16 status) } if (isrc & BOIS) { dev_dbg(dev->dev.parent, "bus-off mode interrupt\n"); netdev_dbg(dev, "bus-off mode interrupt\n"); state = CAN_STATE_BUS_OFF; cf->can_id |= CAN_ERR_BUSOFF; can_bus_off(dev); Loading @@ -347,13 +358,12 @@ static int bfin_can_err(struct net_device *dev, u16 isrc, u16 status) if (isrc & EPIS) { /* error passive interrupt */ dev_dbg(dev->dev.parent, "error passive interrupt\n"); netdev_dbg(dev, "error passive interrupt\n"); state = CAN_STATE_ERROR_PASSIVE; } if ((isrc & EWTIS) || (isrc & EWRIS)) { dev_dbg(dev->dev.parent, "Error Warning Transmit/Receive Interrupt\n"); netdev_dbg(dev, "Error Warning Transmit/Receive Interrupt\n"); state = CAN_STATE_ERROR_WARNING; } Loading Loading @@ -509,6 +519,7 @@ struct net_device *alloc_bfin_candev(void) priv->can.bittiming_const = &bfin_can_bittiming_const; priv->can.do_set_bittiming = bfin_can_set_bittiming; priv->can.do_set_mode = bfin_can_set_mode; priv->can.do_get_berr_counter = bfin_can_get_berr_counter; priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES; return dev; Loading Loading @@ -636,8 +647,7 @@ static int bfin_can_suspend(struct platform_device *pdev, pm_message_t mesg) while (!(bfin_read(®->intr) & SMACK)) { udelay(10); if (--timeout == 0) { dev_err(dev->dev.parent, "fail to enter sleep mode\n"); netdev_err(dev, "fail to enter sleep mode\n"); BUG(); } } Loading drivers/net/can/dev.c +20 −13 Original line number Diff line number Diff line Loading @@ -130,12 +130,12 @@ static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt) /* Error in one-tenth of a percent */ error = (best_error * 1000) / bt->bitrate; if (error > CAN_CALC_MAX_ERROR) { dev_err(dev->dev.parent, netdev_err(dev, "bitrate error %ld.%ld%% too high\n", error / 10, error % 10); return -EDOM; } else { dev_warn(dev->dev.parent, "bitrate error %ld.%ld%%\n", netdev_warn(dev, "bitrate error %ld.%ld%%\n", error / 10, error % 10); } } Loading Loading @@ -172,7 +172,7 @@ static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt) #else /* !CONFIG_CAN_CALC_BITTIMING */ static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt) { dev_err(dev->dev.parent, "bit-timing calculation not available\n"); netdev_err(dev, "bit-timing calculation not available\n"); return -EINVAL; } #endif /* CONFIG_CAN_CALC_BITTIMING */ Loading Loading @@ -313,8 +313,7 @@ void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, priv->echo_skb[idx] = skb; } else { /* locking problem with netif_stop_queue() ?? */ dev_err(dev->dev.parent, "%s: BUG! echo_skb is occupied!\n", __func__); netdev_err(dev, "%s: BUG! echo_skb is occupied!\n", __func__); kfree_skb(skb); } } Loading @@ -327,16 +326,24 @@ EXPORT_SYMBOL_GPL(can_put_echo_skb); * is handled in the device driver. The driver must protect * access to priv->echo_skb, if necessary. */ void can_get_echo_skb(struct net_device *dev, unsigned int idx) unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx) { struct can_priv *priv = netdev_priv(dev); BUG_ON(idx >= priv->echo_skb_max); if (priv->echo_skb[idx]) { struct sk_buff *skb = priv->echo_skb[idx]; struct can_frame *cf = (struct can_frame *)skb->data; u8 dlc = cf->can_dlc; netif_rx(priv->echo_skb[idx]); priv->echo_skb[idx] = NULL; return dlc; } return 0; } EXPORT_SYMBOL_GPL(can_get_echo_skb); Loading Loading @@ -392,7 +399,7 @@ void can_restart(unsigned long data) stats->rx_bytes += cf->can_dlc; restart: dev_dbg(dev->dev.parent, "restarted\n"); netdev_dbg(dev, "restarted\n"); priv->can_stats.restarts++; /* Now restart the device */ Loading @@ -400,7 +407,7 @@ restart: netif_carrier_on(dev); if (err) dev_err(dev->dev.parent, "Error %d during restart", err); netdev_err(dev, "Error %d during restart", err); } int can_restart_now(struct net_device *dev) Loading Loading @@ -433,7 +440,7 @@ void can_bus_off(struct net_device *dev) { struct can_priv *priv = netdev_priv(dev); dev_dbg(dev->dev.parent, "bus-off\n"); netdev_dbg(dev, "bus-off\n"); netif_carrier_off(dev); priv->can_stats.bus_off++; Loading Loading @@ -545,7 +552,7 @@ int open_candev(struct net_device *dev) struct can_priv *priv = netdev_priv(dev); if (!priv->bittiming.tq && !priv->bittiming.bitrate) { dev_err(dev->dev.parent, "bit-timing not yet defined\n"); netdev_err(dev, "bit-timing not yet defined\n"); return -EINVAL; } Loading drivers/net/can/flexcan.c +28 −33 Original line number Diff line number Diff line Loading @@ -272,7 +272,6 @@ static int flexcan_get_berr_counter(const struct net_device *dev, static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) { const struct flexcan_priv *priv = netdev_priv(dev); struct net_device_stats *stats = &dev->stats; struct flexcan_regs __iomem *regs = priv->base; struct can_frame *cf = (struct can_frame *)skb->data; u32 can_id; Loading Loading @@ -302,14 +301,11 @@ static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) flexcan_write(data, ®s->cantxfg[FLEXCAN_TX_BUF_ID].data[1]); } can_put_echo_skb(skb, dev, 0); flexcan_write(can_id, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_id); flexcan_write(ctrl, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); kfree_skb(skb); /* tx_packets is incremented in flexcan_irq */ stats->tx_bytes += cf->can_dlc; return NETDEV_TX_OK; } Loading @@ -322,34 +318,34 @@ static void do_bus_err(struct net_device *dev, cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR; if (reg_esr & FLEXCAN_ESR_BIT1_ERR) { dev_dbg(dev->dev.parent, "BIT1_ERR irq\n"); netdev_dbg(dev, "BIT1_ERR irq\n"); cf->data[2] |= CAN_ERR_PROT_BIT1; tx_errors = 1; } if (reg_esr & FLEXCAN_ESR_BIT0_ERR) { dev_dbg(dev->dev.parent, "BIT0_ERR irq\n"); netdev_dbg(dev, "BIT0_ERR irq\n"); cf->data[2] |= CAN_ERR_PROT_BIT0; tx_errors = 1; } if (reg_esr & FLEXCAN_ESR_ACK_ERR) { dev_dbg(dev->dev.parent, "ACK_ERR irq\n"); netdev_dbg(dev, "ACK_ERR irq\n"); cf->can_id |= CAN_ERR_ACK; cf->data[3] |= CAN_ERR_PROT_LOC_ACK; tx_errors = 1; } if (reg_esr & FLEXCAN_ESR_CRC_ERR) { dev_dbg(dev->dev.parent, "CRC_ERR irq\n"); netdev_dbg(dev, "CRC_ERR irq\n"); cf->data[2] |= CAN_ERR_PROT_BIT; cf->data[3] |= CAN_ERR_PROT_LOC_CRC_SEQ; rx_errors = 1; } if (reg_esr & FLEXCAN_ESR_FRM_ERR) { dev_dbg(dev->dev.parent, "FRM_ERR irq\n"); netdev_dbg(dev, "FRM_ERR irq\n"); cf->data[2] |= CAN_ERR_PROT_FORM; rx_errors = 1; } if (reg_esr & FLEXCAN_ESR_STF_ERR) { dev_dbg(dev->dev.parent, "STF_ERR irq\n"); netdev_dbg(dev, "STF_ERR irq\n"); cf->data[2] |= CAN_ERR_PROT_STUFF; rx_errors = 1; } Loading Loading @@ -396,7 +392,7 @@ static void do_state(struct net_device *dev, */ if (new_state >= CAN_STATE_ERROR_WARNING && new_state <= CAN_STATE_BUS_OFF) { dev_dbg(dev->dev.parent, "Error Warning IRQ\n"); netdev_dbg(dev, "Error Warning IRQ\n"); priv->can.can_stats.error_warning++; cf->can_id |= CAN_ERR_CRTL; Loading @@ -412,7 +408,7 @@ static void do_state(struct net_device *dev, */ if (new_state >= CAN_STATE_ERROR_PASSIVE && new_state <= CAN_STATE_BUS_OFF) { dev_dbg(dev->dev.parent, "Error Passive IRQ\n"); netdev_dbg(dev, "Error Passive IRQ\n"); priv->can.can_stats.error_passive++; cf->can_id |= CAN_ERR_CRTL; Loading @@ -422,8 +418,8 @@ static void do_state(struct net_device *dev, } break; case CAN_STATE_BUS_OFF: dev_err(dev->dev.parent, "BUG! hardware recovered automatically from BUS_OFF\n"); netdev_err(dev, "BUG! " "hardware recovered automatically from BUS_OFF\n"); break; default: break; Loading @@ -432,7 +428,7 @@ static void do_state(struct net_device *dev, /* process state changes depending on the new state */ switch (new_state) { case CAN_STATE_ERROR_ACTIVE: dev_dbg(dev->dev.parent, "Error Active\n"); netdev_dbg(dev, "Error Active\n"); cf->can_id |= CAN_ERR_PROT; cf->data[2] = CAN_ERR_PROT_ACTIVE; break; Loading Loading @@ -614,7 +610,7 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) /* transmission complete interrupt */ if (reg_iflag1 & (1 << FLEXCAN_TX_BUF_ID)) { /* tx_bytes is incremented in flexcan_start_xmit */ stats->tx_bytes += can_get_echo_skb(dev, 0); stats->tx_packets++; flexcan_write((1 << FLEXCAN_TX_BUF_ID), ®s->iflag1); netif_wake_queue(dev); Loading Loading @@ -653,11 +649,11 @@ static void flexcan_set_bittiming(struct net_device *dev) if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) reg |= FLEXCAN_CTRL_SMP; dev_info(dev->dev.parent, "writing ctrl=0x%08x\n", reg); netdev_info(dev, "writing ctrl=0x%08x\n", reg); flexcan_write(reg, ®s->ctrl); /* print chip status */ dev_dbg(dev->dev.parent, "%s: mcr=0x%08x ctrl=0x%08x\n", __func__, netdev_dbg(dev, "%s: mcr=0x%08x ctrl=0x%08x\n", __func__, flexcan_read(®s->mcr), flexcan_read(®s->ctrl)); } Loading @@ -684,8 +680,7 @@ static int flexcan_chip_start(struct net_device *dev) reg_mcr = flexcan_read(®s->mcr); if (reg_mcr & FLEXCAN_MCR_SOFTRST) { dev_err(dev->dev.parent, "Failed to softreset can module (mcr=0x%08x)\n", netdev_err(dev, "Failed to softreset can module (mcr=0x%08x)\n", reg_mcr); err = -ENODEV; goto out; Loading @@ -702,13 +697,14 @@ static int flexcan_chip_start(struct net_device *dev) * only supervisor access * enable warning int * choose format C * disable local echo * */ reg_mcr = flexcan_read(®s->mcr); reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_FEN | FLEXCAN_MCR_HALT | FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN | FLEXCAN_MCR_IDAM_C; dev_dbg(dev->dev.parent, "%s: writing mcr=0x%08x", __func__, reg_mcr); FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS; netdev_dbg(dev, "%s: writing mcr=0x%08x", __func__, reg_mcr); flexcan_write(reg_mcr, ®s->mcr); /* Loading @@ -734,7 +730,7 @@ static int flexcan_chip_start(struct net_device *dev) /* save for later use */ priv->reg_ctrl_default = reg_ctrl; dev_dbg(dev->dev.parent, "%s: writing ctrl=0x%08x", __func__, reg_ctrl); netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl); flexcan_write(reg_ctrl, ®s->ctrl); for (i = 0; i < ARRAY_SIZE(regs->cantxfg); i++) { Loading Loading @@ -766,8 +762,8 @@ static int flexcan_chip_start(struct net_device *dev) flexcan_write(FLEXCAN_IFLAG_DEFAULT, ®s->imask1); /* print chip status */ dev_dbg(dev->dev.parent, "%s: reading mcr=0x%08x ctrl=0x%08x\n", __func__, flexcan_read(®s->mcr), flexcan_read(®s->ctrl)); netdev_dbg(dev, "%s: reading mcr=0x%08x ctrl=0x%08x\n", __func__, flexcan_read(®s->mcr), flexcan_read(®s->ctrl)); return 0; Loading Loading @@ -905,8 +901,7 @@ static int __devinit register_flexcandev(struct net_device *dev) */ reg = flexcan_read(®s->mcr); if (!(reg & FLEXCAN_MCR_FEN)) { dev_err(dev->dev.parent, "Could not enable RX FIFO, unsupported core\n"); netdev_err(dev, "Could not enable RX FIFO, unsupported core\n"); err = -ENODEV; goto out; } Loading Loading @@ -975,7 +970,7 @@ static int __devinit flexcan_probe(struct platform_device *pdev) goto failed_map; } dev = alloc_candev(sizeof(struct flexcan_priv), 0); dev = alloc_candev(sizeof(struct flexcan_priv), 1); if (!dev) { err = -ENOMEM; goto failed_alloc; Loading @@ -983,7 +978,7 @@ static int __devinit flexcan_probe(struct platform_device *pdev) dev->netdev_ops = &flexcan_netdev_ops; dev->irq = irq; dev->flags |= IFF_ECHO; /* we support local echo in hardware */ dev->flags |= IFF_ECHO; priv = netdev_priv(dev); priv->can.clock.freq = clock_freq; Loading drivers/net/can/mcp251x.c +1 −2 Original line number Diff line number Diff line Loading @@ -712,8 +712,7 @@ static void mcp251x_error_skb(struct net_device *net, int can_id, int data1) frame->data[1] = data1; netif_rx_ni(skb); } else { dev_err(&net->dev, "cannot allocate error skb\n"); netdev_err(net, "cannot allocate error skb\n"); } } Loading Loading
drivers/net/can/Kconfig +3 −3 Original line number Diff line number Diff line Loading @@ -103,11 +103,11 @@ config CAN_FLEXCAN Say Y here if you want to support for Freescale FlexCAN. config PCH_CAN tristate "PCH CAN" tristate "Intel EG20T PCH CAN controller" depends on CAN_DEV && PCI ---help--- This driver is for PCH CAN of Topcliff which is an IOH for x86 embedded processor. This driver is for PCH CAN of Topcliff (Intel EG20T PCH) which is an IOH for x86 embedded processor (Intel Atom E6xx series). This driver can access CAN bus. source "drivers/net/can/mscan/Kconfig" Loading
drivers/net/can/bfin_can.c +23 −13 Original line number Diff line number Diff line Loading @@ -82,8 +82,7 @@ static int bfin_can_set_bittiming(struct net_device *dev) bfin_write(®->clock, clk); bfin_write(®->timing, timing); dev_info(dev->dev.parent, "setting CLOCK=0x%04x TIMING=0x%04x\n", clk, timing); netdev_info(dev, "setting CLOCK=0x%04x TIMING=0x%04x\n", clk, timing); return 0; } Loading @@ -108,8 +107,7 @@ static void bfin_can_set_reset_mode(struct net_device *dev) while (!(bfin_read(®->control) & CCA)) { udelay(10); if (--timeout == 0) { dev_err(dev->dev.parent, "fail to enter configuration mode\n"); netdev_err(dev, "fail to enter configuration mode\n"); BUG(); } } Loading Loading @@ -165,8 +163,7 @@ static void bfin_can_set_normal_mode(struct net_device *dev) while (bfin_read(®->status) & CCA) { udelay(10); if (--timeout == 0) { dev_err(dev->dev.parent, "fail to leave configuration mode\n"); netdev_err(dev, "fail to leave configuration mode\n"); BUG(); } } Loading Loading @@ -224,6 +221,20 @@ static int bfin_can_set_mode(struct net_device *dev, enum can_mode mode) return 0; } static int bfin_can_get_berr_counter(const struct net_device *dev, struct can_berr_counter *bec) { struct bfin_can_priv *priv = netdev_priv(dev); struct bfin_can_regs __iomem *reg = priv->membase; u16 cec = bfin_read(®->cec); bec->txerr = cec >> 8; bec->rxerr = cec; return 0; } static int bfin_can_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct bfin_can_priv *priv = netdev_priv(dev); Loading Loading @@ -331,7 +342,7 @@ static int bfin_can_err(struct net_device *dev, u16 isrc, u16 status) if (isrc & RMLIS) { /* data overrun interrupt */ dev_dbg(dev->dev.parent, "data overrun interrupt\n"); netdev_dbg(dev, "data overrun interrupt\n"); cf->can_id |= CAN_ERR_CRTL; cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW; stats->rx_over_errors++; Loading @@ -339,7 +350,7 @@ static int bfin_can_err(struct net_device *dev, u16 isrc, u16 status) } if (isrc & BOIS) { dev_dbg(dev->dev.parent, "bus-off mode interrupt\n"); netdev_dbg(dev, "bus-off mode interrupt\n"); state = CAN_STATE_BUS_OFF; cf->can_id |= CAN_ERR_BUSOFF; can_bus_off(dev); Loading @@ -347,13 +358,12 @@ static int bfin_can_err(struct net_device *dev, u16 isrc, u16 status) if (isrc & EPIS) { /* error passive interrupt */ dev_dbg(dev->dev.parent, "error passive interrupt\n"); netdev_dbg(dev, "error passive interrupt\n"); state = CAN_STATE_ERROR_PASSIVE; } if ((isrc & EWTIS) || (isrc & EWRIS)) { dev_dbg(dev->dev.parent, "Error Warning Transmit/Receive Interrupt\n"); netdev_dbg(dev, "Error Warning Transmit/Receive Interrupt\n"); state = CAN_STATE_ERROR_WARNING; } Loading Loading @@ -509,6 +519,7 @@ struct net_device *alloc_bfin_candev(void) priv->can.bittiming_const = &bfin_can_bittiming_const; priv->can.do_set_bittiming = bfin_can_set_bittiming; priv->can.do_set_mode = bfin_can_set_mode; priv->can.do_get_berr_counter = bfin_can_get_berr_counter; priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES; return dev; Loading Loading @@ -636,8 +647,7 @@ static int bfin_can_suspend(struct platform_device *pdev, pm_message_t mesg) while (!(bfin_read(®->intr) & SMACK)) { udelay(10); if (--timeout == 0) { dev_err(dev->dev.parent, "fail to enter sleep mode\n"); netdev_err(dev, "fail to enter sleep mode\n"); BUG(); } } Loading
drivers/net/can/dev.c +20 −13 Original line number Diff line number Diff line Loading @@ -130,12 +130,12 @@ static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt) /* Error in one-tenth of a percent */ error = (best_error * 1000) / bt->bitrate; if (error > CAN_CALC_MAX_ERROR) { dev_err(dev->dev.parent, netdev_err(dev, "bitrate error %ld.%ld%% too high\n", error / 10, error % 10); return -EDOM; } else { dev_warn(dev->dev.parent, "bitrate error %ld.%ld%%\n", netdev_warn(dev, "bitrate error %ld.%ld%%\n", error / 10, error % 10); } } Loading Loading @@ -172,7 +172,7 @@ static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt) #else /* !CONFIG_CAN_CALC_BITTIMING */ static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt) { dev_err(dev->dev.parent, "bit-timing calculation not available\n"); netdev_err(dev, "bit-timing calculation not available\n"); return -EINVAL; } #endif /* CONFIG_CAN_CALC_BITTIMING */ Loading Loading @@ -313,8 +313,7 @@ void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, priv->echo_skb[idx] = skb; } else { /* locking problem with netif_stop_queue() ?? */ dev_err(dev->dev.parent, "%s: BUG! echo_skb is occupied!\n", __func__); netdev_err(dev, "%s: BUG! echo_skb is occupied!\n", __func__); kfree_skb(skb); } } Loading @@ -327,16 +326,24 @@ EXPORT_SYMBOL_GPL(can_put_echo_skb); * is handled in the device driver. The driver must protect * access to priv->echo_skb, if necessary. */ void can_get_echo_skb(struct net_device *dev, unsigned int idx) unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx) { struct can_priv *priv = netdev_priv(dev); BUG_ON(idx >= priv->echo_skb_max); if (priv->echo_skb[idx]) { struct sk_buff *skb = priv->echo_skb[idx]; struct can_frame *cf = (struct can_frame *)skb->data; u8 dlc = cf->can_dlc; netif_rx(priv->echo_skb[idx]); priv->echo_skb[idx] = NULL; return dlc; } return 0; } EXPORT_SYMBOL_GPL(can_get_echo_skb); Loading Loading @@ -392,7 +399,7 @@ void can_restart(unsigned long data) stats->rx_bytes += cf->can_dlc; restart: dev_dbg(dev->dev.parent, "restarted\n"); netdev_dbg(dev, "restarted\n"); priv->can_stats.restarts++; /* Now restart the device */ Loading @@ -400,7 +407,7 @@ restart: netif_carrier_on(dev); if (err) dev_err(dev->dev.parent, "Error %d during restart", err); netdev_err(dev, "Error %d during restart", err); } int can_restart_now(struct net_device *dev) Loading Loading @@ -433,7 +440,7 @@ void can_bus_off(struct net_device *dev) { struct can_priv *priv = netdev_priv(dev); dev_dbg(dev->dev.parent, "bus-off\n"); netdev_dbg(dev, "bus-off\n"); netif_carrier_off(dev); priv->can_stats.bus_off++; Loading Loading @@ -545,7 +552,7 @@ int open_candev(struct net_device *dev) struct can_priv *priv = netdev_priv(dev); if (!priv->bittiming.tq && !priv->bittiming.bitrate) { dev_err(dev->dev.parent, "bit-timing not yet defined\n"); netdev_err(dev, "bit-timing not yet defined\n"); return -EINVAL; } Loading
drivers/net/can/flexcan.c +28 −33 Original line number Diff line number Diff line Loading @@ -272,7 +272,6 @@ static int flexcan_get_berr_counter(const struct net_device *dev, static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) { const struct flexcan_priv *priv = netdev_priv(dev); struct net_device_stats *stats = &dev->stats; struct flexcan_regs __iomem *regs = priv->base; struct can_frame *cf = (struct can_frame *)skb->data; u32 can_id; Loading Loading @@ -302,14 +301,11 @@ static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) flexcan_write(data, ®s->cantxfg[FLEXCAN_TX_BUF_ID].data[1]); } can_put_echo_skb(skb, dev, 0); flexcan_write(can_id, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_id); flexcan_write(ctrl, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); kfree_skb(skb); /* tx_packets is incremented in flexcan_irq */ stats->tx_bytes += cf->can_dlc; return NETDEV_TX_OK; } Loading @@ -322,34 +318,34 @@ static void do_bus_err(struct net_device *dev, cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR; if (reg_esr & FLEXCAN_ESR_BIT1_ERR) { dev_dbg(dev->dev.parent, "BIT1_ERR irq\n"); netdev_dbg(dev, "BIT1_ERR irq\n"); cf->data[2] |= CAN_ERR_PROT_BIT1; tx_errors = 1; } if (reg_esr & FLEXCAN_ESR_BIT0_ERR) { dev_dbg(dev->dev.parent, "BIT0_ERR irq\n"); netdev_dbg(dev, "BIT0_ERR irq\n"); cf->data[2] |= CAN_ERR_PROT_BIT0; tx_errors = 1; } if (reg_esr & FLEXCAN_ESR_ACK_ERR) { dev_dbg(dev->dev.parent, "ACK_ERR irq\n"); netdev_dbg(dev, "ACK_ERR irq\n"); cf->can_id |= CAN_ERR_ACK; cf->data[3] |= CAN_ERR_PROT_LOC_ACK; tx_errors = 1; } if (reg_esr & FLEXCAN_ESR_CRC_ERR) { dev_dbg(dev->dev.parent, "CRC_ERR irq\n"); netdev_dbg(dev, "CRC_ERR irq\n"); cf->data[2] |= CAN_ERR_PROT_BIT; cf->data[3] |= CAN_ERR_PROT_LOC_CRC_SEQ; rx_errors = 1; } if (reg_esr & FLEXCAN_ESR_FRM_ERR) { dev_dbg(dev->dev.parent, "FRM_ERR irq\n"); netdev_dbg(dev, "FRM_ERR irq\n"); cf->data[2] |= CAN_ERR_PROT_FORM; rx_errors = 1; } if (reg_esr & FLEXCAN_ESR_STF_ERR) { dev_dbg(dev->dev.parent, "STF_ERR irq\n"); netdev_dbg(dev, "STF_ERR irq\n"); cf->data[2] |= CAN_ERR_PROT_STUFF; rx_errors = 1; } Loading Loading @@ -396,7 +392,7 @@ static void do_state(struct net_device *dev, */ if (new_state >= CAN_STATE_ERROR_WARNING && new_state <= CAN_STATE_BUS_OFF) { dev_dbg(dev->dev.parent, "Error Warning IRQ\n"); netdev_dbg(dev, "Error Warning IRQ\n"); priv->can.can_stats.error_warning++; cf->can_id |= CAN_ERR_CRTL; Loading @@ -412,7 +408,7 @@ static void do_state(struct net_device *dev, */ if (new_state >= CAN_STATE_ERROR_PASSIVE && new_state <= CAN_STATE_BUS_OFF) { dev_dbg(dev->dev.parent, "Error Passive IRQ\n"); netdev_dbg(dev, "Error Passive IRQ\n"); priv->can.can_stats.error_passive++; cf->can_id |= CAN_ERR_CRTL; Loading @@ -422,8 +418,8 @@ static void do_state(struct net_device *dev, } break; case CAN_STATE_BUS_OFF: dev_err(dev->dev.parent, "BUG! hardware recovered automatically from BUS_OFF\n"); netdev_err(dev, "BUG! " "hardware recovered automatically from BUS_OFF\n"); break; default: break; Loading @@ -432,7 +428,7 @@ static void do_state(struct net_device *dev, /* process state changes depending on the new state */ switch (new_state) { case CAN_STATE_ERROR_ACTIVE: dev_dbg(dev->dev.parent, "Error Active\n"); netdev_dbg(dev, "Error Active\n"); cf->can_id |= CAN_ERR_PROT; cf->data[2] = CAN_ERR_PROT_ACTIVE; break; Loading Loading @@ -614,7 +610,7 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) /* transmission complete interrupt */ if (reg_iflag1 & (1 << FLEXCAN_TX_BUF_ID)) { /* tx_bytes is incremented in flexcan_start_xmit */ stats->tx_bytes += can_get_echo_skb(dev, 0); stats->tx_packets++; flexcan_write((1 << FLEXCAN_TX_BUF_ID), ®s->iflag1); netif_wake_queue(dev); Loading Loading @@ -653,11 +649,11 @@ static void flexcan_set_bittiming(struct net_device *dev) if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) reg |= FLEXCAN_CTRL_SMP; dev_info(dev->dev.parent, "writing ctrl=0x%08x\n", reg); netdev_info(dev, "writing ctrl=0x%08x\n", reg); flexcan_write(reg, ®s->ctrl); /* print chip status */ dev_dbg(dev->dev.parent, "%s: mcr=0x%08x ctrl=0x%08x\n", __func__, netdev_dbg(dev, "%s: mcr=0x%08x ctrl=0x%08x\n", __func__, flexcan_read(®s->mcr), flexcan_read(®s->ctrl)); } Loading @@ -684,8 +680,7 @@ static int flexcan_chip_start(struct net_device *dev) reg_mcr = flexcan_read(®s->mcr); if (reg_mcr & FLEXCAN_MCR_SOFTRST) { dev_err(dev->dev.parent, "Failed to softreset can module (mcr=0x%08x)\n", netdev_err(dev, "Failed to softreset can module (mcr=0x%08x)\n", reg_mcr); err = -ENODEV; goto out; Loading @@ -702,13 +697,14 @@ static int flexcan_chip_start(struct net_device *dev) * only supervisor access * enable warning int * choose format C * disable local echo * */ reg_mcr = flexcan_read(®s->mcr); reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_FEN | FLEXCAN_MCR_HALT | FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN | FLEXCAN_MCR_IDAM_C; dev_dbg(dev->dev.parent, "%s: writing mcr=0x%08x", __func__, reg_mcr); FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS; netdev_dbg(dev, "%s: writing mcr=0x%08x", __func__, reg_mcr); flexcan_write(reg_mcr, ®s->mcr); /* Loading @@ -734,7 +730,7 @@ static int flexcan_chip_start(struct net_device *dev) /* save for later use */ priv->reg_ctrl_default = reg_ctrl; dev_dbg(dev->dev.parent, "%s: writing ctrl=0x%08x", __func__, reg_ctrl); netdev_dbg(dev, "%s: writing ctrl=0x%08x", __func__, reg_ctrl); flexcan_write(reg_ctrl, ®s->ctrl); for (i = 0; i < ARRAY_SIZE(regs->cantxfg); i++) { Loading Loading @@ -766,8 +762,8 @@ static int flexcan_chip_start(struct net_device *dev) flexcan_write(FLEXCAN_IFLAG_DEFAULT, ®s->imask1); /* print chip status */ dev_dbg(dev->dev.parent, "%s: reading mcr=0x%08x ctrl=0x%08x\n", __func__, flexcan_read(®s->mcr), flexcan_read(®s->ctrl)); netdev_dbg(dev, "%s: reading mcr=0x%08x ctrl=0x%08x\n", __func__, flexcan_read(®s->mcr), flexcan_read(®s->ctrl)); return 0; Loading Loading @@ -905,8 +901,7 @@ static int __devinit register_flexcandev(struct net_device *dev) */ reg = flexcan_read(®s->mcr); if (!(reg & FLEXCAN_MCR_FEN)) { dev_err(dev->dev.parent, "Could not enable RX FIFO, unsupported core\n"); netdev_err(dev, "Could not enable RX FIFO, unsupported core\n"); err = -ENODEV; goto out; } Loading Loading @@ -975,7 +970,7 @@ static int __devinit flexcan_probe(struct platform_device *pdev) goto failed_map; } dev = alloc_candev(sizeof(struct flexcan_priv), 0); dev = alloc_candev(sizeof(struct flexcan_priv), 1); if (!dev) { err = -ENOMEM; goto failed_alloc; Loading @@ -983,7 +978,7 @@ static int __devinit flexcan_probe(struct platform_device *pdev) dev->netdev_ops = &flexcan_netdev_ops; dev->irq = irq; dev->flags |= IFF_ECHO; /* we support local echo in hardware */ dev->flags |= IFF_ECHO; priv = netdev_priv(dev); priv->can.clock.freq = clock_freq; Loading
drivers/net/can/mcp251x.c +1 −2 Original line number Diff line number Diff line Loading @@ -712,8 +712,7 @@ static void mcp251x_error_skb(struct net_device *net, int can_id, int data1) frame->data[1] = data1; netif_rx_ni(skb); } else { dev_err(&net->dev, "cannot allocate error skb\n"); netdev_err(net, "cannot allocate error skb\n"); } } Loading