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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6CE20C61DA4 for ; Tue, 7 Feb 2023 02:27:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229940AbjBGC1i (ORCPT ); Mon, 6 Feb 2023 21:27:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33214 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229447AbjBGC1g (ORCPT ); Mon, 6 Feb 2023 21:27:36 -0500 Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C9403430F; Mon, 6 Feb 2023 18:27:34 -0800 (PST) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.57]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4P9n3P0GZpzkXqp; Tue, 7 Feb 2023 10:22:57 +0800 (CST) Received: from [10.67.103.231] (10.67.103.231) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Tue, 7 Feb 2023 10:27:31 +0800 Message-ID: <926bf147-5e93-0104-1bf4-171efcd15c5c@huawei.com> Date: Tue, 7 Feb 2023 10:27:31 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: [RFC-V3 1/2] mailbox: pcc: Add processing platform notification for slave subspaces To: Sudeep Holla , Robbie King CC: , , , , , , , , , , , References: <20221016034043.52227-1-lihuisong@huawei.com> <20221203095150.45422-1-lihuisong@huawei.com> <20221203095150.45422-2-lihuisong@huawei.com> <20230206153940.gcddy3b3znk72yqd@bogus> From: "lihuisong (C)" In-Reply-To: <20230206153940.gcddy3b3znk72yqd@bogus> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.67.103.231] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To kwepemm600004.china.huawei.com (7.193.23.242) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2023/2/6 23:39, Sudeep Holla 写道: > Hi Huisong, > > Apologies for such a long delay. > > Also I would like to hear from Robbie King who I know is playing around > with this these days ????. At minimum if this logic works for him as well. @Robbie King, Do you use this patchset to test your requirements? Any other problems? Can you tell us your result? > > On Sat, Dec 03, 2022 at 05:51:49PM +0800, Huisong Li wrote: >> 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 introduces a communication flow direction field to detect >> whether the interrupt belongs to the master or slave subspace channel. >> 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 >> --- >> drivers/mailbox/pcc.c | 77 +++++++++++++++++++++++++++++++++++++++---- >> 1 file changed, 71 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c >> index 105d46c9801b..ad6d0b7d50fc 100644 >> --- a/drivers/mailbox/pcc.c >> +++ b/drivers/mailbox/pcc.c >> @@ -80,6 +80,13 @@ struct pcc_chan_reg { >> u64 status_mask; >> }; >> >> +enum pcc_chan_comm_flow_dir_type { >> + PCC_ONLY_OSPM_TO_PLATFORM, >> + PCC_ONLY_PLATFORM_TO_OSPM, >> + PCC_BIDIRECTIONAL, >> + PCC_DIR_UNKNOWN, >> +}; >> + >> /** >> * struct pcc_chan_info - PCC channel specific information >> * >> @@ -91,6 +98,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 >> + * @comm_flow_dir: direction of communication flow supported by the channel >> */ >> struct pcc_chan_info { >> struct pcc_mbox_chan chan; >> @@ -100,12 +108,15 @@ struct pcc_chan_info { >> struct pcc_chan_reg cmd_update; >> struct pcc_chan_reg error; >> int plat_irq; >> + u8 comm_flow_dir; > I would rather just save the 'type' as read from the PCCT. We don't know > what future types might be and just identifying them by the direction of > flow of the data, it restricts the usage of this. Ack. > >> }; >> >> #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 +232,43 @@ static int pcc_map_interrupt(u32 interrupt, u32 flags) >> return acpi_register_gsi(NULL, interrupt, trigger, polarity); >> } >> >> +static bool pcc_chan_need_rsp_irq(struct pcc_chan_info *pchan, >> + u64 cmd_complete_reg_val) > Probably rename this as pcc_chan_command_complete or something similar. Ack > >> +{ >> + bool need_rsp; >> + >> + if (!pchan->cmd_complete.gas) >> + return true; >> + >> + cmd_complete_reg_val &= pchan->cmd_complete.status_mask; >> + >> + switch (pchan->comm_flow_dir) { > Use the channel type instead here. Ack