hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
 * NAND Flash Driver
 *
 * Copyright (C) 2006-2014 Texas Instruments.
 *
 * Based on Linux DaVinci NAND driver by TI.
 */
 
#ifndef _DAVINCI_NAND_H_
#define _DAVINCI_NAND_H_
 
#include <linux/mtd/rawnand.h>
#include <asm/arch/hardware.h>
 
#define NAND_READ_START      0x00
#define NAND_READ_END        0x30
#define NAND_STATUS          0x70
 
#define MASK_CLE        0x10
#define MASK_ALE        0x08
 
#ifdef CONFIG_SYS_NAND_MASK_CLE
#undef MASK_CLE
#define MASK_CLE CONFIG_SYS_NAND_MASK_CLE
#endif
#ifdef CONFIG_SYS_NAND_MASK_ALE
#undef MASK_ALE
#define MASK_ALE CONFIG_SYS_NAND_MASK_ALE
#endif
 
struct davinci_emif_regs {
   uint32_t    ercsr;
   uint32_t    awccr;
   uint32_t    sdbcr;
   uint32_t    sdrcr;
   union {
       uint32_t abncr[4];
       struct {
           uint32_t ab1cr;
           uint32_t ab2cr;
           uint32_t ab3cr;
           uint32_t ab4cr;
       };
   };
   uint32_t    sdtimr;
   uint32_t    ddrsr;
   uint32_t    ddrphycr;
   uint32_t    ddrphysr;
   uint32_t    totar;
   uint32_t    totactr;
   uint32_t    ddrphyid_rev;
   uint32_t    sdsretr;
   uint32_t    eirr;
   uint32_t    eimr;
   uint32_t    eimsr;
   uint32_t    eimcr;
   uint32_t    ioctrlr;
   uint32_t    iostatr;
   uint32_t    rsvd0;
   uint32_t    one_nand_cr;
   uint32_t    nandfcr;
   uint32_t    nandfsr;
   uint32_t    rsvd1[2];
   uint32_t    nandfecc[4];
   uint32_t    rsvd2[15];
   uint32_t    nand4biteccload;
   uint32_t    nand4bitecc[4];
   uint32_t    nanderradd1;
   uint32_t    nanderradd2;
   uint32_t    nanderrval1;
   uint32_t    nanderrval2;
};
 
#define davinci_emif_regs \
   ((struct davinci_emif_regs *)DAVINCI_ASYNC_EMIF_CNTRL_BASE)
 
#define DAVINCI_NANDFCR_NAND_ENABLE(n)            (1 << ((n) - 2))
#define DAVINCI_NANDFCR_4BIT_ECC_SEL_MASK        (3 << 4)
#define DAVINCI_NANDFCR_4BIT_ECC_SEL(n)            (((n) - 2) << 4)
#define DAVINCI_NANDFCR_1BIT_ECC_START(n)        (1 << (8 + ((n) - 2)))
#define DAVINCI_NANDFCR_4BIT_ECC_START            (1 << 12)
#define DAVINCI_NANDFCR_4BIT_CALC_START            (1 << 13)
#define DAVINCI_NANDFCR_CS2NAND                (1 << 0)
 
/* Chip Select setup */
#define DAVINCI_ABCR_STROBE_SELECT            (1 << 31)
#define DAVINCI_ABCR_EXT_WAIT                (1 << 30)
#define DAVINCI_ABCR_WSETUP(n)                (n << 26)
#define DAVINCI_ABCR_WSTROBE(n)                (n << 20)
#define DAVINCI_ABCR_WHOLD(n)                (n << 17)
#define DAVINCI_ABCR_RSETUP(n)                (n << 13)
#define DAVINCI_ABCR_RSTROBE(n)                (n << 7)
#define DAVINCI_ABCR_RHOLD(n)                (n << 4)
#define DAVINCI_ABCR_TA(n)                (n << 2)
#define DAVINCI_ABCR_ASIZE_16BIT            1
#define DAVINCI_ABCR_ASIZE_8BIT                0
 
void davinci_nand_init(struct nand_chip *nand);
 
#endif