From: Georgi Vlaev <g-vlaev@ti.com>
To: Nishanth Menon <nm@ti.com>, Tero Kristo <kristo@kernel.org>,
Santosh Shilimkar <ssantosh@kernel.org>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
Cc: <linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>,
Vibhore Vardhan <vibhore@ti.com>,
Vignesh Raghavendra <vigneshr@ti.com>,
Roger Quadros <rogerq@kernel.org>, Georgi Vlaev <g-vlaev@ti.com>
Subject: [PATCH v4 3/5] firmware: ti_sci: Allocate memory for the LPM modes
Date: Wed, 16 Nov 2022 20:13:05 +0200 [thread overview]
Message-ID: <20221116181307.198209-4-g-vlaev@ti.com> (raw)
In-Reply-To: <20221116181307.198209-1-g-vlaev@ti.com>
From: Dave Gerlach <d-gerlach@ti.com>
A region of memory in DDR must be used during Deep Sleep for saving
of some system context when using the ti_sci firmware. From DM's point
of view, this can be any contiguous region in the DDR, so can allocate
512KB of DMA reserved memory in probe(), instead of another carveout.
Also send a TISCI_MSG_PREPARE_SUSPEND message to the firmware during
probe to determine if system suspend is supported and if
ti_sci_init_suspend should be called based on the response received.
Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
Signed-off-by: Vibhore Vardhan <vibhore@ti.com>
Signed-off-by: Georgi Vlaev <g-vlaev@ti.com>
Tested-by: Roger Quadros <rogerq@kernel.org>
---
drivers/firmware/ti_sci.c | 55 +++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
index bace9e9cd478..acd4d3c040a2 100644
--- a/drivers/firmware/ti_sci.c
+++ b/drivers/firmware/ti_sci.c
@@ -10,6 +10,7 @@
#include <linux/bitmap.h>
#include <linux/debugfs.h>
+#include <linux/dma-mapping.h>
#include <linux/export.h>
#include <linux/io.h>
#include <linux/iopoll.h>
@@ -25,6 +26,9 @@
#include "ti_sci.h"
+/* Low power mode memory context size */
+#define LPM_CTX_MEM_SIZE 0x80000
+
/* List of all TI SCI devices active in system */
static LIST_HEAD(ti_sci_list);
/* Protection for the entire list */
@@ -96,6 +100,8 @@ struct ti_sci_desc {
* @minfo: Message info
* @node: list head
* @host_id: Host ID
+ * @ctx_mem_addr: Low power context memory phys address
+ * @ctx_mem_buf: Low power context memory buffer
* @users: Number of users of this instance
* @is_suspending: Flag set to indicate in suspend path.
*/
@@ -114,6 +120,8 @@ struct ti_sci_info {
struct ti_sci_xfers_info minfo;
struct list_head node;
u8 host_id;
+ dma_addr_t ctx_mem_addr;
+ void *ctx_mem_buf;
/* protected by ti_sci_list_mutex */
int users;
bool is_suspending;
@@ -3487,6 +3495,41 @@ static int ti_sci_resume(struct device *dev)
static DEFINE_SIMPLE_DEV_PM_OPS(ti_sci_pm_ops, ti_sci_suspend, ti_sci_resume);
+static int ti_sci_init_suspend(struct platform_device *pdev,
+ struct ti_sci_info *info)
+{
+ struct device *dev = &pdev->dev;
+ int ret;
+
+ dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));
+ info->ctx_mem_buf = dma_alloc_coherent(info->dev, LPM_CTX_MEM_SIZE,
+ &info->ctx_mem_addr,
+ GFP_KERNEL);
+ if (!info->ctx_mem_buf) {
+ dev_err(info->dev, "Failed to allocate LPM context memory\n");
+ return -ENOMEM;
+ }
+
+ /*
+ * Attempt to call prepare_sleep, this will be NAK'd if suspend is not
+ * supported by firmware in use, in which case we will not attempt to
+ * init suspend.
+ */
+ ret = ti_sci_cmd_prepare_sleep(&info->handle, 0,
+ (u32)(info->ctx_mem_addr & 0xffffffff),
+ (u32)((u64)info->ctx_mem_addr >> 32), 0);
+
+ if (ret)
+ goto err;
+
+ return 0;
+err:
+ dma_free_coherent(info->dev, LPM_CTX_MEM_SIZE,
+ info->ctx_mem_buf,
+ info->ctx_mem_addr);
+ return ret;
+}
+
/* Description for K2G */
static const struct ti_sci_desc ti_sci_pmmc_k2g_desc = {
.default_host_id = 2,
@@ -3639,6 +3682,14 @@ static int ti_sci_probe(struct platform_device *pdev)
}
}
+ ret = ti_sci_init_suspend(pdev, info);
+ if (ret)
+ dev_warn(dev,
+ "ti_sci_init_suspend failed, mem suspend will be non-functional.\n");
+
+ /* Suspend is an optional feature, reset return value and continue. */
+ ret = 0;
+
dev_info(dev, "ABI: %d.%d (firmware rev 0x%04x '%s')\n",
info->handle.version.abi_major, info->handle.version.abi_minor,
info->handle.version.firmware_revision,
@@ -3686,6 +3737,10 @@ static int ti_sci_remove(struct platform_device *pdev)
mbox_free_channel(info->chan_rx);
}
+ if (info->ctx_mem_buf)
+ dma_free_coherent(info->dev, LPM_CTX_MEM_SIZE,
+ info->ctx_mem_buf,
+ info->ctx_mem_addr);
return ret;
}
--
2.30.2
next prev parent reply other threads:[~2022-11-16 18:14 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-16 18:13 [PATCH v4 0/5] firmware: ti_sci: Introduce system suspend support Georgi Vlaev
2022-11-16 18:13 ` [PATCH v4 1/5] dt-bindings: ti, sci: Add lpm region and firmware-name Georgi Vlaev
2022-11-18 12:59 ` Krzysztof Kozlowski
2022-11-21 22:26 ` Georgi Vlaev
2022-11-16 18:13 ` [PATCH v4 2/5] firmware: ti_sci: Introduce Power Management Ops Georgi Vlaev
2022-11-16 18:13 ` Georgi Vlaev [this message]
2022-11-21 18:44 ` [PATCH v4 3/5] firmware: ti_sci: Allocate memory for the LPM modes Nishanth Menon
2022-11-21 21:45 ` Georgi Vlaev
2022-11-21 18:56 ` Nishanth Menon
2022-11-21 22:03 ` Georgi Vlaev
2022-11-16 18:13 ` [PATCH v4 4/5] firmware: ti_sci: Use dt provided fw name and address to load at suspend time Georgi Vlaev
2022-11-16 18:13 ` [PATCH v4 5/5] firmware: ti_sci: Introduce prepare system suspend call Georgi Vlaev
2022-11-23 12:58 ` Roger Quadros
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=20221116181307.198209-4-g-vlaev@ti.com \
--to=g-vlaev@ti.com \
--cc=devicetree@vger.kernel.org \
--cc=kristo@kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nm@ti.com \
--cc=robh+dt@kernel.org \
--cc=rogerq@kernel.org \
--cc=ssantosh@kernel.org \
--cc=vibhore@ti.com \
--cc=vigneshr@ti.com \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®