Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
adf716d2
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
adf716d2
编写于
2月 28, 2015
作者:
B
Brian Norris
浏览文件
操作
浏览文件
下载
差异文件
Merge MTD updates into -next
上级
46aad841
8dad0386
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
42 addition
and
6 deletion
+42
-6
drivers/mtd/nand/pxa3xx_nand.c
drivers/mtd/nand/pxa3xx_nand.c
+42
-6
未找到文件。
drivers/mtd/nand/pxa3xx_nand.c
浏览文件 @
adf716d2
...
...
@@ -480,6 +480,42 @@ static void disable_int(struct pxa3xx_nand_info *info, uint32_t int_mask)
nand_writel
(
info
,
NDCR
,
ndcr
|
int_mask
);
}
static
void
drain_fifo
(
struct
pxa3xx_nand_info
*
info
,
void
*
data
,
int
len
)
{
if
(
info
->
ecc_bch
)
{
int
timeout
;
/*
* According to the datasheet, when reading from NDDB
* with BCH enabled, after each 32 bytes reads, we
* have to make sure that the NDSR.RDDREQ bit is set.
*
* Drain the FIFO 8 32 bits reads at a time, and skip
* the polling on the last read.
*/
while
(
len
>
8
)
{
__raw_readsl
(
info
->
mmio_base
+
NDDB
,
data
,
8
);
for
(
timeout
=
0
;
!
(
nand_readl
(
info
,
NDSR
)
&
NDSR_RDDREQ
);
timeout
++
)
{
if
(
timeout
>=
5
)
{
dev_err
(
&
info
->
pdev
->
dev
,
"Timeout on RDDREQ while draining the FIFO
\n
"
);
return
;
}
mdelay
(
1
);
}
data
+=
32
;
len
-=
8
;
}
}
__raw_readsl
(
info
->
mmio_base
+
NDDB
,
data
,
len
);
}
static
void
handle_data_pio
(
struct
pxa3xx_nand_info
*
info
)
{
unsigned
int
do_bytes
=
min
(
info
->
data_size
,
info
->
chunk_size
);
...
...
@@ -496,12 +532,12 @@ static void handle_data_pio(struct pxa3xx_nand_info *info)
DIV_ROUND_UP
(
info
->
oob_size
,
4
));
break
;
case
STATE_PIO_READING
:
__raw_readsl
(
info
->
mmio_base
+
NDDB
,
drain_fifo
(
info
,
info
->
data_buff
+
info
->
data_buff_pos
,
DIV_ROUND_UP
(
do_bytes
,
4
));
if
(
info
->
oob_size
>
0
)
__raw_readsl
(
info
->
mmio_base
+
NDDB
,
drain_fifo
(
info
,
info
->
oob_buff
+
info
->
oob_buff_pos
,
DIV_ROUND_UP
(
info
->
oob_size
,
4
));
break
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录