Hi Andreas,

On 8/21/2012 19:26, Andreas Bießmann wrote:
Dear Bo Shen,

On 20.08.2012 08:32, Bo Shen wrote:
Using common spi flash operation function to replace private operation
funtion

This patch is based on http://patchwork.ozlabs.org/patch/177896/
which has been merged by Mike frysinger

Mike, do you think this is a fix? Should it go into 2012.10? Will you
take it?

Signed-off-by: Bo Shen <voice.s...@atmel.com>
---
  drivers/mtd/spi/atmel.c |   11 ++++++++---
  1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/spi/atmel.c b/drivers/mtd/spi/atmel.c
index 89ebe9d..006f6d5 100644
--- a/drivers/mtd/spi/atmel.c
+++ b/drivers/mtd/spi/atmel.c
@@ -518,13 +518,19 @@ struct spi_flash *spi_flash_probe_atmel(struct spi_slave 
*spi, u8 *idcode)
                        asf->flash.erase = dataflash_erase_p2;
                }

+               asf->flash.page_size = page_size;
+               asf->flash.sector_size = page_size;
                break;

        case DF_FAMILY_AT26F:
        case DF_FAMILY_AT26DF:
                asf->flash.read = spi_flash_cmd_read_fast;
-               asf->flash.write = dataflash_write_p2;
-               asf->flash.erase = dataflash_erase_p2;
+               asf->flash.write = spi_flash_cmd_write_multi;
+               asf->flash.erase = spi_flash_cmd_erase;
+               asf->flash.page_size = page_size;
+               asf->flash.sector_size = 4096;

why do you take fixed value for sector size here?

The fixed number fit for both AT25 and AT26 serials. So, I take it.

Actually, we can calculate it as:
asf->flash.sector_size = page_size * params->pages_per_block * params->blocks_per_sector

So, may I need to change it?


+               /* clear SPRL# bit for locked flash */
+               spi_flash_cmd_write_status(&asf->flash, 0);
                break;

        default:
@@ -532,7 +538,6 @@ struct spi_flash *spi_flash_probe_atmel(struct spi_slave 
*spi, u8 *idcode)
                goto err;
        }

-       asf->flash.sector_size = page_size;
        asf->flash.size = page_size * params->pages_per_block
                                * params->blocks_per_sector
                                * params->nr_sectors;

And here you correlate number of sectors with page size ... but we may
have page_size != sector_size for some at26 devices, aren't we?

This is from old driver and this line is moved away.
For at26 devices, it is used the fixed number 4096 for sector size.
Please take following as a reference.
---------------------------------------------
        case DF_FAMILY_AT26F:
        case DF_FAMILY_AT26DF:
                asf->flash.read = spi_flash_cmd_read_fast;
 -              asf->flash.write = dataflash_write_p2;
 -              asf->flash.erase = dataflash_erase_p2;
 +              asf->flash.write = spi_flash_cmd_write_multi;
 +              asf->flash.erase = spi_flash_cmd_erase;
 +              asf->flash.page_size = page_size;
 +              asf->flash.sector_size = 4096;
---------------------------------------------


Best regards

Andreas Bießmann


_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to