Skip to content

Commit 16e8af6

Browse files
committed
Merge tag 'imx-drivers-6.19' of https://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into soc/drivers
i.MX drivers update for 6.19: - A series from Peng Fan to to improve i.MX SCU firmware drivers * tag 'imx-drivers-6.19' of https://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux: firmware: imx: scu: Use devm_mutex_init firmware: imx: scu: Suppress bind attrs firmware: imx: scu: Update error code firmware: imx: scu-irq: Remove unused export of imx_scu_enable_general_irq_channel firmware: imx: scu-irq: Set mu_resource_id before get handle firmware: imx: scu-irq: Init workqueue before request mbox channel firmware: imx: scu-irq: Free mailbox client on failure at imx_scu_enable_general_irq_channel() firmware: imx: scu-irq: fix OF node leak in Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2 parents e7ec4df + 97a07dd commit 16e8af6

2 files changed

Lines changed: 24 additions & 19 deletions

File tree

drivers/firmware/imx/imx-scu-irq.c

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,18 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
203203
struct mbox_chan *ch;
204204
int ret = 0, i = 0;
205205

206+
if (!of_parse_phandle_with_args(dev->of_node, "mboxes",
207+
"#mbox-cells", 0, &spec)) {
208+
i = of_alias_get_id(spec.np, "mu");
209+
of_node_put(spec.np);
210+
}
211+
212+
/* use mu1 as general mu irq channel if failed */
213+
if (i < 0)
214+
i = 1;
215+
216+
mu_resource_id = IMX_SC_R_MU_0A + i;
217+
206218
ret = imx_scu_get_handle(&imx_sc_irq_ipc_handle);
207219
if (ret)
208220
return ret;
@@ -214,27 +226,16 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
214226
cl->dev = dev;
215227
cl->rx_callback = imx_scu_irq_callback;
216228

229+
INIT_WORK(&imx_sc_irq_work, imx_scu_irq_work_handler);
230+
217231
/* SCU general IRQ uses general interrupt channel 3 */
218232
ch = mbox_request_channel_byname(cl, "gip3");
219233
if (IS_ERR(ch)) {
220234
ret = PTR_ERR(ch);
221235
dev_err(dev, "failed to request mbox chan gip3, ret %d\n", ret);
222-
devm_kfree(dev, cl);
223-
return ret;
236+
goto free_cl;
224237
}
225238

226-
INIT_WORK(&imx_sc_irq_work, imx_scu_irq_work_handler);
227-
228-
if (!of_parse_phandle_with_args(dev->of_node, "mboxes",
229-
"#mbox-cells", 0, &spec))
230-
i = of_alias_get_id(spec.np, "mu");
231-
232-
/* use mu1 as general mu irq channel if failed */
233-
if (i < 0)
234-
i = 1;
235-
236-
mu_resource_id = IMX_SC_R_MU_0A + i;
237-
238239
/* Create directory under /sysfs/firmware */
239240
wakeup_obj = kobject_create_and_add("scu_wakeup_source", firmware_kobj);
240241
if (!wakeup_obj) {
@@ -253,7 +254,8 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
253254

254255
free_ch:
255256
mbox_free_channel(ch);
257+
free_cl:
258+
devm_kfree(dev, cl);
256259

257260
return ret;
258261
}
259-
EXPORT_SYMBOL(imx_scu_enable_general_irq_channel);

drivers/firmware/imx/imx-scu.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ static int imx_sc_linux_errmap[IMX_SC_ERR_LAST] = {
7373
-EACCES, /* IMX_SC_ERR_NOACCESS */
7474
-EACCES, /* IMX_SC_ERR_LOCKED */
7575
-ERANGE, /* IMX_SC_ERR_UNAVAILABLE */
76-
-EEXIST, /* IMX_SC_ERR_NOTFOUND */
77-
-EPERM, /* IMX_SC_ERR_NOPOWER */
78-
-EPIPE, /* IMX_SC_ERR_IPC */
76+
-ENOENT, /* IMX_SC_ERR_NOTFOUND */
77+
-ENODEV, /* IMX_SC_ERR_NOPOWER */
78+
-ECOMM, /* IMX_SC_ERR_IPC */
7979
-EBUSY, /* IMX_SC_ERR_BUSY */
8080
-EIO, /* IMX_SC_ERR_FAIL */
8181
};
@@ -324,7 +324,9 @@ static int imx_scu_probe(struct platform_device *pdev)
324324
}
325325

326326
sc_ipc->dev = dev;
327-
mutex_init(&sc_ipc->lock);
327+
ret = devm_mutex_init(dev, &sc_ipc->lock);
328+
if (ret)
329+
return ret;
328330
init_completion(&sc_ipc->done);
329331

330332
imx_sc_ipc_handle = sc_ipc;
@@ -352,6 +354,7 @@ static struct platform_driver imx_scu_driver = {
352354
.driver = {
353355
.name = "imx-scu",
354356
.of_match_table = imx_scu_match,
357+
.suppress_bind_attrs = true,
355358
},
356359
.probe = imx_scu_probe,
357360
};

0 commit comments

Comments
 (0)