From nobody Thu Dec 18 05:05:06 2025 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 40AE333CEAF for ; Mon, 15 Dec 2025 14:17:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765808264; cv=none; b=diKQx9iXWI+OuFpReAbWJVZOqo/5FwpH9unCW/ZX0JchVUQaKFd+AMOQ+G5GTBH2X52rr/upyQPAm22OhUCJ5/+/T0gE1p4ooLbLqvZAuVQWZKGOG+HuLM3ghAk8g42KltM9KHbxMzSIcrEq8Nnu2G7W6C2pQ7E6qPoJ8eqmXPU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765808264; c=relaxed/simple; bh=qF1IcEKbJFmyVmb3aXHXWHWAtPeq4SU+toAkI6ZHppU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pPZoLZ1ut6XfD79X8BiCbkyJ3WK3/FERyNWB9rObMb7TtNWA9m20TLNqTN3e6W5MQeRDqwO+lG/aDaOLwyaOsmc4r2GYoyQSNjmEB3tE3hbXE/dbNA+m22CIvBKU2PEtsAjqiAY83uWycHNi3mAizIHZquGyVN8gZz+0ZHfDJSg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=yJpmB5oS; arc=none smtp.client-ip=209.85.218.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="yJpmB5oS" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-b7355f6ef12so645844966b.3 for ; Mon, 15 Dec 2025 06:17:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1765808258; x=1766413058; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pYbyn8/EnLRxLtN5kn4exRhzxKPrsMPkbxoYT9sJDCo=; b=yJpmB5oSSFz4K7gtDqWcl1O44InjUkhTvtTcDhHoI6zmb1fQoPUo169r5l2XOI4j1d hpOHlrjROnYuckruoWKYg7uKW8NJrK79Yg4MiMwynXTFFAP1rXuC51tFzhQ7AmQV9T0l AKT8eq2ea6Tl5mJFnc/vyTr77Lf9pxvgWSX7ysVnE0uTLFWArtEPsp0M2hOwG8BEsy9z PRDtcPD+Gps1X9i4n3kuFfR9x9KFFuQYgI0GS5TxKPyo4sSjMz0ofNI7eAXxTWgX09Kb WkAuJCRodIaaVmGn95O+mEFGAzX85onYdnoYjX8WKco//jlxNqD2yNJaRWOT+wv1HJWL 3Oow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765808258; x=1766413058; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=pYbyn8/EnLRxLtN5kn4exRhzxKPrsMPkbxoYT9sJDCo=; b=FEaht0I11azSRHZxfIbm4TD52sgIYNmmeGc6/L2ZrM93Ww9vzBQ4x8FbzEXewUhLOj lovKlsYZ5WcQ9QpXHmzqwx/zQV2fW6bk6FRZXnOb0WW6GD3XcktZWtSs6qJ8pSDL3Ky/ 7GGz4EIs4bxY9MO0eAQeoWGRqiYpkDfFCcHXyTr/bSPOW/08Tu3h2clWtuB8gGYVjYC4 jSM44lygWEKouCA0flIv2vkprtFEC36Dn3f+S14A43yWa6xFsjZ6ErGbBwueMHakwsra Ob2NJMdjVmteD+r70EmGjubmR6z5RF1xjc526PAgZarAyulHeDgKQgg6/WX8Wk7O+odm 9IGw== X-Forwarded-Encrypted: i=1; AJvYcCV44bajcT4Pn8W+GSRawMPzuNd9LNsIpIIkgPENtH182+x1PaKvOkJdFzITq8EXbS882SthHEGFhwkGMoo=@vger.kernel.org X-Gm-Message-State: AOJu0YwPSpyonRZD7nki+wh6MJ4yGMzO0/THC1LbL9g/xRdBkTIVqkI/ dl1NiHrSH/EC+uUP4hqWPqJ1HZ+8AMNaX1dvOn+hKh5ICgJ13xvDzXB8EoKT6Ve4fs8= X-Gm-Gg: AY/fxX7zfJQExVfhOwZNl+wBum8euBIUMypFuWRCoanKJiIt7DsW/GluYredJGbUfZC zIGJbd87q4ia6OMf2eyGPg4XaBGs8ZCZ3M9TJz1Q4+K7WxahPcBp5ufeRtbvK7Vt0ESxReee9MY rWtYkwWp1qSzQR4CROm0M/o5sv3h5nhSKIbrS9JZYAaTRwIKlNuzNFTD9UbXhQmEienqs9ntaA8 VqvKm0t+CBDJ27Uywi1RmX0l8mgxNhocf7b3TfLySJ6ObwJacLf8SB2DKP2pa9sCwuraUPJErPr R/GiVTGoy4NKjEQkJLVIx4cLk8ALmOF56wePsYDtnv3B+AxdMgtEQnh5FGwmT1q21ur9YVfsR49 eBDjaONIW8YsDm9mLmw2PdJ0XtoJLmzars0BIL7gHzYwLa4ROh2VVVM/SBjsgM/hNjysWnplCUP EToxQBpcUKaeabgIpDAH7+DpFvBq/C+BvrX+BzZoud+ND9Jf6JOPnPajNPhg== X-Google-Smtp-Source: AGHT+IH2YAK0HCE3AKMihYwZpmjmWE6HYGsq9gAMwxcv1jzlhc75cjnc7OqoPvVUExhp0Mdl2kklIQ== X-Received: by 2002:a17:907:7f27:b0:b79:c879:fe71 with SMTP id a640c23a62f3a-b7d23a47753mr1098582566b.19.1765808258026; Mon, 15 Dec 2025 06:17:38 -0800 (PST) Received: from localhost (ip-046-005-122-062.um12.pools.vodafone-ip.de. [46.5.122.62]) by smtp.gmail.com with UTF8SMTPSA id a640c23a62f3a-b7cfa29beabsm1433409166b.4.2025.12.15.06.17.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Dec 2025 06:17:37 -0800 (PST) From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= To: Jens Wiklander Cc: Sumit Garg , op-tee@lists.trustedfirmware.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 02/17] tee: Add probe, remove and shutdown bus callbacks to tee_client_driver Date: Mon, 15 Dec 2025 15:16:32 +0100 Message-ID: <667477a172a4296ee060508a5778be7b0d2ca375.1765791463.git.u.kleine-koenig@baylibre.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Developer-Signature: v=1; a=openpgp-sha256; l=4205; i=u.kleine-koenig@baylibre.com; h=from:subject:message-id; bh=qF1IcEKbJFmyVmb3aXHXWHWAtPeq4SU+toAkI6ZHppU=; b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBpQBhQbqdn/HuaqlN6kLv5W75bm0Ws8yfNZJCnV lmMCiioe2eJATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCaUAYUAAKCRCPgPtYfRL+ ThZ4B/0Z1HxbnrrtOrIAoOjKPDeR10PHx55cuFqJa8OlpcOghtKk5foX2Knev9V32xsuzOx1TdP wIT3KfWcT2pi1yhhSDI9W+qeGXYZALUNRgLE/L75wGZ3wD1tzUo70QkfHZI7u+D6yYNe35495FE WJvkfziyIEV7peL8U710+JK4KsEZUNZjg1JJJ/23maTVZ/yU1jaEYc1JlSuVbeQ4NXLh4nMdhPB 0S09YShtrY01kAvtF1Of4uNdeO3S4VuNoGy9QJQoq6mCzLk0wEH8P7H/Vb80OUj3HTICm6FNlUA rEmq2rxB7ct+dtHlCBA3sua5ap4LwbCrX+fS3GFs7LQy5qS1 X-Developer-Key: i=u.kleine-koenig@baylibre.com; a=openpgp; fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6 Content-Transfer-Encoding: quoted-printable Introduce a bus specific probe, remove and shutdown function. For now this only allows to get rid of a cast of the generic device to a tee_client device in the drivers and changes the remove prototype to return void---a non-zero return value is ignored anyhow. The objective is to get rid of users of struct device_driver callbacks .probe(), .remove() and .shutdown() to eventually remove these. Until all tee_client drivers are converted this results in a runtime warning about the drivers needing an update because there is a bus probe function and a driver probe function. Signed-off-by: Uwe Kleine-K=C3=B6nig Reviewed-by: Sumit Garg --- drivers/tee/tee_core.c | 68 +++++++++++++++++++++++++++++++++++++++++ include/linux/tee_drv.h | 3 ++ 2 files changed, 71 insertions(+) diff --git a/drivers/tee/tee_core.c b/drivers/tee/tee_core.c index 51379f7fc5d5..a015730664c7 100644 --- a/drivers/tee/tee_core.c +++ b/drivers/tee/tee_core.c @@ -1398,19 +1398,87 @@ static int tee_client_device_uevent(const struct de= vice *dev, return add_uevent_var(env, "MODALIAS=3Dtee:%pUb", dev_id); } =20 +static int tee_client_device_probe(struct device *dev) +{ + struct tee_client_device *tcdev =3D to_tee_client_device(dev); + struct tee_client_driver *drv =3D to_tee_client_driver(dev->driver); + + if (drv->probe) + return drv->probe(tcdev); + else + return 0; +} + +static void tee_client_device_remove(struct device *dev) +{ + struct tee_client_device *tcdev =3D to_tee_client_device(dev); + struct tee_client_driver *drv =3D to_tee_client_driver(dev->driver); + + if (drv->remove) + drv->remove(tcdev); +} + +static void tee_client_device_shutdown(struct device *dev) +{ + struct tee_client_device *tcdev =3D to_tee_client_device(dev); + struct tee_client_driver *drv =3D to_tee_client_driver(dev->driver); + + if (dev->driver && drv->shutdown) + drv->shutdown(tcdev); +} + const struct bus_type tee_bus_type =3D { .name =3D "tee", .match =3D tee_client_device_match, .uevent =3D tee_client_device_uevent, + .probe =3D tee_client_device_probe, + .remove =3D tee_client_device_remove, + .shutdown =3D tee_client_device_shutdown, }; EXPORT_SYMBOL_GPL(tee_bus_type); =20 +static int tee_client_device_probe_legacy(struct tee_client_device *tcdev) +{ + struct device *dev =3D &tcdev->dev; + struct device_driver *driver =3D dev->driver; + + return driver->probe(dev); +} + +static void tee_client_device_remove_legacy(struct tee_client_device *tcde= v) +{ + struct device *dev =3D &tcdev->dev; + struct device_driver *driver =3D dev->driver; + + driver->remove(dev); +} + +static void tee_client_device_shutdown_legacy(struct tee_client_device *tc= dev) +{ + struct device *dev =3D &tcdev->dev; + struct device_driver *driver =3D dev->driver; + + driver->shutdown(dev); +} + int __tee_client_driver_register(struct tee_client_driver *tee_driver, struct module *owner) { tee_driver->driver.owner =3D owner; tee_driver->driver.bus =3D &tee_bus_type; =20 + /* + * Drivers that have callbacks set for tee_driver->driver need updating + * to use the callbacks in tee_driver instead. driver_register() warns + * about that, so no need to warn here, too. + */ + if (!tee_driver->probe && tee_driver->driver.probe) + tee_driver->probe =3D tee_client_device_probe_legacy; + if (!tee_driver->remove && tee_driver->driver.remove) + tee_driver->remove =3D tee_client_device_remove_legacy; + if (!tee_driver->shutdown && tee_driver->driver.probe) + tee_driver->shutdown =3D tee_client_device_shutdown_legacy; + return driver_register(&tee_driver->driver); } EXPORT_SYMBOL_GPL(__tee_client_driver_register); diff --git a/include/linux/tee_drv.h b/include/linux/tee_drv.h index 850c03b2cdea..e561a26f537a 100644 --- a/include/linux/tee_drv.h +++ b/include/linux/tee_drv.h @@ -315,6 +315,9 @@ struct tee_client_device { * @driver: driver structure */ struct tee_client_driver { + int (*probe)(struct tee_client_device *); + void (*remove)(struct tee_client_device *); + void (*shutdown)(struct tee_client_device *); const struct tee_client_device_id *id_table; struct device_driver driver; }; --=20 2.47.3