• Maurizio Lombardi's avatar
    nvme-host: fix the updating of the firmware version · f0377ff9
    Maurizio Lombardi authored
    The original code didn't update the firmware version if the
    "next slot" of the AFI register isn't zero or if the
    "current slot" field is zero; in those cases it assumed
    that a reset was needed.
    
    However, the NVMe specification doesn't exclude the possibility that
    the "next slot" value is equal to the "current slot" value,
    meaning that the same firmware slot will be activated after performing
    a controller level reset; in this case a reset is clearly not
    necessary and we can safely update the firmware version.
    
    Modify the code so the kernel will report that a Controller Level Reset
    is needed only in the following cases:
    
    1) If the "current slot" field is zero. This is invalid and means that
       something is wrong, a reset is needed.
    
    or
    
    2) if the "next slot" field isn't zero AND it's not equal to the
       "current slot" value. This means that at the next reset a different
       firmware slot will be activated.
    
    Fixes: 983a338b ("nvme: update firmware version after commit")
    Signed-off-by: default avatarMaurizio Lombardi <mlombard@redhat.com>
    Reviewed-by: default avatarDaniel Wagner <dwagner@suse.de>
    Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
    f0377ff9
core.c 129 KB