This patch adds memcpy_16_from_onenand() and memcpy_16_to_onenand() functions and defaults them to the already available memcpy_16() function. They are defined weak so that they can be overwritten by a board/platform specific version.
This is needed for the vcth board support (still to come) which needs custom access routines here. It also removes some compiler warnings by adding the onenand_get_2x_blockpage() function and removing the onenand_lock()/onenand_unlock() functions. Signed-off-by: Stefan Roese <[EMAIL PROTECTED]> --- This patch has to be applied on top of the patch submitted by Kyungmin Park on 2008-11-04: [PATCH] [OneNAND] Sync with 2.6.27 drivers/mtd/onenand/onenand_base.c | 38 ++++++++++++++++++++++++++++++++--- 1 files changed, 34 insertions(+), 4 deletions(-) diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index 66214e8..5c752ca 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c @@ -24,7 +24,7 @@ #include <malloc.h> /* It should access 16-bit instead of 8-bit */ -static inline void *memcpy_16(void *dst, const void *src, unsigned int len) +void *__memcpy_16(void *dst, const void *src, unsigned int len) { void *ret = dst; short *d = dst; @@ -35,6 +35,10 @@ static inline void *memcpy_16(void *dst, const void *src, unsigned int len) *d++ = *s++; return ret; } +void *memcpy_16_from_onenand(void *dst, const void *src, unsigned int len) + __attribute__((weak, alias("__memcpy_16"))); +void *memcpy_16_to_onenand(void *dst, const void *src, unsigned int len) + __attribute__((weak, alias("__memcpy_16"))); static const unsigned char ffchars[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, @@ -349,7 +353,7 @@ static int onenand_read_bufferram(struct mtd_info *mtd, loff_t addr, int area, bufferram = this->base + area; bufferram += onenand_bufferram_offset(mtd, area); - memcpy_16(buffer, bufferram + offset, count); + memcpy_16_from_onenand(buffer, bufferram + offset, count); return 0; } @@ -376,7 +380,7 @@ static int onenand_sync_read_bufferram(struct mtd_info *mtd, loff_t addr, int ar this->mmcontrol(mtd, ONENAND_SYS_CFG1_SYNC_READ); - memcpy_16(buffer, bufferram + offset, count); + memcpy_16_from_onenand(buffer, bufferram + offset, count); this->mmcontrol(mtd, 0); @@ -403,12 +407,36 @@ static int onenand_write_bufferram(struct mtd_info *mtd, loff_t addr, int area, bufferram = this->base + area; bufferram += onenand_bufferram_offset(mtd, area); - memcpy_16(bufferram + offset, buffer, count); + memcpy_16_to_onenand(bufferram + offset, buffer, count); return 0; } /** + * onenand_get_2x_blockpage - [GENERIC] Get blockpage at 2x program mode + * @param mtd MTD data structure + * @param addr address to check + * @return blockpage address + * + * Get blockpage address at 2x program mode + */ +static int onenand_get_2x_blockpage(struct mtd_info *mtd, loff_t addr) +{ + struct onenand_chip *this = mtd->priv; + int blockpage, block, page; + + /* Calculate the even block number */ + block = (int) (addr >> this->erase_shift) & ~1; + /* Is it the odd plane? */ + if (addr & this->writesize) + block++; + page = (int) (addr >> (this->page_shift + 1)) & this->page_mask; + blockpage = (block << 7) | page; + + return blockpage; +} + +/** * onenand_check_bufferram - [GENERIC] Check BufferRAM information * @param mtd MTD data structure * @param addr address to check @@ -1666,6 +1694,7 @@ static int onenand_do_lock_cmd(struct mtd_info *mtd, loff_t ofs, size_t len, int return 0; } +#ifdef ONENAND_LINUX /** * onenand_lock - [MTD Interface] Lock block(s) * @param mtd MTD device structure @@ -1701,6 +1730,7 @@ static int onenand_unlock(struct mtd_info *mtd, loff_t ofs, size_t len) onenand_release_device(mtd); return ret; } +#endif /** * onenand_check_lock_status - [OneNAND Interface] Check lock status -- 1.6.0.3 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot