Skip to content

Commit e88481f

Browse files
committed
Merge tag 'rproc-v6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux
Pull remoteproc updates from Bjorn Andersson: - The i.MX DSP remoteproc driver adds support for providing a resource table, in order to enable IPC with the core - The TI K3 DSP driver is transitioned to remove_new, error messages are changed to use symbolic error codes, and dev_err_probe() is used where applicable - Support for the Qualcomm SC7280 audio, compute and WiFi co-processors are added to the Qualcomm TrustZone based remoteproc driver * tag 'rproc-v6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux: remoteproc: qcom_q6v5_pas: Add SC7280 ADSP, CDSP & WPSS dt-bindings: remoteproc: qcom: sc7180-pas: Add SC7280 compatibles dt-bindings: remoteproc: qcom: sc7180-pas: Fix SC7280 MPSS PD-names remoteproc: k3-dsp: Convert to platform remove callback returning void remoteproc: k3-dsp: Use symbolic error codes in error messages remoteproc: k3-dsp: Suppress duplicate error message in .remove() arm64: dts: imx8mp: Add reserve-memory nodes for DSP remoteproc: imx_dsp_rproc: Add mandatory find_loaded_rsc_table op
2 parents 2a43434 + 300ed42 commit e88481f

File tree

5 files changed

+101
-49
lines changed

5 files changed

+101
-49
lines changed

Documentation/devicetree/bindings/remoteproc/qcom,sc7180-pas.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ properties:
1818
enum:
1919
- qcom,sc7180-adsp-pas
2020
- qcom,sc7180-mpss-pas
21+
- qcom,sc7280-adsp-pas
22+
- qcom,sc7280-cdsp-pas
2123
- qcom,sc7280-mpss-pas
24+
- qcom,sc7280-wpss-pas
2225

2326
reg:
2427
maxItems: 1
@@ -75,6 +78,7 @@ allOf:
7578
compatible:
7679
enum:
7780
- qcom,sc7180-adsp-pas
81+
- qcom,sc7280-adsp-pas
7882
then:
7983
properties:
8084
power-domains:
@@ -109,6 +113,23 @@ allOf:
109113
compatible:
110114
enum:
111115
- qcom,sc7280-mpss-pas
116+
then:
117+
properties:
118+
power-domains:
119+
items:
120+
- description: CX power domain
121+
- description: MSS power domain
122+
power-domain-names:
123+
items:
124+
- const: cx
125+
- const: mss
126+
127+
- if:
128+
properties:
129+
compatible:
130+
enum:
131+
- qcom,sc7280-cdsp-pas
132+
- qcom,sc7280-wpss-pas
112133
then:
113134
properties:
114135
power-domains:

arch/arm64/boot/dts/freescale/imx8mp-evk.dts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,28 @@
137137
};
138138

139139
};
140+
141+
reserved-memory {
142+
#address-cells = <2>;
143+
#size-cells = <2>;
144+
ranges;
145+
146+
dsp_vdev0vring0: vdev0vring0@942f0000 {
147+
reg = <0 0x942f0000 0 0x8000>;
148+
no-map;
149+
};
150+
151+
dsp_vdev0vring1: vdev0vring1@942f8000 {
152+
reg = <0 0x942f8000 0 0x8000>;
153+
no-map;
154+
};
155+
156+
dsp_vdev0buffer: vdev0buffer@94300000 {
157+
compatible = "shared-dma-pool";
158+
reg = <0 0x94300000 0 0x100000>;
159+
no-map;
160+
};
161+
};
140162
};
141163

