mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-27 06:34:11 +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);
|
||||
|
||||
if (!netif_running(elm->dev))
|
||||
if (!netif_running(elm->dev)) {
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Queue for NAPI pickup.
|
||||
* rx-offload will update stats and LEDs for us.
|
||||
|
@ -264,22 +264,24 @@ static int cc770_isa_probe(struct platform_device *pdev)
|
||||
if (err) {
|
||||
dev_err(&pdev->dev,
|
||||
"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",
|
||||
priv->reg_base, dev->irq);
|
||||
return 0;
|
||||
|
||||
exit_unmap:
|
||||
exit_free:
|
||||
free_cc770dev(dev);
|
||||
exit_unmap:
|
||||
if (mem[idx])
|
||||
iounmap(base);
|
||||
exit_release:
|
||||
exit_release:
|
||||
if (mem[idx])
|
||||
release_mem_region(mem[idx], iosize);
|
||||
else
|
||||
release_region(port[idx], iosize);
|
||||
exit:
|
||||
exit:
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -1909,7 +1909,7 @@ int m_can_class_get_clocks(struct m_can_classdev *cdev)
|
||||
cdev->hclk = devm_clk_get(cdev->dev, "hclk");
|
||||
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");
|
||||
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);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto err_free_dev;
|
||||
|
||||
mcan_class->dev = &pci->dev;
|
||||
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);
|
||||
if (ret)
|
||||
goto err;
|
||||
goto err_free_irq;
|
||||
|
||||
/* Enable interrupt control at CAN wrapper IP */
|
||||
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;
|
||||
|
||||
err:
|
||||
err_free_irq:
|
||||
pci_free_irq_vectors(pci);
|
||||
err_free_dev:
|
||||
m_can_class_free_dev(mcan_class->net);
|
||||
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);
|
||||
|
||||
m_can_class_unregister(mcan_class);
|
||||
m_can_class_free_dev(mcan_class->net);
|
||||
pci_free_irq_vectors(pci);
|
||||
}
|
||||
|
||||
|
@ -202,22 +202,24 @@ static int sja1000_isa_probe(struct platform_device *pdev)
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "registering %s failed (err=%d)\n",
|
||||
DRV_NAME, err);
|
||||
goto exit_unmap;
|
||||
goto exit_free;
|
||||
}
|
||||
|
||||
dev_info(&pdev->dev, "%s device registered (reg_base=0x%p, irq=%d)\n",
|
||||
DRV_NAME, priv->reg_base, dev->irq);
|
||||
return 0;
|
||||
|
||||
exit_unmap:
|
||||
exit_free:
|
||||
free_sja1000dev(dev);
|
||||
exit_unmap:
|
||||
if (mem[idx])
|
||||
iounmap(base);
|
||||
exit_release:
|
||||
exit_release:
|
||||
if (mem[idx])
|
||||
release_mem_region(mem[idx], iosize);
|
||||
else
|
||||
release_region(port[idx], iosize);
|
||||
exit:
|
||||
exit:
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -2091,8 +2091,11 @@ static int es58x_init_netdev(struct es58x_device *es58x_dev, int channel_idx)
|
||||
netdev->dev_port = channel_idx;
|
||||
|
||||
ret = register_candev(netdev);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
es58x_dev->netdev[channel_idx] = NULL;
|
||||
free_candev(netdev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
netdev_queue_set_dql_min_limit(netdev_get_tx_queue(netdev, 0),
|
||||
es58x_dev->param->dql_min_limit);
|
||||
|
@ -47,6 +47,10 @@
|
||||
#define MCBA_VER_REQ_USB 1
|
||||
#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_DLC_MASK 0xf
|
||||
#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;
|
||||
}
|
||||
|
||||
if (msg->termination_state)
|
||||
if (msg->termination_state == MCBA_VER_TERMINATION_ON)
|
||||
priv->can.termination = MCBA_TERMINATION_ENABLED;
|
||||
else
|
||||
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)
|
||||
usb_msg.termination = 1;
|
||||
usb_msg.termination = MCBA_VER_TERMINATION_ON;
|
||||
else
|
||||
usb_msg.termination = 0;
|
||||
usb_msg.termination = MCBA_VER_TERMINATION_OFF;
|
||||
|
||||
mcba_usb_xmit_cmd(priv, (struct mcba_usb_msg *)&usb_msg);
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
#define OCR_MODE_TEST 0x01
|
||||
#define OCR_MODE_NORMAL 0x02
|
||||
#define OCR_MODE_CLOCK 0x03
|
||||
#define OCR_MODE_MASK 0x07
|
||||
#define OCR_MODE_MASK 0x03
|
||||
#define OCR_TX0_INVERT 0x04
|
||||
#define OCR_TX0_PULLDOWN 0x08
|
||||
#define OCR_TX0_PULLUP 0x10
|
||||
|
Loading…
Reference in New Issue
Block a user