Skip to content

Commit c15b424

Browse files
committed
Merge branch '20240622-qcom-pd-mapper-v9-0-a84ee3591c8e@linaro.org' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux into rproc-next
Merge the pd-mapper implementation from the Qualcomm SoC in order to provide the dependencies for the Qualcomm PAS remoteproc driver.
2 parents 78aaf42 + 1ebcde0 commit c15b424

File tree

6 files changed

+1075
-298
lines changed

6 files changed

+1075
-298
lines changed

drivers/soc/qcom/Kconfig

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,26 @@ config QCOM_OCMEM
7272
requirements. This is typically used by the GPU, camera/video, and
7373
audio components on some Snapdragon SoCs.
7474

75+
config QCOM_PD_MAPPER
76+
tristate "Qualcomm Protection Domain Mapper"
77+
select QCOM_QMI_HELPERS
78+
depends on NET && QRTR
79+
default QCOM_RPROC_COMMON
80+
help
81+
The Protection Domain Mapper maps registered services to the domains
82+
and instances handled by the remote DSPs. This is a kernel-space
83+
implementation of the service. It is a simpler alternative to the
84+
userspace daemon.
85+
7586
config QCOM_PDR_HELPERS
7687
tristate
7788
select QCOM_QMI_HELPERS
89+
select QCOM_PDR_MSG
7890
depends on NET
7991

92+
config QCOM_PDR_MSG
93+
tristate
94+
8095
config QCOM_PMIC_PDCHARGER_ULOG
8196
tristate "Qualcomm PMIC PDCharger ULOG driver"
8297
depends on RPMSG

drivers/soc/qcom/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ obj-$(CONFIG_QCOM_COMMAND_DB) += cmd-db.o
77
obj-$(CONFIG_QCOM_GSBI) += qcom_gsbi.o
88
obj-$(CONFIG_QCOM_MDT_LOADER) += mdt_loader.o
99
obj-$(CONFIG_QCOM_OCMEM) += ocmem.o
10+
obj-$(CONFIG_QCOM_PD_MAPPER) += qcom_pd_mapper.o
1011
obj-$(CONFIG_QCOM_PDR_HELPERS) += pdr_interface.o
12+
obj-$(CONFIG_QCOM_PDR_MSG) += qcom_pdr_msg.o
1113
obj-$(CONFIG_QCOM_PMIC_GLINK) += pmic_glink.o
1214
obj-$(CONFIG_QCOM_PMIC_GLINK) += pmic_glink_altmode.o
1315
obj-$(CONFIG_QCOM_PMIC_PDCHARGER_ULOG) += pmic_pdcharger_ulog.o

drivers/soc/qcom/pdr_interface.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ static int pdr_locator_new_server(struct qmi_handle *qmi,
7676
locator_hdl);
7777
struct pdr_service *pds;
7878

79+
mutex_lock(&pdr->lock);
7980
/* Create a local client port for QMI communication */
8081
pdr->locator_addr.sq_family = AF_QIPCRTR;
8182
pdr->locator_addr.sq_node = svc->node;
8283
pdr->locator_addr.sq_port = svc->port;
8384

84-
mutex_lock(&pdr->lock);
8585
pdr->locator_init_complete = true;
8686
mutex_unlock(&pdr->lock);
8787

@@ -104,10 +104,10 @@ static void pdr_locator_del_server(struct qmi_handle *qmi,
104104

105105
mutex_lock(&pdr->lock);
106106
pdr->locator_init_complete = false;
107-
mutex_unlock(&pdr->lock);
108107

109108
pdr->locator_addr.sq_node = 0;
110109
pdr->locator_addr.sq_port = 0;
110+
mutex_unlock(&pdr->lock);
111111
}
112112

113113
static const struct qmi_ops pdr_locator_ops = {
@@ -365,12 +365,14 @@ static int pdr_get_domain_list(struct servreg_get_domain_list_req *req,
365365
if (ret < 0)
366366
return ret;
367367

368+
mutex_lock(&pdr->lock);
368369
ret = qmi_send_request(&pdr->locator_hdl,
369370
&pdr->locator_addr,
370371
&txn, SERVREG_GET_DOMAIN_LIST_REQ,
371372
SERVREG_GET_DOMAIN_LIST_REQ_MAX_LEN,
372373
servreg_get_domain_list_req_ei,
373374
req);
375+
mutex_unlock(&pdr->lock);
374376
if (ret < 0) {
375377
qmi_txn_cancel(&txn);
376378
return ret;
@@ -415,7 +417,7 @@ static int pdr_locate_service(struct pdr_handle *pdr, struct pdr_service *pds)
415417
if (ret < 0)
416418
goto out;
417419

418-
for (i = domains_read; i < resp->domain_list_len; i++) {
420+
for (i = 0; i < resp->domain_list_len; i++) {
419421
entry = &resp->domain_list[i];
420422

421423
if (strnlen(entry->name, sizeof(entry->name)) == sizeof(entry->name))

0 commit comments

Comments
 (0)