Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OS
U-Boot.Mirror
提交
735717d1
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,发现更多精彩内容 >>
提交
735717d1
编写于
7月 12, 2016
作者:
L
Ladislav Michl
提交者:
Tom Rini
7月 22, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
onenand_spl_simple: Add a simple OneNAND read function
Signed-off-by:
N
Ladislav Michl
<
ladis@linux-mips.org
>
上级
e1a89e93
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
49 addition
and
0 deletion
+49
-0
drivers/mtd/onenand/onenand_spl.c
drivers/mtd/onenand/onenand_spl.c
+48
-0
include/onenand_uboot.h
include/onenand_uboot.h
+1
-0
未找到文件。
drivers/mtd/onenand/onenand_spl.c
浏览文件 @
735717d1
...
...
@@ -93,6 +93,54 @@ static int onenand_spl_read_page(uint32_t block, uint32_t page, uint32_t *buf,
return
0
;
}
#ifdef CONFIG_SPL_UBI
/* Temporary storage for non page aligned and non page sized reads. */
static
u8
scratch_buf
[
PAGE_4K
];
/**
* onenand_spl_read_block - Read data from physical eraseblock into a buffer
* @block: Number of the physical eraseblock
* @offset: Data offset from the start of @peb
* @len: Data size to read
* @dst: Address of the destination buffer
*
* Notes:
* @offset + @len are not allowed to be larger than a physical
* erase block. No sanity check done for simplicity reasons.
*/
int
onenand_spl_read_block
(
int
block
,
int
offset
,
int
len
,
void
*
dst
)
{
int
page
,
read
,
psize
;
psize
=
onenand_spl_get_geometry
();
/* Calculate the page number */
page
=
offset
/
psize
;
/* Offset to the start of a flash page */
offset
=
offset
%
psize
;
while
(
len
)
{
/*
* Non page aligned reads go to the scratch buffer.
* Page aligned reads go directly to the destination.
*/
if
(
offset
||
len
<
psize
)
{
onenand_spl_read_page
(
block
,
page
,
(
uint32_t
*
)
scratch_buf
,
psize
);
read
=
min
(
len
,
psize
-
offset
);
memcpy
(
dst
,
scratch_buf
+
offset
,
read
);
offset
=
0
;
}
else
{
onenand_spl_read_page
(
block
,
page
,
dst
,
psize
);
read
=
psize
;
}
page
++
;
len
-=
read
;
dst
+=
read
;
}
return
0
;
}
#endif
void
onenand_spl_load_image
(
uint32_t
offs
,
uint32_t
size
,
void
*
dst
)
{
uint32_t
*
addr
=
(
uint32_t
*
)
dst
;
...
...
include/onenand_uboot.h
浏览文件 @
735717d1
...
...
@@ -49,6 +49,7 @@ extern int flexonenand_set_boundary(struct mtd_info *mtd, int die,
int
boundary
,
int
lock
);
/* SPL */
int
onenand_spl_read_block
(
int
block
,
int
offset
,
int
len
,
void
*
dst
);
void
onenand_spl_load_image
(
uint32_t
offs
,
uint32_t
size
,
void
*
dst
);
#endif
/* __UBOOT_ONENAND_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录