diff options
Diffstat (limited to 'drivers/nvme/host/pci.c')
| -rw-r--r-- | drivers/nvme/host/pci.c | 49 | 
1 files changed, 44 insertions, 5 deletions
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 48f4f6eb877b..d7b24ee17285 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -1334,6 +1334,14 @@ static void nvme_warn_reset(struct nvme_dev *dev, u32 csts)  		dev_warn(dev->ctrl.device,  			 "controller is down; will reset: CSTS=0x%x, PCI_STATUS read failed (%d)\n",  			 csts, result); + +	if (csts != ~0) +		return; + +	dev_warn(dev->ctrl.device, +		 "Does your device have a faulty power saving mode enabled?\n"); +	dev_warn(dev->ctrl.device, +		 "Try \"nvme_core.default_ps_max_latency_us=0 pcie_aspm=off\" and report a bug\n");  }  static enum blk_eh_timer_return nvme_timeout(struct request *req, bool reserved) @@ -2976,6 +2984,21 @@ static int nvme_pci_get_address(struct nvme_ctrl *ctrl, char *buf, int size)  	return snprintf(buf, size, "%s\n", dev_name(&pdev->dev));  } + +static void nvme_pci_print_device_info(struct nvme_ctrl *ctrl) +{ +	struct pci_dev *pdev = to_pci_dev(to_nvme_dev(ctrl)->dev); +	struct nvme_subsystem *subsys = ctrl->subsys; + +	dev_err(ctrl->device, +		"VID:DID %04x:%04x model:%.*s firmware:%.*s\n", +		pdev->vendor, pdev->device, +		nvme_strlen(subsys->model, sizeof(subsys->model)), +		subsys->model, nvme_strlen(subsys->firmware_rev, +					   sizeof(subsys->firmware_rev)), +		subsys->firmware_rev); +} +  static const struct nvme_ctrl_ops nvme_pci_ctrl_ops = {  	.name			= "pcie",  	.module			= THIS_MODULE, @@ -2987,6 +3010,7 @@ static const struct nvme_ctrl_ops nvme_pci_ctrl_ops = {  	.free_ctrl		= nvme_pci_free_ctrl,  	.submit_async_event	= nvme_pci_submit_async_event,  	.get_address		= nvme_pci_get_address, +	.print_device_info	= nvme_pci_print_device_info,  };  static int nvme_dev_map(struct nvme_dev *dev) @@ -3421,7 +3445,8 @@ static const struct pci_device_id nvme_id_table[] = {  	{ PCI_VDEVICE(REDHAT, 0x0010),	/* Qemu emulated controller */  		.driver_data = NVME_QUIRK_BOGUS_NID, },  	{ PCI_DEVICE(0x126f, 0x2263),	/* Silicon Motion unidentified */ -		.driver_data = NVME_QUIRK_NO_NS_DESC_LIST, }, +		.driver_data = NVME_QUIRK_NO_NS_DESC_LIST | +				NVME_QUIRK_BOGUS_NID, },  	{ PCI_DEVICE(0x1bb1, 0x0100),   /* Seagate Nytro Flash Storage */  		.driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY |  				NVME_QUIRK_NO_NS_DESC_LIST, }, @@ -3437,6 +3462,8 @@ static const struct pci_device_id nvme_id_table[] = {  		.driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY |  				NVME_QUIRK_DISABLE_WRITE_ZEROES|  				NVME_QUIRK_IGNORE_DEV_SUBNQN, }, +	{ PCI_DEVICE(0x1987, 0x5012),	/* Phison E12 */ +		.driver_data = NVME_QUIRK_BOGUS_NID, },  	{ PCI_DEVICE(0x1987, 0x5016),	/* Phison E16 */  		.driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, },  	{ PCI_DEVICE(0x1b4b, 0x1092),	/* Lexar 256 GB SSD */ @@ -3447,12 +3474,24 @@ static const struct pci_device_id nvme_id_table[] = {  	{ PCI_DEVICE(0x1cc1, 0x8201),   /* ADATA SX8200PNP 512GB */  		.driver_data = NVME_QUIRK_NO_DEEPEST_PS |  				NVME_QUIRK_IGNORE_DEV_SUBNQN, }, +	 { PCI_DEVICE(0x1344, 0x5407), /* Micron Technology Inc NVMe SSD */ +		.driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN },  	{ PCI_DEVICE(0x1c5c, 0x1504),   /* SK Hynix PC400 */  		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, }, +	{ PCI_DEVICE(0x1c5c, 0x174a),   /* SK Hynix P31 SSD */ +		.driver_data = NVME_QUIRK_BOGUS_NID, },  	{ PCI_DEVICE(0x15b7, 0x2001),   /*  Sandisk Skyhawk */  		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },  	{ PCI_DEVICE(0x1d97, 0x2263),   /* SPCC */  		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, }, +	{ PCI_DEVICE(0x144d, 0xa80b),   /* Samsung PM9B1 256G and 512G */ +		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, }, +	{ PCI_DEVICE(0x144d, 0xa809),   /* Samsung MZALQ256HBJD 256G */ +		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, }, +	{ PCI_DEVICE(0x1cc4, 0x6303),   /* UMIS RPJTJ512MGE1QDY 512G */ +		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, }, +	{ PCI_DEVICE(0x1cc4, 0x6302),   /* UMIS RPJTJ256MGE1QDY 256G */ +		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },  	{ PCI_DEVICE(0x2646, 0x2262),   /* KINGSTON SKC2000 NVMe SSD */  		.driver_data = NVME_QUIRK_NO_DEEPEST_PS, },  	{ PCI_DEVICE(0x2646, 0x2263),   /* KINGSTON A2000 NVMe SSD  */ @@ -3463,6 +3502,10 @@ static const struct pci_device_id nvme_id_table[] = {  		.driver_data = NVME_QUIRK_BOGUS_NID, },  	{ PCI_DEVICE(0x1e4B, 0x1202),   /* MAXIO MAP1202 */  		.driver_data = NVME_QUIRK_BOGUS_NID, }, +	{ PCI_DEVICE(0x1cc1, 0x5350),   /* ADATA XPG GAMMIX S50 */ +		.driver_data = NVME_QUIRK_BOGUS_NID, }, +	{ PCI_DEVICE(0x1e49, 0x0041),   /* ZHITAI TiPro7000 NVMe SSD */ +		.driver_data = NVME_QUIRK_NO_DEEPEST_PS, },  	{ PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0x0061),  		.driver_data = NVME_QUIRK_DMA_ADDRESS_BITS_48, },  	{ PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0x0065), @@ -3483,10 +3526,6 @@ static const struct pci_device_id nvme_id_table[] = {  				NVME_QUIRK_128_BYTES_SQES |  				NVME_QUIRK_SHARED_TAGS |  				NVME_QUIRK_SKIP_CID_GEN }, -	{ PCI_DEVICE(0x144d, 0xa808),   /* Samsung X5 */ -		.driver_data =  NVME_QUIRK_DELAY_BEFORE_CHK_RDY| -				NVME_QUIRK_NO_DEEPEST_PS | -				NVME_QUIRK_IGNORE_DEV_SUBNQN, },  	{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },  	{ 0, }  };  |