mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:24:45 +01:00
FSL SOC Changes for 6.16:
- Various fixes and cleanups from Ioana on fsl-mc bus driver - Other misc fixes on fsl-mc bus driver - A build fix on DPAA2 driver - Some preparation work from Kees on qbman driver - Some cleanup on FSL qe interrupt driver init -----BEGIN PGP SIGNATURE----- iJIEABYKADoWIQQQ/+b4s5DeF6zCYyNoqS/rAbjdeAUCaChUGBwcY2hyaXN0b3Bo ZS5sZXJveUBjc2dyb3VwLmV1AAoJEGipL+sBuN14P8cBAIWy+9x5gfkg7ndHDYQk 4DKYVuAC2ox4HRgQr/lAAyRzAP9zhtL/r8xjSeomn0Uk/vGbzdRNqQo5/l3vbp5i Tj8KDw== =lpqg -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmgvCN8ACgkQmmx57+YA GNmAFQ//e6MoQofsMrBvJWDOD20puXPYRJze7w34lzloAjffsU5qPDC+ggLdMogI 9HLm+Fh0QUC7z8bfjTTGKMmE2nV0+apZE227orcvTzgSq/EV0VVPCEkPXmg+I3CK 7bjP6BoTTZCZg1sxesEVnPz82Z0kGqKBSoG73pGYCw4VAkOXkbi1fFSTDGmlz1lY F6Yc54J32mTFni2IKw65wO5l2NOTGPXMUMkdjITyMjQqo8fjPfmenkp73qjBLPc2 ansDK0ULiUtSNP+jTNDOxvRPHWowiKdUnK3SQwWPpngmhWUJyvtM+IhtsKpWyuPI g8i8xS+FI+hw5I0fd9vzbzlRzSyL0c0ryqcIuWyXnhS8O5h7gvgVqlSHamp0TrQ/ ps1yTbeI0hHmcGWOHhJeNTnPal6o2zOSGqWBGxzXJ+iooAEP12xNh1/yE/BPcs+c lE39Y93I9kNvP28UptbOU3Z8Xpf9kj1hSV7W8c6alYCUcbZsuPL7qtf0cP6um/j2 NtiRfCsIT+jvwgfsiVBJtA311qN3WGiJETMpAh5COm39SqBcaLWh9tUXNDx+pvjF FuO6w78E2BWofgEAq9jxg255CKCZD7mIq1590WY4ntviZw/tqHE/gMJP0c0jQr+3 58d+NY7vLjPoF0fZpkVwNyPc9Yp3oyH0XuEZvTNb9fvSGVdHdj8= =StL6 -----END PGP SIGNATURE----- Merge tag 'soc_fsl-6.16-1' of https://github.com/chleroy/linux into soc/drivers FSL SOC Changes for 6.16: - Various fixes and cleanups from Ioana on fsl-mc bus driver - Other misc fixes on fsl-mc bus driver - A build fix on DPAA2 driver - Some preparation work from Kees on qbman driver - Some cleanup on FSL qe interrupt driver init * tag 'soc_fsl-6.16-1' of https://github.com/chleroy/linux: soc: fsl: qe: Consolidate chained IRQ handler install/remove bus: fsl-mc: Use strscpy() instead of strscpy_pad() soc: fsl: qbman: Remove const from portal->cgrs allocation type bus: fsl_mc: Fix driver_managed_dma check bus: fsl-mc: increase MC_CMD_COMPLETION_TIMEOUT_MS value bus: fsl-mc: drop useless cleanup bus: fsl-mc: add the dprc_get_mem() command to the whitelist bus: fsl-mc: fix GET/SET_TAILDROP command ids bus: fsl-mc: do not add a device-link for the UAPI used DPMCP device bus: fsl-mc: fix double-free on mc_dev soc: fsl: Do not enable DPAA2_CONSOLE by default during compile testing Link: https://lore.kernel.org/r/9e5b3e8e-3280-4ff9-915b-9a8b934bac22@csgroup.eu Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
5963edd98a
11 changed files with 38 additions and 49 deletions
|
|
@ -806,8 +806,6 @@ int dprc_cleanup(struct fsl_mc_device *mc_dev)
|
|||
dev_set_msi_domain(&mc_dev->dev, NULL);
|
||||
}
|
||||
|
||||
fsl_mc_cleanup_all_resource_pools(mc_dev);
|
||||
|
||||
/* if this step fails we cannot go further with cleanup as there is no way of
|
||||
* communicating with the firmware
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -489,7 +489,7 @@ int dprc_set_obj_irq(struct fsl_mc_io *mc_io,
|
|||
cmd_params->irq_addr = cpu_to_le64(irq_cfg->paddr);
|
||||
cmd_params->irq_num = cpu_to_le32(irq_cfg->irq_num);
|
||||
cmd_params->obj_id = cpu_to_le32(obj_id);
|
||||
strscpy_pad(cmd_params->obj_type, obj_type, 16);
|
||||
strscpy(cmd_params->obj_type, obj_type);
|
||||
|
||||
/* send command to mc*/
|
||||
return mc_send_command(mc_io, &cmd);
|
||||
|
|
@ -561,7 +561,7 @@ int dprc_get_obj_region(struct fsl_mc_io *mc_io,
|
|||
cmd_params = (struct dprc_cmd_get_obj_region *)cmd.params;
|
||||
cmd_params->obj_id = cpu_to_le32(obj_id);
|
||||
cmd_params->region_index = region_index;
|
||||
strscpy_pad(cmd_params->obj_type, obj_type, 16);
|
||||
strscpy(cmd_params->obj_type, obj_type);
|
||||
|
||||
/* send command to mc*/
|
||||
err = mc_send_command(mc_io, &cmd);
|
||||
|
|
|
|||
|
|
@ -555,27 +555,6 @@ void fsl_mc_init_all_resource_pools(struct fsl_mc_device *mc_bus_dev)
|
|||
}
|
||||
}
|
||||
|
||||
static void fsl_mc_cleanup_resource_pool(struct fsl_mc_device *mc_bus_dev,
|
||||
enum fsl_mc_pool_type pool_type)
|
||||
{
|
||||
struct fsl_mc_resource *resource;
|
||||
struct fsl_mc_resource *next;
|
||||
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];
|
||||
|
||||
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)
|
||||
{
|
||||
int pool_type;
|
||||
|
||||
for (pool_type = 0; pool_type < FSL_MC_NUM_POOL_TYPES; pool_type++)
|
||||
fsl_mc_cleanup_resource_pool(mc_bus_dev, pool_type);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsl_mc_allocator_probe - callback invoked when an allocatable device is
|
||||
* being added to the system
|
||||
|
|
|
|||
|
|
@ -139,9 +139,9 @@ static int fsl_mc_bus_uevent(const struct device *dev, struct kobj_uevent_env *e
|
|||
|
||||
static int fsl_mc_dma_configure(struct device *dev)
|
||||
{
|
||||
const struct device_driver *drv = READ_ONCE(dev->driver);
|
||||
struct device *dma_dev = dev;
|
||||
struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
|
||||
struct fsl_mc_driver *mc_drv = to_fsl_mc_driver(dev->driver);
|
||||
u32 input_id = mc_dev->icid;
|
||||
int ret;
|
||||
|
||||
|
|
@ -153,8 +153,8 @@ static int fsl_mc_dma_configure(struct device *dev)
|
|||
else
|
||||
ret = acpi_dma_configure_id(dev, DEV_DMA_COHERENT, &input_id);
|
||||
|
||||
/* @mc_drv may not be valid when we're called from the IOMMU layer */
|
||||
if (!ret && dev->driver && !mc_drv->driver_managed_dma) {
|
||||
/* @drv may not be valid when we're called from the IOMMU layer */
|
||||
if (!ret && drv && !to_fsl_mc_driver(drv)->driver_managed_dma) {
|
||||
ret = iommu_device_use_default_domain(dev);
|
||||
if (ret)
|
||||
arch_teardown_dma_ops(dev);
|
||||
|
|
@ -906,8 +906,10 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc,
|
|||
|
||||
error_cleanup_dev:
|
||||
kfree(mc_dev->regions);
|
||||
kfree(mc_bus);
|
||||
kfree(mc_dev);
|
||||
if (mc_bus)
|
||||
kfree(mc_bus);
|
||||
else
|
||||
kfree(mc_dev);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -629,8 +629,6 @@ int __init fsl_mc_allocator_driver_init(void);
|
|||
|
||||
void fsl_mc_init_all_resource_pools(struct fsl_mc_device *mc_bus_dev);
|
||||
|
||||
void fsl_mc_cleanup_all_resource_pools(struct fsl_mc_device *mc_bus_dev);
|
||||
|
||||
int __must_check fsl_mc_resource_allocate(struct fsl_mc_bus *mc_bus,
|
||||
enum fsl_mc_pool_type pool_type,
|
||||
struct fsl_mc_resource
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ enum fsl_mc_cmd_index {
|
|||
DPRC_GET_POOL,
|
||||
DPRC_GET_POOL_COUNT,
|
||||
DPRC_GET_CONNECTION,
|
||||
DPRC_GET_MEM,
|
||||
DPCI_GET_LINK_STATE,
|
||||
DPCI_GET_PEER_ATTR,
|
||||
DPAIOP_GET_SL_VERSION,
|
||||
|
|
@ -194,6 +195,12 @@ static struct fsl_mc_cmd_desc fsl_mc_accepted_cmds[] = {
|
|||
.token = true,
|
||||
.size = 32,
|
||||
},
|
||||
[DPRC_GET_MEM] = {
|
||||
.cmdid_value = 0x16D0,
|
||||
.cmdid_mask = 0xFFF0,
|
||||
.token = true,
|
||||
.size = 12,
|
||||
},
|
||||
|
||||
[DPCI_GET_LINK_STATE] = {
|
||||
.cmdid_value = 0x0E10,
|
||||
|
|
@ -275,13 +282,13 @@ static struct fsl_mc_cmd_desc fsl_mc_accepted_cmds[] = {
|
|||
.size = 8,
|
||||
},
|
||||
[DPSW_GET_TAILDROP] = {
|
||||
.cmdid_value = 0x0A80,
|
||||
.cmdid_value = 0x0A90,
|
||||
.cmdid_mask = 0xFFF0,
|
||||
.token = true,
|
||||
.size = 14,
|
||||
},
|
||||
[DPSW_SET_TAILDROP] = {
|
||||
.cmdid_value = 0x0A90,
|
||||
.cmdid_value = 0x0A80,
|
||||
.cmdid_mask = 0xFFF0,
|
||||
.token = true,
|
||||
.size = 24,
|
||||
|
|
|
|||
|
|
@ -214,12 +214,19 @@ int __must_check fsl_mc_portal_allocate(struct fsl_mc_device *mc_dev,
|
|||
if (error < 0)
|
||||
goto error_cleanup_resource;
|
||||
|
||||
dpmcp_dev->consumer_link = device_link_add(&mc_dev->dev,
|
||||
&dpmcp_dev->dev,
|
||||
DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||
if (!dpmcp_dev->consumer_link) {
|
||||
error = -EINVAL;
|
||||
goto error_cleanup_mc_io;
|
||||
/* If the DPRC device itself tries to allocate a portal (usually for
|
||||
* UAPI interaction), don't add a device link between them since the
|
||||
* DPMCP device is an actual child device of the DPRC and a reverse
|
||||
* dependency is not allowed.
|
||||
*/
|
||||
if (mc_dev != mc_bus_dev) {
|
||||
dpmcp_dev->consumer_link = device_link_add(&mc_dev->dev,
|
||||
&dpmcp_dev->dev,
|
||||
DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||
if (!dpmcp_dev->consumer_link) {
|
||||
error = -EINVAL;
|
||||
goto error_cleanup_mc_io;
|
||||
}
|
||||
}
|
||||
|
||||
*new_mc_io = mc_io;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
/*
|
||||
* Timeout in milliseconds to wait for the completion of an MC command
|
||||
*/
|
||||
#define MC_CMD_COMPLETION_TIMEOUT_MS 500
|
||||
#define MC_CMD_COMPLETION_TIMEOUT_MS 15000
|
||||
|
||||
/*
|
||||
* usleep_range() min and max values used to throttle down polling
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ config FSL_MC_DPIO
|
|||
config DPAA2_CONSOLE
|
||||
tristate "QorIQ DPAA2 console driver"
|
||||
depends on OF && (ARCH_LAYERSCAPE || COMPILE_TEST)
|
||||
default y
|
||||
default ARCH_LAYERSCAPE
|
||||
help
|
||||
Console driver for DPAA2 platforms. Exports 2 char devices,
|
||||
/dev/dpaa2_mc_console and /dev/dpaa2_aiop_console,
|
||||
|
|
|
|||
|
|
@ -1270,7 +1270,7 @@ static int qman_create_portal(struct qman_portal *portal,
|
|||
qm_dqrr_set_ithresh(p, QMAN_PIRQ_DQRR_ITHRESH);
|
||||
qm_mr_set_ithresh(p, QMAN_PIRQ_MR_ITHRESH);
|
||||
qm_out(p, QM_REG_ITPR, QMAN_PIRQ_IPERIOD);
|
||||
portal->cgrs = kmalloc_array(2, sizeof(*cgrs), GFP_KERNEL);
|
||||
portal->cgrs = kmalloc_array(2, sizeof(*portal->cgrs), GFP_KERNEL);
|
||||
if (!portal->cgrs)
|
||||
goto fail_cgrs;
|
||||
/* initial snapshot is no-depletion */
|
||||
|
|
|
|||
|
|
@ -450,13 +450,11 @@ static int qe_ic_init(struct platform_device *pdev)
|
|||
|
||||
qe_ic_write(qe_ic->regs, QEIC_CICR, 0);
|
||||
|
||||
irq_set_handler_data(qe_ic->virq_low, qe_ic);
|
||||
irq_set_chained_handler(qe_ic->virq_low, low_handler);
|
||||
irq_set_chained_handler_and_data(qe_ic->virq_low, low_handler, qe_ic);
|
||||
|
||||
if (high_handler) {
|
||||
irq_set_handler_data(qe_ic->virq_high, qe_ic);
|
||||
irq_set_chained_handler(qe_ic->virq_high, high_handler);
|
||||
}
|
||||
if (high_handler)
|
||||
irq_set_chained_handler_and_data(qe_ic->virq_high,
|
||||
high_handler, qe_ic);
|
||||
return 0;
|
||||
}
|
||||
static const struct of_device_id qe_ic_ids[] = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue