Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
scorpio
u-boot
Commits
13a5695b
Commit
13a5695b
authored
21 years ago
by
wdenk
Browse files
Options
Download
Email Patches
Plain Diff
Patch by Jian Zhang, 20 May 2004:
add support for environment in NAND flash
parent
c3c7f861
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
193 additions
and
5 deletions
+193
-5
CHANGELOG
CHANGELOG
+3
-0
README
README
+10
-0
common/Makefile
common/Makefile
+1
-1
common/cmd_nand.c
common/cmd_nand.c
+4
-4
common/cmd_nvedit.c
common/cmd_nvedit.c
+1
-0
common/env_common.c
common/env_common.c
+3
-0
common/env_nand.c
common/env_nand.c
+171
-0
No files found.
CHANGELOG
View file @
13a5695b
...
...
@@ -2,6 +2,9 @@
Changes since U-Boot 1.1.1:
======================================================================
* Patch by Jian Zhang, 20 May 2004:
add support for environment in NAND flash
* Patch by Yuli Barcohen, 20 May 2004:
Add support for Interphase iSPAN boards.
...
...
This diff is collapsed.
Click to expand it.
README
View file @
13a5695b
...
...
@@ -1827,6 +1827,16 @@ to save the current settings.
environment area within the total memory of your DataFlash placed
at the specified address.
- CFG_ENV_IS_IN_NAND:
Define this if you have a NAND device which you want to use
for the environment.
- CFG_ENV_OFFSET:
- CFG_ENV_SIZE:
These two #defines specify the offset and size of the environment
area within the first NAND device.
- CFG_SPI_INIT_OFFSET
...
...
This diff is collapsed.
Click to expand it.
common/Makefile
View file @
13a5695b
...
...
@@ -42,7 +42,7 @@ COBJS = main.o ACEX1K.o altera.o bedbug.o \
cmd_reginfo.o cmd_reiser.o cmd_scsi.o cmd_spi.o cmd_usb.o cmd_vfd.o
\
command.o console.o devices.o dlmalloc.o docecc.o
\
environment.o env_common.o
\
env_dataflash.o env_flash.o env_eeprom.o env_nvram.o env_nowhere.o exports.o
\
env_nand.o
env_dataflash.o env_flash.o env_eeprom.o env_nvram.o env_nowhere.o exports.o
\
flash.o fpga.o
\
hush.o kgdb.o lists.o lynxkdi.o memsize.o miiphybb.o miiphyutil.o
\
s_record.o soft_i2c.o soft_spi.o spartan2.o
\
...
...
This diff is collapsed.
Click to expand it.
common/cmd_nand.c
View file @
13a5695b
...
...
@@ -70,10 +70,10 @@ struct nand_oob_config {
* Function Prototypes
*/
static
void
nand_print
(
struct
nand_chip
*
nand
);
static
int
nand_rw
(
struct
nand_chip
*
nand
,
int
cmd
,
int
nand_rw
(
struct
nand_chip
*
nand
,
int
cmd
,
size_t
start
,
size_t
len
,
size_t
*
retlen
,
u_char
*
buf
);
static
int
nand_erase
(
struct
nand_chip
*
nand
,
size_t
ofs
,
size_t
len
,
int
clean
);
int
nand_erase
(
struct
nand_chip
*
nand
,
size_t
ofs
,
size_t
len
,
int
clean
);
static
int
nand_read_ecc
(
struct
nand_chip
*
nand
,
size_t
start
,
size_t
len
,
size_t
*
retlen
,
u_char
*
buf
,
u_char
*
ecc_code
);
static
int
nand_write_ecc
(
struct
nand_chip
*
nand
,
size_t
to
,
size_t
len
,
...
...
@@ -429,7 +429,7 @@ static void nand_print_bad(struct nand_chip* nand)
* 3: NANDRW_READ | NANDRW_JFFS2 read, data all 0xff for bad blocks
* 7: NANDRW_READ | NANDRW_JFFS2 | NANDRW_JFFS2_SKIP read, skip bad blocks
*/
static
int
nand_rw
(
struct
nand_chip
*
nand
,
int
cmd
,
int
nand_rw
(
struct
nand_chip
*
nand
,
int
cmd
,
size_t
start
,
size_t
len
,
size_t
*
retlen
,
u_char
*
buf
)
{
...
...
@@ -1304,7 +1304,7 @@ static int nand_write_oob(struct nand_chip* nand, size_t ofs, size_t len,
}
static
int
nand_erase
(
struct
nand_chip
*
nand
,
size_t
ofs
,
size_t
len
,
int
clean
)
int
nand_erase
(
struct
nand_chip
*
nand
,
size_t
ofs
,
size_t
len
,
int
clean
)
{
/* This is defined as a structure so it will work on any system
* using native endian jffs2 (the default).
...
...
This diff is collapsed.
Click to expand it.
common/cmd_nvedit.c
View file @
13a5695b
...
...
@@ -53,6 +53,7 @@
!defined(CFG_ENV_IS_IN_EEPROM) && \
!defined(CFG_ENV_IS_IN_FLASH) && \
!defined(CFG_ENV_IS_IN_DATAFLASH) && \
!defined(CFG_ENV_IS_IN_NAND) && \
!defined(CFG_ENV_IS_NOWHERE)
# error Define one of CFG_ENV_IS_IN_{NVRAM|EEPROM|FLASH|DATAFLASH|NOWHERE}
#endif
...
...
This diff is collapsed.
Click to expand it.
common/env_common.c
View file @
13a5695b
...
...
@@ -139,6 +139,9 @@ uchar default_environment[] = {
"
\0
"
};
#if defined(CFG_ENV_IS_IN_NAND)
/* Environment is in Nand Flash */
int
default_environment_size
=
sizeof
(
default_environment
);
#endif
void
env_crc_update
(
void
)
{
...
...
This diff is collapsed.
Click to expand it.
common/env_nand.c
0 → 100644
View file @
13a5695b
/*
* (C) Copyright 2004
* Jian Zhang, Texas Instruments, jzhang@ti.com.
* (C) Copyright 2000-2004
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
* (C) Copyright 2001 Sysgo Real-Time Solutions, GmbH <www.elinos.com>
* Andreas Heppel <aheppel@sysgo.de>
* See file CREDITS for list of people who contributed to this
* project.
*
* 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., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
/* #define DEBUG */
#include <common.h>
#if defined(CFG_ENV_IS_IN_NAND)
/* Environment is in Nand Flash */
#include <command.h>
#include <environment.h>
#include <linux/stddef.h>
#include <malloc.h>
#include <linux/mtd/nand.h>
#if ((CONFIG_COMMANDS&(CFG_CMD_ENV|CFG_CMD_NAND)) == (CFG_CMD_ENV|CFG_CMD_NAND))
#define CMD_SAVEENV
#endif
#if defined(CFG_ENV_SIZE_REDUND)
#error CFG_ENV_SIZE_REDUND not supported yet
#endif
#if defined(CFG_ENV_ADDR_REDUND)
#error CFG_ENV_ADDR_REDUND and CFG_ENV_IS_IN_NAND not supported yet
#endif
#ifdef CONFIG_INFERNO
#error CONFIG_INFERNO not supported yet
#endif
/* references to names in cmd_nand.c */
#define NANDRW_READ 0x01
#define NANDRW_WRITE 0x00
#define NANDRW_JFFS2 0x02
extern
struct
nand_chip
nand_dev_desc
[];
int
nand_rw
(
struct
nand_chip
*
nand
,
int
cmd
,
size_t
start
,
size_t
len
,
size_t
*
retlen
,
u_char
*
buf
);
int
nand_erase
(
struct
nand_chip
*
nand
,
size_t
ofs
,
size_t
len
,
int
clean
);
/* references to names in env_common.c */
extern
uchar
default_environment
[];
extern
int
default_environment_size
;
char
*
env_name_spec
=
"NAND"
;
#ifdef ENV_IS_EMBEDDED
extern
uchar
environment
[];
env_t
*
env_ptr
=
(
env_t
*
)(
&
environment
[
0
]);
#else
/* ! ENV_IS_EMBEDDED */
env_t
*
env_ptr
=
0
;
//(env_t *)CFG_ENV_ADDR;
#endif
/* ENV_IS_EMBEDDED */
/* local functions */
static
void
use_default
(
void
);
uchar
env_get_char_spec
(
int
index
)
{
DECLARE_GLOBAL_DATA_PTR
;
return
(
*
((
uchar
*
)(
gd
->
env_addr
+
index
))
);
}
/* this is called before nand_init()
* so we can't read Nand to validate env data.
* Mark it OK for now. env_relocate() in env_common.c
* will call our relocate function which will does
* the real validation.
*/
int
env_init
(
void
)
{
DECLARE_GLOBAL_DATA_PTR
;
gd
->
env_addr
=
(
ulong
)
&
default_environment
[
0
];
gd
->
env_valid
=
1
;
return
(
0
);
}
#ifdef CMD_SAVEENV
int
saveenv
(
void
)
{
int
total
,
ret
=
0
;
puts
(
"Erasing Nand..."
);
if
(
nand_erase
(
nand_dev_desc
+
0
,
CFG_ENV_OFFSET
,
CFG_ENV_SIZE
,
0
))
return
1
;
puts
(
"Writing to Nand... "
);
ret
=
nand_rw
(
nand_dev_desc
+
0
,
NANDRW_WRITE
|
NANDRW_JFFS2
,
CFG_ENV_OFFSET
,
CFG_ENV_SIZE
,
&
total
,
(
u_char
*
)
env_ptr
);
if
(
ret
||
total
!=
CFG_ENV_SIZE
)
return
1
;
puts
(
"done
\n
"
);
return
ret
;
}
#endif
/* CMD_SAVEENV */
void
env_relocate_spec
(
void
)
{
#if !defined(ENV_IS_EMBEDDED)
int
ret
,
total
;
ret
=
nand_rw
(
nand_dev_desc
+
0
,
NANDRW_READ
|
NANDRW_JFFS2
,
CFG_ENV_OFFSET
,
CFG_ENV_SIZE
,
&
total
,
(
u_char
*
)
env_ptr
);
if
(
ret
||
total
!=
CFG_ENV_SIZE
)
return
use_default
();
if
(
crc32
(
0
,
env_ptr
->
data
,
ENV_SIZE
)
!=
env_ptr
->
crc
)
return
use_default
();
#endif
/* ! ENV_IS_EMBEDDED */
}
static
void
use_default
()
{
DECLARE_GLOBAL_DATA_PTR
;
puts
(
"*** Warning - bad CRC or NAND, using default environment
\n\n
"
);
if
(
default_environment_size
>
CFG_ENV_SIZE
){
puts
(
"*** Error - default environment is too large
\n\n
"
);
return
;
}
memset
(
env_ptr
,
0
,
sizeof
(
env_t
));
memcpy
(
env_ptr
->
data
,
default_environment
,
default_environment_size
);
env_ptr
->
crc
=
crc32
(
0
,
env_ptr
->
data
,
ENV_SIZE
);
gd
->
env_valid
=
1
;
}
#endif
/* CFG_ENV_IS_IN_NAND */
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