struct cxlflash_cfg *cfg = afu->parent;
        struct device *dev = &cfg->dev->dev;
        struct afu_cmd *cmd = NULL;
+       char *buf = NULL;
        int rc = 0;
-       int retry_cnt = 0;
        static DEFINE_MUTEX(sync_active);
 
        if (cfg->state != STATE_NORMAL) {
        }
 
        mutex_lock(&sync_active);
-retry:
-       cmd = cmd_checkout(afu);
-       if (unlikely(!cmd)) {
-               retry_cnt++;
-               udelay(1000 * retry_cnt);
-               if (retry_cnt < MC_RETRY_CNT)
-                       goto retry;
-               dev_err(dev, "%s: could not get a free command\n", __func__);
+       buf = kzalloc(sizeof(*cmd) + __alignof__(*cmd) - 1, GFP_KERNEL);
+       if (unlikely(!buf)) {
+               dev_err(dev, "%s: no memory for command\n", __func__);
                rc = -1;
                goto out;
        }
 
-       pr_debug("%s: afu=%p cmd=%p %d\n", __func__, afu, cmd, ctx_hndl_u);
+       cmd = (struct afu_cmd *)PTR_ALIGN(buf, __alignof__(*cmd));
+       init_completion(&cmd->cevent);
+       spin_lock_init(&cmd->slock);
+       cmd->parent = afu;
 
-       memset(cmd->rcb.cdb, 0, sizeof(cmd->rcb.cdb));
+       pr_debug("%s: afu=%p cmd=%p %d\n", __func__, afu, cmd, ctx_hndl_u);
 
        cmd->rcb.req_flags = SISL_REQ_FLAGS_AFU_CMD;
+       cmd->rcb.ctx_id = afu->ctx_hndl;
+       cmd->rcb.msi = SISL_MSI_RRQ_UPDATED;
        cmd->rcb.port_sel = 0x0;        /* NA */
        cmd->rcb.lun_id = 0x0;  /* NA */
        cmd->rcb.data_len = 0x0;
                rc = -1;
 out:
        mutex_unlock(&sync_active);
-       if (cmd)
-               cmd_checkin(cmd);
+       kfree(buf);
        pr_debug("%s: returning rc=%d\n", __func__, rc);
        return rc;
 }