sysmon 49 drivers/remoteproc/qcom_common.h void qcom_remove_sysmon_subdev(struct qcom_sysmon *sysmon); sysmon 58 drivers/remoteproc/qcom_common.h static inline void qcom_remove_sysmon_subdev(struct qcom_sysmon *sysmon) sysmon 96 drivers/remoteproc/qcom_q6v5_adsp.c struct qcom_sysmon *sysmon; sysmon 457 drivers/remoteproc/qcom_q6v5_adsp.c adsp->sysmon = qcom_add_sysmon_subdev(rproc, sysmon 460 drivers/remoteproc/qcom_q6v5_adsp.c if (IS_ERR(adsp->sysmon)) { sysmon 461 drivers/remoteproc/qcom_q6v5_adsp.c ret = PTR_ERR(adsp->sysmon); sysmon 486 drivers/remoteproc/qcom_q6v5_adsp.c qcom_remove_sysmon_subdev(adsp->sysmon); sysmon 186 drivers/remoteproc/qcom_q6v5_mss.c struct qcom_sysmon *sysmon; sysmon 1529 drivers/remoteproc/qcom_q6v5_mss.c qproc->sysmon = qcom_add_sysmon_subdev(rproc, "modem", 0x12); sysmon 1530 drivers/remoteproc/qcom_q6v5_mss.c if (IS_ERR(qproc->sysmon)) { sysmon 1531 drivers/remoteproc/qcom_q6v5_mss.c ret = PTR_ERR(qproc->sysmon); sysmon 1557 drivers/remoteproc/qcom_q6v5_mss.c qcom_remove_sysmon_subdev(qproc->sysmon); sysmon 67 drivers/remoteproc/qcom_q6v5_pas.c struct qcom_sysmon *sysmon; sysmon 303 drivers/remoteproc/qcom_q6v5_pas.c adsp->sysmon = qcom_add_sysmon_subdev(rproc, sysmon 306 drivers/remoteproc/qcom_q6v5_pas.c if (IS_ERR(adsp->sysmon)) { sysmon 307 drivers/remoteproc/qcom_q6v5_pas.c ret = PTR_ERR(adsp->sysmon); sysmon 330 drivers/remoteproc/qcom_q6v5_pas.c qcom_remove_sysmon_subdev(adsp->sysmon); sysmon 57 drivers/remoteproc/qcom_sysmon.c static void sysmon_send_event(struct qcom_sysmon *sysmon, const char *name) sysmon 67 drivers/remoteproc/qcom_sysmon.c mutex_lock(&sysmon->lock); sysmon 68 drivers/remoteproc/qcom_sysmon.c reinit_completion(&sysmon->comp); sysmon 69 drivers/remoteproc/qcom_sysmon.c sysmon->ssr_ack = false; sysmon 71 drivers/remoteproc/qcom_sysmon.c ret = rpmsg_send(sysmon->ept, req, len); sysmon 73 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "failed to send sysmon event\n"); sysmon 77 drivers/remoteproc/qcom_sysmon.c ret = wait_for_completion_timeout(&sysmon->comp, sysmon 80 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "timeout waiting for sysmon ack\n"); sysmon 84 drivers/remoteproc/qcom_sysmon.c if (!sysmon->ssr_ack) sysmon 85 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "unexpected response to sysmon event\n"); sysmon 88 drivers/remoteproc/qcom_sysmon.c mutex_unlock(&sysmon->lock); sysmon 95 drivers/remoteproc/qcom_sysmon.c static void sysmon_request_shutdown(struct qcom_sysmon *sysmon) sysmon 100 drivers/remoteproc/qcom_sysmon.c mutex_lock(&sysmon->lock); sysmon 101 drivers/remoteproc/qcom_sysmon.c reinit_completion(&sysmon->comp); sysmon 102 drivers/remoteproc/qcom_sysmon.c sysmon->ssr_ack = false; sysmon 104 drivers/remoteproc/qcom_sysmon.c ret = rpmsg_send(sysmon->ept, req, strlen(req) + 1); sysmon 106 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "send sysmon shutdown request failed\n"); sysmon 110 drivers/remoteproc/qcom_sysmon.c ret = wait_for_completion_timeout(&sysmon->comp, sysmon 113 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "timeout waiting for sysmon ack\n"); sysmon 117 drivers/remoteproc/qcom_sysmon.c if (!sysmon->ssr_ack) sysmon 118 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, sysmon 122 drivers/remoteproc/qcom_sysmon.c mutex_unlock(&sysmon->lock); sysmon 128 drivers/remoteproc/qcom_sysmon.c struct qcom_sysmon *sysmon = priv; sysmon 132 drivers/remoteproc/qcom_sysmon.c if (!sysmon) sysmon 136 drivers/remoteproc/qcom_sysmon.c sysmon->ssr_ack = true; sysmon 138 drivers/remoteproc/qcom_sysmon.c complete(&sysmon->comp); sysmon 267 drivers/remoteproc/qcom_sysmon.c struct qcom_sysmon *sysmon = container_of(qmi, struct qcom_sysmon, qmi); sysmon 269 drivers/remoteproc/qcom_sysmon.c complete(&sysmon->ind_comp); sysmon 287 drivers/remoteproc/qcom_sysmon.c static void ssctl_request_shutdown(struct qcom_sysmon *sysmon) sysmon 293 drivers/remoteproc/qcom_sysmon.c reinit_completion(&sysmon->ind_comp); sysmon 294 drivers/remoteproc/qcom_sysmon.c reinit_completion(&sysmon->shutdown_comp); sysmon 295 drivers/remoteproc/qcom_sysmon.c ret = qmi_txn_init(&sysmon->qmi, &txn, ssctl_shutdown_resp_ei, &resp); sysmon 297 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "failed to allocate QMI txn\n"); sysmon 301 drivers/remoteproc/qcom_sysmon.c ret = qmi_send_request(&sysmon->qmi, &sysmon->ssctl, &txn, sysmon 304 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "failed to send shutdown request\n"); sysmon 311 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "failed receiving QMI response\n"); sysmon 313 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "shutdown request failed\n"); sysmon 315 drivers/remoteproc/qcom_sysmon.c dev_dbg(sysmon->dev, "shutdown request completed\n"); sysmon 317 drivers/remoteproc/qcom_sysmon.c if (sysmon->shutdown_irq > 0) { sysmon 318 drivers/remoteproc/qcom_sysmon.c ret = wait_for_completion_timeout(&sysmon->shutdown_comp, sysmon 321 drivers/remoteproc/qcom_sysmon.c ret = try_wait_for_completion(&sysmon->ind_comp); sysmon 323 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, sysmon 334 drivers/remoteproc/qcom_sysmon.c static void ssctl_send_event(struct qcom_sysmon *sysmon, const char *name) sysmon 342 drivers/remoteproc/qcom_sysmon.c ret = qmi_txn_init(&sysmon->qmi, &txn, ssctl_subsys_event_resp_ei, &resp); sysmon 344 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "failed to allocate QMI txn\n"); sysmon 355 drivers/remoteproc/qcom_sysmon.c ret = qmi_send_request(&sysmon->qmi, &sysmon->ssctl, &txn, sysmon 359 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "failed to send shutdown request\n"); sysmon 366 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "failed receiving QMI response\n"); sysmon 368 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "ssr event send failed\n"); sysmon 370 drivers/remoteproc/qcom_sysmon.c dev_dbg(sysmon->dev, "ssr event send completed\n"); sysmon 382 drivers/remoteproc/qcom_sysmon.c struct qcom_sysmon *sysmon = container_of(qmi, struct qcom_sysmon, qmi); sysmon 388 drivers/remoteproc/qcom_sysmon.c if (strcmp(sysmon->name, "modem")) sysmon 392 drivers/remoteproc/qcom_sysmon.c if (svc->instance != sysmon->ssctl_instance) sysmon 399 drivers/remoteproc/qcom_sysmon.c sysmon->ssctl_version = svc->version; sysmon 401 drivers/remoteproc/qcom_sysmon.c sysmon->ssctl.sq_family = AF_QIPCRTR; sysmon 402 drivers/remoteproc/qcom_sysmon.c sysmon->ssctl.sq_node = svc->node; sysmon 403 drivers/remoteproc/qcom_sysmon.c sysmon->ssctl.sq_port = svc->port; sysmon 405 drivers/remoteproc/qcom_sysmon.c svc->priv = sysmon; sysmon 417 drivers/remoteproc/qcom_sysmon.c struct qcom_sysmon *sysmon = svc->priv; sysmon 419 drivers/remoteproc/qcom_sysmon.c sysmon->ssctl_version = 0; sysmon 434 drivers/remoteproc/qcom_sysmon.c struct qcom_sysmon *sysmon = container_of(subdev, struct qcom_sysmon, subdev); sysmon 436 drivers/remoteproc/qcom_sysmon.c blocking_notifier_call_chain(&sysmon_notifiers, 0, (void *)sysmon->name); sysmon 442 drivers/remoteproc/qcom_sysmon.c if (sysmon->ssctl_version) sysmon 443 drivers/remoteproc/qcom_sysmon.c ssctl_request_shutdown(sysmon); sysmon 444 drivers/remoteproc/qcom_sysmon.c else if (sysmon->ept) sysmon 445 drivers/remoteproc/qcom_sysmon.c sysmon_request_shutdown(sysmon); sysmon 457 drivers/remoteproc/qcom_sysmon.c struct qcom_sysmon *sysmon = container_of(nb, struct qcom_sysmon, nb); sysmon 458 drivers/remoteproc/qcom_sysmon.c struct rproc *rproc = sysmon->rproc; sysmon 462 drivers/remoteproc/qcom_sysmon.c if (rproc->state != RPROC_RUNNING || !strcmp(data, sysmon->name)) { sysmon 463 drivers/remoteproc/qcom_sysmon.c dev_dbg(sysmon->dev, "not notifying %s\n", sysmon->name); sysmon 468 drivers/remoteproc/qcom_sysmon.c if (sysmon->ssctl_version == 2) sysmon 469 drivers/remoteproc/qcom_sysmon.c ssctl_send_event(sysmon, ssr_name); sysmon 470 drivers/remoteproc/qcom_sysmon.c else if (sysmon->ept) sysmon 471 drivers/remoteproc/qcom_sysmon.c sysmon_send_event(sysmon, ssr_name); sysmon 478 drivers/remoteproc/qcom_sysmon.c struct qcom_sysmon *sysmon = data; sysmon 480 drivers/remoteproc/qcom_sysmon.c complete(&sysmon->shutdown_comp); sysmon 497 drivers/remoteproc/qcom_sysmon.c struct qcom_sysmon *sysmon; sysmon 500 drivers/remoteproc/qcom_sysmon.c sysmon = kzalloc(sizeof(*sysmon), GFP_KERNEL); sysmon 501 drivers/remoteproc/qcom_sysmon.c if (!sysmon) sysmon 504 drivers/remoteproc/qcom_sysmon.c sysmon->dev = rproc->dev.parent; sysmon 505 drivers/remoteproc/qcom_sysmon.c sysmon->rproc = rproc; sysmon 507 drivers/remoteproc/qcom_sysmon.c sysmon->name = name; sysmon 508 drivers/remoteproc/qcom_sysmon.c sysmon->ssctl_instance = ssctl_instance; sysmon 510 drivers/remoteproc/qcom_sysmon.c init_completion(&sysmon->comp); sysmon 511 drivers/remoteproc/qcom_sysmon.c init_completion(&sysmon->ind_comp); sysmon 512 drivers/remoteproc/qcom_sysmon.c init_completion(&sysmon->shutdown_comp); sysmon 513 drivers/remoteproc/qcom_sysmon.c mutex_init(&sysmon->lock); sysmon 515 drivers/remoteproc/qcom_sysmon.c sysmon->shutdown_irq = of_irq_get_byname(sysmon->dev->of_node, sysmon 517 drivers/remoteproc/qcom_sysmon.c if (sysmon->shutdown_irq < 0) { sysmon 518 drivers/remoteproc/qcom_sysmon.c if (sysmon->shutdown_irq != -ENODATA) { sysmon 519 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, sysmon 521 drivers/remoteproc/qcom_sysmon.c return ERR_PTR(sysmon->shutdown_irq); sysmon 524 drivers/remoteproc/qcom_sysmon.c ret = devm_request_threaded_irq(sysmon->dev, sysmon 525 drivers/remoteproc/qcom_sysmon.c sysmon->shutdown_irq, sysmon 528 drivers/remoteproc/qcom_sysmon.c "q6v5 shutdown-ack", sysmon); sysmon 530 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, sysmon 536 drivers/remoteproc/qcom_sysmon.c ret = qmi_handle_init(&sysmon->qmi, SSCTL_MAX_MSG_LEN, &ssctl_ops, sysmon 539 drivers/remoteproc/qcom_sysmon.c dev_err(sysmon->dev, "failed to initialize qmi handle\n"); sysmon 540 drivers/remoteproc/qcom_sysmon.c kfree(sysmon); sysmon 544 drivers/remoteproc/qcom_sysmon.c qmi_add_lookup(&sysmon->qmi, 43, 0, 0); sysmon 546 drivers/remoteproc/qcom_sysmon.c sysmon->subdev.start = sysmon_start; sysmon 547 drivers/remoteproc/qcom_sysmon.c sysmon->subdev.stop = sysmon_stop; sysmon 549 drivers/remoteproc/qcom_sysmon.c rproc_add_subdev(rproc, &sysmon->subdev); sysmon 551 drivers/remoteproc/qcom_sysmon.c sysmon->nb.notifier_call = sysmon_notify; sysmon 552 drivers/remoteproc/qcom_sysmon.c blocking_notifier_chain_register(&sysmon_notifiers, &sysmon->nb); sysmon 555 drivers/remoteproc/qcom_sysmon.c list_add(&sysmon->node, &sysmon_list); sysmon 558 drivers/remoteproc/qcom_sysmon.c return sysmon; sysmon 566 drivers/remoteproc/qcom_sysmon.c void qcom_remove_sysmon_subdev(struct qcom_sysmon *sysmon) sysmon 568 drivers/remoteproc/qcom_sysmon.c if (!sysmon) sysmon 572 drivers/remoteproc/qcom_sysmon.c list_del(&sysmon->node); sysmon 575 drivers/remoteproc/qcom_sysmon.c blocking_notifier_chain_unregister(&sysmon_notifiers, &sysmon->nb); sysmon 577 drivers/remoteproc/qcom_sysmon.c rproc_remove_subdev(sysmon->rproc, &sysmon->subdev); sysmon 579 drivers/remoteproc/qcom_sysmon.c qmi_handle_release(&sysmon->qmi); sysmon 581 drivers/remoteproc/qcom_sysmon.c kfree(sysmon); sysmon 596 drivers/remoteproc/qcom_sysmon.c struct qcom_sysmon *sysmon; sysmon 606 drivers/remoteproc/qcom_sysmon.c list_for_each_entry(sysmon, &sysmon_list, node) { sysmon 607 drivers/remoteproc/qcom_sysmon.c if (sysmon->rproc == rproc) sysmon 619 drivers/remoteproc/qcom_sysmon.c rpdev->ept->priv = sysmon; sysmon 620 drivers/remoteproc/qcom_sysmon.c sysmon->ept = rpdev->ept; sysmon 633 drivers/remoteproc/qcom_sysmon.c struct qcom_sysmon *sysmon = rpdev->ept->priv; sysmon 635 drivers/remoteproc/qcom_sysmon.c sysmon->ept = NULL; sysmon 94 drivers/remoteproc/qcom_wcnss.c struct qcom_sysmon *sysmon; sysmon 547 drivers/remoteproc/qcom_wcnss.c wcnss->sysmon = qcom_add_sysmon_subdev(rproc, "wcnss", WCNSS_SSCTL_ID); sysmon 548 drivers/remoteproc/qcom_wcnss.c if (IS_ERR(wcnss->sysmon)) { sysmon 549 drivers/remoteproc/qcom_wcnss.c ret = PTR_ERR(wcnss->sysmon); sysmon 574 drivers/remoteproc/qcom_wcnss.c qcom_remove_sysmon_subdev(wcnss->sysmon);