[U-Boot] [PATCH 0/2] EXYNOS5: Enable Gigabyte device GD25LQ and GD25Q64B

This patch set adds driver for Gigabyte device GD25LQ and GD25Q64B required for Snow board and enables same in config file.
Based on following patches submitted by Simon Glass: "sf: Add spi_flash_alloc() to create a new SPI flash struct" "sf: Use spi_flash_alloc() in each SPI flash driver"
Rajeshwari Shinde (2): SF: Add driver for Gigabyte device GD25LQ and GD25Q64B EXYNOS5: Enable SPI Gigabyte device.
drivers/mtd/spi/Makefile | 1 + drivers/mtd/spi/gigadevice.c | 66 ++++++++++++++++++++++++++++++++++ drivers/mtd/spi/spi_flash.c | 3 ++ drivers/mtd/spi/spi_flash_internal.h | 1 + include/configs/exynos5250-dt.h | 1 + 5 files changed, 72 insertions(+), 0 deletions(-) create mode 100644 drivers/mtd/spi/gigadevice.c

This patch adds driver for the gigabyte devices GD25LQ and GD25Q64B required for Snow Board.
Signed-off-by: Rajeshwari Shinde rajeshwari.s@samsung.com --- drivers/mtd/spi/Makefile | 1 + drivers/mtd/spi/gigadevice.c | 66 ++++++++++++++++++++++++++++++++++ drivers/mtd/spi/spi_flash.c | 3 ++ drivers/mtd/spi/spi_flash_internal.h | 1 + 4 files changed, 71 insertions(+), 0 deletions(-) create mode 100644 drivers/mtd/spi/gigadevice.c
diff --git a/drivers/mtd/spi/Makefile b/drivers/mtd/spi/Makefile index 90f8392..0af497d 100644 --- a/drivers/mtd/spi/Makefile +++ b/drivers/mtd/spi/Makefile @@ -39,6 +39,7 @@ COBJS-$(CONFIG_SPI_FLASH_STMICRO) += stmicro.o COBJS-$(CONFIG_SPI_FLASH_WINBOND) += winbond.o COBJS-$(CONFIG_SPI_FRAM_RAMTRON) += ramtron.o COBJS-$(CONFIG_SPI_M95XXX) += eeprom_m95xxx.o +COBJS-$(CONFIG_SPI_FLASH_GIGADEVICE) += gigadevice.o
COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c) diff --git a/drivers/mtd/spi/gigadevice.c b/drivers/mtd/spi/gigadevice.c new file mode 100644 index 0000000..5dbcd19 --- /dev/null +++ b/drivers/mtd/spi/gigadevice.c @@ -0,0 +1,66 @@ +/* + * Gigadevice SPI flash driver + * Copyright 2013, Samsung Electronics Co., Ltd. + * Author: Banajit Goswami banajit.g@samsung.com + * + */ + +#include <common.h> +#include <malloc.h> +#include <spi_flash.h> + +#include "spi_flash_internal.h" + +struct gigadevice_spi_flash_params { + uint16_t id; + uint16_t nr_blocks; + const char *name; +}; + +static const struct gigadevice_spi_flash_params gigadevice_spi_flash_table[] = { + { + .id = 0x6016, + .nr_blocks = 64, + .name = "GD25LQ", + }, + { + .id = 0x4017, + .nr_blocks = 128, + .name = "GD25Q64B", + }, + +}; + + +struct spi_flash *spi_flash_probe_gigadevice(struct spi_slave *spi, u8 *idcode) +{ + const struct gigadevice_spi_flash_params *params; + struct spi_flash *flash; + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(gigadevice_spi_flash_table); i++) { + params = &gigadevice_spi_flash_table[i]; + if (params->id == ((idcode[1] << 8) | idcode[2])) + break; + } + + if (i == ARRAY_SIZE(gigadevice_spi_flash_table)) { + debug("SF: Unsupported Gigadevice ID %02x%02x\n", + idcode[1], idcode[2]); + return NULL; + } + + flash = spi_flash_alloc_base(spi, params->name); + if (!flash) { + debug("SF: Failed to allocate memory\n"); + return NULL; + } + /* Assuming power-of-two page size initially. */ + flash->page_size = 256; + /* sector_size = page_size * pages_per_sector */ + flash->sector_size = flash->page_size * 16; + /* size = sector_size * sector_per_block * number of blocks */ + flash->size = flash->sector_size * 16 * params->nr_blocks; + + return flash; +} diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 17f3d3c..ee05171 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -305,6 +305,9 @@ static const struct { #ifdef CONFIG_SPI_FLASH_EON { 0, 0x1c, spi_flash_probe_eon, }, #endif +#ifdef CONFIG_SPI_FLASH_GIGADEVICE + { 0, 0xc8, spi_flash_probe_gigadevice, }, +#endif #ifdef CONFIG_SPI_FLASH_MACRONIX { 0, 0xc2, spi_flash_probe_macronix, }, #endif diff --git a/drivers/mtd/spi/spi_flash_internal.h b/drivers/mtd/spi/spi_flash_internal.h index 141cfa8..e0afbc3 100644 --- a/drivers/mtd/spi/spi_flash_internal.h +++ b/drivers/mtd/spi/spi_flash_internal.h @@ -106,3 +106,4 @@ struct spi_flash *spi_flash_probe_sst(struct spi_slave *spi, u8 *idcode); struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 *idcode); struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode); struct spi_flash *spi_fram_probe_ramtron(struct spi_slave *spi, u8 *idcode); +struct spi_flash *spi_flash_probe_gigadevice(struct spi_slave *spi, u8 *idcode);

