Commit graph

1174 commits

Author SHA1 Message Date
Abhishek Sahu
961d3301a2 mtd: nand: qcom: support for non-page aligned read start address
Currently, the nand driver expects the start address to be page
aligned. This patch adds the support for reading data from
non-page aligned start address by using intermediate buffer.

1. Determine the number of pages with start address and
   length.
2. Do the full page read for all the pages. For first page,
   check the start address and determine the column. If column is
   non-zero then use the intermediate buffer for page data and copy
   the required number of bytes from this intermediate buffer to
   actual buffer.

Change-Id: I05a4b98547c83f785096027596cedd83a283edd8
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2018-06-06 23:02:13 -07:00
Linux Build Service Account
39fb368aa1 Merge "mtd: qcom: write NAND_CTRL only once" 2018-05-04 06:10:20 -07:00
Abhishek Sahu
3edd3544f0 mtd: qcom: write NAND_CTRL only once
Currently NAND_CTRL register write generates error.
Register writes to operational registers should always be done
through command descriptors if BAM_MODE is already enabled.
For NAND boot, bootloader already enables BAM_MODE so read the
NAND_CTRL register value and write only if BAM_MODE is not set.

Change-Id: Iabc3e06dc7d8d8b36cdf35907217e1c4d7cc960a
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2018-05-04 14:55:07 +05:30
Abhishek Sahu
8c71e56950 mtd: nand: qcom: use oobsize from nand id table
If nand id table has specified oobsize then use the same.

Change-Id: I58b19f8f9989c7332d103b83b6920d5b59b29a13
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2018-04-26 12:20:14 +05:30
Abhishek Sahu
a7ab5a19c2 mtd: nand: qcom: fix ubi mount error for non ONFI nand devices
Following error is coming during UBI mount for non ONFI nand
device since mtd->writebufsize is coming as zero

   ubi0: attaching mtd2
   UBI init error 22

The mtd->writebufsize is being assigned currently for ONFI
devices only so move this assigment to common place.

Change-Id: Idd22800dd65035952c1afd07ba375a28ffcf76ad
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2018-04-26 12:20:14 +05:30
Abhishek Sahu
2be258bb00 mtd: nand: qcom: use ECC according chip spare bytes for non ONFI
The ONFI NAND device specifies the required ECC correction in its
param page but for non ONFI device, we don't have such info.
The QPIC NAND contoller can use 8 bit ECC if the chip has required
number of spare bytes. This patch calculates the minimum required
spare bytes for using 8 bit ECC and select the same, if non ONFI
device has required number of spare bytes otherwise 4 bit ECC
will be used.

Change-Id: If7c718f4288eee16857171335897e3209a05fd0b
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2018-04-26 12:20:14 +05:30
Abhishek Sahu
f02cc3797e mtd: nand: add Toshiba TH58NYG3S0H to nand_ids table
Add the full description of the Toshiba TH58NYG3S0H NAND chip
in the nand_ids table since its spare bytes are coming as 128
instead of 256 with standard calculation. This device is non
ONFI/JEDEC device.

Change-Id: If1938fbcd0ebceb70aa9b620186cc92c6d504f75
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2018-04-26 11:33:25 +05:30
Linux Build Service Account
e29cf10dc6 Merge "ipq807x: Enable 4-byte address mode for flash W25Q256JW" 2018-04-04 03:16:31 -07:00
Santan Kumar
98b37b1dd8 ipq807x: Enable 4-byte address mode for flash W25Q256JW
Software SPI reset mode can be trigger from 4-Byte Address mode
in flash W25Q256JW.

Change-Id: I3f8ec46c2732c07a7af0cc7331102334413067ba
Signed-off-by: Santan Kumar <santank@codeaurora.org>
2018-03-30 17:44:43 +05:30
Sasirekaa Madhesu
9400a07874 ipq40xx: spi: Add support for 4Gb Toshiba-TC58CVG2S0F SPI NAND flash
Change-Id: I6c7427fec4bd486c572547a844f22d941f777bf5
Signed-off-by: Sasirekaa Madhesu <smadhesu@codeaurora.org>
2018-03-19 16:21:32 +05:30
Balaji Jagadeesan
6086a41473 ipq40xx: Support for SPI NOR not listed in vendor ID table
Do generic flash structure initialization, for the devices
not listed in the SPI NOR flash lookup table, so that
we can access the flash even before the support is added.
Block size and density are obtained from smem.

