This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux: How to add MTD Partition for additional NAND Flash in Linux Device Tree for OMAPL138 SoC

Other Parts Discussed in Thread: OMAP-L132, OMAPL138

Tool/software: Linux

Hi there, 

I have gone through the user guide on how to add partition and the link of the user guide is 

http://processors.wiki.ti.com/index.php/Linux_Core_NAND_User%27s_Guide

I have made the changes in the device tree to add addition NAND Flash with different Chip Select (CS2) and different register. When I look at the following command after Linux boot up:

root@omapl138-lcdk:/proc/device-tree/aemif@68000000# ls -al
-r--r--r-- 1 root root 4 Jul 25 13:50 #address-cells
-r--r--r-- 1 root root 4 Jul 25 13:50 #size-cells
drwxr-xr-x 4 root root 0 Jul 25 13:50 .
drwxr-xr-x 11 root root 0 Jul 25 13:49 ..
-r--r--r-- 1 root root 15 Jul 25 13:50 compatible
drwxr-xr-x 3 root root 0 Jul 25 13:50 cs2
drwxr-xr-x 3 root root 0 Jul 25 13:50 cs3
-r--r--r-- 1 root root 6 Jul 25 13:50 name
-r--r--r-- 1 root root 4 Jul 25 13:50 pinctrl-0
-r--r--r-- 1 root root 8 Jul 25 13:50 pinctrl-names
-r--r--r-- 1 root root 32 Jul 25 13:50 ranges
-r--r--r-- 1 root root 8 Jul 25 13:50 reg
-r--r--r-- 1 root root 5 Jul 25 13:50 status
root@omapl138-lcdk:/proc/device-tree/aemif@68000000#

Does look like the nand flash cs2 has been created but can see it in the followinf MTD command:

root@omapl138-lcdk:/proc/device-tree/aemif@68000000# cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00020000 "u-boot env"
mtd1: 00080000 00020000 "u-boot"
mtd2: 1ff60000 00020000 "free space"

Do I need to add any other logic other than updating the device-tree and rebuild the kernel? 

Please let me know. Thanks in advance.

The SDK version is 4.0.0.4

  • Below is the Device tree definition for NAND Flash: (part of da850-lcdk.dts)

    &aemif {
    pinctrl-names = "default";
    pinctrl-0 = <&nand_pins>;
    status = "okay";
    cs2 {
    #address-cells = <2>;
    #size-cells = <1>;
    clock-ranges;
    ranges;

    ti,cs-chipselect = <2>;

    nand@0,0 {
    compatible = "ti,davinci-nand";
    #address-cells = <1>;
    #size-cells = <1>;
    reg = <0 0x00000000 0x02000000
    1 0x00000000 0x00008000>;

    ti,davinci-chipselect = <1>;
    ti,davinci-mask-ale = <0>;
    ti,davinci-mask-cle = <0>;
    ti,davinci-mask-chipsel = <0>;

    ti,davinci-nand-buswidth = <16>;
    ti,davinci-ecc-mode = "hw";
    ti,davinci-ecc-bits = <4>;
    ti,davinci-nand-use-bbt;

    /*
    * DSP Board has 2 NAND Flash. The CS2 NAND FLash
    * is used for booting FPGA.
    */
    partitions {
    compatible = "fixed-partitions";
    #address-cells = <1>;
    #size-cells = <1>;

    partition@0 {
    label = "FPGA FW";
    reg = <0 0x200000>;
    };
    partition@0x400000 {
    /* Extra partition */
    label = "Spare";
    reg = <0x0400000 0x0200000>;
    };
    };
    };
    };
    cs3 {
    #address-cells = <2>;
    #size-cells = <1>;
    clock-ranges;
    ranges;

    ti,cs-chipselect = <3>;

    nand@2000000,0 {
    compatible = "ti,davinci-nand";
    #address-cells = <1>;
    #size-cells = <1>;
    reg = <0 0x02000000 0x02000000
    1 0x00000000 0x00008000>;

    ti,davinci-chipselect = <1>;
    ti,davinci-mask-ale = <0>;
    ti,davinci-mask-cle = <0>;
    ti,davinci-mask-chipsel = <0>;

    ti,davinci-nand-buswidth = <16>;
    ti,davinci-ecc-mode = "hw";
    ti,davinci-ecc-bits = <4>;
    ti,davinci-nand-use-bbt;

    /*
    * The OMAP-L132/L138 Bootloader doc SPRAB41E reads:
    * "To boot from NAND Flash, the AIS should be written
    * to NAND block 1 (NAND block 0 is not used by default)".
    * The same doc mentions that for ROM "Silicon Revision 2.1",
    * "Updated NAND boot mode to offer boot from block 0 or block 1".
    * However the limitaion is left here by default for compatibility
    * with older silicon and because it needs new boot pin settings
    * not possible in stock LCDK.
    */
    partitions {
    compatible = "fixed-partitions";
    #address-cells = <1>;
    #size-cells = <1>;

    partition@0 {
    label = "u-boot env";
    reg = <0 0x020000>;
    };
    partition@0x020000 {
    /* The LCDK defaults to booting from this partition */
    label = "u-boot";
    reg = <0x020000 0x080000>;
    };
    partition@0x0a0000 {
    label = "free space";
    reg = <0x0a0000 0>;
    };
    };
    };
    };
    };
  • Not sure why NAND Flasg CS2 is not filled in this iomem table:

    root@omapl138-lcdk:/proc# cat iomem
    01c00000-01c07fff : edma3_cc
    01c14044-01c14047 : host1cfg
    01c14110-01c1411b : /soc@1c00000/priority-controller@14110
    01c14120-01c1416f : pinctrl-single
    01c14174-01c1417b : chipsig
    01c21000-01c21fff : /soc@1c00000/wdt@21000
    01c40000-01c40fff : mmc0
    01e20000-01e23fff : /soc@1c00000/ethernet@220000
    01e24000-01e24fff : /soc@1c00000/mdio@224000
    01e26000-01e26fff : /soc@1c00000/gpio@226000
    01e30000-01e37fff : edma3_cc
    11800000-1183ffff : l2sram
    11e00000-11e07fff : l1pram
    11f00000-11f07fff : l1dram
    62000000-63ffffff : /aemif@68000000/cs3/nand@2000000,0
    68000000-68007fff : /aemif@68000000
    b0000000-b00000e7 : /memory-controller@b0000000
    c0000000-c7ffffff : System RAM
    c0008000-c05e6fff : Kernel code
    c0620000-c069616f : Kernel data
    root@omapl138-lcdk:/proc#
  • More Log details:
    log from
    $> cat /var/volatile/log/syslog
    ...
    May 11 10:09:50 omapl138-lcdk kernel: davinci_nand: probe of 60000000.nand failed with error -2
    May 11 10:09:50 omapl138-lcdk kernel: nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xcc
    May 11 10:09:50 omapl138-lcdk kernel: nand: Micron MT29F4G16ABADAH4
    May 11 10:09:50 omapl138-lcdk kernel: nand: 512 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
    May 11 10:09:50 omapl138-lcdk kernel: Bad block table not found for chip 0
    May 11 10:09:51 omapl138-lcdk kernel: Bad block table not found for chip 0
    May 11 10:09:51 omapl138-lcdk kernel: Scanning device for bad blocks
    May 11 10:09:53 omapl138-lcdk ipsec[239]: charon too long to start... - kill kill
    May 11 10:09:53 omapl138-lcdk ipsec[239]: charon has died -- restart scheduled (5sec)
    May 11 10:09:54 omapl138-lcdk kernel: Bad block table written to 0x00001ffe0000, version 0x01
    May 11 10:09:54 omapl138-lcdk kernel: Bad block table written to 0x00001ffc0000, version 0x01
    May 11 10:09:54 omapl138-lcdk kernel: 3 ofpart partitions found on MTD device davinci-nand.0
    May 11 10:09:54 omapl138-lcdk kernel: Creating 3 MTD partitions on "davinci-nand.0":
    May 11 10:09:54 omapl138-lcdk kernel: 0x000000000000-0x000000020000 : "u-boot env"
    May 11 10:09:54 omapl138-lcdk kernel: 0x000000020000-0x0000000a0000 : "u-boot"
    May 11 10:09:54 omapl138-lcdk kernel: 0x0000000a0000-0x000020000000 : "free space"
    May 11 10:09:54 omapl138-lcdk kernel: davinci_nand davinci-nand.0: controller rev. 2.5
    May 11 10:09:57 omapl138-lcdk systemd[1]: Started Getty on tty1.
    ...


    Could the error on probe of 60000000.nand be due to the fact we are using different wait pin for the NAND? (Using WAIT PIN 0 for CS3 and WAIT PIN 1 for CS2)
  • Can you share the aemif pinmux that you use? Also what happens if you commend the CS3 and leave only CS2?
    Please share the full bootlogs.

    Best Regards,
    Yordan
  • Also share which Processor SDK Linux version is this.
  • Hi 

    this is ti-processor-sdk-linux-omapl138-lcdk-04.00.00.04

  • Hi,

    Attached full log and device-tree files for pinmux details.

    thanks.

    4544.da850.txt
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    /*
    * Copyright 2012 DENX Software Engineering GmbH
    * Heiko Schocher <hs@denx.de>
    *
    * This program is free software; you can redistribute it and/or modify it
    * under the terms of the GNU General Public License as published by the
    * Free Software Foundation; either version 2 of the License, or (at your
    * option) any later version.
    */
    #include "skeleton.dtsi"
    #include <dt-bindings/interrupt-controller/irq.h>
    / {
    aliases {
    rproc0 = &dsp;
    };
    arm {
    #address-cells = <1>;
    #size-cells = <1>;
    ranges;
    intc: interrupt-controller@fffee000 {
    compatible = "ti,cp-intc";
    interrupt-controller;
    #interrupt-cells = <1>;
    ti,intc-size = <101>;
    reg = <0xfffee000 0x2000>;
    };
    };
    dsp: dsp@11800000 {
    compatible = "ti,da850-dsp";
    reg = <0x11800000 0x40000>,
    <0x11e00000 0x8000>,
    <0x11f00000 0x8000>,
    <0x01c14044 0x4>,
    <0x01c14174 0x8>;
    reg-names = "l2sram", "l1pram", "l1dram", "host1cfg", "chipsig";
    interrupt-parent = <&intc>;
    interrupts = <28>;
    status = "disabled";
    };
    soc@1c00000 {
    compatible = "simple-bus";
    model = "da850";
    #address-cells = <1>;
    #size-cells = <1>;
    ranges = <0x0 0x01c00000 0x400000>;
    interrupt-parent = <&intc>;
    pmx_core: pinmux@14120 {
    compatible = "pinctrl-single";
    reg = <0x14120 0x50>;
    #address-cells = <1>;
    #size-cells = <0>;
    pinctrl-single,bit-per-mux;
    pinctrl-single,register-width = <32>;
    pinctrl-single,function-mask = <0xf>;
    status = "disabled";
    serial0_rtscts_pins: pinmux_serial0_rtscts_pins {
    pinctrl-single,bits = <
    /* UART0_RTS UART0_CTS */
    0x0c 0x22000000 0xff000000
    >;
    };
    serial0_rxtx_pins: pinmux_serial0_rxtx_pins {
    pinctrl-single,bits = <
    /* UART0_TXD UART0_RXD */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    8081.da850-lcdk.txt
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    /*
    * Copyright (c) 2016 BayLibre, Inc.
    *
    * Licensed under GPLv2.
    */
    /dts-v1/;
    #include "da850.dtsi"
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/input/input.h>
    / {
    model = "DA850/AM1808/OMAP-L138 LCDK";
    compatible = "ti,da850-lcdk", "ti,da850";
    aliases {
    /*serial2 = &serial2;*/
    ethernet0 = &eth0;
    };
    /*chosen {
    stdout-path = "serial2:115200n8";
    };*/
    memory {
    device_type = "memory";
    reg = <0xc0000000 0x08000000>;
    };
    reserved-memory {
    #address-cells = <1>;
    #size-cells = <1>;
    ranges;
    dsp_cma_pool: dsp_cma@c3000000 {
    compatible = "shared-dma-pool";
    reg = <0xc3000000 0x2000000>;
    reusable;
    status = "okay";
    };
    };
    /*sound {
    compatible = "simple-audio-card";
    simple-audio-card,name = "DA850/OMAP-L138 LCDK";
    simple-audio-card,widgets =
    "Line", "Line In",
    "Line", "Line Out";
    simple-audio-card,routing =
    "LINE1L", "Line In",
    "LINE1R", "Line In",
    "Line Out", "LLOUT",
    "Line Out", "RLOUT";
    simple-audio-card,format = "dsp_b";
    simple-audio-card,bitclock-master = <&link0_codec>;
    simple-audio-card,frame-master = <&link0_codec>;
    simple-audio-card,bitclock-inversion;
    simple-audio-card,cpu {
    sound-dai = <&mcasp0>;
    system-clock-frequency = <24576000>;
    };
    link0_codec: simple-audio-card,codec {
    sound-dai = <&tlv320aic3106>;
    system-clock-frequency = <24576000>;
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    syslog.txt
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    May 11 10:09:46 omapl138-lcdk syslog-ng[146]: syslog-ng starting up; version='3.5.4.1'
    May 11 10:09:37 omapl138-lcdk systemd[1]: Starting Network Name Resolution...
    May 11 10:09:46 omapl138-lcdk syslogd[190]: syslogd: read from /dev/log: Resource temporarily unavailable
    May 11 10:09:37 omapl138-lcdk systemd-timesyncd[99]: Network configuration changed, trying to establish connection.
    May 11 10:09:38 omapl138-lcdk systemd[1]: Starting thttpd.service...
    May 11 10:09:39 omapl138-lcdk systemd-networkd[184]: eth0: Gained IPv6LL
    May 11 10:09:39 omapl138-lcdk systemd[1]: Started Run Coda Octopus startup scripts.
    May 11 10:09:39 omapl138-lcdk systemd[1]: Started Permit User Sessions.
    May 11 10:09:40 omapl138-lcdk systemd-resolved[243]: Positive Trust Anchors:
    May 11 10:09:40 omapl138-lcdk systemd[1]: Started Lightning Fast Webserver With Light System Requirements.
    May 11 10:09:40 omapl138-lcdk systemd-resolved[243]: . IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5
    May 11 10:09:40 omapl138-lcdk systemd-resolved[243]: Negative trust anchors: 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-addr.arpa 29.172.in-addr.arpa 30.172.in-addr.arpa 31.172.in-addr.arpa 168.192.in-addr.arpa corp home internal intranet lan local private test
    May 11 10:09:40 omapl138-lcdk systemd-resolved[243]: Using system hostname 'omapl138-lcdk'.
    May 11 10:09:40 omapl138-lcdk systemd-networkd[184]: eth0: Configured
    May 11 10:09:40 omapl138-lcdk systemd-timesyncd[99]: Network configuration changed, trying to establish connection.
    May 11 10:09:42 omapl138-lcdk systemd[1]: Started Network Name Resolution.
    May 11 10:09:42 omapl138-lcdk systemd[1]: Started thttpd.service.
    May 11 10:09:42 omapl138-lcdk systemd[1]: Started Login Service.
    May 11 10:09:43 omapl138-lcdk systemd[1]: Starting rng-tools.service...
    May 11 10:09:44 omapl138-lcdk systemd[1]: Started Getty on tty1.
    May 11 10:09:44 omapl138-lcdk systemd[1]: Reached target Login Prompts.
    May 11 10:09:45 omapl138-lcdk systemd[1]: Started rng-tools.service.
    May 11 10:09:46 omapl138-lcdk systemd[1]: busybox-syslog.service: Main process exited, code=exited, status=128/n/a
    May 11 10:09:46 omapl138-lcdk systemd[1]: busybox-syslog.service: Unit entered failed state.
    May 11 10:09:46 omapl138-lcdk systemd[1]: busybox-syslog.service: Failed with result 'exit-code'.
    May 11 10:09:48 omapl138-lcdk snmpd[217]: NET-SNMP version 5.7.3
    May 11 10:09:48 omapl138-lcdk systemd[1]: Started Simple Network Management Protocol (SNMP) Daemon..
    May 11 10:09:51 omapl138-lcdk kernel: davinci_nand: probe of 60000000.nand failed with error -2
    May 11 10:09:51 omapl138-lcdk kernel: nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xcc
    May 11 10:09:51 omapl138-lcdk kernel: nand: Micron MT29F4G16ABADAH4
    May 11 10:09:51 omapl138-lcdk kernel: nand: 512 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
    May 11 10:09:51 omapl138-lcdk kernel: Bad block table not found for chip 0
    May 11 10:09:52 omapl138-lcdk kernel: Bad block table not found for chip 0
    May 11 10:09:52 omapl138-lcdk kernel: Scanning device for bad blocks
    May 11 10:09:52 omapl138-lcdk ipsec[210]: charon too long to start... - kill kill
    May 11 10:09:52 omapl138-lcdk ipsec[210]: charon has died -- restart scheduled (5sec)
    May 11 10:09:54 omapl138-lcdk kernel: Bad block table written to 0x00001ffe0000, version 0x01
    May 11 10:09:54 omapl138-lcdk kernel: Bad block table written to 0x00001ffc0000, version 0x01
    May 11 10:09:54 omapl138-lcdk kernel: 3 ofpart partitions found on MTD device davinci-nand.0
    May 11 10:09:54 omapl138-lcdk kernel: Creating 3 MTD partitions on "davinci-nand.0":
    May 11 10:09:54 omapl138-lcdk kernel: 0x000000000000-0x000000020000 : "u-boot env"
    May 11 10:09:54 omapl138-lcdk kernel: 0x000000020000-0x0000000a0000 : "u-boot"
    May 11 10:09:54 omapl138-lcdk kernel: 0x0000000a0000-0x000020000000 : "free space"
    May 11 10:09:54 omapl138-lcdk kernel: davinci_nand davinci-nand.0: controller rev. 2.5
    May 11 10:09:58 omapl138-lcdk charon: 00[DMN] Starting IKE charon daemon (strongSwan 5.5.0, Linux 4.9.28-geed43d1050, armv5tejl)
    May 11 10:09:58 omapl138-lcdk systemd[1]: Created slice system-dropbear.slice.
    May 11 10:09:58 omapl138-lcdk charon: 00[CFG] opening PKCS#11 library failed: /usr/lib/softhsm/libsecstore.so.1: cannot open shared object file: No such file or directory
    May 11 10:09:58 omapl138-lcdk systemd[1]: Started SSH Per-Connection Server (192.168.254.49:57782).
    May 11 10:09:58 omapl138-lcdk systemd[1]: Started SSH Per-Connection Server (192.168.254.49:57781).
    May 11 10:09:58 omapl138-lcdk systemd[1]: Starting SYSV: The kdump script provides the support:...
    May 11 10:09:59 omapl138-lcdk kdump[415]: No makedumpfile found.
    May 11 10:09:59 omapl138-lcdk kdump[415]: Kdump isn't supported on the running kernel,please check boot option!!!
    May 11 10:09:59 omapl138-lcdk kdump: Kdump isn't supported on the running kernel,please check boot option!!!
    May 11 10:09:59 omapl138-lcdk systemd[1]: kdump.service: Control process exited, code=exited status=1
    May 11 10:09:59 omapl138-lcdk systemd[1]: Failed to start SYSV: The kdump script provides the support:.
    May 11 10:09:59 omapl138-lcdk systemd[1]: kdump.service: Unit entered failed state.
    May 11 10:09:59 omapl138-lcdk systemd[1]: kdump.service: Failed with result 'exit-code'.
    May 11 10:10:00 omapl138-lcdk systemd[1]: Starting matrix-gui-2.0.service...
    May 11 10:10:00 omapl138-lcdk matrix-gui-2.0[446]: /etc/init.d/matrix-gui-2.0: line 12: /etc/profile.d/*.sh: No such file or directory
    May 11 10:10:00 omapl138-lcdk systemd[1]: matrix-gui-2.0.service: Control process exited, code=exited status=1
    May 11 10:10:00 omapl138-lcdk systemd[1]: Failed to start matrix-gui-2.0.service.
    May 11 10:10:00 omapl138-lcdk systemd[1]: matrix-gui-2.0.service: Unit entered failed state.
    May 11 10:10:00 omapl138-lcdk systemd[1]: matrix-gui-2.0.service: Failed with result 'exit-code'.
    May 11 10:10:00 omapl138-lcdk systemd[1]: Starting thermal-zone-init.service...
    May 11 10:10:00 omapl138-lcdk thermal-zone-init[455]: Enabling thermal zones...
    May 11 10:10:00 omapl138-lcdk thermal-zone-init[455]: /etc/init.d/thermal-zone-init: line 11: /sys/class/thermal/thermal_zone*/mode: No such file or directory
    May 11 10:10:01 omapl138-lcdk systemd[1]: Started thermal-zone-init.service.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • ANd I think, its Linux v4.9.28
    Thanks
  • Let me have a look at the attachments. I will update as soon as I have feedback.
  • If I do this, will Linux even boot?
  • Sorry for the delay. I am working on this.
  • Hi Yordan, thanks for looking into this. Also as a note, my custom OMAPL138 chip hardware has two Nand Flash CS2 and CS3 and are connected to WAIT0 and WAIT1 pin respectively. Hope to get some solution soon on this. Cheers.
  • I'll try to answer by EOB Monday.
  • Hi, Mitesh,

    I took a look at your dts files. They seems ok to me. The error shown in boot logs should have something to do with the other NAND not working. This may come back to the dts configuration. In TRM, address 0x60000000 is mapped to CS2 data area. I suspect it's the cs-chipselect but have not been able to find anything in the code to prove it. I am still investigating what could be the problem.

    Rex
  • Hi Rex, 

    All I can see as a potential problem is the WAIT Pin used for CS2 NAND Flash. Looking at the nand.c driver file, I could not see how is it determining which wait pin to be used. But please do carry on with your investigation. Thanks. 

  • Hi Rex and Yordan, while you are investigating this problem, would you please also check what is the default ECC mode used whenusing nandwrite function on Linux. Thanks

    In the device tree its is the following:

    ti,davinci-ecc-mode = "hw";
    ti,davinci-ecc-bits = <4>;

    Is this using OMAP_ECC_HAM1_CODE_HW  ??

    Thanks.

  • Hello, any update on this please.
  • Hi, Mitesh,

    Not much progress on the issue. As for the ECC question, no, OMAP_ECC_HAM1_CODE_HW is not used by davinci-nand. It is for other devices and for nand property of
    ti,nand-ecc-opt = "ham1";

    Rex
  • Hi Rex, what would you recommend to use for OMAPL138 SoC. I would like to use ECC. thanks.
  • Hi, Mitesh,

    ECC is supported. I happened to have a how-to video made recently on how to restore and update the u-boot in NAND. Though it is not targeted to the ECC, but there are 2 slides on the ECC layout. Hope you find it useful.

    TI.com: training.ti.com/omap-li38-restore-nand
    The YouTube version is here: https://youtu.be/NKSdRAL7cLk

    Please open new thread if you have other issues. Thanks.

    Rex