Merge tag 'rproc-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc
Pull remoteproc updates from Bjorn Andersson: "This exposes the remoteproc's name in sysfs, allows stm32 to enter platform standby and provides bug fixes for stm32 and Qualcomm's modem remoteproc drivers. Finally it updates MAINTAINERS to reflect the move to kernel.org" * tag 'rproc-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc: MAINTAINERS: remoteproc: update git tree location remoteproc: Remove dev_err() usage after platform_get_irq() remoteproc: stm32: manage the get_irq probe defer case remoteproc: stm32: clear MCU PDDS at firmware start remoteproc: qcom: q6v5-mss: fixup q6v5_pds_enable error handling remoteproc: Add a sysfs interface for name remoteproc: qcom: Move glink_ssr notification after stop
This commit is contained in:
@@ -249,10 +249,8 @@ static int da8xx_rproc_probe(struct platform_device *pdev)
|
||||
int ret;
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq < 0) {
|
||||
dev_err(dev, "platform_get_irq(pdev, 0) error: %d\n", irq);
|
||||
if (irq < 0)
|
||||
return irq;
|
||||
}
|
||||
|
||||
irq_data = irq_get_irq_data(irq);
|
||||
if (!irq_data) {
|
||||
|
@@ -424,16 +424,12 @@ static int keystone_rproc_probe(struct platform_device *pdev)
|
||||
ksproc->irq_ring = platform_get_irq_byname(pdev, "vring");
|
||||
if (ksproc->irq_ring < 0) {
|
||||
ret = ksproc->irq_ring;
|
||||
dev_err(dev, "failed to get vring interrupt, status = %d\n",
|
||||
ret);
|
||||
goto disable_clk;
|
||||
}
|
||||
|
||||
ksproc->irq_fault = platform_get_irq_byname(pdev, "exception");
|
||||
if (ksproc->irq_fault < 0) {
|
||||
ret = ksproc->irq_fault;
|
||||
dev_err(dev, "failed to get exception interrupt, status = %d\n",
|
||||
ret);
|
||||
goto disable_clk;
|
||||
}
|
||||
|
||||
|
@@ -200,7 +200,7 @@ void qcom_unregister_ssr_notifier(struct notifier_block *nb)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qcom_unregister_ssr_notifier);
|
||||
|
||||
static void ssr_notify_stop(struct rproc_subdev *subdev, bool crashed)
|
||||
static void ssr_notify_unprepare(struct rproc_subdev *subdev)
|
||||
{
|
||||
struct qcom_rproc_ssr *ssr = to_ssr_subdev(subdev);
|
||||
|
||||
@@ -220,7 +220,7 @@ void qcom_add_ssr_subdev(struct rproc *rproc, struct qcom_rproc_ssr *ssr,
|
||||
const char *ssr_name)
|
||||
{
|
||||
ssr->name = ssr_name;
|
||||
ssr->subdev.stop = ssr_notify_stop;
|
||||
ssr->subdev.unprepare = ssr_notify_unprepare;
|
||||
|
||||
rproc_add_subdev(rproc, &ssr->subdev);
|
||||
}
|
||||
|
@@ -187,13 +187,8 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
|
||||
init_completion(&q6v5->stop_done);
|
||||
|
||||
q6v5->wdog_irq = platform_get_irq_byname(pdev, "wdog");
|
||||
if (q6v5->wdog_irq < 0) {
|
||||
if (q6v5->wdog_irq != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev,
|
||||
"failed to retrieve wdog IRQ: %d\n",
|
||||
q6v5->wdog_irq);
|
||||
if (q6v5->wdog_irq < 0)
|
||||
return q6v5->wdog_irq;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, q6v5->wdog_irq,
|
||||
NULL, q6v5_wdog_interrupt,
|
||||
@@ -205,13 +200,8 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
|
||||
}
|
||||
|
||||
q6v5->fatal_irq = platform_get_irq_byname(pdev, "fatal");
|
||||
if (q6v5->fatal_irq < 0) {
|
||||
if (q6v5->fatal_irq != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev,
|
||||
"failed to retrieve fatal IRQ: %d\n",
|
||||
q6v5->fatal_irq);
|
||||
if (q6v5->fatal_irq < 0)
|
||||
return q6v5->fatal_irq;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, q6v5->fatal_irq,
|
||||
NULL, q6v5_fatal_interrupt,
|
||||
@@ -223,13 +213,8 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
|
||||
}
|
||||
|
||||
q6v5->ready_irq = platform_get_irq_byname(pdev, "ready");
|
||||
if (q6v5->ready_irq < 0) {
|
||||
if (q6v5->ready_irq != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev,
|
||||
"failed to retrieve ready IRQ: %d\n",
|
||||
q6v5->ready_irq);
|
||||
if (q6v5->ready_irq < 0)
|
||||
return q6v5->ready_irq;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, q6v5->ready_irq,
|
||||
NULL, q6v5_ready_interrupt,
|
||||
@@ -241,13 +226,8 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
|
||||
}
|
||||
|
||||
q6v5->handover_irq = platform_get_irq_byname(pdev, "handover");
|
||||
if (q6v5->handover_irq < 0) {
|
||||
if (q6v5->handover_irq != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev,
|
||||
"failed to retrieve handover IRQ: %d\n",
|
||||
q6v5->handover_irq);
|
||||
if (q6v5->handover_irq < 0)
|
||||
return q6v5->handover_irq;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, q6v5->handover_irq,
|
||||
NULL, q6v5_handover_interrupt,
|
||||
@@ -260,13 +240,8 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
|
||||
disable_irq(q6v5->handover_irq);
|
||||
|
||||
q6v5->stop_irq = platform_get_irq_byname(pdev, "stop-ack");
|
||||
if (q6v5->stop_irq < 0) {
|
||||
if (q6v5->stop_irq != -EPROBE_DEFER)
|
||||
dev_err(&pdev->dev,
|
||||
"failed to retrieve stop-ack IRQ: %d\n",
|
||||
q6v5->stop_irq);
|
||||
if (q6v5->stop_irq < 0)
|
||||
return q6v5->stop_irq;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, q6v5->stop_irq,
|
||||
NULL, q6v5_stop_interrupt,
|
||||
|
@@ -1282,8 +1282,8 @@ static int q6v5_pds_attach(struct device *dev, struct device **devs,
|
||||
|
||||
for (i = 0; i < num_pds; i++) {
|
||||
devs[i] = dev_pm_domain_attach_by_name(dev, pd_names[i]);
|
||||
if (IS_ERR(devs[i])) {
|
||||
ret = PTR_ERR(devs[i]);
|
||||
if (IS_ERR_OR_NULL(devs[i])) {
|
||||
ret = PTR_ERR(devs[i]) ? : -ENODATA;
|
||||
goto unroll_attach;
|
||||
}
|
||||
}
|
||||
|
@@ -113,9 +113,20 @@ static ssize_t state_store(struct device *dev,
|
||||
}
|
||||
static DEVICE_ATTR_RW(state);
|
||||
|
||||
/* Expose the name of the remote processor via sysfs */
|
||||
static ssize_t name_show(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct rproc *rproc = to_rproc(dev);
|
||||
|
||||
return sprintf(buf, "%s\n", rproc->name);
|
||||
}
|
||||
static DEVICE_ATTR_RO(name);
|
||||
|
||||
static struct attribute *rproc_attrs[] = {
|
||||
&dev_attr_firmware.attr,
|
||||
&dev_attr_state.attr,
|
||||
&dev_attr_name.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@@ -383,10 +383,21 @@ static void stm32_rproc_add_coredump_trace(struct rproc *rproc)
|
||||
|
||||
static int stm32_rproc_start(struct rproc *rproc)
|
||||
{
|
||||
struct stm32_rproc *ddata = rproc->priv;
|
||||
int err;
|
||||
|
||||
stm32_rproc_add_coredump_trace(rproc);
|
||||
|
||||
/* clear remote proc Deep Sleep */
|
||||
if (ddata->pdds.map) {
|
||||
err = regmap_update_bits(ddata->pdds.map, ddata->pdds.reg,
|
||||
ddata->pdds.mask, 0);
|
||||
if (err) {
|
||||
dev_err(&rproc->dev, "failed to clear pdds\n");
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
err = stm32_rproc_set_hold_boot(rproc, false);
|
||||
if (err)
|
||||
return err;
|
||||
@@ -506,6 +517,9 @@ static int stm32_rproc_parse_dt(struct platform_device *pdev)
|
||||
int err, irq;
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq == -EPROBE_DEFER)
|
||||
return -EPROBE_DEFER;
|
||||
|
||||
if (irq > 0) {
|
||||
err = devm_request_irq(dev, irq, stm32_rproc_wdg, 0,
|
||||
dev_name(dev), rproc);
|
||||
|
Referens i nytt ärende
Block a user