xlnx4.0中关于SPI-nor-flash的一个小bug
最经搞关于zynq7000,用到了petalinux,其中用的内核版本为xlnx4.0。再处理nandflash问题是,发现如下问题,阅读关于与扩展地址操作的原代码,从纸面上看应该属于一个小bug。原代码如下:
行号:333
/*
* Update Extended Address/bank selection Register.
* Call with flash->lock locked.
*/
static int write_ear(struct spi_nor *nor, u32 addr)
{
u8 code; //操作代码声明
u8 ear;
int ret;
/* Wait until finished previous write command. */
if (spi_nor_wait_till_ready(nor))
return 1;
if (nor->mtd->size <= (0x1000000) << nor->shift)
return 0;
addr = addr % (u32) nor->mtd->size;
ear = addr >> 24;
if ((!nor->isstacked) && (ear == nor->curbank))
return 0;
if (nor->isstacked && (nor->mtd->size <= 0x2000000))
return 0;
if (nor->jedec_id == CFI_MFR_AMD)
code = SPINOR_OP_BRWR; //amd器件的操作代码
if (nor->jedec_id == CFI_MFR_ST) {
write_enable(nor);
code = SPINOR_OP_WREAR; //st的操作代码
}
nor->cmd_buf[0] = ear;
ret = nor->write_reg(nor, code, nor->cmd_buf, 1, 0);
if (ret < 0)
return ret;
nor->curbank = ear;
return 0;
}
以上代码中不难看出,code没有默认值,中途只处理了AMD和ST器件的操作码,应该是一个bug,同样的问题在read_ear函数中也存在,摘录源码如下:
行号:240
/**
* read_ear - Get the extended/bank address register value
* @nor: Pointer to the flash control structure
*
* This routine reads the Extended/bank address register value
*
* Return: Negative if error occured.
*/
static int read_ear(struct spi_nor *nor, struct flash_info *info)
{
int ret;
u8 val;
u8 code; //code未初始化
/* This is actually Spansion */
if (JEDEC_MFR(info) == CFI_MFR_AMD)
code = SPINOR_OP_BRRD; //amd操作码
/* This is actually Micron */
else if (JEDEC_MFR(info) == CFI_MFR_ST)
code = SPINOR_OP_RDEAR; //st操作码
else
return -EINVAL; //其他的推出,此处应该有问题
ret = nor->read_reg(nor, code, &val, 1);
if (ret < 0)
return ret;
return val;
}
不难看出代码中code没有默认值,而且只处理了AMD和ST的器件,应属于bug,
至于怎么处理,大家是大牛,见仁见智,就不在此赘述了
xlnx4.0中关于SPI-nor-flash的一个小bug相关推荐
- windows中的一个小bug
无意中发现的windows的一个小bug,同时按下"ctrl"键和"alt"键时,过一秒钟左右cpu占用就会达到100%,在两台机器试验了一下都这样.因为也不是 ...
- iOS 15.0+ 中 SwiftUI 顶部或底部悬浮功能小面板的极简实现
功能需求 我们有时需要在 App 主视图的顶部或底部固定悬浮放置一个功能视图: 如上图所示,我们将一个列表项目输入小面板按需放在主视图的顶部或底部: 当放置在顶部时,解决了其对导航栏(Navigati ...
- 如何写一个能被手机打开的C语言小程序,如何用C语言中一些简单的语句做一个小程序,能够输入一个字符就会弹出一句话...
满意答案 lyj1260 2015.03.28 采纳率:43% 等级:11 已帮助:6408人 这个不难,是最基本的C语言程序了,我写个示例给你 #include //包含头 int main( ...
- 关于storm0.10.0版本的一个小bug
最近搭建了一个storm环境,发现在提交一个topology之后,supervisor总是会无缘无故的死掉,日志如下 [2000] the maxSleepTimeMs [60000] the max ...
- linux host命令超时,Linux中的PING命令。每日一个小知识。不怕学不会
PING(数据包Internet Groper)命令用于检查主机与服务器/主机之间的网络连接.该命令以IP地址或URL为输入,并通过消息" PING"将数据包发送到指定的地址,并记 ...
- 学习过程中遇到的一些电脑上的小BUG,非学习问题,实时更新
1.电脑桌面上有一个"关闭"字样的的小方框解决方法 电脑桌面上莫名出现有个"关闭"字样的小方框按钮,但无论怎么点击他都没有反应,而且会存在在各个页面上方 ,看着 ...
- 在latex中使用数学花体的一个小bug
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 编译错误 ...
- STM32F10X SPI操作flash MX25L64读写数据
STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自己一 ...
- STM32F10X SPI操作flash MX25L64读写数据(转)
源:STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自 ...
最新文章
- linux下查看Mysql默认编码、修改默认编码
- python input与返回值-Python 详解基本语法_函数_返回值
- 四个C++函数模板实例
- JavaScript设置对象的不可拓展
- html文件嵌入到reportlab,Reportlab学习笔记
- 模拟FCFS调度算法(先来先服务)没错,是篇好文章!
- VS 2019 16.11正式发布 | 新功能(Hot Reload 热重载)试用
- LeetCode 1426. 数元素(哈希set)
- Nginx学习日记第五篇 -- upstream及fastcgi
- centOS 8 操作系统下载与安装
- win7安装注意事项及一些美化设置
- android app后台运行
- 零基础Java难学吗?自学怎么样?
- 简单的python画图代码_python opencv实现简易画图板
- 写论文第一步——查文献的方法
- android 应用程序Activity管理类
- Android Snackbar控件
- MySQL之初识MySQL
- toad for mysql_toad for mysql
- idea 调整字体间距