Change-Id: I568eb538615bb36124c43a2509bcfce2e4a1188a
Signed-off-by: Balaji Jagadeesan <bjagadee@codeaurora.org>
2018-03-13 11:49:29 +05:30
Balaji Jagadeesan
a47b19fc2b ipq: spi: Increased performance of spi erase
When 4K sector size support is enabled for spi, always
4K sector erase command is passed for all the erase operations.
To increase the performance, 64K erase command is
passed to the command buffer based on length and offset.

Change-Id: Ia762d192ba5d424f0ba3538fff8aff4954050bf7
Signed-off-by: Balaji Jagadeesan <bjagadee@codeaurora.org>
2018-03-06 09:29:48 -08:00
Antony Arun T
4ca40fa90d SF: Bulk Erase command support for spansion
Change-Id: Ida70d167cafc6af823f31c660d108cc25be6edff
Signed-off-by: Antony Arun T <antothom@codeaurora.org>
2018-02-23 13:10:34 +05:30
Gokul Sriram Palanisamy
a0ff1642d4 ipq807x: dcache support for nand driver
This patch adds the support on nand driver to work
when dcache is on.
flush_dcache_range will do both clean and invalidate.
To avoid any data loss when an un-aligned buffer used
in RX path, before giving buffer to bam and after bam
updates the data in buffer, buffer will be flushed.

Change-Id: Ib38d68726efe1692ae94c2be1af61cf29d1c2e50
Signed-off-by: Gokul Sriram Palanisamy <gokulsri@codeaurora.org>
2018-02-18 22:15:23 -08:00
Linux Build Service Account
0f5b9a078e Merge "sf: params: Add MX25U12835F part support" 2018-02-17 03:54:30 -08:00
Kathiravan T
7d93e5bcac ipq806x: FLASH XFER STEP register settings
This change is ported from U-Boot 2012.07 version. Reference commit:
commit a653a9f554 ('ipq806x: FLASH XFER STEP register settings')

Change-Id: I372b0745e53b2d7a222c3445183bb1407fe113d4
Signed-off-by: Kathiravan T <kathirav@codeaurora.org>
2018-02-15 00:02:30 -08:00
Abhishek Sahu
f7375a5dbe mtd: nand: ipq: erased page bitflips detection
Some of the newer nand parts can have bit flips in an erased
page due to the process technology used. In this case, ipq
nand controller is not able to identify that page as an erased
page. In case of bitflips, the ECC engine tries to correct the
data and then it generates the uncorrectable error. Now, this
data is not equal to original raw data.

Following logic is being added to identify the erased
codeword bitflips.

1. Maintain the bitmasks for the codewords which generated
   uncorrectable error.
2. Read the raw data again in temp buffer and count the
   number of zeros. Since spare bytes are unused in ECC layout and
   won’t affect ECC correctability so no need to count number of
   zero in spare bytes.
3. If the number of zero is below ECC correctability then it
   can be treated as erased CW. In this case, make all the data/oob
   of actual user buffers as 0xff.

Change-Id: I5a80cd371a926efa36c40b4db68e78ed78c30536
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2018-02-09 01:50:12 -08:00
Abhishek Sahu
408362f410 mtd: nand: ipq: reorganize read page error handling
Following are the major issues in current implementation

1. The mtd layer expects the driver to return non-negative
   integer representing the maximum number of bitflips that were
   corrected on any one ecc region. The mtd layer takes care of
   returning EUCLEAN based on returned number.
2. The read should return the complete data in case of
   EBADMSG so move the EBADMSG check in the main read function.

Change-Id: Iab3a28427e8350e8c99368762373f2cbce918786
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2018-02-09 15:18:54 +05:30
Abhishek Sahu
e86df26289 mtd: nand: ipq: init mtd ecc strength and bitflip_threshold
1. assign ecc strength in mtd structure which will be used by
   mtd layer
2. Initialize bitflip_threshold with 3*4 of ecc strength so
   that MTD layer will return EUCLEAN if number of ecc correction
   are more than bitflip_threshold.

Change-Id: I81cfe6059375117ced7888b877705919287a7be2
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2018-02-09 15:18:53 +05:30
Antony Arun T
fff58f6989 sf: params: Add MX25U12835F part support
Change-Id: Ib112587634758b0ada0e369971402f3e8ef6a8be
Signed-off-by: Antony Arun T <antothom@codeaurora.org>
2018-02-08 23:39:39 -08:00
Linux Build Service Account
7be2d06674 Merge "mtd: nand: qcom: erased page bitflips detection." 2018-02-08 15:43:35 -08:00
Linux Build Service Account
3221496969 Merge "qca: spi-nor: Store the probe information to avoid unnecessary probes" 2018-02-08 15:43:34 -08:00
Santan Kumar
a0dd6f4332 qca: spi-nor: Store the probe information to avoid unnecessary probes
Change-Id: If7260e4a4065d6406d9a8554f43853663f0e8f3b
Signed-off-by: Santan Kumar <santank@codeaurora.org>
2018-02-08 15:58:22 +05:30
Rajkumar Ayyasamy
8ac98b5fd9 ipq40xx: spi: Added support for GD25Q256
Change-Id: Iefc667c95558234e54111e6052f16e0f035b24ab
Signed-off-by: Rajkumar Ayyasamy <arajkuma@codeaurora.org>
2018-02-06 14:46:09 +05:30
Rajkumar Ayyasamy
f44fe93184 ipq40xx: Add SPI NAND support
Change-Id: I74de22fcea6455f73f263672b72b30b796f6c820
Signed-off-by: Rajkumar Ayyasamy <arajkuma@codeaurora.org>
2018-01-02 14:57:16 +05:30
Linux Build Service Account
0f0347f694 Merge "ipq40xx: add snapshot of spi_nand driver" 2017-12-26 06:59:33 -08:00
Rajkumar Ayyasamy
d7294fbcca ipq40xx: add snapshot of spi_nand driver
This is a snapshot of the spi_nand as of uboot-1.0
commit:

e6434d80905a219860c8ede78377221ded2510f2 (ipq40xx:
Add bit-flip threshold for QPIC NAND)

Change-Id: I91db5822cc450e9d7eb52fca9eab213784547206
Signed-off-by: Rajkumar Ayyasamy <arajkuma@codeaurora.org>
2017-12-07 20:01:08 +05:30
Linux Build Service Account
48cb38ecf2 Merge "sf: params: Added the GD25Q128 flash support" 2017-12-07 03:00:20 -08:00
Rajkumar Ayyasamy
431372a078 sf: params: Added the GD25Q128 flash support
Change-Id: I57504aa1bca17023476980a3fb474613b3d786ca
Signed-off-by: Rajkumar Ayyasamy <arajkuma@codeaurora.org>
2017-12-06 00:28:23 -08:00
Rajkumar Ayyasamy
8ee53b0702 mtd: nand: fixed the 8 bit NAND ECC support
1. This driver is directly being registered with MTD
   layer.So for OOB operations, the device OOB size will be
   passed. NAND controller can’t handle the complete OOB so
   calculate NAND Controller supported OOB size and overwrite
   the device OOB size with that.

2. Enabling 8 bit ECC support in dev0_ecc_cfg register

Change-Id: I5f4297932eea6bed47182d235d081cbe30d1b85c
Signed-off-by: Rajkumar Ayyasamy <arajkuma@codeaurora.org>
2017-12-05 21:01:32 -08:00
Rajkumar Ayyasamy
afd4597fec mtd: nand: comparing with dev_id instead of id
Change-Id: Iefae4b3e3cb9da8effbb4f03877e9f9f2e381f43
Signed-off-by: Rajkumar Ayyasamy <arajkuma@codeaurora.org>
2017-11-27 15:51:31 +05:30
Abhishek Sahu
726702b83b mtd: nand: qcom: erased page bitflips detection.
Some of the newer nand parts can have bit flips in an erased
page due to the process technology used. In this case, qpic
nand controller is not able to identify that page as an erased
page. In case of bitflips, the ECC engine tries to correct the
data and then it generates the uncorrectable error. Now, this
data is not equal to original raw data.

Following logic is being added to identify the erased
codeword bitflips.
1. Maintain the bitmasks for the codewords which generated
   uncorrectable error.
2. Read the raw data again in temp buffer and count the
   number of zeros. Since spare bytes are unused in ECC layout and
   won’t affect ECC correctability so no need to count number of
   zero in spare bytes.
3. If the number of zero is below ECC correctability then it
   can be treated as erased CW. In this case, make all the data/oob
   of actual user buffers as 0xff.

Change-Id: Ie0427c6802e2e41234137e0fbbf51c5a50a35946
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2017-11-07 03:33:53 -08:00
Abhishek Sahu
698a7e98e0 mtd: nand: qcom: store the number of spare, ecc and bbm bytes
This patch does minor code reorganization to store spare, ecc and
bbm bytes in nand device structure which will be useful in
subsequent patches.

Change-Id: Id44c53e204a874569968764798c346a609695acf
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2017-11-07 03:33:49 -08:00
Abhishek Sahu
e2d3adc527 mtd: nand: qcom: reorganize read page error handling
Following are the major issues in current implementation for
checking the read errors

1. For checking the erased CW, NAND_ERASED_CW_DETECT_STATUS
   is being read inside qpic_nand_check_status. The
   qpic_nand_check_status will be called after complete page read
   so reading status register won’t help in getting the register
   value after each CW reads.
2. The mtd layer expects the driver to return non-negative
   integer representing the maximum number of bitflips that were
   corrected on any one ecc region. The mtd layer takes care of
   returning EUCLEAN based on returned number.
3. mtd->ecc_stats is only applicable when ECC engine is
   doing ECC correction. For raw reads, the stats should not be
   incremented.

Now the changes have been done to reorganize the error handling

1. schedule the NAND_ERASED_CW_DETECT_STATUS reading after
   every CW read and check the same if ECC engine generates
   uncorrectable error.
2. For raw read, the ECC engine will never generate the
   uncorrectable error or erased CW so check only
   NAND_FLASH_STATUS.
3. The qpic_nand_read_oob should return the maximum number
   of bitflips that were corrected on any one ecc region so
   introduce the max_bitflips for maintaining the same.
4. The read should return the complete data in case of
   BADMSG so move the BADMSG check in the main read function.

Change-Id: Ibef56294ace00d7cd67b501f623fb1d3aeb2c6ec
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2017-11-07 03:33:45 -08:00
Abhishek Sahu
136a1cd106 mtd: nand: qcom: init mtd ecc strength and bitflip_threshold
1. ecc strength can be assigned in mtd structure itself so
   remove the ecc_width from qpic nand dev structure
2. Initialize bitflip_threshold with 3*4 of ecc strength so
   that MTD layer will return EUCLEAN if number of ecc correction
   are more than bitflip_threshold.

Change-Id: Ieafd1957b89a05f9dd0fdfe829712d8891bd6a48
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2017-11-07 03:33:40 -08:00
Abhishek Sahu
7ac43aedb3 mtd: nand: qcom: remove unused status code for bad page
NANDC_RESULT_BAD_PAGE is not being returned by any operation, so
it can be removed.

Change-Id: Ia90e4e6b7ef7577d069d312d51083b50f49bf980
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2017-11-07 03:33:34 -08:00
Sham Muthayyan
db4516262a qcom: nand: Issue the Reset command before probe
Reset command must be the first command issued to all
targets after the NAND flash device is powered on.

Change-Id: I617dc5b0ad8d72705dcf20f1cb554134b166e533
Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
2017-10-25 23:45:34 -07:00
Sham Muthayyan
23f9381f86 ipq807x: Add 4byte mode support for Winbond nor flash
Change-Id: I4f31612091bff4f03527fbfd41f02f4a7267f248
Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
2017-10-25 04:25:04 -07:00
Sham Muthayyan
da2e958e58 ipq807x: Added the W25Q256JW flash support
Change-Id: Iee648d783567ed2b6ff09addbb000709fa6461ff
Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
2017-09-14 01:56:40 -07:00
Abhishek Sahu
3813ce677b ubi: fix data aborts in case of NAND bit flips during block read
The UBI layer generates the following data aborts if any of the
NAND block contains bit flips

    ubi0: attaching mtd2
    ubi0: fixable bit-flip detected at PEB 149
    ubi0: scanning is finished
    ubi0: fixable bit-flip detected at PEB 149
    data abort
    pc : [<4a934cc8>]          lr : [<4a933aec>]
    reloc pc : [<4a934cc8>]    lr : [<4a933aec>]
    sp : 4a77f2e0  ip : 00000095     fp : 00000075
    r10: 000001b7  r9 : 4a77fea0     r8 : 00000001
    r7 : 0001f000  r6 : 0001f000     r5 : 4a785e40  r4 : 4a7c4180
    r3 : 00000000  r2 : 00000075     r1 : 4a7860b8  r0 : 4a7c49c0
    Flags: nzcv  IRQs off  FIQs off  Mode SVC_32
    Resetting CPU ...

UBI layer will move the data from original block to some other
block in case of bit flips in the function ubi_eba_copy_leb. This
function uses volume EBA table vol->eba_tbl. The current UBI code
calls ubi_wl_init followed by ubi_eba_init but the ubi_eba_init
only initializes the volume EBA table. In case of bit failure,
the ubi_wl_init calls function __schedule_ubi_work which will
call ubi_eba_copy_leb and triggers data abort.

ubi_attach() {
    ubi_wl_init ->  __schedule_ubi_work -> ubi_eba_copy_leb
    ubi_eba_init
}

The UBI code has been written for Linux kernel and it has been
ported to UBOOT. Since UBOOT does not support threads so all the
thread functions are being called in uboot synchronously.
In Linux kernel, the UBI background thread starts
after the initialization, which is being controlled by
thread_enabled variable which will be set to true after all
initialization.

