Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
7608194c
Commit
7608194c
authored
Oct 27, 2006
by
David Woodhouse
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[MTD] NAND: Add ECC debugging for CAFÉ
Signed-off-by:
David Woodhouse
<
dwmw2@infradead.org
>
parent
b478c775
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
36 additions
and
3 deletions
+36
-3
drivers/mtd/nand/cafe_ecc.c
drivers/mtd/nand/cafe_ecc.c
+36
-3
No files found.
drivers/mtd/nand/cafe_ecc.c
View file @
7608194c
...
...
@@ -19,6 +19,7 @@
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/errno.h>
static
unsigned
short
gf4096_mul
(
unsigned
short
,
unsigned
short
);
...
...
@@ -1322,16 +1323,43 @@ void correct_12bit_symbol(unsigned char *buf, unsigned short sym,
buf
[
2
+
(
3
*
(
sym
-
2
))
/
2
]
^=
(
val
>>
8
);
buf
[
3
+
(
3
*
(
sym
-
2
))
/
2
]
^=
(
val
&
0xff
);
}
}
static
int
debugecc
=
0
;
module_param
(
debugecc
,
int
,
0644
);
int
cafe_correct_ecc
(
unsigned
char
*
buf
,
unsigned
short
*
chk_syndrome_list
)
{
unsigned
short
err_info
[
9
];
int
i
;
if
(
debugecc
)
{
printk
(
KERN_WARNING
"cafe_correct_ecc invoked. Syndromes %x %x %x %x %x %x %x %x
\n
"
,
chk_syndrome_list
[
0
],
chk_syndrome_list
[
1
],
chk_syndrome_list
[
2
],
chk_syndrome_list
[
3
],
chk_syndrome_list
[
4
],
chk_syndrome_list
[
5
],
chk_syndrome_list
[
6
],
chk_syndrome_list
[
7
]);
for
(
i
=
0
;
i
<
2048
;
i
+=
16
)
{
printk
(
KERN_WARNING
"D %04x: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x
\n
"
,
i
,
buf
[
i
],
buf
[
i
+
1
],
buf
[
i
+
2
],
buf
[
i
+
3
],
buf
[
i
+
4
],
buf
[
i
+
5
],
buf
[
i
+
6
],
buf
[
i
+
7
],
buf
[
i
+
8
],
buf
[
i
+
9
],
buf
[
i
+
10
],
buf
[
i
+
11
],
buf
[
i
+
12
],
buf
[
i
+
13
],
buf
[
i
+
14
],
buf
[
i
+
15
]);
}
for
(
;
i
<
2112
;
i
+=
16
)
{
printk
(
KERN_WARNING
"O %02x: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x
\n
"
,
i
-
2048
,
buf
[
i
],
buf
[
i
+
1
],
buf
[
i
+
2
],
buf
[
i
+
3
],
buf
[
i
+
4
],
buf
[
i
+
5
],
buf
[
i
+
6
],
buf
[
i
+
7
],
buf
[
i
+
8
],
buf
[
i
+
9
],
buf
[
i
+
10
],
buf
[
i
+
11
],
buf
[
i
+
12
],
buf
[
i
+
13
],
buf
[
i
+
14
],
buf
[
i
+
15
]);
}
}
if
(
chk_no_err_only
(
chk_syndrome_list
,
err_info
)
&&
chk_1_err_only
(
chk_syndrome_list
,
err_info
)
&&
chk_2_err_only
(
chk_syndrome_list
,
err_info
)
&&
...
...
@@ -1340,8 +1368,13 @@ int cafe_correct_ecc(unsigned char *buf,
return
-
EIO
;
}
for
(
i
=
0
;
i
<
err_info
[
0
];
i
++
)
for
(
i
=
0
;
i
<
err_info
[
0
];
i
++
)
{
if
(
debugecc
)
printk
(
KERN_WARNING
"Correct symbol %d with 0x%03x
\n
"
,
err_info
[
1
+
i
],
err_info
[
5
+
i
]);
correct_12bit_symbol
(
buf
,
err_info
[
1
+
i
],
err_info
[
5
+
i
]);
}
return
err_info
[
0
];
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment