Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Evan Lojewski
ast2050-flashrom
Commits
f0126ce2
Commit
f0126ce2
authored
22 years ago
by
Andrew Ip
Browse files
Options
Download
Email Patches
Plain Diff
Add w49f002u support
Corresponding to coreboot v1 svn r643.
parent
56439427
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
121 additions
and
1 deletion
+121
-1
Makefile
Makefile
+2
-1
flash.h
flash.h
+5
-0
flash_rom.c
flash_rom.c
+2
-0
w49f002u.c
w49f002u.c
+112
-0
No files found.
Makefile
View file @
f0126ce2
OBJS
=
jedec.o sst28sf040.o am29f040b.o mx29f002.c sst39sf020.o m29f400bt.o
OBJS
=
jedec.o sst28sf040.o am29f040b.o mx29f002.c sst39sf020.o m29f400bt.o
\
w49f002u.o
OBJS
+=
82802ab.o
CC
=
gcc
-O2
-g
...
...
This diff is collapsed.
Click to expand it.
flash.h
View file @
f0126ce2
...
...
@@ -34,6 +34,7 @@ struct flashchip {
#define WINBOND_ID 0xDA
/* Winbond Manufacture ID code */
#define W_29C020C 0x45
/* Winbond w29c020c device code*/
#define W_49F002U 0x0B
/* Winbond w29c020c device code*/
#define ST_ID 0x20
#define ST_M29F400BT 0xD5
...
...
@@ -53,3 +54,7 @@ extern int write_29f040b (struct flashchip * flash, char * buf);
extern
int
probe_29f002
(
struct
flashchip
*
flash
);
extern
int
erase_29f002
(
struct
flashchip
*
flash
);
extern
int
write_29f002
(
struct
flashchip
*
flash
,
char
*
buf
);
extern
int
probe_49f002
(
struct
flashchip
*
flash
);
extern
int
erase_49f002
(
struct
flashchip
*
flash
);
extern
int
write_49f002
(
struct
flashchip
*
flash
,
char
*
buf
);
This diff is collapsed.
Click to expand it.
flash_rom.c
View file @
f0126ce2
...
...
@@ -55,6 +55,8 @@ struct flashchip flashchips[] = {
probe_39sf020
,
erase_39sf020
,
write_39sf020
},
{
"W29C020C"
,
WINBOND_ID
,
W_29C020C
,
NULL
,
256
,
128
,
probe_jedec
,
erase_jedec
,
write_jedec
},
{
"W49F002U"
,
WINBOND_ID
,
W_49F002U
,
NULL
,
256
,
128
,
probe_49f002
,
erase_49f002
,
write_49f002
},
{
"M29F400BT"
,
ST_ID
,
ST_M29F400BT
,
NULL
,
512
,
64
*
1024
,
probe_m29f400bt
,
erase_m29f400bt
,
write_linuxbios_m29f400bt
},
{
"82802ab"
,
137
,
173
,
NULL
,
512
,
64
*
1024
,
...
...
This diff is collapsed.
Click to expand it.
w49f002u.c
0 → 100644
View file @
f0126ce2
/*
* w49f002u.c: driver for Winbond 49F002U flash models
*
*
* Copyright 2000 Silicon Integrated System Corporation
*
* 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.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*
* Reference:
* W49F002U data sheet
*
* $Id
*/
#include "flash.h"
#include "jedec.h"
int
probe_49f002
(
struct
flashchip
*
flash
)
{
volatile
char
*
bios
=
flash
->
virt_addr
;
unsigned
char
id1
,
id2
,
id3
;
*
(
bios
+
0x5555
)
=
0xAA
;
*
(
bios
+
0x2AAA
)
=
0x55
;
*
(
bios
+
0x5555
)
=
0x90
;
id1
=
*
(
volatile
unsigned
char
*
)
bios
;
id2
=
*
(
volatile
unsigned
char
*
)
(
bios
+
0x01
);
*
bios
=
0xF0
;
myusec_delay
(
10
);
printf
(
__FUNCTION__
"id1 %d, id2 %d
\n
"
,
id1
,
id2
);
if
(
id1
==
flash
->
manufacture_id
&&
id2
==
flash
->
model_id
)
return
1
;
return
0
;
}
int
erase_49f002
(
struct
flashchip
*
flash
)
{
volatile
char
*
bios
=
flash
->
virt_addr
;
again:
*
(
bios
+
0x5555
)
=
0xAA
;
*
(
bios
+
0x2AAA
)
=
0x55
;
*
(
bios
+
0x5555
)
=
0x80
;
*
(
bios
+
0x5555
)
=
0xAA
;
*
(
bios
+
0x2AAA
)
=
0x55
;
*
(
bios
+
0x5555
)
=
0x10
;
myusec_delay
(
100
);
toggle_ready_jedec
(
bios
);
// while ((*bios & 0x40) != 0x40)
//;
#if 0
toggle_ready_jedec(bios);
*(bios + 0x0ffff) = 0x30;
*(bios + 0x1ffff) = 0x30;
*(bios + 0x2ffff) = 0x30;
*(bios + 0x37fff) = 0x30;
*(bios + 0x39fff) = 0x30;
*(bios + 0x3bfff) = 0x30;
#endif
}
int
write_49f002
(
struct
flashchip
*
flash
,
char
*
buf
)
{
int
i
;
int
total_size
=
flash
->
total_size
*
1024
,
page_size
=
flash
->
page_size
;
volatile
char
*
bios
=
flash
->
virt_addr
;
volatile
char
*
dst
=
bios
,
*
src
=
buf
;
*
bios
=
0xF0
;
myusec_delay
(
10
);
erase_49f002
(
flash
);
//*bios = 0xF0;
#if 1
printf
(
"Programming Page: "
);
for
(
i
=
0
;
i
<
total_size
;
i
++
)
{
/* write to the sector */
printf
(
"address: 0x%08lx"
,
i
);
*
(
bios
+
0x5555
)
=
0xAA
;
*
(
bios
+
0x2AAA
)
=
0x55
;
*
(
bios
+
0x5555
)
=
0xA0
;
*
dst
++
=
*
buf
++
;
/* wait for Toggle bit ready */
toggle_ready_jedec
(
dst
);
printf
(
"
\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b
"
);
}
#endif
printf
(
"
\n
"
);
}
This diff is collapsed.
Click to expand it.
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