142164
&flexspi {

drivers/remoteproc/imx_dsp_rproc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -940,6 +940,7 @@ static const struct rproc_ops imx_dsp_rproc_ops = {
940940
.kick = imx_dsp_rproc_kick,
941941
.load = imx_dsp_rproc_elf_load_segments,
942942
.parse_fw = imx_dsp_rproc_parse_fw,
943+
.find_loaded_rsc_table = rproc_elf_find_loaded_rsc_table,
943944
.sanity_check = rproc_elf_sanity_check,
944945
.get_boot_addr = rproc_elf_get_boot_addr,
945946
};

drivers/remoteproc/qcom_q6v5_pas.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,6 +1165,22 @@ static const struct adsp_data sm8550_mpss_resource = {
11651165
.region_assign_idx = 2,
11661166
};
11671167

1168+
static const struct adsp_data sc7280_wpss_resource = {
1169+
.crash_reason_smem = 626,
1170+
.firmware_name = "wpss.mdt",
1171+
.pas_id = 6,
1172+
.auto_boot = true,
1173+
.proxy_pd_names = (char*[]){
1174+
"cx",
1175+
"mx",
1176+
NULL
1177+
},
1178+
.load_state = "wpss",
1179+
.ssr_name = "wpss",
1180+
.sysmon_name = "wpss",
1181+
.ssctl_id = 0x19,
1182+
};
1183+
11681184
static const struct of_device_id adsp_of_match[] = {
11691185
{ .compatible = "qcom,msm8226-adsp-pil", .data = &adsp_resource_init},
11701186
{ .compatible = "qcom,msm8953-adsp-pil", .data = &msm8996_adsp_resource},
@@ -1178,7 +1194,10 @@ static const struct of_device_id adsp_of_match[] = {
11781194
{ .compatible = "qcom,qcs404-wcss-pas", .data = &wcss_resource_init },
11791195
{ .compatible = "qcom,sc7180-adsp-pas", .data = &sm8250_adsp_resource},
11801196
{ .compatible = "qcom,sc7180-mpss-pas", .data = &mpss_resource_init},
1197+
{ .compatible = "qcom,sc7280-adsp-pas", .data = &sm8350_adsp_resource},
1198+
{ .compatible = "qcom,sc7280-cdsp-pas", .data = &sm6350_cdsp_resource},
11811199
{ .compatible = "qcom,sc7280-mpss-pas", .data = &mpss_resource_init},
1200+
{ .compatible = "qcom,sc7280-wpss-pas", .data = &sc7280_wpss_resource},
11821201
{ .compatible = "qcom,sc8180x-adsp-pas", .data = &sm8150_adsp_resource},
11831202
{ .compatible = "qcom,sc8180x-cdsp-pas", .data = &sm8150_cdsp_resource},
11841203
{ .compatible = "qcom,sc8180x-mpss-pas", .data = &sc8180x_mpss_resource},

drivers/remoteproc/ti_k3_dsp_remoteproc.c

Lines changed: 38 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@ static void k3_dsp_rproc_kick(struct rproc *rproc, int vqid)
158158
/* send the index of the triggered virtqueue in the mailbox payload */
159159
ret = mbox_send_message(kproc->mbox, (void *)msg);
160160
if (ret < 0)
161-
dev_err(dev, "failed to send mailbox message, status = %d\n",
162-
ret);
161+
dev_err(dev, "failed to send mailbox message (%pe)\n",
162+
ERR_PTR(ret));
163163
}
164164

165165
/* Put the DSP processor into reset */
@@ -170,7 +170,7 @@ static int k3_dsp_rproc_reset(struct k3_dsp_rproc *kproc)
170170

171171
ret = reset_control_assert(kproc->reset);
172172
if (ret) {
173-
dev_err(dev, "local-reset assert failed, ret = %d\n", ret);
173+
dev_err(dev, "local-reset assert failed (%pe)\n", ERR_PTR(ret));
174174
return ret;
175175
}
176176

@@ -180,7 +180,7 @@ static int k3_dsp_rproc_reset(struct k3_dsp_rproc *kproc)
180180
ret = kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci,
181181
kproc->ti_sci_id);
182182
if (ret) {
183-
dev_err(dev, "module-reset assert failed, ret = %d\n", ret);
183+
dev_err(dev, "module-reset assert failed (%pe)\n", ERR_PTR(ret));
184184
if (reset_control_deassert(kproc->reset))
185185
dev_warn(dev, "local-reset deassert back failed\n");
186186
}
@@ -200,14 +200,14 @@ static int k3_dsp_rproc_release(struct k3_dsp_rproc *kproc)
200200
ret = kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci,
201201
kproc->ti_sci_id);
202202
if (ret) {
203-
dev_err(dev, "module-reset deassert failed, ret = %d\n", ret);
203+
dev_err(dev, "module-reset deassert failed (%pe)\n", ERR_PTR(ret));
204204
return ret;
205205
}
206206

