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

Reply via email to