static int q6v5_init_mem()

in qcom_q6v5_mss.c [1615:1712]


static int q6v5_init_mem(struct q6v5 *qproc, struct platform_device *pdev)
{
	struct of_phandle_args args;
	int halt_cell_cnt = 3;
	int ret;

	qproc->reg_base = devm_platform_ioremap_resource_byname(pdev, "qdsp6");
	if (IS_ERR(qproc->reg_base))
		return PTR_ERR(qproc->reg_base);

	qproc->rmb_base = devm_platform_ioremap_resource_byname(pdev, "rmb");
	if (IS_ERR(qproc->rmb_base))
		return PTR_ERR(qproc->rmb_base);

	if (qproc->has_vq6)
		halt_cell_cnt++;

	ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
					       "qcom,halt-regs", halt_cell_cnt, 0, &args);
	if (ret < 0) {
		dev_err(&pdev->dev, "failed to parse qcom,halt-regs\n");
		return -EINVAL;
	}

	qproc->halt_map = syscon_node_to_regmap(args.np);
	of_node_put(args.np);
	if (IS_ERR(qproc->halt_map))
		return PTR_ERR(qproc->halt_map);

	qproc->halt_q6 = args.args[0];
	qproc->halt_modem = args.args[1];
	qproc->halt_nc = args.args[2];

	if (qproc->has_vq6)
		qproc->halt_vq6 = args.args[3];

	if (qproc->has_qaccept_regs) {
		ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
						       "qcom,qaccept-regs",
						       3, 0, &args);
		if (ret < 0) {
			dev_err(&pdev->dev, "failed to parse qaccept-regs\n");
			return -EINVAL;
		}

		qproc->qaccept_mdm = args.args[0];
		qproc->qaccept_cx = args.args[1];
		qproc->qaccept_axi = args.args[2];
	}

	if (qproc->has_ext_cntl_regs) {
		ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
						       "qcom,ext-regs",
						       2, 0, &args);
		if (ret < 0) {
			dev_err(&pdev->dev, "failed to parse ext-regs index 0\n");
			return -EINVAL;
		}

		qproc->conn_map = syscon_node_to_regmap(args.np);
		of_node_put(args.np);
		if (IS_ERR(qproc->conn_map))
			return PTR_ERR(qproc->conn_map);

		qproc->force_clk_on = args.args[0];
		qproc->rscc_disable = args.args[1];

		ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
						       "qcom,ext-regs",
						       2, 1, &args);
		if (ret < 0) {
			dev_err(&pdev->dev, "failed to parse ext-regs index 1\n");
			return -EINVAL;
		}

		qproc->axim1_clk_off = args.args[0];
		qproc->crypto_clk_off = args.args[1];
	}

	if (qproc->has_spare_reg) {
		ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
						       "qcom,spare-regs",
						       1, 0, &args);
		if (ret < 0) {
			dev_err(&pdev->dev, "failed to parse spare-regs\n");
			return -EINVAL;
		}

		qproc->conn_map = syscon_node_to_regmap(args.np);
		of_node_put(args.np);
		if (IS_ERR(qproc->conn_map))
			return PTR_ERR(qproc->conn_map);

		qproc->conn_box = args.args[0];
	}

	return 0;
}