• Robert Jarzmik's avatar
    mtd: nand: pxa3xx-nand: fix random command timeouts · 21fc0ef9
    Robert Jarzmik authored
    When 2 commands are submitted in a row, and the second is very quick,
    the completion of the second command might never come. This happens
    especially if the second command is quick, such as a status read after
    an erase.
    
    The issue is that in the interrupt handler, the status bits are cleared
    after the new command is issued. There is a small temporal window where
    this happens :
     - the previous command has set the command done bit
     - the ready for a command bit is set
     - the handler submits the next command
       - just then, the command completes, and the command done bit is still
         set
     - the handler clears the "previous" command done bit
     - the handler exits
    
    In this flow, the "command done" of the next command will never trigger
    a new interrupt to finish the status command, as it was cleared for both
    commands.
    
    Fix this by clearing the status bit before submitting a new command.
    Signed-off-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
    Acked-by: default avatarEzequiel Garcia <ezequiel@vanguardiasur.com.ar>
    Tested-by: default avatarEzequiel Garcia <ezequiel@vanguardiasur.com.ar>
    Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
    21fc0ef9
pxa3xx_nand.c 49.8 KB