Skip to content

Commit

Permalink
nvme: Add wrappers for firmware commands
Browse files Browse the repository at this point in the history
This change adds nvme_dev wrappers for the firmware download and
firmware commit commands, allowing access over a MI channel.

We need a bump to libnvme for the underlying MI firmware calls.

Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
  • Loading branch information
jk-ozlabs committed Sep 27, 2022
1 parent 00e8c6a commit fccc764
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 4 deletions.
12 changes: 12 additions & 0 deletions nvme-wrap.c
Expand Up @@ -323,6 +323,18 @@ int nvme_cli_get_log_persistent_event(struct nvme_dev *dev,
pevent_log);
}

int nvme_cli_fw_download(struct nvme_dev *dev,
struct nvme_fw_download_args *args)
{
return do_admin_args_op(fw_download, dev, args);
}

int nvme_cli_fw_commit(struct nvme_dev *dev,
struct nvme_fw_commit_args *args)
{
return do_admin_args_op(fw_commit, dev, args);
}

/* The MI & direct interfaces don't have an exactly-matching API for
* ns_mgmt_create, as we don't support a timeout for MI.
*/
Expand Down
6 changes: 6 additions & 0 deletions nvme-wrap.h
Expand Up @@ -112,4 +112,10 @@ int nvme_cli_get_log_zns_changed_zones(struct nvme_dev *dev, __u32 nsid,
int nvme_cli_get_log_persistent_event(struct nvme_dev *dev,
enum nvme_pevent_log_action action,
__u32 size, void *pevent_log);

int nvme_cli_fw_download(struct nvme_dev *dev,
struct nvme_fw_download_args *args);

int nvme_cli_fw_commit(struct nvme_dev *dev,
struct nvme_fw_commit_args *args);
#endif /* _NVME_WRAP_H */
6 changes: 2 additions & 4 deletions nvme.c
Expand Up @@ -4186,14 +4186,13 @@ static int fw_download(int argc, char **argv, struct command *cmd, struct plugin

struct nvme_fw_download_args args = {
.args_size = sizeof(args),
.fd = dev_fd(dev),
.offset = cfg.offset,
.data_len = cfg.xfer,
.data = fw_buf,
.timeout = NVME_DEFAULT_IOCTL_TIMEOUT,
.result = NULL,
};
err = nvme_fw_download(&args);
err = nvme_cli_fw_download(dev, &args);
if (err < 0) {
fprintf(stderr, "fw-download: %s\n", nvme_strerror(errno));
break;
Expand Down Expand Up @@ -4283,14 +4282,13 @@ static int fw_commit(int argc, char **argv, struct command *cmd, struct plugin *

struct nvme_fw_commit_args args = {
.args_size = sizeof(args),
.fd = dev_fd(dev),
.slot = cfg.slot,
.action = cfg.action,
.bpid = cfg.bpid,
.timeout = NVME_DEFAULT_IOCTL_TIMEOUT,
.result = &result,
};
err = nvme_fw_commit(&args);
err = nvme_cli_fw_commit(dev, &args);
if (err < 0)
fprintf(stderr, "fw-commit: %s\n", nvme_strerror(errno));
else if (err != 0)
Expand Down

0 comments on commit fccc764

Please sign in to comment.