lkml.org 
[lkml]   [2009]   [May]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] mmc_spi: use EILSEQ for possible transmission errors
    Date
    From: Wolfgang Muees <wolfgang.mues@auerswald.de>

    o This patch changes the reported error code for the responses
    to a command from EINVAL/EIO to EILSEQ, as EINVAL is reserved
    for non-recoverable host errors, and the responses from
    the SD/MMC card may be because of recoverable transmission
    errors in the command or in the response. Response codes
    are NOT protected by a checksum, so don't trust them.

    Signed-off-by: Wolfgang Muees <wolfgang.mues@auerswald.de>

    ---
    diff -uprN 2_6_29_rc7_patch_wearout_speedup/drivers/mmc/host/mmc_spi.c 2_6_29_rc7_patch_EILSEQ/drivers/mmc/host/mmc_spi.c
    --- 2_6_29_rc7_patch_wearout_speedup/drivers/mmc/host/mmc_spi.c 2009-04-08 11:11:20.000000000 +0200
    +++ 2_6_29_rc7_patch_EILSEQ/drivers/mmc/host/mmc_spi.c 2009-05-14 12:49:42.000000000 +0200
    @@ -334,17 +334,18 @@ checkstatus:
    cmd->error = 0;

    /* Status byte: the entire seven-bit R1 response. */
    - if (cmd->resp[0] != 0) {
    - if ((R1_SPI_PARAMETER | R1_SPI_ADDRESS
    - | R1_SPI_ILLEGAL_COMMAND)
    - & cmd->resp[0])
    - value = -EINVAL;
    - else if (R1_SPI_COM_CRC & cmd->resp[0])
    - value = -EILSEQ;
    - else if ((R1_SPI_ERASE_SEQ | R1_SPI_ERASE_RESET)
    - & cmd->resp[0])
    - value = -EIO;
    - /* else R1_SPI_IDLE, "it's resetting" */
    + /*
    + * Note that we have a problem here: as the response is NOT protected
    + * by a CRC or checksum, a transmission error in the response will
    + * be interpreted as an error code. So we map all error codes to
    + * EILSEQ here, to allow for the upper layer to retry the command.
    + * If one of these error codes is a non-recoverable error, retries
    + * will do no harm.
    + */
    +
    + /* Allow only 0 and R1_SPI_IDLE here */
    + if (cmd->resp[0] & ~R1_SPI_IDLE) {
    + value = -EILSEQ;
    }

    switch (mmc_spi_resp_type(cmd)) {
    ---
    regards
    i. A. Wolfgang Mües
    --
    Auerswald GmbH & Co. KG
    Hardware Development
    Telefon: +49 (0)5306 9219 0
    Telefax: +49 (0)5306 9219 94
    E-Mail: Wolfgang.Mues@Auerswald.de
    Web: http://www.auerswald.de
     
    --------------------------------------------------------------
    Auerswald GmbH & Co. KG, Vor den Grashöfen 1, 38162 Cremlingen
    Registriert beim AG Braunschweig HRA 13289
    p.h.G Auerswald Geschäftsführungsges. mbH
    Registriert beim AG Braunschweig HRB 7463
    Geschäftsführer: Dipl-Ing. Gerhard Auerswald
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2009-05-14 13:27    [W:0.023 / U:0.024 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site