mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-07 14:32:23 +00:00
NXP/FSL SoC driver updates for v6.5
- fsl-mc: Make remove function return void - QE USB: fix build issue caused by missing dependency -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEhb3UXAyxp6UQ0v6khtxQDvusFVQFAmSTduQACgkQhtxQDvus FVRsWg/+KIGaiTwEOvmhysMXE0Papwo+sdy/dOonvlIuPgO5S4MeisC9XFy5JqV9 qj9keqBVeB6dw9zqJIS6PI6OiOYZGrrkQIU5m/r36jqFBdUw0Ys8JAbZTFlFQa4X uwceN8jK1l0pdC+fmAf4SrVg9U1/3MvMZNsWKmvgfHKTSUNIalXvXI6uI2ohGBsr DV0/epPA/rvy6ffNQebXzudbXgPZL8p7V7LDUyCGxdsndIvZ25+JMZ63XQWbz/Qi B1Lkr9jiIn+GLDbemy846MK5tMDDJRLPss4Pk6rEbF+PDaWMhxMxfbRFHekPCbzV MrYrTRUrTNj4kz4J1QvkX0N6Kb2PbQsfNaN6w0lP/jdAgCRx+fbh1Q83PjMHp7ov ET3n0sX1JPmgAvMNRVNzbszX4vo5WlRvEC9nXyBUrTv/1jlt89oPtruiyCY2Ym0e nWv7UWUJuuiJIrSWVol3Egf9FHibfLGlLNwpYHZQnSAi53AXmqocIxiWEVvXUd6R 3xmAGEItrwojpV+DHUNGRVGUzDqHaPguzItnTuDTqXJ9lwKPk/PdO7bSHnewxNRi 9RQpP7AoU8qtRxf0i5aWCe5TjqQJeSEIN0t7jF6IZ8Is1rfaRfvIEDmML8WArSj6 nUh5LaM5Qvg9l2RMZoDa0n5hGsvpnIigRcx2dN6k46jyVG4lqeg= =cBX5 -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEiK/NIGsWEZVxh/FrYKtH/8kJUicFAmSbTIoACgkQYKtH/8kJ UieZlA/+IOYfWVN7hTsZ22LUL5c0GWvUTsacD+wf2YlXC7ioJ0RSzL+yCdbYGbGw 62di/ZsiUFaXhYszNyAW/w3qFgal578OiyR79lkadESizJGexScejATPph/5J+JI XT5JDCXMwAYN78uoOpEDoTjC8Upv1mOoMZBwMCx1j3K3dVkkPI+/Fe9PuGRn3Njs Uc5OBtvNBVf0nulHupS3d52s6jWEL7TX6FZCdPyWQ2A4rYunze46cOXtBBEi+x9A +jZ4pR382zKFII2e2rtIp7P0q896vnLbuVaetEZUIrPKKFWANXfhoFmzl0aUQCgP Lqyui78CYFabKddkVWWd/JqQy8ZRzPWkkHtW6bW31DPZWzlOXjZds8tykP45ekeh Q6wTvqpZulgLgl7J8dE029go9N5hc2y/fuGExXJh6uaMUhpexY3OwBZ9DuJBAbwu mDpKLaDBGFfF21r903usumRArQPC/Y0V6cJSmb7Np9LnUhnef1jT2f1+cwL1Q7M5 5VhxsfJo4GhtCljZ8E3CZ4rrB3NWwggRDm71MNiY9UpLwqcZbYqdtEcvwdq37r0/ K8av+uzLWE/RTeA+1PXcERMXmylWrKy0BmcGYwjOkALje+v5NNgJwdwxG2U1yWcc VEjf/5bynMkNwNt3zTEkstN1chcafJTw4uqOJoqrh+55NGZHNpw= =E30d -----END PGP SIGNATURE----- Merge tag 'soc-fsl-next-v6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/leo/linux into soc/drivers NXP/FSL SoC driver updates for v6.5 - fsl-mc: Make remove function return void - QE USB: fix build issue caused by missing dependency * tag 'soc-fsl-next-v6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/leo/linux: bus: fsl-mc: fsl-mc-allocator: Drop a write-only variable bus: fsl-mc: fsl-mc-allocator: Initialize mc_bus_dev before use soc/fsl/qe: fix usb.c build errors bus: fsl-mc: Make remove function return void soc: fsl: dpio: Suppress duplicated error reporting on device remove bus: fsl-mc: fsl-mc-allocator: Improve error reporting bus: fsl-mc: fsl-mc-allocator: Drop if block with always wrong condition bus: fsl-mc: dprc: Push down error message from fsl_mc_driver_remove() bus: fsl-mc: Only warn once about errors on device unbind Link: https://lore.kernel.org/r/20230621222503.12402-1-leoyang.li@nxp.com Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
356fa49759
@ -835,15 +835,14 @@ EXPORT_SYMBOL_GPL(dprc_cleanup);
|
||||
* It tears down the interrupts that were configured for the DPRC device.
|
||||
* It destroys the interrupt pool associated with this MC bus.
|
||||
*/
|
||||
static int dprc_remove(struct fsl_mc_device *mc_dev)
|
||||
static void dprc_remove(struct fsl_mc_device *mc_dev)
|
||||
{
|
||||
struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_dev);
|
||||
|
||||
if (!is_fsl_mc_bus_dprc(mc_dev))
|
||||
return -EINVAL;
|
||||
|
||||
if (!mc_bus->irq_resources)
|
||||
return -EINVAL;
|
||||
if (!mc_bus->irq_resources) {
|
||||
dev_err(&mc_dev->dev, "No irq resources, so unbinding the device failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (dev_get_msi_domain(&mc_dev->dev))
|
||||
dprc_teardown_irq(mc_dev);
|
||||
@ -853,7 +852,6 @@ static int dprc_remove(struct fsl_mc_device *mc_dev)
|
||||
dprc_cleanup(mc_dev);
|
||||
|
||||
dev_info(&mc_dev->dev, "DPRC device unbound from driver");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct fsl_mc_device_id match_id_table[] = {
|
||||
|
@ -103,26 +103,32 @@ static int __must_check fsl_mc_resource_pool_remove_device(struct fsl_mc_device
|
||||
struct fsl_mc_resource *resource;
|
||||
int error = -EINVAL;
|
||||
|
||||
if (!fsl_mc_is_allocatable(mc_dev))
|
||||
goto out;
|
||||
|
||||
resource = mc_dev->resource;
|
||||
if (!resource || resource->data != mc_dev)
|
||||
goto out;
|
||||
|
||||
mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
|
||||
mc_bus = to_fsl_mc_bus(mc_bus_dev);
|
||||
res_pool = resource->parent_pool;
|
||||
if (res_pool != &mc_bus->resource_pools[resource->type])
|
||||
|
||||
resource = mc_dev->resource;
|
||||
if (!resource || resource->data != mc_dev) {
|
||||
dev_err(&mc_bus_dev->dev, "resource mismatch\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
res_pool = resource->parent_pool;
|
||||
if (res_pool != &mc_bus->resource_pools[resource->type]) {
|
||||
dev_err(&mc_bus_dev->dev, "pool mismatch\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
mutex_lock(&res_pool->mutex);
|
||||
|
||||
if (res_pool->max_count <= 0)
|
||||
if (res_pool->max_count <= 0) {
|
||||
dev_err(&mc_bus_dev->dev, "max_count underflow\n");
|
||||
goto out_unlock;
|
||||
}
|
||||
if (res_pool->free_count <= 0 ||
|
||||
res_pool->free_count > res_pool->max_count)
|
||||
res_pool->free_count > res_pool->max_count) {
|
||||
dev_err(&mc_bus_dev->dev, "free_count mismatch\n");
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the device is currently allocated, its resource is not
|
||||
@ -557,12 +563,9 @@ static void fsl_mc_cleanup_resource_pool(struct fsl_mc_device *mc_bus_dev,
|
||||
struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
|
||||
struct fsl_mc_resource_pool *res_pool =
|
||||
&mc_bus->resource_pools[pool_type];
|
||||
int free_count = 0;
|
||||
|
||||
list_for_each_entry_safe(resource, next, &res_pool->free_list, node) {
|
||||
free_count++;
|
||||
list_for_each_entry_safe(resource, next, &res_pool->free_list, node)
|
||||
devm_kfree(&mc_bus_dev->dev, resource);
|
||||
}
|
||||
}
|
||||
|
||||
void fsl_mc_cleanup_all_resource_pools(struct fsl_mc_device *mc_bus_dev)
|
||||
@ -609,22 +612,18 @@ static int fsl_mc_allocator_probe(struct fsl_mc_device *mc_dev)
|
||||
* fsl_mc_allocator_remove - callback invoked when an allocatable device is
|
||||
* being removed from the system
|
||||
*/
|
||||
static int fsl_mc_allocator_remove(struct fsl_mc_device *mc_dev)
|
||||
static void fsl_mc_allocator_remove(struct fsl_mc_device *mc_dev)
|
||||
{
|
||||
int error;
|
||||
|
||||
if (!fsl_mc_is_allocatable(mc_dev))
|
||||
return -EINVAL;
|
||||
|
||||
if (mc_dev->resource) {
|
||||
error = fsl_mc_resource_pool_remove_device(mc_dev);
|
||||
if (error < 0)
|
||||
return error;
|
||||
return;
|
||||
}
|
||||
|
||||
dev_dbg(&mc_dev->dev,
|
||||
"Allocatable fsl-mc device unbound from fsl_mc_allocator driver");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct fsl_mc_device_id match_id_table[] = {
|
||||
|
@ -454,13 +454,8 @@ static int fsl_mc_driver_remove(struct device *dev)
|
||||
{
|
||||
struct fsl_mc_driver *mc_drv = to_fsl_mc_driver(dev->driver);
|
||||
struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
|
||||
int error;
|
||||
|
||||
error = mc_drv->remove(mc_dev);
|
||||
if (error < 0) {
|
||||
dev_err(dev, "%s failed: %d\n", __func__, error);
|
||||
return error;
|
||||
}
|
||||
mc_drv->remove(mc_dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -5402,7 +5402,7 @@ static int dpaa2_caam_probe(struct fsl_mc_device *dpseci_dev)
|
||||
return err;
|
||||
}
|
||||
|
||||
static int __cold dpaa2_caam_remove(struct fsl_mc_device *ls_dev)
|
||||
static void __cold dpaa2_caam_remove(struct fsl_mc_device *ls_dev)
|
||||
{
|
||||
struct device *dev;
|
||||
struct dpaa2_caam_priv *priv;
|
||||
@ -5443,8 +5443,6 @@ static int __cold dpaa2_caam_remove(struct fsl_mc_device *ls_dev)
|
||||
free_percpu(priv->ppriv);
|
||||
fsl_mc_portal_free(priv->mc_io);
|
||||
kmem_cache_destroy(qi_cache);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dpaa2_caam_enqueue(struct device *dev, struct caam_request *req)
|
||||
|
@ -765,7 +765,7 @@ static int dpaa2_qdma_probe(struct fsl_mc_device *dpdmai_dev)
|
||||
return err;
|
||||
}
|
||||
|
||||
static int dpaa2_qdma_remove(struct fsl_mc_device *ls_dev)
|
||||
static void dpaa2_qdma_remove(struct fsl_mc_device *ls_dev)
|
||||
{
|
||||
struct dpaa2_qdma_engine *dpaa2_qdma;
|
||||
struct dpaa2_qdma_priv *priv;
|
||||
@ -787,8 +787,6 @@ static int dpaa2_qdma_remove(struct fsl_mc_device *ls_dev)
|
||||
dma_async_device_unregister(&dpaa2_qdma->dma_dev);
|
||||
kfree(priv);
|
||||
kfree(dpaa2_qdma);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dpaa2_qdma_shutdown(struct fsl_mc_device *ls_dev)
|
||||
|
@ -5025,7 +5025,7 @@ static int dpaa2_eth_probe(struct fsl_mc_device *dpni_dev)
|
||||
return err;
|
||||
}
|
||||
|
||||
static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev)
|
||||
static void dpaa2_eth_remove(struct fsl_mc_device *ls_dev)
|
||||
{
|
||||
struct device *dev;
|
||||
struct net_device *net_dev;
|
||||
@ -5073,8 +5073,6 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev)
|
||||
dev_dbg(net_dev->dev.parent, "Removed interface %s\n", net_dev->name);
|
||||
|
||||
free_netdev(net_dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct fsl_mc_device_id dpaa2_eth_match_id_table[] = {
|
||||
|
@ -219,7 +219,7 @@ static int dpaa2_ptp_probe(struct fsl_mc_device *mc_dev)
|
||||
return err;
|
||||
}
|
||||
|
||||
static int dpaa2_ptp_remove(struct fsl_mc_device *mc_dev)
|
||||
static void dpaa2_ptp_remove(struct fsl_mc_device *mc_dev)
|
||||
{
|
||||
struct device *dev = &mc_dev->dev;
|
||||
struct ptp_qoriq *ptp_qoriq;
|
||||
@ -232,8 +232,6 @@ static int dpaa2_ptp_remove(struct fsl_mc_device *mc_dev)
|
||||
fsl_mc_free_irqs(mc_dev);
|
||||
dprtc_close(mc_dev->mc_io, 0, mc_dev->mc_handle);
|
||||
fsl_mc_portal_free(mc_dev->mc_io);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct fsl_mc_device_id dpaa2_ptp_match_id_table[] = {
|
||||
|
@ -3221,7 +3221,7 @@ static void dpaa2_switch_teardown(struct fsl_mc_device *sw_dev)
|
||||
dev_warn(dev, "dpsw_close err %d\n", err);
|
||||
}
|
||||
|
||||
static int dpaa2_switch_remove(struct fsl_mc_device *sw_dev)
|
||||
static void dpaa2_switch_remove(struct fsl_mc_device *sw_dev)
|
||||
{
|
||||
struct ethsw_port_priv *port_priv;
|
||||
struct ethsw_core *ethsw;
|
||||
@ -3252,8 +3252,6 @@ static int dpaa2_switch_remove(struct fsl_mc_device *sw_dev)
|
||||
kfree(ethsw);
|
||||
|
||||
dev_set_drvdata(dev, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dpaa2_switch_probe_port(struct ethsw_core *ethsw,
|
||||
|
@ -270,7 +270,7 @@ static void dpio_teardown_irqs(struct fsl_mc_device *dpio_dev)
|
||||
fsl_mc_free_irqs(dpio_dev);
|
||||
}
|
||||
|
||||
static int dpaa2_dpio_remove(struct fsl_mc_device *dpio_dev)
|
||||
static void dpaa2_dpio_remove(struct fsl_mc_device *dpio_dev)
|
||||
{
|
||||
struct device *dev;
|
||||
struct dpio_priv *priv;
|
||||
@ -297,14 +297,8 @@ static int dpaa2_dpio_remove(struct fsl_mc_device *dpio_dev)
|
||||
|
||||
dpio_close(dpio_dev->mc_io, 0, dpio_dev->mc_handle);
|
||||
|
||||
fsl_mc_portal_free(dpio_dev->mc_io);
|
||||
|
||||
return 0;
|
||||
|
||||
err_open:
|
||||
fsl_mc_portal_free(dpio_dev->mc_io);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static const struct fsl_mc_device_id dpaa2_dpio_match_id_table[] = {
|
||||
|
@ -62,6 +62,7 @@ config QE_TDM
|
||||
|
||||
config QE_USB
|
||||
bool
|
||||
depends on QUICC_ENGINE
|
||||
default y if USB_FSL_QE
|
||||
help
|
||||
QE USB Controller support
|
||||
|
@ -570,7 +570,7 @@ static void vfio_fsl_mc_release_dev(struct vfio_device *core_vdev)
|
||||
mutex_destroy(&vdev->igate);
|
||||
}
|
||||
|
||||
static int vfio_fsl_mc_remove(struct fsl_mc_device *mc_dev)
|
||||
static void vfio_fsl_mc_remove(struct fsl_mc_device *mc_dev)
|
||||
{
|
||||
struct device *dev = &mc_dev->dev;
|
||||
struct vfio_fsl_mc_device *vdev = dev_get_drvdata(dev);
|
||||
@ -578,7 +578,6 @@ static int vfio_fsl_mc_remove(struct fsl_mc_device *mc_dev)
|
||||
vfio_unregister_group_dev(&vdev->vdev);
|
||||
dprc_remove_devices(mc_dev, NULL, 0);
|
||||
vfio_put_device(&vdev->vdev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct vfio_device_ops vfio_fsl_mc_ops = {
|
||||
|
@ -48,7 +48,7 @@ struct fsl_mc_driver {
|
||||
struct device_driver driver;
|
||||
const struct fsl_mc_device_id *match_id_table;
|
||||
int (*probe)(struct fsl_mc_device *dev);
|
||||
int (*remove)(struct fsl_mc_device *dev);
|
||||
void (*remove)(struct fsl_mc_device *dev);
|
||||
void (*shutdown)(struct fsl_mc_device *dev);
|
||||
int (*suspend)(struct fsl_mc_device *dev, pm_message_t state);
|
||||
int (*resume)(struct fsl_mc_device *dev);
|
||||
|
Loading…
Reference in New Issue
Block a user