16 Oct, 2017

2 commits

  • This makes gcc no longer expect an out-of-line version of the
    functions being present elsewhere.

    This fixes a failure to build on several marvell targets with gcc-7 on
    Debian:

    https://bugs.debian.org/877963

    Signed-off-by: Adrian Bunk
    Signed-off-by: Vagrant Cascadian

    Vagrant Cascadian
     
  • Hello,

    I ran into a problem with the JFFS2 filesystem driver implemented in U-Boot.

    I've got a NAND device that has correctable ECC errors (corrected somewhere in mtd/nand/nand_base.c).
    The NAND driver tells the filesystem layer (jffs2_1pass.c) above that there occurred correctable ECC errors and returns with a "value > 0".
    The JFFS2 driver recognizes the corrected ECC errors as real error and skips this block because the only accepts a "return value == 0" as correct.

    This problem exists for over 8 years (I checked version 2010.09) so I'm a little bit worried that I interpreted something wrong or didn't get the whole context.

    Can someone confirm this bug (and the bugfix) in the u-boot jffs2 driver?

    There was a mail in 2012 that mentioned the same problem, but there was no patch:
    http://u-boot.10912.n7.nabble.com/JFFS2-seems-to-drop-nand-data-with-ECC-corrections-td142008.html
    Sometime after this discussion the return value of nand_read() changed from -EUCLEAN as correctable ECC error to a positive value with the count of ECC corrected errors.

    With kind reguards,
    Uwe Engling

    Engling, Uwe
     

04 Oct, 2017

