Qualcomm SoCs (starting with MSM8998) allow for multiple protection domains (PDs) to run on the same Q6 sub-system. This allows for services like AVS AUDIO to have their own separate address space and crash/recover without disrupting the other PDs running on the same Q6 ADSP. This patch series introduces pdr helper library and adds PD tracking functionality for "avs/audio" allowing apr services to register themselves asynchronously once the dependent PDs are up. V6: * Fix minor compilation error introduced in V5 * Pick up Rob's R-b V5: * Pick up Bjorn's R-b * Service all pending lookup, notifier_register and notifier_remove requests. * Propagate error from pdr_register_listener * Remove notifier_init_complete flag workaround with the introduction of in-kernel ns. * Remove depends-on in Kconfig and add module license. V4: * Drop handling db_rev_count error handling since it remains unused in upstream/downstream pd-mapper * Fixup dt bindings and examples. [Rob] * Dropping r-b from Bjorn/Srini for the dt bindings. * Privatize pdr_service/pdr_handle. [Srini/Bjorn] * Introduce notifier_init_complete to deal with cases where qmi_handle_net_reset is not enough to reset the port. This is to deal with cases where qrtr-ns starts after the adsp. * Introduce per addr per pds to deal with multiple service_paths per pdr_handle. * Uniformly rename servreg -> notifier, servloc -> locator. [Narendra] * Drop pdr_servreg_link_create tracking the service_path tracks all pds associated with it. [Bjorn] * Remove safe traversal for all cases where list is left unmodified. [Bjorn] * Address review comments in the apr driver and add comments. [Bjorn] * Other misc fixes. [Narendra/Bjorn] V3: * patches 2 and 3 remain unchanged. * reset servloc_addr/servreg_addr. * fixup the helpers to handle servloc_work/servreg_work asynchronously. * fixup useage of list_lock across traversals, insertions and deletions. * fixup the helpers to use a single lookup list. * skip waiting for response on ind_ack send. * introduce pdr_servreg_link_create to re-use existing qmi connection to servreg instances. This helps tracking PDs running on the same remote processor. * have a per node curr_state in pdr_list_node to preserve all state updates during indack_cb. * introduce additional servreg_service_state values to help the client distinguish between a fatal and non-fatal pdr_lookup errors. * re-order pdr_handle_release sequence. * fixup "!ind_msg->service_path returns true always" warning. * fixup comments. V2: * fixup pd_status callback to return void. * return 0 from pdr_get_domain_list on success. * introduce status_lock to linearize the pd_status reported back to the clients. * use the correct service name length across various string operations performed. * service locator will now schedule the pending lookups registered when it comes up. * other minor cleanups that Bjorn suggested. * use pr_warn to indicate that the wait for service locator timed out. * add Bjorn/Srini's "Reviewed-by" for the dt-bindings. Depends on in-kernel ns fixes: https://patchwork.kernel.org/cover/11414841/ Sibi Sankar (3): soc: qcom: Introduce Protection Domain Restart helpers dt-bindings: soc: qcom: apr: Add protection domain bindings soc: qcom: apr: Add avs/audio tracking functionality .../devicetree/bindings/soc/qcom/qcom,apr.txt | 50 ++ drivers/soc/qcom/Kconfig | 5 + drivers/soc/qcom/Makefile | 1 + drivers/soc/qcom/apr.c | 123 ++- drivers/soc/qcom/pdr_interface.c | 754 ++++++++++++++++++ drivers/soc/qcom/pdr_internal.h | 379 +++++++++ include/linux/soc/qcom/apr.h | 1 + include/linux/soc/qcom/pdr.h | 30 + include/linux/soc/qcom/qmi.h | 1 + 9 files changed, 1335 insertions(+), 9 deletions(-) create mode 100644 drivers/soc/qcom/pdr_interface.c create mode 100644 drivers/soc/qcom/pdr_internal.h create mode 100644 include/linux/soc/qcom/pdr.h -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project