On Wed, Aug 24, 2011 at 10:56:15AM +0200, Teresa Gámez wrote: > Some NOR flash chips have commands with length greater than the maximum > value size of uchar. > > Based on an U-Boot Patch by Vasiliy Leoenenko <vasiliy.leonenko@xxxxxxx> > > Only tested with little endian on an intel cfi_flash. > > Signed-off-by: Teresa Gámez <t.gamez@xxxxxxxxx> > --- > drivers/nor/cfi_flash.c | 38 +++++++++++++++++++++++++++++--------- > drivers/nor/cfi_flash.h | 11 +++++++---- > drivers/nor/cfi_flash_amd.c | 8 ++++---- > drivers/nor/cfi_flash_intel.c | 2 +- > 4 files changed, 41 insertions(+), 18 deletions(-) > > diff --git a/drivers/nor/cfi_flash.c b/drivers/nor/cfi_flash.c > index 461b0e6..489c15d 100644 > --- a/drivers/nor/cfi_flash.c > +++ b/drivers/nor/cfi_flash.c > @@ -820,20 +820,38 @@ int flash_generic_status_check (struct flash_info *info, flash_sect_t sector, > /* > * make a proper sized command based on the port and chip widths > */ > -void flash_make_cmd(struct flash_info *info, u8 cmd, cfiword_t *cmdbuf) > +void flash_make_cmd(struct flash_info *info, u32 cmd, cfiword_t *cmdbuf) > { > - cfiword_t result = 0; > - int i = info->portwidth / info->chipwidth; > + int i; > + int cp_offset; > + int cword_offset; > + uchar val; > + uchar *cp; > +#if __BYTE_ORDER == __LITTLE_ENDIAN > + u32 cmd_le = cpu_to_le32(cmd); > +#endif This looks suspicious. With little endian byte order cpu_to_le32 is a noop. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox