提交第一个命令后,NVMe 控制器在 CSTS 寄存器中返回致命错误标志

问题描述

我正在尝试在 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...