Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
R
reform-boundary-uboot
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jack Humbert
reform-boundary-uboot
Commits
714eec71
Commit
714eec71
authored
9 years ago
by
Tom Rini
Browse files
Options
Downloads
Plain Diff
Merge
git://www.denx.de/git/u-boot-cfi-flash
parents
2431492a
622b9527
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
drivers/mtd/cfi_flash.c
+41
-41
41 additions, 41 deletions
drivers/mtd/cfi_flash.c
include/mtd/cfi_flash.h
+4
-4
4 additions, 4 deletions
include/mtd/cfi_flash.h
with
45 additions
and
45 deletions
drivers/mtd/cfi_flash.c
+
41
−
41
View file @
714eec71
...
@@ -335,34 +335,34 @@ void flash_write_cmd (flash_info_t * info, flash_sect_t sect,
...
@@ -335,34 +335,34 @@ void flash_write_cmd (flash_info_t * info, flash_sect_t sect,
switch
(
info
->
portwidth
)
{
switch
(
info
->
portwidth
)
{
case
FLASH_CFI_8BIT
:
case
FLASH_CFI_8BIT
:
debug
(
"fwc addr %p cmd %x %x 8bit x %d bit
\n
"
,
addr
,
cmd
,
debug
(
"fwc addr %p cmd %x %x 8bit x %d bit
\n
"
,
addr
,
cmd
,
cword
.
c
,
info
->
chipwidth
<<
CFI_FLASH_SHIFT_WIDTH
);
cword
.
w8
,
info
->
chipwidth
<<
CFI_FLASH_SHIFT_WIDTH
);
flash_write8
(
cword
.
c
,
addr
);
flash_write8
(
cword
.
w8
,
addr
);
break
;
break
;
case
FLASH_CFI_16BIT
:
case
FLASH_CFI_16BIT
:
debug
(
"fwc addr %p cmd %x %4.4x 16bit x %d bit
\n
"
,
addr
,
debug
(
"fwc addr %p cmd %x %4.4x 16bit x %d bit
\n
"
,
addr
,
cmd
,
cword
.
w
,
cmd
,
cword
.
w
16
,
info
->
chipwidth
<<
CFI_FLASH_SHIFT_WIDTH
);
info
->
chipwidth
<<
CFI_FLASH_SHIFT_WIDTH
);
flash_write16
(
cword
.
w
,
addr
);
flash_write16
(
cword
.
w
16
,
addr
);
break
;
break
;
case
FLASH_CFI_32BIT
:
case
FLASH_CFI_32BIT
:
debug
(
"fwc addr %p cmd %x %8.8
l
x 32bit x %d bit
\n
"
,
addr
,
debug
(
"fwc addr %p cmd %x %8.8x 32bit x %d bit
\n
"
,
addr
,
cmd
,
cword
.
l
,
cmd
,
cword
.
w32
,
info
->
chipwidth
<<
CFI_FLASH_SHIFT_WIDTH
);
info
->
chipwidth
<<
CFI_FLASH_SHIFT_WIDTH
);
flash_write32
(
cword
.
l
,
addr
);
flash_write32
(
cword
.
w32
,
addr
);
break
;
break
;
case
FLASH_CFI_64BIT
:
case
FLASH_CFI_64BIT
:
#ifdef DEBUG
#ifdef DEBUG
{
{
char
str
[
20
];
char
str
[
20
];
print_longlong
(
str
,
cword
.
ll
);
print_longlong
(
str
,
cword
.
w64
);
debug
(
"fwrite addr %p cmd %x %s 64 bit x %d bit
\n
"
,
debug
(
"fwrite addr %p cmd %x %s 64 bit x %d bit
\n
"
,
addr
,
cmd
,
str
,
addr
,
cmd
,
str
,
info
->
chipwidth
<<
CFI_FLASH_SHIFT_WIDTH
);
info
->
chipwidth
<<
CFI_FLASH_SHIFT_WIDTH
);
}
}
#endif
#endif
flash_write64
(
cword
.
ll
,
addr
);
flash_write64
(
cword
.
w64
,
addr
);
break
;
break
;
}
}
...
@@ -393,16 +393,16 @@ static int flash_isequal (flash_info_t * info, flash_sect_t sect,
...
@@ -393,16 +393,16 @@ static int flash_isequal (flash_info_t * info, flash_sect_t sect,
debug
(
"is= cmd %x(%c) addr %p "
,
cmd
,
cmd
,
addr
);
debug
(
"is= cmd %x(%c) addr %p "
,
cmd
,
cmd
,
addr
);
switch
(
info
->
portwidth
)
{
switch
(
info
->
portwidth
)
{
case
FLASH_CFI_8BIT
:
case
FLASH_CFI_8BIT
:
debug
(
"is= %x %x
\n
"
,
flash_read8
(
addr
),
cword
.
c
);
debug
(
"is= %x %x
\n
"
,
flash_read8
(
addr
),
cword
.
w8
);
retval
=
(
flash_read8
(
addr
)
==
cword
.
c
);
retval
=
(
flash_read8
(
addr
)
==
cword
.
w8
);
break
;
break
;
case
FLASH_CFI_16BIT
:
case
FLASH_CFI_16BIT
:
debug
(
"is= %4.4x %4.4x
\n
"
,
flash_read16
(
addr
),
cword
.
w
);
debug
(
"is= %4.4x %4.4x
\n
"
,
flash_read16
(
addr
),
cword
.
w
16
);
retval
=
(
flash_read16
(
addr
)
==
cword
.
w
);
retval
=
(
flash_read16
(
addr
)
==
cword
.
w
16
);
break
;
break
;
case
FLASH_CFI_32BIT
:
case
FLASH_CFI_32BIT
:
debug
(
"is= %8.8x %8.8
l
x
\n
"
,
flash_read32
(
addr
),
cword
.
l
);
debug
(
"is= %8.8x %8.8x
\n
"
,
flash_read32
(
addr
),
cword
.
w32
);
retval
=
(
flash_read32
(
addr
)
==
cword
.
l
);
retval
=
(
flash_read32
(
addr
)
==
cword
.
w32
);
break
;
break
;
case
FLASH_CFI_64BIT
:
case
FLASH_CFI_64BIT
:
#ifdef DEBUG
#ifdef DEBUG
...
@@ -411,11 +411,11 @@ static int flash_isequal (flash_info_t * info, flash_sect_t sect,
...
@@ -411,11 +411,11 @@ static int flash_isequal (flash_info_t * info, flash_sect_t sect,
char
str2
[
20
];
char
str2
[
20
];
print_longlong
(
str1
,
flash_read64
(
addr
));
print_longlong
(
str1
,
flash_read64
(
addr
));
print_longlong
(
str2
,
cword
.
ll
);
print_longlong
(
str2
,
cword
.
w64
);
debug
(
"is= %s %s
\n
"
,
str1
,
str2
);
debug
(
"is= %s %s
\n
"
,
str1
,
str2
);
}
}
#endif
#endif
retval
=
(
flash_read64
(
addr
)
==
cword
.
ll
);
retval
=
(
flash_read64
(
addr
)
==
cword
.
w64
);
break
;
break
;
default:
default:
retval
=
0
;
retval
=
0
;
...
@@ -439,16 +439,16 @@ static int flash_isset (flash_info_t * info, flash_sect_t sect,
...
@@ -439,16 +439,16 @@ static int flash_isset (flash_info_t * info, flash_sect_t sect,
flash_make_cmd
(
info
,
cmd
,
&
cword
);
flash_make_cmd
(
info
,
cmd
,
&
cword
);
switch
(
info
->
portwidth
)
{
switch
(
info
->
portwidth
)
{
case
FLASH_CFI_8BIT
:
case
FLASH_CFI_8BIT
:
retval
=
((
flash_read8
(
addr
)
&
cword
.
c
)
==
cword
.
c
);
retval
=
((
flash_read8
(
addr
)
&
cword
.
w8
)
==
cword
.
w8
);
break
;
break
;
case
FLASH_CFI_16BIT
:
case
FLASH_CFI_16BIT
:
retval
=
((
flash_read16
(
addr
)
&
cword
.
w
)
==
cword
.
w
);
retval
=
((
flash_read16
(
addr
)
&
cword
.
w
16
)
==
cword
.
w
16
);
break
;
break
;
case
FLASH_CFI_32BIT
:
case
FLASH_CFI_32BIT
:
retval
=
((
flash_read32
(
addr
)
&
cword
.
l
)
==
cword
.
l
);
retval
=
((
flash_read32
(
addr
)
&
cword
.
w32
)
==
cword
.
w32
);
break
;
break
;
case
FLASH_CFI_64BIT
:
case
FLASH_CFI_64BIT
:
retval
=
((
flash_read64
(
addr
)
&
cword
.
ll
)
==
cword
.
ll
);
retval
=
((
flash_read64
(
addr
)
&
cword
.
w64
)
==
cword
.
w64
);
break
;
break
;
default:
default:
retval
=
0
;
retval
=
0
;
...
@@ -680,33 +680,33 @@ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c)
...
@@ -680,33 +680,33 @@ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c)
switch
(
info
->
portwidth
)
{
switch
(
info
->
portwidth
)
{
case
FLASH_CFI_8BIT
:
case
FLASH_CFI_8BIT
:
cword
->
c
=
c
;
cword
->
w8
=
c
;
break
;
break
;
case
FLASH_CFI_16BIT
:
case
FLASH_CFI_16BIT
:
#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SYS_WRITE_SWAPPED_DATA)
#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SYS_WRITE_SWAPPED_DATA)
w
=
c
;
w
=
c
;
w
<<=
8
;
w
<<=
8
;
cword
->
w
=
(
cword
->
w
>>
8
)
|
w
;
cword
->
w
16
=
(
cword
->
w
16
>>
8
)
|
w
;
#else
#else
cword
->
w
=
(
cword
->
w
<<
8
)
|
c
;
cword
->
w
16
=
(
cword
->
w
16
<<
8
)
|
c
;
#endif
#endif
break
;
break
;
case
FLASH_CFI_32BIT
:
case
FLASH_CFI_32BIT
:
#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SYS_WRITE_SWAPPED_DATA)
#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SYS_WRITE_SWAPPED_DATA)
l
=
c
;
l
=
c
;
l
<<=
24
;
l
<<=
24
;
cword
->
l
=
(
cword
->
l
>>
8
)
|
l
;
cword
->
w32
=
(
cword
->
w32
>>
8
)
|
l
;
#else
#else
cword
->
l
=
(
cword
->
l
<<
8
)
|
c
;
cword
->
w32
=
(
cword
->
w32
<<
8
)
|
c
;
#endif
#endif
break
;
break
;
case
FLASH_CFI_64BIT
:
case
FLASH_CFI_64BIT
:
#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SYS_WRITE_SWAPPED_DATA)
#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SYS_WRITE_SWAPPED_DATA)
ll
=
c
;
ll
=
c
;
ll
<<=
56
;
ll
<<=
56
;
cword
->
ll
=
(
cword
->
ll
>>
8
)
|
ll
;
cword
->
w64
=
(
cword
->
w64
>>
8
)
|
ll
;
#else
#else
cword
->
ll
=
(
cword
->
ll
<<
8
)
|
c
;
cword
->
w64
=
(
cword
->
w64
<<
8
)
|
c
;
#endif
#endif
break
;
break
;
}
}
...
@@ -753,16 +753,16 @@ static int flash_write_cfiword (flash_info_t * info, ulong dest,
...
@@ -753,16 +753,16 @@ static int flash_write_cfiword (flash_info_t * info, ulong dest,
/* Check if Flash is (sufficiently) erased */
/* Check if Flash is (sufficiently) erased */
switch
(
info
->
portwidth
)
{
switch
(
info
->
portwidth
)
{
case
FLASH_CFI_8BIT
:
case
FLASH_CFI_8BIT
:
flag
=
((
flash_read8
(
dstaddr
)
&
cword
.
c
)
==
cword
.
c
);
flag
=
((
flash_read8
(
dstaddr
)
&
cword
.
w8
)
==
cword
.
w8
);
break
;
break
;
case
FLASH_CFI_16BIT
:
case
FLASH_CFI_16BIT
:
flag
=
((
flash_read16
(
dstaddr
)
&
cword
.
w
)
==
cword
.
w
);
flag
=
((
flash_read16
(
dstaddr
)
&
cword
.
w
16
)
==
cword
.
w
16
);
break
;
break
;
case
FLASH_CFI_32BIT
:
case
FLASH_CFI_32BIT
:
flag
=
((
flash_read32
(
dstaddr
)
&
cword
.
l
)
==
cword
.
l
);
flag
=
((
flash_read32
(
dstaddr
)
&
cword
.
w32
)
==
cword
.
w32
);
break
;
break
;
case
FLASH_CFI_64BIT
:
case
FLASH_CFI_64BIT
:
flag
=
((
flash_read64
(
dstaddr
)
&
cword
.
ll
)
==
cword
.
ll
);
flag
=
((
flash_read64
(
dstaddr
)
&
cword
.
w64
)
==
cword
.
w64
);
break
;
break
;
default:
default:
flag
=
0
;
flag
=
0
;
...
@@ -800,16 +800,16 @@ static int flash_write_cfiword (flash_info_t * info, ulong dest,
...
@@ -800,16 +800,16 @@ static int flash_write_cfiword (flash_info_t * info, ulong dest,
switch
(
info
->
portwidth
)
{
switch
(
info
->
portwidth
)
{
case
FLASH_CFI_8BIT
:
case
FLASH_CFI_8BIT
:
flash_write8
(
cword
.
c
,
dstaddr
);
flash_write8
(
cword
.
w8
,
dstaddr
);
break
;
break
;
case
FLASH_CFI_16BIT
:
case
FLASH_CFI_16BIT
:
flash_write16
(
cword
.
w
,
dstaddr
);
flash_write16
(
cword
.
w
16
,
dstaddr
);
break
;
break
;
case
FLASH_CFI_32BIT
:
case
FLASH_CFI_32BIT
:
flash_write32
(
cword
.
l
,
dstaddr
);
flash_write32
(
cword
.
w32
,
dstaddr
);
break
;
break
;
case
FLASH_CFI_64BIT
:
case
FLASH_CFI_64BIT
:
flash_write64
(
cword
.
ll
,
dstaddr
);
flash_write64
(
cword
.
w64
,
dstaddr
);
break
;
break
;
}
}
...
@@ -1115,7 +1115,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
...
@@ -1115,7 +1115,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
if
(
use_flash_status_poll
(
info
))
{
if
(
use_flash_status_poll
(
info
))
{
cfiword_t
cword
;
cfiword_t
cword
;
void
*
dest
;
void
*
dest
;
cword
.
ll
=
0xffffffffffffffffULL
;
cword
.
w64
=
0xffffffffffffffffULL
;
dest
=
flash_map
(
info
,
sect
,
0
);
dest
=
flash_map
(
info
,
sect
,
0
);
st
=
flash_status_poll
(
info
,
&
cword
,
dest
,
st
=
flash_status_poll
(
info
,
&
cword
,
dest
,
info
->
erase_blk_tout
,
"erase"
);
info
->
erase_blk_tout
,
"erase"
);
...
@@ -1305,7 +1305,7 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
...
@@ -1305,7 +1305,7 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
/* handle unaligned start */
/* handle unaligned start */
if
((
aln
=
addr
-
wp
)
!=
0
)
{
if
((
aln
=
addr
-
wp
)
!=
0
)
{
cword
.
l
=
0
;
cword
.
w32
=
0
;
p
=
(
uchar
*
)
wp
;
p
=
(
uchar
*
)
wp
;
for
(
i
=
0
;
i
<
aln
;
++
i
)
for
(
i
=
0
;
i
<
aln
;
++
i
)
flash_add_byte
(
info
,
&
cword
,
flash_read8
(
p
+
i
));
flash_add_byte
(
info
,
&
cword
,
flash_read8
(
p
+
i
));
...
@@ -1332,7 +1332,7 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
...
@@ -1332,7 +1332,7 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
while
(
cnt
>=
info
->
portwidth
)
{
while
(
cnt
>=
info
->
portwidth
)
{
/* prohibit buffer write when buffer_size is 1 */
/* prohibit buffer write when buffer_size is 1 */
if
(
info
->
buffer_size
==
1
)
{
if
(
info
->
buffer_size
==
1
)
{
cword
.
l
=
0
;
cword
.
w32
=
0
;
for
(
i
=
0
;
i
<
info
->
portwidth
;
i
++
)
for
(
i
=
0
;
i
<
info
->
portwidth
;
i
++
)
flash_add_byte
(
info
,
&
cword
,
*
src
++
);
flash_add_byte
(
info
,
&
cword
,
*
src
++
);
if
((
rc
=
flash_write_cfiword
(
info
,
wp
,
cword
))
!=
0
)
if
((
rc
=
flash_write_cfiword
(
info
,
wp
,
cword
))
!=
0
)
...
@@ -1359,7 +1359,7 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
...
@@ -1359,7 +1359,7 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
}
}
#else
#else
while
(
cnt
>=
info
->
portwidth
)
{
while
(
cnt
>=
info
->
portwidth
)
{
cword
.
l
=
0
;
cword
.
w32
=
0
;
for
(
i
=
0
;
i
<
info
->
portwidth
;
i
++
)
{
for
(
i
=
0
;
i
<
info
->
portwidth
;
i
++
)
{
flash_add_byte
(
info
,
&
cword
,
*
src
++
);
flash_add_byte
(
info
,
&
cword
,
*
src
++
);
}
}
...
@@ -1381,7 +1381,7 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
...
@@ -1381,7 +1381,7 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
/*
/*
* handle unaligned tail bytes
* handle unaligned tail bytes
*/
*/
cword
.
l
=
0
;
cword
.
w32
=
0
;
p
=
(
uchar
*
)
wp
;
p
=
(
uchar
*
)
wp
;
for
(
i
=
0
;
(
i
<
info
->
portwidth
)
&&
(
cnt
>
0
);
++
i
)
{
for
(
i
=
0
;
(
i
<
info
->
portwidth
)
&&
(
cnt
>
0
);
++
i
)
{
flash_add_byte
(
info
,
&
cword
,
*
src
++
);
flash_add_byte
(
info
,
&
cword
,
*
src
++
);
...
...
This diff is collapsed.
Click to expand it.
include/mtd/cfi_flash.h
+
4
−
4
View file @
714eec71
...
@@ -105,10 +105,10 @@
...
@@ -105,10 +105,10 @@
#define NUM_ERASE_REGIONS 4
/* max. number of erase regions */
#define NUM_ERASE_REGIONS 4
/* max. number of erase regions */
typedef
union
{
typedef
union
{
u
nsigned
char
c
;
u
8
w8
;
u
nsigned
short
w
;
u
16
w16
;
u
nsigned
long
l
;
u
32
w32
;
u
nsigned
long
long
ll
;
u
64
w64
;
}
cfiword_t
;
}
cfiword_t
;
/* CFI standard query structure */
/* CFI standard query structure */
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment