Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OS
U-Boot.Mirror
提交
52bacb98
U
U-Boot.Mirror
项目概览
OS
/
U-Boot.Mirror
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
U-Boot.Mirror
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
52bacb98
编写于
9月 09, 2008
作者:
W
Wolfgang Denk
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
ssh://10.10.0.7/home/wd/git/u-boot/master
上级
4bc07c36
8b9e4787
变更
10
展开全部
隐藏空白更改
内联
并排
Showing
10 changed file
with
2960 addition
and
8 deletion
+2960
-8
.gitignore
.gitignore
+5
-0
CHANGELOG
CHANGELOG
+2575
-0
Makefile
Makefile
+8
-4
board/sh7785lcr/sh7785lcr.c
board/sh7785lcr/sh7785lcr.c
+5
-0
common/cmd_bootm.c
common/cmd_bootm.c
+4
-2
common/cmd_mem.c
common/cmd_mem.c
+0
-2
drivers/mtd/spi/Makefile
drivers/mtd/spi/Makefile
+1
-0
drivers/mtd/spi/spi_flash.c
drivers/mtd/spi/spi_flash.c
+5
-0
drivers/mtd/spi/spi_flash_internal.h
drivers/mtd/spi/spi_flash_internal.h
+1
-0
drivers/mtd/spi/stmicro.c
drivers/mtd/spi/stmicro.c
+356
-0
未找到文件。
.gitignore
浏览文件 @
52bacb98
...
...
@@ -11,6 +11,7 @@
*.a
*.o
*~
*.swp
*.patch
#
...
...
@@ -49,6 +50,10 @@ series
# cscope files
cscope.*
# tags files
/ctags
/etags
# OneNAND IPL files
/onenand_ipl/onenand-ipl*
/onenand_ipl/board/*/onenand*
...
...
CHANGELOG
浏览文件 @
52bacb98
此差异已折叠。
点击以展开。
Makefile
浏览文件 @
52bacb98
...
...
@@ -21,11 +21,15 @@
# MA 02111-1307 USA
#
VERSION
=
1
PATCHLEVEL
=
3
SUBLEVEL
=
4
EXTRAVERSION
=
VERSION
=
2008
PATCHLEVEL
=
10
SUBLEVEL
=
EXTRAVERSION
=
-rc1
ifneq
"$(SUBLEVEL)" ""
U_BOOT_VERSION
=
$(VERSION)
.
$(PATCHLEVEL)
.
$(SUBLEVEL)$(EXTRAVERSION)
else
U_BOOT_VERSION
=
$(VERSION)
.
$(PATCHLEVEL)$(EXTRAVERSION)
endif
VERSION_FILE
=
$(obj)
include/version_autogenerated.h
HOSTARCH
:=
$(
shell
uname
-m
|
\
...
...
board/sh7785lcr/sh7785lcr.c
浏览文件 @
52bacb98
...
...
@@ -21,6 +21,7 @@
#include <asm/io.h>
#include <asm/processor.h>
#include <asm/pci.h>
#include <netdev.h>
int
checkboard
(
void
)
{
...
...
@@ -49,3 +50,7 @@ void pci_init_board(void)
pci_sh7780_init
(
&
hose
);
}
int
board_eth_init
(
bd_t
*
bis
)
{
return
pci_eth_init
(
bis
);
}
common/cmd_bootm.c
浏览文件 @
52bacb98
...
...
@@ -251,6 +251,7 @@ static int bootm_start(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
}
#if defined(CONFIG_OF_LIBFDT)
#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_SPARC)
/* find flattened device tree */
ret
=
boot_get_fdt
(
flag
,
argc
,
argv
,
&
images
,
&
images
.
ft_addr
,
&
images
.
ft_len
);
...
...
@@ -260,6 +261,7 @@ static int bootm_start(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
}
set_working_fdt_addr
(
images
.
ft_addr
);
#endif
#endif
}
...
...
@@ -337,13 +339,13 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
return
BOOTM_ERR_UNIMPLEMENTED
;
}
puts
(
"OK
\n
"
);
debug
(
" kernel loaded at 0x%08lx, end = 0x%
8p
\n
"
,
load
,
load_end
);
debug
(
" kernel loaded at 0x%08lx, end = 0x%
08lx
\n
"
,
load
,
*
load_end
);
if
(
boot_progress
)
show_boot_progress
(
7
);
if
((
load
<
blob_end
)
&&
(
*
load_end
>
blob_start
))
{
debug
(
"images.os.start = 0x%lX, images.os.end = 0x%lx
\n
"
,
blob_start
,
blob_end
);
debug
(
"images.os.load = 0x%lx, load_end = 0x%
p
\n
"
,
load
,
load_end
);
debug
(
"images.os.load = 0x%lx, load_end = 0x%
lx
\n
"
,
load
,
*
load_end
);
return
BOOTM_ERR_OVERLAP
;
}
...
...
common/cmd_mem.c
浏览文件 @
52bacb98
...
...
@@ -1227,7 +1227,6 @@ int do_unzip ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
/**************************************************/
#if defined(CONFIG_CMD_MEMORY)
U_BOOT_CMD
(
md
,
3
,
1
,
do_mem_md
,
"md - memory display
\n
"
,
...
...
@@ -1338,4 +1337,3 @@ U_BOOT_CMD(
#endif
/* CONFIG_CMD_UNZIP */
#endif
#endif
drivers/mtd/spi/Makefile
浏览文件 @
52bacb98
...
...
@@ -27,6 +27,7 @@ LIB := $(obj)libspi_flash.a
COBJS-$(CONFIG_SPI_FLASH)
+=
spi_flash.o
COBJS-$(CONFIG_SPI_FLASH_ATMEL)
+=
atmel.o
COBJS-$(CONFIG_SPI_FLASH_STMICRO)
+=
stmicro.o
COBJS
:=
$
(
COBJS-y
)
SRCS
:=
$(COBJS:.o=.c)
...
...
drivers/mtd/spi/spi_flash.c
浏览文件 @
52bacb98
...
...
@@ -133,6 +133,11 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs,
case
0x1F
:
flash
=
spi_flash_probe_atmel
(
spi
,
idcode
);
break
;
#endif
#ifdef CONFIG_SPI_FLASH_STMICRO
case
0x20
:
flash
=
spi_flash_probe_stmicro
(
spi
,
idcode
);
break
;
#endif
default:
debug
(
"SF: Unsupported manufacturer %02X
\n
"
,
idcode
[
0
]);
...
...
drivers/mtd/spi/spi_flash_internal.h
浏览文件 @
52bacb98
...
...
@@ -43,3 +43,4 @@ int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd,
/* Manufacturer-specific probe functions */
struct
spi_flash
*
spi_flash_probe_spansion
(
struct
spi_slave
*
spi
,
u8
*
idcode
);
struct
spi_flash
*
spi_flash_probe_atmel
(
struct
spi_slave
*
spi
,
u8
*
idcode
);
struct
spi_flash
*
spi_flash_probe_stmicro
(
struct
spi_slave
*
spi
,
u8
*
idcode
);
drivers/mtd/spi/stmicro.c
0 → 100644
浏览文件 @
52bacb98
/*
* (C) Copyright 2000-2002
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
* Copyright 2008, Network Appliance Inc.
* Jason McMullan <mcmullan@netapp.com>
*
* Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
* TsiChung Liew (Tsi-Chung.Liew@freescale.com)
*
* 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
*/
#include <common.h>
#include <malloc.h>
#include <spi_flash.h>
#include "spi_flash_internal.h"
/* M25Pxx-specific commands */
#define CMD_M25PXX_WREN 0x06
/* Write Enable */
#define CMD_M25PXX_WRDI 0x04
/* Write Disable */
#define CMD_M25PXX_RDSR 0x05
/* Read Status Register */
#define CMD_M25PXX_WRSR 0x01
/* Write Status Register */
#define CMD_M25PXX_READ 0x03
/* Read Data Bytes */
#define CMD_M25PXX_FAST_READ 0x0b
/* Read Data Bytes at Higher Speed */
#define CMD_M25PXX_PP 0x02
/* Page Program */
#define CMD_M25PXX_SE 0xd8
/* Sector Erase */
#define CMD_M25PXX_BE 0xc7
/* Bulk Erase */
#define CMD_M25PXX_DP 0xb9
/* Deep Power-down */
#define CMD_M25PXX_RES 0xab
/* Release from DP, and Read Signature */
#define STM_ID_M25P16 0x15
#define STM_ID_M25P20 0x12
#define STM_ID_M25P32 0x16
#define STM_ID_M25P40 0x13
#define STM_ID_M25P64 0x17
#define STM_ID_M25P80 0x14
#define STM_ID_M25P128 0x18
#define STMICRO_SR_WIP (1 << 0)
/* Write-in-Progress */
struct
stmicro_spi_flash_params
{
u8
idcode1
;
u16
page_size
;
u16
pages_per_sector
;
u16
nr_sectors
;
const
char
*
name
;
};
struct
stmicro_spi_flash
{
const
struct
stmicro_spi_flash_params
*
params
;
struct
spi_flash
flash
;
};
static
inline
struct
stmicro_spi_flash
*
to_stmicro_spi_flash
(
struct
spi_flash
*
flash
)
{
return
container_of
(
flash
,
struct
stmicro_spi_flash
,
flash
);
}
static
const
struct
stmicro_spi_flash_params
stmicro_spi_flash_table
[]
=
{
{
.
idcode1
=
STM_ID_M25P16
,
.
page_size
=
256
,
.
pages_per_sector
=
256
,
.
nr_sectors
=
32
,
.
name
=
"M25P16"
,
},
{
.
idcode1
=
STM_ID_M25P20
,
.
page_size
=
256
,
.
pages_per_sector
=
256
,
.
nr_sectors
=
4
,
.
name
=
"M25P20"
,
},
{
.
idcode1
=
STM_ID_M25P32
,
.
page_size
=
256
,
.
pages_per_sector
=
256
,
.
nr_sectors
=
64
,
.
name
=
"M25P32"
,
},
{
.
idcode1
=
STM_ID_M25P40
,
.
page_size
=
256
,
.
pages_per_sector
=
256
,
.
nr_sectors
=
8
,
.
name
=
"M25P40"
,
},
{
.
idcode1
=
STM_ID_M25P64
,
.
page_size
=
256
,
.
pages_per_sector
=
256
,
.
nr_sectors
=
128
,
.
name
=
"M25P64"
,
},
{
.
idcode1
=
STM_ID_M25P80
,
.
page_size
=
256
,
.
pages_per_sector
=
256
,
.
nr_sectors
=
16
,
.
name
=
"M25P80"
,
},
{
.
idcode1
=
STM_ID_M25P128
,
.
page_size
=
256
,
.
pages_per_sector
=
1024
,
.
nr_sectors
=
64
,
.
name
=
"M25P128"
,
},
};
static
int
stmicro_wait_ready
(
struct
spi_flash
*
flash
,
unsigned
long
timeout
)
{
struct
spi_slave
*
spi
=
flash
->
spi
;
unsigned
long
timebase
;
int
ret
;
u8
status
;
u8
cmd
[
4
]
=
{
CMD_M25PXX_RDSR
,
0xff
,
0xff
,
0xff
};
ret
=
spi_xfer
(
spi
,
32
,
&
cmd
[
0
],
NULL
,
SPI_XFER_BEGIN
);
if
(
ret
)
{
debug
(
"SF: Failed to send command %02x: %d
\n
"
,
cmd
,
ret
);
return
ret
;
}
timebase
=
get_timer
(
0
);
do
{
ret
=
spi_xfer
(
spi
,
8
,
NULL
,
&
status
,
0
);
if
(
ret
)
return
-
1
;
if
((
status
&
STMICRO_SR_WIP
)
==
0
)
break
;
}
while
(
get_timer
(
timebase
)
<
timeout
);
spi_xfer
(
spi
,
0
,
NULL
,
NULL
,
SPI_XFER_END
);
if
((
status
&
STMICRO_SR_WIP
)
==
0
)
return
0
;
/* Timed out */
return
-
1
;
}
static
int
stmicro_read_fast
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
,
void
*
buf
)
{
struct
stmicro_spi_flash
*
stm
=
to_stmicro_spi_flash
(
flash
);
unsigned
long
page_addr
;
unsigned
long
page_size
;
u8
cmd
[
5
];
page_size
=
stm
->
params
->
page_size
;
page_addr
=
offset
/
page_size
;
cmd
[
0
]
=
CMD_READ_ARRAY_FAST
;
cmd
[
1
]
=
page_addr
>>
8
;
cmd
[
2
]
=
page_addr
;
cmd
[
3
]
=
offset
%
page_size
;
cmd
[
4
]
=
0x00
;
return
spi_flash_read_common
(
flash
,
cmd
,
sizeof
(
cmd
),
buf
,
len
);
}
static
int
stmicro_write
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
,
const
void
*
buf
)
{
struct
stmicro_spi_flash
*
stm
=
to_stmicro_spi_flash
(
flash
);
unsigned
long
page_addr
;
unsigned
long
byte_addr
;
unsigned
long
page_size
;
size_t
chunk_len
;
size_t
actual
;
int
ret
;
u8
cmd
[
4
];
page_size
=
stm
->
params
->
page_size
;
page_addr
=
offset
/
page_size
;
byte_addr
=
offset
%
page_size
;
ret
=
spi_claim_bus
(
flash
->
spi
);
if
(
ret
)
{
debug
(
"SF: Unable to claim SPI bus
\n
"
);
return
ret
;
}
ret
=
0
;
for
(
actual
=
0
;
actual
<
len
;
actual
+=
chunk_len
)
{
chunk_len
=
min
(
len
-
actual
,
page_size
-
byte_addr
);
cmd
[
0
]
=
CMD_M25PXX_PP
;
cmd
[
1
]
=
page_addr
>>
8
;
cmd
[
2
]
=
page_addr
;
cmd
[
3
]
=
byte_addr
;
debug
(
"PP: 0x%p => cmd = { 0x%02x 0x%02x%02x%02x } chunk_len = %d
\n
"
,
buf
+
actual
,
cmd
[
0
],
cmd
[
1
],
cmd
[
2
],
cmd
[
3
],
chunk_len
);
ret
=
spi_flash_cmd
(
flash
->
spi
,
CMD_M25PXX_WREN
,
NULL
,
0
);
if
(
ret
<
0
)
{
debug
(
"SF: Enabling Write failed
\n
"
);
break
;
}
ret
=
spi_flash_cmd_write
(
flash
->
spi
,
cmd
,
4
,
buf
+
actual
,
chunk_len
);
if
(
ret
<
0
)
{
debug
(
"SF: STMicro Page Program failed
\n
"
);
break
;
}
ret
=
stmicro_wait_ready
(
flash
,
SPI_FLASH_PROG_TIMEOUT
);
if
(
ret
<
0
)
{
debug
(
"SF: STMicro page programming timed out
\n
"
);
break
;
}
page_addr
++
;
byte_addr
=
0
;
}
debug
(
"SF: STMicro: Successfully programmed %u bytes @ 0x%x
\n
"
,
len
,
offset
);
spi_release_bus
(
flash
->
spi
);
return
ret
;
}
int
stmicro_erase
(
struct
spi_flash
*
flash
,
u32
offset
,
size_t
len
)
{
struct
stmicro_spi_flash
*
stm
=
to_stmicro_spi_flash
(
flash
);
unsigned
long
sector_size
;
size_t
actual
;
int
ret
;
u8
cmd
[
4
];
/*
* This function currently uses sector erase only.
* probably speed things up by using bulk erase
* when possible.
*/
sector_size
=
stm
->
params
->
page_size
*
stm
->
params
->
pages_per_sector
;
if
(
offset
%
sector_size
||
len
%
sector_size
)
{
debug
(
"SF: Erase offset/length not multiple of sector size
\n
"
);
return
-
1
;
}
len
/=
sector_size
;
cmd
[
0
]
=
CMD_M25PXX_SE
;
cmd
[
2
]
=
0x00
;
cmd
[
3
]
=
0x00
;
ret
=
spi_claim_bus
(
flash
->
spi
);
if
(
ret
)
{
debug
(
"SF: Unable to claim SPI bus
\n
"
);
return
ret
;
}
ret
=
0
;
for
(
actual
=
0
;
actual
<
len
;
actual
++
)
{
cmd
[
1
]
=
(
offset
/
sector_size
)
+
actual
;
ret
=
spi_flash_cmd
(
flash
->
spi
,
CMD_M25PXX_WREN
,
NULL
,
0
);
if
(
ret
<
0
)
{
debug
(
"SF: Enabling Write failed
\n
"
);
break
;
}
ret
=
spi_flash_cmd_write
(
flash
->
spi
,
cmd
,
4
,
NULL
,
0
);
if
(
ret
<
0
)
{
debug
(
"SF: STMicro page erase failed
\n
"
);
break
;
}
/* Up to 2 seconds */
ret
=
stmicro_wait_ready
(
flash
,
2
*
CFG_HZ
);
if
(
ret
<
0
)
{
debug
(
"SF: STMicro page erase timed out
\n
"
);
break
;
}
}
debug
(
"SF: STMicro: Successfully erased %u bytes @ 0x%x
\n
"
,
len
*
sector_size
,
offset
);
spi_release_bus
(
flash
->
spi
);
return
ret
;
}
struct
spi_flash
*
spi_flash_probe_stmicro
(
struct
spi_slave
*
spi
,
u8
*
idcode
)
{
const
struct
stmicro_spi_flash_params
*
params
;
struct
stmicro_spi_flash
*
stm
;
unsigned
int
i
;
int
ret
;
u8
id
[
3
];
ret
=
spi_flash_cmd
(
spi
,
CMD_READ_ID
,
id
,
sizeof
(
id
));
if
(
ret
)
return
NULL
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
stmicro_spi_flash_table
);
i
++
)
{
params
=
&
stmicro_spi_flash_table
[
i
];
if
(
params
->
idcode1
==
idcode
[
2
])
{
break
;
}
}
if
(
i
==
ARRAY_SIZE
(
stmicro_spi_flash_table
))
{
debug
(
"SF: Unsupported STMicro ID %02x
\n
"
,
id
[
1
]);
return
NULL
;
}
stm
=
malloc
(
sizeof
(
struct
stmicro_spi_flash
));
if
(
!
stm
)
{
debug
(
"SF: Failed to allocate memory
\n
"
);
return
NULL
;
}
stm
->
params
=
params
;
stm
->
flash
.
spi
=
spi
;
stm
->
flash
.
name
=
params
->
name
;
stm
->
flash
.
write
=
stmicro_write
;
stm
->
flash
.
erase
=
stmicro_erase
;
stm
->
flash
.
read
=
stmicro_read_fast
;
stm
->
flash
.
size
=
params
->
page_size
*
params
->
pages_per_sector
*
params
->
nr_sectors
;
debug
(
"SF: Detected %s with page size %u, total %u bytes
\n
"
,
params
->
name
,
params
->
page_size
,
stm
->
flash
.
size
);
return
&
stm
->
flash
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录