]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
netdevsim: add fw_update_flash_chunk_time_ms debugfs knobs
authorJiri Pirko <jiri@nvidia.com>
Tue, 22 Jul 2025 09:19:45 +0000 (11:19 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 24 Jul 2025 00:08:56 +0000 (17:08 -0700)
Netdevsim emulates firmware update and it takes 5 seconds to complete.
For some use cases, this is too long and unnecessary. Allow user to
configure the time by exposing debugfs a knob to set chunk time.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Link: https://patch.msgid.link/20250722091945.79506-1-jiri@resnulli.us
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/netdevsim/dev.c
drivers/net/netdevsim/netdevsim.h
tools/testing/selftests/drivers/net/netdevsim/devlink.sh

index 01c7edb28d963c6d85fa8267e0dcf7a0f11525bb..2672d071b325efd71a659d600c9f9dda4346fe81 100644 (file)
@@ -314,6 +314,8 @@ static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev)
                            &nsim_dev->fw_update_status);
        debugfs_create_u32("fw_update_overwrite_mask", 0600, nsim_dev->ddir,
                            &nsim_dev->fw_update_overwrite_mask);
+       debugfs_create_u32("fw_update_flash_chunk_time_ms", 0600, nsim_dev->ddir,
+                          &nsim_dev->fw_update_flash_chunk_time_ms);
        debugfs_create_u32("max_macs", 0600, nsim_dev->ddir,
                           &nsim_dev->max_macs);
        debugfs_create_bool("test1", 0600, nsim_dev->ddir,
@@ -1015,9 +1017,9 @@ static int nsim_dev_info_get(struct devlink *devlink,
                                                    DEVLINK_INFO_VERSION_TYPE_COMPONENT);
 }
 
-#define NSIM_DEV_FLASH_SIZE 500000
+#define NSIM_DEV_FLASH_SIZE 50000
 #define NSIM_DEV_FLASH_CHUNK_SIZE 1000
-#define NSIM_DEV_FLASH_CHUNK_TIME_MS 10
+#define NSIM_DEV_FLASH_CHUNK_TIME_MS_DEFAULT 100
 
 static int nsim_dev_flash_update(struct devlink *devlink,
                                 struct devlink_flash_update_params *params,
@@ -1041,7 +1043,7 @@ static int nsim_dev_flash_update(struct devlink *devlink,
                                                           params->component,
                                                           i * NSIM_DEV_FLASH_CHUNK_SIZE,
                                                           NSIM_DEV_FLASH_SIZE);
-               msleep(NSIM_DEV_FLASH_CHUNK_TIME_MS);
+               msleep(nsim_dev->fw_update_flash_chunk_time_ms ?: 1);
        }
 
        if (nsim_dev->fw_update_status) {
@@ -1585,6 +1587,7 @@ int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev)
        INIT_LIST_HEAD(&nsim_dev->port_list);
        nsim_dev->fw_update_status = true;
        nsim_dev->fw_update_overwrite_mask = 0;
+       nsim_dev->fw_update_flash_chunk_time_ms = NSIM_DEV_FLASH_CHUNK_TIME_MS_DEFAULT;
        nsim_dev->max_macs = NSIM_DEV_MAX_MACS_DEFAULT;
        nsim_dev->test1 = NSIM_DEV_TEST1_DEFAULT;
        spin_lock_init(&nsim_dev->fa_cookie_lock);
index 8eeeb925607745064f65f5c7d17443638cf5d21e..bddd24c1389d7d7a267c1026a4591316f48397d0 100644 (file)
@@ -317,6 +317,7 @@ struct nsim_dev {
        struct list_head port_list;
        bool fw_update_status;
        u32 fw_update_overwrite_mask;
+       u32 fw_update_flash_chunk_time_ms;
        u32 max_macs;
        bool test1;
        bool dont_allow_reload;
index a102803ff74f1f334f6113335ecdd35668d81ed2..030762b203d76be8c230d19a19c47aa44bd752ec 100755 (executable)
@@ -40,6 +40,8 @@ fw_flash_test()
                return
        fi
 
+       echo "10"> $DEBUGFS_DIR/fw_update_flash_chunk_time_ms
+
        devlink dev flash $DL_HANDLE file $DUMMYFILE
        check_err $? "Failed to flash with status updates on"