From: Akash Asthana <akashast@codeaurora.org> To: gregkh@linuxfoundation.org, agross@kernel.org, bjorn.andersson@linaro.org, wsa@the-dreams.de, broonie@kernel.org, mark.rutland@arm.com, robh+dt@kernel.org Cc: linux-i2c@vger.kernel.org, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, swboyd@chromium.org, mgautam@codeaurora.org, linux-arm-msm@vger.kernel.org, linux-serial@vger.kernel.org, mka@chromium.org, dianders@chromium.org, Akash Asthana <akashast@codeaurora.org> Subject: [PATCH 5/6] spi: spi-qcom-qspi: Add interconnect support Date: Mon, 17 Feb 2020 19:00:04 +0530 [thread overview] Message-ID: <1581946205-27189-6-git-send-email-akashast@codeaurora.org> (raw) In-Reply-To: <1581946205-27189-1-git-send-email-akashast@codeaurora.org> Get the interconnect paths for QSPI device and vote according to the current bus speed of the driver. Signed-off-by: Akash Asthana <akashast@codeaurora.org> --- drivers/spi/spi-qcom-qspi.c | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/drivers/spi/spi-qcom-qspi.c b/drivers/spi/spi-qcom-qspi.c index 3c4f83b..3636438 100644 --- a/drivers/spi/spi-qcom-qspi.c +++ b/drivers/spi/spi-qcom-qspi.c @@ -2,6 +2,7 @@ // Copyright (c) 2017-2018, The Linux foundation. All rights reserved. #include <linux/clk.h> +#include <linux/interconnect.h> #include <linux/interrupt.h> #include <linux/io.h> #include <linux/module.h> @@ -134,12 +135,19 @@ enum qspi_clocks { QSPI_NUM_CLKS }; +enum qspi_icc_path { + CPU_TO_QSPI +}; + struct qcom_qspi { void __iomem *base; struct device *dev; struct clk_bulk_data *clks; struct qspi_xfer xfer; - /* Lock to protect xfer and IRQ accessed registers */ + struct icc_path *icc_path[2]; + unsigned int avg_bw_cpu; + unsigned int peak_bw_cpu; + /* Lock to protect data accessed by IRQs */ spinlock_t lock; }; @@ -241,6 +249,11 @@ static int qcom_qspi_transfer_one(struct spi_master *master, return ret; } + /* Set BW quota for CPU as driver supports FIFO mode only */ + ctrl->avg_bw_cpu = Bps_to_icc(speed_hz); + ctrl->peak_bw_cpu = Bps_to_icc(2 * speed_hz); + icc_set_bw(ctrl->icc_path[CPU_TO_QSPI], ctrl->avg_bw_cpu, ctrl->peak_bw_cpu); + spin_lock_irqsave(&ctrl->lock, flags); /* We are half duplex, so either rx or tx will be set */ @@ -458,14 +471,23 @@ static int qcom_qspi_probe(struct platform_device *pdev) if (ret) goto exit_probe_master_put; + ctrl->icc_path[CPU_TO_QSPI] = of_icc_get(dev, "qspi-config"); + if (IS_ERR(ctrl->icc_path[CPU_TO_QSPI])) { + ret = PTR_ERR(ctrl->icc_path[CPU_TO_QSPI]); + goto exit_probe_master_put; + } + /* Put BW vote on CPU path for register access */ + ctrl->avg_bw_cpu = Bps_to_icc(1000); + ctrl->peak_bw_cpu = Bps_to_icc(1000); + ret = platform_get_irq(pdev, 0); if (ret < 0) - goto exit_probe_master_put; + goto exit_probe_icc_put; ret = devm_request_irq(dev, ret, qcom_qspi_irq, IRQF_TRIGGER_HIGH, dev_name(dev), ctrl); if (ret) { dev_err(dev, "Failed to request irq %d\n", ret); - goto exit_probe_master_put; + goto exit_probe_icc_put; } master->max_speed_hz = 300000000; @@ -489,6 +511,8 @@ static int qcom_qspi_probe(struct platform_device *pdev) pm_runtime_disable(dev); +exit_probe_icc_put: + icc_put(ctrl->icc_path[CPU_TO_QSPI]); exit_probe_master_put: spi_master_put(master); @@ -498,6 +522,9 @@ static int qcom_qspi_probe(struct platform_device *pdev) static int qcom_qspi_remove(struct platform_device *pdev) { struct spi_master *master = platform_get_drvdata(pdev); + struct qcom_qspi *ctrl = spi_master_get_devdata(master); + + icc_put(ctrl->icc_path[CPU_TO_QSPI]); /* Unregister _before_ disabling pm_runtime() so we stop transfers */ spi_unregister_master(master); @@ -514,6 +541,8 @@ static int __maybe_unused qcom_qspi_runtime_suspend(struct device *dev) clk_bulk_disable_unprepare(QSPI_NUM_CLKS, ctrl->clks); + icc_set_bw(ctrl->icc_path[CPU_TO_QSPI], 0, 0); + return 0; } @@ -522,6 +551,9 @@ static int __maybe_unused qcom_qspi_runtime_resume(struct device *dev) struct spi_master *master = dev_get_drvdata(dev); struct qcom_qspi *ctrl = spi_master_get_devdata(master); + icc_set_bw(ctrl->icc_path[CPU_TO_QSPI], ctrl->avg_bw_cpu, + ctrl->peak_bw_cpu); + return clk_bulk_prepare_enable(QSPI_NUM_CLKS, ctrl->clks); } -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,\na Linux Foundation Collaborative Project
next prev parent reply other threads:[~2020-02-17 13:31 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-17 13:29 [PATCH 0/6] Add interconnect support to UART, I2C, SPI and QSPI Akash Asthana 2020-02-17 13:29 ` Akash Asthana 2020-02-17 13:30 ` [PATCH 1/6] soc: qcom: geni: Support for ICC voting Akash Asthana 2020-02-17 13:30 ` Akash Asthana 2020-02-18 3:03 ` Bjorn Andersson 2020-02-19 13:25 ` Akash Asthana 2020-02-17 13:30 ` [PATCH 2/6] tty: serial: qcom_geni_serial: Add interconnect support Akash Asthana 2020-02-17 13:30 ` Akash Asthana 2020-02-17 16:00 ` Greg KH 2020-02-18 3:15 ` Bjorn Andersson 2020-02-18 3:15 ` Bjorn Andersson 2020-02-19 13:28 ` Akash Asthana 2020-02-18 22:34 ` Matthias Kaehlcke 2020-02-19 13:31 ` Akash Asthana 2020-02-17 13:30 ` [PATCH 3/6] i2c: i2c-qcom-geni: " Akash Asthana 2020-02-17 13:30 ` Akash Asthana 2020-02-18 22:47 ` Matthias Kaehlcke 2020-02-18 22:47 ` Matthias Kaehlcke 2020-02-19 13:47 ` Akash Asthana 2020-02-21 0:24 ` Matthias Kaehlcke 2020-02-17 13:30 ` [PATCH 4/6] spi: spi-geni-qcom: " Akash Asthana 2020-02-17 16:31 ` Mark Brown 2020-02-17 16:31 ` Mark Brown 2020-02-19 18:09 ` Matthias Kaehlcke 2020-02-21 18:55 ` Matthias Kaehlcke 2020-02-21 18:55 ` Matthias Kaehlcke 2020-02-17 13:30 ` Akash Asthana [this message] 2020-02-17 16:35 ` [PATCH 5/6] spi: spi-qcom-qspi: " Mark Brown 2020-02-17 13:30 ` [PATCH 6/6] arm64: dts: sc7180: Add interconnect for QUP and QSPI Akash Asthana 2020-02-18 3:18 ` Bjorn Andersson 2020-02-19 13:49 ` Akash Asthana 2020-02-27 12:11 ` Amit Kucheria 2020-02-27 12:11 ` Amit Kucheria 2020-02-27 17:03 ` Matthias Kaehlcke 2020-02-27 17:03 ` Matthias Kaehlcke 2020-03-09 17:59 ` [PATCH 0/6] Add interconnect support to UART, I2C, SPI " Matthias Kaehlcke 2020-03-09 17:59 ` Matthias Kaehlcke 2020-03-11 13:02 ` Akash Asthana
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1581946205-27189-6-git-send-email-akashast@codeaurora.org \ --to=akashast@codeaurora.org \ --cc=agross@kernel.org \ --cc=bjorn.andersson@linaro.org \ --cc=broonie@kernel.org \ --cc=devicetree@vger.kernel.org \ --cc=dianders@chromium.org \ --cc=gregkh@linuxfoundation.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-i2c@vger.kernel.org \ --cc=linux-serial@vger.kernel.org \ --cc=linux-spi@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=mgautam@codeaurora.org \ --cc=mka@chromium.org \ --cc=robh+dt@kernel.org \ --cc=swboyd@chromium.org \ --cc=wsa@the-dreams.de \ --subject='Re: [PATCH 5/6] spi: spi-qcom-qspi: Add interconnect support' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.