A few months ago I already updated my Samsung SSD by following this procedure:
https://askubuntu.com/a/1386451.
Theoretically they provide an image to boot from to do the update, but the image seems very outdated and did not recognize my keyboard so it was unusable.
And it seems to have worked. After extracting this updater tool and running it, smartctl kept showing the old firmware version (3B2QGXA7), but after reboot it now shows the new version (5B2QGXA7).
I took the risk of running this while the OS (Archlinux) was running with the disk mounted (this is the OS install disk), and at first sight this didn't cause issues. But still do it at your own risk!!
├─SSD 980 PRO 2TB:
│ Device ID: 03281da317dccd2b18de2bd1cc70a782df40ed7e
│ Summary: NVM Express solid state drive
│ Current version: 5B2QGXA7
My home is on non-redundant stripe of two 980 Pro which both had the bad firmware, so I was obviously motivated, but not panicked as it's replicated hourly to spinning rust (and I have offsite backups). I treat Flash memory as dynamic ram with only slightly better retention.
The command line example in the link shows the old firmware, but they do say to go to the samsung website and get the latest one there. The 980 was the first one in the list there under the Firmware section.
I was trying to figure out why the update wasn't working on my Archlinux box. After a few attempts I barely caught a glimpse of an error message that flashed by: something along the lines of "unzip not found".
After installing unzip, the firmware updated successfully.
This worked for me, thanks! I have a Samsung SSD 980 PRO 2TB which I upgraded from 2B2QGXA7 to 5B2QGXA7. I backed up and also made a copy of the output of `sudo smartctl -t long -a /dev/nvme0` before and after.