* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
@ 2007-09-28 11:29 Vasiliy Leoenenko
2007-09-28 14:47 ` Wolfgang Denk
2008-04-21 7:02 ` Stefan Roese
0 siblings, 2 replies; 25+ messages in thread
From: Vasiliy Leoenenko @ 2007-09-28 11:29 UTC (permalink / raw)
To: u-boot
Hi Wolfgang,
> Your patch was corrupted by your mailer which wrapped long lines. It
> cannot be applied.
Thank you very much for your reply. Gmail wrapped long lines. So I changed mail box. This is the second attempt.
The patch was verified on different kinds of NOR using Mainstone II platform - no issues are found on u-boot (versions 1.3.0-rc1 and 1.3.0-rc2).
Any comments and suggestions are welcome.
Thanks,
Signed-off-by: Vasiliy Leonenko <vasiliy.leonenko@mail.ru>
Signed-off-by: Alexey Korolev <akorolex@gmail.com>
====================================================
--- u-boot-1.3.0-rc1.base/drivers/cfi_flash.c 2007-09-07 19:43:36.000000000 +0400
+++ u-boot-1.3.0-rc1/drivers/cfi_flash.c 2007-09-24 16:07:10.000000000 +0400
@@ -74,6 +74,7 @@
#define FLASH_CMD_PROTECT_CLEAR 0xD0
#define FLASH_CMD_CLEAR_STATUS 0x50
#define FLASH_CMD_WRITE_TO_BUFFER 0xE8
+#define FLASH_CMD_WRITE_TO_BUFFER_EXT 0xE9
#define FLASH_CMD_WRITE_BUFFER_CONFIRM 0xD0
#define FLASH_STATUS_DONE 0x80
@@ -136,6 +137,7 @@
#define CFI_CMDSET_MITSU_STANDARD 256
#define CFI_CMDSET_MITSU_EXTENDED 257
#define CFI_CMDSET_SST 258
+#define CFI_CMDSET_INTEL_PROG_REGIONS 512
#ifdef CFG_FLASH_CFI_AMD_RESET /* needed for STM_ID_29W320DB on UC100 */
# undef FLASH_CMD_RESET
@@ -184,8 +186,8 @@ flash_info_t flash_info[CFG_MAX_FLASH_BA
typedef unsigned long flash_sect_t;
static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c);
-static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf);
-static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
+static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf);
+static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, ulong cmd);
static void flash_unlock_seq (flash_info_t * info, flash_sect_t sect);
static int flash_isequal (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
static int flash_isset (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
@@ -474,6 +476,7 @@ int flash_erase (flash_info_t * info, in
for (sect = s_first; sect <= s_last; sect++) {
if (info->protect[sect] == 0) { /* not protected */
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
flash_write_cmd (info, sect, 0, FLASH_CMD_CLEAR_STATUS);
@@ -522,6 +525,9 @@ void flash_print_info (flash_info_t * in
info->size >> 20, info->sector_count);
printf (" ");
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
+ printf ("Intel Prog Regions");
+ break;
case CFI_CMDSET_INTEL_STANDARD:
printf ("Intel Standard");
break;
@@ -771,6 +777,7 @@ static int flash_is_busy (flash_info_t *
int retval;
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
retval = !flash_isset (info, sect, 0, FLASH_STATUS_DONE);
@@ -825,6 +832,7 @@ static int flash_full_status_check (flas
retcode = flash_status_check (info, sector, tout, prompt);
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
if ((retcode == ERR_OK)
@@ -903,7 +911,7 @@ static void flash_add_byte (flash_info_t
/*-----------------------------------------------------------------------
* make a proper sized command based on the port and chip widths
*/
-static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf)
+static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf)
{
int i;
uchar *cp = (uchar *) cmdbuf;
@@ -913,13 +921,13 @@ static void flash_make_cmd (flash_info_t
#else
for (i = 1; i <= info->portwidth; i++)
#endif
- *cp++ = (i & (info->chipwidth - 1)) ? '\0' : cmd;
+ *cp++ = (i > info->chipwidth) ? '\0' : *((uchar *)&cmd + info->portwidth - i);
}
/*
* Write a proper sized command to the correct address
*/
-static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd)
+static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, ulong cmd)
{
volatile cfiptr_t addr;
@@ -1090,6 +1098,7 @@ static void flash_read_jedec_ids (flash_
info->device_id2 = 0;
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
flash_write_cmd(info, 0, 0, FLASH_CMD_RESET);
@@ -1209,6 +1218,7 @@ ulong flash_get_size (ulong base, int ba
flash_printqry (info, 0);
#endif
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
default:
@@ -1289,6 +1299,7 @@ ulong flash_get_size (ulong base, int ba
* Only read protection status from supported devices (intel...)
*/
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
info->protect[sect_cnt] =
@@ -1377,6 +1388,7 @@ static int flash_write_cfiword (flash_in
flag = disable_interrupts ();
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
flash_write_cmd (info, 0, 0, FLASH_CMD_CLEAR_STATUS);
@@ -1422,15 +1434,19 @@ static int flash_write_cfibuffer (flash_
int retcode;
volatile cfiptr_t src;
volatile cfiptr_t dst;
+ uchar write_cmd;
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
src.cp = cp;
dst.cp = (uchar *) dest;
sector = find_sector (info, dest);
+ write_cmd = (info->vendor == CFI_CMDSET_INTEL_PROG_REGIONS) ?
+ FLASH_CMD_WRITE_TO_BUFFER_EXT : FLASH_CMD_WRITE_TO_BUFFER;
flash_write_cmd (info, sector, 0, FLASH_CMD_CLEAR_STATUS);
- flash_write_cmd (info, sector, 0, FLASH_CMD_WRITE_TO_BUFFER);
+ flash_write_cmd (info, sector, 0, write_cmd);
if ((retcode = flash_status_check (info, sector, info->buffer_write_tout,
"write to buffer")) == ERR_OK) {
/* reduce the number of loops by the width of the port */
@@ -1451,7 +1467,7 @@ static int flash_write_cfibuffer (flash_
return ERR_INVAL;
break;
}
- flash_write_cmd (info, sector, 0, (uchar) cnt - 1);
+ flash_write_cmd (info, sector, 0, cnt - 1);
while (cnt-- > 0) {
switch (info->portwidth) {
case FLASH_CFI_8BIT:
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2007-09-28 11:29 [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2) Vasiliy Leoenenko
@ 2007-09-28 14:47 ` Wolfgang Denk
2007-09-28 15:47 ` Alexey Korolev
2008-04-21 7:02 ` Stefan Roese
1 sibling, 1 reply; 25+ messages in thread
From: Wolfgang Denk @ 2007-09-28 14:47 UTC (permalink / raw)
To: u-boot
Dear Vasiliy,
in message <E1IbE2e-000EEu-00.vasiliy-leonenko-mail-ru@f97.mail.ru> you wrote:
>
> > Your patch was corrupted by your mailer which wrapped long lines. It
> > cannot be applied.
> Thank you very much for your reply. Gmail wrapped long lines. So I changed mail box. This is the second attempt.
>
> The patch was verified on different kinds of NOR using Mainstone II platform - no issues are found on u-boot (versions 1.3.0-rc1 and 1.3.0-rc2).
>
> Any comments and suggestions are welcome.
I'm a bit scared about your patch. Which tools do you use to create it?
> @@ -184,8 +186,8 @@ flash_info_t flash_info[CFG_MAX_FLASH_BA
> typedef unsigned long flash_sect_t;
>
> static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c);
> -static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf);
> -static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
> +static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf);
> +static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, ulong cmd);
> static void flash_unlock_seq (flash_info_t * info, flash_sect_t sect);
> static int flash_isequal (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
> static int flash_isset (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
I don't see any differences here. Why is this flagged as a change?
...
> @@ -903,7 +911,7 @@ static void flash_add_byte (flash_info_t
> /*-----------------------------------------------------------------------
> * make a proper sized command based on the port and chip widths
> */
> -static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf)
> +static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf)
> {
> int i;
> uchar *cp = (uchar *) cmdbuf;
Ditto.
> @@ -913,13 +921,13 @@ static void flash_make_cmd (flash_info_t
...
>
> /*
> * Write a proper sized command to the correct address
> */
> -static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd)
> +static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, ulong cmd)
Ditto.
This smells somewhat fishy. Do you have an explanation what's going on
here?
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
2000 pounds of chinese soup = 1 Won Ton
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2007-09-28 14:47 ` Wolfgang Denk
@ 2007-09-28 15:47 ` Alexey Korolev
2007-09-28 16:40 ` Wolfgang Denk
0 siblings, 1 reply; 25+ messages in thread
From: Alexey Korolev @ 2007-09-28 15:47 UTC (permalink / raw)
To: u-boot
Hi Wolfgang
>
> I'm a bit scared about your patch. Which tools do you use to create it?
Vasiliy used a "diff" tool.
> > @@ -184,8 +186,8 @@ flash_info_t flash_info[CFG_MAX_FLASH_BA
> > typedef unsigned long flash_sect_t;
> >
> > static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c);
> > -static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf);
> > -static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
> > +static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf);
> > +static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, ulong cmd);
> > static void flash_unlock_seq (flash_info_t * info, flash_sect_t sect);
> > static int flash_isequal (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
> > static int flash_isset (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
>
> I don't see any differences here. Why is this flagged as a change?
The difference is in type of "cmd" variable.
...
> This smells somewhat fishy. Do you have an explanation what's going on
> here?
Let me explain.
M18 flash is a flash with programming regions.
It writes data by pages using buffered write method. According to the
specification of buffered prog. for NOR chips. We should write CMD to
start data write, length of buffer in words, buffer, and write confirm
command.
Unlike other NOR chips M18 has large programming buffer. The buffer
size for M18 is 1024bytes i.e. 512 word.
In existing code we transfer commands and buffer length using
flash_write_cmd() and flash_make_cmd functions. The input type for cmd
variable is uchar in these functions. If we want to write more than
255 words we will have write error.
To avoid these issues we extended these two functions little bit to
deal with larger commands.
Kind regards,
Alexey
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2007-09-28 15:47 ` Alexey Korolev
@ 2007-09-28 16:40 ` Wolfgang Denk
0 siblings, 0 replies; 25+ messages in thread
From: Wolfgang Denk @ 2007-09-28 16:40 UTC (permalink / raw)
To: u-boot
Dear Alexey,
in message <202cde0e0709280847r26684293yd0b9039c8254b75b@mail.gmail.com> you wrote:
>
> > > -static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf);
> > > -static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
> > > +static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf);
> > > +static void flash_write_cmd (flash_info_t * info, flash_sect_t sect, uint offset, ulong cmd);
...
> > I don't see any differences here. Why is this flagged as a change?
> The difference is in type of "cmd" variable.
Argh. You are right. Sorry for the noise.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"To take a significant step forward, you must make a series of finite
improvements." - Donald J. Atwood, General Motors
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2007-09-28 11:29 [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2) Vasiliy Leoenenko
2007-09-28 14:47 ` Wolfgang Denk
@ 2008-04-21 7:02 ` Stefan Roese
2008-04-23 9:42 ` Vasiliy Leoenenko
1 sibling, 1 reply; 25+ messages in thread
From: Stefan Roese @ 2008-04-21 7:02 UTC (permalink / raw)
To: u-boot
Hi Vasily,
On Friday 28 September 2007, Vasiliy Leoenenko wrote:
> > Your patch was corrupted by your mailer which wrapped long lines. It
> > cannot be applied.
>
> Thank you very much for your reply. Gmail wrapped long lines. So I changed
> mail box. This is the second attempt.
>
> The patch was verified on different kinds of NOR using Mainstone II
> platform - no issues are found on u-boot (versions 1.3.0-rc1 and
> 1.3.0-rc2).
>
> Any comments and suggestions are welcome.
Sorry, but I really forgot about this patch. Could you please resend this
patch against the current tot, since it doesn't apply cleanly anymore?
Thanks.
Best regards,
Stefan
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-21 7:02 ` Stefan Roese
@ 2008-04-23 9:42 ` Vasiliy Leoenenko
2008-04-25 6:35 ` Stefan Roese
0 siblings, 1 reply; 25+ messages in thread
From: Vasiliy Leoenenko @ 2008-04-23 9:42 UTC (permalink / raw)
To: u-boot
Hi, Stefan
> Sorry, but I really forgot about this patch. Could you please resend this
> patch against the current tot, since it doesn't apply cleanly anymore?
I prepared patch for u-boot version 1.3.2. Any comments and suggestions are welcome.
Code(included below) was verified on Mainstone II board with M18 flash chip.
Please don't forget to include it :)
Best regards,
Vasiliy
Signed-off-by: Vasiliy Leonenko <vasiliy.leonenko@mail.ru>
Signed-off-by: Alexey Korolev <akorolex@gmail.com>
====================================================
diff -aupNr a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
--- a/drivers/mtd/cfi_flash.c 2008-04-21 02:39:38.000000000 +0400
+++ b/drivers/mtd/cfi_flash.c 2008-04-22 16:26:29.000000000 +0400
@@ -77,6 +77,7 @@
#define FLASH_CMD_PROTECT_CLEAR 0xD0
#define FLASH_CMD_CLEAR_STATUS 0x50
#define FLASH_CMD_WRITE_TO_BUFFER 0xE8
+#define FLASH_CMD_WRITE_BUFFER_PROG 0xE9
#define FLASH_CMD_WRITE_BUFFER_CONFIRM 0xD0
#define FLASH_STATUS_DONE 0x80
@@ -136,6 +137,7 @@
#define CFI_CMDSET_MITSU_STANDARD 256
#define CFI_CMDSET_MITSU_EXTENDED 257
#define CFI_CMDSET_SST 258
+#define CFI_CMDSET_INTEL_PROG_REGIONS 512
#ifdef CFG_FLASH_CFI_AMD_RESET /* needed for STM_ID_29W320DB on UC100 */
# undef FLASH_CMD_RESET
@@ -298,7 +300,7 @@ static inline void flash_unmap(flash_inf
/*-----------------------------------------------------------------------
* make a proper sized command based on the port and chip widths
*/
-static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf)
+static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf)
{
int i;
uchar *cp = (uchar *) cmdbuf;
@@ -308,7 +310,8 @@ static void flash_make_cmd (flash_info_t
#else
for (i = 1; i <= info->portwidth; i++)
#endif
- *cp++ = (i & (info->chipwidth - 1)) ? '\0' : cmd;
+ *cp++ = (i > info->chipwidth) ? '\0' :
+ *((uchar *)&cmd + info->portwidth - i);
}
#ifdef DEBUG
@@ -422,7 +425,7 @@ static ulong flash_read_long (flash_info
* Write a proper sized command to the correct address
*/
static void flash_write_cmd (flash_info_t * info, flash_sect_t sect,
- uint offset, uchar cmd)
+ uint offset, ulong cmd)
{
void *addr;
@@ -605,6 +608,7 @@ static int flash_is_busy (flash_info_t *
int retval;
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
retval = !flash_isset (info, sect, 0, FLASH_STATUS_DONE);
@@ -664,6 +668,7 @@ static int flash_full_status_check (flas
retcode = flash_status_check (info, sector, tout, prompt);
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
if ((retcode == ERR_OK)
@@ -792,6 +797,7 @@ static int flash_write_cfiword (flash_in
flag = disable_interrupts ();
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
flash_write_cmd (info, 0, 0, FLASH_CMD_CLEAR_STATUS);
@@ -846,6 +852,7 @@ static int flash_write_cfibuffer (flash_
int flag = 0;
uint offset = 0;
unsigned int shift;
+ uchar write_cmd;
switch (info->portwidth) {
case FLASH_CFI_8BIT:
@@ -900,10 +907,13 @@ static int flash_write_cfibuffer (flash_
sector = find_sector (info, dest);
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
+ write_cmd = (info->vendor == CFI_CMDSET_INTEL_PROG_REGIONS) ?
+ FLASH_CMD_WRITE_BUFFER_PROG : FLASH_CMD_WRITE_TO_BUFFER;
flash_write_cmd (info, sector, 0, FLASH_CMD_CLEAR_STATUS);
- flash_write_cmd (info, sector, 0, FLASH_CMD_WRITE_TO_BUFFER);
+ flash_write_cmd (info, sector, 0, write_cmd);
retcode = flash_status_check (info, sector,
info->buffer_write_tout,
"write to buffer");
@@ -911,7 +921,7 @@ static int flash_write_cfibuffer (flash_
/* reduce the number of loops by the width of
* the port */
cnt = len >> shift;
- flash_write_cmd (info, sector, 0, (uchar) cnt - 1);
+ flash_write_cmd (info, sector, 0, cnt - 1);
while (cnt-- > 0) {
switch (info->portwidth) {
case FLASH_CFI_8BIT:
@@ -1038,6 +1048,7 @@ int flash_erase (flash_info_t * info, in
for (sect = s_first; sect <= s_last; sect++) {
if (info->protect[sect] == 0) { /* not protected */
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
flash_write_cmd (info, sect, 0,
@@ -1106,6 +1117,9 @@ void flash_print_info (flash_info_t * in
info->size >> 20, info->sector_count);
printf (" ");
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
+ printf ("Intel Prog Regions");
+ break;
case CFI_CMDSET_INTEL_STANDARD:
printf ("Intel Standard");
break;
@@ -1496,6 +1510,7 @@ static void flash_read_jedec_ids (flash_
info->device_id2 = 0;
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
cmdset_intel_read_jedec_ids(info);
@@ -1550,6 +1565,7 @@ static int flash_detect_legacy(ulong bas
}
switch(info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
info->cmd_reset = FLASH_CMD_RESET;
@@ -1745,6 +1761,7 @@ ulong flash_get_size (ulong base, int ba
#endif
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
cmdset_intel_init(info, &qry);
@@ -1822,6 +1839,7 @@ ulong flash_get_size (ulong base, int ba
* supported devices (intel...)
*/
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
info->protect[sect_cnt] =
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-23 9:42 ` Vasiliy Leoenenko
@ 2008-04-25 6:35 ` Stefan Roese
2008-04-29 12:14 ` Vasiliy Leoenenko
` (2 more replies)
0 siblings, 3 replies; 25+ messages in thread
From: Stefan Roese @ 2008-04-25 6:35 UTC (permalink / raw)
To: u-boot
Hi Vasily,
On Wednesday 23 April 2008, Vasiliy Leoenenko wrote:
> > Sorry, but I really forgot about this patch. Could you please resend this
> > patch against the current tot, since it doesn't apply cleanly anymore?
>
> I prepared patch for u-boot version 1.3.2. Any comments and suggestions are
> welcome. Code(included below) was verified on Mainstone II board with M18
> flash chip. Please don't forget to include it :)
Unfortunately this breaks CFI support for "normal" AMD/Spansion FLASH equipped
boards. On Sequoia with Spansion GL512 I get this after applying your patch:
U-Boot 1.3.2-01356-g8fa1348 (Apr 24 2008 - 17:05:55)
CPU: AMCC PowerPC 440EPx Rev. A at 528 MHz (PLB=132, OPB=66, EBC=66 MHz)
Security/Kasumi support
Bootstrap Option H - Boot ROM Location I2C (Addr 0x52)
Internal PCI arbiter enabled, PCI async ext clock used
32 kB I-Cache 32 kB D-Cache
Board: Sequoia - AMCC PPC440EPx Evaluation Board, Rev. F, PCI=66 MHz
I2C: ready
DTT: 1 is 29 C
DRAM: 256 MB
FLASH: CFI: Unknown command set 0x0
*** failed ***
### ERROR ### Please RESET the board ###
:-(
Please fix this and resubmit. Best would be if you could test it on a board
with Spansion CFI FLASH's too.
Thanks.
Best regards,
Stefan
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-25 6:35 ` Stefan Roese
@ 2008-04-29 12:14 ` Vasiliy Leoenenko
2008-04-29 13:02 ` Jean-Christophe PLAGNIOL-VILLARD
2008-04-29 12:15 ` Vasiliy Leoenenko
2008-04-29 12:16 ` Vasiliy Leoenenko
2 siblings, 1 reply; 25+ messages in thread
From: Vasiliy Leoenenko @ 2008-04-29 12:14 UTC (permalink / raw)
To: u-boot
Hi Stefan
> Unfortunately this breaks CFI support for "normal" AMD/Spansion FLASH equipped
> boards. On Sequoia with Spansion GL512 I get this after applying your patch:
>
> Please fix this and resubmit. Best would be if you could test it on a board
> with Spansion CFI FLASH's too.
I investigated the reproted issue and I think I've corrected it. The issue caused by my incorect conversion of cmd value in flash_make_cmd function.
So we improved the procedure of conversion. I think it will be better to sent two patches:
The first patch adds support of long commands and fixes conversion issues.
The second patch adds M18 family command set support.
Patches were tested on Mainstone II board and two flashes:
M18 portwidth=16 chipwidth=16
P30 portwidth=32 chipwidth=16
Also I tested in simulation the conversion algorithms to make sure that it works fine.
Unforunately I have no abiliy to test my patch on different borads and width Spansion CFI flash.
The next two messages will contain patches.
Best regards
Vasiliy
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-25 6:35 ` Stefan Roese
2008-04-29 12:14 ` Vasiliy Leoenenko
@ 2008-04-29 12:15 ` Vasiliy Leoenenko
2008-04-29 12:43 ` Stefan Roese
2008-04-29 13:43 ` Wolfgang Denk
2008-04-29 12:16 ` Vasiliy Leoenenko
2 siblings, 2 replies; 25+ messages in thread
From: Vasiliy Leoenenko @ 2008-04-29 12:15 UTC (permalink / raw)
To: u-boot
The first patch (support of long commands):
===================================================
diff -aupNr a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
--- a/drivers/mtd/cfi_flash.c 2008-04-21 02:39:38.000000000 +0400
+++ b/drivers/mtd/cfi_flash.c 2008-04-29 15:57:51.000000000 +0400
@@ -298,17 +298,29 @@ static inline void flash_unmap(flash_inf
/*-----------------------------------------------------------------------
* make a proper sized command based on the port and chip widths
*/
-static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf)
+static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf)
{
int i;
+ int cpofft;
uchar *cp = (uchar *) cmdbuf;
+ uchar cp_val;
#if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA)
- for (i = info->portwidth; i > 0; i--)
+ for (i = sizeof(cfiword_t); i > 0; i--)
+ {
+ cpofft=(i-1);
#else
- for (i = 1; i <= info->portwidth; i++)
-#endif
- *cp++ = (i & (info->chipwidth - 1)) ? '\0' : cmd;
+ for (i = 1; i <= sizeof(cfiword_t); i++)
+ {
+ cpofft=(sizeof(cfiword_t)-i);
+#endif
+ if( cpofft%info->chipwidth >= sizeof(ulong) || cpofft>=info->portwidth)
+ cp_val = 0x00;
+ else
+ cp_val = *((uchar*)&cmd + cpofft%info->chipwidth);
+
+ cp[i-1] = cp_val;
+ }
}
#ifdef DEBUG
@@ -422,7 +434,7 @@ static ulong flash_read_long (flash_info
* Write a proper sized command to the correct address
*/
static void flash_write_cmd (flash_info_t * info, flash_sect_t sect,
- uint offset, uchar cmd)
+ uint offset, ulong cmd)
{
void *addr;
@@ -911,7 +923,7 @@ static int flash_write_cfibuffer (flash_
/* reduce the number of loops by the width of
* the port */
cnt = len >> shift;
- flash_write_cmd (info, sector, 0, (uchar) cnt - 1);
+ flash_write_cmd (info, sector, 0, cnt - 1);
while (cnt-- > 0) {
switch (info->portwidth) {
case FLASH_CFI_8BIT:
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-25 6:35 ` Stefan Roese
2008-04-29 12:14 ` Vasiliy Leoenenko
2008-04-29 12:15 ` Vasiliy Leoenenko
@ 2008-04-29 12:16 ` Vasiliy Leoenenko
2 siblings, 0 replies; 25+ messages in thread
From: Vasiliy Leoenenko @ 2008-04-29 12:16 UTC (permalink / raw)
To: u-boot
The second patch (M18 family command set support)
================================================================
diff -aupNr a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
--- a/drivers/mtd/cfi_flash.c 2008-04-29 15:57:51.000000000 +0400
+++ b/drivers/mtd/cfi_flash.c 2008-04-29 15:59:04.000000000 +0400
@@ -76,7 +76,9 @@
#define FLASH_CMD_PROTECT_SET 0x01
#define FLASH_CMD_PROTECT_CLEAR 0xD0
#define FLASH_CMD_CLEAR_STATUS 0x50
+#define FLASH_CMD_READ_STATUS 0x70
#define FLASH_CMD_WRITE_TO_BUFFER 0xE8
+#define FLASH_CMD_WRITE_BUFFER_PROG 0xE9
#define FLASH_CMD_WRITE_BUFFER_CONFIRM 0xD0
#define FLASH_STATUS_DONE 0x80
@@ -136,6 +138,7 @@
#define CFI_CMDSET_MITSU_STANDARD 256
#define CFI_CMDSET_MITSU_EXTENDED 257
#define CFI_CMDSET_SST 258
+#define CFI_CMDSET_INTEL_PROG_REGIONS 512
#ifdef CFG_FLASH_CFI_AMD_RESET /* needed for STM_ID_29W320DB on UC100 */
# undef FLASH_CMD_RESET
@@ -617,6 +620,7 @@ static int flash_is_busy (flash_info_t *
int retval;
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
retval = !flash_isset (info, sect, 0, FLASH_STATUS_DONE);
@@ -676,6 +680,7 @@ static int flash_full_status_check (flas
retcode = flash_status_check (info, sector, tout, prompt);
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
if ((retcode == ERR_OK)
@@ -804,6 +809,7 @@ static int flash_write_cfiword (flash_in
flag = disable_interrupts ();
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
flash_write_cmd (info, 0, 0, FLASH_CMD_CLEAR_STATUS);
@@ -858,6 +864,7 @@ static int flash_write_cfibuffer (flash_
int flag = 0;
uint offset = 0;
unsigned int shift;
+ uchar write_cmd;
switch (info->portwidth) {
case FLASH_CFI_8BIT:
@@ -912,10 +919,14 @@ static int flash_write_cfibuffer (flash_
sector = find_sector (info, dest);
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
+ write_cmd = (info->vendor == CFI_CMDSET_INTEL_PROG_REGIONS) ?
+ FLASH_CMD_WRITE_BUFFER_PROG : FLASH_CMD_WRITE_TO_BUFFER;
flash_write_cmd (info, sector, 0, FLASH_CMD_CLEAR_STATUS);
- flash_write_cmd (info, sector, 0, FLASH_CMD_WRITE_TO_BUFFER);
+ flash_write_cmd (info, sector, 0, FLASH_CMD_READ_STATUS);
+ flash_write_cmd (info, sector, 0, write_cmd);
retcode = flash_status_check (info, sector,
info->buffer_write_tout,
"write to buffer");
@@ -1050,6 +1061,7 @@ int flash_erase (flash_info_t * info, in
for (sect = s_first; sect <= s_last; sect++) {
if (info->protect[sect] == 0) { /* not protected */
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
flash_write_cmd (info, sect, 0,
@@ -1118,6 +1130,9 @@ void flash_print_info (flash_info_t * in
info->size >> 20, info->sector_count);
printf (" ");
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
+ printf ("Intel Prog Regions");
+ break;
case CFI_CMDSET_INTEL_STANDARD:
printf ("Intel Standard");
break;
@@ -1508,6 +1523,7 @@ static void flash_read_jedec_ids (flash_
info->device_id2 = 0;
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
cmdset_intel_read_jedec_ids(info);
@@ -1562,6 +1578,7 @@ static int flash_detect_legacy(ulong bas
}
switch(info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
info->cmd_reset = FLASH_CMD_RESET;
@@ -1757,6 +1774,7 @@ ulong flash_get_size (ulong base, int ba
#endif
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
cmdset_intel_init(info, &qry);
@@ -1834,6 +1852,7 @@ ulong flash_get_size (ulong base, int ba
* supported devices (intel...)
*/
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
info->protect[sect_cnt] =
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-29 12:15 ` Vasiliy Leoenenko
@ 2008-04-29 12:43 ` Stefan Roese
2008-04-29 13:43 ` Wolfgang Denk
1 sibling, 0 replies; 25+ messages in thread
From: Stefan Roese @ 2008-04-29 12:43 UTC (permalink / raw)
To: u-boot
On Tuesday 29 April 2008, Vasiliy Leoenenko wrote:
> The first patch (support of long commands):
I like the idea of splitting this patch up in two separate patches/emails. But
please provide a descriptive subject and a short description that can will be
added to the git repository as commit text for each patch. And don't forget
your Signed-off-by line.
Please take a look at other patches on the list how this should be done. Best
would be if you could use the git tools to create (and send) the patches.
Thanks.
Some further remarks below:
> ===================================================
> diff -aupNr a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
> --- a/drivers/mtd/cfi_flash.c 2008-04-21 02:39:38.000000000 +0400
> +++ b/drivers/mtd/cfi_flash.c 2008-04-29 15:57:51.000000000 +0400
> @@ -298,17 +298,29 @@ static inline void flash_unmap(flash_inf
> /*-----------------------------------------------------------------------
> * make a proper sized command based on the port and chip widths
> */
> -static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf)
> +static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf)
> {
> int i;
> + int cpofft;
> uchar *cp = (uchar *) cmdbuf;
> + uchar cp_val;
>
> #if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA)
> - for (i = info->portwidth; i > 0; i--)
> + for (i = sizeof(cfiword_t); i > 0; i--)
> + {
+ for (i = sizeof(cfiword_t); i > 0; i--) {
The code down below has some coding style issues too. Please
> + cpofft=(i-1);
+ cpofft = i - 1;
The code down below has some coding style issues too. Please try to be more
careful here.
And the resulting code looks like this:
#if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA)
for (i = sizeof(cfiword_t); i > 0; i--)
{
cpofft=(i-1);
#else
for (i = 1; i <= sizeof(cfiword_t); i++)
{
cpofft=(sizeof(cfiword_t)-i);
#endif
if( cpofft%info->chipwidth >= sizeof(ulong) || cpofft>=info->portwidth)
cp_val = 0x00;
else
cp_val = *((uchar*)&cmd + cpofft%info->chipwidth);
cp[i-1] = cp_val;
}
Apart from the coding-style issues, this is getting quite complex and unclear.
At least to me. Are you sure that this can't be written differently to make
it easier to understand?
Thanks.
Best regards,
Stefan
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-29 12:14 ` Vasiliy Leoenenko
@ 2008-04-29 13:02 ` Jean-Christophe PLAGNIOL-VILLARD
0 siblings, 0 replies; 25+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2008-04-29 13:02 UTC (permalink / raw)
To: u-boot
On 16:14 Tue 29 Apr , Vasiliy Leoenenko wrote:
>
> Hi Stefan
>
> > Unfortunately this breaks CFI support for "normal" AMD/Spansion FLASH equipped
> > boards. On Sequoia with Spansion GL512 I get this after applying your patch:
> >
> > Please fix this and resubmit. Best would be if you could test it on a board
> > with Spansion CFI FLASH's too.
>
> I investigated the reproted issue and I think I've corrected it. The issue caused by my incorect conversion of cmd value in flash_make_cmd function.
> So we improved the procedure of conversion. I think it will be better to sent two patches:
> The first patch adds support of long commands and fixes conversion issues.
> The second patch adds M18 family command set support.
>
> Patches were tested on Mainstone II board and two flashes:
> M18 portwidth=16 chipwidth=16
> P30 portwidth=32 chipwidth=16
> Also I tested in simulation the conversion algorithms to make sure that it works fine.
> Unforunately I have no abiliy to test my patch on different borads and width Spansion CFI flash.
You could test it on qemu_mips which use an amd cfi flash or with few
modif in qemu an intel falsh
Best Regards,
J.
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-29 12:15 ` Vasiliy Leoenenko
2008-04-29 12:43 ` Stefan Roese
@ 2008-04-29 13:43 ` Wolfgang Denk
2008-04-29 14:39 ` Vasiliy Leoenenko
` (2 more replies)
1 sibling, 3 replies; 25+ messages in thread
From: Wolfgang Denk @ 2008-04-29 13:43 UTC (permalink / raw)
To: u-boot
In message <E1JqokH-000IQ6-00.vasiliy-leonenko-mail-ru@f128.mail.ru> you wrote:
>
> The first patch (support of long commands):
That's not exactly a good commit message.
And your signed-off-by line is missing.
And the coding style is broken. There are trailing white spaces,
and...
> #if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA)
> - for (i = info->portwidth; i > 0; i--)
> + for (i = sizeof(cfiword_t); i > 0; i--)
> + {
... bad brace style here and elsewhere.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"You know, after a woman's raised a family and so on, she wants to
start living her own life." "Whose life she's _been_ living, then?"
- Terry Pratchett, _Witches Abroad_
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-29 13:43 ` Wolfgang Denk
@ 2008-04-29 14:39 ` Vasiliy Leoenenko
2008-04-29 14:40 ` Vasiliy Leoenenko
2008-04-29 14:40 ` Vasiliy Leoenenko
2 siblings, 0 replies; 25+ messages in thread
From: Vasiliy Leoenenko @ 2008-04-29 14:39 UTC (permalink / raw)
To: u-boot
Hi, Wolfgang
Sorry for codding-style issues in previous sent patches.
Next two messages will contain patches with corrected codding-style, descriptions and signed-off lines to commit.
Best regards
Vasiliy
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-29 13:43 ` Wolfgang Denk
2008-04-29 14:39 ` Vasiliy Leoenenko
@ 2008-04-29 14:40 ` Vasiliy Leoenenko
2008-04-29 15:03 ` Anatolij Gustschin
2008-04-29 14:40 ` Vasiliy Leoenenko
2 siblings, 1 reply; 25+ messages in thread
From: Vasiliy Leoenenko @ 2008-04-29 14:40 UTC (permalink / raw)
To: u-boot
cfi_flash: support of long cmd in U-boot.
Some NOR flash chips needs support of commands with length grether than max value size of uchar.
For example all M18 family chips use 0x1ff command in buffered write mode as value of program loops count.
Signed-off-by: Alexey Korolev <akorolev@infradead.org>
Signed-off-by: Vasiliy Leonenko <vasiliy.leonenko@mail.ru>
======================================================
diff -aupNr a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
--- a/drivers/mtd/cfi_flash.c 2008-04-21 02:39:38.000000000 +0400
+++ b/drivers/mtd/cfi_flash.c 2008-04-29 17:29:07.000000000 +0400
@@ -298,17 +298,32 @@ static inline void flash_unmap(flash_inf
/*-----------------------------------------------------------------------
* make a proper sized command based on the port and chip widths
*/
-static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf)
+static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf)
{
int i;
+ int cword_offset;
+ int perchip_offset;
uchar *cp = (uchar *) cmdbuf;
+ uchar val;
#if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA)
- for (i = info->portwidth; i > 0; i--)
+ for (i = sizeof(cfiword_t); i > 0; i--){
+ cword_offset = i - 1;
#else
- for (i = 1; i <= info->portwidth; i++)
+ for (i = 1; i <= sizeof(cfiword_t); i++){
+ cword_offset = sizeof(cfiword_t) - i;
#endif
- *cp++ = (i & (info->chipwidth - 1)) ? '\0' : cmd;
+ perchip_offset = cword_offset % info->chipwidth;
+
+ /* If current offset inside one chip is over command size or
+ current offset is over portwidth fill data by 0x00 */
+ if(perchip_offset >= sizeof(ulong) || cword_offset >= info->portwidth)
+ val = 0x00;
+ else
+ val = *((uchar*)&cmd + perchip_offset);
+
+ cp[i - 1] = val;
+ }
}
#ifdef DEBUG
@@ -422,7 +437,7 @@ static ulong flash_read_long (flash_info
* Write a proper sized command to the correct address
*/
static void flash_write_cmd (flash_info_t * info, flash_sect_t sect,
- uint offset, uchar cmd)
+ uint offset, ulong cmd)
{
void *addr;
@@ -911,7 +926,7 @@ static int flash_write_cfibuffer (flash_
/* reduce the number of loops by the width of
* the port */
cnt = len >> shift;
- flash_write_cmd (info, sector, 0, (uchar) cnt - 1);
+ flash_write_cmd (info, sector, 0, cnt - 1);
while (cnt-- > 0) {
switch (info->portwidth) {
case FLASH_CFI_8BIT:
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-29 13:43 ` Wolfgang Denk
2008-04-29 14:39 ` Vasiliy Leoenenko
2008-04-29 14:40 ` Vasiliy Leoenenko
@ 2008-04-29 14:40 ` Vasiliy Leoenenko
2 siblings, 0 replies; 25+ messages in thread
From: Vasiliy Leoenenko @ 2008-04-29 14:40 UTC (permalink / raw)
To: u-boot
cfi_flash: enable M18 flash chips family support.
Added new command set ID. Buffered write command processing is changed in order to support M18 flash chips family.
Signed-off-by: Alexey Korolev <akorolev@infradead.org>
Signed-off-by: Vasiliy Leonenko <vasiliy.leonenko@mail.ru>
==============================================================
diff -aupNr a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
--- a/drivers/mtd/cfi_flash.c 2008-04-29 17:32:47.000000000 +0400
+++ b/drivers/mtd/cfi_flash.c 2008-04-29 17:32:59.000000000 +0400
@@ -76,7 +76,9 @@
#define FLASH_CMD_PROTECT_SET 0x01
#define FLASH_CMD_PROTECT_CLEAR 0xD0
#define FLASH_CMD_CLEAR_STATUS 0x50
+#define FLASH_CMD_READ_STATUS 0x70
#define FLASH_CMD_WRITE_TO_BUFFER 0xE8
+#define FLASH_CMD_WRITE_BUFFER_PROG 0xE9
#define FLASH_CMD_WRITE_BUFFER_CONFIRM 0xD0
#define FLASH_STATUS_DONE 0x80
@@ -136,6 +138,7 @@
#define CFI_CMDSET_MITSU_STANDARD 256
#define CFI_CMDSET_MITSU_EXTENDED 257
#define CFI_CMDSET_SST 258
+#define CFI_CMDSET_INTEL_PROG_REGIONS 512
#ifdef CFG_FLASH_CFI_AMD_RESET /* needed for STM_ID_29W320DB on UC100 */
# undef FLASH_CMD_RESET
@@ -620,6 +623,7 @@ static int flash_is_busy (flash_info_t *
int retval;
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
retval = !flash_isset (info, sect, 0, FLASH_STATUS_DONE);
@@ -679,6 +683,7 @@ static int flash_full_status_check (flas
retcode = flash_status_check (info, sector, tout, prompt);
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
if ((retcode == ERR_OK)
@@ -807,6 +812,7 @@ static int flash_write_cfiword (flash_in
flag = disable_interrupts ();
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
flash_write_cmd (info, 0, 0, FLASH_CMD_CLEAR_STATUS);
@@ -861,6 +867,7 @@ static int flash_write_cfibuffer (flash_
int flag = 0;
uint offset = 0;
unsigned int shift;
+ uchar write_cmd;
switch (info->portwidth) {
case FLASH_CFI_8BIT:
@@ -915,10 +922,14 @@ static int flash_write_cfibuffer (flash_
sector = find_sector (info, dest);
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
+ write_cmd = (info->vendor == CFI_CMDSET_INTEL_PROG_REGIONS) ?
+ FLASH_CMD_WRITE_BUFFER_PROG : FLASH_CMD_WRITE_TO_BUFFER;
flash_write_cmd (info, sector, 0, FLASH_CMD_CLEAR_STATUS);
- flash_write_cmd (info, sector, 0, FLASH_CMD_WRITE_TO_BUFFER);
+ flash_write_cmd (info, sector, 0, FLASH_CMD_READ_STATUS);
+ flash_write_cmd (info, sector, 0, write_cmd);
retcode = flash_status_check (info, sector,
info->buffer_write_tout,
"write to buffer");
@@ -1053,6 +1064,7 @@ int flash_erase (flash_info_t * info, in
for (sect = s_first; sect <= s_last; sect++) {
if (info->protect[sect] == 0) { /* not protected */
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
flash_write_cmd (info, sect, 0,
@@ -1121,6 +1133,9 @@ void flash_print_info (flash_info_t * in
info->size >> 20, info->sector_count);
printf (" ");
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
+ printf ("Intel Prog Regions");
+ break;
case CFI_CMDSET_INTEL_STANDARD:
printf ("Intel Standard");
break;
@@ -1511,6 +1526,7 @@ static void flash_read_jedec_ids (flash_
info->device_id2 = 0;
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
cmdset_intel_read_jedec_ids(info);
@@ -1565,6 +1581,7 @@ static int flash_detect_legacy(ulong bas
}
switch(info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
info->cmd_reset = FLASH_CMD_RESET;
@@ -1760,6 +1777,7 @@ ulong flash_get_size (ulong base, int ba
#endif
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
cmdset_intel_init(info, &qry);
@@ -1837,6 +1855,7 @@ ulong flash_get_size (ulong base, int ba
* supported devices (intel...)
*/
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
info->protect[sect_cnt] =
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-29 14:40 ` Vasiliy Leoenenko
@ 2008-04-29 15:03 ` Anatolij Gustschin
2008-05-07 17:23 ` Vasiliy Leoenenko
` (3 more replies)
0 siblings, 4 replies; 25+ messages in thread
From: Anatolij Gustschin @ 2008-04-29 15:03 UTC (permalink / raw)
To: u-boot
Hi Vasiliy,
Vasiliy Leoenenko wrote:
> cfi_flash: support of long cmd in U-boot.
>
> Some NOR flash chips needs support of commands with length grether than max value size of uchar.
> For example all M18 family chips use 0x1ff command in buffered write mode as value of program loops count.
Unfortunately this patch still breaks CFI support on sequoia board:
U-Boot 1.3.3-rc1-00021-g0e715a7-dirty (Apr 29 2008 - 16:55:18)
CPU: AMCC PowerPC 440EPx Rev. A at 330 MHz (PLB=132, OPB=66, EBC=66 MHz)
Security/Kasumi support
Bootstrap Option B - Boot ROM Location EBC (16 bits)
Internal PCI arbiter enabled, PCI async ext clock used
32 kB I-Cache 32 kB D-Cache
Board: Sequoia - AMCC PPC440EPx Evaluation Board, Rev. F, PCI=33 MHz
I2C: ready
DTT: 1 is 36 C
DRAM: 256 MB
FLASH: CFI: Unknown command set 0x0
*** failed ***
### ERROR ### Please RESET the board ###
Best regards,
Anatolij
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-29 15:03 ` Anatolij Gustschin
@ 2008-05-07 17:23 ` Vasiliy Leoenenko
2008-05-07 17:24 ` Vasiliy Leoenenko
` (2 subsequent siblings)
3 siblings, 0 replies; 25+ messages in thread
From: Vasiliy Leoenenko @ 2008-05-07 17:23 UTC (permalink / raw)
To: u-boot
Hi All
I corrected this issue with the help of Anatolij.
I checked this patches on Mainstone II board width Intel M18 chip(16x16) and P30 chip (32x16).
Next two messages will contain corrected patches.
Best Regards
Vasiliy
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-29 15:03 ` Anatolij Gustschin
2008-05-07 17:23 ` Vasiliy Leoenenko
@ 2008-05-07 17:24 ` Vasiliy Leoenenko
2008-06-03 19:07 ` Stefan Roese
2008-05-07 17:25 ` Vasiliy Leoenenko
2008-05-07 18:05 ` Vasiliy Leoenenko
3 siblings, 1 reply; 25+ messages in thread
From: Vasiliy Leoenenko @ 2008-05-07 17:24 UTC (permalink / raw)
To: u-boot
cfi_flash: support of long cmd in U-boot.
Some NOR flash chips needs support of commands with length grether than max value size of uchar.
For example all M18 family chips use 0x1ff command in buffered write mode as value of program loops count.
Signed-off-by: Alexey Korolev <akorolev@infradead.org>
Signed-off-by: Vasiliy Leonenko <vasiliy.leonenko@mail.ru>
======================================================
diff -aupNr a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
--- a/drivers/mtd/cfi_flash.c 2008-04-21 02:39:38.000000000 +0400
+++ b/drivers/mtd/cfi_flash.c 2008-05-07 15:51:18.000000000 +0400
@@ -298,17 +298,25 @@ static inline void flash_unmap(flash_inf
/*-----------------------------------------------------------------------
* make a proper sized command based on the port and chip widths
*/
-static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf)
+static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf)
{
int i;
+ int cword_offset;
+ int cp_offset;
+ uchar val;
uchar *cp = (uchar *) cmdbuf;
+ for (i = info->portwidth; i > 0; i--){
+ cword_offset = (info->portwidth-i)%info->chipwidth;
#if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA)
- for (i = info->portwidth; i > 0; i--)
+ cp_offset = info->portwidth - i;
+ val = *((uchar*)&cmd + cword_offset);
#else
- for (i = 1; i <= info->portwidth; i++)
+ cp_offset = i - 1;
+ val = *((uchar*)&cmd + sizeof(ulong) - cword_offset - 1);
#endif
- *cp++ = (i & (info->chipwidth - 1)) ? '\0' : cmd;
+ cp[cp_offset] = (cword_offset >= sizeof(ulong)) ? 0x00 : val;
+ }
}
#ifdef DEBUG
@@ -422,7 +430,7 @@ static ulong flash_read_long (flash_info
* Write a proper sized command to the correct address
*/
static void flash_write_cmd (flash_info_t * info, flash_sect_t sect,
- uint offset, uchar cmd)
+ uint offset, ulong cmd)
{
void *addr;
@@ -911,7 +919,7 @@ static int flash_write_cfibuffer (flash_
/* reduce the number of loops by the width of
* the port */
cnt = len >> shift;
- flash_write_cmd (info, sector, 0, (uchar) cnt - 1);
+ flash_write_cmd (info, sector, 0, cnt - 1);
while (cnt-- > 0) {
switch (info->portwidth) {
case FLASH_CFI_8BIT:
@@ -953,7 +961,7 @@ static int flash_write_cfibuffer (flash_
#endif
flash_write_cmd(info, sector, offset, AMD_CMD_WRITE_TO_BUFFER);
cnt = len >> shift;
- flash_write_cmd(info, sector, offset, (uchar)cnt - 1);
+ flash_write_cmd(info, sector, offset, cnt - 1);
switch (info->portwidth) {
case FLASH_CFI_8BIT:
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-29 15:03 ` Anatolij Gustschin
2008-05-07 17:23 ` Vasiliy Leoenenko
2008-05-07 17:24 ` Vasiliy Leoenenko
@ 2008-05-07 17:25 ` Vasiliy Leoenenko
2008-06-03 19:07 ` Stefan Roese
2008-05-07 18:05 ` Vasiliy Leoenenko
3 siblings, 1 reply; 25+ messages in thread
From: Vasiliy Leoenenko @ 2008-05-07 17:25 UTC (permalink / raw)
To: u-boot
cfi_flash: enable M18 flash chips family support.
Added new command set ID. Buffered write command processing is changed in order to support M18 flash chips family.
Signed-off-by: Alexey Korolev <akorolev@infradead.org>
Signed-off-by: Vasiliy Leonenko <vasiliy.leonenko@mail.ru>
==============================================================
diff -aupNr a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
--- a/drivers/mtd/cfi_flash.c 2008-05-07 15:51:18.000000000 +0400
+++ b/drivers/mtd/cfi_flash.c 2008-05-07 16:35:42.000000000 +0400
@@ -76,7 +76,9 @@
#define FLASH_CMD_PROTECT_SET 0x01
#define FLASH_CMD_PROTECT_CLEAR 0xD0
#define FLASH_CMD_CLEAR_STATUS 0x50
+#define FLASH_CMD_READ_STATUS 0x70
#define FLASH_CMD_WRITE_TO_BUFFER 0xE8
+#define FLASH_CMD_WRITE_BUFFER_PROG 0xE9
#define FLASH_CMD_WRITE_BUFFER_CONFIRM 0xD0
#define FLASH_STATUS_DONE 0x80
@@ -136,6 +138,7 @@
#define CFI_CMDSET_MITSU_STANDARD 256
#define CFI_CMDSET_MITSU_EXTENDED 257
#define CFI_CMDSET_SST 258
+#define CFI_CMDSET_INTEL_PROG_REGIONS 512
#ifdef CFG_FLASH_CFI_AMD_RESET /* needed for STM_ID_29W320DB on UC100 */
# undef FLASH_CMD_RESET
@@ -613,6 +616,7 @@ static int flash_is_busy (flash_info_t *
int retval;
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
retval = !flash_isset (info, sect, 0, FLASH_STATUS_DONE);
@@ -672,6 +676,7 @@ static int flash_full_status_check (flas
retcode = flash_status_check (info, sector, tout, prompt);
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
if ((retcode == ERR_OK)
@@ -800,6 +805,7 @@ static int flash_write_cfiword (flash_in
flag = disable_interrupts ();
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
flash_write_cmd (info, 0, 0, FLASH_CMD_CLEAR_STATUS);
@@ -854,6 +860,7 @@ static int flash_write_cfibuffer (flash_
int flag = 0;
uint offset = 0;
unsigned int shift;
+ uchar write_cmd;
switch (info->portwidth) {
case FLASH_CFI_8BIT:
@@ -908,10 +915,14 @@ static int flash_write_cfibuffer (flash_
sector = find_sector (info, dest);
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
+ write_cmd = (info->vendor == CFI_CMDSET_INTEL_PROG_REGIONS) ?
+ FLASH_CMD_WRITE_BUFFER_PROG : FLASH_CMD_WRITE_TO_BUFFER;
flash_write_cmd (info, sector, 0, FLASH_CMD_CLEAR_STATUS);
- flash_write_cmd (info, sector, 0, FLASH_CMD_WRITE_TO_BUFFER);
+ flash_write_cmd (info, sector, 0, FLASH_CMD_READ_STATUS);
+ flash_write_cmd (info, sector, 0, write_cmd);
retcode = flash_status_check (info, sector,
info->buffer_write_tout,
"write to buffer");
@@ -961,7 +972,7 @@ static int flash_write_cfibuffer (flash_
#endif
flash_write_cmd(info, sector, offset, AMD_CMD_WRITE_TO_BUFFER);
cnt = len >> shift;
- flash_write_cmd(info, sector, offset, cnt - 1);
+ flash_write_cmd(info, sector, offset, (uchar)cnt - 1);
switch (info->portwidth) {
case FLASH_CFI_8BIT:
@@ -1046,6 +1057,7 @@ int flash_erase (flash_info_t * info, in
for (sect = s_first; sect <= s_last; sect++) {
if (info->protect[sect] == 0) { /* not protected */
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
flash_write_cmd (info, sect, 0,
@@ -1114,6 +1126,9 @@ void flash_print_info (flash_info_t * in
info->size >> 20, info->sector_count);
printf (" ");
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
+ printf ("Intel Prog Regions");
+ break;
case CFI_CMDSET_INTEL_STANDARD:
printf ("Intel Standard");
break;
@@ -1504,6 +1519,7 @@ static void flash_read_jedec_ids (flash_
info->device_id2 = 0;
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
cmdset_intel_read_jedec_ids(info);
@@ -1558,6 +1574,7 @@ static int flash_detect_legacy(ulong bas
}
switch(info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
info->cmd_reset = FLASH_CMD_RESET;
@@ -1753,6 +1770,7 @@ ulong flash_get_size (ulong base, int ba
#endif
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
cmdset_intel_init(info, &qry);
@@ -1830,6 +1848,7 @@ ulong flash_get_size (ulong base, int ba
* supported devices (intel...)
*/
switch (info->vendor) {
+ case CFI_CMDSET_INTEL_PROG_REGIONS:
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
info->protect[sect_cnt] =
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-04-29 15:03 ` Anatolij Gustschin
` (2 preceding siblings ...)
2008-05-07 17:25 ` Vasiliy Leoenenko
@ 2008-05-07 18:05 ` Vasiliy Leoenenko
2008-05-12 9:36 ` Vasiliy Leonenko
3 siblings, 1 reply; 25+ messages in thread
From: Vasiliy Leoenenko @ 2008-05-07 18:05 UTC (permalink / raw)
To: u-boot
cfi_flash: support of long cmd in U-boot.
Some NOR flash chips needs support of commands with length grether than max value size of uchar.
For example all M18 family chips use 0x1ff command in buffered write mode as value of program loops count.
Signed-off-by: Alexey Korolev <akorolev@infradead.org>
Signed-off-by: Vasiliy Leonenko <vasiliy.leonenko@mail.ru>
======================================================
diff -aupNr a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
--- a/drivers/mtd/cfi_flash.c 2008-04-21 02:39:38.000000000 +0400
+++ b/drivers/mtd/cfi_flash.c 2008-05-07 15:51:18.000000000 +0400
@@ -298,17 +298,25 @@ static inline void flash_unmap(flash_inf
/*-----------------------------------------------------------------------
* make a proper sized command based on the port and chip widths
*/
-static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf)
+static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf)
{
int i;
+ int cword_offset;
+ int cp_offset;
+ uchar val;
uchar *cp = (uchar *) cmdbuf;
+ for (i = info->portwidth; i > 0; i--){
+ cword_offset = (info->portwidth-i)%info->chipwidth;
#if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA)
- for (i = info->portwidth; i > 0; i--)
+ cp_offset = info->portwidth - i;
+ val = *((uchar*)&cmd + cword_offset);
#else
- for (i = 1; i <= info->portwidth; i++)
+ cp_offset = i - 1;
+ val = *((uchar*)&cmd + sizeof(ulong) - cword_offset - 1);
#endif
- *cp++ = (i & (info->chipwidth - 1)) ? '\0' : cmd;
+ cp[cp_offset] = (cword_offset >= sizeof(ulong)) ? 0x00 : val;
+ }
}
#ifdef DEBUG
@@ -422,7 +430,7 @@ static ulong flash_read_long (flash_info
* Write a proper sized command to the correct address
*/
static void flash_write_cmd (flash_info_t * info, flash_sect_t sect,
- uint offset, uchar cmd)
+ uint offset, ulong cmd)
{
void *addr;
@@ -911,7 +919,7 @@ static int flash_write_cfibuffer (flash_
/* reduce the number of loops by the width of
* the port */
cnt = len >> shift;
- flash_write_cmd (info, sector, 0, (uchar) cnt - 1);
+ flash_write_cmd (info, sector, 0, cnt - 1);
while (cnt-- > 0) {
switch (info->portwidth) {
case FLASH_CFI_8BIT:
@@ -953,7 +961,7 @@ static int flash_write_cfibuffer (flash_
#endif
flash_write_cmd(info, sector, offset, AMD_CMD_WRITE_TO_BUFFER);
cnt = len >> shift;
- flash_write_cmd(info, sector, offset, (uchar)cnt - 1);
+ flash_write_cmd(info, sector, offset, cnt - 1);
switch (info->portwidth) {
case FLASH_CFI_8BIT:
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-05-07 18:05 ` Vasiliy Leoenenko
@ 2008-05-12 9:36 ` Vasiliy Leonenko
2008-05-13 5:42 ` Stefan Roese
0 siblings, 1 reply; 25+ messages in thread
From: Vasiliy Leonenko @ 2008-05-12 9:36 UTC (permalink / raw)
To: u-boot
Hi All
The last message with patch was sent by mistake.
Correct patches were sent in two messages before.
Best Regards
Vasiliy
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-05-12 9:36 ` Vasiliy Leonenko
@ 2008-05-13 5:42 ` Stefan Roese
0 siblings, 0 replies; 25+ messages in thread
From: Stefan Roese @ 2008-05-13 5:42 UTC (permalink / raw)
To: u-boot
On Monday 12 May 2008, Vasiliy Leonenko wrote:
> The last message with patch was sent by mistake.
> Correct patches were sent in two messages before.
Understood. I'll recheck this patchset after 1.3.3 is released.
Thanks.
Best regards,
Stefan
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-05-07 17:24 ` Vasiliy Leoenenko
@ 2008-06-03 19:07 ` Stefan Roese
0 siblings, 0 replies; 25+ messages in thread
From: Stefan Roese @ 2008-06-03 19:07 UTC (permalink / raw)
To: u-boot
On Wednesday 07 May 2008, Vasiliy Leoenenko wrote:
> cfi_flash: support of long cmd in U-boot.
>
> Some NOR flash chips needs support of commands with length grether than max
> value size of uchar. For example all M18 family chips use 0x1ff command in
> buffered write mode as value of program loops count.
Applied to u-boot-cfi-flash. Thanks.
Best regards,
Stefan
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
^ permalink raw reply [flat|nested] 25+ messages in thread
* [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
2008-05-07 17:25 ` Vasiliy Leoenenko
@ 2008-06-03 19:07 ` Stefan Roese
0 siblings, 0 replies; 25+ messages in thread
From: Stefan Roese @ 2008-06-03 19:07 UTC (permalink / raw)
To: u-boot
On Wednesday 07 May 2008, Vasiliy Leoenenko wrote:
> cfi_flash: enable M18 flash chips family support.
>
> Added new command set ID. Buffered write command processing is changed in
> order to support M18 flash chips family.
Applied to u-boot-cfi-flash. Thanks.
Best regards,
Stefan
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2008-06-03 19:07 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-28 11:29 [U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2) Vasiliy Leoenenko
2007-09-28 14:47 ` Wolfgang Denk
2007-09-28 15:47 ` Alexey Korolev
2007-09-28 16:40 ` Wolfgang Denk
2008-04-21 7:02 ` Stefan Roese
2008-04-23 9:42 ` Vasiliy Leoenenko
2008-04-25 6:35 ` Stefan Roese
2008-04-29 12:14 ` Vasiliy Leoenenko
2008-04-29 13:02 ` Jean-Christophe PLAGNIOL-VILLARD
2008-04-29 12:15 ` Vasiliy Leoenenko
2008-04-29 12:43 ` Stefan Roese
2008-04-29 13:43 ` Wolfgang Denk
2008-04-29 14:39 ` Vasiliy Leoenenko
2008-04-29 14:40 ` Vasiliy Leoenenko
2008-04-29 15:03 ` Anatolij Gustschin
2008-05-07 17:23 ` Vasiliy Leoenenko
2008-05-07 17:24 ` Vasiliy Leoenenko
2008-06-03 19:07 ` Stefan Roese
2008-05-07 17:25 ` Vasiliy Leoenenko
2008-06-03 19:07 ` Stefan Roese
2008-05-07 18:05 ` Vasiliy Leoenenko
2008-05-12 9:36 ` Vasiliy Leonenko
2008-05-13 5:42 ` Stefan Roese
2008-04-29 14:40 ` Vasiliy Leoenenko
2008-04-29 12:16 ` Vasiliy Leoenenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox