Received: by 2002:a05:7412:b995:b0:f9:9502:5bb8 with SMTP id it21csp212081rdb; Thu, 21 Dec 2023 07:12:34 -0800 (PST) X-Google-Smtp-Source: AGHT+IF2LMJYWR4VpO9ZvJp8ktcUpcYvKjdcqYKJg7stb6qqIEq93m5sLmgEn5o8LKLmIXLfeMFf X-Received: by 2002:a05:6808:2dcc:b0:3ba:144b:ae20 with SMTP id gn12-20020a0568082dcc00b003ba144bae20mr16014753oib.118.1703171554628; Thu, 21 Dec 2023 07:12:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703171554; cv=none; d=google.com; s=arc-20160816; b=sks9FkvUeVjkN5ScgCq6wNbDj16CiIjGGi2vugOkSUKMUXC3y4cduUidAG3FkMSryC Lrr5Oeb6m9d8wYzUzIhSUf4t97Bct5j/M/OP2GGc0ZmArruBtRqpbXJ+aA+0jWteNAe2 /y6PZjnXZgrd99uWAt+JmhUWwaJ1yc2eZiS+yTF4kSnklBGndQXeID+hgiZipIexkyRy 2higL4lLdsU2Mmoi7/dbIZOCkAI5h3xYkoixsf7Xg3zNzesvfBBKAwXCvoZ+SH1BrzZr 8NTTaTnH8rt+mGZPNqw1fskV5u8XmMbS3koX2GRnjx6TXC+hslfTSFMksujFbwOOCsj9 3tYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from; bh=zAVrC+KQlWjs/0ebKn+ZV1v/8viAlelkXKxPuY5HUls=; fh=WtL5fQT7ZUc/CxFY5ivX7o+R0egHbl7+G/zS94M/DC4=; b=oFykHfmymbV+NCbyjR2lOXxVrcUhy5iGsWgl6vzOR0nvpJ9TdUvtq8C9PLbcpl4syu WWEC415DdkIfGVAmhX1rXnV3BoTrihgWLCIujJ+wG4Mj8tOj3aEwV+wKXxws2jChMAkU 1wiiPZkIjkIbPLidlClw8g0hvpfUpcc/UbgvxgXosY3ZRs7CHHbuAeo2W7chC2zcVRNQ 5yy8/rXe2pquqGMKaJmwvoFoqHhz2VVQkFlefCEAXvEAFvFnodzod2jasv7bN1WWNsc8 tWwvKv4/v1lScX+5fWZISDGqYUOlInDkcs415u1PeOMEhGOV5FyCCVBznQtTRQrPUZ2X QOug== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-8626-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-8626-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id bi15-20020a05610234ef00b00466922994e1si311596vsb.290.2023.12.21.07.12.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Dec 2023 07:12:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-8626-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-8626-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-8626-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 5705C1C23ACA for ; Thu, 21 Dec 2023 15:12:34 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 837AE4AF79; Thu, 21 Dec 2023 15:12:11 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 59E22405CA for ; Thu, 21 Dec 2023 15:12:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com 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 824FB2F4; Thu, 21 Dec 2023 07:12:53 -0800 (PST) Received: from pluto.. (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id DEEF93F64C; Thu, 21 Dec 2023 07:12:07 -0800 (PST) From: Cristian Marussi To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: sudeep.holla@arm.com, Cristian Marussi Subject: [PATCH] firmware: arm_scmi: Add multiple protocols registration support Date: Thu, 21 Dec 2023 15:11:29 +0000 Message-ID: <20231221151129.325749-1-cristian.marussi@arm.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Add the capability for one SCMI driver to register with the core SCMI stack to use multiple SCMI protocols: in such a case the SCMI driver probe function will end up being called once for each registered protocol which have been also found as implemented on the platform. This is especially useful in testing scenarios. Signed-off-by: Cristian Marussi --- drivers/firmware/arm_scmi/bus.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c index c15928b8c5cc..1f9735dbebec 100644 --- a/drivers/firmware/arm_scmi/bus.c +++ b/drivers/firmware/arm_scmi/bus.c @@ -141,6 +141,17 @@ static int scmi_protocol_device_request(const struct scmi_device_id *id_table) return ret; } +static int scmi_protocol_table_register(const struct scmi_device_id *id_table) +{ + int ret = 0; + const struct scmi_device_id *entry; + + for (entry = id_table; entry->name && ret == 0; entry++) + ret = scmi_protocol_device_request(entry); + + return ret; +} + /** * scmi_protocol_device_unrequest - Helper to unrequest a device * @@ -186,6 +197,15 @@ static void scmi_protocol_device_unrequest(const struct scmi_device_id *id_table mutex_unlock(&scmi_requested_devices_mtx); } +static void +scmi_protocol_table_unregister(const struct scmi_device_id *id_table) +{ + const struct scmi_device_id *entry; + + for (entry = id_table; entry->name; entry++) + scmi_protocol_device_unrequest(entry); +} + static const struct scmi_device_id * scmi_dev_match_id(struct scmi_device *scmi_dev, struct scmi_driver *scmi_drv) { @@ -279,7 +299,7 @@ int scmi_driver_register(struct scmi_driver *driver, struct module *owner, if (!driver->probe) return -EINVAL; - retval = scmi_protocol_device_request(driver->id_table); + retval = scmi_protocol_table_register(driver->id_table); if (retval) return retval; @@ -299,7 +319,7 @@ EXPORT_SYMBOL_GPL(scmi_driver_register); void scmi_driver_unregister(struct scmi_driver *driver) { driver_unregister(&driver->driver); - scmi_protocol_device_unrequest(driver->id_table); + scmi_protocol_table_unregister(driver->id_table); } EXPORT_SYMBOL_GPL(scmi_driver_unregister); -- 2.43.0