mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-28 07:04:00 +08:00
linux-can-fixes-for-6.1-20221124
-----BEGIN PGP SIGNATURE----- iQFHBAABCgAxFiEEBsvAIBsPu6mG7thcrX5LkNig010FAmN/yk4THG1rbEBwZW5n dXRyb25peC5kZQAKCRCtfkuQ2KDTXQczB/9FOPG8zwvxRxaXm44qPnPULQ8VKZUS rZIdEd/SStU3Zfq9RM7hYKutsBbbizyVJy/dOXaBp8Oks/zgRhAzUFvz/oCKsIS7 OB8Yv/RCbsmI/zrqZU8AEANB+z9THfjS5yqf9ERfPRYLx8/ftxdIxpPm1iY/qzG/ KqLPPzVWQrrNhDoVXb1GsMwzFUEtpVdcch7oy4GberNx919MKRlM5dTy9pGYTLsB vWhZPKhxh18POPDwCCfE4hmErqCQ9dFXKnhR5sUuvdoXLqUxAI9s7AbNOTbtYUDH +5sNrg2noZ09Rr7sZj/clW9EnRsdUFHRtwSQAV2NhL5DQySkuov3p6Tb =d3sT -----END PGP SIGNATURE----- Merge tag 'linux-can-fixes-for-6.1-20221124' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can Marc Kleine-Budde says: ==================== linux-can-fixes-for-6.1-20221124 this is a pull request of 8 patches for net/master. Ziyang Xuan contributes a patch for the can327, fixing a potential SKB leak when the netdev is down. Heiko Schocher's patch for the sja1000 driver fixes the width of the definition of the OCR_MODE_MASK. Zhang Changzhong contributes 4 patches. In the sja1000_isa, cc770, and m_can_pci drivers the error path in the probe() function and in case of the etas_es58x a function that is called by probe() are fixed. Jiasheng Jiang add a missing check for the return value of the devm_clk_get() in the m_can driver. Yasushi SHOJI's patch for the mcba_usb fixes setting of the external termination resistor. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
8d1c37e6aa
@ -263,8 +263,10 @@ static void can327_feed_frame_to_netdev(struct can327 *elm, struct sk_buff *skb)
|
|||||||
{
|
{
|
||||||
lockdep_assert_held(&elm->lock);
|
lockdep_assert_held(&elm->lock);
|
||||||
|
|
||||||
if (!netif_running(elm->dev))
|
if (!netif_running(elm->dev)) {
|
||||||
|
kfree_skb(skb);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Queue for NAPI pickup.
|
/* Queue for NAPI pickup.
|
||||||
* rx-offload will update stats and LEDs for us.
|
* rx-offload will update stats and LEDs for us.
|
||||||
|
@ -264,13 +264,15 @@ static int cc770_isa_probe(struct platform_device *pdev)
|
|||||||
if (err) {
|
if (err) {
|
||||||
dev_err(&pdev->dev,
|
dev_err(&pdev->dev,
|
||||||
"couldn't register device (err=%d)\n", err);
|
"couldn't register device (err=%d)\n", err);
|
||||||
goto exit_unmap;
|
goto exit_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_info(&pdev->dev, "device registered (reg_base=0x%p, irq=%d)\n",
|
dev_info(&pdev->dev, "device registered (reg_base=0x%p, irq=%d)\n",
|
||||||
priv->reg_base, dev->irq);
|
priv->reg_base, dev->irq);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
exit_free:
|
||||||
|
free_cc770dev(dev);
|
||||||
exit_unmap:
|
exit_unmap:
|
||||||
if (mem[idx])
|
if (mem[idx])
|
||||||
iounmap(base);
|
iounmap(base);
|
||||||
|
@ -1909,7 +1909,7 @@ int m_can_class_get_clocks(struct m_can_classdev *cdev)
|
|||||||
cdev->hclk = devm_clk_get(cdev->dev, "hclk");
|
cdev->hclk = devm_clk_get(cdev->dev, "hclk");
|
||||||
cdev->cclk = devm_clk_get(cdev->dev, "cclk");
|
cdev->cclk = devm_clk_get(cdev->dev, "cclk");
|
||||||
|
|
||||||
if (IS_ERR(cdev->cclk)) {
|
if (IS_ERR(cdev->hclk) || IS_ERR(cdev->cclk)) {
|
||||||
dev_err(cdev->dev, "no clock found\n");
|
dev_err(cdev->dev, "no clock found\n");
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
}
|
}
|
||||||
|
@ -120,7 +120,7 @@ static int m_can_pci_probe(struct pci_dev *pci, const struct pci_device_id *id)
|
|||||||
|
|
||||||
ret = pci_alloc_irq_vectors(pci, 1, 1, PCI_IRQ_ALL_TYPES);
|
ret = pci_alloc_irq_vectors(pci, 1, 1, PCI_IRQ_ALL_TYPES);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
goto err_free_dev;
|
||||||
|
|
||||||
mcan_class->dev = &pci->dev;
|
mcan_class->dev = &pci->dev;
|
||||||
mcan_class->net->irq = pci_irq_vector(pci, 0);
|
mcan_class->net->irq = pci_irq_vector(pci, 0);
|
||||||
@ -132,7 +132,7 @@ static int m_can_pci_probe(struct pci_dev *pci, const struct pci_device_id *id)
|
|||||||
|
|
||||||
ret = m_can_class_register(mcan_class);
|
ret = m_can_class_register(mcan_class);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err_free_irq;
|
||||||
|
|
||||||
/* Enable interrupt control at CAN wrapper IP */
|
/* Enable interrupt control at CAN wrapper IP */
|
||||||
writel(0x1, base + CTL_CSR_INT_CTL_OFFSET);
|
writel(0x1, base + CTL_CSR_INT_CTL_OFFSET);
|
||||||
@ -144,8 +144,10 @@ static int m_can_pci_probe(struct pci_dev *pci, const struct pci_device_id *id)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err:
|
err_free_irq:
|
||||||
pci_free_irq_vectors(pci);
|
pci_free_irq_vectors(pci);
|
||||||
|
err_free_dev:
|
||||||
|
m_can_class_free_dev(mcan_class->net);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,6 +163,7 @@ static void m_can_pci_remove(struct pci_dev *pci)
|
|||||||
writel(0x0, priv->base + CTL_CSR_INT_CTL_OFFSET);
|
writel(0x0, priv->base + CTL_CSR_INT_CTL_OFFSET);
|
||||||
|
|
||||||
m_can_class_unregister(mcan_class);
|
m_can_class_unregister(mcan_class);
|
||||||
|
m_can_class_free_dev(mcan_class->net);
|
||||||
pci_free_irq_vectors(pci);
|
pci_free_irq_vectors(pci);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,13 +202,15 @@ static int sja1000_isa_probe(struct platform_device *pdev)
|
|||||||
if (err) {
|
if (err) {
|
||||||
dev_err(&pdev->dev, "registering %s failed (err=%d)\n",
|
dev_err(&pdev->dev, "registering %s failed (err=%d)\n",
|
||||||
DRV_NAME, err);
|
DRV_NAME, err);
|
||||||
goto exit_unmap;
|
goto exit_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_info(&pdev->dev, "%s device registered (reg_base=0x%p, irq=%d)\n",
|
dev_info(&pdev->dev, "%s device registered (reg_base=0x%p, irq=%d)\n",
|
||||||
DRV_NAME, priv->reg_base, dev->irq);
|
DRV_NAME, priv->reg_base, dev->irq);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
exit_free:
|
||||||
|
free_sja1000dev(dev);
|
||||||
exit_unmap:
|
exit_unmap:
|
||||||
if (mem[idx])
|
if (mem[idx])
|
||||||
iounmap(base);
|
iounmap(base);
|
||||||
|
@ -2091,8 +2091,11 @@ static int es58x_init_netdev(struct es58x_device *es58x_dev, int channel_idx)
|
|||||||
netdev->dev_port = channel_idx;
|
netdev->dev_port = channel_idx;
|
||||||
|
|
||||||
ret = register_candev(netdev);
|
ret = register_candev(netdev);
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
es58x_dev->netdev[channel_idx] = NULL;
|
||||||
|
free_candev(netdev);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
netdev_queue_set_dql_min_limit(netdev_get_tx_queue(netdev, 0),
|
netdev_queue_set_dql_min_limit(netdev_get_tx_queue(netdev, 0),
|
||||||
es58x_dev->param->dql_min_limit);
|
es58x_dev->param->dql_min_limit);
|
||||||
|
@ -47,6 +47,10 @@
|
|||||||
#define MCBA_VER_REQ_USB 1
|
#define MCBA_VER_REQ_USB 1
|
||||||
#define MCBA_VER_REQ_CAN 2
|
#define MCBA_VER_REQ_CAN 2
|
||||||
|
|
||||||
|
/* Drive the CAN_RES signal LOW "0" to activate R24 and R25 */
|
||||||
|
#define MCBA_VER_TERMINATION_ON 0
|
||||||
|
#define MCBA_VER_TERMINATION_OFF 1
|
||||||
|
|
||||||
#define MCBA_SIDL_EXID_MASK 0x8
|
#define MCBA_SIDL_EXID_MASK 0x8
|
||||||
#define MCBA_DLC_MASK 0xf
|
#define MCBA_DLC_MASK 0xf
|
||||||
#define MCBA_DLC_RTR_MASK 0x40
|
#define MCBA_DLC_RTR_MASK 0x40
|
||||||
@ -463,7 +467,7 @@ static void mcba_usb_process_ka_usb(struct mcba_priv *priv,
|
|||||||
priv->usb_ka_first_pass = false;
|
priv->usb_ka_first_pass = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg->termination_state)
|
if (msg->termination_state == MCBA_VER_TERMINATION_ON)
|
||||||
priv->can.termination = MCBA_TERMINATION_ENABLED;
|
priv->can.termination = MCBA_TERMINATION_ENABLED;
|
||||||
else
|
else
|
||||||
priv->can.termination = MCBA_TERMINATION_DISABLED;
|
priv->can.termination = MCBA_TERMINATION_DISABLED;
|
||||||
@ -785,9 +789,9 @@ static int mcba_set_termination(struct net_device *netdev, u16 term)
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (term == MCBA_TERMINATION_ENABLED)
|
if (term == MCBA_TERMINATION_ENABLED)
|
||||||
usb_msg.termination = 1;
|
usb_msg.termination = MCBA_VER_TERMINATION_ON;
|
||||||
else
|
else
|
||||||
usb_msg.termination = 0;
|
usb_msg.termination = MCBA_VER_TERMINATION_OFF;
|
||||||
|
|
||||||
mcba_usb_xmit_cmd(priv, (struct mcba_usb_msg *)&usb_msg);
|
mcba_usb_xmit_cmd(priv, (struct mcba_usb_msg *)&usb_msg);
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#define OCR_MODE_TEST 0x01
|
#define OCR_MODE_TEST 0x01
|
||||||
#define OCR_MODE_NORMAL 0x02
|
#define OCR_MODE_NORMAL 0x02
|
||||||
#define OCR_MODE_CLOCK 0x03
|
#define OCR_MODE_CLOCK 0x03
|
||||||
#define OCR_MODE_MASK 0x07
|
#define OCR_MODE_MASK 0x03
|
||||||
#define OCR_TX0_INVERT 0x04
|
#define OCR_TX0_INVERT 0x04
|
||||||
#define OCR_TX0_PULLDOWN 0x08
|
#define OCR_TX0_PULLDOWN 0x08
|
||||||
#define OCR_TX0_PULLUP 0x10
|
#define OCR_TX0_PULLUP 0x10
|
||||||
|
Loading…
Reference in New Issue
Block a user