lkml.org 
[lkml]   [2008]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 31/46] SCSI: qla2xxx: Correct Atmel flash-part handling.
    2.6.27-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Lalit Chandivade <lalit.chandivade@qlogic.com>

    commit 821b3996001508e872582dcafc7575021f122728 upstream.

    Use correct block size (4K) for erase command 0x20 for Atmel
    Flash. Use dword addresses for determining sector boundary.

    Signed-off-by: Lalit Chandivade <lalit.chandivade@qlogic.com>
    Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/scsi/qla2xxx/qla_def.h | 1 -
    drivers/scsi/qla2xxx/qla_sup.c | 19 +++++++------------
    2 files changed, 7 insertions(+), 13 deletions(-)

    --- a/drivers/scsi/qla2xxx/qla_def.h
    +++ b/drivers/scsi/qla2xxx/qla_def.h
    @@ -2546,7 +2546,6 @@ typedef struct scsi_qla_host {
    uint8_t fcode_revision[16];
    uint32_t fw_revision[4];

    - uint16_t fdt_odd_index;
    uint32_t fdt_wrt_disable;
    uint32_t fdt_erase_cmd;
    uint32_t fdt_block_size;
    --- a/drivers/scsi/qla2xxx/qla_sup.c
    +++ b/drivers/scsi/qla2xxx/qla_sup.c
    @@ -546,6 +546,7 @@ qla24xx_get_flash_manufacturer(scsi_qla_
    void
    qla2xxx_get_flash_info(scsi_qla_host_t *ha)
    {
    +#define FLASH_BLK_SIZE_4K 0x1000
    #define FLASH_BLK_SIZE_32K 0x8000
    #define FLASH_BLK_SIZE_64K 0x10000
    uint16_t cnt, chksum;
    @@ -577,7 +578,6 @@ qla2xxx_get_flash_info(scsi_qla_host_t *
    goto no_flash_data;
    }

    - ha->fdt_odd_index = le16_to_cpu(fdt->man_id) == 0x1f;
    ha->fdt_wrt_disable = fdt->wrt_disable_bits;
    ha->fdt_erase_cmd = flash_conf_to_access_addr(0x0300 | fdt->erase_cmd);
    ha->fdt_block_size = le32_to_cpu(fdt->block_size);
    @@ -590,10 +590,10 @@ qla2xxx_get_flash_info(scsi_qla_host_t *
    }

    DEBUG2(qla_printk(KERN_DEBUG, ha, "Flash[FDT]: (0x%x/0x%x) erase=0x%x "
    - "pro=%x upro=%x idx=%d wrtd=0x%x blk=0x%x.\n",
    + "pro=%x upro=%x wrtd=0x%x blk=0x%x.\n",
    le16_to_cpu(fdt->man_id), le16_to_cpu(fdt->id), ha->fdt_erase_cmd,
    ha->fdt_protect_sec_cmd, ha->fdt_unprotect_sec_cmd,
    - ha->fdt_odd_index, ha->fdt_wrt_disable, ha->fdt_block_size));
    + ha->fdt_wrt_disable, ha->fdt_block_size));
    return;

    no_flash_data:
    @@ -614,8 +614,7 @@ no_flash_data:
    ha->fdt_block_size = FLASH_BLK_SIZE_64K;
    break;
    case 0x1f: /* Atmel 26DF081A. */
    - ha->fdt_odd_index = 1;
    - ha->fdt_block_size = FLASH_BLK_SIZE_64K;
    + ha->fdt_block_size = FLASH_BLK_SIZE_4K;
    ha->fdt_erase_cmd = flash_conf_to_access_addr(0x0320);
    ha->fdt_unprotect_sec_cmd = flash_conf_to_access_addr(0x0339);
    ha->fdt_protect_sec_cmd = flash_conf_to_access_addr(0x0336);
    @@ -710,13 +709,9 @@ qla24xx_write_flash_data(scsi_qla_host_t
    qla24xx_unprotect_flash(ha);

    for (liter = 0; liter < dwords; liter++, faddr++, dwptr++) {
    - if (ha->fdt_odd_index) {
    - findex = faddr << 2;
    - fdata = findex & sec_mask;
    - } else {
    - findex = faddr;
    - fdata = (findex & sec_mask) << 2;
    - }
    +
    + findex = faddr;
    + fdata = (findex & sec_mask) << 2;

    /* Are we at the beginning of a sector? */
    if ((findex & rest_addr) == 0) {
    --


    \
     
     \ /
      Last update: 2008-11-17 08:37    [W:0.028 / U:0.472 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site