From patchwork Wed Nov 29 15:31:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Richard X-Patchwork-Id: 13473031 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6E226C4167B for ; Wed, 29 Nov 2023 15:32:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vjEUmjM6syJW5AEFK8N8X/cbGneNWgCZukFGDdkgBJo=; b=Lr1OkAcNKvKBLf WFAnkwf6aQUSynp5eSqYCA8XpwsYWaWjL6efnJ+GqZN9b6RWg+SlNVelB+vsWyEpNv9BbE9G1ePDp tIoDhSwmADTMpvmKX02wk/Epf1ymK2FKtoxO6V5o+iEgbqbDixOlB2ILYYAiM1FH3sS3WDdJtD9lJ vhHTIwKOnktR54o+SDbDLQetPyE/10g45ycmlnVsf8xlYDD3bwhY+ccA5pE2ieESY8JJeBcLbo9h9 oqB0YCCMQLwIQedead8kW1J5SsTxYkTOUXcZqSUAeKeWmmJ4xu8lArpT8gNaZlb0S3PeHstepQNC9 Lfs8RSCffZ+XtYXXle2Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8MXE-008kca-1C; Wed, 29 Nov 2023 15:31:32 +0000 Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r8MX9-008kaF-36 for linux-arm-kernel@lists.infradead.org; Wed, 29 Nov 2023 15:31:29 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id C7635E0004; Wed, 29 Nov 2023 15:31:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1701271884; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QI1TyzlXaMDB+nhKVeoMHOxLQU8QDlDCw/eJpwfHUjI=; b=B+04Pvk3bWmTvMKPRwosQPKO0bPMfT8nIYKro4x6w5StmHTn4ntp35qumfbEmEr1iZUFvY h5vd2lx1Zu/KXq7I1HA6Svd1D8ClwkQzAwQqywyRs6HtxmBhOuq9HzTD+NKrs44JpoWvuw VHRg8plyHlX+LFUItkfkhsHzfg4vpwM8PfCvcrdrTsXreunjIm8cyH+AnsJW1ZwL0MK0KB r0EjUi5bX7UQ1s8CqLH9z99bs2+qnDt7eLd45H3/eLWPQ18er8GjsSPAiysHVatAko5t7V 3TbKN29vILU+zZ12cMiF7FB7eNV+Q1gav41vgI+AS112rPbwCGOV6ckr5sfFiQ== From: Thomas Richard Date: Wed, 29 Nov 2023 16:31:17 +0100 Subject: [PATCH 1/5] dt-bindings: arm: keystone: add ti,j7200-sci compatible MIME-Version: 1.0 Message-Id: <20231129-j7200-tisci-s2r-v1-1-c1d5964ed574@bootlin.com> References: <20231129-j7200-tisci-s2r-v1-0-c1d5964ed574@bootlin.com> In-Reply-To: <20231129-j7200-tisci-s2r-v1-0-c1d5964ed574@bootlin.com> To: Nishanth Menon , Tero Kristo , Santosh Shilimkar , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vignesh Raghavendra Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, gregory.clement@bootlin.com, u-kumar1@ti.com, Thomas Richard X-Mailer: b4 0.12.0 X-GND-Sasl: thomas.richard@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231129_073128_340912_601D4568 X-CRM114-Status: UNSURE ( 9.25 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On j7200, during suspend to ram the soc is powered-off. At resume requested irqs shall be restored which is a different behavior from other platforms. Signed-off-by: Thomas Richard Acked-by: Conor Dooley --- Documentation/devicetree/bindings/arm/keystone/ti,sci.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/keystone/ti,sci.yaml b/Documentation/devicetree/bindings/arm/keystone/ti,sci.yaml index c24ad0968f3e..53d9c58dcd70 100644 --- a/Documentation/devicetree/bindings/arm/keystone/ti,sci.yaml +++ b/Documentation/devicetree/bindings/arm/keystone/ti,sci.yaml @@ -40,6 +40,8 @@ properties: - description: System controller on TI AM654 SoC items: - const: ti,am654-sci + - description: System controller on TI J7200 SOC + - const: ti,j7200-sci reg-names: description: | From patchwork Wed Nov 29 15:31:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Richard X-Patchwork-Id: 13473034 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 36D3FC4167B for ; Wed, 29 Nov 2023 15:32:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=gkvEGsU41KbyePA9Zqchhh2uScQIooRw3GEoaakvx3Y=; b=SHQF41JGpPaZrQ eh44q4YPpSQCMZuJPGDFRoByWCqhl42lxVGWUWKGkYnQ+dve9zMob5X8dRin9atSYxSpbZ9Y6YkPV 8V11Nf6MvrBbEUD6sBD2LguwuYxrUVq8wwrUzNg3MM8XXpKQefBxVIVzfP0dtvjDW8UPIJtGyvXUr 1y3qDlbXWWgyJ2t9Z44g4hTy9vsqRpKOopjD+/xA0pXWfJNVQnT6E9D38CIBsy8DOQRc4DFSRR3CQ UxoTAv8+YylE+hoEGBFxI9BD8TF+yAeT1IFWtHldPVHsQn2qiDHV8cN8sFrLTSIPnFGIQNKRgcWRf aMxhdOgqszr4o1HTK9sA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8MXS-008kgW-2c; Wed, 29 Nov 2023 15:31:46 +0000 Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r8MX9-008kaH-36 for linux-arm-kernel@lists.infradead.org; Wed, 29 Nov 2023 15:31:31 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 6066EE0011; Wed, 29 Nov 2023 15:31:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1701271884; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+cbJLlFkfaPpJj8eq2H7GH+mfMR2CF2wpb8mSuVlsv0=; b=NvRyz5oV+vJAoMD+AzwVa0Pd3fnr+0xseEL8Idc6yMEkfYblEjF1tnKQk8dZ9Zsnw3tu2k MsWb8UYvtX+4Oa54PdnY5Jo7iNPLv7uDa/6nQl25VeYsqNOzLAufD6dAo1itmaYp9PXDMz wkPB5GTCnLIsRV5X9mWxzLAUCm7pLqspV9Weuu7Ltpn4OHxj+PUbYookW9YM9LcNU/VOXt Yuq1JzI9DDXHDxWMkVfim4EgxX+SBRzKGBAT0uqghV7frsfBGBsWPQT0UmetjjrtsYRUuK KW3G8peHoHsWh4AdoVeR0OqBPvurU6pCrjl4C/hZmDyfTnAA/9PFsOPv+rL2aA== From: Thomas Richard Date: Wed, 29 Nov 2023 16:31:18 +0100 Subject: [PATCH 2/5] firmware: ti_sci: add suspend/resume support for irqs MIME-Version: 1.0 Message-Id: <20231129-j7200-tisci-s2r-v1-2-c1d5964ed574@bootlin.com> References: <20231129-j7200-tisci-s2r-v1-0-c1d5964ed574@bootlin.com> In-Reply-To: <20231129-j7200-tisci-s2r-v1-0-c1d5964ed574@bootlin.com> To: Nishanth Menon , Tero Kristo , Santosh Shilimkar , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vignesh Raghavendra Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, gregory.clement@bootlin.com, u-kumar1@ti.com, Thomas Richard X-Mailer: b4 0.12.0 X-GND-Sasl: thomas.richard@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231129_073128_324075_FE0ED6D0 X-CRM114-Status: GOOD ( 21.94 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On j7200, during suspend to ram, the SoC is powered-off. The irqs configuration is lost, so it shall be restored at resume. The ti-sci has an internal list of irqs updated at each set/free. All irqs in this list are restored at resume. Signed-off-by: Thomas Richard --- drivers/firmware/ti_sci.c | 155 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 147 insertions(+), 8 deletions(-) diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c index 7041befc756a..c26ec86a5ff2 100644 --- a/drivers/firmware/ti_sci.c +++ b/drivers/firmware/ti_sci.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "ti_sci.h" @@ -75,12 +76,24 @@ struct ti_sci_xfers_info { * @max_msgs: Maximum number of messages that can be pending * simultaneously in the system * @max_msg_size: Maximum size of data per message that can be handled. + * @restore_irqs: Set to true if allocated irqs shall be restored at resume */ struct ti_sci_desc { u8 default_host_id; int max_rx_timeout_ms; int max_msgs; int max_msg_size; + bool restore_irqs; +}; + +/** + * struct ti_sci_irq - Description of allocated irqs + * @list: List head + * @desc: Description of the irq + */ +struct ti_sci_irq { + struct list_head list; + struct ti_sci_msg_req_manage_irq desc; }; /** @@ -97,6 +110,7 @@ struct ti_sci_desc { * @chan_tx: Transmit mailbox channel * @chan_rx: Receive mailbox channel * @minfo: Message info + * @irqs: List of allocated irqs * @node: list head * @host_id: Host ID * @users: Number of users of this instance @@ -114,6 +128,7 @@ struct ti_sci_info { struct mbox_chan *chan_tx; struct mbox_chan *chan_rx; struct ti_sci_xfers_info minfo; + struct ti_sci_irq irqs; struct list_head node; u8 host_id; /* protected by ti_sci_list_mutex */ @@ -1890,6 +1905,29 @@ static int ti_sci_manage_irq(const struct ti_sci_handle *handle, return ret; } +/** + * ti_sci_irqs_equal() - Helper API to compare two irqs (generic headers are not + * compared) + * @irq_a: IRQ A to compare + * @irq_b: IRQ B to compare + * + * Return: true if the two irqs are equal, else false. + */ +static bool ti_sci_irqs_equal(struct ti_sci_msg_req_manage_irq irq_a, + struct ti_sci_msg_req_manage_irq irq_b) +{ + return irq_a.valid_params == irq_b.valid_params && + irq_a.src_id == irq_b.src_id && + irq_a.src_index == irq_b.src_index && + irq_a.dst_id == irq_b.dst_id && + irq_a.dst_host_irq == irq_b.dst_host_irq && + irq_a.ia_id == irq_b.ia_id && + irq_a.vint == irq_b.vint && + irq_a.global_event == irq_b.global_event && + irq_a.vint_status_bit == irq_b.vint_status_bit && + irq_a.secondary_host == irq_b.secondary_host; +} + /** * ti_sci_set_irq() - Helper api to configure the irq route between the * requested source and destination @@ -1913,15 +1951,39 @@ static int ti_sci_set_irq(const struct ti_sci_handle *handle, u32 valid_params, u16 dst_host_irq, u16 ia_id, u16 vint, u16 global_event, u8 vint_status_bit, u8 s_host) { + struct ti_sci_info *info = handle_to_ti_sci_info(handle); + struct ti_sci_msg_req_manage_irq *desc; + struct ti_sci_irq *irq; + int ret; + pr_debug("%s: IRQ set with valid_params = 0x%x from src = %d, index = %d, to dst = %d, irq = %d,via ia_id = %d, vint = %d, global event = %d,status_bit = %d\n", __func__, valid_params, src_id, src_index, dst_id, dst_host_irq, ia_id, vint, global_event, vint_status_bit); - return ti_sci_manage_irq(handle, valid_params, src_id, src_index, - dst_id, dst_host_irq, ia_id, vint, - global_event, vint_status_bit, s_host, - TI_SCI_MSG_SET_IRQ); + ret = ti_sci_manage_irq(handle, valid_params, src_id, src_index, + dst_id, dst_host_irq, ia_id, vint, + global_event, vint_status_bit, s_host, + TI_SCI_MSG_SET_IRQ); + + if (ret) + return ret; + + irq = kmalloc(sizeof(*irq), GFP_KERNEL); + desc = &irq->desc; + desc->valid_params = valid_params; + desc->src_id = src_id; + desc->src_index = src_index; + desc->dst_id = dst_id; + desc->dst_host_irq = dst_host_irq; + desc->ia_id = ia_id; + desc->vint = vint; + desc->global_event = global_event; + desc->vint_status_bit = vint_status_bit; + desc->secondary_host = s_host; + list_add(&irq->list, &info->irqs.list); + + return ret; } /** @@ -1947,15 +2009,46 @@ static int ti_sci_free_irq(const struct ti_sci_handle *handle, u32 valid_params, u16 dst_host_irq, u16 ia_id, u16 vint, u16 global_event, u8 vint_status_bit, u8 s_host) { + struct ti_sci_info *info = handle_to_ti_sci_info(handle); + struct ti_sci_msg_req_manage_irq irq_desc; + struct ti_sci_irq *this_irq; + struct list_head *this; + int ret; + pr_debug("%s: IRQ release with valid_params = 0x%x from src = %d, index = %d, to dst = %d, irq = %d,via ia_id = %d, vint = %d, global event = %d,status_bit = %d\n", __func__, valid_params, src_id, src_index, dst_id, dst_host_irq, ia_id, vint, global_event, vint_status_bit); - return ti_sci_manage_irq(handle, valid_params, src_id, src_index, - dst_id, dst_host_irq, ia_id, vint, - global_event, vint_status_bit, s_host, - TI_SCI_MSG_FREE_IRQ); + ret = ti_sci_manage_irq(handle, valid_params, src_id, src_index, + dst_id, dst_host_irq, ia_id, vint, + global_event, vint_status_bit, s_host, + TI_SCI_MSG_FREE_IRQ); + + if (ret) + return ret; + + irq_desc.valid_params = valid_params; + irq_desc.src_id = src_id; + irq_desc.src_index = src_index; + irq_desc.dst_id = dst_id; + irq_desc.dst_host_irq = dst_host_irq; + irq_desc.ia_id = ia_id; + irq_desc.vint = vint; + irq_desc.global_event = global_event; + irq_desc.vint_status_bit = vint_status_bit; + irq_desc.secondary_host = s_host; + + list_for_each(this, &info->irqs.list) { + this_irq = list_entry(this, struct ti_sci_irq, list); + if (ti_sci_irqs_equal(irq_desc, this_irq->desc)) { + list_del(&this_irq->list); + kfree(this_irq); + break; + } + } + + return ret; } /** @@ -3266,6 +3359,37 @@ static int tisci_reboot_handler(struct notifier_block *nb, unsigned long mode, return NOTIFY_BAD; } +static int __maybe_unused ti_sci_resume_noirq(struct device *dev) +{ + const struct ti_sci_desc *desc = device_get_match_data(dev); + struct ti_sci_info *info = dev_get_drvdata(dev); + struct ti_sci_msg_req_manage_irq *irq_desc; + struct ti_sci_irq *irq; + struct list_head *this; + int ret = 0; + + if (!desc->restore_irqs || pm_suspend_target_state != PM_SUSPEND_MEM) + return ret; + + /* restore irqs */ + list_for_each(this, &info->irqs.list) { + irq = list_entry(this, struct ti_sci_irq, list); + irq_desc = &irq->desc; + ret |= ti_sci_manage_irq(&info->handle, irq_desc->valid_params, + irq_desc->src_id, irq_desc->src_index, + irq_desc->dst_id, irq_desc->dst_host_irq, + irq_desc->ia_id, irq_desc->vint, + irq_desc->global_event, irq_desc->vint_status_bit, + irq_desc->secondary_host, TI_SCI_MSG_SET_IRQ); + } + + return ret; +} + +static const struct dev_pm_ops ti_sci_pm_ops = { + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(NULL, ti_sci_resume_noirq) +}; + /* Description for K2G */ static const struct ti_sci_desc ti_sci_pmmc_k2g_desc = { .default_host_id = 2, @@ -3286,9 +3410,21 @@ static const struct ti_sci_desc ti_sci_pmmc_am654_desc = { .max_msg_size = 60, }; +/* Description for J7200 */ +static const struct ti_sci_desc ti_sci_pmmc_j7200_desc = { + .default_host_id = 2, + /* Conservative duration */ + .max_rx_timeout_ms = 1000, + /* Limited by MBOX_TX_QUEUE_LEN. K2G can handle up to 128 messages! */ + .max_msgs = 20, + .max_msg_size = 64, + .restore_irqs = true, +}; + static const struct of_device_id ti_sci_of_match[] = { {.compatible = "ti,k2g-sci", .data = &ti_sci_pmmc_k2g_desc}, {.compatible = "ti,am654-sci", .data = &ti_sci_pmmc_am654_desc}, + {.compatible = "ti,j7200-sci", .data = &ti_sci_pmmc_j7200_desc}, { /* Sentinel */ }, }; MODULE_DEVICE_TABLE(of, ti_sci_of_match); @@ -3415,6 +3551,8 @@ static int ti_sci_probe(struct platform_device *pdev) info->handle.version.firmware_revision, info->handle.version.firmware_description); + INIT_LIST_HEAD(&info->irqs.list); + mutex_lock(&ti_sci_list_mutex); list_add_tail(&info->node, &ti_sci_list); mutex_unlock(&ti_sci_list_mutex); @@ -3435,6 +3573,7 @@ static struct platform_driver ti_sci_driver = { .name = "ti-sci", .of_match_table = of_match_ptr(ti_sci_of_match), .suppress_bind_attrs = true, + .pm = &ti_sci_pm_ops, }, }; module_platform_driver(ti_sci_driver); From patchwork Wed Nov 29 15:31:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Richard X-Patchwork-Id: 13473030 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4DF1EC4167B for ; Wed, 29 Nov 2023 15:31:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=wMmhBMWi7rJBxz7WDH/7ZfIMK9r+9U9qFrN6UuZstZ0=; b=cCBen2TcRdX4hQ B5CohKNqsLwHiXwJvUsXe/ZCMnVt2EUpHt1p2g3zYkSL3aDtSudP+7Q9gUSkR9mp1NtcLt/lgV6nD BXVe+YaHFpl923GRTpimiOt4QsShk++dUU/u0rF3ZqCtbdm0lQf4VqimAt5Uw4ZeD4D2UJPyETWc0 +MJjmhcYXjNNo5f7cuIyeOOfap0iwOcYocTUYxQJeCpZQDJvIQHrD0+M4HfcllmqxRWJJZG5DzT7a PzCw9QL32r03JzHw1GMaCqSdUw0665MahJJe23ib+87oudnexw06vloPcmsuqRLyW+iP+WQo/Un4d aI1eNLMv2xhaDEbxjUeg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8MXD-008kc8-2h; Wed, 29 Nov 2023 15:31:31 +0000 Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r8MX9-008kaK-36 for linux-arm-kernel@lists.infradead.org; Wed, 29 Nov 2023 15:31:29 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 08D42E0013; Wed, 29 Nov 2023 15:31:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1701271885; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1sAANN2EXeewZfaaobbe7muJTHqc8A8qnJjW9NGWcx8=; b=Bu0pbZECI7sSk70SeqV6BFWJPSrmAsRp2m0uGsoD2H1yVZjphF1Z5CqBRErPyFHg6wE696 1Ul3AFqec7rPvpHTuEY+3yMu3rRr/pZvFgwnWQOfjdBbGOOQMaEqImhtUFxQoedH78DEY0 XvOuwOwIAQ6woWiV8jBoXXhOaZwJSYYiBxkH/gYRbECvdKQ+GbieTpf/S4kYl6D3uZ3iFu VgEKVCDhmbyxL8CEhdsPocoVNXCSP1QAhcVvDItFiouwZMmaWag91eRfRnDyYlxdxef5k7 Hcg52H2lyI68tqyjH3HcF2Da06v5jsqs/W4d84OeRDizSH04+hF8a2m5ys+86A== From: Thomas Richard Date: Wed, 29 Nov 2023 16:31:19 +0100 Subject: [PATCH 3/5] arm64: dts: ti: k3-j7200: use ti,j7200-sci compatible MIME-Version: 1.0 Message-Id: <20231129-j7200-tisci-s2r-v1-3-c1d5964ed574@bootlin.com> References: <20231129-j7200-tisci-s2r-v1-0-c1d5964ed574@bootlin.com> In-Reply-To: <20231129-j7200-tisci-s2r-v1-0-c1d5964ed574@bootlin.com> To: Nishanth Menon , Tero Kristo , Santosh Shilimkar , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vignesh Raghavendra Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, gregory.clement@bootlin.com, u-kumar1@ti.com, Thomas Richard X-Mailer: b4 0.12.0 X-GND-Sasl: thomas.richard@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231129_073128_323083_F2DBFCC4 X-CRM114-Status: GOOD ( 10.54 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On j7200, suspend to ram poweroff the SOC. This compatible restores irqs at resume. Signed-off-by: Thomas Richard --- arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi index 467970fab3a0..d8dc1421e75e 100644 --- a/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi +++ b/arch/arm64/boot/dts/ti/k3-j7200-mcu-wakeup.dtsi @@ -7,7 +7,7 @@ &cbass_mcu_wakeup { dmsc: system-controller@44083000 { - compatible = "ti,k2g-sci"; + compatible = "ti,j7200-sci", "ti,k2g-sci"; ti,host-id = <12>; mbox-names = "rx", "tx"; From patchwork Wed Nov 29 15:31:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Richard X-Patchwork-Id: 13473035 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 98ABDC10DAA for ; Wed, 29 Nov 2023 15:32:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9lnUPWEJO83neCZv584pLjR4JMmLx2ohQq7tcl2xqgU=; b=Ib9AsxKy8P3QPY 3Wr1ptyoexuN+wirVzUWGTkTT3dS7faGWGkt9ct+AcR2zPbePjdnLrKd7G6oc9AQKdDrZasriwiRP M9RBrUAXJEeUUAkufIdPJDLxl8/rMP0t2xk3nFNytaCva0cRj0Zd/yZWyyrPa3yleA0wCo0CwhrN/ u/rWumHDAKg/HXcLdR6AyVaXfdZkz5kGG7valo2C+7zdD14mAO4/V+i+hChg/AePXGcsf4IhvRxJw igyloYo+nhIbA2simfdtIx/OfifaKUxDIYbteAlk+PIpRxHZujLJMjo8kTguBbQnAR+d4i13p67FS JJ5PixiUZDtLVgi3vSAg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8MXS-008kgD-0i; Wed, 29 Nov 2023 15:31:46 +0000 Received: from relay4-d.mail.gandi.net ([217.70.183.196]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r8MXA-008kaL-0u for linux-arm-kernel@lists.infradead.org; Wed, 29 Nov 2023 15:31:31 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 980B2E0012; Wed, 29 Nov 2023 15:31:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1701271886; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ONeuGYPs2IMgsIBQkR63Bawpq/9TA/sG6QW/wej75m4=; b=BO10/zqYJKqTCTIriRT9JmPYFVTsWtcA7KqYL7K/1BHkPPd1Xn0YV9WLZVcrbte4oXJ2t5 3yPSNaxWnpuWxT/A/2D2eVv/dIWO5zasx3T0t64s3Yj6FmsKEAE9y5lN+X7hL+eZrye8NF xkapT2x0QOo5fK3O2yfX6sJo38ukCLlKiAf2Y7brH8S8iwQC2oH8hgCG4TXlO4V72aIQsd roI5ybfc38SLcyjs2xBIR2XOgXfHQtbegtMgxm+pcQNyM8DNq2Qa6Yt5psl0+3Qt7agspG vwaOIprv1oFe5JB3R6Mwc5LCySr4SG8rjNzBhjIWr1LzOig16YdDNBxyDGLmLQ== From: Thomas Richard Date: Wed, 29 Nov 2023 16:31:20 +0100 Subject: [PATCH 4/5] firmware: ti-sci: for j7200 before suspend check the reserved memory for lpm MIME-Version: 1.0 Message-Id: <20231129-j7200-tisci-s2r-v1-4-c1d5964ed574@bootlin.com> References: <20231129-j7200-tisci-s2r-v1-0-c1d5964ed574@bootlin.com> In-Reply-To: <20231129-j7200-tisci-s2r-v1-0-c1d5964ed574@bootlin.com> To: Nishanth Menon , Tero Kristo , Santosh Shilimkar , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vignesh Raghavendra Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, gregory.clement@bootlin.com, u-kumar1@ti.com, Thomas Richard X-Mailer: b4 0.12.0 X-GND-Sasl: thomas.richard@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231129_073128_578574_F7794BC4 X-CRM114-Status: GOOD ( 16.17 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On j7200, a reserved memory region is needed for TF-A to save its context during suspend to ram. In ti-sci suspend, check if the region was defined, if not return an error. Signed-off-by: Thomas Richard --- drivers/firmware/ti_sci.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c index c26ec86a5ff2..deaca17322df 100644 --- a/drivers/firmware/ti_sci.c +++ b/drivers/firmware/ti_sci.c @@ -77,6 +77,8 @@ struct ti_sci_xfers_info { * simultaneously in the system * @max_msg_size: Maximum size of data per message that can be handled. * @restore_irqs: Set to true if allocated irqs shall be restored at resume + * @lpm_region: Set to true if a reserved memory region is needed for suspend to + * ram */ struct ti_sci_desc { u8 default_host_id; @@ -84,6 +86,7 @@ struct ti_sci_desc { int max_msgs; int max_msg_size; bool restore_irqs; + bool lpm_region; }; /** @@ -3359,6 +3362,32 @@ static int tisci_reboot_handler(struct notifier_block *nb, unsigned long mode, return NOTIFY_BAD; } +static bool ti_sci_check_lpm_region(void) +{ + struct device_node *parent, *node; + + parent = of_find_node_by_path("/reserved-memory"); + for_each_child_of_node(parent, node) { + if (of_node_name_eq(node, "lpm-memory")) + return true; + } + + return false; +} + +static int __maybe_unused ti_sci_suspend(struct device *dev) +{ + const struct ti_sci_desc *desc = device_get_match_data(dev); + + if (pm_suspend_target_state == PM_SUSPEND_MEM && + desc->lpm_region && !ti_sci_check_lpm_region()) { + dev_err(dev, "lpm region is required for suspend to ram but is not provided\n"); + return -EINVAL; + } + + return 0; +} + static int __maybe_unused ti_sci_resume_noirq(struct device *dev) { const struct ti_sci_desc *desc = device_get_match_data(dev); @@ -3387,6 +3416,7 @@ static int __maybe_unused ti_sci_resume_noirq(struct device *dev) } static const struct dev_pm_ops ti_sci_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(ti_sci_suspend, NULL) SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(NULL, ti_sci_resume_noirq) }; @@ -3419,6 +3449,7 @@ static const struct ti_sci_desc ti_sci_pmmc_j7200_desc = { .max_msgs = 20, .max_msg_size = 64, .restore_irqs = true, + .lpm_region = true, }; static const struct of_device_id ti_sci_of_match[] = { @@ -3546,6 +3577,11 @@ static int ti_sci_probe(struct platform_device *pdev) } } +#ifdef CONFIG_PM_SLEEP + if (desc->lpm_region && !ti_sci_check_lpm_region()) + dev_warn(dev, "lpm region is required for suspend to ram but is not provided\n"); +#endif + 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, From patchwork Wed Nov 29 15:31:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Richard X-Patchwork-Id: 13473032 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D1A74C4167B for ; Wed, 29 Nov 2023 15:32:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4CnNRcSP0dG7t4IjvvjsSQruve9g5jmaRIkmr01HCyk=; b=jMYIp6y2AUoEBd 8Vbx1kS18XXtKnHXb3uU5l+rOlu6UQpnqUomj1oyKLvCv0rVhEK3OqK+eKsAaO+tcMz/aHHqqs1NK z/+IyiIyjR1nmmBrk1iZV2bkD/PHPMsVPDy20bpyqRi/nvNOLfWJJwLNoHxnHpscnS33XrNYA47lA DTPB7NaStD50aVlvUwLr83SoRVPhJMT/2zZCbCGXCcV1dtciGiwr7Fa8tY1+yGQKc5S+RUoybFtBb 0zSZ6n4NtTNKJFvE6ciF1SjVQ2J5NWWwRsRZd/GnvyfWAsCCRe5+XqPGrHhlV0RR5X6baKN5xr6RW oo42+uPeedYZyCl/zL/g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8MXR-008kfy-1q; Wed, 29 Nov 2023 15:31:45 +0000 Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r8MXA-008kaM-0N for linux-arm-kernel@lists.infradead.org; Wed, 29 Nov 2023 15:31:30 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 340CDE000A; Wed, 29 Nov 2023 15:31:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1701271886; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=n6Se7MgTLDlVPsmnv481wC76UKLsZL7lpNqEMlGZzy0=; b=IAr/fyUww18EgY4GKsHZMYeVTdK+cveCDjQkTAmKmYQJpAQ7V63VUI9w7uU7LnDdhJ++6s dswp7Ew+Zg2jg5CZ6Spu6PDvXR+wXPIizzILSrhOIIRTH348R5T8oNbB0qw9s1hJRTqFdV 2Fy+7NThE7UTzrSf0si2wpYZf8E9T0LpEFGHklB76X5DCOqK1OrBEAMdRHaIW5bIgqCctX oWBJ5zufnZ+o9VcXTxrrzf5pGoqf2q7bRqpUHmsMx/5lsiRj2JVK0yEGnZy+kq8fjMv+Pg i45A8YVchsERATCQniJ8Nm2udPMXvwziQDnejef9/H38zCbu3qbps28oEgypgA== From: Thomas Richard Date: Wed, 29 Nov 2023 16:31:21 +0100 Subject: [PATCH 5/5] arm64: dts: ti: k3-j7200: add reserved memory regions for lpm MIME-Version: 1.0 Message-Id: <20231129-j7200-tisci-s2r-v1-5-c1d5964ed574@bootlin.com> References: <20231129-j7200-tisci-s2r-v1-0-c1d5964ed574@bootlin.com> In-Reply-To: <20231129-j7200-tisci-s2r-v1-0-c1d5964ed574@bootlin.com> To: Nishanth Menon , Tero Kristo , Santosh Shilimkar , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vignesh Raghavendra Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, thomas.petazzoni@bootlin.com, gregory.clement@bootlin.com, u-kumar1@ti.com, Thomas Richard X-Mailer: b4 0.12.0 X-GND-Sasl: thomas.richard@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231129_073128_338009_F7D04707 X-CRM114-Status: GOOD ( 10.43 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Two memory regions are reserved for suspend to ram on j7200. One is dedicated to TF-A, it uses this region to save its context during suspend. The second region is for R5 SPL, which uses it for its stacks and to store some firmware images. These regions are reserved from the linux point of view to avoid any memory corruption. Signed-off-by: Thomas Richard --- arch/arm64/boot/dts/ti/k3-j7200-som-p0.dtsi | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/arm64/boot/dts/ti/k3-j7200-som-p0.dtsi b/arch/arm64/boot/dts/ti/k3-j7200-som-p0.dtsi index 5a300d4c8ba0..dc8c9c3e8443 100644 --- a/arch/arm64/boot/dts/ti/k3-j7200-som-p0.dtsi +++ b/arch/arm64/boot/dts/ti/k3-j7200-som-p0.dtsi @@ -79,6 +79,16 @@ rtos_ipc_memory_region: ipc-memories@a4000000 { alignment = <0x1000>; no-map; }; + + lpm_r5_spl_ctx_ddr: lpm-memory@a5000000 { + reg = <0x00 0xa5000000 0x00 0x1000000>; + no-map; + }; + + lpm_bl31_ctx_ddr: lpm-memory@a6000000 { + reg = <0x00 0xa6000000 0x00 0x20000>; + no-map; + }; }; };