Lines Matching refs:qproc
222 static int q6v5_regulator_enable(struct q6v5 *qproc, in q6v5_regulator_enable() argument
233 dev_err(qproc->dev, in q6v5_regulator_enable()
244 dev_err(qproc->dev, in q6v5_regulator_enable()
252 dev_err(qproc->dev, "Regulator enable failed\n"); in q6v5_regulator_enable()
272 static void q6v5_regulator_disable(struct q6v5 *qproc, in q6v5_regulator_disable() argument
319 static int q6v5_xfer_mem_ownership(struct q6v5 *qproc, int *current_perm, in q6v5_xfer_mem_ownership() argument
325 if (!qproc->need_mem_protection) in q6v5_xfer_mem_ownership()
341 struct q6v5 *qproc = rproc->priv; in q6v5_load() local
343 memcpy(qproc->mba_region, fw->data, fw->size); in q6v5_load()
348 static int q6v5_reset_assert(struct q6v5 *qproc) in q6v5_reset_assert() argument
350 if (qproc->has_alt_reset) in q6v5_reset_assert()
351 return reset_control_reset(qproc->mss_restart); in q6v5_reset_assert()
353 return reset_control_assert(qproc->mss_restart); in q6v5_reset_assert()
356 static int q6v5_reset_deassert(struct q6v5 *qproc) in q6v5_reset_deassert() argument
360 if (qproc->has_alt_reset) { in q6v5_reset_deassert()
361 writel(1, qproc->rmb_base + RMB_MBA_ALT_RESET); in q6v5_reset_deassert()
362 ret = reset_control_reset(qproc->mss_restart); in q6v5_reset_deassert()
363 writel(0, qproc->rmb_base + RMB_MBA_ALT_RESET); in q6v5_reset_deassert()
365 ret = reset_control_deassert(qproc->mss_restart); in q6v5_reset_deassert()
371 static int q6v5_rmb_pbl_wait(struct q6v5 *qproc, int ms) in q6v5_rmb_pbl_wait() argument
378 val = readl(qproc->rmb_base + RMB_PBL_STATUS_REG); in q6v5_rmb_pbl_wait()
391 static int q6v5_rmb_mba_wait(struct q6v5 *qproc, u32 status, int ms) in q6v5_rmb_mba_wait() argument
399 val = readl(qproc->rmb_base + RMB_MBA_STATUS_REG); in q6v5_rmb_mba_wait()
417 static int q6v5proc_reset(struct q6v5 *qproc) in q6v5proc_reset() argument
423 if (qproc->version == MSS_SDM845) { in q6v5proc_reset()
424 val = readl(qproc->reg_base + QDSP6SS_SLEEP); in q6v5proc_reset()
426 writel(val, qproc->reg_base + QDSP6SS_SLEEP); in q6v5proc_reset()
428 ret = readl_poll_timeout(qproc->reg_base + QDSP6SS_SLEEP, in q6v5proc_reset()
432 dev_err(qproc->dev, "QDSP6SS Sleep clock timed out\n"); in q6v5proc_reset()
437 writel(1, qproc->reg_base + QDSP6SS_BOOT_CORE_START); in q6v5proc_reset()
439 writel(1, qproc->reg_base + QDSP6SS_BOOT_CMD); in q6v5proc_reset()
441 ret = readl_poll_timeout(qproc->rmb_base + RMB_MBA_MSS_STATUS, in q6v5proc_reset()
444 dev_err(qproc->dev, "Boot FSM failed to complete.\n"); in q6v5proc_reset()
446 q6v5_reset_deassert(qproc); in q6v5proc_reset()
451 } else if (qproc->version == MSS_MSM8996) { in q6v5proc_reset()
454 qproc->reg_base + QDSP6SS_STRAP_ACC); in q6v5proc_reset()
457 val = readl(qproc->reg_base + QDSP6SS_RESET_REG); in q6v5proc_reset()
459 writel(val, qproc->reg_base + QDSP6SS_RESET_REG); in q6v5proc_reset()
462 val = readl(qproc->reg_base + QDSP6SS_XO_CBCR); in q6v5proc_reset()
464 writel(val, qproc->reg_base + QDSP6SS_XO_CBCR); in q6v5proc_reset()
467 ret = readl_poll_timeout(qproc->reg_base + QDSP6SS_XO_CBCR, in q6v5proc_reset()
471 dev_err(qproc->dev, in q6v5proc_reset()
476 val = readl(qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
478 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
479 val |= readl(qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
484 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
487 val = readl(qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
489 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
493 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
496 val = readl(qproc->reg_base + QDSP6SS_MEM_PWR_CTL); in q6v5proc_reset()
499 writel(val, qproc->reg_base + in q6v5proc_reset()
506 val |= readl(qproc->reg_base + QDSP6SS_MEM_PWR_CTL); in q6v5proc_reset()
510 val = readl(qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
512 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
515 val = readl(qproc->reg_base + QDSP6SS_RESET_REG); in q6v5proc_reset()
517 writel(val, qproc->reg_base + QDSP6SS_RESET_REG); in q6v5proc_reset()
520 val = readl(qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
522 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
523 val |= readl(qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
529 val = readl(qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
532 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
534 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
536 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
538 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
542 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5proc_reset()
545 val = readl(qproc->reg_base + QDSP6SS_RESET_REG); in q6v5proc_reset()
547 writel(val, qproc->reg_base + QDSP6SS_RESET_REG); in q6v5proc_reset()
550 val = readl(qproc->reg_base + QDSP6SS_GFMUX_CTL_REG); in q6v5proc_reset()
552 writel(val, qproc->reg_base + QDSP6SS_GFMUX_CTL_REG); in q6v5proc_reset()
555 val = readl(qproc->reg_base + QDSP6SS_RESET_REG); in q6v5proc_reset()
557 writel(val, qproc->reg_base + QDSP6SS_RESET_REG); in q6v5proc_reset()
561 ret = q6v5_rmb_pbl_wait(qproc, 1000); in q6v5proc_reset()
563 dev_err(qproc->dev, "PBL boot timed out\n"); in q6v5proc_reset()
565 dev_err(qproc->dev, "PBL returned unexpected status %d\n", ret); in q6v5proc_reset()
574 static void q6v5proc_halt_axi_port(struct q6v5 *qproc, in q6v5proc_halt_axi_port() argument
602 dev_err(qproc->dev, "port failed halt\n"); in q6v5proc_halt_axi_port()
608 static int q6v5_mpss_init_image(struct q6v5 *qproc, const struct firmware *fw) in q6v5_mpss_init_image() argument
617 ptr = dma_alloc_attrs(qproc->dev, fw->size, &phys, GFP_KERNEL, dma_attrs); in q6v5_mpss_init_image()
619 dev_err(qproc->dev, "failed to allocate mdt buffer\n"); in q6v5_mpss_init_image()
627 ret = q6v5_xfer_mem_ownership(qproc, &mdata_perm, in q6v5_mpss_init_image()
630 dev_err(qproc->dev, in q6v5_mpss_init_image()
636 writel(phys, qproc->rmb_base + RMB_PMI_META_DATA_REG); in q6v5_mpss_init_image()
637 writel(RMB_CMD_META_DATA_READY, qproc->rmb_base + RMB_MBA_COMMAND_REG); in q6v5_mpss_init_image()
639 ret = q6v5_rmb_mba_wait(qproc, RMB_MBA_META_DATA_AUTH_SUCCESS, 1000); in q6v5_mpss_init_image()
641 dev_err(qproc->dev, "MPSS header authentication timed out\n"); in q6v5_mpss_init_image()
643 dev_err(qproc->dev, "MPSS header authentication failed: %d\n", ret); in q6v5_mpss_init_image()
646 xferop_ret = q6v5_xfer_mem_ownership(qproc, &mdata_perm, in q6v5_mpss_init_image()
649 dev_warn(qproc->dev, in q6v5_mpss_init_image()
653 dma_free_attrs(qproc->dev, fw->size, ptr, phys, dma_attrs); in q6v5_mpss_init_image()
672 static int q6v5_mpss_load(struct q6v5 *qproc) in q6v5_mpss_load() argument
691 ret = request_firmware(&fw, "modem.mdt", qproc->dev); in q6v5_mpss_load()
693 dev_err(qproc->dev, "unable to load modem.mdt\n"); in q6v5_mpss_load()
698 writel(0, qproc->rmb_base + RMB_PMI_CODE_LENGTH_REG); in q6v5_mpss_load()
700 ret = q6v5_mpss_init_image(qproc, fw); in q6v5_mpss_load()
723 mpss_reloc = relocate ? min_addr : qproc->mpss_phys; in q6v5_mpss_load()
732 if (offset < 0 || offset + phdr->p_memsz > qproc->mpss_size) { in q6v5_mpss_load()
733 dev_err(qproc->dev, "segment outside memory range\n"); in q6v5_mpss_load()
738 ptr = qproc->mpss_region + offset; in q6v5_mpss_load()
742 ret = request_firmware(&seg_fw, seg_name, qproc->dev); in q6v5_mpss_load()
744 dev_err(qproc->dev, "failed to load %s\n", seg_name); in q6v5_mpss_load()
761 ret = q6v5_xfer_mem_ownership(qproc, &qproc->mpss_perm, true, in q6v5_mpss_load()
762 qproc->mpss_phys, qproc->mpss_size); in q6v5_mpss_load()
764 dev_err(qproc->dev, in q6v5_mpss_load()
770 boot_addr = relocate ? qproc->mpss_phys : min_addr; in q6v5_mpss_load()
771 writel(boot_addr, qproc->rmb_base + RMB_PMI_CODE_START_REG); in q6v5_mpss_load()
772 writel(RMB_CMD_LOAD_READY, qproc->rmb_base + RMB_MBA_COMMAND_REG); in q6v5_mpss_load()
773 writel(size, qproc->rmb_base + RMB_PMI_CODE_LENGTH_REG); in q6v5_mpss_load()
775 ret = q6v5_rmb_mba_wait(qproc, RMB_MBA_AUTH_COMPLETE, 10000); in q6v5_mpss_load()
777 dev_err(qproc->dev, "MPSS authentication timed out\n"); in q6v5_mpss_load()
779 dev_err(qproc->dev, "MPSS authentication failed: %d\n", ret); in q6v5_mpss_load()
789 struct q6v5 *qproc = (struct q6v5 *)rproc->priv; in q6v5_start() local
793 qcom_q6v5_prepare(&qproc->q6v5); in q6v5_start()
795 ret = q6v5_regulator_enable(qproc, qproc->proxy_regs, in q6v5_start()
796 qproc->proxy_reg_count); in q6v5_start()
798 dev_err(qproc->dev, "failed to enable proxy supplies\n"); in q6v5_start()
802 ret = q6v5_clk_enable(qproc->dev, qproc->proxy_clks, in q6v5_start()
803 qproc->proxy_clk_count); in q6v5_start()
805 dev_err(qproc->dev, "failed to enable proxy clocks\n"); in q6v5_start()
809 ret = q6v5_regulator_enable(qproc, qproc->active_regs, in q6v5_start()
810 qproc->active_reg_count); in q6v5_start()
812 dev_err(qproc->dev, "failed to enable supplies\n"); in q6v5_start()
816 ret = q6v5_clk_enable(qproc->dev, qproc->reset_clks, in q6v5_start()
817 qproc->reset_clk_count); in q6v5_start()
819 dev_err(qproc->dev, "failed to enable reset clocks\n"); in q6v5_start()
823 ret = q6v5_reset_deassert(qproc); in q6v5_start()
825 dev_err(qproc->dev, "failed to deassert mss restart\n"); in q6v5_start()
829 ret = q6v5_clk_enable(qproc->dev, qproc->active_clks, in q6v5_start()
830 qproc->active_clk_count); in q6v5_start()
832 dev_err(qproc->dev, "failed to enable clocks\n"); in q6v5_start()
837 ret = q6v5_xfer_mem_ownership(qproc, &qproc->mba_perm, true, in q6v5_start()
838 qproc->mba_phys, qproc->mba_size); in q6v5_start()
840 dev_err(qproc->dev, in q6v5_start()
845 writel(qproc->mba_phys, qproc->rmb_base + RMB_MBA_IMAGE_REG); in q6v5_start()
847 ret = q6v5proc_reset(qproc); in q6v5_start()
851 ret = q6v5_rmb_mba_wait(qproc, 0, 5000); in q6v5_start()
853 dev_err(qproc->dev, "MBA boot timed out\n"); in q6v5_start()
857 dev_err(qproc->dev, "MBA returned unexpected status %d\n", ret); in q6v5_start()
862 dev_info(qproc->dev, "MBA booted, loading mpss\n"); in q6v5_start()
864 ret = q6v5_mpss_load(qproc); in q6v5_start()
868 ret = qcom_q6v5_wait_for_start(&qproc->q6v5, msecs_to_jiffies(5000)); in q6v5_start()
870 dev_err(qproc->dev, "start timed out\n"); in q6v5_start()
874 xfermemop_ret = q6v5_xfer_mem_ownership(qproc, &qproc->mba_perm, false, in q6v5_start()
875 qproc->mba_phys, in q6v5_start()
876 qproc->mba_size); in q6v5_start()
878 dev_err(qproc->dev, in q6v5_start()
880 qproc->running = true; in q6v5_start()
885 xfermemop_ret = q6v5_xfer_mem_ownership(qproc, &qproc->mpss_perm, in q6v5_start()
886 false, qproc->mpss_phys, in q6v5_start()
887 qproc->mpss_size); in q6v5_start()
891 q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_q6); in q6v5_start()
892 q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_modem); in q6v5_start()
893 q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_nc); in q6v5_start()
896 xfermemop_ret = q6v5_xfer_mem_ownership(qproc, &qproc->mba_perm, false, in q6v5_start()
897 qproc->mba_phys, in q6v5_start()
898 qproc->mba_size); in q6v5_start()
900 dev_err(qproc->dev, in q6v5_start()
905 q6v5_clk_disable(qproc->dev, qproc->active_clks, in q6v5_start()
906 qproc->active_clk_count); in q6v5_start()
909 q6v5_reset_assert(qproc); in q6v5_start()
911 q6v5_clk_disable(qproc->dev, qproc->reset_clks, in q6v5_start()
912 qproc->reset_clk_count); in q6v5_start()
914 q6v5_regulator_disable(qproc, qproc->active_regs, in q6v5_start()
915 qproc->active_reg_count); in q6v5_start()
917 q6v5_clk_disable(qproc->dev, qproc->proxy_clks, in q6v5_start()
918 qproc->proxy_clk_count); in q6v5_start()
920 q6v5_regulator_disable(qproc, qproc->proxy_regs, in q6v5_start()
921 qproc->proxy_reg_count); in q6v5_start()
924 qcom_q6v5_unprepare(&qproc->q6v5); in q6v5_start()
931 struct q6v5 *qproc = (struct q6v5 *)rproc->priv; in q6v5_stop() local
935 qproc->running = false; in q6v5_stop()
937 ret = qcom_q6v5_request_stop(&qproc->q6v5); in q6v5_stop()
939 dev_err(qproc->dev, "timed out on wait\n"); in q6v5_stop()
941 q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_q6); in q6v5_stop()
942 q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_modem); in q6v5_stop()
943 q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_nc); in q6v5_stop()
944 if (qproc->version == MSS_MSM8996) { in q6v5_stop()
948 val = readl(qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5_stop()
951 writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG); in q6v5_stop()
955 ret = q6v5_xfer_mem_ownership(qproc, &qproc->mpss_perm, false, in q6v5_stop()
956 qproc->mpss_phys, qproc->mpss_size); in q6v5_stop()
959 q6v5_reset_assert(qproc); in q6v5_stop()
961 ret = qcom_q6v5_unprepare(&qproc->q6v5); in q6v5_stop()
963 q6v5_clk_disable(qproc->dev, qproc->proxy_clks, in q6v5_stop()
964 qproc->proxy_clk_count); in q6v5_stop()
965 q6v5_regulator_disable(qproc, qproc->proxy_regs, in q6v5_stop()
966 qproc->proxy_reg_count); in q6v5_stop()
969 q6v5_clk_disable(qproc->dev, qproc->reset_clks, in q6v5_stop()
970 qproc->reset_clk_count); in q6v5_stop()
971 q6v5_clk_disable(qproc->dev, qproc->active_clks, in q6v5_stop()
972 qproc->active_clk_count); in q6v5_stop()
973 q6v5_regulator_disable(qproc, qproc->active_regs, in q6v5_stop()
974 qproc->active_reg_count); in q6v5_stop()
981 struct q6v5 *qproc = rproc->priv; in q6v5_da_to_va() local
984 offset = da - qproc->mpss_reloc; in q6v5_da_to_va()
985 if (offset < 0 || offset + len > qproc->mpss_size) in q6v5_da_to_va()
988 return qproc->mpss_region + offset; in q6v5_da_to_va()
1000 struct q6v5 *qproc = container_of(q6v5, struct q6v5, q6v5); in qcom_msa_handover() local
1002 q6v5_clk_disable(qproc->dev, qproc->proxy_clks, in qcom_msa_handover()
1003 qproc->proxy_clk_count); in qcom_msa_handover()
1004 q6v5_regulator_disable(qproc, qproc->proxy_regs, in qcom_msa_handover()
1005 qproc->proxy_reg_count); in qcom_msa_handover()
1008 static int q6v5_init_mem(struct q6v5 *qproc, struct platform_device *pdev) in q6v5_init_mem() argument
1015 qproc->reg_base = devm_ioremap_resource(&pdev->dev, res); in q6v5_init_mem()
1016 if (IS_ERR(qproc->reg_base)) in q6v5_init_mem()
1017 return PTR_ERR(qproc->reg_base); in q6v5_init_mem()
1020 qproc->rmb_base = devm_ioremap_resource(&pdev->dev, res); in q6v5_init_mem()
1021 if (IS_ERR(qproc->rmb_base)) in q6v5_init_mem()
1022 return PTR_ERR(qproc->rmb_base); in q6v5_init_mem()
1031 qproc->halt_map = syscon_node_to_regmap(args.np); in q6v5_init_mem()
1033 if (IS_ERR(qproc->halt_map)) in q6v5_init_mem()
1034 return PTR_ERR(qproc->halt_map); in q6v5_init_mem()
1036 qproc->halt_q6 = args.args[0]; in q6v5_init_mem()
1037 qproc->halt_modem = args.args[1]; in q6v5_init_mem()
1038 qproc->halt_nc = args.args[2]; in q6v5_init_mem()
1066 static int q6v5_init_reset(struct q6v5 *qproc) in q6v5_init_reset() argument
1068 qproc->mss_restart = devm_reset_control_get_exclusive(qproc->dev, in q6v5_init_reset()
1070 if (IS_ERR(qproc->mss_restart)) { in q6v5_init_reset()
1071 dev_err(qproc->dev, "failed to acquire mss restart\n"); in q6v5_init_reset()
1072 return PTR_ERR(qproc->mss_restart); in q6v5_init_reset()
1078 static int q6v5_alloc_memory_region(struct q6v5 *qproc) in q6v5_alloc_memory_region() argument
1085 child = of_get_child_by_name(qproc->dev->of_node, "mba"); in q6v5_alloc_memory_region()
1089 dev_err(qproc->dev, "unable to resolve mba region\n"); in q6v5_alloc_memory_region()
1094 qproc->mba_phys = r.start; in q6v5_alloc_memory_region()
1095 qproc->mba_size = resource_size(&r); in q6v5_alloc_memory_region()
1096 qproc->mba_region = devm_ioremap_wc(qproc->dev, qproc->mba_phys, qproc->mba_size); in q6v5_alloc_memory_region()
1097 if (!qproc->mba_region) { in q6v5_alloc_memory_region()
1098 dev_err(qproc->dev, "unable to map memory region: %pa+%zx\n", in q6v5_alloc_memory_region()
1099 &r.start, qproc->mba_size); in q6v5_alloc_memory_region()
1103 child = of_get_child_by_name(qproc->dev->of_node, "mpss"); in q6v5_alloc_memory_region()
1107 dev_err(qproc->dev, "unable to resolve mpss region\n"); in q6v5_alloc_memory_region()
1112 qproc->mpss_phys = qproc->mpss_reloc = r.start; in q6v5_alloc_memory_region()
1113 qproc->mpss_size = resource_size(&r); in q6v5_alloc_memory_region()
1114 qproc->mpss_region = devm_ioremap_wc(qproc->dev, qproc->mpss_phys, qproc->mpss_size); in q6v5_alloc_memory_region()
1115 if (!qproc->mpss_region) { in q6v5_alloc_memory_region()
1116 dev_err(qproc->dev, "unable to map memory region: %pa+%zx\n", in q6v5_alloc_memory_region()
1117 &r.start, qproc->mpss_size); in q6v5_alloc_memory_region()
1127 struct q6v5 *qproc; in q6v5_probe() local
1136 desc->hexagon_mba_image, sizeof(*qproc)); in q6v5_probe()
1142 qproc = (struct q6v5 *)rproc->priv; in q6v5_probe()
1143 qproc->dev = &pdev->dev; in q6v5_probe()
1144 qproc->rproc = rproc; in q6v5_probe()
1145 platform_set_drvdata(pdev, qproc); in q6v5_probe()
1147 ret = q6v5_init_mem(qproc, pdev); in q6v5_probe()
1151 ret = q6v5_alloc_memory_region(qproc); in q6v5_probe()
1155 ret = q6v5_init_clocks(&pdev->dev, qproc->proxy_clks, in q6v5_probe()
1161 qproc->proxy_clk_count = ret; in q6v5_probe()
1163 ret = q6v5_init_clocks(&pdev->dev, qproc->reset_clks, in q6v5_probe()
1169 qproc->reset_clk_count = ret; in q6v5_probe()
1171 ret = q6v5_init_clocks(&pdev->dev, qproc->active_clks, in q6v5_probe()
1177 qproc->active_clk_count = ret; in q6v5_probe()
1179 ret = q6v5_regulator_init(&pdev->dev, qproc->proxy_regs, in q6v5_probe()
1185 qproc->proxy_reg_count = ret; in q6v5_probe()
1187 ret = q6v5_regulator_init(&pdev->dev, qproc->active_regs, in q6v5_probe()
1193 qproc->active_reg_count = ret; in q6v5_probe()
1195 ret = q6v5_init_reset(qproc); in q6v5_probe()
1199 qproc->version = desc->version; in q6v5_probe()
1200 qproc->has_alt_reset = desc->has_alt_reset; in q6v5_probe()
1201 qproc->need_mem_protection = desc->need_mem_protection; in q6v5_probe()
1203 ret = qcom_q6v5_init(&qproc->q6v5, pdev, rproc, MPSS_CRASH_REASON_SMEM, in q6v5_probe()
1208 qproc->mpss_perm = BIT(QCOM_SCM_VMID_HLOS); in q6v5_probe()
1209 qproc->mba_perm = BIT(QCOM_SCM_VMID_HLOS); in q6v5_probe()
1210 qcom_add_glink_subdev(rproc, &qproc->glink_subdev); in q6v5_probe()
1211 qcom_add_smd_subdev(rproc, &qproc->smd_subdev); in q6v5_probe()
1212 qcom_add_ssr_subdev(rproc, &qproc->ssr_subdev, "mpss"); in q6v5_probe()
1213 qproc->sysmon = qcom_add_sysmon_subdev(rproc, "modem", 0x12); in q6v5_probe()
1229 struct q6v5 *qproc = platform_get_drvdata(pdev); in q6v5_remove() local
1231 rproc_del(qproc->rproc); in q6v5_remove()
1233 qcom_remove_sysmon_subdev(qproc->sysmon); in q6v5_remove()
1234 qcom_remove_glink_subdev(qproc->rproc, &qproc->glink_subdev); in q6v5_remove()
1235 qcom_remove_smd_subdev(qproc->rproc, &qproc->smd_subdev); in q6v5_remove()
1236 qcom_remove_ssr_subdev(qproc->rproc, &qproc->ssr_subdev); in q6v5_remove()
1237 rproc_free(qproc->rproc); in q6v5_remove()