linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Huisong Li <lihuisong@huawei.com>
To: <robbiek@xsightlabs.com>, <sudeep.holla@arm.com>
Cc: <linux-acpi@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<rafael@kernel.org>, <rafael.j.wysocki@intel.com>,
	<wanghuiqiang@huawei.com>, <zhangzekun11@huawei.com>,
	<wangxiongfeng2@huawei.com>, <tanxiaofei@huawei.com>,
	<guohanjun@huawei.com>, <xiexiuqi@huawei.com>,
	<wangkefeng.wang@huawei.com>, <huangdaode@huawei.com>,
	<lihuisong@huawei.com>
Subject: [PATCH 1/2] mailbox: pcc: Add processing platform notification for slave subspaces
Date: Thu, 16 Feb 2023 14:36:52 +0800	[thread overview]
Message-ID: <20230216063653.1995-2-lihuisong@huawei.com> (raw)
In-Reply-To: <20230216063653.1995-1-lihuisong@huawei.com>

Currently, PCC driver doesn't support the processing of platform
notification for slave PCC subspaces because of the incomplete
communication flow.

According to ACPI specification, if platform sends a notification
to OSPM, it must clear the command complete bit and trigger platform
interrupt. OSPM needs to check whether the command complete bit is
cleared, clear platform interrupt, process command, and then set the
command complete and ring doorbell to Platform. But the current judgment
on the command complete is not applicable to type4 in pcc_mbox_irq().

This patch determines whether the PCC driver needs to respond to the
interrupt of the channel with the master or slave subspace based on
the command complete register. And PCC driver needs to add the phase
of setting the command complete and ring doorbell in pcc_mbox_irq()
to complete type4 communication flow after processing command from
Platform.

Signed-off-by: Huisong Li <lihuisong@huawei.com>
---
 drivers/mailbox/pcc.c | 57 ++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 51 insertions(+), 6 deletions(-)

diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c
index 105d46c9801b..ecd54f049de3 100644
--- a/drivers/mailbox/pcc.c
+++ b/drivers/mailbox/pcc.c
@@ -91,6 +91,7 @@ struct pcc_chan_reg {
  * @cmd_update: PCC register bundle for the command complete update register
  * @error: PCC register bundle for the error status register
  * @plat_irq: platform interrupt
+ * @type: PCC subspace type
  */
 struct pcc_chan_info {
 	struct pcc_mbox_chan chan;
@@ -100,12 +101,15 @@ struct pcc_chan_info {
 	struct pcc_chan_reg cmd_update;
 	struct pcc_chan_reg error;
 	int plat_irq;
+	u8 type;
 };
 
 #define to_pcc_chan_info(c) container_of(c, struct pcc_chan_info, chan)
 static struct pcc_chan_info *chan_info;
 static int pcc_chan_count;
 
+static int pcc_send_data(struct mbox_chan *chan, void *data);
+
 /*
  * PCC can be used with perf critical drivers such as CPPC
  * So it makes sense to locally cache the virtual address and
@@ -221,6 +225,43 @@ static int pcc_map_interrupt(u32 interrupt, u32 flags)
 	return acpi_register_gsi(NULL, interrupt, trigger, polarity);
 }
 
+static bool pcc_chan_command_complete(struct pcc_chan_info *pchan,
+				      u64 cmd_complete_reg_val)
+{
+	bool complete;
+
+	if (!pchan->cmd_complete.gas)
+		return true;
+
+	cmd_complete_reg_val &= pchan->cmd_complete.status_mask;
+
+	switch (pchan->type) {
+	case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE:
+		/*
+		 * If this channel with the PCC master subspace is in use,
+		 * the command complete bit is 1 indicates that the executing
+		 * command has been completed by Platform and OSPM needs to
+		 * process the response.
+		 */
+		complete = cmd_complete_reg_val != 0;
+		break;
+	case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE:
+		/*
+		 * If this channel with the PCC slave subspace is in use,
+		 * the command complete bit is 0 indicates that Platform is
+		 * sending a notification and OSPM needs to response the
+		 * interrupt to process this command.
+		 */
+		complete = cmd_complete_reg_val == 0;
+		break;
+	default:
+		complete = true;
+		break;
+	}
+
+	return complete;
+}
+
 /**
  * pcc_mbox_irq - PCC mailbox interrupt handler
  * @irq:	interrupt number
@@ -240,12 +281,8 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p)
 	ret = pcc_chan_reg_read(&pchan->cmd_complete, &val);
 	if (ret)
 		return IRQ_NONE;
-
-	if (val) { /* Ensure GAS exists and value is non-zero */
-		val &= pchan->cmd_complete.status_mask;
-		if (!val)
-			return IRQ_NONE;
-	}
+	if (!pcc_chan_command_complete(pchan, val))
+		return IRQ_NONE;
 
 	ret = pcc_chan_reg_read(&pchan->error, &val);
 	if (ret)
