1. 07 11月, 2016 2 次提交
  2. 04 10月, 2016 1 次提交
  3. 23 9月, 2016 9 次提交
  4. 20 7月, 2016 1 次提交
    • H
      mtd: nand: fix bug writing 1 byte less than page size · 144f4c98
      Hector Palacios 提交于
      nand_do_write_ops() determines if it is writing a partial page with the
      formula:
      	part_pagewr = (column || writelen < (mtd->writesize - 1))
      
      When 'writelen' is exactly 1 byte less than the NAND page size the formula
      equates to zero, so the code doesn't process it as a partial write,
      although it should.
      As a consequence the function remains in the while(1) loop with 'writelen'
      becoming 0xffffffff and iterating endlessly.
      
      The bug may not be easy to reproduce in Linux since user space tools
      usually force the padding or round-up the write size to a page-size
      multiple.
      This was discovered in U-Boot where the issue can be reproduced by
      writing any size that is 1 byte less than a page-size multiple.
      For example, on a NAND with 2K page (0x800):
      	=> nand erase.part <partition>
      	=> nand write $loadaddr <partition> 7ff
      
      [Editor's note: the bug was added in commit 29072b96, but moved
      around in commit 66507c7b ("mtd: nand: Add support to use nand_base
      poi databuf as bounce buffer")]
      
      Fixes: 29072b96 ("[MTD] NAND: add subpage write support")
      Signed-off-by: NHector Palacios <hector.palacios@digi.com>
      Acked-by: NBoris Brezillon <boris.brezillon@free-electrons.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      144f4c98
  5. 06 5月, 2016 8 次提交
  6. 20 4月, 2016 6 次提交
  7. 13 4月, 2016 1 次提交
  8. 03 4月, 2016 1 次提交
  9. 12 3月, 2016 1 次提交
  10. 11 3月, 2016 1 次提交
    • A
      mtd: nand: don't select chip in nand_chip's block_bad op · 9f3e0429
      Archit Taneja 提交于
      One of the arguments passed to struct nand_chip's block_bad op is
      'getchip', which, if true, is supposed to get and select the nand device,
      and later unselect and release the device.
      
      This op is intended to be replaceable by drivers. The drivers shouldn't
      be responsible for selecting/unselecting chip. Like other ops, the chip
      should already be selected before the block_bad op is called.
      
      Remove the getchip argument from the block_bad op and
      nand_block_checkbad. Move the chip selection to nand_block_isbad, since it
      is the only caller to nand_block_checkbad which requires chip selection.
      
      Modify nand_block_bad (the default function for the op) such that it
      doesn't select the chip.
      
      Remove the getchip argument from the bad_block funcs in cafe_nand,
      diskonchip and docg4 drivers.
      Reviewed-by: NBoris Brezillon <boris.brezillon@free-electrons.com>
      Signed-off-by: NArchit Taneja <architt@codeaurora.org>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      9f3e0429
  11. 08 3月, 2016 4 次提交
  12. 07 1月, 2016 2 次提交
  13. 19 12月, 2015 3 次提交
    • H
      mtd: nand: Disable subpage writes for drivers without ecc->hwctl · 44991b3d
      Helmut Schaa 提交于
      nand_write_subpage_hwecc causes a crash if the driver did not register
      ecc->hwctl or ecc->calculate. Fix this by disabling subpage writes if
      ecc->hwctl or ecc->calculate is not provided by the driver.
      
      This behavior was introduced in commit 837a6ba4
      "mtd: nand: subpage write support for hardware based ECC schemes".
      
      This fixes a crash with fsl_elbc_nand and maybe others:
      
      Unable to handle kernel paging request for instruction fetch
      Faulting instruction address: 0x00000000
      Oops: Kernel access of bad area, sig: 11 [#1]
      SMP NR_CPUS=2 P1020 RDB
      Modules linked in: ath9k ath9k_common pppoe ppp_async option iptable_nat ath9k_hw ath usb_wwan pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv4 mac80211 ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_quota xt_policy xt_pkttype xt_owner xt_nat xt_multiport xt_mh
      CPU: 1 PID: 2161 Comm: ubiformat Not tainted 3.10.26 #6
      task: efbc2700 ti: c7950000 task.ti: c7950000
      NIP: 00000000 LR: c01a495c CTR: 00000000
      REGS: c7951cb0 TRAP: 0400   Not tainted  (3.10.26)
      MSR: 00029000 <CE,EE,ME>  CR: 24002028  XER: 00000000
      
      GPR00: c01a4b6c c7951d60 efbc2700 ef84b000 00000001 00000000 000001ff c7800500
      GPR08: 00000000 00000000 efae5e40 c01a4ae4 24002022 10023418 c7951e5c c7800500
      GPR16: c017b6a8 00000000 0000003f c053404c 00000000 00000004 00000000 00000003
      GPR24: 00000010 00000200 ef84b000 c7800d00 c7800000 c7800500 ef84b1c8 00000000
      NIP [00000000]   (null)
      LR [c01a495c] nand_write_subpage_hwecc+0x74/0x174
      Call Trace:
      [c7951d60] [c7951d64] 0xc7951d64 (unreliable)
      [c7951da0] [c01a4b6c] nand_write_page+0x88/0x198
      [c7951dd0] [c01a5f7c] nand_do_write_ops+0x2f4/0x39c
      [c7951e40] [c01a61e0] nand_write+0x58/0x84
      [c7951e80] [c019e29c] mtdchar_write+0x1dc/0x28c
      [c7951ef0] [c00aba84] vfs_write+0xcc/0x1ac
      [c7951f10] [c00ac04c] SyS_write+0x4c/0x90
      [c7951f40] [c000cd84] ret_from_syscall+0x0/0x3c
       --- Exception: c01 at 0x48050ed8
           LR = 0x100071b8
       Instruction dump:
       XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
       XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
       ---[ end trace 161d3c65a2a15cb8 ]---
      
      Kernel panic - not syncing: Fatal exception
      
      [Brian: editorial note - we've applied a previous fix for the driver in
      question (fsl_elbc_nand) long ago:
      commit f034d87d ("mtd: eLBC NAND: fix subpage write support")
      but this still makes sense, and it could solve issues on some other
      unforseen driver.]
      
      Cc: Pekon Gupta <pekon.gupta@gmail.com>
      Cc: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
      Cc: David Woodhouse <David.Woodhouse@intel.com>
      Signed-off-by: NHelmut Schaa <helmut.schaa@googlemail.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      44991b3d
    • B
      mtd: nand: kill the chip->flash_node field · 29574ede
      Boris BREZILLON 提交于
      Now that the nand_chip struct directly embeds an mtd_info struct we can
      get rid of the ->flash_node field and forward set/get_flash_node requests
      to the MTD layer.
      
      As a side effect, we no longer need the mtd_set_of_node() call done in
      nand_dt_init().
      Signed-off-by: NBoris Brezillon <boris.brezillon@free-electrons.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      29574ede
    • B
      mtd: nand: simplify nand_dt_init() usage · 7194a29a
      Boris BREZILLON 提交于
      nand_dt_init() function requires 3 arguments where it actually needs one
      (dn and mtd can both be retrieved from chip). Drop these parameters.
      
      Testing for dn != NULL inside nand_dt_init() also helps simplifying the
      caller code.
      Signed-off-by: NBoris Brezillon <boris.brezillon@free-electrons.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      7194a29a