Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3792514ybt; Tue, 30 Jun 2020 11:19:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxeUFTNJ8z3ZzWDrvl0msMSwEzyoHv73fv8jEDOvGJh7DdulU4sOXvCmdyK72BoTnFLpNqg X-Received: by 2002:aa7:d802:: with SMTP id v2mr17473999edq.77.1593541199193; Tue, 30 Jun 2020 11:19:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593541199; cv=none; d=google.com; s=arc-20160816; b=Vr8BrQ6RyXBGn5dsX9Al8apHFZEcuszo/6Hf5NQ2PC2rhxmzcvi/0Nd/3gJYnvtGne TDH7y0MKZP+FaoLWThX1G508l25S/MM5VTxJhZ0r7ABWe0usnZeL49wjT18/GTp/QWbG LhvAfOCmfwfgkkf0knP226fT3hp19nfnn/IDcRoKnmGOtHSTn0a+EQ6JSye8e9KNvDfC nUBIXQ8yl29Do8RXxCAodaT013xY1dmRTCuXko+skUiL3AnVUX871pjX5zRaUbQvPSeD TSsYG0k+MJx9dgMT3sM82dcgLAmn+PKcQLzIf42i+U2yqY5JYmdqXtAQUsvXQYDAEuGf uM8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Zvy3pnrdBE7rKtZhGMaIJc9nAztjPriT4eb+3HACwU8=; b=l+RTXIvpZS+k+5aZA4HkP3zbiqpvgahA8fckjevRsRI3CXSaIOEw3S3/N239ZdiSKS BndH1FVQbJ1JFEHAQG6XA++4jNVzK9FOMKLxTbGONZBPdlzijxBuSfrUwyePOjXkEPGZ Vd7dvkaSNFmgTGDyr9jX8YOfhjrWArKAhConeQffGJyWOYwyixu48aA1lS3KTtodE7ud FcvgzDvdadyLZVYIvYDP0hzkkO2+zd51lScTHnns6Lsnx8K8PyjXfN4TtpdPd1cIq+91 yFnw+hyAiRFvooZq24VGPHNzO84RSg5s9tgvw3uLSGmPdYbWRHIHjNThPOnMY5LxoHl3 DiuA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SU2fRu4g; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p22si2021211edm.430.2020.06.30.11.19.36; Tue, 30 Jun 2020 11:19:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SU2fRu4g; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728931AbgF3QbY (ORCPT + 99 others); Tue, 30 Jun 2020 12:31:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44202 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388192AbgF3QbW (ORCPT ); Tue, 30 Jun 2020 12:31:22 -0400 Received: from mail-pj1-x1042.google.com (mail-pj1-x1042.google.com [IPv6:2607:f8b0:4864:20::1042]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0037CC03E979 for ; Tue, 30 Jun 2020 09:31:21 -0700 (PDT) Received: by mail-pj1-x1042.google.com with SMTP id h22so9705166pjf.1 for ; Tue, 30 Jun 2020 09:31:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Zvy3pnrdBE7rKtZhGMaIJc9nAztjPriT4eb+3HACwU8=; b=SU2fRu4gMarPK9IcwuRoQjy9vH+xKChjZnAVHGvLqscgK/haRnvHWvQ8aS+RuCr3eB NJmXjFhm+ZfC6AkcE7rkJpKHC64ZrF3Gq8FLRTvKBseE3sUylVhXBfFW9EMDpRfjy+z+ P3dI41B1u1dG5bls5jbgbjVX2uZsyr5e+c16Oqz9iQXhC+mOwc9sdFZ7FZPW7XNl4M+1 07/QUlZ8CqN0aSqz8eKCa9JNAFydmaWMmgfxZyQjyg0emrjIybWq0uYz9qHXME3MBFCz /qbRYGf31hCqxCmcu83oNFUasajy0gM42eVWVCQsVYtvsoDT0Pui0eXWAK9CsYE+QVQd ctGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Zvy3pnrdBE7rKtZhGMaIJc9nAztjPriT4eb+3HACwU8=; b=CC8Jnq0uwPIaya1NECT2Na5ChXD2i/Np7cnG3B1iDl6wYnfcwdDKHOAfVOtJDQ5SG4 VotdB5+NeR6d+nNu1mawRDdNlvs8iAgdUZ+P0vwQMqzwkG+oCTlUWj/6jPyEUxW5iJmq nZigDrlc93BiLWsURCNIClKghRlabCUzrZsV6rHdb3WDpoUy063rV7XVvntHIkBSvF9c Dgibz87IqWUoe0otfGvWJ1PaPsLezYw0XyFHZmOoJBnoXtASJDC8n7rCuAUpumlq3fnq IXlinvxXuEwk4Jk+Q2WeJWp3wmRWk7gef8Zvmv3yjt6kmHQlwv42km+6gxHUYmbaXXJb zwYA== X-Gm-Message-State: AOAM532mPyiI9BvPJQHNFO3gcWkfuFZzgrsJTPVFO4m1hZcG+Se4oCEq Fy4UfsxtfG2MUiuNKdONhWsSww== X-Received: by 2002:a17:902:9a94:: with SMTP id w20mr18084177plp.177.1593534681521; Tue, 30 Jun 2020 09:31:21 -0700 (PDT) Received: from xps15.cg.shawcable.net (S0106002369de4dac.cg.shawcable.net. [68.147.8.254]) by smtp.gmail.com with ESMTPSA id n4sm3184606pfq.9.2020.06.30.09.31.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jun 2020 09:31:21 -0700 (PDT) From: Mathieu Poirier To: ohad@wizery.com, bjorn.andersson@linaro.org, paul@crapouillou.net, s-anna@ti.com Cc: linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] remoteproc: ingenic: Move clock handling to prepare/unprepare callbacks Date: Tue, 30 Jun 2020 10:31:17 -0600 Message-Id: <20200630163118.3830422-2-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200630163118.3830422-1-mathieu.poirier@linaro.org> References: <20200630163118.3830422-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch moves clock related operations to the remoteproc prepare() and unprepare() callbacks so that the PM runtime framework doesn't have to be involved needlessly. This provides a simpler approach and requires less code. Based on the work from Paul Cercueil published here: https://lore.kernel.org/linux-remoteproc/20191116170846.67220-4-paul@crapouillou.net/ Signed-off-by: Mathieu Poirier --- drivers/remoteproc/ingenic_rproc.c | 84 +++++++++--------------------- 1 file changed, 26 insertions(+), 58 deletions(-) diff --git a/drivers/remoteproc/ingenic_rproc.c b/drivers/remoteproc/ingenic_rproc.c index 189020d77b25..b0fc8eace6ec 100644 --- a/drivers/remoteproc/ingenic_rproc.c +++ b/drivers/remoteproc/ingenic_rproc.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include "remoteproc_internal.h" @@ -62,6 +61,28 @@ struct vpu { struct device *dev; }; +static int ingenic_rproc_prepare(struct rproc *rproc) +{ + struct vpu *vpu = rproc->priv; + int ret; + + /* The clocks must be enabled for the firmware to be loaded in TCSM */ + ret = clk_bulk_prepare_enable(ARRAY_SIZE(vpu->clks), vpu->clks); + if (ret) + dev_err(vpu->dev, "Unable to start clocks: %d", ret); + + return ret; +} + +static int ingenic_rproc_unprepare(struct rproc *rproc) +{ + struct vpu *vpu = rproc->priv; + + clk_bulk_disable_unprepare(ARRAY_SIZE(vpu->clks), vpu->clks); + + return 0; +} + static int ingenic_rproc_start(struct rproc *rproc) { struct vpu *vpu = rproc->priv; @@ -115,6 +136,8 @@ static void *ingenic_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len) } static struct rproc_ops ingenic_rproc_ops = { + .prepare = ingenic_rproc_prepare, + .unprepare = ingenic_rproc_unprepare, .start = ingenic_rproc_start, .stop = ingenic_rproc_stop, .kick = ingenic_rproc_kick, @@ -135,16 +158,6 @@ static irqreturn_t vpu_interrupt(int irq, void *data) return rproc_vq_interrupt(rproc, vring); } -static void ingenic_rproc_disable_clks(void *data) -{ - struct vpu *vpu = data; - - pm_runtime_resume(vpu->dev); - pm_runtime_disable(vpu->dev); - - clk_bulk_disable_unprepare(ARRAY_SIZE(vpu->clks), vpu->clks); -} - static int ingenic_rproc_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -206,35 +219,13 @@ static int ingenic_rproc_probe(struct platform_device *pdev) disable_irq(vpu->irq); - /* The clocks must be enabled for the firmware to be loaded in TCSM */ - ret = clk_bulk_prepare_enable(ARRAY_SIZE(vpu->clks), vpu->clks); - if (ret) { - dev_err(dev, "Unable to start clocks\n"); - return ret; - } - - pm_runtime_irq_safe(dev); - pm_runtime_set_active(dev); - pm_runtime_enable(dev); - pm_runtime_get_sync(dev); - pm_runtime_use_autosuspend(dev); - - ret = devm_add_action_or_reset(dev, ingenic_rproc_disable_clks, vpu); - if (ret) { - dev_err(dev, "Unable to register action\n"); - goto out_pm_put; - } - ret = devm_rproc_add(dev, rproc); if (ret) { dev_err(dev, "Failed to register remote processor\n"); - goto out_pm_put; + return ret; } -out_pm_put: - pm_runtime_put_autosuspend(dev); - - return ret; + return 0; } static const struct of_device_id ingenic_rproc_of_matches[] = { @@ -243,33 +234,10 @@ static const struct of_device_id ingenic_rproc_of_matches[] = { }; MODULE_DEVICE_TABLE(of, ingenic_rproc_of_matches); -static int __maybe_unused ingenic_rproc_suspend(struct device *dev) -{ - struct vpu *vpu = dev_get_drvdata(dev); - - clk_bulk_disable(ARRAY_SIZE(vpu->clks), vpu->clks); - - return 0; -} - -static int __maybe_unused ingenic_rproc_resume(struct device *dev) -{ - struct vpu *vpu = dev_get_drvdata(dev); - - return clk_bulk_enable(ARRAY_SIZE(vpu->clks), vpu->clks); -} - -static const struct dev_pm_ops __maybe_unused ingenic_rproc_pm = { - SET_RUNTIME_PM_OPS(ingenic_rproc_suspend, ingenic_rproc_resume, NULL) -}; - static struct platform_driver ingenic_rproc_driver = { .probe = ingenic_rproc_probe, .driver = { .name = "ingenic-vpu", -#ifdef CONFIG_PM - .pm = &ingenic_rproc_pm, -#endif .of_match_table = ingenic_rproc_of_matches, }, }; -- 2.25.1