Now this patch checks for thread_enabled variable and call the
do_work only if the thread is enabled.

Change-Id: I4b2b40031dbd5f16ceefef541248973ca326cd9c
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2017-09-05 16:52:06 +05:30
Linux Build Service Account
9c30999bb6 Merge "qcom: nand: fix NAND dummy spare area programming" 2017-08-03 05:36:34 -07:00
Linux Build Service Account
16562b7f20 Merge "qcom: nand: fixed the 8 bit NAND ECC support" 2017-08-03 05:36:34 -07:00
Vasudevan Murugesan
6ebedacfc5 ipq807x: Fixed flash ID for MX25U3235F
Change-Id: Ie9e2224b963428386f6970ef5950a9d04ac3cad8
Signed-off-by: Vasudevan Murugesan <vmuruges@codeaurora.org>
2017-07-27 02:15:14 -07:00
Abhishek Sahu
98c1c8e9db qcom: nand: fix NAND dummy spare area programming
NAND_CMD_PRG_PAGE_ALL uses the spare data from buffer itself
which is not applicable. The spare area in NAND page for
QPIC are dummy bytes so 0xff should be written to these
spare area. NAND_CMD_PRG_PAGE does the same thing and HLOS
driver uses this command for all page program
operations.  The actual spare data is being written along
with every codeword since the codewords size is 516 in which
512 bytes are user data and 4 bytes are spare data.

Change-Id: I5651caf5ea95f046570e8318f59e140398869ece
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2017-06-26 04:33:46 -07:00
Abhishek Sahu
25137add04 qcom: nand: fixed the 8 bit NAND ECC support
1. This driver is directly being registered with MTD
   layer so for OOB operations, the device OOB size will be
   passed. QPIC can’t handle the complete OOB so calculate QPIC
   supported OOB size and overwrite the device OOB size with
   QPIC supported OOB size.

2. OOB available calculation was wrong. The available OOB’s are
   4 bytes per codeword.

3. Raw configuration codeword size was hardcoded to 528 while 8
   bit ECC codeword size is 532.

Change-Id: Idc118e2fdd9882758da9dc6b1e977e04697a5640
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2017-06-26 04:33:36 -07:00
Abhishek Sahu
4d61ddbda3 qcom: nand: configure QPIC XFER STEPS registers
The QPIC XFER STEPS will not be configured in non NAND boot
mode and the data transfer speed will be very slow. Now this
patch reads the timing parameter from ONFI page and configures
the NAND XFER STEPS registers for highest supported ONFI mode.
For NON ONFI device, it will configure to default mode.

Change-Id: I2daf4a92255307efc53db9bb7fe2f02e8c00c3fa
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
2017-06-22 23:48:48 -07:00
Prabhu Jayakumar
97c3087906 qca: move ARM specific files to another sublevel
As the U-boot source is going to be common between ARM and MIPS
architecture , it is required to pick only the files specific
to the respective architectures during the build.

So, move the qca arm target specific common files to another
sub level by specifying the ARCH arm.

Change-Id: I06b538834109981f21fef6270bfb8e437a2f5a7e
Signed-off-by: Prabhu Jayakumar <pjayak@codeaurora.org>
2017-01-06 12:33:30 +05:30
Gokul Sriram Palanisamy
5c0dd6970e ARM: qca: ipq8074: Added support for NOR+NAND
Change includes
1. Device tree entry for SPI_NOR GPIO configuration
2. Register SPI_NOR as psudo NAND

Change-Id: I4d271dcd2970af370975e4a8d9a78199e1cfd2a2
Signed-off-by: Gokul Sriram Palanisamy <gpalan@codeaurora.org>
2016-12-02 15:17:35 +05:30
Ajay Kishore
d38583f326 ipq806x: nand: Add missing writebufsize initialization for ubi fastmap
The writebufsize is introduced in mtd struct for the ubi fastmap
support.
This is not initialized in the qpic nand driver which leads to ubi
error.
Fixed the following ubi error.
	bad write buffer size 0 for 2048 min. I/O unit
	UBI init error 22

Change-Id: I35778366b95930bd01108bf300f073ee21940bc6
Signed-off-by: Ajay Kishore <akisho@codeaurora.org>
2016-10-20 13:02:43 +05:30
Gokul Sriram Palanisamy
96fa862182 qca: moving qpic-nand initialization to common location
Moves qpic-nand configuration and gpio initialization routine
to common location.

Change-Id: Ic78230d4e66450bb6804cf9cbd79cec9e8d2f5df
Signed-off-by: Gokul Sriram Palanisamy <gpalan@codeaurora.org>
2016-10-18 05:27:50 -07:00