207207
lreset:
208208
ret = reset_control_deassert(kproc->reset);
209209
if (ret) {
210-
dev_err(dev, "local-reset deassert failed, ret = %d\n", ret);
210+
dev_err(dev, "local-reset deassert failed, (%pe)\n", ERR_PTR(ret));
211211
if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci,
212212
kproc->ti_sci_id))
213213
dev_warn(dev, "module-reset assert back failed\n");
@@ -246,7 +246,7 @@ static int k3_dsp_rproc_request_mbox(struct rproc *rproc)
246246
*/
247247
ret = mbox_send_message(kproc->mbox, (void *)RP_MBOX_ECHO_REQUEST);
248248
if (ret < 0) {
249-
dev_err(dev, "mbox_send_message failed: %d\n", ret);
249+
dev_err(dev, "mbox_send_message failed (%pe)\n", ERR_PTR(ret));
250250
mbox_free_channel(kproc->mbox);
251251
return ret;
252252
}
@@ -272,8 +272,8 @@ static int k3_dsp_rproc_prepare(struct rproc *rproc)
272272
ret = kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci,
273273
kproc->ti_sci_id);
274274
if (ret)
275-
dev_err(dev, "module-reset deassert failed, cannot enable internal RAM loading, ret = %d\n",
276-
ret);
275+
dev_err(dev, "module-reset deassert failed, cannot enable internal RAM loading (%pe)\n",
276+
ERR_PTR(ret));
277277

278278
return ret;
279279
}
@@ -296,7 +296,7 @@ static int k3_dsp_rproc_unprepare(struct rproc *rproc)
296296
ret = kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci,
297297
kproc->ti_sci_id);
298298
if (ret)
299-
dev_err(dev, "module-reset assert failed, ret = %d\n", ret);
299+
dev_err(dev, "module-reset assert failed (%pe)\n", ERR_PTR(ret));
300300

301301
return ret;
302302
}
@@ -561,9 +561,9 @@ static int k3_dsp_reserved_mem_init(struct k3_dsp_rproc *kproc)
561561

