Skip to content
Snippets Groups Projects
Forked from Reform / reform-boundary-uboot
Source project has a limited visibility.
  • Marek Vasut's avatar
    12491355
    i2c: mxs_i2c: Squash endless loop · 12491355
    Marek Vasut authored
    
    The endless waiting for a bit to be set can cause a hang, add a timeout
    so we prevent such situation. A testcase for such a hang is below. The
    testcase assumes a device to be present at address 0x50 and a device to
    NOT be present at address 0x42 . Also note that the "sleep 1" induced
    delays are imperative for this bug to manifest .
    
    i2c read 0x42 0x0.2 0x10 0x42000000 ; sleep 1 ; \
    i2c read 0x50 0x0.2 0x10 0x42000000 ; sleep 1 ; \
    i2c read 0x42 0x0.2 0x10 0x42000000
    
    The expected result of the above command is:
    
    Error reading the chip.
    Error reading the chip.
    
    While without this patch, we observe a hang in the last read from 0x42
    precisely when waiting for this bit to be set.
    
    Signed-off-by: default avatarMarek Vasut <marex@denx.de>
    Cc: Fabio Estevam <fabio.estevam@freescale.com>
    Cc: Heiko Schocher <hs@denx.de>
    Cc: Stefano Babic <sbabic@denx.de>
    12491355
    History
    i2c: mxs_i2c: Squash endless loop
    Marek Vasut authored
    
    The endless waiting for a bit to be set can cause a hang, add a timeout
    so we prevent such situation. A testcase for such a hang is below. The
    testcase assumes a device to be present at address 0x50 and a device to
    NOT be present at address 0x42 . Also note that the "sleep 1" induced
    delays are imperative for this bug to manifest .
    
    i2c read 0x42 0x0.2 0x10 0x42000000 ; sleep 1 ; \
    i2c read 0x50 0x0.2 0x10 0x42000000 ; sleep 1 ; \
    i2c read 0x42 0x0.2 0x10 0x42000000
    
    The expected result of the above command is:
    
    Error reading the chip.
    Error reading the chip.
    
    While without this patch, we observe a hang in the last read from 0x42
    precisely when waiting for this bit to be set.
    
    Signed-off-by: default avatarMarek Vasut <marex@denx.de>
    Cc: Fabio Estevam <fabio.estevam@freescale.com>
    Cc: Heiko Schocher <hs@denx.de>
    Cc: Stefano Babic <sbabic@denx.de>