diff options
| author | Mark Brown <broonie@kernel.org> | 2026-05-29 23:13:49 +0100 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2026-05-29 23:13:49 +0100 |
| commit | 3a809b602233ed47ae7375b72663c4147853b1c3 (patch) | |
| tree | af063d7d0e208c3c0167c11240ede0bce5bec826 | |
| parent | b5d6adf32744ef61b5ed065152baff796b55fd2c (diff) | |
| parent | 20fd1648f35399f114351b67c14ff8d3233a30e2 (diff) | |
| download | linux-next-history-3a809b602233ed47ae7375b72663c4147853b1c3.tar.gz | |
Merge branch 'for-next' of https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git
| -rw-r--r-- | drivers/hwmon/drivetemp.c | 5 | ||||
| -rw-r--r-- | drivers/scsi/megaraid/megaraid_mbox.c | 26 | ||||
| -rw-r--r-- | drivers/scsi/megaraid/megaraid_mm.c | 30 | ||||
| -rw-r--r-- | drivers/scsi/scsi_debug.c | 11 | ||||
| -rw-r--r-- | drivers/scsi/scsi_ioctl.c | 11 | ||||
| -rw-r--r-- | drivers/scsi/scsi_scan.c | 33 | ||||
| -rw-r--r-- | drivers/ufs/core/ufs-txeq.c | 8 | ||||
| -rw-r--r-- | drivers/ufs/core/ufshcd.c | 56 | ||||
| -rw-r--r-- | drivers/ufs/host/ufs-qcom.c | 3 | ||||
| -rw-r--r-- | include/scsi/scsi_common.h | 8 | ||||
| -rw-r--r-- | include/scsi/scsi_device.h | 7 | ||||
| -rw-r--r-- | include/target/target_core_base.h | 5 | ||||
| -rw-r--r-- | include/ufs/ufshcd.h | 7 |
13 files changed, 103 insertions, 107 deletions
diff --git a/drivers/hwmon/drivetemp.c b/drivers/hwmon/drivetemp.c index 002e0660a0b87..efe8b229bdbe2 100644 --- a/drivers/hwmon/drivetemp.c +++ b/drivers/hwmon/drivetemp.c @@ -306,13 +306,10 @@ static bool drivetemp_sct_avoid(struct drivetemp_data *st) struct scsi_device *sdev = st->sdev; unsigned int ctr; - if (!sdev->model) - return false; - /* * The "model" field contains just the raw SCSI INQUIRY response * "product identification" field, which has a width of 16 bytes. - * This field is space-filled, but is NOT NULL-terminated. + * This field is space-filled and NUL-terminated. */ for (ctr = 0; ctr < ARRAY_SIZE(sct_avoid_models); ctr++) if (!strncmp(sdev->model, sct_avoid_models[ctr], diff --git a/drivers/scsi/megaraid/megaraid_mbox.c b/drivers/scsi/megaraid/megaraid_mbox.c index 06cf94ee4e360..ce89032a5a744 100644 --- a/drivers/scsi/megaraid/megaraid_mbox.c +++ b/drivers/scsi/megaraid/megaraid_mbox.c @@ -3396,7 +3396,7 @@ static int megaraid_cmm_register(adapter_t *adapter) { mraid_device_t *raid_dev = ADAP2RAIDDEV(adapter); - mraid_mmadp_t adp; + mraid_mmadp_t *adp; scb_t *scb; mbox_ccb_t *ccb; int rval; @@ -3404,11 +3404,16 @@ megaraid_cmm_register(adapter_t *adapter) // Allocate memory for the base list of scb for management module. adapter->uscb_list = kzalloc_objs(scb_t, MBOX_MAX_USER_CMDS); + adp = kzalloc_obj(*adp); - if (adapter->uscb_list == NULL) { + if (!adapter->uscb_list || !adp) { con_log(CL_ANN, (KERN_WARNING "megaraid: out of memory, %s %d\n", __func__, __LINE__)); + + kfree(adapter->uscb_list); + kfree(adp); + return -1; } @@ -3452,20 +3457,21 @@ megaraid_cmm_register(adapter_t *adapter) list_add_tail(&scb->list, &adapter->uscb_pool); } - adp.unique_id = adapter->unique_id; - adp.drvr_type = DRVRTYPE_MBOX; - adp.drvr_data = (unsigned long)adapter; - adp.pdev = adapter->pdev; - adp.issue_uioc = megaraid_mbox_mm_handler; - adp.timeout = MBOX_RESET_WAIT + MBOX_RESET_EXT_WAIT; - adp.max_kioc = MBOX_MAX_USER_CMDS; + adp->unique_id = adapter->unique_id; + adp->drvr_type = DRVRTYPE_MBOX; + adp->drvr_data = (unsigned long)adapter; + adp->pdev = adapter->pdev; + adp->issue_uioc = megaraid_mbox_mm_handler; + adp->timeout = MBOX_RESET_WAIT + MBOX_RESET_EXT_WAIT; + adp->max_kioc = MBOX_MAX_USER_CMDS; - if ((rval = mraid_mm_register_adp(&adp)) != 0) { + if ((rval = mraid_mm_register_adp(adp)) != 0) { con_log(CL_ANN, (KERN_WARNING "megaraid mbox: did not register with CMM\n")); kfree(adapter->uscb_list); + kfree(adp); } return rval; diff --git a/drivers/scsi/megaraid/megaraid_mm.c b/drivers/scsi/megaraid/megaraid_mm.c index 538da0e98131a..60db48dc8f3a4 100644 --- a/drivers/scsi/megaraid/megaraid_mm.c +++ b/drivers/scsi/megaraid/megaraid_mm.c @@ -898,42 +898,28 @@ hinfo_to_cinfo(mraid_hba_info_t *hinfo, mcontroller_t *cinfo) /** * mraid_mm_register_adp - Registration routine for low level drivers - * @lld_adp : Adapter object + * @adapter : Adapter object */ int -mraid_mm_register_adp(mraid_mmadp_t *lld_adp) +mraid_mm_register_adp(mraid_mmadp_t *adapter) { - mraid_mmadp_t *adapter; mbox64_t *mbox_list; uioc_t *kioc; uint32_t rval; int i; - if (lld_adp->drvr_type != DRVRTYPE_MBOX) + if (adapter->drvr_type != DRVRTYPE_MBOX) return (-EINVAL); - adapter = kzalloc_obj(mraid_mmadp_t); - - if (!adapter) - return -ENOMEM; - - - adapter->unique_id = lld_adp->unique_id; - adapter->drvr_type = lld_adp->drvr_type; - adapter->drvr_data = lld_adp->drvr_data; - adapter->pdev = lld_adp->pdev; - adapter->issue_uioc = lld_adp->issue_uioc; - adapter->timeout = lld_adp->timeout; - adapter->max_kioc = lld_adp->max_kioc; adapter->quiescent = 1; /* * Allocate single blocks of memory for all required kiocs, * mailboxes and passthru structures. */ - adapter->kioc_list = kmalloc_objs(uioc_t, lld_adp->max_kioc); - adapter->mbox_list = kmalloc_objs(mbox64_t, lld_adp->max_kioc); + adapter->kioc_list = kmalloc_objs(uioc_t, adapter->max_kioc); + adapter->mbox_list = kmalloc_objs(mbox64_t, adapter->max_kioc); adapter->pthru_dma_pool = dma_pool_create("megaraid mm pthru pool", &adapter->pdev->dev, sizeof(mraid_passthru_t), @@ -956,11 +942,11 @@ mraid_mm_register_adp(mraid_mmadp_t *lld_adp) */ INIT_LIST_HEAD(&adapter->kioc_pool); spin_lock_init(&adapter->kioc_pool_lock); - sema_init(&adapter->kioc_semaphore, lld_adp->max_kioc); + sema_init(&adapter->kioc_semaphore, adapter->max_kioc); mbox_list = (mbox64_t *)adapter->mbox_list; - for (i = 0; i < lld_adp->max_kioc; i++) { + for (i = 0; i < adapter->max_kioc; i++) { kioc = adapter->kioc_list + i; kioc->cmdbuf = (uint64_t)(unsigned long)(mbox_list + i); @@ -997,7 +983,7 @@ dma_pool_error: pthru_dma_pool_error: - for (i = 0; i < lld_adp->max_kioc; i++) { + for (i = 0; i < adapter->max_kioc; i++) { kioc = adapter->kioc_list + i; if (kioc->pthru32) { dma_pool_free(adapter->pthru_dma_pool, kioc->pthru32, diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 040c5e1e713a2..bc2aa7f6d372a 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -233,13 +233,6 @@ struct tape_block { #define SDEBUG_OPT_UNALIGNED_WRITE 0x20000 #define SDEBUG_OPT_ALL_NOISE (SDEBUG_OPT_NOISE | SDEBUG_OPT_Q_NOISE | \ SDEBUG_OPT_RESET_NOISE) -#define SDEBUG_OPT_ALL_INJECTING (SDEBUG_OPT_RECOVERED_ERR | \ - SDEBUG_OPT_TRANSPORT_ERR | \ - SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR | \ - SDEBUG_OPT_SHORT_TRANSFER | \ - SDEBUG_OPT_HOST_BUSY | \ - SDEBUG_OPT_CMD_ABORT | \ - SDEBUG_OPT_UNALIGNED_WRITE) #define SDEBUG_OPT_RECOV_DIF_DIX (SDEBUG_OPT_RECOVERED_ERR | \ SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR) @@ -955,7 +948,6 @@ static bool sdebug_removable = DEF_REMOVABLE; static bool sdebug_clustering; static bool sdebug_host_lock = DEF_HOST_LOCK; static bool sdebug_strict = DEF_STRICT; -static bool sdebug_any_injecting_opt; static bool sdebug_no_rwlock; static bool sdebug_verbose; static bool have_dif_prot; @@ -7528,7 +7520,6 @@ static int scsi_debug_write_info(struct Scsi_Host *host, char *buffer, return -EINVAL; sdebug_opts = opts; sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts); - sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts); if (sdebug_every_nth != 0) tweak_cmnd_count(); return length; @@ -7748,7 +7739,6 @@ static ssize_t opts_store(struct device_driver *ddp, const char *buf, opts_done: sdebug_opts = opts; sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts); - sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts); tweak_cmnd_count(); return count; } @@ -9659,7 +9649,6 @@ static int sdebug_driver_probe(struct device *dev) scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_CRC); sdebug_verbose = !!(SDEBUG_OPT_NOISE & sdebug_opts); - sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & sdebug_opts); if (sdebug_every_nth) /* need stats counters for every_nth */ sdebug_statistics = true; error = scsi_add_host(hpnt, &sdbg_host->dev); diff --git a/drivers/scsi/scsi_ioctl.c b/drivers/scsi/scsi_ioctl.c index 0ddc95bafc71f..c14f81403a09e 100644 --- a/drivers/scsi/scsi_ioctl.c +++ b/drivers/scsi/scsi_ioctl.c @@ -176,10 +176,13 @@ static int scsi_ioctl_get_pci(struct scsi_device *sdev, void __user *arg) name = dev_name(dev); - /* compatibility with old ioctl which only returned - * 20 characters */ - return copy_to_user(arg, name, min(strlen(name), (size_t)20)) - ? -EFAULT: 0; + /* + * Compatibility with old ioctl which only returned 20 characters. + */ + if (copy_to_user(arg, name, strnlen(name, 20))) + return -EFAULT; + + return 0; } static int sg_get_version(int __user *p) diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index a35a5f777d166..7e60e3a4bca66 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c @@ -292,9 +292,9 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, if (!sdev) goto out; - sdev->vendor = scsi_null_device_strs; - sdev->model = scsi_null_device_strs; - sdev->rev = scsi_null_device_strs; + strscpy(sdev->vendor, scsi_null_device_strs); + strscpy(sdev->model, scsi_null_device_strs); + strscpy(sdev->rev, scsi_null_device_strs); sdev->host = shost; sdev->queue_ramp_up_period = SCSI_DEFAULT_RAMP_UP_PERIOD; sdev->id = starget->id; @@ -728,9 +728,13 @@ static int scsi_probe_lun(struct scsi_device *sdev, unsigned char *inq_result, } if (result == 0) { - scsi_sanitize_inquiry_string(&inq_result[8], 8); - scsi_sanitize_inquiry_string(&inq_result[16], 16); - scsi_sanitize_inquiry_string(&inq_result[32], 4); + scsi_sanitize_inquiry_string(&inq_result[INQUIRY_VENDOR_OFFSET], + INQUIRY_VENDOR_LEN); + scsi_sanitize_inquiry_string(&inq_result[INQUIRY_MODEL_OFFSET], + INQUIRY_MODEL_LEN); + scsi_sanitize_inquiry_string( + &inq_result[INQUIRY_REVISION_OFFSET], + INQUIRY_REVISION_LEN); response_len = inq_result[4] + 5; if (response_len > 255) @@ -743,8 +747,9 @@ static int scsi_probe_lun(struct scsi_device *sdev, unsigned char *inq_result, * corresponding bit fields in scsi_device, so bflags * need not be passed as an argument. */ - *bflags = scsi_get_device_flags(sdev, &inq_result[8], - &inq_result[16]); + *bflags = scsi_get_device_flags(sdev, + &inq_result[INQUIRY_VENDOR_OFFSET], + &inq_result[INQUIRY_MODEL_OFFSET]); /* When the first pass succeeds we gain information about * what larger transfer lengths might work. */ @@ -905,9 +910,15 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result, if (sdev->inquiry == NULL) return SCSI_SCAN_NO_RESPONSE; - sdev->vendor = (char *) (sdev->inquiry + 8); - sdev->model = (char *) (sdev->inquiry + 16); - sdev->rev = (char *) (sdev->inquiry + 32); + strscpy(sdev->vendor, sdev->inquiry + INQUIRY_VENDOR_OFFSET); + strscpy(sdev->model, sdev->inquiry + INQUIRY_MODEL_OFFSET); + /* + * memcpy() instead of strscpy() because strscpy() would read past + * the end of sdev->inquiry if its length is exactly 36 bytes. + */ + memcpy(sdev->rev, sdev->inquiry + INQUIRY_REVISION_OFFSET, + INQUIRY_REVISION_LEN); + sdev->rev[INQUIRY_REVISION_LEN] = '\0'; sdev->is_ata = strncmp(sdev->vendor, "ATA ", 8) == 0; if (sdev->is_ata) { diff --git a/drivers/ufs/core/ufs-txeq.c b/drivers/ufs/core/ufs-txeq.c index 4b264adfdf49a..aa64f2bf4f1ef 100644 --- a/drivers/ufs/core/ufs-txeq.c +++ b/drivers/ufs/core/ufs-txeq.c @@ -885,7 +885,9 @@ static int ufshcd_setup_tx_eqtr_adapt_length(struct ufs_hba *hba, if (adapt_l0l1l2l3_cap_local > ADAPT_L0L1L2L3_LENGTH_MAX) { dev_err(hba->dev, "local RX_HS_G%u_ADAPT_INITIAL_L0L1L2L3_CAP (0x%x) exceeds MAX\n", gear, adapt_l0l1l2l3_cap_local); - return -EINVAL; + + if (!(hba->quirks & UFSHCD_QUIRK_EXTENDED_TX_EQTR_ADAPT_LENGTH_L0L1L2L3)) + return -EINVAL; } ret = ufshcd_dme_get(hba, UIC_ARG_MIB(PA_PEERRXHSG6ADAPTINITIALL0L1L2L3), @@ -896,7 +898,9 @@ static int ufshcd_setup_tx_eqtr_adapt_length(struct ufs_hba *hba, if (adapt_l0l1l2l3_cap_peer > ADAPT_L0L1L2L3_LENGTH_MAX) { dev_err(hba->dev, "peer RX_HS_G%u_ADAPT_INITIAL_L0L1L2L3_CAP (0x%x) exceeds MAX\n", gear, adapt_l0l1l2l3_cap_peer); - return -EINVAL; + + if (!(hba->quirks & UFSHCD_QUIRK_EXTENDED_TX_EQTR_ADAPT_LENGTH_L0L1L2L3)) + return -EINVAL; } t_adapt_l0l1l2l3_local = adapt_cap_to_t_adapt_l0l1l2l3(adapt_l0l1l2l3_cap_local); diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 06b965080fb0e..9e0336098e26e 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -460,20 +460,24 @@ static void ufshcd_add_uic_command_trace(struct ufs_hba *hba, const struct uic_command *ucmd, enum ufs_trace_str_t str_t) { - u32 cmd; + u32 cmd, arg1, arg2, arg3; if (!trace_ufshcd_uic_command_enabled()) return; - if (str_t == UFS_CMD_SEND) + if (str_t == UFS_CMD_SEND) { cmd = ucmd->command; - else + arg1 = ucmd->argument1; + arg2 = ucmd->argument2; + arg3 = ucmd->argument3; + } else { cmd = ufshcd_readl(hba, REG_UIC_COMMAND); + arg1 = ufshcd_readl(hba, REG_UIC_COMMAND_ARG_1); + arg2 = ufshcd_readl(hba, REG_UIC_COMMAND_ARG_2); + arg3 = ufshcd_readl(hba, REG_UIC_COMMAND_ARG_3); + } - trace_ufshcd_uic_command(hba, str_t, cmd, - ufshcd_readl(hba, REG_UIC_COMMAND_ARG_1), - ufshcd_readl(hba, REG_UIC_COMMAND_ARG_2), - ufshcd_readl(hba, REG_UIC_COMMAND_ARG_3)); + trace_ufshcd_uic_command(hba, str_t, cmd, arg1, arg2, arg3); } static void ufshcd_add_command_trace(struct ufs_hba *hba, struct scsi_cmnd *cmd, @@ -913,33 +917,6 @@ static inline int ufshcd_get_lists_status(u32 reg) } /** - * ufshcd_get_uic_cmd_result - Get the UIC command result - * @hba: Pointer to adapter instance - * - * This function gets the result of UIC command completion - * - * Return: 0 on success; non-zero value on error. - */ -static inline int ufshcd_get_uic_cmd_result(struct ufs_hba *hba) -{ - return ufshcd_readl(hba, REG_UIC_COMMAND_ARG_2) & - MASK_UIC_COMMAND_RESULT; -} - -/** - * ufshcd_get_dme_attr_val - Get the value of attribute returned by UIC command - * @hba: Pointer to adapter instance - * - * This function gets UIC command argument3 - * - * Return: 0 on success; non-zero value on error. - */ -static inline u32 ufshcd_get_dme_attr_val(struct ufs_hba *hba) -{ - return ufshcd_readl(hba, REG_UIC_COMMAND_ARG_3); -} - -/** * ufshcd_get_req_rsp - returns the TR response transaction type * @ucd_rsp_ptr: pointer to response UPIU * @@ -2598,6 +2575,7 @@ ufshcd_dispatch_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd) lockdep_assert_held(&hba->uic_cmd_mutex); WARN_ON(hba->active_uic_cmd); + WARN_ON_ONCE(uic_cmd->argument2 & MASK_UIC_COMMAND_RESULT); hba->active_uic_cmd = uic_cmd; @@ -5810,8 +5788,14 @@ static irqreturn_t ufshcd_uic_cmd_compl(struct ufs_hba *hba, u32 intr_status) hba->errors |= (UFSHCD_UIC_HIBERN8_MASK & intr_status); if (intr_status & UIC_COMMAND_COMPL) { - cmd->argument2 |= ufshcd_get_uic_cmd_result(hba); - cmd->argument3 = ufshcd_get_dme_attr_val(hba); + /* + * Store the UIC command result in the lowest byte of + * cmd->argument2. + */ + cmd->argument2 |= ufshcd_readl(hba, REG_UIC_COMMAND_ARG_2) & + MASK_UIC_COMMAND_RESULT; + /* Store the DME attribute value in cmd->argument3. */ + cmd->argument3 = ufshcd_readl(hba, REG_UIC_COMMAND_ARG_3); if (!hba->uic_async_done) cmd->cmd_active = false; complete(&cmd->done); diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-qcom.c index 9664b8ae67b78..291c434487648 100644 --- a/drivers/ufs/host/ufs-qcom.c +++ b/drivers/ufs/host/ufs-qcom.c @@ -1315,6 +1315,9 @@ static void ufs_qcom_advertise_quirks(struct ufs_hba *hba) if (host->hw_ver.major > 0x3) hba->quirks |= UFSHCD_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH; + if (host->hw_ver.major == 0x7 && host->hw_ver.minor == 0x1) + hba->quirks |= UFSHCD_QUIRK_EXTENDED_TX_EQTR_ADAPT_LENGTH_L0L1L2L3; + if (drvdata && drvdata->quirks) hba->quirks |= drvdata->quirks; } diff --git a/include/scsi/scsi_common.h b/include/scsi/scsi_common.h index fb58715fac869..00c8a16d3cd24 100644 --- a/include/scsi/scsi_common.h +++ b/include/scsi/scsi_common.h @@ -10,6 +10,14 @@ #include <uapi/linux/pr.h> #include <scsi/scsi_proto.h> +/* From the standard INQUIRY data description in SPC-6. */ +#define INQUIRY_VENDOR_OFFSET 8 +#define INQUIRY_VENDOR_LEN 8 +#define INQUIRY_MODEL_OFFSET 16 +#define INQUIRY_MODEL_LEN 16 +#define INQUIRY_REVISION_OFFSET 32 +#define INQUIRY_REVISION_LEN 4 + enum scsi_pr_type { SCSI_PR_WRITE_EXCLUSIVE = 0x01, SCSI_PR_EXCLUSIVE_ACCESS = 0x03, diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 9c2a7bbe5891e..029f5115b2ea0 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h @@ -7,6 +7,7 @@ #include <linux/workqueue.h> #include <linux/blk-mq.h> #include <scsi/scsi.h> +#include <scsi/scsi_common.h> #include <linux/atomic.h> #include <linux/sbitmap.h> @@ -137,9 +138,9 @@ struct scsi_device { struct mutex inquiry_mutex; unsigned char inquiry_len; /* valid bytes in 'inquiry' */ unsigned char * inquiry; /* INQUIRY response data */ - const char * vendor; /* [back_compat] point into 'inquiry' ... */ - const char * model; /* ... after scan; point to static string */ - const char * rev; /* ... "nullnullnullnull" before scan */ + char vendor[INQUIRY_VENDOR_LEN + 1]; + char model[INQUIRY_MODEL_LEN + 1]; + char rev[INQUIRY_REVISION_LEN + 1]; #define SCSI_DEFAULT_VPD_LEN 255 /* default SCSI VPD page size (max) */ struct scsi_vpd __rcu *vpd_pg0; diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index 9a0e9f9e1ec44..002b0fc575876 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h @@ -8,6 +8,7 @@ #include <linux/percpu-refcount.h> #include <linux/semaphore.h> /* struct semaphore */ #include <linux/completion.h> +#include <scsi/scsi_common.h> #define TARGET_CORE_VERSION "v5.0" @@ -46,10 +47,6 @@ /* Used by transport_get_inquiry_vpd_device_ident() */ #define INQUIRY_VPD_DEVICE_IDENTIFIER_LEN 254 -#define INQUIRY_VENDOR_LEN 8 -#define INQUIRY_MODEL_LEN 16 -#define INQUIRY_REVISION_LEN 4 - /* Attempts before moving from SHORT to LONG */ #define PYX_TRANSPORT_WINDOW_CLOSED_THRESHOLD 3 #define PYX_TRANSPORT_WINDOW_CLOSED_WAIT_SHORT 3 /* In milliseconds */ diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h index f48d6416e2993..3eaae082329c9 100644 --- a/include/ufs/ufshcd.h +++ b/include/ufs/ufshcd.h @@ -806,6 +806,13 @@ enum ufshcd_quirks { * delay after enabling VCC to ensure it's stable. */ UFSHCD_QUIRK_VCC_ON_DELAY = 1 << 27, + + /* + * This quirk indicates that Host supports TX Equalization Training + * (EQTR) using Adapt L0L1L2L3 length which is larger than what is + * allowed by M-PHY spec ver 6.0. + */ + UFSHCD_QUIRK_EXTENDED_TX_EQTR_ADAPT_LENGTH_L0L1L2L3 = 1 << 28, }; enum ufshcd_caps { |