Hi Rajeshwari,
On Wed, Jan 16, 2013 at 9:39 PM, Rajeshwari Shinde rajeshwari.s@samsung.com wrote:
This patch adds driver for the gigabyte devices GD25LQ and GD25Q64B required for Snow Board.
Signed-off-by: Rajeshwari Shinde rajeshwari.s@samsung.com
OK with a few nits below.
drivers/mtd/spi/Makefile | 1 + drivers/mtd/spi/gigadevice.c | 66 ++++++++++++++++++++++++++++++++++ drivers/mtd/spi/spi_flash.c | 3 ++ drivers/mtd/spi/spi_flash_internal.h | 1 + 4 files changed, 71 insertions(+), 0 deletions(-) create mode 100644 drivers/mtd/spi/gigadevice.c
diff --git a/drivers/mtd/spi/Makefile b/drivers/mtd/spi/Makefile index 90f8392..0af497d 100644 --- a/drivers/mtd/spi/Makefile +++ b/drivers/mtd/spi/Makefile @@ -39,6 +39,7 @@ COBJS-$(CONFIG_SPI_FLASH_STMICRO) += stmicro.o COBJS-$(CONFIG_SPI_FLASH_WINBOND) += winbond.o COBJS-$(CONFIG_SPI_FRAM_RAMTRON) += ramtron.o COBJS-$(CONFIG_SPI_M95XXX) += eeprom_m95xxx.o +COBJS-$(CONFIG_SPI_FLASH_GIGADEVICE) += gigadevice.o
alphabetical order
COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c) diff --git a/drivers/mtd/spi/gigadevice.c b/drivers/mtd/spi/gigadevice.c new file mode 100644 index 0000000..5dbcd19 --- /dev/null +++ b/drivers/mtd/spi/gigadevice.c @@ -0,0 +1,66 @@ +/*
- Gigadevice SPI flash driver
- Copyright 2013, Samsung Electronics Co., Ltd.
- Author: Banajit Goswami banajit.g@samsung.com
Should have rest of U-Boot copyright header
- */
+#include <common.h> +#include <malloc.h> +#include <spi_flash.h>
+#include "spi_flash_internal.h"
+struct gigadevice_spi_flash_params {
uint16_t id;
uint16_t nr_blocks;
const char *name;
+};
+static const struct gigadevice_spi_flash_params gigadevice_spi_flash_table[] = {
{
.id = 0x6016,
.nr_blocks = 64,
.name = "GD25LQ",
},
{
.id = 0x4017,
.nr_blocks = 128,
.name = "GD25Q64B",
},
remove blank line here I think
+};
and here
+struct spi_flash *spi_flash_probe_gigadevice(struct spi_slave *spi, u8 *idcode) +{
const struct gigadevice_spi_flash_params *params;
struct spi_flash *flash;
unsigned int i;
for (i = 0; i < ARRAY_SIZE(gigadevice_spi_flash_table); i++) {
params = &gigadevice_spi_flash_table[i];
if (params->id == ((idcode[1] << 8) | idcode[2]))
break;
}
if (i == ARRAY_SIZE(gigadevice_spi_flash_table)) {
debug("SF: Unsupported Gigadevice ID %02x%02x\n",
idcode[1], idcode[2]);
return NULL;
}
flash = spi_flash_alloc_base(spi, params->name);
if (!flash) {
debug("SF: Failed to allocate memory\n");
return NULL;
}
/* Assuming power-of-two page size initially. */
What does this comment mean? Remove it?
flash->page_size = 256;
/* sector_size = page_size * pages_per_sector */
flash->sector_size = flash->page_size * 16;
/* size = sector_size * sector_per_block * number of blocks */
flash->size = flash->sector_size * 16 * params->nr_blocks;
return flash;
+} diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 17f3d3c..ee05171 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -305,6 +305,9 @@ static const struct { #ifdef CONFIG_SPI_FLASH_EON { 0, 0x1c, spi_flash_probe_eon, }, #endif +#ifdef CONFIG_SPI_FLASH_GIGADEVICE
{ 0, 0xc8, spi_flash_probe_gigadevice, },
+#endif #ifdef CONFIG_SPI_FLASH_MACRONIX { 0, 0xc2, spi_flash_probe_macronix, }, #endif diff --git a/drivers/mtd/spi/spi_flash_internal.h b/drivers/mtd/spi/spi_flash_internal.h index 141cfa8..e0afbc3 100644 --- a/drivers/mtd/spi/spi_flash_internal.h +++ b/drivers/mtd/spi/spi_flash_internal.h @@ -106,3 +106,4 @@ struct spi_flash *spi_flash_probe_sst(struct spi_slave *spi, u8 *idcode); struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 *idcode); struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode); struct spi_flash *spi_fram_probe_ramtron(struct spi_slave *spi, u8 *idcode);
+struct spi_flash *spi_flash_probe_gigadevice(struct spi_slave *spi, u8 *idcode);
1.7.4.4
Regards, Simon

This patch enables gigabyte device for SMDK5250.
Signed-off-by: Rajeshwari Shinde rajeshwari.s@samsung.com --- include/configs/exynos5250-dt.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/include/configs/exynos5250-dt.h b/include/configs/exynos5250-dt.h index cabd2f2..a01fb96 100644 --- a/include/configs/exynos5250-dt.h +++ b/include/configs/exynos5250-dt.h @@ -265,6 +265,7 @@ #define CONFIG_CMD_SF #define CONFIG_CMD_SPI #define CONFIG_SPI_FLASH_WINBOND +#define CONFIG_SPI_FLASH_GIGADEVICE #define CONFIG_SF_DEFAULT_MODE SPI_MODE_0 #define CONFIG_SF_DEFAULT_SPEED 50000000 #define EXYNOS5_SPI_NUM_CONTROLLERS 5

On Wed, Jan 16, 2013 at 9:39 PM, Rajeshwari Shinde rajeshwari.s@samsung.com wrote:
This patch enables gigabyte device for SMDK5250.
Signed-off-by: Rajeshwari Shinde rajeshwari.s@samsung.com
Acked-by: Simon Glass sjg@chromium.org
include/configs/exynos5250-dt.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/include/configs/exynos5250-dt.h b/include/configs/exynos5250-dt.h index cabd2f2..a01fb96 100644 --- a/include/configs/exynos5250-dt.h +++ b/include/configs/exynos5250-dt.h @@ -265,6 +265,7 @@ #define CONFIG_CMD_SF #define CONFIG_CMD_SPI #define CONFIG_SPI_FLASH_WINBOND +#define CONFIG_SPI_FLASH_GIGADEVICE #define CONFIG_SF_DEFAULT_MODE SPI_MODE_0 #define CONFIG_SF_DEFAULT_SPEED 50000000
#define EXYNOS5_SPI_NUM_CONTROLLERS 5
1.7.4.4
participants (2)
-
Rajeshwari Shinde
-
Simon Glass