1 commit

  • U-Boot widely uses error() as a bit noisier variant of printf().

    This macro causes name conflict with the following line in
    include/linux/compiler-gcc.h:

    # define __compiletime_error(message) __attribute__((error(message)))

    This prevents us from using __compiletime_error(), and makes it
    difficult to fully sync BUILD_BUG macros with Linux. (Notice
    Linux's BUILD_BUG_ON_MSG is implemented by using compiletime_assert().)

    Let's convert error() into now treewide-available pr_err().

    Done with the help of Coccinelle, excluing tools/ directory.

    The semantic patch I used is as follows:

    //
    @@@@
    -error
    +pr_err
    (...)
    //

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Simon Glass
    [trini: Re-run Coccinelle]
    Signed-off-by: Tom Rini

    Masahiro Yamada
     

12 Jul, 2017

1 commit


23 May, 2017

1 commit


24 Sep, 2016

1 commit


04 Jun, 2016

2 commits

  • nand_info[] is now an array of pointers, with the actual mtd_info
    instance embedded in struct nand_chip.

    This is in preparation for syncing the NAND code with Linux 4.6,
    which makes the same change to struct nand_chip. It's in a separate
    commit due to the large amount of changes required to accommodate the
    change to nand_info[].

    Signed-off-by: Scott Wood

    Scott Wood
     
  • This typedef serves no purpose other than causing confusion with
    struct nand_chip.

    Signed-off-by: Scott Wood

    Scott Wood
     

02 Apr, 2016

1 commit


13 Aug, 2015

8 commits

  • When building the file system the existing code does an insertion into
    a linked list. It attempts to speed this up by keeping a pointer to
    where the last entry was inserted but it's still slow.

    Now the nodes are just inserted into the list without searching
    through for the correct place. This unsorted list is then sorted once
    using mergesort after all the entries have been added to the list.
    This speeds up the scanning of the flash file system considerably.

    Signed-off-by: Mark Tomlinson

    Mark Tomlinson
     
  • If a sector has a CLEANMARKER at the beginning, it indicates that the
    entire sector has been erased. Therefore, if this is found, we can skip the
    entire block. This was not being done before this patch.

    The code now does the same as the kernel does when encountering a
    CLEANMARKER. It still checks that the next few words are FFFFFFFF, and if
    so, the block is assumed to be empty, and so is skipped.

    Signed-off-by: Mark Tomlinson

    Mark Tomlinson
     
  • The scan code is similar to the linux kernel, but the kernel defines a much
    smaller size to scan through before deciding a sector is blank. Assuming
    that what is in the kernel is OK, make these two match.

    On its own, this change makes no difference to scanning of any sectors
    which have a clean marker at the beginning, since the entire sector is not
    blank.

    Signed-off-by: Mark Tomlinson

    Mark Tomlinson
     
  • If the flash is slow, reading less from the flash into buffers makes
    the process faster.

    Signed-off-by: Mark Tomlinson

    Mark Tomlinson
     
  • jffs2_1pass_read_inode() would read the entire data for each node
    in the filesystem, regardless of whether it was part of the file
    to be loaded or not. By only reading the header data for an inode,
    and then reading the data only when it is found to be part of the
    file to be loaded, much copying of data is saved.

    jffs2_1pass_list_inodes() read each inode for every file in the
    directory into a buffer. By using NULL as a buffer pointer, NOR
    flash simply returns a pointer, and therefore avoids a memory copy.

    Signed-off-by: Mark Tomlinson

    Mark Tomlinson
     
  • If multiple versions of a file exist, only the most recent version
    should be used. The scheme to write 0 for the inode in older versions
    did not work, since this would have required writing to flash.

    The only time this caused an issue was listing a directory, where older
    versions of the file would still be seen. Since the directory entries
    are sorted, just look at the next entry in the list, and if it's the same
    move to that entry instead.

    Signed-off-by: Mark Tomlinson

    Mark Tomlinson
     
  • Copying complete nodes from flash can be slow if the flash is slow
    to read. By only reading the data needed, the sorting operation can
    be made much faster.

    The directory entry comparison function also had a two bugs. First, it
    did not ensure the name was copied, so the name comparison may have
    been faulty (although it would have worked with NOR flash). Second,
    setting the ino to zero to ignore the entry did not work, since this
    was either writing to a temporary buffer, or (for NOR flash) directly
    to flash. Either way, the change was not remembered.

    Signed-off-by: Mark Tomlinson

    Mark Tomlinson
     
  • If a destination is not provided, jffs2_1pass_read_inode() only
    returns the length of the file. In this case, avoid reading all
    the data nodes, and return as soon as the length of the file is
    known.

    Signed-off-by: Mark Tomlinson

    Mark Tomlinson
     

25 Sep, 2014

1 commit


12 Jun, 2014

1 commit

  • Clang interpretes an if condition like  "if ((a = b) == NULL)
    as it tries to assign a value in a statement. Hence if you do
    "if ((something)) it warns you that you might be confused.
    Hence drop the double braces for plane if statements.

    Signed-off-by: Jeroen Hofstee

    Jeroen Hofstee
     

13 Dec, 2013

1 commit


18 Nov, 2013

1 commit


01 Nov, 2013

1 commit


24 Jul, 2013

1 commit


30 Apr, 2012

1 commit


10 Oct, 2011

1 commit


13 Apr, 2011

1 commit


18 Nov, 2010

1 commit

  • Before this commit, weak symbols were not overridden by non-weak symbols
    found in archive libraries when linking with recent versions of
    binutils. As stated in the System V ABI, "the link editor does not
    extract archive members to resolve undefined weak symbols".

    This commit changes all Makefiles to use partial linking (ld -r) instead
    of creating library archives, which forces all symbols to participate in
    linking, allowing non-weak symbols to override weak symbols as intended.
    This approach is also used by Linux, from which the gmake function
    cmd_link_o_target (defined in config.mk and used in all Makefiles) is
    inspired.

    The name of each former library archive is preserved except for
    extensions which change from ".a" to ".o". This commit updates
    references accordingly where needed, in particular in some linker
    scripts.

    This commit reveals board configurations that exclude some features but
    include source files that depend these disabled features in the build,
    resulting in undefined symbols. Known such cases include:
    - disabling CMD_NET but not CMD_NFS;
    - enabling CONFIG_OF_LIBFDT but not CONFIG_QE.

    Signed-off-by: Sebastien Carlier

    Sebastien Carlier
     

31 Mar, 2010

1 commit

  • $ ./MAKEALL suen3
    jffs2_1pass.c: In function 'get_fl_mem':
    jffs2_1pass.c:399: warning: unused variable 'id'
    jffs2_1pass.c: In function 'get_node_mem':
    jffs2_1pass.c:423: warning: unused variable 'id'

    Signed-off-by: Heiko Schocher
    Tested-by: Tom

    Heiko Schocher
     

15 Jan, 2010

1 commit

  • Support for LZARI compression mode was added based on a MTD CVS
    snapshot of March 13, 2005. However, fs/jffs2/compr_lzari.c contains
    contradictory licensing terms: the original copyright clause says "All
    rights reserved. Permission granted for non-commercial use.", but
    later reference to the file 'LICENCE' in the jffs2 directory was added
    which says GPL v2 or later.

    As no boards ever used LZARI compression, and this file is also not
    present in recent MTD code, we resolve this conflict by removing the
    conflicting file and references to it.

    Also copy the referenced but missing file 'LICENCE' from the current
    MTD source tree.

    Signed-off-by: Wolfgang Denk

    Wolfgang Denk
     

22 Aug, 2009

1 commit

  • This patch fixes some issues with JFFS2 summary support in U-Boot.
    1/ Summary support made compilation configurable (as summary support
    considered expiremental even in Linux).
    2/ Summary code can do unaligned 16-bit and 32-bit memory accesses.
    We need to get data byte by byte to exclude data aborts.
    3/ Make summary scan in two passes so we can safely fall back to full
    scan if we found unsupported entry in the summary.

    Signed-off-by: Ilya Yanok

    Ilya Yanok
     

19 Aug, 2009

1 commit


17 Jul, 2009

1 commit

  • Legacy NAND had been scheduled for removal. Any boards that use this
    were already not building in the previous release due to an #error.

    The disk on chip code in common/cmd_doc.c relies on legacy NAND,
    and it has also been removed. There is newer disk on chip code
    in drivers/mtd/nand; someone with access to hardware and sufficient
    time and motivation can try to get that working, but for now disk
    on chip is not supported.

    Signed-off-by: Scott Wood

    Scott Wood
     

17 Dec, 2008

1 commit


10 Dec, 2008

5 commits

  • As we moved data_crc() invocation from jffs2_1pass_build_lists() to
    jffs2_1pass_read_inode() data_crc is going to be calculated on each
    inode access. This patch adds caching of data_crc() results. There
    is no significant improvement in speed (because of flash access
    caching added in previous patch I think, crc in RAM is really fast)
    but this patch impacts memory usage -- every b_node structure uses
    12 bytes instead of 8.

    Signed-off-by: Alexey Neyman
    Signed-off-by: Ilya Yanok

    Ilya Yanok
     
  • This patch adds support for reading fs information from summary
    node instead of scanning full eraseblock.

    Signed-off-by: Ilya Yanok

    Ilya Yanok
     
  • With this patch JFFS2 code allocates memory buffer of max_totlen size
    (size of the largest node, calculated during scan time) and uses it to
    store entire node. Speeds up loading. If malloc fails we use old ways
    to do things.

    Signed-off-by: Alexey Neyman
    Signed-off-by: Ilya Yanok

    Ilya Yanok
     
  • Rewrites jffs2_1pass_build_lists() function in style of Linux's
    jffs2_scan_medium() and jffs2_scan_eraseblock().
    This includes:
    - Caching flash acceses
    - Smart dealing with free space

    Signed-off-by: Alexey Neyman
    Signed-off-by: Ilya Yanok

    Ilya Yanok
     
  • We need to update i_version inside cycle to find really latest version
    inside jffs2_1pass_list_inodes(). With that fixed we can use isize inside
    dump_inode() instead of calling expensive jffs2_1pass_read_inode().

    Signed-off-by: Alexey Neyman
    Signed-off-by: Ilya Yanok

    Ilya Yanok
     

01 Nov, 2008

1 commit


19 Oct, 2008

1 commit