Re: [PATCH v4 3/3] scsi: ufs: rpmb: Drop the unregistered ufs_rpmb bus
From: Bean Huo
Date: Mon Sep 14 2026 - 06:34:27 EST
On Sun, 2026-09-13 at 11:36 +0800, Stanley Jhu wrote:
> ufs_rpmb_probe() assigns ufs_rpmb_bus_type to dev.bus, but that bus is
> never passed to bus_register(). bus_add_device() rejects devices on an
> unregistered bus, so device_register() has always failed:
"has always failed" is not correct, bus_add_device() only started rejecting
devices on an unregistered bus after this commit:
36f35b8df697 ("driver core: reject devices with unregistered buses").
Before that, device_register() succeeded and the device was just not added to
the bus, so UFS RPMB did register until that commit 36f35b8df697.
I think it is better to mention commit 36f35b8df697.
>
> bus_add_device: cannot add device 'ufs_rpmb0' to unregistered bus
> 'ufs_rpmb'
> ufshcd 0000:00:02.0: Failed to register UFS RPMB device 0
>
> ufs_rpmb_probe() unwinds on the first failure, so no RPMB region has
> ever been registered and /sys/bus/ufs_rpmb/devices/ has never been
> populated.
>
> ufs_rpmb_bus_type declares no .match and no .probe, and no driver binds
> to it. RPMB devices are exposed to consumers through /sys/class/rpmb/,
> which rpmb_dev_register() already sets up. Drop the bus rather than
> register it: device_register() works with dev.bus left NULL given a
> parent and a release callback, both of which ufs_rpmb_probe() sets.
>
> With the bus gone, on a device advertising four RPMB regions:
>
> ufshcd 0000:00:02.0: UFS RPMB region 0 registered (capacity=32)
> ufshcd 0000:00:02.0: UFS RPMB region 1 registered (capacity=32)
> ufshcd 0000:00:02.0: UFS RPMB region 2 registered (capacity=32)
> ufshcd 0000:00:02.0: UFS RPMB region 3 registered (capacity=32)
>
> /sys/class/rpmb then holds rpmb0 to rpmb3, and unbinding the host
> removes them.
>
> Fixes: b06b8c421485 ("scsi: ufs: core: Add OP-TEE based RPMB driver for UFS
> devices")
> Signed-off-by: Stanley Jhu <stanleyjhu@xxxxxxxxxx>
> ---
> drivers/ufs/core/ufs-rpmb.c | 5 -----
> 1 file changed, 5 deletions(-)
>
> diff --git a/drivers/ufs/core/ufs-rpmb.c b/drivers/ufs/core/ufs-rpmb.c
> index 373b60aba916..684fb37705c7 100644
> --- a/drivers/ufs/core/ufs-rpmb.c
> +++ b/drivers/ufs/core/ufs-rpmb.c
> @@ -28,10 +28,6 @@
> #define UFS_RPMB_SEC_PROTOCOL 0xEC /* JEDEC UFS application */
> #define UFS_RPMB_SEC_PROTOCOL_ID 0x01 /* JEDEC UFS RPMB protocol ID,
> CDB byte3 */
>
> -static const struct bus_type ufs_rpmb_bus_type = {
> - .name = "ufs_rpmb",
> -};
> -
> /* UFS RPMB device structure */
> struct ufs_rpmb_dev {
> u8 region_id;
> @@ -208,7 +204,6 @@ int ufs_rpmb_probe(struct ufs_hba *hba)
> ufs_rpmb->sdev = sdev;
> ufs_rpmb->region_id = region;
> ufs_rpmb->dev.parent = &sdev->sdev_gendev;
> - ufs_rpmb->dev.bus = &ufs_rpmb_bus_type;
> ufs_rpmb->dev.release = ufs_rpmb_device_release;
> dev_set_name(&ufs_rpmb->dev, "ufs_rpmb%d", region);
>
Reviewed-by: Bean Huo <beanhuo@xxxxxxxxxx>
Kind regards,
Bean