BIOS does not detect SSD after reboot from ubuntu 16.04 (Dell XPS 15)

Rebooting ubuntu causes the laptop to not be able to boot unless I have a bootable USB or something other than my SSD plugged in. Shutting down and booting again from either windows or ubuntu works fine, and so does restarting from windows. I tried updating the BIOS, reinstalling a number of different ubuntu versions (including 16.04.3 and 17.10), but both present the same issue. It is probably also worth mentioning that the issue still persists if I do not actually install ubuntu, but reboot from the "Try ubuntu" option of my bootable USB. My specs:

Dell XPS 15 9950:

SSD: Samsung NVMe PM951 512GB

Processor: Intel i7-6700HQ (2.6 Ghz)

GPU: Intel Graphics 530/NVIDIA GeForce 960M

I did switch the SATA Operation from RAID On to AHCI, while windows was in safe mode, as per all the tutorials that I found. Partitioning was done with the default partition manager (though I tried with intact partitions while rebooting from the live stick). Secure boot is off from the BIOS and I also deacctivated it from a previous linux I had installed. I also reset Windows 10 a number of times during the process. Lastly, I am aware of an almost identical question posted, but it has neither upvotes, nor replies, and I'm at my wit's end. I probably wouldn't mind giving up on Ubuntu and installing Debian instead, but I have no idea how (am new to linux and no tutorials are available).

P.S.: At a certain point I had a properly working ubuntu 16.04 (possibly 16.04.1 since the stick I used is a good few months old), but upgrading to 17.10 went wrong and I decided to reinstall.

Edit: I also thought I should mention the fact that on reboot the PC goes directly to Dell support assist and says "Hard drive not installed" (or hard disk, can't remember) and that apart from this issue ubuntu seems to work fine.


I was having the same issue on my Dell XPS 15 9550 using kernel 4.16; after a lot of research I found a solution that works for me:

TLDR: Boot with kernel parameter nvme_core.default_ps_max_latency_us=4950

  • I do this by modifying GRUB_LINUX_CMDLINE_DEFAULT in /etc/default/grub and then running sudo grub-install.

The Issue

As Cristian Velasquez Ramos posted earlier in this thread, a quirk that disables APST (Autonomous Power State Transition) for the NVMe Samsung 950 (Firmware ID: BXV76D0Q) was merged into mainline kernel 4.11.0rc7 to fix bugs such as these:

Discussion from the linux-nvme mailing list:

Samsung 950 series SSDs in Dell XPS 15 9550 and Precision 5510 laptops (which are essentially the same laptop) can lose their PCIe link if they're allowed to use the deepest APST state. Samsung engineers have an affected system and are working on it. The same exact SSDs in other machines (even an XPS 13) seem to work fine.

Because of this quirk, the default APST controller state is set to off for our device, which causes the issues with soft reboot we were seeing.

Here's the discussion about the quirk that was merged into mainline 4.11:

We need to disable the quirk somehow in order to fix the issue with soft reboot.

We can entirely disable the quirk by using nvme_core.force_apst=1, but this can cause the bugs with read/write after extended usage (it happened for me after 3 days of uptime). Because of this, simply overriding apst will not work.

However, we can disable the lowest power state by using the kernel parameter: nvme_core.default_ps_max_latency_us=4950

This fixes all issues! Thanks again to Cristian Velasquez Ramos for the fix.


Was looking to update this, but the grub file I have has slightly different context (grub version 5.4.0-26-generic) ubuntu 20.04.

The file is as follows. My question is whether GRUB_LINUX_CMDLINE_DEFAULT is the same as GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" or are these 2 different things altogether

The file enclosed below:

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""