|
@@ -2708,6 +2708,18 @@ static int nvme_dev_map(struct nvme_dev *dev)
|
|
|
dev->q_depth = min_t(int, NVME_CAP_MQES(cap) + 1, NVME_Q_DEPTH);
|
|
|
dev->db_stride = 1 << NVME_CAP_STRIDE(cap);
|
|
|
dev->dbs = ((void __iomem *)dev->bar) + 4096;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Temporary fix for the Apple controller found in the MacBook8,1 and
|
|
|
+ * some MacBook7,1 to avoid controller resets and data loss.
|
|
|
+ */
|
|
|
+ if (pdev->vendor == PCI_VENDOR_ID_APPLE && pdev->device == 0x2001) {
|
|
|
+ dev->q_depth = 2;
|
|
|
+ dev_warn(dev->dev, "detected Apple NVMe controller, set "
|
|
|
+ "queue depth=%u to work around controller resets\n",
|
|
|
+ dev->q_depth);
|
|
|
+ }
|
|
|
+
|
|
|
if (readl(&dev->bar->vs) >= NVME_VS(1, 2))
|
|
|
dev->cmb = nvme_map_cmb(dev);
|
|
|
|