From patchwork Thu Dec 29 18:22:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cristian Marussi X-Patchwork-Id: 37479 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp2533915wrt; Thu, 29 Dec 2022 10:26:36 -0800 (PST) X-Google-Smtp-Source: AMrXdXvPtFQKgBl1s17QB0eDZy5XsbbMn/GtaFxIHgmzwmCiHpsS1km+vhNtTzCYMRkfiquctL+4 X-Received: by 2002:a05:6402:3224:b0:47d:810a:f410 with SMTP id g36-20020a056402322400b0047d810af410mr35827567eda.24.1672338396641; Thu, 29 Dec 2022 10:26:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672338396; cv=none; d=google.com; s=arc-20160816; b=L15Yq0RpUlb4VNulmQgCmHOmYzgYKWtr2YllzjBXGQ9sy40jX4A+d9xPlwLLMP+UqK 5eMC9TcTPU/jZjsyGR3XmQdACqnXxmyFlibdffEkfpjB+zfXopO/6gb+k18sOKMbxxgc faSzYmUV3ChLVyKlv+LHg6Pz3fhBdshzvXQ4Nqw59+BbUtIOZvqHRhCshV0LX133dOdp THH3MXUYBg8pNhpwGpk7XVqegv4RZUFJ6FB58TVEtX2NSdzTFKVNumseWXR3EpoUsjOJ H+QOcdpVG5RSz9bK5fedPnpAJYGJweCGsvbgd7zxp7yFQwuXQmCf2ZvQHKDnJSThiNzc xoiQ== 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=/1fV0OqJo2vCG9PRr4CWik2uPYC0bMEtypkgYX5R+S0=; b=qYj+NhXQN5+FjHgSRWElgyIuMRpsNurdGHbLeWfPEXV805xgCVZb4PrvNENAHy37uM jwOmMFVa7W4QNzXeiZ4GfCYArRaoCGTwWXcf888cbRRXKzbc7UztpQRJanB3Z55z0MJ9 5QQ6WLMPdO4EpduWp/BEwZamjAtrcox4tC3kIvNlI6Gozikb3aaE+bhI7Tn1v3m1hcII FBdI+AcoxVcSWPT+R/HSrEnz3c1w6hSY1mt9LqZMdFRDPA+uvXq/ie3TIv1hHDZKOGdt ZimxKRkuTzQLwweH8aXy667reOg4CMPoMUYOJTMKnBvAwmQdN69pLQ1kAiSsw7GU8eES DXUw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z2-20020a05640235c200b0048544ebce3esi10575687edc.462.2022.12.29.10.26.13; Thu, 29 Dec 2022 10:26:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-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 S233818AbiL2SY7 (ORCPT + 99 others); Thu, 29 Dec 2022 13:24:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44900 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233867AbiL2SY1 (ORCPT ); Thu, 29 Dec 2022 13:24:27 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id F168713F7E for ; Thu, 29 Dec 2022 10:24:25 -0800 (PST) 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 2F28E165C; Thu, 29 Dec 2022 10:25:07 -0800 (PST) Received: from e120937-lin.. (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id BE5A23F71A; Thu, 29 Dec 2022 10:24:23 -0800 (PST) From: Cristian Marussi To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: sudeep.holla@arm.com, james.quinlan@broadcom.com, Jonathan.Cameron@Huawei.com, f.fainelli@gmail.com, etienne.carriere@linaro.org, vincent.guittot@linaro.org, souvik.chakravarty@arm.com, wleavitt@marvell.com, peter.hilber@opensynergy.com, nicola.mazzucato@arm.com, tarek.el-sherbiny@arm.com, quic_kshivnan@quicinc.com, cristian.marussi@arm.com Subject: [PATCH v6 16/17] firmware: arm_scmi: Add Raw mode coexistence support Date: Thu, 29 Dec 2022 18:22:52 +0000 Message-Id: <20221229182253.948175-17-cristian.marussi@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221229182253.948175-1-cristian.marussi@arm.com> References: <20221229182253.948175-1-cristian.marussi@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1753573906255861252?= X-GMAIL-MSGID: =?utf-8?q?1753573906255861252?= When Raw support is enabled and configured in coexistence mode the normal SCMI drivers are allowed to register with the SCMI core and operate as usual alongside the Raw operations. SCMI Normal and Raw messages will be kept segregated from each other, but only at the transaction level: any further possible interference at the protocol layer will have instead to be handled by the user to attain reliable results while using Raw transactions. Signed-off-by: Cristian Marussi --- v5 --> v6 - fix error path for RAW Coex on scmi_probe --- drivers/firmware/arm_scmi/Kconfig | 10 ++++++++++ drivers/firmware/arm_scmi/bus.c | 3 ++- drivers/firmware/arm_scmi/driver.c | 11 ++++++++++- drivers/firmware/arm_scmi/raw_mode.c | 5 ++++- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/drivers/firmware/arm_scmi/Kconfig b/drivers/firmware/arm_scmi/Kconfig index 3b4f9e92b1e3..ea0f5083ac47 100644 --- a/drivers/firmware/arm_scmi/Kconfig +++ b/drivers/firmware/arm_scmi/Kconfig @@ -45,6 +45,16 @@ config ARM_SCMI_RAW_MODE_SUPPORT order to avoid unexpected interactions with the SCMI Raw message flow. If unsure say N. +config ARM_SCMI_RAW_MODE_SUPPORT_COEX + bool "Allow SCMI Raw mode coexistence with normal SCMI stack" + depends on ARM_SCMI_RAW_MODE_SUPPORT + help + Allow SCMI Raw transmission mode to coexist with normal SCMI stack. + + This will allow regular SCMI drivers to register with the core and + operate normally, thing which could make an SCMI test suite using the + SCMI Raw mode support unreliable. If unsure, say N. + config ARM_SCMI_HAVE_TRANSPORT bool help diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c index 8601d75f5b9b..68cc4b4290c1 100644 --- a/drivers/firmware/arm_scmi/bus.c +++ b/drivers/firmware/arm_scmi/bus.c @@ -59,7 +59,8 @@ static int scmi_protocol_device_request(const struct scmi_device_id *id_table) pr_debug("Requesting SCMI device (%s) for protocol %x\n", id_table->name, id_table->protocol_id); - if (IS_ENABLED(CONFIG_ARM_SCMI_RAW_MODE_SUPPORT)) { + if (IS_ENABLED(CONFIG_ARM_SCMI_RAW_MODE_SUPPORT) && + !IS_ENABLED(CONFIG_ARM_SCMI_RAW_MODE_SUPPORT_COEX)) { pr_warn("SCMI Raw mode active. Rejecting '%s'/0x%02X\n", id_table->name, id_table->protocol_id); return -EINVAL; diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index 2a4f6024e090..da60f218aed9 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -2708,10 +2708,19 @@ static int scmi_probe(struct platform_device *pdev) dev_err(dev, "Failed to initialize SCMI RAW Mode !\n"); ret = PTR_ERR(info->raw); + } + + if (!IS_ENABLED(CONFIG_ARM_SCMI_RAW_MODE_SUPPORT_COEX)) { + if (!ret) + return ret; + /* + * Bail out if we failed to init raw mode and + * RAW_MODE_SUPPORT_COEX was not configured. + */ goto clear_dev_req_notifier; } - return 0; + dev_info(dev, "SCMI RAW Mode COEX enabled !\n"); } } diff --git a/drivers/firmware/arm_scmi/raw_mode.c b/drivers/firmware/arm_scmi/raw_mode.c index a9a8b250d070..b2dff852e4b4 100644 --- a/drivers/firmware/arm_scmi/raw_mode.c +++ b/drivers/firmware/arm_scmi/raw_mode.c @@ -26,7 +26,10 @@ * In order to avoid possible interferences between the SCMI Raw transactions * originated from a test-suite and the normal operations of the SCMI drivers, * when Raw mode is enabled, by default, all the regular SCMI drivers are - * inhibited. + * inhibited, unless CONFIG_ARM_SCMI_RAW_MODE_SUPPORT_COEX is enabled: in this + * latter case the regular SCMI stack drivers will be loaded as usual and it is + * up to the user of this interface to take care of manually inhibiting the + * regular SCMI drivers in order to avoid interferences during the test runs. * * The exposed API is as follows. *