Re: [U-Boot] [PATCH v4] dm: sf: Add Atmel DataFlash spi flash driver

2015-05-17 Thread Jagan Teki
On 15 May 2015 at 07:49, Wang Haikun haikun.w...@freescale.com wrote:
 On 5/14/2015 6:50 PM, Jagan Teki wrote:
 On 14 May 2015 at 14:57, Haikun Wang haikun.w...@freescale.com wrote:
 Atmel DataFlash chips have commands different from common spi
 flash commands.
 Atmel DataFlash also have special page-size.
 This driver add support for accessing Atmel DataFlash.
 It is based on the Driver Model.
 Example:
 = sf probe 1:0
 SPI DataFlash: Detected AT45DB021B with page size 264 Bytes, erase size 264 
 Bytes, total 264 KiB, revision d
 = sf erase 0 42000
 SF: 270336 bytes @ 0x0 Erased: OK
 = mw.l 8200 45444342 2
 = sf write 8200 0 42000
 SF: 270336 bytes @ 0x0 Written: OK
 = sf read 8300 0 42000
 SF: 270336 bytes @ 0x0 Read: OK
 = cmp.b 8200 8300 42000
 Total of 270336 byte(s) were the same

 Signed-off-by: Haikun Wang haikun.w...@freescale.com
 ---
 Verified with AT45DB021B on LS1021AQDS.

 Changes in v4:
 - Use dev_get_priv and dev_get_uclass_priv
 - Add test log to commit message

 Changes in v3:
 - 1. Rename file spi_dataflash.c to sf_dataflash.c
 - 2. Add comment for array dataflash_data

 Changes in v2:
 - 1. Correct comment style
 - 2. Use get_timer in dataflash_waitready to check whether timeout
 - 3. Remove struct spi_flash * in struct dataflash, and get it from 
 udevice-uclass_priv
 - 4. Replace spi_flash_write_common with spi_flash_cmd_write
 - 5. Replace spi_flash_read with spi_flash_cmd_read
 - 6. Change type of varible status form char to u8 in dataflash_status
 - 7. Change add_dataflash's argument type due to change 3
 - 8. Add claim_bus and release_bus in erase/write/read due to change 4  5

 Changes in v1: None
   drivers/mtd/spi/Makefile   |   1 +
   drivers/mtd/spi/sf_dataflash.c | 711 
 +
   2 files changed, 712 insertions(+)
   create mode 100644 drivers/mtd/spi/sf_dataflash.c

 diff --git a/drivers/mtd/spi/Makefile b/drivers/mtd/spi/Makefile
 index c61b784..8adec3d 100644
 --- a/drivers/mtd/spi/Makefile
 +++ b/drivers/mtd/spi/Makefile
 @@ -15,6 +15,7 @@ endif
   #ifndef CONFIG_DM_SPI
   obj-$(CONFIG_SPI_FLASH) += sf_probe.o
   #endif
 +obj-$(CONFIG_DM_SF_DATAFLASH) += sf_dataflash.o

 This looks confuse to me,  CONFIG_SF_DATAFLASH looks simpler.
 Fine.

 For long run all the driver stuff could move to DM, no need to specify
 explicitly.

 BTW:
 Did you define this any board config?
 I will add it to LS1021AQDS board config and submit a separate patch.

Can you please send the patch as well, I will apply both at once.

Applying new feature driver with proper usage in particular board config
with well tested - make me more confident to apply [for new feature-list]

thanks!
-- 
Jagan Teki,
Openedev.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v4] dm: sf: Add Atmel DataFlash spi flash driver

2015-05-14 Thread Wang Haikun
On 5/14/2015 6:50 PM, Jagan Teki wrote:
 On 14 May 2015 at 14:57, Haikun Wang haikun.w...@freescale.com wrote:
 Atmel DataFlash chips have commands different from common spi
 flash commands.
 Atmel DataFlash also have special page-size.
 This driver add support for accessing Atmel DataFlash.
 It is based on the Driver Model.
 Example:
 = sf probe 1:0
 SPI DataFlash: Detected AT45DB021B with page size 264 Bytes, erase size 264 
 Bytes, total 264 KiB, revision d
 = sf erase 0 42000
 SF: 270336 bytes @ 0x0 Erased: OK
 = mw.l 8200 45444342 2
 = sf write 8200 0 42000
 SF: 270336 bytes @ 0x0 Written: OK
 = sf read 8300 0 42000
 SF: 270336 bytes @ 0x0 Read: OK
 = cmp.b 8200 8300 42000
 Total of 270336 byte(s) were the same

 Signed-off-by: Haikun Wang haikun.w...@freescale.com
 ---
 Verified with AT45DB021B on LS1021AQDS.

 Changes in v4:
 - Use dev_get_priv and dev_get_uclass_priv
 - Add test log to commit message

 Changes in v3:
 - 1. Rename file spi_dataflash.c to sf_dataflash.c
 - 2. Add comment for array dataflash_data

 Changes in v2:
 - 1. Correct comment style
 - 2. Use get_timer in dataflash_waitready to check whether timeout
 - 3. Remove struct spi_flash * in struct dataflash, and get it from 
 udevice-uclass_priv
 - 4. Replace spi_flash_write_common with spi_flash_cmd_write
 - 5. Replace spi_flash_read with spi_flash_cmd_read
 - 6. Change type of varible status form char to u8 in dataflash_status
 - 7. Change add_dataflash's argument type due to change 3
 - 8. Add claim_bus and release_bus in erase/write/read due to change 4  5

 Changes in v1: None
   drivers/mtd/spi/Makefile   |   1 +
   drivers/mtd/spi/sf_dataflash.c | 711 
 +
   2 files changed, 712 insertions(+)
   create mode 100644 drivers/mtd/spi/sf_dataflash.c

 diff --git a/drivers/mtd/spi/Makefile b/drivers/mtd/spi/Makefile
 index c61b784..8adec3d 100644
 --- a/drivers/mtd/spi/Makefile
 +++ b/drivers/mtd/spi/Makefile
 @@ -15,6 +15,7 @@ endif
   #ifndef CONFIG_DM_SPI
   obj-$(CONFIG_SPI_FLASH) += sf_probe.o
   #endif
 +obj-$(CONFIG_DM_SF_DATAFLASH) += sf_dataflash.o

 This looks confuse to me,  CONFIG_SF_DATAFLASH looks simpler.
Fine.

 For long run all the driver stuff could move to DM, no need to specify
 explicitly.

 BTW:
 Did you define this any board config?
I will add it to LS1021AQDS board config and submit a separate patch.

[snip]

Best regards,
Wang Haikun

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


Re: [U-Boot] [PATCH v4] dm: sf: Add Atmel DataFlash spi flash driver

2015-05-14 Thread Jagan Teki
On 14 May 2015 at 14:57, Haikun Wang haikun.w...@freescale.com wrote:
 Atmel DataFlash chips have commands different from common spi
 flash commands.
 Atmel DataFlash also have special page-size.
 This driver add support for accessing Atmel DataFlash.
 It is based on the Driver Model.
 Example:
 = sf probe 1:0
 SPI DataFlash: Detected AT45DB021B with page size 264 Bytes, erase size 264 
 Bytes, total 264 KiB, revision d
 = sf erase 0 42000
 SF: 270336 bytes @ 0x0 Erased: OK
 = mw.l 8200 45444342 2
 = sf write 8200 0 42000
 SF: 270336 bytes @ 0x0 Written: OK
 = sf read 8300 0 42000
 SF: 270336 bytes @ 0x0 Read: OK
 = cmp.b 8200 8300 42000
 Total of 270336 byte(s) were the same

 Signed-off-by: Haikun Wang haikun.w...@freescale.com
 ---
 Verified with AT45DB021B on LS1021AQDS.

 Changes in v4:
 - Use dev_get_priv and dev_get_uclass_priv
 - Add test log to commit message

 Changes in v3:
 - 1. Rename file spi_dataflash.c to sf_dataflash.c
 - 2. Add comment for array dataflash_data

 Changes in v2:
 - 1. Correct comment style
 - 2. Use get_timer in dataflash_waitready to check whether timeout
 - 3. Remove struct spi_flash * in struct dataflash, and get it from 
 udevice-uclass_priv
 - 4. Replace spi_flash_write_common with spi_flash_cmd_write
 - 5. Replace spi_flash_read with spi_flash_cmd_read
 - 6. Change type of varible status form char to u8 in dataflash_status
 - 7. Change add_dataflash's argument type due to change 3
 - 8. Add claim_bus and release_bus in erase/write/read due to change 4  5

 Changes in v1: None
  drivers/mtd/spi/Makefile   |   1 +
  drivers/mtd/spi/sf_dataflash.c | 711 
 +
  2 files changed, 712 insertions(+)
  create mode 100644 drivers/mtd/spi/sf_dataflash.c

 diff --git a/drivers/mtd/spi/Makefile b/drivers/mtd/spi/Makefile
 index c61b784..8adec3d 100644
 --- a/drivers/mtd/spi/Makefile
 +++ b/drivers/mtd/spi/Makefile
 @@ -15,6 +15,7 @@ endif
  #ifndef CONFIG_DM_SPI
  obj-$(CONFIG_SPI_FLASH) += sf_probe.o
  #endif
 +obj-$(CONFIG_DM_SF_DATAFLASH) += sf_dataflash.o

This looks confuse to me,  CONFIG_SF_DATAFLASH looks simpler.

For long run all the driver stuff could move to DM, no need to specify
explicitly.

BTW:
Did you define this any board config?

  obj-$(CONFIG_CMD_SF) += sf.o
  obj-$(CONFIG_SPI_FLASH) += sf_ops.o sf_params.o
  obj-$(CONFIG_SPI_FLASH_SANDBOX) += sandbox.o
 diff --git a/drivers/mtd/spi/sf_dataflash.c b/drivers/mtd/spi/sf_dataflash.c
 new file mode 100644
 index 000..d287db8
 --- /dev/null
 +++ b/drivers/mtd/spi/sf_dataflash.c
 @@ -0,0 +1,711 @@
 +/*
 + *
 + * Atmel DataFlash probing
 + *
 + * Copyright (C) 2004-2009, 2015 Freescale Semiconductor, Inc.
 + * Haikun Wang (haikun.w...@freescale.com)
 + *
 + * SPDX-License-Identifier:GPL-2.0+
 +*/
 +#include common.h
 +#include dm.h
 +#include errno.h
 +#include fdtdec.h
 +#include spi.h
 +#include spi_flash.h
 +#include div64.h
 +#include linux/err.h
 +#include linux/math64.h
 +
 +#include sf_internal.h
 +
 +/*
 + * DataFlash is a kind of SPI flash.  Most AT45 chips have two buffers in
 + * each chip, which may be used for double buffered I/O; but this driver
 + * doesn't (yet) use these for any kind of i/o overlap or prefetching.
 + *
 + * Sometimes DataFlash is packaged in MMC-format cards, although the
 + * MMC stack can't (yet?) distinguish between MMC and DataFlash
 + * protocols during enumeration.
 + */
 +
 +/* reads can bypass the buffers */
 +#define OP_READ_CONTINUOUS 0xE8
 +#define OP_READ_PAGE   0xD2
 +
 +/* group B requests can run even while status reports busy */
 +#define OP_READ_STATUS 0xD7/* group B */
 +
 +/* move data between host and buffer */
 +#define OP_READ_BUFFER10xD4/* group B */
 +#define OP_READ_BUFFER20xD6/* group B */
 +#define OP_WRITE_BUFFER1   0x84/* group B */
 +#define OP_WRITE_BUFFER2   0x87/* group B */
 +
 +/* erasing flash */
 +#define OP_ERASE_PAGE  0x81
 +#define OP_ERASE_BLOCK 0x50
 +
 +/* move data between buffer and flash */
 +#define OP_TRANSFER_BUF1   0x53
 +#define OP_TRANSFER_BUF2   0x55
 +#define OP_MREAD_BUFFER1   0xD4
 +#define OP_MREAD_BUFFER2   0xD6
 +#define OP_MWERASE_BUFFER1 0x83
 +#define OP_MWERASE_BUFFER2 0x86
 +#define OP_MWRITE_BUFFER1  0x88/* sector must be pre-erased */
 +#define OP_MWRITE_BUFFER2  0x89/* sector must be pre-erased */
 +
 +/* write to buffer, then write-erase to flash */
 +#define OP_PROGRAM_VIA_BUF10x82
 +#define OP_PROGRAM_VIA_BUF20x85
 +
 +/* compare buffer to flash */
 +#define OP_COMPARE_BUF10x60
 +#define OP_COMPARE_BUF20x61
 +
 +/* read flash to buffer, then write-erase to flash */
 +#define OP_REWRITE_VIA_BUF10x58
 +#define OP_REWRITE_VIA_BUF20x59
 +
 +/*
 + * newer chips report JEDEC manufacturer and device IDs; chip
 + * serial number and OTP bits; and per-sector