Message ID | 20230531-rpm-rproc-v1-4-e0a3b6de1f14@gerhold.net (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add dedicated device tree node for RPM processor/subsystem | expand |
On 5.06.2023 09:08, Stephan Gerhold wrote: > There is an ever growing list of compatibles in the smd-rpm.c driver. > A fallback compatible would help here but would still require keeping > the current list around for backwards compatibility. > > As an alternative, let's switch the driver to match the rpmsg_device_id > instead, which is always "rpm_requests" on all platforms. Add a check > to ensure that there is a device tree node defined for the device since > otherwise the of_platform_populate() call will operate on the root node (/). > > Similar approaches with matching rpmsg_device_id are already used in > qcom_sysmon, qcom_glink_ssr, qrtr, and rpmsg_wwan_ctrl. > > Signed-off-by: Stephan Gerhold <stephan@gerhold.net> > --- Tested-by: Konrad Dybcio <konrad.dybcio@linaro.org> # SM6375 (G-Link) Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> Konrad > drivers/soc/qcom/smd-rpm.c | 35 +++++++++-------------------------- > 1 file changed, 9 insertions(+), 26 deletions(-) > > diff --git a/drivers/soc/qcom/smd-rpm.c b/drivers/soc/qcom/smd-rpm.c > index 0c1aa809cc4e..13d8c52330d0 100644 > --- a/drivers/soc/qcom/smd-rpm.c > +++ b/drivers/soc/qcom/smd-rpm.c > @@ -199,6 +199,9 @@ static int qcom_smd_rpm_probe(struct rpmsg_device *rpdev) > struct qcom_smd_rpm *rpm; > int ret; > > + if (!rpdev->dev.of_node) > + return -EINVAL; > + > rpm = devm_kzalloc(&rpdev->dev, sizeof(*rpm), GFP_KERNEL); > if (!rpm) > return -ENOMEM; > @@ -230,38 +233,18 @@ static void qcom_smd_rpm_remove(struct rpmsg_device *rpdev) > of_platform_depopulate(&rpdev->dev); > } > > -static const struct of_device_id qcom_smd_rpm_of_match[] = { > - { .compatible = "qcom,rpm-apq8084" }, > - { .compatible = "qcom,rpm-ipq6018" }, > - { .compatible = "qcom,rpm-ipq9574" }, > - { .compatible = "qcom,rpm-msm8226" }, > - { .compatible = "qcom,rpm-msm8909" }, > - { .compatible = "qcom,rpm-msm8916" }, > - { .compatible = "qcom,rpm-msm8936" }, > - { .compatible = "qcom,rpm-msm8953" }, > - { .compatible = "qcom,rpm-msm8974" }, > - { .compatible = "qcom,rpm-msm8976" }, > - { .compatible = "qcom,rpm-msm8994" }, > - { .compatible = "qcom,rpm-msm8996" }, > - { .compatible = "qcom,rpm-msm8998" }, > - { .compatible = "qcom,rpm-sdm660" }, > - { .compatible = "qcom,rpm-sm6115" }, > - { .compatible = "qcom,rpm-sm6125" }, > - { .compatible = "qcom,rpm-sm6375" }, > - { .compatible = "qcom,rpm-qcm2290" }, > - { .compatible = "qcom,rpm-qcs404" }, > - {} > +static const struct rpmsg_device_id qcom_smd_rpm_id_table[] = { > + { .name = "rpm_requests", }, > + { /* sentinel */ } > }; > -MODULE_DEVICE_TABLE(of, qcom_smd_rpm_of_match); > +MODULE_DEVICE_TABLE(rpmsg, qcom_smd_rpm_id_table); > > static struct rpmsg_driver qcom_smd_rpm_driver = { > .probe = qcom_smd_rpm_probe, > .remove = qcom_smd_rpm_remove, > .callback = qcom_smd_rpm_callback, > - .drv = { > - .name = "qcom_smd_rpm", > - .of_match_table = qcom_smd_rpm_of_match, > - }, > + .id_table = qcom_smd_rpm_id_table, > + .drv.name = "qcom_smd_rpm", > }; > > static int __init qcom_smd_rpm_init(void) >
diff --git a/drivers/soc/qcom/smd-rpm.c b/drivers/soc/qcom/smd-rpm.c index 0c1aa809cc4e..13d8c52330d0 100644 --- a/drivers/soc/qcom/smd-rpm.c +++ b/drivers/soc/qcom/smd-rpm.c @@ -199,6 +199,9 @@ static int qcom_smd_rpm_probe(struct rpmsg_device *rpdev) struct qcom_smd_rpm *rpm; int ret; + if (!rpdev->dev.of_node) + return -EINVAL; + rpm = devm_kzalloc(&rpdev->dev, sizeof(*rpm), GFP_KERNEL); if (!rpm) return -ENOMEM; @@ -230,38 +233,18 @@ static void qcom_smd_rpm_remove(struct rpmsg_device *rpdev) of_platform_depopulate(&rpdev->dev); } -static const struct of_device_id qcom_smd_rpm_of_match[] = { - { .compatible = "qcom,rpm-apq8084" }, - { .compatible = "qcom,rpm-ipq6018" }, - { .compatible = "qcom,rpm-ipq9574" }, - { .compatible = "qcom,rpm-msm8226" }, - { .compatible = "qcom,rpm-msm8909" }, - { .compatible = "qcom,rpm-msm8916" }, - { .compatible = "qcom,rpm-msm8936" }, - { .compatible = "qcom,rpm-msm8953" }, - { .compatible = "qcom,rpm-msm8974" }, - { .compatible = "qcom,rpm-msm8976" }, - { .compatible = "qcom,rpm-msm8994" }, - { .compatible = "qcom,rpm-msm8996" }, - { .compatible = "qcom,rpm-msm8998" }, - { .compatible = "qcom,rpm-sdm660" }, - { .compatible = "qcom,rpm-sm6115" }, - { .compatible = "qcom,rpm-sm6125" }, - { .compatible = "qcom,rpm-sm6375" }, - { .compatible = "qcom,rpm-qcm2290" }, - { .compatible = "qcom,rpm-qcs404" }, - {} +static const struct rpmsg_device_id qcom_smd_rpm_id_table[] = { + { .name = "rpm_requests", }, + { /* sentinel */ } }; -MODULE_DEVICE_TABLE(of, qcom_smd_rpm_of_match); +MODULE_DEVICE_TABLE(rpmsg, qcom_smd_rpm_id_table); static struct rpmsg_driver qcom_smd_rpm_driver = { .probe = qcom_smd_rpm_probe, .remove = qcom_smd_rpm_remove, .callback = qcom_smd_rpm_callback, - .drv = { - .name = "qcom_smd_rpm", - .of_match_table = qcom_smd_rpm_of_match, - }, + .id_table = qcom_smd_rpm_id_table, + .drv.name = "qcom_smd_rpm", }; static int __init qcom_smd_rpm_init(void)
There is an ever growing list of compatibles in the smd-rpm.c driver. A fallback compatible would help here but would still require keeping the current list around for backwards compatibility. As an alternative, let's switch the driver to match the rpmsg_device_id instead, which is always "rpm_requests" on all platforms. Add a check to ensure that there is a device tree node defined for the device since otherwise the of_platform_populate() call will operate on the root node (/). Similar approaches with matching rpmsg_device_id are already used in qcom_sysmon, qcom_glink_ssr, qrtr, and rpmsg_wwan_ctrl. Signed-off-by: Stephan Gerhold <stephan@gerhold.net> --- drivers/soc/qcom/smd-rpm.c | 35 +++++++++-------------------------- 1 file changed, 9 insertions(+), 26 deletions(-)