From: Huisong Li <lihuisong@huawei.com>
To: <linux-acpi@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Cc: <rafael@kernel.org>, <sudeep.holla@arm.com>,
<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 V3 1/2] ACPI: PCC: Setup PCC Opregion handler only if platform interrupt is available
Date: Sat, 12 Nov 2022 10:05:27 +0800 [thread overview]
Message-ID: <20221112020528.7837-2-lihuisong@huawei.com> (raw)
In-Reply-To: <20221112020528.7837-1-lihuisong@huawei.com>
Currently, PCC OpRegion handler depends on the availability of platform
interrupt to be functional currently. If it is not available, the OpRegion
can't be executed successfully or the desired outcome won't be possible.
So let's reject setting up the PCC OpRegion handler on the platform if
it doesn't support or have platform interrupt available.
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Reviewed-by: Sudeep Holla <sudeep.holla@arm.com>
---
drivers/acpi/acpi_pcc.c | 47 +++++++++++++++++++++++++----------------
1 file changed, 29 insertions(+), 18 deletions(-)
diff --git a/drivers/acpi/acpi_pcc.c b/drivers/acpi/acpi_pcc.c
index 3e252be047b8..07a034a53aca 100644
--- a/drivers/acpi/acpi_pcc.c
+++ b/drivers/acpi/acpi_pcc.c
@@ -53,6 +53,7 @@ acpi_pcc_address_space_setup(acpi_handle region_handle, u32 function,
struct pcc_data *data;
struct acpi_pcc_info *ctx = handler_context;
struct pcc_mbox_chan *pcc_chan;
+ static acpi_status ret;
data = kzalloc(sizeof(*data), GFP_KERNEL);
if (!data)
@@ -69,23 +70,35 @@ acpi_pcc_address_space_setup(acpi_handle region_handle, u32 function,
if (IS_ERR(data->pcc_chan)) {
pr_err("Failed to find PCC channel for subspace %d\n",
ctx->subspace_id);
- kfree(data);
- return AE_NOT_FOUND;
+ ret = AE_NOT_FOUND;
+ goto err_free_data;
}
pcc_chan = data->pcc_chan;
+ if (!pcc_chan->mchan->mbox->txdone_irq) {
+ pr_err("This channel-%d does not support interrupt.\n",
+ ctx->subspace_id);
+ ret = AE_SUPPORT;
+ goto err_free_channel;
+ }
data->pcc_comm_addr = acpi_os_ioremap(pcc_chan->shmem_base_addr,
pcc_chan->shmem_size);
if (!data->pcc_comm_addr) {
pr_err("Failed to ioremap PCC comm region mem for %d\n",
ctx->subspace_id);
- pcc_mbox_free_channel(data->pcc_chan);
- kfree(data);
- return AE_NO_MEMORY;
+ ret = AE_NO_MEMORY;
+ goto err_free_channel;
}
*region_context = data;
return AE_OK;
+
+err_free_channel:
+ pcc_mbox_free_channel(data->pcc_chan);
+err_free_data:
+ kfree(data);
+
+ return ret;
}
static acpi_status
@@ -106,19 +119,17 @@ acpi_pcc_address_space_handler(u32 function, acpi_physical_address addr,
if (ret < 0)
return AE_ERROR;
- if (data->pcc_chan->mchan->mbox->txdone_irq) {
- /*
- * pcc_chan->latency is just a Nominal value. In reality the remote
- * processor could be much slower to reply. So add an arbitrary
- * amount of wait on top of Nominal.
- */
- usecs_lat = PCC_CMD_WAIT_RETRIES_NUM * data->pcc_chan->latency;
- ret = wait_for_completion_timeout(&data->done,
- usecs_to_jiffies(usecs_lat));
- if (ret == 0) {
- pr_err("PCC command executed timeout!\n");
- return AE_TIME;
- }
+ /*
+ * pcc_chan->latency is just a Nominal value. In reality the remote
+ * processor could be much slower to reply. So add an arbitrary
+ * amount of wait on top of Nominal.
+ */
+ usecs_lat = PCC_CMD_WAIT_RETRIES_NUM * data->pcc_chan->latency;
+ ret = wait_for_completion_timeout(&data->done,
+ usecs_to_jiffies(usecs_lat));
+ if (ret == 0) {
+ pr_err("PCC command executed timeout!\n");
+ return AE_TIME;
}
mbox_chan_txdone(data->pcc_chan->mchan, ret);
--
2.22.0
next prev parent reply other threads:[~2022-11-12 2:07 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-10 1:50 [PATCH 0/3] ACPI: PCC: optimize pcc codes and fix one bug Huisong Li
2022-11-10 1:50 ` [PATCH 1/3] mailbox: pcc: rename platform interrupt bit macro name Huisong Li
2022-11-10 10:25 ` Sudeep Holla
2022-11-10 12:17 ` lihuisong (C)
2022-11-10 19:29 ` Rafael J. Wysocki
2022-11-11 1:10 ` lihuisong (C)
2022-11-10 1:50 ` [PATCH 2/3] ACPI: PCC: add check for platform interrupt Huisong Li
2022-11-10 10:36 ` Sudeep Holla
2022-11-10 12:08 ` lihuisong (C)
2022-11-10 1:50 ` [PATCH 3/3] mailbox: pcc: fix 'pcc_chan_count' when fail to initialize PCC Huisong Li
2022-11-10 10:44 ` Sudeep Holla
2022-11-10 12:10 ` lihuisong (C)
2022-11-11 2:44 ` [PATCH V2 0/2] optimize pcc code and fix one bug Huisong Li
2022-11-11 2:44 ` [PATCH V2 1/2] ACPI: PCC: add check for platform interrupt Huisong Li
2022-11-11 14:26 ` Sudeep Holla
2022-11-12 1:27 ` lihuisong (C)
2022-11-11 2:44 ` [PATCH V2 2/2] mailbox: pcc: fix 'pcc_chan_count' when fail to initialize PCC Huisong Li
2022-11-11 14:14 ` Sudeep Holla
2022-11-12 2:05 ` [PATCH V3 0/2] Optimize PCC OpRegion code and reset pcc_chan_count Huisong Li
2022-11-12 2:05 ` Huisong Li [this message]
2022-11-12 2:05 ` [PATCH V3 2/2] mailbox: pcc: Reset pcc_chan_count to zero in case of PCC probe failure Huisong Li
2022-11-23 18:28 ` [PATCH V3 0/2] Optimize PCC OpRegion code and reset pcc_chan_count Rafael J. Wysocki
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=20221112020528.7837-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=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