wcss 96 drivers/remoteproc/qcom_q6v5_wcss.c static int q6v5_wcss_reset(struct q6v5_wcss *wcss) wcss 103 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_RESET_REG); wcss 105 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_RESET_REG); wcss 108 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_XO_CBCR); wcss 110 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_XO_CBCR); wcss 113 drivers/remoteproc/qcom_q6v5_wcss.c ret = readl_poll_timeout(wcss->reg_base + Q6SS_XO_CBCR, wcss 117 drivers/remoteproc/qcom_q6v5_wcss.c dev_err(wcss->dev, wcss 122 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 124 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 129 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 132 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 134 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 138 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 141 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_MEM_PWR_CTL); wcss 144 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_MEM_PWR_CTL); wcss 150 drivers/remoteproc/qcom_q6v5_wcss.c val |= readl(wcss->reg_base + Q6SS_MEM_PWR_CTL); wcss 154 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 156 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 160 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 163 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_RESET_REG); wcss 165 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_RESET_REG); wcss 168 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_GFMUX_CTL_REG); wcss 170 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_GFMUX_CTL_REG); wcss 173 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_RESET_REG); wcss 175 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_RESET_REG); wcss 182 drivers/remoteproc/qcom_q6v5_wcss.c struct q6v5_wcss *wcss = rproc->priv; wcss 185 drivers/remoteproc/qcom_q6v5_wcss.c qcom_q6v5_prepare(&wcss->q6v5); wcss 188 drivers/remoteproc/qcom_q6v5_wcss.c ret = reset_control_deassert(wcss->wcss_reset); wcss 190 drivers/remoteproc/qcom_q6v5_wcss.c dev_err(wcss->dev, "wcss_reset failed\n"); wcss 194 drivers/remoteproc/qcom_q6v5_wcss.c ret = reset_control_deassert(wcss->wcss_q6_reset); wcss 196 drivers/remoteproc/qcom_q6v5_wcss.c dev_err(wcss->dev, "wcss_q6_reset failed\n"); wcss 201 drivers/remoteproc/qcom_q6v5_wcss.c ret = regmap_update_bits(wcss->halt_map, wcss 202 drivers/remoteproc/qcom_q6v5_wcss.c wcss->halt_nc + TCSR_GLOBAL_CFG0, wcss 208 drivers/remoteproc/qcom_q6v5_wcss.c ret = regmap_update_bits(wcss->halt_map, wcss 209 drivers/remoteproc/qcom_q6v5_wcss.c wcss->halt_nc + TCSR_GLOBAL_CFG1, wcss 215 drivers/remoteproc/qcom_q6v5_wcss.c writel(rproc->bootaddr >> 4, wcss->reg_base + Q6SS_RST_EVB); wcss 217 drivers/remoteproc/qcom_q6v5_wcss.c ret = q6v5_wcss_reset(wcss); wcss 221 drivers/remoteproc/qcom_q6v5_wcss.c ret = qcom_q6v5_wait_for_start(&wcss->q6v5, 5 * HZ); wcss 223 drivers/remoteproc/qcom_q6v5_wcss.c dev_err(wcss->dev, "start timed out\n"); wcss 228 drivers/remoteproc/qcom_q6v5_wcss.c reset_control_assert(wcss->wcss_q6_reset); wcss 231 drivers/remoteproc/qcom_q6v5_wcss.c reset_control_assert(wcss->wcss_reset); wcss 236 drivers/remoteproc/qcom_q6v5_wcss.c static void q6v5_wcss_halt_axi_port(struct q6v5_wcss *wcss, wcss 264 drivers/remoteproc/qcom_q6v5_wcss.c dev_err(wcss->dev, "port failed halt\n"); wcss 270 drivers/remoteproc/qcom_q6v5_wcss.c static int q6v5_wcss_powerdown(struct q6v5_wcss *wcss) wcss 276 drivers/remoteproc/qcom_q6v5_wcss.c q6v5_wcss_halt_axi_port(wcss, wcss->halt_map, wcss->halt_wcss); wcss 279 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->rmb_base + SSCAON_CONFIG); wcss 281 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->rmb_base + SSCAON_CONFIG); wcss 286 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->rmb_base + SSCAON_CONFIG); wcss 290 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->rmb_base + SSCAON_CONFIG); wcss 293 drivers/remoteproc/qcom_q6v5_wcss.c ret = readl_poll_timeout(wcss->rmb_base + SSCAON_STATUS, wcss 297 drivers/remoteproc/qcom_q6v5_wcss.c dev_err(wcss->dev, wcss 303 drivers/remoteproc/qcom_q6v5_wcss.c reset_control_assert(wcss->wcss_aon_reset); wcss 306 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->rmb_base + SSCAON_CONFIG); wcss 308 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->rmb_base + SSCAON_CONFIG); wcss 311 drivers/remoteproc/qcom_q6v5_wcss.c reset_control_assert(wcss->wcss_reset); wcss 316 drivers/remoteproc/qcom_q6v5_wcss.c static int q6v5_q6_powerdown(struct q6v5_wcss *wcss) wcss 323 drivers/remoteproc/qcom_q6v5_wcss.c q6v5_wcss_halt_axi_port(wcss, wcss->halt_map, wcss->halt_q6); wcss 326 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_GFMUX_CTL_REG); wcss 328 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_GFMUX_CTL_REG); wcss 331 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 333 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 337 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 341 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 345 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 349 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_MEM_PWR_CTL); wcss 351 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_MEM_PWR_CTL); wcss 356 drivers/remoteproc/qcom_q6v5_wcss.c val = readl(wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 358 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 362 drivers/remoteproc/qcom_q6v5_wcss.c writel(val, wcss->reg_base + Q6SS_PWR_CTL_REG); wcss 366 drivers/remoteproc/qcom_q6v5_wcss.c ret = readl_poll_timeout(wcss->reg_base + Q6SS_BHS_STATUS, wcss 370 drivers/remoteproc/qcom_q6v5_wcss.c dev_err(wcss->dev, "BHS_STATUS not OFF (rc:%d)\n", ret); wcss 375 drivers/remoteproc/qcom_q6v5_wcss.c reset_control_assert(wcss->wcss_reset); wcss 378 drivers/remoteproc/qcom_q6v5_wcss.c reset_control_assert(wcss->wcss_q6_reset); wcss 385 drivers/remoteproc/qcom_q6v5_wcss.c struct q6v5_wcss *wcss = rproc->priv; wcss 389 drivers/remoteproc/qcom_q6v5_wcss.c ret = qcom_q6v5_request_stop(&wcss->q6v5); wcss 391 drivers/remoteproc/qcom_q6v5_wcss.c dev_err(wcss->dev, "timed out on wait\n"); wcss 395 drivers/remoteproc/qcom_q6v5_wcss.c ret = q6v5_wcss_powerdown(wcss); wcss 400 drivers/remoteproc/qcom_q6v5_wcss.c ret = q6v5_q6_powerdown(wcss); wcss 404 drivers/remoteproc/qcom_q6v5_wcss.c qcom_q6v5_unprepare(&wcss->q6v5); wcss 411 drivers/remoteproc/qcom_q6v5_wcss.c struct q6v5_wcss *wcss = rproc->priv; wcss 414 drivers/remoteproc/qcom_q6v5_wcss.c offset = da - wcss->mem_reloc; wcss 415 drivers/remoteproc/qcom_q6v5_wcss.c if (offset < 0 || offset + len > wcss->mem_size) wcss 418 drivers/remoteproc/qcom_q6v5_wcss.c return wcss->mem_region + offset; wcss 423 drivers/remoteproc/qcom_q6v5_wcss.c struct q6v5_wcss *wcss = rproc->priv; wcss 425 drivers/remoteproc/qcom_q6v5_wcss.c return qcom_mdt_load_no_init(wcss->dev, fw, rproc->firmware, wcss 426 drivers/remoteproc/qcom_q6v5_wcss.c 0, wcss->mem_region, wcss->mem_phys, wcss 427 drivers/remoteproc/qcom_q6v5_wcss.c wcss->mem_size, &wcss->mem_reloc); wcss 438 drivers/remoteproc/qcom_q6v5_wcss.c static int q6v5_wcss_init_reset(struct q6v5_wcss *wcss) wcss 440 drivers/remoteproc/qcom_q6v5_wcss.c struct device *dev = wcss->dev; wcss 442 drivers/remoteproc/qcom_q6v5_wcss.c wcss->wcss_aon_reset = devm_reset_control_get(dev, "wcss_aon_reset"); wcss 443 drivers/remoteproc/qcom_q6v5_wcss.c if (IS_ERR(wcss->wcss_aon_reset)) { wcss 444 drivers/remoteproc/qcom_q6v5_wcss.c dev_err(wcss->dev, "unable to acquire wcss_aon_reset\n"); wcss 445 drivers/remoteproc/qcom_q6v5_wcss.c return PTR_ERR(wcss->wcss_aon_reset); wcss 448 drivers/remoteproc/qcom_q6v5_wcss.c wcss->wcss_reset = devm_reset_control_get(dev, "wcss_reset"); wcss 449 drivers/remoteproc/qcom_q6v5_wcss.c if (IS_ERR(wcss->wcss_reset)) { wcss 450 drivers/remoteproc/qcom_q6v5_wcss.c dev_err(wcss->dev, "unable to acquire wcss_reset\n"); wcss 451 drivers/remoteproc/qcom_q6v5_wcss.c return PTR_ERR(wcss->wcss_reset); wcss 454 drivers/remoteproc/qcom_q6v5_wcss.c wcss->wcss_q6_reset = devm_reset_control_get(dev, "wcss_q6_reset"); wcss 455 drivers/remoteproc/qcom_q6v5_wcss.c if (IS_ERR(wcss->wcss_q6_reset)) { wcss 456 drivers/remoteproc/qcom_q6v5_wcss.c dev_err(wcss->dev, "unable to acquire wcss_q6_reset\n"); wcss 457 drivers/remoteproc/qcom_q6v5_wcss.c return PTR_ERR(wcss->wcss_q6_reset); wcss 463 drivers/remoteproc/qcom_q6v5_wcss.c static int q6v5_wcss_init_mmio(struct q6v5_wcss *wcss, wcss 471 drivers/remoteproc/qcom_q6v5_wcss.c wcss->reg_base = devm_ioremap_resource(&pdev->dev, res); wcss 472 drivers/remoteproc/qcom_q6v5_wcss.c if (IS_ERR(wcss->reg_base)) wcss 473 drivers/remoteproc/qcom_q6v5_wcss.c return PTR_ERR(wcss->reg_base); wcss 476 drivers/remoteproc/qcom_q6v5_wcss.c wcss->rmb_base = devm_ioremap_resource(&pdev->dev, res); wcss 477 drivers/remoteproc/qcom_q6v5_wcss.c if (IS_ERR(wcss->rmb_base)) wcss 478 drivers/remoteproc/qcom_q6v5_wcss.c return PTR_ERR(wcss->rmb_base); wcss 487 drivers/remoteproc/qcom_q6v5_wcss.c wcss->halt_map = syscon_node_to_regmap(args.np); wcss 489 drivers/remoteproc/qcom_q6v5_wcss.c if (IS_ERR(wcss->halt_map)) wcss 490 drivers/remoteproc/qcom_q6v5_wcss.c return PTR_ERR(wcss->halt_map); wcss 492 drivers/remoteproc/qcom_q6v5_wcss.c wcss->halt_q6 = args.args[0]; wcss 493 drivers/remoteproc/qcom_q6v5_wcss.c wcss->halt_wcss = args.args[1]; wcss 494 drivers/remoteproc/qcom_q6v5_wcss.c wcss->halt_nc = args.args[2]; wcss 499 drivers/remoteproc/qcom_q6v5_wcss.c static int q6v5_alloc_memory_region(struct q6v5_wcss *wcss) wcss 503 drivers/remoteproc/qcom_q6v5_wcss.c struct device *dev = wcss->dev; wcss 515 drivers/remoteproc/qcom_q6v5_wcss.c wcss->mem_phys = rmem->base; wcss 516 drivers/remoteproc/qcom_q6v5_wcss.c wcss->mem_reloc = rmem->base; wcss 517 drivers/remoteproc/qcom_q6v5_wcss.c wcss->mem_size = rmem->size; wcss 518 drivers/remoteproc/qcom_q6v5_wcss.c wcss->mem_region = devm_ioremap_wc(dev, wcss->mem_phys, wcss->mem_size); wcss 519 drivers/remoteproc/qcom_q6v5_wcss.c if (!wcss->mem_region) { wcss 530 drivers/remoteproc/qcom_q6v5_wcss.c struct q6v5_wcss *wcss; wcss 535 drivers/remoteproc/qcom_q6v5_wcss.c "IPQ8074/q6_fw.mdt", sizeof(*wcss)); wcss 541 drivers/remoteproc/qcom_q6v5_wcss.c wcss = rproc->priv; wcss 542 drivers/remoteproc/qcom_q6v5_wcss.c wcss->dev = &pdev->dev; wcss 544 drivers/remoteproc/qcom_q6v5_wcss.c ret = q6v5_wcss_init_mmio(wcss, pdev); wcss 548 drivers/remoteproc/qcom_q6v5_wcss.c ret = q6v5_alloc_memory_region(wcss); wcss 552 drivers/remoteproc/qcom_q6v5_wcss.c ret = q6v5_wcss_init_reset(wcss); wcss 556 drivers/remoteproc/qcom_q6v5_wcss.c ret = qcom_q6v5_init(&wcss->q6v5, pdev, rproc, WCSS_CRASH_REASON, NULL);