@@ -262,6 +299,13 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p)
 
 	mbox_chan_received_data(chan, NULL);
 
+	/*
+	 * The PCC slave subspace channel needs to set the command complete bit
+	 * and ring doorbell after processing message.
+	 */
+	if (pchan->type == ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE)
+		pcc_send_data(chan, NULL);
+
 	return IRQ_HANDLED;
 }
 
@@ -692,6 +736,7 @@ static int pcc_mbox_probe(struct platform_device *pdev)
 
 		pcc_parse_subspace_shmem(pchan, pcct_entry);
 
+		pchan->type = pcct_entry->type;
 		pcct_entry = (struct acpi_subtable_header *)
 			((unsigned long) pcct_entry + pcct_entry->length);
 	}
-- 
2.33.0


  reply	other threads:[~2023-02-16  6:37 UTC|newest]

Thread overview: 89+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-16  3:40 [RFC] ACPI: PCC: Support shared interrupt for multiple subspaces Huisong Li
2022-10-26  6:10 ` lihuisong (C)
2022-10-27 11:10   ` Sudeep Holla
2022-10-27 12:48     ` lihuisong (C)
2022-10-27 15:53 ` Sudeep Holla
2022-10-28  7:55   ` lihuisong (C)
2022-10-31 10:40     ` Sudeep Holla
2022-11-01  2:49       ` lihuisong (C)
2022-11-04 15:04         ` Robbie King
2022-11-04 15:15           ` Sudeep Holla
2022-11-04 15:39             ` Robbie King
2022-11-07  6:24               ` lihuisong (C)
2022-11-17 18:09                 ` Robbie King
2022-11-19  7:32                   ` lihuisong (C)
2022-11-21 16:59                     ` Robbie King
2022-11-22  3:42                       ` lihuisong (C)
2022-11-22  3:30 ` [RFC V2] " Huisong Li
2022-11-22 13:46   ` Sudeep Holla
2022-11-23  3:36     ` lihuisong (C)
2022-12-03  9:51 ` [RFC-V3 0/2] mailbox: pcc: Support platform notification for type4 and shared interrupt Huisong Li
2022-12-03  9:51   ` [RFC-V3 1/2] mailbox: pcc: Add processing platform notification for slave subspaces Huisong Li
2023-02-06 15:39     ` Sudeep Holla
2023-02-07  2:27       ` lihuisong (C)
2023-02-13 21:18         ` Robbie King
2023-02-14  1:24           ` lihuisong (C)
2022-12-03  9:51   ` [RFC-V3 2/2] mailbox: pcc: Support shared interrupt for multiple subspaces Huisong Li
2022-12-14  2:57   ` [RFC-V3 0/2] mailbox: pcc: Support platform notification for type4 and shared interrupt lihuisong (C)
2022-12-30  1:07     ` lihuisong (C)
2023-01-04 11:06     ` Sudeep Holla
2023-01-05  1:14       ` lihuisong (C)
2023-01-28  1:49         ` lihuisong (C)
2023-02-16  6:36 ` [PATCH " Huisong Li
2023-02-16  6:36   ` Huisong Li [this message]
2023-03-01 13:24     ` [PATCH 1/2] mailbox: pcc: Add processing platform notification for slave subspaces Sudeep Holla
2023-03-02  1:57       ` lihuisong (C)
2023-03-02 13:52         ` Sudeep Holla
2023-03-03  1:50           ` lihuisong (C)
2023-03-03 11:07             ` Sudeep Holla
2023-03-04  9:49               ` lihuisong (C)
2023-02-16  6:36   ` [PATCH 2/2] mailbox: pcc: Support shared interrupt for multiple subspaces Huisong Li
2023-03-01 13:36     ` Sudeep Holla
2023-03-02  2:17       ` lihuisong (C)
2023-03-02 14:02         ` Sudeep Holla
     [not found]           ` <020cc964-9938-7ebe-7514-125cd041bfcb@huawei.com>
2023-03-03 11:14             ` Sudeep Holla
2023-03-04  9:47               ` lihuisong (C)
2023-03-10 20:14                 ` Sudeep Holla
2023-03-14  1:05                   ` lihuisong (C)
2023-02-27 13:09   ` [PATCH 0/2] mailbox: pcc: Support platform notification for type4 and shared interrupt lihuisong (C)
2023-03-14 11:11 ` [PATCH v2 " Huisong Li
2023-03-14 11:11   ` [PATCH v2 1/2] mailbox: pcc: Add support for platform notification handling Huisong Li
2023-03-27 11:30     ` Sudeep Holla
2023-03-27 12:25       ` lihuisong (C)
2023-03-27 13:27         ` Sudeep Holla
2023-03-14 11:11   ` [PATCH v2 2/2] mailbox: pcc: Support shared interrupt for multiple subspaces Huisong Li
2023-03-24  2:30   ` [PATCH v2 0/2] mailbox: pcc: Support platform notification for type4 and shared interrupt lihuisong (C)
2023-03-27 11:33   ` Sudeep Holla
2023-03-27 12:31     ` lihuisong (C)
2023-04-10  1:26       ` lihuisong (C)
2023-04-11 14:47         ` Robbie King
2023-04-14  1:05           ` lihuisong (C)
2023-04-14 13:48             ` Robbie King
2023-04-18  2:21               ` lihuisong (C)
2023-04-21 10:55                 ` Sudeep Holla
2023-04-23  3:58                   ` lihuisong (C)
2023-04-25 13:22                   ` lihuisong (C)
2023-04-23 11:03 ` [PATCH v3 " Huisong Li
2023-04-23 11:03   ` [PATCH v3 1/2] mailbox: pcc: Add support for platform notification handling Huisong Li
2023-04-23 11:03   ` [PATCH v3 2/2] mailbox: pcc: Support shared interrupt for multiple subspaces Huisong Li
2023-04-25 14:41   ` [PATCH v3 0/2] mailbox: pcc: Support platform notification for type4 and shared interrupt Sudeep Holla
2023-05-25 12:25     ` lihuisong (C)
2023-05-04  1:30   ` lihuisong (C)
2023-05-09  9:06   ` Sudeep Holla
2023-06-13 12:57 ` [PATCH v4 " Huisong Li
2023-06-13 12:57   ` [PATCH v4 1/2] mailbox: pcc: Add support for platform notification handling Huisong Li
2023-06-13 12:57   ` [PATCH v4 2/2] mailbox: pcc: Support shared interrupt for multiple subspaces Huisong Li
2023-06-14 15:58   ` [PATCH v4 0/2] mailbox: pcc: Support platform notification for type4 and shared interrupt Sudeep Holla
2023-07-14  6:39     ` lihuisong (C)
2023-07-21 12:31       ` lihuisong (C)
2023-06-15  1:58   ` Hanjun Guo
2023-08-01  6:38 ` [PATCH RESEND " Huisong Li
2023-08-01  6:38   ` [PATCH RESEND v4 1/2] mailbox: pcc: Add support for platform notification handling Huisong Li
2023-08-01  6:38   ` [PATCH RESEND v4 2/2] mailbox: pcc: Support shared interrupt for multiple subspaces Huisong Li
2023-08-01  9:38   ` [PATCH RESEND v4 0/2] mailbox: pcc: Support platform notification for type4 and shared interrupt Sudeep Holla
2023-08-09 11:44     ` lihuisong (C)
2023-08-17  6:50       ` lihuisong (C)
2023-08-26  2:40         ` lihuisong (C)
     [not found]           ` <AS8P193MB233566815E722D9B3B13B5EECAE2A@AS8P193MB2335.EURP193.PROD.OUTLOOK.COM>
2023-08-28  1:03             ` lihuisong (C)
2023-08-29  9:55     ` Sudeep Holla
2023-09-21 13:52   ` Sudeep Holla

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=20230216063653.1995-2-lihuisong@huawei.com \
    --to=lihuisong@huawei.com \
    --cc=guohanjun@huawei.com \
    --cc=huangdaode@huawei.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=rafael@kernel.org \
    --cc=robbiek@xsightlabs.com \
    --cc=sudeep.holla@arm.com \
    --cc=tanxiaofei@huawei.com \
    --cc=wanghuiqiang@huawei.com \
    --cc=wangkefeng.wang@huawei.com \
    --cc=wangxiongfeng2@huawei.com \
    --cc=xiexiuqi@huawei.com \
    --cc=zhangzekun11@huawei.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;
as well as URLs for NNTP newsgroup(s).