562562
num_rmems = of_property_count_elems_of_size(np, "memory-region",
563563
sizeof(phandle));
564-
if (num_rmems <= 0) {
565-
dev_err(dev, "device does not reserved memory regions, ret = %d\n",
566-
num_rmems);
564+
if (num_rmems < 0) {
565+
dev_err(dev, "device does not reserved memory regions (%pe)\n",
566+
ERR_PTR(num_rmems));
567567
return -EINVAL;
568568
}
569569
if (num_rmems < 2) {
@@ -575,8 +575,8 @@ static int k3_dsp_reserved_mem_init(struct k3_dsp_rproc *kproc)
575575
/* use reserved memory region 0 for vring DMA allocations */
576576
ret = of_reserved_mem_device_init_by_idx(dev, np, 0);
577577
if (ret) {
578-
dev_err(dev, "device cannot initialize DMA pool, ret = %d\n",
579-
ret);
578+
dev_err(dev, "device cannot initialize DMA pool (%pe)\n",
579+
ERR_PTR(ret));
580580
return ret;
581581
}
582582

@@ -687,11 +687,8 @@ static int k3_dsp_rproc_probe(struct platform_device *pdev)
687687
return -ENODEV;
688688

689689
ret = rproc_of_parse_firmware(dev, 0, &fw_name);
690-
if (ret) {
691-
dev_err(dev, "failed to parse firmware-name property, ret = %d\n",
692-
ret);
693-
return ret;
694-
}
690+
if (ret)
691+
return dev_err_probe(dev, ret, "failed to parse firmware-name property\n");
695692

696693
rproc = rproc_alloc(dev, dev_name(dev), &k3_dsp_rproc_ops, fw_name,
697694
sizeof(*kproc));
@@ -711,39 +708,35 @@ static int k3_dsp_rproc_probe(struct platform_device *pdev)
711708

712709
kproc->ti_sci = ti_sci_get_by_phandle(np, "ti,sci");
713710
if (IS_ERR(kproc->ti_sci)) {
714-
ret = PTR_ERR(kproc->ti_sci);
715-
if (ret != -EPROBE_DEFER) {
716-
dev_err(dev, "failed to get ti-sci handle, ret = %d\n",
717-
ret);
718-
}
711+
ret = dev_err_probe(dev, PTR_ERR(kproc->ti_sci),
712+
"failed to get ti-sci handle\n");
719713
kproc->ti_sci = NULL;
720714
goto free_rproc;
721715
}
722716

723717
ret = of_property_read_u32(np, "ti,sci-dev-id", &kproc->ti_sci_id);
724718
if (ret) {
725-
dev_err(dev, "missing 'ti,sci-dev-id' property\n");
719+
dev_err_probe(dev, ret, "missing 'ti,sci-dev-id' property\n");
726720
goto put_sci;
727721
}
728722

729723
kproc->reset = devm_reset_control_get_exclusive(dev, NULL);
730724
if (IS_ERR(kproc->reset)) {
731-
ret = PTR_ERR(kproc->reset);
732-
dev_err(dev, "failed to get reset, status = %d\n", ret);
725+
ret = dev_err_probe(dev, PTR_ERR(kproc->reset),
726+
"failed to get reset\n");
733727
goto put_sci;
734728
}
735729

736730
kproc->tsp = k3_dsp_rproc_of_get_tsp(dev, kproc->ti_sci);
737731
if (IS_ERR(kproc->tsp)) {
738-
dev_err(dev, "failed to construct ti-sci proc control, ret = %d\n",
739-
ret);
740-
ret = PTR_ERR(kproc->tsp);
732+
ret = dev_err_probe(dev, PTR_ERR(kproc->tsp),
733+
"failed to construct ti-sci proc control\n");
741734
goto put_sci;
742735
}
743736

744737
ret = ti_sci_proc_request(kproc->tsp);
745738
if (ret < 0) {
746-
dev_err(dev, "ti_sci_proc_request failed, ret = %d\n", ret);
739+
dev_err_probe(dev, ret, "ti_sci_proc_request failed\n");
747740
goto free_tsp;
748741
}
749742

@@ -753,15 +746,14 @@ static int k3_dsp_rproc_probe(struct platform_device *pdev)
753746

754747
ret = k3_dsp_reserved_mem_init(kproc);
755748
if (ret) {
756-
dev_err(dev, "reserved memory init failed, ret = %d\n", ret);
749+
dev_err_probe(dev, ret, "reserved memory init failed\n");
757750
goto release_tsp;
758751
}
759752

760753
ret = kproc->ti_sci->ops.dev_ops.is_on(kproc->ti_sci, kproc->ti_sci_id,
761754
NULL, &p_state);
762755
if (ret) {
763-
dev_err(dev, "failed to get initial state, mode cannot be determined, ret = %d\n",
764-
ret);
756+
dev_err_probe(dev, ret, "failed to get initial state, mode cannot be determined\n");
765757
goto release_mem;
766758
}
767759

@@ -787,8 +779,7 @@ static int k3_dsp_rproc_probe(struct platform_device *pdev)
787779
if (data->uses_lreset) {
788780
ret = reset_control_status(kproc->reset);
789781
if (ret < 0) {
790-
dev_err(dev, "failed to get reset status, status = %d\n",
791-
ret);
782+
dev_err_probe(dev, ret, "failed to get reset status\n");
792783
goto release_mem;
793784
} else if (ret == 0) {
794785
dev_warn(dev, "local reset is deasserted for device\n");
@@ -799,8 +790,7 @@ static int k3_dsp_rproc_probe(struct platform_device *pdev)
799790

800791
ret = rproc_add(rproc);
801792
if (ret) {
802-
dev_err(dev, "failed to add register device with remoteproc core, status = %d\n",
803-
ret);
793+
dev_err_probe(dev, ret, "failed to add register device with remoteproc core\n");
804794
goto release_mem;
805795
}
806796

@@ -813,19 +803,19 @@ static int k3_dsp_rproc_probe(struct platform_device *pdev)
813803
release_tsp:
814804
ret1 = ti_sci_proc_release(kproc->tsp);
815805
if (ret1)
816-
dev_err(dev, "failed to release proc, ret = %d\n", ret1);
806+
dev_err(dev, "failed to release proc (%pe)\n", ERR_PTR(ret1));
817807
free_tsp:
818808
kfree(kproc->tsp);
819809
put_sci:
820810
ret1 = ti_sci_put_handle(kproc->ti_sci);
821811
if (ret1)
822-
dev_err(dev, "failed to put ti_sci handle, ret = %d\n", ret1);
812+
dev_err(dev, "failed to put ti_sci handle (%pe)\n", ERR_PTR(ret1));
823813
free_rproc:
824814
rproc_free(rproc);
825815
return ret;
826816
}
827817

828-
static int k3_dsp_rproc_remove(struct platform_device *pdev)
818+
static void k3_dsp_rproc_remove(struct platform_device *pdev)
829819
{
830820
struct k3_dsp_rproc *kproc = platform_get_drvdata(pdev);
831821
struct rproc *rproc = kproc->rproc;
@@ -835,27 +825,26 @@ static int k3_dsp_rproc_remove(struct platform_device *pdev)
835825
if (rproc->state == RPROC_ATTACHED) {
836826
ret = rproc_detach(rproc);
837827
if (ret) {
838-
dev_err(dev, "failed to detach proc, ret = %d\n", ret);
839-
return ret;
828+
/* Note this error path leaks resources */
829+
dev_err(dev, "failed to detach proc (%pe)\n", ERR_PTR(ret));
830+
return;
840831
}
841832
}
842833

843834
rproc_del(kproc->rproc);
844835

845836
ret = ti_sci_proc_release(kproc->tsp);
846837
if (ret)
847-
dev_err(dev, "failed to release proc, ret = %d\n", ret);
838+
dev_err(dev, "failed to release proc (%pe)\n", ERR_PTR(ret));
848839

849840
kfree(kproc->tsp);
850841

851842
ret = ti_sci_put_handle(kproc->ti_sci);
852843
if (ret)
853-
dev_err(dev, "failed to put ti_sci handle, ret = %d\n", ret);
844+
dev_err(dev, "failed to put ti_sci handle (%pe)\n", ERR_PTR(ret));
854845

855846
k3_dsp_reserved_mem_exit(kproc);
856847
rproc_free(kproc->rproc);
857-
858-
return 0;
859848
}
860849

861850
static const struct k3_dsp_mem_data c66_mems[] = {
@@ -906,7 +895,7 @@ MODULE_DEVICE_TABLE(of, k3_dsp_of_match);
906895

907896
static struct platform_driver k3_dsp_rproc_driver = {
908897
.probe = k3_dsp_rproc_probe,
909-
.remove = k3_dsp_rproc_remove,
898+
.remove_new = k3_dsp_rproc_remove,
910899
.driver = {
911900
.name = "k3-dsp-rproc",
912901
.of_match_table = k3_dsp_of_match,

0 commit comments

Comments
 (0)