|
@@ -712,22 +712,31 @@ static int c_can_set_mode(struct net_device *dev, enum can_mode mode)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static int c_can_get_berr_counter(const struct net_device *dev,
|
|
|
|
- struct can_berr_counter *bec)
|
|
|
|
|
|
+static int __c_can_get_berr_counter(const struct net_device *dev,
|
|
|
|
+ struct can_berr_counter *bec)
|
|
{
|
|
{
|
|
unsigned int reg_err_counter;
|
|
unsigned int reg_err_counter;
|
|
struct c_can_priv *priv = netdev_priv(dev);
|
|
struct c_can_priv *priv = netdev_priv(dev);
|
|
|
|
|
|
- c_can_pm_runtime_get_sync(priv);
|
|
|
|
-
|
|
|
|
reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
|
|
reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
|
|
bec->rxerr = (reg_err_counter & ERR_CNT_REC_MASK) >>
|
|
bec->rxerr = (reg_err_counter & ERR_CNT_REC_MASK) >>
|
|
ERR_CNT_REC_SHIFT;
|
|
ERR_CNT_REC_SHIFT;
|
|
bec->txerr = reg_err_counter & ERR_CNT_TEC_MASK;
|
|
bec->txerr = reg_err_counter & ERR_CNT_TEC_MASK;
|
|
|
|
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int c_can_get_berr_counter(const struct net_device *dev,
|
|
|
|
+ struct can_berr_counter *bec)
|
|
|
|
+{
|
|
|
|
+ struct c_can_priv *priv = netdev_priv(dev);
|
|
|
|
+ int err;
|
|
|
|
+
|
|
|
|
+ c_can_pm_runtime_get_sync(priv);
|
|
|
|
+ err = __c_can_get_berr_counter(dev, bec);
|
|
c_can_pm_runtime_put_sync(priv);
|
|
c_can_pm_runtime_put_sync(priv);
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return err;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -754,6 +763,7 @@ static void c_can_do_tx(struct net_device *dev)
|
|
if (!(val & (1 << (msg_obj_no - 1)))) {
|
|
if (!(val & (1 << (msg_obj_no - 1)))) {
|
|
can_get_echo_skb(dev,
|
|
can_get_echo_skb(dev,
|
|
msg_obj_no - C_CAN_MSG_OBJ_TX_FIRST);
|
|
msg_obj_no - C_CAN_MSG_OBJ_TX_FIRST);
|
|
|
|
+ c_can_object_get(dev, 0, msg_obj_no, IF_COMM_ALL);
|
|
stats->tx_bytes += priv->read_reg(priv,
|
|
stats->tx_bytes += priv->read_reg(priv,
|
|
C_CAN_IFACE(MSGCTRL_REG, 0))
|
|
C_CAN_IFACE(MSGCTRL_REG, 0))
|
|
& IF_MCONT_DLC_MASK;
|
|
& IF_MCONT_DLC_MASK;
|
|
@@ -872,7 +882,7 @@ static int c_can_handle_state_change(struct net_device *dev,
|
|
if (unlikely(!skb))
|
|
if (unlikely(!skb))
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- c_can_get_berr_counter(dev, &bec);
|
|
|
|
|
|
+ __c_can_get_berr_counter(dev, &bec);
|
|
reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
|
|
reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
|
|
rx_err_passive = (reg_err_counter & ERR_CNT_RP_MASK) >>
|
|
rx_err_passive = (reg_err_counter & ERR_CNT_RP_MASK) >>
|
|
ERR_CNT_RP_SHIFT;
|
|
ERR_CNT_RP_SHIFT;
|