From patchwork Thu Jul 8 18:08:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471270 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp525890jao; Thu, 8 Jul 2021 11:09:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwZsr9NCsO76Np/FpNac90Gr6I6dsGrjlavi2fe5cZirFw27RJpAxp3Zyz9gz/5G/xNntvr X-Received: by 2002:a17:907:2d0a:: with SMTP id gs10mr31917006ejc.207.1625767743885; Thu, 08 Jul 2021 11:09:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767743; cv=none; d=google.com; s=arc-20160816; b=oQdx+uszaRfpjrH64y+KW5GR7c4r6SaB2/Z8HcpCEn38LTvh7iFnckTWWJ/kIwOSZl 8o3QUNQoy/CCtCfy90oiZGZjKQqTxGplvq+XpkwSbs/LO7lJhZFaM2LW0NSFuAEF4EBE +UVFhvMWFLkFTU3UGYDLyFeyluFshZrQakTEM0lV3e/y92Wgh36HwiSL48ijrxgTm57a cv7+jzicS+GFkv0c6GuCVIdy/J4eKqRKAwm2mngsmbgTDD9aJKeqsDrQBpouyaLIUyXR 6VLGHeKWmRxBPwOZaeWMz/PGD6lyaT5vPsgs8aqOyW05ehq+gTkj/TRpv1Z9eG07mREq v21w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=DzovIwM53gT4FkzDofjKoO9a50BRUe8hvj8/QsCeSqI=; b=eDeIebkfT2vtWkJNIuZ/U2sMjji9iqkSqaZuQjbCFb7F+Moq0HeEHH1BXXJwD8aIri z35R832VFYjxqWk1w9KwfzKY8QwsZVh9EZJANnMFyiOq3iuaNbnZBNXhUvMehRkXUD4a JBD5T6UBn/YnK97HeU7Ff50YTmjJvPqvh7UG9GwcQkdGhmWbed7izKESDR4bc0mpmIHI KUIV+moa3RL1QAZZEayaHP1WDwVVi4iLyLnpE/+YNGFzGdDM312egITyNetzCSxc8h1I 7LW3RFlle5u1EOMY6hwKThbN/Db30kvSvUKs2v/olm5fMNlR3HEb0d2HO52alXJofQix mRPA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 24si3945545ejw.232.2021.07.08.11.09.03; Thu, 08 Jul 2021 11:09:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229469AbhGHSLn (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:43 -0400 Received: from foss.arm.com ([217.140.110.172]:35964 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230141AbhGHSLm (ORCPT ); Thu, 8 Jul 2021 14:11:42 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E7A3F1063; Thu, 8 Jul 2021 11:08:59 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 0D74D3F66F; Thu, 8 Jul 2021 11:08:58 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 01/13] mailbox: pcc: Fix doxygen comments Date: Thu, 8 Jul 2021 19:08:39 +0100 Message-Id: <20210708180851.2311192-2-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Clang complains about doxygen comments too with W=1 in the build. | drivers/mailbox/pcc.c:179: warning: Function parameter or member 'irq' | not described in 'pcc_mbox_irq' | drivers/mailbox/pcc.c:179: warning: Function parameter or member 'p' | not described in 'pcc_mbox_irq' | drivers/mailbox/pcc.c:378: warning: expecting prototype for | parse_pcc_subspaces(). Prototype was for parse_pcc_subspace() instead Fix it. Signed-off-by: Sudeep Holla --- drivers/mailbox/pcc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) -- 2.25.1 diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index 0296558f9e22..23391e224a68 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -174,6 +174,10 @@ static int pcc_map_interrupt(u32 interrupt, u32 flags) /** * pcc_mbox_irq - PCC mailbox interrupt handler + * @irq: interrupt number + * @p: data/cookie passed from the caller to identify the channel + * + * Returns: IRQ_HANDLED if interrupt is handled or IRQ_NONE if not */ static irqreturn_t pcc_mbox_irq(int irq, void *p) { @@ -364,7 +368,7 @@ static const struct mbox_chan_ops pcc_chan_ops = { }; /** - * parse_pcc_subspaces -- Count PCC subspaces defined + * parse_pcc_subspace - Count PCC subspaces defined * @header: Pointer to the ACPI subtable header under the PCCT. * @end: End of subtable entry. * From patchwork Thu Jul 8 18:08:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471271 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp525898jao; Thu, 8 Jul 2021 11:09:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzMKWyC0tv6onWN+BGVSnQWf6HRpy8RcpmxX1ePOYuQmpDvQOYob6Ty31w4hwoafK8QG6pu X-Received: by 2002:aa7:d143:: with SMTP id r3mr19510305edo.110.1625767744290; Thu, 08 Jul 2021 11:09:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767744; cv=none; d=google.com; s=arc-20160816; b=xJeUPHwlkjZ+Sk44/MqQsVio66pIc2G9gqZOGQHU2RwXfANtjTNQmW1z6EUjk8EAHb w8OFu6/VTB2l7W/eEzpWy3vbFrLQZMujoZW5QQ+j2KhIQVvvQhouCLlsQIlzMTOoOUuv vzUzmdrr9S7WbMEP03Wsz9zx8QWh5IdHSTRjnzHkQ2jzwvnVsmx67NrVzTbLhGyMEF9s KRCHY+9EvwRZzorNbksYo8Gbvd2lTq40d5Re/V4nIFHdFYuhBCZXimUgZplSavwqQxl8 WVCLwPfFgtp/UMBtgZwg/eZFI6W3mup/071Wah3tR44SHSMfPdINnJhBnB4zGnUyTsPF sJdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=06UWdvjQnk9ooxekP5mH3kzJ79A/vzsfDT2UUrmLdpU=; b=CA0vKyk6GD1TWi2CzHTwLxtfPvstfXoy65vWL3w4PfGJbIL2RgvEdhnseSem3YFImN HyVBGW27m8hDL87bPZlIKssau0iSV/6Lk7LBsq/gzHE84SJae8gPcaQx2ns28vtd4gWy UFZZ/qo9MFkztZFy6rLilpXmnHMUp951S/Y5TOs4WZwUkFUH+cpfRxnLzSJGIgYXDhe1 GhpE4qbNLfBT9z8OXdhOPZxlSDtD/gqIvJmwQClrh/mymF26Yz0Tl2zcRSBqDLPYnpZ4 3GrVKpFI9lkaKc/Mu5QpZJgHkJhm3qh8Hx6SEEV0uBk8lccBu9Q1ZSyJZs1Y9k9NI5I6 mMWw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 24si3945545ejw.232.2021.07.08.11.09.04; Thu, 08 Jul 2021 11:09:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230178AbhGHSLn (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:43 -0400 Received: from foss.arm.com ([217.140.110.172]:35974 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230166AbhGHSLn (ORCPT ); Thu, 8 Jul 2021 14:11:43 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0BEE6D6E; Thu, 8 Jul 2021 11:09:01 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 261283F66F; Thu, 8 Jul 2021 11:09:00 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 02/13] ACPI: CPPC: Fix doxygen comments Date: Thu, 8 Jul 2021 19:08:40 +0100 Message-Id: <20210708180851.2311192-3-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Clang complains about doxygen comments too with W=1 in the build. | drivers/acpi/cppc_acpi.c:560: warning: Function parameter or member | 'pcc_ss_id' not described in 'pcc_data_alloc' | drivers/acpi/cppc_acpi.c:1343: warning: Function parameter or member | 'cpu_num' not described in 'cppc_get_transition_latency' Fix it. Signed-off-by: Sudeep Holla --- drivers/acpi/cppc_acpi.c | 7 +++++++ 1 file changed, 7 insertions(+) -- 2.25.1 diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c index a4d4eebba1da..eb5685167d19 100644 --- a/drivers/acpi/cppc_acpi.c +++ b/drivers/acpi/cppc_acpi.c @@ -562,6 +562,8 @@ bool __weak cpc_ffh_supported(void) /** * pcc_data_alloc() - Allocate the pcc_data memory for pcc subspace * + * @pcc_ss_id: PCC Subspace channel identifier + * * Check and allocate the cppc_pcc_data memory. * In some processor configurations it is possible that same subspace * is shared between multiple CPUs. This is seen especially in CPUs @@ -1347,10 +1349,15 @@ EXPORT_SYMBOL_GPL(cppc_set_perf); /** * cppc_get_transition_latency - returns frequency transition latency in ns * + * @cpu_num: Logical index of the CPU for which latencty is requested + * * ACPI CPPC does not explicitly specify how a platform can specify the * transition latency for performance change requests. The closest we have * is the timing information from the PCCT tables which provides the info * on the number and frequency of PCC commands the platform can handle. + * + * Returns: frequency transition latency on success or CPUFREQ_ETERNAL on + * failure */ unsigned int cppc_get_transition_latency(int cpu_num) { From patchwork Thu Jul 8 18:08:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471272 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp525921jao; Thu, 8 Jul 2021 11:09:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxqStwztZfcW9//Fa14buges5yH9rU9kge7my0TtetFHVXqPJYE4VVUIwXsI3HB9hLn95PN X-Received: by 2002:a17:907:7709:: with SMTP id kw9mr33144143ejc.68.1625767745322; Thu, 08 Jul 2021 11:09:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767745; cv=none; d=google.com; s=arc-20160816; b=u3IVNCqOA0pXFarKS/hLAxaH9+lyn61baDmL9R5EZxVH8+0m189MBxUI/RD1tmdxG/ BcnUHNkANU54IPMhicdeB10hyxIdu+NUnllPvQR7dig/D+y+Fos5CMMCRJc95wXuNqrX g0dQI8KOjDtIcthe8k3ll2N0ekrNViRYP8MwdfNzsx1piW4//BShPXoc4S4ZKH33o4ov bN4TIdrFci9FZYYVLE9B4OZmsthhFZAob3mTgMHFozIM6/HDDU8S08TtkEHoEbe0hsql uSTVjsUBwzHMG6IRGnKO2NHmzkGAyVeBMgusDuKCjZ2l5n9dkQ+ejowOLVa1wgw/VbvN oSvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=ckJhdES6k2/A+IwF+i2bHGZrr1C37f/soWN5M088xsk=; b=HBMSOEdWIPIdq6NAXCrmzCCuL3/hqw6LxNOqB65gPG4F3XpGjHPoBk9bRLUyjAPfeE lVDD0bf4yuMjObsNsuQtLIEV0M2IHecDcsbgYAHL0YsUikCwccyKsVOwzbJplSdkYONS 1G7RfzR2kdh0vppD17ZUG3fb/mussxIiwPZ3t3O++BUow7u1Ej1qtxPvJcXBX2DSyzMv FsyAGkct97MWNAhBlmm37fJZUHZOguHaft1c8YQQdas4IZKJyuQU8dFZ+A7pr/tmUSoj 44W8ZLKW9Cew0udJ/Kh5YlgjbErDig6LxGzQdHbE/K0jWg4XOh7oU9wBG4AKnPnV7V1u uzNQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 24si3945545ejw.232.2021.07.08.11.09.05; Thu, 08 Jul 2021 11:09:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230210AbhGHSLp (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:45 -0400 Received: from foss.arm.com ([217.140.110.172]:35982 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230191AbhGHSLo (ORCPT ); Thu, 8 Jul 2021 14:11:44 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 276BE1424; Thu, 8 Jul 2021 11:09:02 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 3EB103F66F; Thu, 8 Jul 2021 11:09:01 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 03/13] mailbox: pcc: Refactor all PCC channel information into a structure Date: Thu, 8 Jul 2021 19:08:41 +0100 Message-Id: <20210708180851.2311192-4-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Currently all the PCC channel specific information are stored/maintained in global individual arrays for each of those information. It is not scalable and not clean if we have to stash more channel specific information. Couple of reasons to stash more information are to extend the support to Type 3/4 PCCT subspace and also to avoid accessing the PCCT table entries themselves each time we need the information. This patch moves all those PCC channel specific information into a separate structure pcc_chan_info. Signed-off-by: Sudeep Holla --- drivers/mailbox/pcc.c | 106 +++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 53 deletions(-) -- 2.25.1 diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index 23391e224a68..c5f481a615b0 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -64,12 +64,20 @@ static struct mbox_chan *pcc_mbox_channels; -/* Array of cached virtual address for doorbell registers */ -static void __iomem **pcc_doorbell_vaddr; -/* Array of cached virtual address for doorbell ack registers */ -static void __iomem **pcc_doorbell_ack_vaddr; -/* Array of doorbell interrupts */ -static int *pcc_doorbell_irq; +/** + * struct pcc_chan_info - PCC channel specific information + * + * @db_vaddr: cached virtual address for doorbell register + * @db_ack_vaddr: cached virtual address for doorbell ack register + * @db_irq: doorbell interrupt + */ +struct pcc_chan_info { + void __iomem *db_vaddr; + void __iomem *db_ack_vaddr; + int db_irq; +}; + +static struct pcc_chan_info *chan_info; static struct mbox_controller pcc_mbox_ctrl = {}; /** @@ -183,6 +191,7 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p) { struct acpi_generic_address *doorbell_ack; struct acpi_pcct_hw_reduced *pcct_ss; + struct pcc_chan_info *pchan; struct mbox_chan *chan = p; u64 doorbell_ack_preserve; u64 doorbell_ack_write; @@ -197,17 +206,17 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p) struct acpi_pcct_hw_reduced_type2 *pcct2_ss = chan->con_priv; u32 id = chan - pcc_mbox_channels; + pchan = chan_info + id; doorbell_ack = &pcct2_ss->platform_ack_register; doorbell_ack_preserve = pcct2_ss->ack_preserve_mask; doorbell_ack_write = pcct2_ss->ack_write_mask; - ret = read_register(pcc_doorbell_ack_vaddr[id], - &doorbell_ack_val, - doorbell_ack->bit_width); + ret = read_register(pchan->db_ack_vaddr, + &doorbell_ack_val, doorbell_ack->bit_width); if (ret) return IRQ_NONE; - ret = write_register(pcc_doorbell_ack_vaddr[id], + ret = write_register(pchan->db_ack_vaddr, (doorbell_ack_val & doorbell_ack_preserve) | doorbell_ack_write, doorbell_ack->bit_width); @@ -232,8 +241,9 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p) * ERR_PTR. */ struct mbox_chan *pcc_mbox_request_channel(struct mbox_client *cl, - int subspace_id) + int subspace_id) { + struct pcc_chan_info *pchan = chan_info + subspace_id; struct device *dev = pcc_mbox_ctrl.dev; struct mbox_chan *chan; unsigned long flags; @@ -264,14 +274,14 @@ struct mbox_chan *pcc_mbox_request_channel(struct mbox_client *cl, spin_unlock_irqrestore(&chan->lock, flags); - if (pcc_doorbell_irq[subspace_id] > 0) { + if (pchan->db_irq > 0) { int rc; - rc = devm_request_irq(dev, pcc_doorbell_irq[subspace_id], - pcc_mbox_irq, 0, MBOX_IRQ_NAME, chan); + rc = devm_request_irq(dev, pchan->db_irq, pcc_mbox_irq, 0, + MBOX_IRQ_NAME, chan); if (unlikely(rc)) { dev_err(dev, "failed to register PCC interrupt %d\n", - pcc_doorbell_irq[subspace_id]); + pchan->db_irq); pcc_mbox_free_channel(chan); chan = ERR_PTR(rc); } @@ -290,6 +300,7 @@ EXPORT_SYMBOL_GPL(pcc_mbox_request_channel); void pcc_mbox_free_channel(struct mbox_chan *chan) { u32 id = chan - pcc_mbox_channels; + struct pcc_chan_info *pchan; unsigned long flags; if (!chan || !chan->cl) @@ -300,8 +311,9 @@ void pcc_mbox_free_channel(struct mbox_chan *chan) return; } - if (pcc_doorbell_irq[id] > 0) - devm_free_irq(chan->mbox->dev, pcc_doorbell_irq[id], chan); + pchan = chan_info + id; + if (pchan->db_irq > 0) + devm_free_irq(chan->mbox->dev, pchan->db_irq, chan); spin_lock_irqsave(&chan->lock, flags); chan->cl = NULL; @@ -329,6 +341,7 @@ static int pcc_send_data(struct mbox_chan *chan, void *data) { struct acpi_pcct_hw_reduced *pcct_ss = chan->con_priv; struct acpi_generic_address *doorbell; + struct pcc_chan_info *pchan; u64 doorbell_preserve; u64 doorbell_val; u64 doorbell_write; @@ -340,19 +353,20 @@ static int pcc_send_data(struct mbox_chan *chan, void *data) return -ENOENT; } + pchan = chan_info + id; doorbell = &pcct_ss->doorbell_register; doorbell_preserve = pcct_ss->preserve_mask; doorbell_write = pcct_ss->write_mask; /* Sync notification from OS to Platform. */ - if (pcc_doorbell_vaddr[id]) { - ret = read_register(pcc_doorbell_vaddr[id], &doorbell_val, - doorbell->bit_width); + if (pchan->db_vaddr) { + ret = read_register(pchan->db_vaddr, &doorbell_val, + doorbell->bit_width); if (ret) return ret; - ret = write_register(pcc_doorbell_vaddr[id], - (doorbell_val & doorbell_preserve) | doorbell_write, - doorbell->bit_width); + ret = write_register(pchan->db_vaddr, + (doorbell_val & doorbell_preserve) + | doorbell_write, doorbell->bit_width); } else { ret = acpi_read(&doorbell_val, doorbell); if (ret) @@ -398,12 +412,13 @@ static int parse_pcc_subspace(union acpi_subtable_headers *header, * * This gets called for each entry in the PCC table. */ -static int pcc_parse_subspace_irq(int id, - struct acpi_pcct_hw_reduced *pcct_ss) +static int pcc_parse_subspace_irq(int id, struct acpi_pcct_hw_reduced *pcct_ss) { - pcc_doorbell_irq[id] = pcc_map_interrupt(pcct_ss->platform_interrupt, - (u32)pcct_ss->flags); - if (pcc_doorbell_irq[id] <= 0) { + struct pcc_chan_info *pchan = chan_info + id; + + pchan->db_irq = pcc_map_interrupt(pcct_ss->platform_interrupt, + (u32)pcct_ss->flags); + if (pchan->db_irq <= 0) { pr_err("PCC GSI %d not registered\n", pcct_ss->platform_interrupt); return -EINVAL; @@ -413,10 +428,10 @@ static int pcc_parse_subspace_irq(int id, == ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2) { struct acpi_pcct_hw_reduced_type2 *pcct2_ss = (void *)pcct_ss; - pcc_doorbell_ack_vaddr[id] = acpi_os_ioremap( - pcct2_ss->platform_ack_register.address, - pcct2_ss->platform_ack_register.bit_width / 8); - if (!pcc_doorbell_ack_vaddr[id]) { + pchan->db_ack_vaddr = + acpi_os_ioremap(pcct2_ss->platform_ack_register.address, + pcct2_ss->platform_ack_register.bit_width / 8); + if (!pchan->db_ack_vaddr) { pr_err("Failed to ioremap PCC ACK register\n"); return -ENOMEM; } @@ -474,24 +489,12 @@ static int __init acpi_pcc_probe(void) goto err_put_pcct; } - pcc_doorbell_vaddr = kcalloc(count, sizeof(void *), GFP_KERNEL); - if (!pcc_doorbell_vaddr) { + chan_info = kcalloc(count, sizeof(*chan_info), GFP_KERNEL); + if (!chan_info) { rc = -ENOMEM; goto err_free_mbox; } - pcc_doorbell_ack_vaddr = kcalloc(count, sizeof(void *), GFP_KERNEL); - if (!pcc_doorbell_ack_vaddr) { - rc = -ENOMEM; - goto err_free_db_vaddr; - } - - pcc_doorbell_irq = kcalloc(count, sizeof(int), GFP_KERNEL); - if (!pcc_doorbell_irq) { - rc = -ENOMEM; - goto err_free_db_ack_vaddr; - } - /* Point to the first PCC subspace entry */ pcct_entry = (struct acpi_subtable_header *) ( (unsigned long) pcct_tbl + sizeof(struct acpi_table_pcct)); @@ -501,6 +504,7 @@ static int __init acpi_pcc_probe(void) pcc_mbox_ctrl.txdone_irq = true; for (i = 0; i < count; i++) { + struct pcc_chan_info *pchan = chan_info + i; struct acpi_generic_address *db_reg; struct acpi_pcct_subspace *pcct_ss; pcc_mbox_channels[i].con_priv = pcct_entry; @@ -522,8 +526,8 @@ static int __init acpi_pcc_probe(void) /* If doorbell is in system memory cache the virt address */ db_reg = &pcct_ss->doorbell_register; if (db_reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) - pcc_doorbell_vaddr[i] = acpi_os_ioremap(db_reg->address, - db_reg->bit_width/8); + pchan->db_vaddr = acpi_os_ioremap(db_reg->address, + db_reg->bit_width / 8); pcct_entry = (struct acpi_subtable_header *) ((unsigned long) pcct_entry + pcct_entry->length); } @@ -535,11 +539,7 @@ static int __init acpi_pcc_probe(void) return 0; err: - kfree(pcc_doorbell_irq); -err_free_db_ack_vaddr: - kfree(pcc_doorbell_ack_vaddr); -err_free_db_vaddr: - kfree(pcc_doorbell_vaddr); + kfree(chan_info); err_free_mbox: kfree(pcc_mbox_channels); err_put_pcct: From patchwork Thu Jul 8 18:08:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471273 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp525935jao; Thu, 8 Jul 2021 11:09:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzkLqiIq5qr0X28/p1uEVWRdEqsWebq/jAnAr6igMQhe9fjM1t37T5PL22MR1Hltg2H2ckH X-Received: by 2002:a17:907:2d2a:: with SMTP id gs42mr27662829ejc.371.1625767746265; Thu, 08 Jul 2021 11:09:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767746; cv=none; d=google.com; s=arc-20160816; b=uKd1ilbsdReK7r/JbRAshiFXhmNp43jCdyw/elCZgyStiEnL5wFMMrJIifdk1siPnL Dlib9mULBddZ00nOLItafhYjGFzUkWdXKVC6i+QtOM722O4ns3UjKYE1BFqw/pwjlBj4 3jeimiP5kKvqo08DyAWNaUV9vdqqqwobC2+v1BvGe++AmmqUmSIMdDJvQinmwetyiheY RmBw5uy/pgrGYU60WGivGYXmzEKd1prgoDCA9fJe3pJuAtv63VGbp6gPy5ys0RGq8kVZ gd340MzVOze5JIYP66k8Bpaex0R447EtJuvoCaw0VhAKrC+z/RXCBzjfmRYLGhJwEpIK 1oAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=ElF5NgDZMWS9QbkjtrnSqMJNc007ajCK6vpTZuNyszA=; b=ARA12n2WD5QIrZ5/HCrZm11oY21yMW68aFqWtipaFxXtPgkOCPzDzoDzJy5sdJXgII 09H59EF5/Z/71cJ/js9PlzUMLOkZNf9JWhqJCzg/OOmPnj7kd92cDu/5R4xygCc3E7lK 6GxXB6NrPcarUrmmzIz6Da6wiX9WarZB4cs9ei8ZODGMfVq2Y13nASgVewpZxqNU2Hiw PrGpbG37C7dIL13Q4zikKuuKtTueYZQLxSw2kBHtreLbwg62zXKn9s3BFqgv4fcq5NRt VoWw5ad3FxNkZGKYpO8AHol12xpj9wo00VKZ0HeO/SWd3qlUSw4X2ffDoZifwK3rf6sg yL0w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 24si3945545ejw.232.2021.07.08.11.09.06; Thu, 08 Jul 2021 11:09:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230166AbhGHSLr (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:47 -0400 Received: from foss.arm.com ([217.140.110.172]:35992 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230211AbhGHSLp (ORCPT ); Thu, 8 Jul 2021 14:11:45 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3D5EED6E; Thu, 8 Jul 2021 11:09:03 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 579543F66F; Thu, 8 Jul 2021 11:09:02 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 04/13] mailbox: pcc: Consolidate subspace interrupt information parsing Date: Thu, 8 Jul 2021 19:08:42 +0100 Message-Id: <20210708180851.2311192-5-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Extended PCC subspaces(Type 3 and 4) differs from generic(Type 0) and HW-Reduced Communication(Type 1 and 2) subspace structures. However some fields share same offsets and same type of structure can be use to extract the fields. In order to simplify that, let us move all the IRQ related information parsing into pcc_parse_subspace_irq and consolidate there. It will be easier to extend it if required within the same. Signed-off-by: Sudeep Holla --- drivers/mailbox/pcc.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) -- 2.25.1 Reviewed-by: Cristian Marussi diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index c5f481a615b0..55866676a508 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -404,18 +404,26 @@ static int parse_pcc_subspace(union acpi_subtable_headers *header, /** * pcc_parse_subspace_irq - Parse the PCC IRQ and PCC ACK register - * There should be one entry per PCC client. - * @id: PCC subspace index. - * @pcct_ss: Pointer to the ACPI subtable header under the PCCT. + * + * @pchan: Pointer to the PCC channel info structure. + * @pcct_entry: Pointer to the ACPI subtable header. * * Return: 0 for Success, else errno. * - * This gets called for each entry in the PCC table. + * There should be one entry per PCC channel. This gets called for each + * entry in the PCC table. This uses PCCY Type1 structure for all applicable + * types(Type 1 -4) to fetch irq */ -static int pcc_parse_subspace_irq(int id, struct acpi_pcct_hw_reduced *pcct_ss) +static int pcc_parse_subspace_irq(struct pcc_chan_info *pchan, + struct acpi_subtable_header *pcct_entry) { - struct pcc_chan_info *pchan = chan_info + id; + struct acpi_pcct_hw_reduced *pcct_ss; + if (pcct_entry->type < ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE || + pcct_entry->type > ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE) + return 0; + + pcct_ss = (struct acpi_pcct_hw_reduced *)pcct_entry; pchan->db_irq = pcc_map_interrupt(pcct_ss->platform_interrupt, (u32)pcct_ss->flags); if (pchan->db_irq <= 0) { @@ -424,8 +432,7 @@ static int pcc_parse_subspace_irq(int id, struct acpi_pcct_hw_reduced *pcct_ss) return -EINVAL; } - if (pcct_ss->header.type - == ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2) { + if (pcct_ss->header.type == ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2) { struct acpi_pcct_hw_reduced_type2 *pcct2_ss = (void *)pcct_ss; pchan->db_ack_vaddr = @@ -509,17 +516,10 @@ static int __init acpi_pcc_probe(void) struct acpi_pcct_subspace *pcct_ss; pcc_mbox_channels[i].con_priv = pcct_entry; - if (pcct_entry->type == ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE || - pcct_entry->type == ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2) { - struct acpi_pcct_hw_reduced *pcct_hrss; - - pcct_hrss = (struct acpi_pcct_hw_reduced *) pcct_entry; - - if (pcc_mbox_ctrl.txdone_irq) { - rc = pcc_parse_subspace_irq(i, pcct_hrss); - if (rc < 0) - goto err; - } + if (pcc_mbox_ctrl.txdone_irq) { + rc = pcc_parse_subspace_irq(pchan, pcct_entry); + if (rc < 0) + goto err; } pcct_ss = (struct acpi_pcct_subspace *) pcct_entry; From patchwork Thu Jul 8 18:08:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471274 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp525941jao; Thu, 8 Jul 2021 11:09:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzdxM0Klv0XEnU82J6Aea3ciyIfD86jx1PCqbrEewj3okoJVHh8u5y8ocxa9VGfo6KHtr+f X-Received: by 2002:a17:906:28c4:: with SMTP id p4mr3897101ejd.302.1625767746652; Thu, 08 Jul 2021 11:09:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767746; cv=none; d=google.com; s=arc-20160816; b=dMF3MR0zRh8Evvci6TYIwI9cRy783JLblv+aKueQcmrF4N8yy2GnWzYQdjrj7q4VzK tGydkZBUvdQR0/t8bF1r3cxzhfUBw3YrFIx8JlAL7poO11wXHvWvXT7kZL7Kov9dNK9O L03N2a4+gk3otMHz1Eq/BwOMn9Z25aEEvakLaVRVZyWd+j4U5YqJMbsEOdP2ahfMxT0z ug3XcjdZlDAhjKBCQj9IM+k3CXplnAWFAIqe6wJAUWaBBKdpnEUG0d4Qy51zpSx2LSz6 MPJqPwoeUrJmtiyyzzx2lBSHqUu8IP5LKIvlE0j3B2u7vUgXxkLVKe5w5LyJeI/T0bRu kSvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=sgzLHhMYxKROSJeRvFi5xsnYR7zMK1dwLnzSJoAru8c=; b=0V/GqlthAivu9y3jtVTsHHhNes04odhHZExfFz4M6rgITGxri/gEiuVDXRqADDa3wB EsXlLAscG04sI4/AEnWJtngxyrDcyyWFStuhZnnAdYnEYPtvBU9Vp2NEzhnT8ipxILoc WrD9yLT+FVgycVr7AacExob6oZhNY4ajYTFpcxioVAXlAAa8S7Gs3OVhL9wPUS9ucRSO qJNxCpkBp6V7HIc998dCRjtIF9cXjaCITje6MOqiq6f5zrljODFq+gFIJrJvuJPjjyRB 9yZheHVz58JpnZReA/xfvS6nzURO/BenlhRiuXvfeRTKE9Wyc33hiBF0JFLb33QLmFaE pEqQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 24si3945545ejw.232.2021.07.08.11.09.06; Thu, 08 Jul 2021 11:09:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230155AbhGHSLr (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:47 -0400 Received: from foss.arm.com ([217.140.110.172]:35996 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230220AbhGHSLq (ORCPT ); Thu, 8 Jul 2021 14:11:46 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5581A1063; Thu, 8 Jul 2021 11:09:04 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 6FB7D3F66F; Thu, 8 Jul 2021 11:09:03 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 05/13] mailbox: pcc: Consolidate subspace doorbell register parsing Date: Thu, 8 Jul 2021 19:08:43 +0100 Message-Id: <20210708180851.2311192-6-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Extended PCC subspaces(Type 3 and 4) differs from generic(Type 0) and HW-Reduced Communication(Type 1 and 2) subspace structures. However some fields share same offsets and same type of structure can be use to extract the fields. In order to simplify that, let us move all the doorbell register parsing into pcc_parse_subspace_db_reg and consolidate there. It will be easier to extend it if required within the same. Signed-off-by: Sudeep Holla --- drivers/mailbox/pcc.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) -- 2.25.1 Reviewed-by: Cristian Marussi diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index 55866676a508..5f19bee71c04 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -447,6 +447,28 @@ static int pcc_parse_subspace_irq(struct pcc_chan_info *pchan, return 0; } +/** + * pcc_parse_subspace_db_reg - Parse the PCC doorbell register + * + * @pchan: Pointer to the PCC channel info structure. + * @pcct_entry: Pointer to the ACPI subtable header. + * + */ +static void pcc_parse_subspace_db_reg(struct pcc_chan_info *pchan, + struct acpi_subtable_header *pcct_entry) +{ + struct acpi_pcct_subspace *pcct_ss; + struct acpi_generic_address *db_reg; + + pcct_ss = (struct acpi_pcct_subspace *)pcct_entry; + + /* If doorbell is in system memory cache the virt address */ + db_reg = &pcct_ss->doorbell_register; + if (db_reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) + pchan->db_vaddr = acpi_os_ioremap(db_reg->address, + db_reg->bit_width / 8); +} + /** * acpi_pcc_probe - Parse the ACPI tree for the PCCT. * @@ -512,8 +534,6 @@ static int __init acpi_pcc_probe(void) for (i = 0; i < count; i++) { struct pcc_chan_info *pchan = chan_info + i; - struct acpi_generic_address *db_reg; - struct acpi_pcct_subspace *pcct_ss; pcc_mbox_channels[i].con_priv = pcct_entry; if (pcc_mbox_ctrl.txdone_irq) { @@ -521,13 +541,8 @@ static int __init acpi_pcc_probe(void) if (rc < 0) goto err; } - pcct_ss = (struct acpi_pcct_subspace *) pcct_entry; + pcc_parse_subspace_db_reg(pchan, pcct_entry); - /* If doorbell is in system memory cache the virt address */ - db_reg = &pcct_ss->doorbell_register; - if (db_reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) - pchan->db_vaddr = acpi_os_ioremap(db_reg->address, - db_reg->bit_width / 8); pcct_entry = (struct acpi_subtable_header *) ((unsigned long) pcct_entry + pcct_entry->length); } From patchwork Thu Jul 8 18:08:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471275 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp525983jao; Thu, 8 Jul 2021 11:09:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyQe4lrqa3GlEA9SK6IAgWTtPhIqkicby5wDPLmYOAdVkvYWl+/TWaqs7timCRPcWHW7PjQ X-Received: by 2002:a17:906:1da1:: with SMTP id u1mr31847314ejh.307.1625767749872; Thu, 08 Jul 2021 11:09:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767749; cv=none; d=google.com; s=arc-20160816; b=p9zSjWSdzRpcigpHMBvcxW7dzKLscY7WHZOvbfyoZX3Z9rvVHJWM9B4kY9qJf9fmUP FWfhUl2zudYaEDUTQdPyXTLyQT5rVsQ/RPW8Noxzg2IKcu7ieeVZrzifLnviisdYd/ra IwsYmsbQnUCjfAas6xUYEEHYkoE347dQ9GVdY+9K6heNriawp6/IJObXSS+je57rWWSb ssQtxsQ84FUrGIfICmOwuZC399rhfsdYRwY7BuQdn96fj36Hqd4K+iYtruW3SFbxYWol y/tZ9O9SDHPQgzK/ePtnhbKwY2DXZB0OC5pT8OhQ19J9mlBWaE9FE7/SrOMbjApCqBrT vHhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=VwNBWZ985tkAz+7uvN/At35/6VqARX208gb5D3C9+60=; b=rcuDnYUqOdimSIWaW0qpIi3bM2Rc7PAGXj9/LMF+JaRUucXMF/0DUwmGJSHHnr5oeB qapuFBu12HLdZIg0Tk6kTN0tu10JoeEFYvuw5O/4SowzZSNYgdm70n6gk1QOUznTe3rd SgNXoiY9JAEd4xdGkmd8I6ar2sy/Ta06lWjcLkMp34Q3/cHC3BO3FixqOtOEMaAoYUCi 838ntSgcTfgFNh6gC7sUhNthcF3VvmLDTyVVhQGlXiy6Ac1rMISyqzC6tHQVEAESyAnq 5QNresFtab4g4IqL6jyq/R/tDt7oLnh/YtGU9ObHCvw9T/tlpHhDPAykRwQ7S5iMVWvB B0Lw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y7si3810568ejc.395.2021.07.08.11.09.09; Thu, 08 Jul 2021 11:09:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229497AbhGHSLt (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:49 -0400 Received: from foss.arm.com ([217.140.110.172]:36002 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230233AbhGHSLr (ORCPT ); Thu, 8 Jul 2021 14:11:47 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6DC0AD6E; Thu, 8 Jul 2021 11:09:05 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 87E3F3F66F; Thu, 8 Jul 2021 11:09:04 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 06/13] mailbox: pcc: Add pcc_mbox_chan structure to hold shared memory region info Date: Thu, 8 Jul 2021 19:08:44 +0100 Message-Id: <20210708180851.2311192-7-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Currently PCC mailbox controller sets con_priv in each channel to hold the pointer to pcct subspace entry it corresponds to. The mailbox uses will then fetch this pointer from the channel descriptor they get when they request for the channel. Using that pointer they then parse the pcct entry again to fetch all the information about shared memory region. In order to remove individual users of PCC mailbox parsing the PCCT subspace entries to fetch same information, let us consolidate the same in pcc mailbox controller by parsing all the shared memory region information into a structure that can also hold the mbox_chan pointer it represent. This can then be used as main PCC mailbox channel pointer that we can return as part of pcc_mbox_request_channel instead of standard mailbox channel pointer. Signed-off-by: Sudeep Holla --- drivers/mailbox/pcc.c | 27 +++++++++++++++++++++++++++ include/acpi/pcc.h | 9 +++++++++ 2 files changed, 36 insertions(+) -- 2.25.1 Reviewed-by: Cristian Marussi diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index 5f19bee71c04..affde0995d52 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -67,11 +67,13 @@ static struct mbox_chan *pcc_mbox_channels; /** * struct pcc_chan_info - PCC channel specific information * + * @chan: PCC channel information with Shared Memory Region info * @db_vaddr: cached virtual address for doorbell register * @db_ack_vaddr: cached virtual address for doorbell ack register * @db_irq: doorbell interrupt */ struct pcc_chan_info { + struct pcc_mbox_chan chan; void __iomem *db_vaddr; void __iomem *db_ack_vaddr; int db_irq; @@ -469,6 +471,27 @@ static void pcc_parse_subspace_db_reg(struct pcc_chan_info *pchan, db_reg->bit_width / 8); } +/** + * pcc_parse_subspace_shmem - Parse the PCC Shared Memory Region information + * + * @pchan: Pointer to the PCC channel info structure. + * @pcct_entry: Pointer to the ACPI subtable header. + * + */ +static void pcc_parse_subspace_shmem(struct pcc_chan_info *pchan, + struct acpi_subtable_header *pcct_entry) +{ + struct acpi_pcct_subspace *pcct_ss; + + pcct_ss = (struct acpi_pcct_subspace *)pcct_entry; + + pchan->chan.shmem_base_addr = pcct_ss->base_address; + pchan->chan.shmem_size = pcct_ss->length; + pchan->chan.latency = pcct_ss->latency; + pchan->chan.max_access_rate = pcct_ss->max_access_rate; + pchan->chan.min_turnaround_time = pcct_ss->min_turnaround_time; +} + /** * acpi_pcc_probe - Parse the ACPI tree for the PCCT. * @@ -536,6 +559,8 @@ static int __init acpi_pcc_probe(void) struct pcc_chan_info *pchan = chan_info + i; pcc_mbox_channels[i].con_priv = pcct_entry; + pchan->chan.mchan = &pcc_mbox_channels[i]; + if (pcc_mbox_ctrl.txdone_irq) { rc = pcc_parse_subspace_irq(pchan, pcct_entry); if (rc < 0) @@ -543,6 +568,8 @@ static int __init acpi_pcc_probe(void) } pcc_parse_subspace_db_reg(pchan, pcct_entry); + pcc_parse_subspace_shmem(pchan, pcct_entry); + pcct_entry = (struct acpi_subtable_header *) ((unsigned long) pcct_entry + pcct_entry->length); } diff --git a/include/acpi/pcc.h b/include/acpi/pcc.h index 4dec4ed138cd..5e510a6b8052 100644 --- a/include/acpi/pcc.h +++ b/include/acpi/pcc.h @@ -9,6 +9,15 @@ #include #include +struct pcc_mbox_chan { + struct mbox_chan *mchan; + u64 shmem_base_addr; + u64 shmem_size; + u32 latency; + u32 max_access_rate; + u16 min_turnaround_time; +}; + #define MAX_PCC_SUBSPACES 256 #ifdef CONFIG_PCC extern struct mbox_chan *pcc_mbox_request_channel(struct mbox_client *cl, From patchwork Thu Jul 8 18:08:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471276 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp526015jao; Thu, 8 Jul 2021 11:09:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx879T3Poy1Y2UJarI2L4Hz2GekI54I6aB54ygQOeJPUafx6O9VotyMZ3vRQGa7z3RS2+Xv X-Received: by 2002:a05:6402:42d2:: with SMTP id i18mr39882864edc.168.1625767751464; Thu, 08 Jul 2021 11:09:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767751; cv=none; d=google.com; s=arc-20160816; b=hG4TPMG1yDcCRNnydDMkpOMmnklJWJ1r3EcQUcDWk47WSpzP1My6rZTdmAAYKbs3U9 Q6q66qjZ0Pm8lxR4ttPQ5hpYqOqPh+K//THquT/dx2SrCAycqs3ZBmJSjQmem7ey+fDo ZB+AOFtg/xImqJXcQAzdCoRtnqyBZ8TSmUu+cFuZCD/z20cesHiYhBgqRVG8JN/qgYYM 4wOUuNgkC31ucI2nioL1Qrquykf7EWk0T5BNNdjQMbZvv7dJT6P5DaDU+SLnrsydLCdU 76I2ANyo7fi2f/JiyXM273h/DeQOOgUveANXi0L7y/mUn+67vu+5gJ9Tjh6YK3brVkjk lO1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=mGaHhZZdbl2I26L1IIbJQOTHtJ7ClToTHMonAkmZPPI=; b=pPjD6WJBGNXbdKeIyjkBisXGQqCJjE2GjfLLmhbKP21xbqU9gHu7XG8UfrOFW+hZ4P rrOfKHVxVcZB9rGQR0iMpvacGUQTPv29p1sLT/s01P3+x42PFRXbLFJhNU5Ak3QT/tWf DsBd2USr3HXTRAjrXzd1ppq8N15zdl1mxZyhb1zalnHYjGjMH3dg1ZY9t4zQTiVK36ho l+4Rg4YTzkTbTpUZ138j6si7aC8/14pL8i5+CSDwB4yXTiBDjfDguHMiSr5eK69rqtjE SDZea3QQ+NGQVagbD5HpjDfojK2l+DBw7dLB/mDzDO88x8O5P75IewbKMXaYqB6angwi Bg2w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y7si3810568ejc.395.2021.07.08.11.09.11; Thu, 08 Jul 2021 11:09:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230317AbhGHSLv (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:51 -0400 Received: from foss.arm.com ([217.140.110.172]:36016 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230248AbhGHSLt (ORCPT ); Thu, 8 Jul 2021 14:11:49 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 34EBE1063; Thu, 8 Jul 2021 11:09:07 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id A1C643F66F; Thu, 8 Jul 2021 11:09:05 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar , Jean Delvare , Guenter Roeck , Wolfram Sang , linux-hwmon@vger.kernel.org, linux-i2c@vger.kernel.org Subject: [PATCH 07/13] mailbox: pcc: Use PCC mailbox channel pointer instead of standard Date: Thu, 8 Jul 2021 19:08:45 +0100 Message-Id: <20210708180851.2311192-8-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Now that we have all the shared memory region information populated in the pcc_mbox_chan, let us propagate the pointer to the same as the return value to pcc_mbox_request channel. This eliminates the need for the individual users of PCC mailbox to parse the PCCT subspace entries and fetch the shmem information. This also eliminates the need for PCC mailbox controller to set con_priv to PCCT subspace entries. This is required as con_priv is private to the controller driver to attach private data associated with the channel and not meant to be used by the mailbox client/users. Let us convert all the users of pcc_mbox_{request,free}_channel to use new interface. Cc: Jean Delvare Cc: Guenter Roeck Cc: Wolfram Sang Cc: linux-hwmon@vger.kernel.org Cc: linux-i2c@vger.kernel.org Signed-off-by: Sudeep Holla --- drivers/acpi/cppc_acpi.c | 43 +++++++----------- drivers/hwmon/xgene-hwmon.c | 35 ++++++--------- drivers/i2c/busses/i2c-xgene-slimpro.c | 33 +++++--------- drivers/mailbox/pcc.c | 61 +++++++------------------- include/acpi/pcc.h | 12 ++--- 5 files changed, 61 insertions(+), 123 deletions(-) -- 2.25.1 diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c index eb5685167d19..dad6c0c1dd3d 100644 --- a/drivers/acpi/cppc_acpi.c +++ b/drivers/acpi/cppc_acpi.c @@ -43,7 +43,7 @@ #include struct cppc_pcc_data { - struct mbox_chan *pcc_channel; + struct pcc_mbox_chan *pcc_channel; void __iomem *pcc_comm_addr; bool pcc_channel_acquired; unsigned int deadline_us; @@ -295,7 +295,7 @@ static int send_pcc_cmd(int pcc_ss_id, u16 cmd) pcc_ss_data->platform_owns_pcc = true; /* Ring doorbell */ - ret = mbox_send_message(pcc_ss_data->pcc_channel, &cmd); + ret = mbox_send_message(pcc_ss_data->pcc_channel->mchan, &cmd); if (ret < 0) { pr_err("Err sending PCC mbox message. ss: %d cmd:%d, ret:%d\n", pcc_ss_id, cmd, ret); @@ -308,10 +308,10 @@ static int send_pcc_cmd(int pcc_ss_id, u16 cmd) if (pcc_ss_data->pcc_mrtt) pcc_ss_data->last_cmd_cmpl_time = ktime_get(); - if (pcc_ss_data->pcc_channel->mbox->txdone_irq) - mbox_chan_txdone(pcc_ss_data->pcc_channel, ret); + if (pcc_ss_data->pcc_channel->mchan->mbox->txdone_irq) + mbox_chan_txdone(pcc_ss_data->pcc_channel->mchan, ret); else - mbox_client_txdone(pcc_ss_data->pcc_channel, ret); + mbox_client_txdone(pcc_ss_data->pcc_channel->mchan, ret); end: if (cmd == CMD_WRITE) { @@ -493,46 +493,33 @@ EXPORT_SYMBOL_GPL(acpi_get_psd_map); static int register_pcc_channel(int pcc_ss_idx) { - struct acpi_pcct_hw_reduced *cppc_ss; + struct pcc_mbox_chan *pcc_chan; u64 usecs_lat; if (pcc_ss_idx >= 0) { - pcc_data[pcc_ss_idx]->pcc_channel = - pcc_mbox_request_channel(&cppc_mbox_cl, pcc_ss_idx); + pcc_chan = pcc_mbox_request_channel(&cppc_mbox_cl, pcc_ss_idx); - if (IS_ERR(pcc_data[pcc_ss_idx]->pcc_channel)) { + if (IS_ERR(pcc_chan)) { pr_err("Failed to find PCC channel for subspace %d\n", pcc_ss_idx); return -ENODEV; } - /* - * The PCC mailbox controller driver should - * have parsed the PCCT (global table of all - * PCC channels) and stored pointers to the - * subspace communication region in con_priv. - */ - cppc_ss = (pcc_data[pcc_ss_idx]->pcc_channel)->con_priv; - - if (!cppc_ss) { - pr_err("No PCC subspace found for %d CPPC\n", - pcc_ss_idx); - return -ENODEV; - } - + pcc_data[pcc_ss_idx]->pcc_channel = pcc_chan; /* * cppc_ss->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 = NUM_RETRIES * cppc_ss->latency; + usecs_lat = NUM_RETRIES * pcc_chan->latency; pcc_data[pcc_ss_idx]->deadline_us = usecs_lat; - pcc_data[pcc_ss_idx]->pcc_mrtt = cppc_ss->min_turnaround_time; - pcc_data[pcc_ss_idx]->pcc_mpar = cppc_ss->max_access_rate; - pcc_data[pcc_ss_idx]->pcc_nominal = cppc_ss->latency; + pcc_data[pcc_ss_idx]->pcc_mrtt = pcc_chan->min_turnaround_time; + pcc_data[pcc_ss_idx]->pcc_mpar = pcc_chan->max_access_rate; + pcc_data[pcc_ss_idx]->pcc_nominal = pcc_chan->latency; pcc_data[pcc_ss_idx]->pcc_comm_addr = - acpi_os_ioremap(cppc_ss->base_address, cppc_ss->length); + acpi_os_ioremap(pcc_chan->shmem_base_addr, + pcc_chan->shmem_size); if (!pcc_data[pcc_ss_idx]->pcc_comm_addr) { pr_err("Failed to ioremap PCC comm region mem for %d\n", pcc_ss_idx); diff --git a/drivers/hwmon/xgene-hwmon.c b/drivers/hwmon/xgene-hwmon.c index 382ef0395d8e..30aae8642069 100644 --- a/drivers/hwmon/xgene-hwmon.c +++ b/drivers/hwmon/xgene-hwmon.c @@ -93,6 +93,7 @@ struct slimpro_resp_msg { struct xgene_hwmon_dev { struct device *dev; struct mbox_chan *mbox_chan; + struct pcc_mbox_chan *pcc_chan; struct mbox_client mbox_client; int mbox_idx; @@ -652,7 +653,7 @@ static int xgene_hwmon_probe(struct platform_device *pdev) goto out_mbox_free; } } else { - struct acpi_pcct_hw_reduced *cppc_ss; + struct pcc_mbox_chan *pcc_chan; const struct acpi_device_id *acpi_id; int version; @@ -671,26 +672,16 @@ static int xgene_hwmon_probe(struct platform_device *pdev) } cl->rx_callback = xgene_hwmon_pcc_rx_cb; - ctx->mbox_chan = pcc_mbox_request_channel(cl, ctx->mbox_idx); - if (IS_ERR(ctx->mbox_chan)) { + pcc_chan = pcc_mbox_request_channel(cl, ctx->mbox_idx); + if (IS_ERR(pcc_chan)) { dev_err(&pdev->dev, "PPC channel request failed\n"); rc = -ENODEV; goto out_mbox_free; } - /* - * The PCC mailbox controller driver should - * have parsed the PCCT (global table of all - * PCC channels) and stored pointers to the - * subspace communication region in con_priv. - */ - cppc_ss = ctx->mbox_chan->con_priv; - if (!cppc_ss) { - dev_err(&pdev->dev, "PPC subspace not found\n"); - rc = -ENODEV; - goto out; - } + ctx->pcc_chan = pcc_chan; + ctx->mbox_chan = pcc_chan->mchan; if (!ctx->mbox_chan->mbox->txdone_irq) { dev_err(&pdev->dev, "PCC IRQ not supported\n"); @@ -702,16 +693,16 @@ static int xgene_hwmon_probe(struct platform_device *pdev) * This is the shared communication region * for the OS and Platform to communicate over. */ - ctx->comm_base_addr = cppc_ss->base_address; + ctx->comm_base_addr = pcc_chan->shmem_base_addr; if (ctx->comm_base_addr) { if (version == XGENE_HWMON_V2) ctx->pcc_comm_addr = (void __force *)ioremap( ctx->comm_base_addr, - cppc_ss->length); + pcc_chan->shmem_size); else ctx->pcc_comm_addr = memremap( ctx->comm_base_addr, - cppc_ss->length, + pcc_chan->shmem_size, MEMREMAP_WB); } else { dev_err(&pdev->dev, "Failed to get PCC comm region\n"); @@ -727,11 +718,11 @@ static int xgene_hwmon_probe(struct platform_device *pdev) } /* - * cppc_ss->latency is just a Nominal value. In reality + * 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. */ - ctx->usecs_lat = PCC_NUM_RETRIES * cppc_ss->latency; + ctx->usecs_lat = PCC_NUM_RETRIES * pcc_chan->latency; } ctx->hwmon_dev = hwmon_device_register_with_groups(ctx->dev, @@ -757,7 +748,7 @@ static int xgene_hwmon_probe(struct platform_device *pdev) if (acpi_disabled) mbox_free_channel(ctx->mbox_chan); else - pcc_mbox_free_channel(ctx->mbox_chan); + pcc_mbox_free_channel(ctx->pcc_chan); out_mbox_free: kfifo_free(&ctx->async_msg_fifo); @@ -773,7 +764,7 @@ static int xgene_hwmon_remove(struct platform_device *pdev) if (acpi_disabled) mbox_free_channel(ctx->mbox_chan); else - pcc_mbox_free_channel(ctx->mbox_chan); + pcc_mbox_free_channel(ctx->pcc_chan); return 0; } diff --git a/drivers/i2c/busses/i2c-xgene-slimpro.c b/drivers/i2c/busses/i2c-xgene-slimpro.c index bba08cbce6e1..1a19ebad60ad 100644 --- a/drivers/i2c/busses/i2c-xgene-slimpro.c +++ b/drivers/i2c/busses/i2c-xgene-slimpro.c @@ -103,6 +103,7 @@ struct slimpro_i2c_dev { struct i2c_adapter adapter; struct device *dev; struct mbox_chan *mbox_chan; + struct pcc_mbox_chan *pcc_chan; struct mbox_client mbox_client; int mbox_idx; struct completion rd_complete; @@ -466,7 +467,7 @@ static int xgene_slimpro_i2c_probe(struct platform_device *pdev) return PTR_ERR(ctx->mbox_chan); } } else { - struct acpi_pcct_hw_reduced *cppc_ss; + struct pcc_mbox_chan *pcc_chan; const struct acpi_device_id *acpi_id; int version = XGENE_SLIMPRO_I2C_V1; @@ -483,24 +484,14 @@ static int xgene_slimpro_i2c_probe(struct platform_device *pdev) cl->tx_block = false; cl->rx_callback = slimpro_i2c_pcc_rx_cb; - ctx->mbox_chan = pcc_mbox_request_channel(cl, ctx->mbox_idx); - if (IS_ERR(ctx->mbox_chan)) { + pcc_chan = pcc_mbox_request_channel(cl, ctx->mbox_idx); + if (IS_ERR(pcc_chan)) { dev_err(&pdev->dev, "PCC mailbox channel request failed\n"); - return PTR_ERR(ctx->mbox_chan); + return PTR_ERR(ctx->pcc_chan); } - /* - * The PCC mailbox controller driver should - * have parsed the PCCT (global table of all - * PCC channels) and stored pointers to the - * subspace communication region in con_priv. - */ - cppc_ss = ctx->mbox_chan->con_priv; - if (!cppc_ss) { - dev_err(&pdev->dev, "PPC subspace not found\n"); - rc = -ENOENT; - goto mbox_err; - } + ctx->pcc_chan = pcc_chan; + ctx->mbox_chan = pcc_chan->mchan; if (!ctx->mbox_chan->mbox->txdone_irq) { dev_err(&pdev->dev, "PCC IRQ not supported\n"); @@ -512,17 +503,17 @@ static int xgene_slimpro_i2c_probe(struct platform_device *pdev) * This is the shared communication region * for the OS and Platform to communicate over. */ - ctx->comm_base_addr = cppc_ss->base_address; + ctx->comm_base_addr = pcc_chan->shmem_base_addr; if (ctx->comm_base_addr) { if (version == XGENE_SLIMPRO_I2C_V2) ctx->pcc_comm_addr = memremap( ctx->comm_base_addr, - cppc_ss->length, + pcc_chan->shmem_size, MEMREMAP_WT); else ctx->pcc_comm_addr = memremap( ctx->comm_base_addr, - cppc_ss->length, + pcc_chan->shmem_size, MEMREMAP_WB); } else { dev_err(&pdev->dev, "Failed to get PCC comm region\n"); @@ -561,7 +552,7 @@ static int xgene_slimpro_i2c_probe(struct platform_device *pdev) if (acpi_disabled) mbox_free_channel(ctx->mbox_chan); else - pcc_mbox_free_channel(ctx->mbox_chan); + pcc_mbox_free_channel(ctx->pcc_chan); return rc; } @@ -575,7 +566,7 @@ static int xgene_slimpro_i2c_remove(struct platform_device *pdev) if (acpi_disabled) mbox_free_channel(ctx->mbox_chan); else - pcc_mbox_free_channel(ctx->mbox_chan); + pcc_mbox_free_channel(ctx->pcc_chan); return 0; } diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index affde0995d52..49971e007e40 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -79,24 +79,9 @@ struct pcc_chan_info { int db_irq; }; +#define to_pcc_chan_info(c) container_of(c, struct pcc_chan_info, chan) static struct pcc_chan_info *chan_info; - static struct mbox_controller pcc_mbox_ctrl = {}; -/** - * get_pcc_channel - Given a PCC subspace idx, get - * the respective mbox_channel. - * @id: PCC subspace index. - * - * Return: ERR_PTR(errno) if error, else pointer - * to mbox channel. - */ -static struct mbox_chan *get_pcc_channel(int id) -{ - if (id < 0 || id >= pcc_mbox_ctrl.num_chans) - return ERR_PTR(-ENOENT); - - return &pcc_mbox_channels[id]; -} /* * PCC can be used with perf critical drivers such as CPPC @@ -239,26 +224,16 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p) * ACPI package. This is used to lookup the array of PCC * subspaces as parsed by the PCC Mailbox controller. * - * Return: Pointer to the Mailbox Channel if successful or - * ERR_PTR. + * Return: Pointer to the PCC Mailbox Channel if successful or ERR_PTR. */ -struct mbox_chan *pcc_mbox_request_channel(struct mbox_client *cl, - int subspace_id) +struct pcc_mbox_chan * +pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id) { struct pcc_chan_info *pchan = chan_info + subspace_id; struct device *dev = pcc_mbox_ctrl.dev; - struct mbox_chan *chan; + struct mbox_chan *chan = pchan->chan.mchan; unsigned long flags; - /* - * Each PCC Subspace is a Mailbox Channel. - * The PCC Clients get their PCC Subspace ID - * from their own tables and pass it here. - * This returns a pointer to the PCC subspace - * for the Client to operate on. - */ - chan = get_pcc_channel(subspace_id); - if (IS_ERR(chan) || chan->cl) { dev_err(dev, "Channel not found for idx: %d\n", subspace_id); return ERR_PTR(-EBUSY); @@ -284,38 +259,32 @@ struct mbox_chan *pcc_mbox_request_channel(struct mbox_client *cl, if (unlikely(rc)) { dev_err(dev, "failed to register PCC interrupt %d\n", pchan->db_irq); - pcc_mbox_free_channel(chan); - chan = ERR_PTR(rc); + pcc_mbox_free_channel(&pchan->chan); + return ERR_PTR(rc); } } - return chan; + return &pchan->chan; } EXPORT_SYMBOL_GPL(pcc_mbox_request_channel); /** * pcc_mbox_free_channel - Clients call this to free their Channel. * - * @chan: Pointer to the mailbox channel as returned by - * pcc_mbox_request_channel() + * @pchan: Pointer to the PCC mailbox channel as returned by + * pcc_mbox_request_channel() */ -void pcc_mbox_free_channel(struct mbox_chan *chan) +void pcc_mbox_free_channel(struct pcc_mbox_chan *pchan) { - u32 id = chan - pcc_mbox_channels; - struct pcc_chan_info *pchan; + struct pcc_chan_info *pchan_info = to_pcc_chan_info(pchan); + struct mbox_chan *chan = pchan->mchan; unsigned long flags; if (!chan || !chan->cl) return; - if (id >= pcc_mbox_ctrl.num_chans) { - pr_debug("pcc_mbox_free_channel: Invalid mbox_chan passed\n"); - return; - } - - pchan = chan_info + id; - if (pchan->db_irq > 0) - devm_free_irq(chan->mbox->dev, pchan->db_irq, chan); + if (pchan_info->db_irq > 0) + devm_free_irq(chan->mbox->dev, pchan_info->db_irq, chan); spin_lock_irqsave(&chan->lock, flags); chan->cl = NULL; diff --git a/include/acpi/pcc.h b/include/acpi/pcc.h index 5e510a6b8052..73e806fe7ce7 100644 --- a/include/acpi/pcc.h +++ b/include/acpi/pcc.h @@ -20,16 +20,16 @@ struct pcc_mbox_chan { #define MAX_PCC_SUBSPACES 256 #ifdef CONFIG_PCC -extern struct mbox_chan *pcc_mbox_request_channel(struct mbox_client *cl, - int subspace_id); -extern void pcc_mbox_free_channel(struct mbox_chan *chan); +extern struct pcc_mbox_chan * +pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id); +extern void pcc_mbox_free_channel(struct pcc_mbox_chan *chan); #else -static inline struct mbox_chan *pcc_mbox_request_channel(struct mbox_client *cl, - int subspace_id) +static inline struct pcc_mbox_chan * +pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id) { return ERR_PTR(-ENODEV); } -static inline void pcc_mbox_free_channel(struct mbox_chan *chan) { } +static inline void pcc_mbox_free_channel(struct pcc_mbox_chan *chan) { } #endif #endif /* _PCC_H */ From patchwork Thu Jul 8 18:08:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471277 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp526036jao; Thu, 8 Jul 2021 11:09:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw0Dpxm6SUAmQDScfB2W10mdIaXxx/urGjk8Hwx/bAPtzGyjpbJfNq49/16EbISXu7JNTzL X-Received: by 2002:a05:6402:510d:: with SMTP id m13mr39651438edd.179.1625767753037; Thu, 08 Jul 2021 11:09:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767753; cv=none; d=google.com; s=arc-20160816; b=LzLGMJ3GeCgSf6okDdz0PygNZyL0GjxuN1aIS35Qj/iiT0bsu6vMw8ZCO478lR4uA3 HAMG9MWHlmxuQZuJ5EtUXYr+hXArXZVqcvDvRWeWv6/BZ+1XKk3d0dE/1MVUB3n+zxSl CnP32qw+2pzFDmPU9AukvD2qUM06B39I/9gE6d0gpx9I1i+7zldDML54aRIPkbKAJUaJ KKUm3eLaodGG7O6f44k7hsDiIdjcAjd+VyYMBlnWjRbF/yGjftzpiykvsFy266p5lqf8 jAoP3+O2HukFy62m/S811iFYcJ/jz5hQSa0P8IZgzw0uS27+iHaXisEwWaBANahC/xAm UBXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=N6QnEANcEJnWKhIUTk0kGp8KUldmRM7MdJN0qBm/24M=; b=uA1xNMoM+jcywVtoNRBO4mv9Eb08L/tP1uj7fGA2OBMCjIhnZE72iQxkFAg+58nXnd EyFANwz1dX40Yk7LCNvk83DQoZN5pabIjaaNRLv+P9fs0At0KJaesAe7hs5TWXl43kPK Dw2+MFSsfMgaMpkwp9RGYyr+f6YhjOL4IqD1f8+r3VfthLPXob4J/8H98ddU5GpatvAJ MdFcvQSSr3cGOga6nrP9k6ppePO1lfCjbkGZBzjAvPn9/+/3a4AI1pEuHBWuJv3ZarRH nCwkx8V5JWW/RT3W81At5i0kRp2GU9kuPbC+KWc/yqW8mFQtbIIbO9+egzRrFzvJxXKv gBAA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y7si3810568ejc.395.2021.07.08.11.09.12; Thu, 08 Jul 2021 11:09:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230271AbhGHSLx (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:53 -0400 Received: from foss.arm.com ([217.140.110.172]:36026 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230191AbhGHSLu (ORCPT ); Thu, 8 Jul 2021 14:11:50 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4DB03D6E; Thu, 8 Jul 2021 11:09:08 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 66E6B3F66F; Thu, 8 Jul 2021 11:09:07 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 08/13] mailbox: pcc: Rename doorbell ack to platform interrupt ack register Date: Thu, 8 Jul 2021 19:08:46 +0100 Message-Id: <20210708180851.2311192-9-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org The specification refers this register and associated bitmask as platform interrupt acknowledge register. Let us rename it so that it is easier to map and understand. Signed-off-by: Sudeep Holla --- drivers/mailbox/pcc.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) -- 2.25.1 diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index 49971e007e40..c4eecccac4b8 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -69,13 +69,14 @@ static struct mbox_chan *pcc_mbox_channels; * * @chan: PCC channel information with Shared Memory Region info * @db_vaddr: cached virtual address for doorbell register - * @db_ack_vaddr: cached virtual address for doorbell ack register + * @plat_irq_ack_vaddr: cached virtual address for platform interrupt + * acknowledge register * @db_irq: doorbell interrupt */ struct pcc_chan_info { struct pcc_mbox_chan chan; void __iomem *db_vaddr; - void __iomem *db_ack_vaddr; + void __iomem *plat_irq_ack_vaddr; int db_irq; }; @@ -198,12 +199,12 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p) doorbell_ack_preserve = pcct2_ss->ack_preserve_mask; doorbell_ack_write = pcct2_ss->ack_write_mask; - ret = read_register(pchan->db_ack_vaddr, + ret = read_register(pchan->plat_irq_ack_vaddr, &doorbell_ack_val, doorbell_ack->bit_width); if (ret) return IRQ_NONE; - ret = write_register(pchan->db_ack_vaddr, + ret = write_register(pchan->plat_irq_ack_vaddr, (doorbell_ack_val & doorbell_ack_preserve) | doorbell_ack_write, doorbell_ack->bit_width); @@ -406,10 +407,10 @@ static int pcc_parse_subspace_irq(struct pcc_chan_info *pchan, if (pcct_ss->header.type == ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2) { struct acpi_pcct_hw_reduced_type2 *pcct2_ss = (void *)pcct_ss; - pchan->db_ack_vaddr = + pchan->plat_irq_ack_vaddr = acpi_os_ioremap(pcct2_ss->platform_ack_register.address, pcct2_ss->platform_ack_register.bit_width / 8); - if (!pchan->db_ack_vaddr) { + if (!pchan->plat_irq_ack_vaddr) { pr_err("Failed to ioremap PCC ACK register\n"); return -ENOMEM; } From patchwork Thu Jul 8 18:08:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471280 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp526071jao; Thu, 8 Jul 2021 11:09:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzdMt7PrIn5f/rZowzvNMNUMf2RRq5ypY/RniXRTI3jXSvmjHpV25mKa2lHK6/GfPDhkJvQ X-Received: by 2002:aa7:dd5a:: with SMTP id o26mr39976225edw.277.1625767755498; Thu, 08 Jul 2021 11:09:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767755; cv=none; d=google.com; s=arc-20160816; b=l/vojcZZ1FtUd9W0FJz04M5so3yKGNKJ37BfdyMYScXpVVMIL9OonOhs4uNLktHsK8 Spc456HWIIL7nVc7lKaZyhiVRCMTTjBx0wGMhhNK16utiCoqaZRbzF9SAk+7OyfQKOLF ddKMHXCjabf2/B8xFlH320WltZDcSOero2uJf7mXkpFOiaU+J0Y3eUWy1JEOIpu03Roo KGwIRpga0eD4SqwkeuxYdFotTHvzwZyQTACS7sYBNzYDt4eqyBydVWaNzlBjzFJGbPID 0/FDHqAk2whnr8XbR50D4Yj3n9WbtqXSqDT3yffFO8iqU7ei9ijndF4ypfEfXPlnGz+7 DINg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=ZXdg6ln79rhX7CN+49qQ8QryHngI+u+OrIZrfh81S4U=; b=nCe6Mo3lUuIgYRUF5xcAmV93lx2OP15mLxVdi7gQnFIXH6rrKzEj4f2iO4sP6whb9j 1WcPK/EJXAiUXWKh7lEHHCFK3tnlyh47m6RJMponbvw1H6qyVye1j9HNvqt0rsLEUBQ1 vJGlas+GF78VC20gKHW1ayFcwYIixkp0CCM2y6ooO7mwK6OVh3XJ4zMBDu9+6k04Nxal bVlCEWBXeCQ4Z8qiFrYV3gKQGjBdv6DSnCCfGZbr102ICzoNBpi7wtvb69Il52ZoQuwR PiYSEKhkhM3ASEE+HWxJu6plptDSlUP/mJ9cZWO5GhdomaWBuHpUABsju4KCX1jjqtce aN4g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y7si3810568ejc.395.2021.07.08.11.09.15; Thu, 08 Jul 2021 11:09:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230240AbhGHSLz (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:55 -0400 Received: from foss.arm.com ([217.140.110.172]:36034 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230327AbhGHSLv (ORCPT ); Thu, 8 Jul 2021 14:11:51 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 675F91424; Thu, 8 Jul 2021 11:09:09 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 7FE4D3F66F; Thu, 8 Jul 2021 11:09:08 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 09/13] mailbox: pcc: Add PCC register bundle and associated accessor functions Date: Thu, 8 Jul 2021 19:08:47 +0100 Message-Id: <20210708180851.2311192-10-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Extended PCC subspaces introduces more registers into the PCCT. In order to consolidate access to these registers and to keep all the details contained in one place, let us introduce PCC register bundle that holds the ACPI Generic Address Structure as well as the virtual address for the same if it is mapped in the OS. It also contains the various masks used to access the register and the associated read, write and read-modify-write accessors. We can also clean up the initialisations by having a helper function for the same. Signed-off-by: Sudeep Holla --- drivers/mailbox/pcc.c | 90 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) -- 2.25.1 diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index c4eecccac4b8..7d48e5c1ac52 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -52,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -64,6 +65,23 @@ static struct mbox_chan *pcc_mbox_channels; +/** + * struct pcc_chan_reg - PCC register bundle + * + * @vaddr: cached virtual address for this register + * @gas: pointer to the generic address structure for this register + * @preserve_mask: bitmask to preserve when writing to this register + * @set_mask: bitmask to set when writing to this register + * @status_mask: bitmask to determine and/or update the status for this register + */ +struct pcc_chan_reg { + void __iomem *vaddr; + struct acpi_generic_address *gas; + u64 preserve_mask; + u64 set_mask; + u64 status_mask; +}; + /** * struct pcc_chan_info - PCC channel specific information * @@ -144,6 +162,53 @@ static int write_register(void __iomem *vaddr, u64 val, unsigned int bit_width) return ret_val; } +static int pcc_chan_reg_read(struct pcc_chan_reg *reg, u64 *val) +{ + int ret = 0; + + if (!reg->gas) { + *val = 0; + return 0; + } + + if (reg->vaddr) + ret = read_register(reg->vaddr, val, reg->gas->bit_width); + else + ret = acpi_read(val, reg->gas); + + return ret; +} + +static int pcc_chan_reg_write(struct pcc_chan_reg *reg, u64 val) +{ + int ret = 0; + + if (!reg->gas) + return 0; + + if (reg->vaddr) + ret = write_register(reg->vaddr, val, reg->gas->bit_width); + else + ret = acpi_write(val, reg->gas); + + return ret; +} + +static int pcc_chan_reg_read_modify_write(struct pcc_chan_reg *reg) +{ + int ret = 0; + u64 val; + + ret = pcc_chan_reg_read(reg, &val); + if (ret) + return ret; + + val &= reg->preserve_mask; + val |= reg->set_mask; + + return pcc_chan_reg_write(reg, val); +} + /** * pcc_map_interrupt - Map a PCC subspace GSI to a linux IRQ number * @interrupt: GSI number. @@ -374,6 +439,31 @@ static int parse_pcc_subspace(union acpi_subtable_headers *header, return -EINVAL; } +static int +pcc_chan_reg_init(struct pcc_chan_reg *reg, struct acpi_generic_address *gas, + u64 preserve_mask, u64 set_mask, u64 status_mask, char *name) +{ + if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) { + if (!(gas->bit_width >= 8 && gas->bit_width <= 64 && + is_power_of_2(gas->bit_width))) { + pr_err("Error: Cannot access register of %u bit width", + gas->bit_width); + return -EFAULT; + } + + reg->vaddr = acpi_os_ioremap(gas->address, gas->bit_width / 8); + if (!reg->vaddr) { + pr_err("Failed to ioremap PCC %s register\n", name); + return -ENOMEM; + } + } + reg->gas = gas; + reg->preserve_mask = preserve_mask; + reg->set_mask = set_mask; + reg->status_mask = status_mask; + return 0; +} + /** * pcc_parse_subspace_irq - Parse the PCC IRQ and PCC ACK register * From patchwork Thu Jul 8 18:08:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471278 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp526054jao; Thu, 8 Jul 2021 11:09:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw5fFcD0U3q8IM2oaEJyzgMokRGowBu+nNi7FunX2MntVFstgEtKGgxhzZI5/rP6Br+0DKa X-Received: by 2002:a17:907:e89:: with SMTP id ho9mr16683648ejc.545.1625767754019; Thu, 08 Jul 2021 11:09:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767754; cv=none; d=google.com; s=arc-20160816; b=rSh6uZvuBQEmysjR4doQFOrX6IZYcWYrpdwFeR/z9rZ/sSfTVxMUrSP1KW2Po/abai HMnWDXnZBXPW/ywaqteWZ97e0rUdYgsLWTVQvW/QK+elpWoY5TmGoU59EzsqQdIvaeHg LByNmjzayVCKBHo2x3+OaTlwk3ihXYURzCZs8WZYjfYziSV9+j7WYCt7/t9VADHceWkd JlFYGbqrJ/H/QReBRAq8pZelL1jR9nFR2KSr+CQq3oLAcum541MCV/oS4/K4S3mTlsKR wXim6I01s3rWRLEwms6SWOs7ltTbjxSfhm7IJgRCh/DAcZkZd+aYlwiaOYcNqcwSDys/ j//w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=K+UYKKvj1oix73Z6sQaS9R7A+8CMWNFfZFvrJgW2bMY=; b=afN7TcB+gQuao3JzKMJyLot6PQmdYEqlh0Iig6aFEzRxmV2Rz2uH41WT+hgh/beMf3 Vf8WoekkEzWa7fzm4LdCW7aUe+Q3FyFflJE3fCGxUl55ND1GW5qI4mkZcV90cJoDvxGB rKQTaTr3Y6pbJBNEqkogzoFK3qBCXO8Lk41nya1raA0hEC9je/xeJVBcUGBjzg3cc4kt Lk9aUlTj7C05xdI/9CcfhVpPY9+5jpml+aqUuA2iY6Pw0ruJBh4i/EQ1wU1csE0OGk6j nI084dNijWepUFxelIdCOUzSEaBdqLfFuThZ5UyII7gs1jwwY6PkAk2jYFMHwcaBJovi CRhQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y7si3810568ejc.395.2021.07.08.11.09.13; Thu, 08 Jul 2021 11:09:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230343AbhGHSLy (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:54 -0400 Received: from foss.arm.com ([217.140.110.172]:36040 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230334AbhGHSLw (ORCPT ); Thu, 8 Jul 2021 14:11:52 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7FA5A1477; Thu, 8 Jul 2021 11:09:10 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 98FC33F66F; Thu, 8 Jul 2021 11:09:09 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 10/13] mailbox: pcc: Avoid accessing PCCT table in pcc_send_data and pcc_mbox_irq Date: Thu, 8 Jul 2021 19:08:48 +0100 Message-Id: <20210708180851.2311192-11-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Now that the con_priv is availvale solely for PCC mailbox controller driver, let us use the same to save the channel specific information in it so that we can it whenever required instead of parsing the PCCT table entries every time in both pcc_send_data and pcc_mbox_irq. We can now use the newly introduces PCC register bundle to simplify both saving of channel specific information and accessing them without repeated checks for the subspace type. Signed-off-by: Sudeep Holla --- drivers/mailbox/pcc.c | 116 +++++++++++------------------------------- 1 file changed, 30 insertions(+), 86 deletions(-) -- 2.25.1 Reviewed-by: Cristian Marussi diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index 7d48e5c1ac52..237dba9cb445 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -86,15 +86,15 @@ struct pcc_chan_reg { * struct pcc_chan_info - PCC channel specific information * * @chan: PCC channel information with Shared Memory Region info - * @db_vaddr: cached virtual address for doorbell register - * @plat_irq_ack_vaddr: cached virtual address for platform interrupt - * acknowledge register + * @db: PCC register bundle for the doorbell register + * @plat_irq_ack: PCC register bundle for the platform interrupt acknowledge + * register * @db_irq: doorbell interrupt */ struct pcc_chan_info { struct pcc_mbox_chan chan; - void __iomem *db_vaddr; - void __iomem *plat_irq_ack_vaddr; + struct pcc_chan_reg db; + struct pcc_chan_reg plat_irq_ack; int db_irq; }; @@ -242,40 +242,15 @@ static int pcc_map_interrupt(u32 interrupt, u32 flags) */ static irqreturn_t pcc_mbox_irq(int irq, void *p) { - struct acpi_generic_address *doorbell_ack; - struct acpi_pcct_hw_reduced *pcct_ss; struct pcc_chan_info *pchan; struct mbox_chan *chan = p; - u64 doorbell_ack_preserve; - u64 doorbell_ack_write; - u64 doorbell_ack_val; - int ret; - pcct_ss = chan->con_priv; + pchan = chan->con_priv; mbox_chan_received_data(chan, NULL); - if (pcct_ss->header.type == ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2) { - struct acpi_pcct_hw_reduced_type2 *pcct2_ss = chan->con_priv; - u32 id = chan - pcc_mbox_channels; - - pchan = chan_info + id; - doorbell_ack = &pcct2_ss->platform_ack_register; - doorbell_ack_preserve = pcct2_ss->ack_preserve_mask; - doorbell_ack_write = pcct2_ss->ack_write_mask; - - ret = read_register(pchan->plat_irq_ack_vaddr, - &doorbell_ack_val, doorbell_ack->bit_width); - if (ret) - return IRQ_NONE; - - ret = write_register(pchan->plat_irq_ack_vaddr, - (doorbell_ack_val & doorbell_ack_preserve) - | doorbell_ack_write, - doorbell_ack->bit_width); - if (ret) - return IRQ_NONE; - } + if (pcc_chan_reg_read_modify_write(&pchan->plat_irq_ack)) + return IRQ_NONE; return IRQ_HANDLED; } @@ -376,42 +351,9 @@ EXPORT_SYMBOL_GPL(pcc_mbox_free_channel); */ static int pcc_send_data(struct mbox_chan *chan, void *data) { - struct acpi_pcct_hw_reduced *pcct_ss = chan->con_priv; - struct acpi_generic_address *doorbell; - struct pcc_chan_info *pchan; - u64 doorbell_preserve; - u64 doorbell_val; - u64 doorbell_write; - u32 id = chan - pcc_mbox_channels; - int ret = 0; - - if (id >= pcc_mbox_ctrl.num_chans) { - pr_debug("pcc_send_data: Invalid mbox_chan passed\n"); - return -ENOENT; - } + struct pcc_chan_info *pchan = chan->con_priv; - pchan = chan_info + id; - doorbell = &pcct_ss->doorbell_register; - doorbell_preserve = pcct_ss->preserve_mask; - doorbell_write = pcct_ss->write_mask; - - /* Sync notification from OS to Platform. */ - if (pchan->db_vaddr) { - ret = read_register(pchan->db_vaddr, &doorbell_val, - doorbell->bit_width); - if (ret) - return ret; - ret = write_register(pchan->db_vaddr, - (doorbell_val & doorbell_preserve) - | doorbell_write, doorbell->bit_width); - } else { - ret = acpi_read(&doorbell_val, doorbell); - if (ret) - return ret; - ret = acpi_write((doorbell_val & doorbell_preserve) | doorbell_write, - doorbell); - } - return ret; + return pcc_chan_reg_read_modify_write(&pchan->db); } static const struct mbox_chan_ops pcc_chan_ops = { @@ -479,6 +421,7 @@ pcc_chan_reg_init(struct pcc_chan_reg *reg, struct acpi_generic_address *gas, static int pcc_parse_subspace_irq(struct pcc_chan_info *pchan, struct acpi_subtable_header *pcct_entry) { + int ret = 0; struct acpi_pcct_hw_reduced *pcct_ss; if (pcct_entry->type < ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE || @@ -497,16 +440,14 @@ static int pcc_parse_subspace_irq(struct pcc_chan_info *pchan, if (pcct_ss->header.type == ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2) { struct acpi_pcct_hw_reduced_type2 *pcct2_ss = (void *)pcct_ss; - pchan->plat_irq_ack_vaddr = - acpi_os_ioremap(pcct2_ss->platform_ack_register.address, - pcct2_ss->platform_ack_register.bit_width / 8); - if (!pchan->plat_irq_ack_vaddr) { - pr_err("Failed to ioremap PCC ACK register\n"); - return -ENOMEM; - } + ret = pcc_chan_reg_init(&pchan->plat_irq_ack, + &pcct2_ss->platform_ack_register, + pcct2_ss->ack_preserve_mask, + pcct2_ss->ack_write_mask, 0, + "PLAT IRQ ACK"); } - return 0; + return ret; } /** @@ -516,19 +457,20 @@ static int pcc_parse_subspace_irq(struct pcc_chan_info *pchan, * @pcct_entry: Pointer to the ACPI subtable header. * */ -static void pcc_parse_subspace_db_reg(struct pcc_chan_info *pchan, - struct acpi_subtable_header *pcct_entry) +static int pcc_parse_subspace_db_reg(struct pcc_chan_info *pchan, + struct acpi_subtable_header *pcct_entry) { + int ret = 0; + struct acpi_pcct_subspace *pcct_ss; - struct acpi_generic_address *db_reg; pcct_ss = (struct acpi_pcct_subspace *)pcct_entry; - /* If doorbell is in system memory cache the virt address */ - db_reg = &pcct_ss->doorbell_register; - if (db_reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) - pchan->db_vaddr = acpi_os_ioremap(db_reg->address, - db_reg->bit_width / 8); + ret = pcc_chan_reg_init(&pchan->db, + &pcct_ss->doorbell_register, + pcct_ss->preserve_mask, + pcct_ss->write_mask, 0, "Doorbell"); + return ret; } /** @@ -617,8 +559,8 @@ static int __init acpi_pcc_probe(void) for (i = 0; i < count; i++) { struct pcc_chan_info *pchan = chan_info + i; - pcc_mbox_channels[i].con_priv = pcct_entry; + pcc_mbox_channels[i].con_priv = pchan; pchan->chan.mchan = &pcc_mbox_channels[i]; if (pcc_mbox_ctrl.txdone_irq) { @@ -626,7 +568,9 @@ static int __init acpi_pcc_probe(void) if (rc < 0) goto err; } - pcc_parse_subspace_db_reg(pchan, pcct_entry); + rc = pcc_parse_subspace_db_reg(pchan, pcct_entry); + if (rc < 0) + goto err; pcc_parse_subspace_shmem(pchan, pcct_entry); From patchwork Thu Jul 8 18:08:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471279 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp526064jao; Thu, 8 Jul 2021 11:09:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxod1FxrQvlby3VW73t40mwo4tXnL/UIkB6+8vlk789KwhnKlgjC13hp70eE+dEpgYPcgjH X-Received: by 2002:a17:906:a391:: with SMTP id k17mr992166ejz.516.1625767754553; Thu, 08 Jul 2021 11:09:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767754; cv=none; d=google.com; s=arc-20160816; b=KcsSXOSuIDyrBc0LlGvqw1Mk1iZ8OLN9nIOUE+PA4A1uYQbcn+/0K/lpBE4bncFbwr I7E29oroSQHW07zDSoEE8qZNtfuTVXJXZh24RPFD9NJMydWiM6rTeGYZEglbnre1XWwu IzAcnIJnf9ABNVqwJbxUtRcI7qpjpyU1bGuQj1QrKyk8oXcolHNuiGKRSvjWGhVRL7E6 wZsWSdO4YyJejqXMY6b7eUfShb7pUQaJIgcvMo29bD9CTupn00qrBpeyXcqYiAAEqRBO vHIQQ725f+vvQvFEhiMoUZHmN/b4rU6XlRYBArWgFV9QbcslFMqFhuRk9D/bLayJpG+E Q7Ng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=CClQ+dh87CJ0TfJyXP0dlxsbaNUljhQhfIIFPApNnT4=; b=n4wzm5y8He4LfOdZYVsIemwroc2AEGIjsDeZJy972Unw3blND4jJLNS4y91QTsOdoy S4TH3c6LD/w4iXGtTXM974v7ZelFUPN562hX8pARWF9Rcaz14HOS+li+vMkNf85L/2Q+ aEQxjvmCqJbUH5i4cMcn68oj6eFItYFlhADA9FKu7fKoQZmlbovhE6CSEiMOrA0ZrN9o /zuvDs4JdZyjSvh/gAhq7jd+1rVh58XxciGMRX1ckYCMJbKbpPoF/gtc0szoyMghgkd2 dv8ZnNSJiQPb8b4ecyXesxP/w8sDK7FDbZtB5lvPraXkFOSuWLRTpQxC2VsCt2/NIqBz Q2YQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y7si3810568ejc.395.2021.07.08.11.09.14; Thu, 08 Jul 2021 11:09:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230299AbhGHSLz (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:55 -0400 Received: from foss.arm.com ([217.140.110.172]:36026 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230347AbhGHSLx (ORCPT ); Thu, 8 Jul 2021 14:11:53 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 97580D6E; Thu, 8 Jul 2021 11:09:11 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id B1A083F66F; Thu, 8 Jul 2021 11:09:10 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 11/13] mailbox: pcc: Drop handling invalid bit-width in {read, write}_register Date: Thu, 8 Jul 2021 19:08:49 +0100 Message-Id: <20210708180851.2311192-12-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org pcc_chan_reg_init now checks if the register bit width is within the list [8, 16, 32, 64] and flags error if that is not the case. Therefore there is no need to handling invalid bit-width in both read_register and write_register. We can drop that along with the return values for these 2 functions. Signed-off-by: Sudeep Holla --- drivers/mailbox/pcc.c | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) -- 2.25.1 diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index 237dba9cb445..99ad3429f174 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -110,10 +110,8 @@ static struct mbox_controller pcc_mbox_ctrl = {}; * The below read_register and write_registers are used to read and * write from perf critical registers such as PCC doorbell register */ -static int read_register(void __iomem *vaddr, u64 *val, unsigned int bit_width) +static void read_register(void __iomem *vaddr, u64 *val, unsigned int bit_width) { - int ret_val = 0; - switch (bit_width) { case 8: *val = readb(vaddr); @@ -127,19 +125,11 @@ static int read_register(void __iomem *vaddr, u64 *val, unsigned int bit_width) case 64: *val = readq(vaddr); break; - default: - pr_debug("Error: Cannot read register of %u bit width", - bit_width); - ret_val = -EFAULT; - break; } - return ret_val; } -static int write_register(void __iomem *vaddr, u64 val, unsigned int bit_width) +static void write_register(void __iomem *vaddr, u64 val, unsigned int bit_width) { - int ret_val = 0; - switch (bit_width) { case 8: writeb(val, vaddr); @@ -153,13 +143,7 @@ static int write_register(void __iomem *vaddr, u64 val, unsigned int bit_width) case 64: writeq(val, vaddr); break; - default: - pr_debug("Error: Cannot write register of %u bit width", - bit_width); - ret_val = -EFAULT; - break; } - return ret_val; } static int pcc_chan_reg_read(struct pcc_chan_reg *reg, u64 *val) @@ -172,7 +156,7 @@ static int pcc_chan_reg_read(struct pcc_chan_reg *reg, u64 *val) } if (reg->vaddr) - ret = read_register(reg->vaddr, val, reg->gas->bit_width); + read_register(reg->vaddr, val, reg->gas->bit_width); else ret = acpi_read(val, reg->gas); @@ -187,7 +171,7 @@ static int pcc_chan_reg_write(struct pcc_chan_reg *reg, u64 val) return 0; if (reg->vaddr) - ret = write_register(reg->vaddr, val, reg->gas->bit_width); + write_register(reg->vaddr, val, reg->gas->bit_width); else ret = acpi_write(val, reg->gas); From patchwork Thu Jul 8 18:08:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471281 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp526090jao; Thu, 8 Jul 2021 11:09:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxW5a+JCHbR5rxy7dHVP5tkJbCRBkMBEVyVGyIWqaOUauEPUJRaCF3u2MT9T/3DWUs1cQqB X-Received: by 2002:a05:6402:35cd:: with SMTP id z13mr39772297edc.2.1625767756602; Thu, 08 Jul 2021 11:09:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767756; cv=none; d=google.com; s=arc-20160816; b=sMXTal1UdZFrOoWNefqXmLt09WuSOMrX6YCHzJK43fPDaoqPWvSrf0Vvm01g+Y1lCE GHyLVqRIjLnQMon4gdGD1Hiybo6jhvap8JRVJjuf2m27G+s9sdakW51N5cafFvU1CZlL X2RbK2Hsm+v0t+/TXyBCBJYi0ccu2++8an7L76IqdfzS8P5Wb9P8D7hf9E2l1NRhitrR qdRYUNCnH7JmvPNA5lSPbnuKkMIgIGLg8NwumwT9J7l7FIUgWDsshHot7mleCusBOhmi bktHsYFkzBGGN9Ueru7uH4A4pWJKNDwpNJUsibWRY0e2x7D4CiVS6D7WYjPkDHCm++6b hPow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=5W0QxvYtp9T4J23JAbUxWp5F02/X0/Er+nsDauUmqlc=; b=XrRHJoLcKQB2ZHpA+r3jsdSNsUBlx2ZV950meSLHFFLcUBqXmhPG5yjMjjUvdY8hDl mxsp+UXoMSUSQzc0AGZfVgvf1wN8fOv8VEgumjtZ0iQMkPdut5i9sIaNUZbGqFFCvNqC btYBcCVsJfCTcTMDYOi9vG3R130d/3LImS/4LQJxyf9h54CJVXuXRTnL2AQEDTMDQxiL Ugysztn+zlcJ4KsaH+3anAd/QUhGY71DZ+d0VdiPACN45Qwxoe+xQDS0oRG5FFpRQF1q WRHfF/JXQKWKtndds0esNjhT/nENgX+pkpe3xSzL8Emq4pfE5FhhqCvI1SfAo7/XqhMX bgaw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y7si3810568ejc.395.2021.07.08.11.09.16; Thu, 08 Jul 2021 11:09:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230333AbhGHSL4 (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:56 -0400 Received: from foss.arm.com ([217.140.110.172]:36034 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230273AbhGHSLz (ORCPT ); Thu, 8 Jul 2021 14:11:55 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id AFD631424; Thu, 8 Jul 2021 11:09:12 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id C9D623F66F; Thu, 8 Jul 2021 11:09:11 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 12/13] mailbox: pcc: Add support for PCCT extended PCC subspaces(type 3/4) Date: Thu, 8 Jul 2021 19:08:50 +0100 Message-Id: <20210708180851.2311192-13-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org With all the plumbing in place to avoid accessing PCCT type and other fields directly from the PCCT table all the time, let us now add the support for extended PCC subspaces(type 3 and 4). Signed-off-by: Sudeep Holla --- drivers/mailbox/pcc.c | 119 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 102 insertions(+), 17 deletions(-) -- 2.25.1 diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index 99ad3429f174..22d1c7691887 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -89,12 +89,18 @@ struct pcc_chan_reg { * @db: PCC register bundle for the doorbell register * @plat_irq_ack: PCC register bundle for the platform interrupt acknowledge * register + * @cmd_complete: PCC register bundle for the command complete check register + * @cmd_update: PCC register bundle for the command complete update register + * @error: PCC register bundle for the error status register * @db_irq: doorbell interrupt */ struct pcc_chan_info { struct pcc_mbox_chan chan; struct pcc_chan_reg db; struct pcc_chan_reg plat_irq_ack; + struct pcc_chan_reg cmd_complete; + struct pcc_chan_reg cmd_update; + struct pcc_chan_reg error; int db_irq; }; @@ -228,9 +234,29 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p) { struct pcc_chan_info *pchan; struct mbox_chan *chan = p; + u64 val; + int ret; pchan = chan->con_priv; + ret = pcc_chan_reg_read(&pchan->cmd_complete, &val); + if (ret) + return IRQ_NONE; + + val &= pchan->cmd_complete.status_mask; + if (!val) + return IRQ_NONE; + + ret = pcc_chan_reg_read(&pchan->error, &val); + if (ret) + return IRQ_NONE; + val &= pchan->error.status_mask; + if (val) { + val &= ~pchan->error.status_mask; + pcc_chan_reg_write(&pchan->error, val); + return IRQ_NONE; + } + mbox_chan_received_data(chan, NULL); if (pcc_chan_reg_read_modify_write(&pchan->plat_irq_ack)) @@ -335,8 +361,13 @@ EXPORT_SYMBOL_GPL(pcc_mbox_free_channel); */ static int pcc_send_data(struct mbox_chan *chan, void *data) { + int ret; struct pcc_chan_info *pchan = chan->con_priv; + ret = pcc_chan_reg_read_modify_write(&pchan->cmd_update); + if (ret) + return ret; + return pcc_chan_reg_read_modify_write(&pchan->db); } @@ -429,6 +460,16 @@ static int pcc_parse_subspace_irq(struct pcc_chan_info *pchan, pcct2_ss->ack_preserve_mask, pcct2_ss->ack_write_mask, 0, "PLAT IRQ ACK"); + + } else if (pcct_ss->header.type == ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE || + pcct_ss->header.type == ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE) { + struct acpi_pcct_ext_pcc_master *pcct_ext = (void *)pcct_ss; + + ret = pcc_chan_reg_init(&pchan->plat_irq_ack, + &pcct_ext->platform_ack_register, + pcct_ext->ack_preserve_mask, + pcct_ext->ack_set_mask, 0, + "PLAT IRQ ACK"); } return ret; @@ -446,14 +487,48 @@ static int pcc_parse_subspace_db_reg(struct pcc_chan_info *pchan, { int ret = 0; - struct acpi_pcct_subspace *pcct_ss; - - pcct_ss = (struct acpi_pcct_subspace *)pcct_entry; - - ret = pcc_chan_reg_init(&pchan->db, - &pcct_ss->doorbell_register, - pcct_ss->preserve_mask, - pcct_ss->write_mask, 0, "Doorbell"); + if (pcct_entry->type <= ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2) { + struct acpi_pcct_subspace *pcct_ss; + + pcct_ss = (struct acpi_pcct_subspace *)pcct_entry; + + ret = pcc_chan_reg_init(&pchan->db, + &pcct_ss->doorbell_register, + pcct_ss->preserve_mask, + pcct_ss->write_mask, 0, "Doorbell"); + + } else { + struct acpi_pcct_ext_pcc_master *pcct_ext; + + pcct_ext = (struct acpi_pcct_ext_pcc_master *)pcct_entry; + + ret = pcc_chan_reg_init(&pchan->db, + &pcct_ext->doorbell_register, + pcct_ext->preserve_mask, + pcct_ext->write_mask, 0, "Doorbell"); + if (ret) + return ret; + + ret = pcc_chan_reg_init(&pchan->cmd_complete, + &pcct_ext->cmd_complete_register, + 0, 0, pcct_ext->cmd_complete_mask, + "Command Complete Check"); + if (ret) + return ret; + + ret = pcc_chan_reg_init(&pchan->cmd_update, + &pcct_ext->cmd_update_register, + pcct_ext->cmd_update_preserve_mask, + pcct_ext->cmd_update_set_mask, 0, + "Command Complete Update"); + if (ret) + return ret; + + ret = pcc_chan_reg_init(&pchan->error, + &pcct_ext->error_status_register, + 0, 0, pcct_ext->error_status_mask, + "Error Status"); + } return ret; } @@ -467,15 +542,25 @@ static int pcc_parse_subspace_db_reg(struct pcc_chan_info *pchan, static void pcc_parse_subspace_shmem(struct pcc_chan_info *pchan, struct acpi_subtable_header *pcct_entry) { - struct acpi_pcct_subspace *pcct_ss; - - pcct_ss = (struct acpi_pcct_subspace *)pcct_entry; - - pchan->chan.shmem_base_addr = pcct_ss->base_address; - pchan->chan.shmem_size = pcct_ss->length; - pchan->chan.latency = pcct_ss->latency; - pchan->chan.max_access_rate = pcct_ss->max_access_rate; - pchan->chan.min_turnaround_time = pcct_ss->min_turnaround_time; + if (pcct_entry->type <= ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2) { + struct acpi_pcct_subspace *pcct_ss = + (struct acpi_pcct_subspace *)pcct_entry; + + pchan->chan.shmem_base_addr = pcct_ss->base_address; + pchan->chan.shmem_size = pcct_ss->length; + pchan->chan.latency = pcct_ss->latency; + pchan->chan.max_access_rate = pcct_ss->max_access_rate; + pchan->chan.min_turnaround_time = pcct_ss->min_turnaround_time; + } else { + struct acpi_pcct_ext_pcc_master *pcct_ext = + (struct acpi_pcct_ext_pcc_master *)pcct_entry; + + pchan->chan.shmem_base_addr = pcct_ext->base_address; + pchan->chan.shmem_size = pcct_ext->length; + pchan->chan.latency = pcct_ext->latency; + pchan->chan.max_access_rate = pcct_ext->max_access_rate; + pchan->chan.min_turnaround_time = pcct_ext->min_turnaround_time; + } } /** From patchwork Thu Jul 8 18:08:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 471282 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp526122jao; Thu, 8 Jul 2021 11:09:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxIlQ+GsSG/TjqUC+J84EB7J5mZg5I0pe7gXmkMdfbwVxfNg6U6kaqzy2QjznmiXm3Kw5J1 X-Received: by 2002:aa7:c801:: with SMTP id a1mr12423959edt.293.1625767758275; Thu, 08 Jul 2021 11:09:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625767758; cv=none; d=google.com; s=arc-20160816; b=biMyvYZyk66MBUScdVOgERxwHQgv2SeyFvzZpAW4SB3e+8KmMGj/Y9d7uijsIjvf/g PeCmOl/0Gf3sfZ2HXj10TDOfheIKaTbr2dbZbYbq154kvLsgTH2749Kbw9SFKB6LAVIM zaDV12jV+ct102f7o0dqJuvjGu5VU9jrnhYPebLdQ6M/b+Z1Ja7n4cWtEr0PVgRSf5/y OkRpQTdnvbLuUrVV90ZlRcKV9wNgX/ti8ptxyJGYGjIzEMmV8xKrURQxKN79dNAD93mc tA68tjbcg6VGBkEm15NoJLGj3jX5d/hlNABemof8FuiPCSVHFNYfT/uYZKtKbvMexdaj VW4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=6Q36oOfKfPzChKJJgYmATKIsH+xp80u2FukIP2zgegs=; b=evvLrTDR6rx187HGXVM7QHi+j1tVQjNoOqGgAyq0ySbAt/Ei0+Y2CI+V9xgB16XpVx /hNMs8/UPjk9hM9UVYr0zxvm6knXuUwSAXscCOtCoe1rbw3Bf0aqVQEHfca2D8Q/lwA9 YsRtVEU9ub7/gX7/shnFU8yRI0sviUml6u1xuYt9WRLDf8tO1eNp4DtKA5nPbOxG7EnR 4/FMOcPImq4FB+jVLdmMKW2hfW4ixI1x2Y2VmMyUKk15PZypmVPeR5togDCSvPPzSRtT 7vjfoMaj7WqvX5nV79v9A1U07VsoIZtTiP3H/gdEyVv3t9Nh+m2lc7Xu1tDR7qQlTg/M 9Xhg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y7si3810568ejc.395.2021.07.08.11.09.18; Thu, 08 Jul 2021 11:09:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-acpi-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230396AbhGHSL7 (ORCPT + 4 others); Thu, 8 Jul 2021 14:11:59 -0400 Received: from foss.arm.com ([217.140.110.172]:36026 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230365AbhGHSL4 (ORCPT ); Thu, 8 Jul 2021 14:11:56 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C84471477; Thu, 8 Jul 2021 11:09:13 -0700 (PDT) Received: from usa.arm.com (e103737-lin.cambridge.arm.com [10.1.197.49]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id E26693F66F; Thu, 8 Jul 2021 11:09:12 -0700 (PDT) From: Sudeep Holla To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sudeep Holla , Cristian Marussi , "Rafael J . Wysocki" , Jassi Brar Subject: [PATCH 13/13] mailbox: pcc: Move bulk of PCCT parsing into pcc_mbox_probe Date: Thu, 8 Jul 2021 19:08:51 +0100 Message-Id: <20210708180851.2311192-14-sudeep.holla@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210708180851.2311192-1-sudeep.holla@arm.com> References: <20210708180851.2311192-1-sudeep.holla@arm.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Move the PCCT subspace parsing and allocation into pcc_mbox_probe so that we can get rid of global PCC channel and mailbox controller data. It also helps to make use of devm_* APIs for all the allocations. Signed-off-by: Sudeep Holla --- drivers/mailbox/pcc.c | 119 ++++++++++++++++++++++-------------------- 1 file changed, 63 insertions(+), 56 deletions(-) -- 2.25.1 diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c index 22d1c7691887..c915b915e039 100644 --- a/drivers/mailbox/pcc.c +++ b/drivers/mailbox/pcc.c @@ -63,8 +63,6 @@ #define MBOX_IRQ_NAME "pcc-mbox" -static struct mbox_chan *pcc_mbox_channels; - /** * struct pcc_chan_reg - PCC register bundle * @@ -106,7 +104,7 @@ struct pcc_chan_info { #define to_pcc_chan_info(c) container_of(c, struct pcc_chan_info, chan) static struct pcc_chan_info *chan_info; -static struct mbox_controller pcc_mbox_ctrl = {}; +static int pcc_chan_count; /* * PCC can be used with perf critical drivers such as CPPC @@ -281,8 +279,8 @@ struct pcc_mbox_chan * pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id) { struct pcc_chan_info *pchan = chan_info + subspace_id; - struct device *dev = pcc_mbox_ctrl.dev; struct mbox_chan *chan = pchan->chan.mchan; + struct device *dev = chan->mbox->dev; unsigned long flags; if (IS_ERR(chan) || chan->cl) { @@ -570,16 +568,12 @@ static void pcc_parse_subspace_shmem(struct pcc_chan_info *pchan, */ static int __init acpi_pcc_probe(void) { + int count, i, rc = 0; + acpi_status status; struct acpi_table_header *pcct_tbl; - struct acpi_subtable_header *pcct_entry; - struct acpi_table_pcct *acpi_pcct_tbl; struct acpi_subtable_proc proc[ACPI_PCCT_TYPE_RESERVED]; - int count, i, rc; - acpi_status status = AE_OK; - /* Search for PCCT */ status = acpi_get_table(ACPI_SIG_PCCT, 0, &pcct_tbl); - if (ACPI_FAILURE(status) || !pcct_tbl) return -ENODEV; @@ -601,21 +595,60 @@ static int __init acpi_pcc_probe(void) pr_warn("Invalid PCCT: %d PCC subspaces\n", count); rc = -EINVAL; - goto err_put_pcct; + } else { + pcc_chan_count = count; } - pcc_mbox_channels = kcalloc(count, sizeof(struct mbox_chan), - GFP_KERNEL); + acpi_put_table(pcct_tbl); + + return rc; +} + +/** + * pcc_mbox_probe - Called when we find a match for the + * PCCT platform device. This is purely used to represent + * the PCCT as a virtual device for registering with the + * generic Mailbox framework. + * + * @pdev: Pointer to platform device returned when a match + * is found. + * + * Return: 0 for Success, else errno. + */ +static int pcc_mbox_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct mbox_controller *pcc_mbox_ctrl; + struct mbox_chan *pcc_mbox_channels; + struct acpi_table_header *pcct_tbl; + struct acpi_subtable_header *pcct_entry; + struct acpi_table_pcct *acpi_pcct_tbl; + acpi_status status = AE_OK; + int i, rc, count = pcc_chan_count; + + /* Search for PCCT */ + status = acpi_get_table(ACPI_SIG_PCCT, 0, &pcct_tbl); + + if (ACPI_FAILURE(status) || !pcct_tbl) + return -ENODEV; + + pcc_mbox_channels = devm_kcalloc(dev, count, sizeof(*pcc_mbox_channels), + GFP_KERNEL); if (!pcc_mbox_channels) { - pr_err("Could not allocate space for PCC mbox channels\n"); rc = -ENOMEM; - goto err_put_pcct; + goto err; } - chan_info = kcalloc(count, sizeof(*chan_info), GFP_KERNEL); + chan_info = devm_kcalloc(dev, count, sizeof(*chan_info), GFP_KERNEL); if (!chan_info) { rc = -ENOMEM; - goto err_free_mbox; + goto err; + } + + pcc_mbox_ctrl = devm_kmalloc(dev, sizeof(*pcc_mbox_ctrl), GFP_KERNEL); + if (!pcc_mbox_ctrl) { + rc = -ENOMEM; + goto err; } /* Point to the first PCC subspace entry */ @@ -624,7 +657,7 @@ static int __init acpi_pcc_probe(void) acpi_pcct_tbl = (struct acpi_table_pcct *) pcct_tbl; if (acpi_pcct_tbl->flags & ACPI_PCCT_DOORBELL) - pcc_mbox_ctrl.txdone_irq = true; + pcc_mbox_ctrl->txdone_irq = true; for (i = 0; i < count; i++) { struct pcc_chan_info *pchan = chan_info + i; @@ -632,7 +665,7 @@ static int __init acpi_pcc_probe(void) pcc_mbox_channels[i].con_priv = pchan; pchan->chan.mchan = &pcc_mbox_channels[i]; - if (pcc_mbox_ctrl.txdone_irq) { + if (pcc_mbox_ctrl->txdone_irq) { rc = pcc_parse_subspace_irq(pchan, pcct_entry); if (rc < 0) goto err; @@ -647,51 +680,25 @@ static int __init acpi_pcc_probe(void) ((unsigned long) pcct_entry + pcct_entry->length); } - pcc_mbox_ctrl.num_chans = count; + pcc_mbox_ctrl->num_chans = count; - pr_info("Detected %d PCC Subspaces\n", pcc_mbox_ctrl.num_chans); + pr_info("Detected %d PCC Subspaces\n", pcc_mbox_ctrl->num_chans); - return 0; + pcc_mbox_ctrl->chans = pcc_mbox_channels; + pcc_mbox_ctrl->ops = &pcc_chan_ops; + pcc_mbox_ctrl->dev = dev; + pr_info("Registering PCC driver as Mailbox controller\n"); + rc = mbox_controller_register(pcc_mbox_ctrl); + if (rc) + pr_err("Err registering PCC as Mailbox controller: %d\n", rc); + else + return 0; err: - kfree(chan_info); -err_free_mbox: - kfree(pcc_mbox_channels); -err_put_pcct: acpi_put_table(pcct_tbl); return rc; } -/** - * pcc_mbox_probe - Called when we find a match for the - * PCCT platform device. This is purely used to represent - * the PCCT as a virtual device for registering with the - * generic Mailbox framework. - * - * @pdev: Pointer to platform device returned when a match - * is found. - * - * Return: 0 for Success, else errno. - */ -static int pcc_mbox_probe(struct platform_device *pdev) -{ - int ret = 0; - - pcc_mbox_ctrl.chans = pcc_mbox_channels; - pcc_mbox_ctrl.ops = &pcc_chan_ops; - pcc_mbox_ctrl.dev = &pdev->dev; - - pr_info("Registering PCC driver as Mailbox controller\n"); - ret = mbox_controller_register(&pcc_mbox_ctrl); - - if (ret) { - pr_err("Err registering PCC as Mailbox controller: %d\n", ret); - ret = -ENODEV; - } - - return ret; -} - static struct platform_driver pcc_mbox_driver = { .probe = pcc_mbox_probe, .driver = {