On 09/23/2011 11:36 AM, Simon Schwarz wrote: > Added a nand_base.h header that defines all prototypes of nand_base.c > functions.
Just add the new prototypes to include/linux/mtd/nand.h (which gets included by nand.h), that's the header that goes with drivers/mtd/nand/nand_base.c. > This is necessary because these functions were often copied > in SPLs. You'd rather add new #includes to dozens of files, and keep duplicated code around, than fix a few SPLs? NACK. > It was necessary to also add nand_interface.c. You maen nand_interface.h? > This now defines static > inline functions former defined in nand.h - theses functions had name > conflicts with these in nand_base.c/h. If we have two functions with the same name that do different things, change the name of the one in nand.h. > diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c > index bfdb586..4568820 100644 > --- a/arch/blackfin/lib/board.c > +++ b/arch/blackfin/lib/board.c > @@ -25,7 +25,8 @@ > #include <kgdb.h> > > #ifdef CONFIG_CMD_NAND > -#include <nand.h> /* cannot even include nand.h if it isnt configured */ > +#include <nand.h> > +#include <nand_interface.h> /* cannot even include nand.h if it isnt > configured */ I don't think it's still true that you can't include nand.h if it isn't configured, BTW. > diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c > index e7dfcb1..3fe0935 100644 > --- a/drivers/mtd/nand/nand_base.c > +++ b/drivers/mtd/nand/nand_base.c > @@ -51,6 +51,8 @@ > #include <asm/io.h> > #include <asm/errno.h> > > +#include <nand_base.h> Wait, there's *two* new headers? > +/* nand_base.c Standard implementation of nand functions */ > +void nand_release_device (struct mtd_info *mtd); > +uint8_t nand_read_byte(struct mtd_info *mtd); > +uint8_t nand_read_byte16(struct mtd_info *mtd); > +u16 nand_read_word(struct mtd_info *mtd); > +void nand_select_chip(struct mtd_info *mtd, int chipnr); > +void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len); > +void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len); > +int nand_verify_buf(struct mtd_info *mtd, const uint8_t *buf, int len); > +void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len); > +void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len); > +int nand_verify_buf16(struct mtd_info *mtd, const uint8_t *buf, int len); > +int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip); > +int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs); > +int nand_check_wp(struct mtd_info *mtd); > +int nand_block_checkbad(struct mtd_info *mtd, loff_t ofs, int getchip, > + int allowbbt); > +void nand_wait_ready(struct mtd_info *mtd); > +void nand_command(struct mtd_info *mtd, unsigned int command, int column, > + int page_addr); > +void nand_command_lp(struct mtd_info *mtd, unsigned int command, int column, > + int page_addr); > +int nand_get_device (struct nand_chip *this, struct mtd_info *mtd, > + int new_state); > +int nand_wait(struct mtd_info *mtd, struct nand_chip *this); > +int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, > + uint8_t *buf, int page); > +static int nand_read_page_raw_syndrome(struct mtd_info *mtd, > + struct nand_chip *chip, uint8_t *buf, int page); > +int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, > + uint32_t data_offs, uint32_t readlen, uint8_t *bufpoi); > +int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip, > + uint8_t *buf, int page); > +int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, > + uint32_t data_offs, uint32_t readlen, uint8_t *bufpoi); > +int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, > + uint8_t *buf, int page); > +int nand_read_page_hwecc_oob_first(struct mtd_info *mtd, > + struct nand_chip *chip, uint8_t *buf, int page); > +int nand_read_page_syndrome(struct mtd_info *mtd, > + struct nand_chip *chip, uint8_t *buf, int page); > +uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob, > + struct mtd_oob_ops *ops, size_t len); > +int nand_do_read_ops(struct mtd_info *mtd, loff_t from, > + struct mtd_oob_ops *ops); > +int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip, > + int page, int sndcmd); > +int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip, > + int page, int sndcmd); > +int nand_write_oob_std(struct mtd_info *mtd, struct nand_chip *chip, > + int page); > +int nand_write_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip, > + int page); > +int nand_do_read_oob(struct mtd_info *mtd, loff_t from, > + struct mtd_oob_ops *ops); > +int nand_read_oob(struct mtd_info *mtd, loff_t from, struct mtd_oob_ops > *ops); > +void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip, > + const uint8_t *buf); > +void nand_write_page_raw_syndrome(struct mtd_info *mtd, > + struct nand_chip *chip, const uint8_t *buf); > +void nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip, > + const uint8_t *buf); > +void nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, > + const uint8_t *buf); > +void nand_write_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip, > + const uint8_t *buf); > +int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip, > + const uint8_t *buf, int page, int cached, int raw); > +uint8_t *nand_fill_oob(struct nand_chip *chip, uint8_t *oob, > + struct mtd_oob_ops *ops); > +int nand_do_write_ops(struct mtd_info *mtd, loff_t to, > + struct mtd_oob_ops *ops); > +int nand_do_write_oob(struct mtd_info *mtd, loff_t to, struct mtd_oob_ops > *ops); > +int nand_write_oob(struct mtd_info *mtd, loff_t to, struct mtd_oob_ops *ops); > +void single_erase_cmd(struct mtd_info *mtd, int page); > +void multi_erase_cmd(struct mtd_info *mtd, int page); > +int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr, > + int allowbbt); > +int nand_read(struct mtd_info *mtd, loff_t from, size_t len, > + size_t *retlen, uint8_t *buf); > +int nand_write(struct mtd_info *mtd, loff_t to, size_t len, > + size_t *retlen, const uint8_t *buf); > +int nand_erase(struct mtd_info *mtd, struct erase_info *instr); > +void nand_sync(struct mtd_info *mtd); > +int nand_block_isbad(struct mtd_info *mtd, loff_t offs); > +int nand_block_markbad(struct mtd_info *mtd, loff_t ofs); > +void nand_set_defaults(struct nand_chip *chip, int busw); > +u16 onfi_crc16(u16 crc, u8 const *p, size_t len); > +int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip, > + int *busw); > +void nand_flash_detect_non_onfi(struct mtd_info *mtd, struct nand_chip *chip, > + const struct nand_flash_dev *type, int *busw); > +const struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd, > + struct nand_chip *chip, int busw, int *maf_id, int *dev_id, > + const struct nand_flash_dev *type); > +int nand_scan_ident(struct mtd_info *mtd, int maxchips, > + const struct nand_flash_dev *table); > +int nand_scan_tail(struct mtd_info *mtd); > +int nand_scan(struct mtd_info *mtd, int maxchips); > +void nand_release(struct mtd_info *mtd); Can we limit the scope of this to functions (or classes thereof -- if we export one buffer function might as well export all the variants) that we actually need from a current SPL? > diff --git a/nand_spl/board/samsung/smdk6400/Makefile > b/nand_spl/board/samsung/smdk6400/Makefile > index 2f9c307..32ea116 100644 > --- a/nand_spl/board/samsung/smdk6400/Makefile > +++ b/nand_spl/board/samsung/smdk6400/Makefile > @@ -33,12 +33,12 @@ nandobj := $(OBJTREE)/nand_spl/ > > LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds > LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) > \ > - $(LDFLAGS_FINAL) > + $(LDFLAGS_FINAL) -gc-sections > AFLAGS += -DCONFIG_NAND_SPL > -CFLAGS += -DCONFIG_NAND_SPL > +CFLAGS += -DCONFIG_NAND_SPL -ffunction-sections Are gc-sections/function-sections not already being set? > SOBJS = start.o cpu_init.o lowlevel_init.o > -COBJS = nand_boot.o nand_ecc.o s3c64xx.o smdk6400_nand_spl.o > +COBJS = nand_boot.o nand_ecc.o s3c64xx.o smdk6400_nand_spl.o > nand_base.o > > SRCS := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c)) > OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) > @@ -98,6 +98,10 @@ $(obj)smdk6400_nand_spl.c: > @rm -f $@ > @ln -s $(TOPDIR)/board/samsung/smdk6400/smdk6400_nand_spl.c $@ > > +$(obj)nand_base.c: > + @rm -f $@ > + @ln -s $(TOPDIR)/drivers/mtd/nand/nand_base.c $@ This is a separate (albeit dependent) change from the NAND function exporting, BTW. -Scott _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot