问题描述
我正在尝试在 32 位 PowerPC 板上初始化 NVMe SSD,刚好足以发出身份命令。我没有操作系统。
这些是我已采取的步骤:
- 禁用 dcache
- 找到 SDD
- 获取 bar0,去掉最后一个 nybble,并将其用作控制区地址(易失性结构)
- 为管理完成和提交队列分配一些内存:16*64 字节用于提交,256 字节用于完成。两者都有 16 个条目
- 将控制区域中的 AQA 设置为
ENDIAN_FLIP((16<<16)|16)
,因为每个条目都有 16 个条目 - 使用 memset 将队列清零
- 将 ASQ 和 ACQ 设置为各自的地址(Endian 翻转)
- 通过将其与
0x01000000
进行按位比较,确保未启用 CSTS 中的 EN - 通过将 CC 设置为
0x01000000
来启用控制器 - 等待 CSTS 通知它已启用。到目前为止这是有效的
- 确保 CSTS 不包含致命错误标志。作品
- 分配一个 4096kb 的内存块用于识别控制器响应
- 来自结构体的表单提交条目:
.cdw0 = ENDIAN_FLIP(0x00000006)//identify command
.prp1 = ENDIAN_FLIP(block_address_32bit)//loading 32-bit address into 64-bit space
.cdw10 = ENDIAN_FLIP(0x00000001)//identify controller
- 将结构复制到提交队列[0]
- 本地增加尾门铃寄存器(从0到1)
- 将 NVMe 控制区域的尾门铃寄存器设置为
ENDIAN_FLIP(local_tail_doorbell_counter)
- 检查 CSTS 是否没有致命标志。此处失败:CSTS 返回
0x03000000
,这意味着 NVMe 控制器已启用并且发生了致命错误
是否知道出了什么问题,或者我可以做些什么来找到更好的错误信息?
我一直在阅读规范,似乎我做的一切都是正确的:/
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)