跳转至

SGS SATA DebugSOP手册

REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 05/15/2026

    1. SATA设备无法识别

    图1-1 SATA设备识别失败定位思维导图
    流程 方法 出口条件 下一步 需提供给FAE的资料 相关可参考FAQ
    A 1.确认SATA硬盘本身是否正常,可接PC测试
    2.确认SATA数据线连接是否牢固,更换已知正常的SATA数据线做交叉测试
    3.使用万用表确认SATA供电电压是否在正常范围内(SATA Power 3.3V/5V/12V)
    出口条件1:
    1.硬盘接PC也无法识别
    > 硬盘问题
    出口条件2:
    1.更换SATA数据线后设备可以识别
    > 数据线问题
    出口条件3:
    1.SATA供电电压异常
    > 供电问题
    出口条件4:
    硬盘、数据线、供电均正常
    >无问题
    出口条件1:
    >更换硬盘
    出口条件2:
    >更换数据线
    出口条件3:
    >流程结束,寻求硬件协助
    出口条件4:
    >B
    出口条件3:
    ==>寻求硬件协助
    B 1.确认DTS中SATA相关节点是否使能:
    cd \<kernel_path>
    vim mhera.dtsi
    查找sata关键字,确认PHY节点(sgs-sata-phy/sgs-sata1-phy)和AHCI节点(sata/sata1)的status属性
    Kernel: status = "ok"
    U-Boot: status = "okay"
    2.若节点被注释或status为"disabled",则SATA功能未启用
    出口条件1:
    1.PHY节点或AHCI节点status不为"ok"/"okay",或被注释
    > 节点未使能
    出口条件2:
    1.节点已使能
    >无问题
    出口条件1:
    >将status改为"ok"或"okay"
    出口条件2:
    >C
    出口条件1:
    ==>提供DTS配置文件
    C 1.检查Kernel menuconfig中SATA相关配置是否已开启:
    Device Drivers →
     SCSI device support → [] SCSI device support / [] SCSI disk support
     Serial ATA and Parallel ATA drivers (libata) → [] Platform AHCI SATA support
     SGS SoC platform drivers → [
    ] Sgs ACP Bridge driver
     SGS SoC platform drivers → [] Sgs SATA HOST / [] Sgs sata apply hd link / [*] Sgs sata apply hd link vote
    2.确认驱动编译方式(Built-in或Module):
    若为Module,确认加载顺序: 先insmod drv-sata-phy.ko,再insmod drv-sata-host.ko
    3.确认Kernel启动参数中sata_disable_port是否被误设(0x1=disable port0, 0x2=disable port1)
    出口条件1:
    1.menuconfig中SATA相关选项未全部开启
    > 驱动未编译
    出口条件2:
    1.驱动编译为Module但未加载或加载顺序错误
    > 模块加载问题
    出口条件3:
    1.sata_disable_port被设置导致端口被禁用
    > 启动参数问题
    出口条件4:
    驱动配置正常
    >无问题
    出口条件1:
    >开启所有相关选项重新编译
    出口条件2:
    >按正确顺序加载模块
    出口条件3:
    >修正启动参数
    出口条件4:
    >D
    D 1.通过dmesg查看SATA初始化log,关注以下关键字:
    1.1 "sata phy registered." 表示PHY驱动加载成功
    1.2 "sata host X success registered." 表示AHCI Host加载成功
    1.3 "sgs SATA link up" 表示PHY链路建立成功,会打印速率(GenX)和SStatus/SControl
    1.4 "sgs SATA link down" 表示PHY链路未建立
    1.5 "COMRESET failed" 表示链路复位失败
    1.6 "get phyd/phya/ahci_misc resource fail" 表示寄存器映射失败
    2.若dmesg无任何SATA相关log,回到C检查驱动配置
    出口条件1:
    1.dmesg无任何SATA/AHCI相关log
    > 驱动未加载,回到C
    出口条件2:
    1.dmesg显示PHY或Host注册失败
    > DTS配置错误或驱动问题
    出口条件3:
    1.PHY和Host均注册成功,但"link down"
    > PHY链路未建立
    出口条件4:
    1."link up"但设备仍无法识别
    > 系统层面问题
    出口条件1:
    >C
    出口条件2:
    >B
    出口条件3:
    >E
    出口条件4:
    >流程结束
    出口条件2:
    >1.提供完整dmesg log
    >2.提供DTS配置文件
    出口条件3:
    >1.提供完整dmesg log
    出口条件4:
    >1.提供完整dmesg log
    E 1.通过sysfs节点查看SATA link状态:
    cat /sys/devices/virtual/sgs/sata0/sata_dump
    输出说明:
     link err cnt: 链路错误计数
     link gen1/gen2/gen3 cnt: 各速率的link成功计数
    2.若link err cnt较高且所有gen cnt为0,说明PHY一直无法建立link
    3.通过sysfs进行PHY参数调优,参考《SATA Host使用说明》第6节HW CTS设定流程:
    cd /sys/devices/virtual/sgs/sata0/
    3.1 先设定传输速率: echo [0/½] > test_gen
    3.2 再设定测试模式: echo [0~4] > cts_pattern
    3.3 调整TX参数: echo [enable] [db] [level] > de_emphasis
    4.调优后配合示波器量测SATA TX信号眼图验证信号质量
    5.dump AHCI和PHY寄存器信息提供给SWRD(寄存器bank/offset见附录)
    出口条件1:
    1.调优PHY参数后链路恢复正常
    > PHY参数调优解决,将参数更新到DTS
    出口条件2:
    1.调优PHY参数后链路仍无法建立
    > 硬件信号层面问题
    出口条件3:
    1.获取到寄存器dump信息
    ==> 提供给SWRD分析
    出口条件1:
    >流程结束
    出口条件2:
    >流程结束
    出口条件3:
    ==>流程结束
    出口条件1:
    >1.记录CTS调优过程和最终参数
    >2.参考使用说明更新DTS
    出口条件2:
    >1.提供完整dmesg log
    >2.提供示波器信号眼图
    >3.dump所有SATA寄存器(AHCI: riux32_r 0x1A34/0x1A35全部offset; PHY: riu_r 0x1438/0x1439/0x143A/0x143B全部offset(Port0)或0x1441/0x143C/0x143D/0x143E全部offset(Port1))
    出口条件3:
    >1.dump所有SATA寄存器(AHCI: riux32_r 0x1A34/0x1A35全部offset; PHY: riu_r 0x1438/0x1439/0x143A/0x143B全部offset(Port0)或0x1441/0x143C/0x143D/0x143E全部offset(Port1))
    ==>2.完整dmesg log

    2. SATA读写性能不达标

    图2-1 SATA读写性能不达标定位思维导图
    流程 方法 出口条件 下一步 需提供给FAE的资料 相关可参考FAQ
    A 1.通过dmesg确认SATA链路协商速率,检索"sgs SATA link up"关键字:
    打印格式: "sgs SATA link up 6.0 Gbps (SStatus XXX SControl XXX)"
    2.通过sysfs确认链路状态:
    cat /sys/devices/virtual/sgs/sata0/sata_dump
    查看link gen1/gen2/gen3 cnt确认实际协商速率分布
    3.通过AHCI PxSSTS寄存器确认当前速率:
    riux32_r 0x1A34 0x4A (Port0)
    bit[7:4]: 1=GEN1(1.5G), 2=GEN2(3G), 3=GEN3(6G)
    4.确认DTS中phy_mode设置是否与预期速率一致:
    phy_mode=0 → GEN1, phy_mode=1 → GEN2, phy_mode=2 → GEN3
    5.通过hdparm确认硬盘支持的最高速率:
    hdparm -I /dev/sda 查看"Supported SATA speeds"
    出口条件1:
    1.实际协商速率低于双方支持的最高速率
    > 链路速率协商不充分
    出口条件2:
    1.DTS中phy_mode设置低于预期
    > DTS配置问题
    出口条件3:
    1.实际协商速率已达到预期但性能仍不达标
    ==> 其他层面问题
    出口条件1:
    >B
    出口条件2:
    >流程结束,修改phy_mode后重新测试
    出口条件3:
    ==>C
    B 1.参考《SATA Host使用说明》第6节HW CTS设定流程,通过sysfs调整PHY参数:
    cd /sys/devices/virtual/sgs/sata0/
    1.1 先设定传输速率: echo 2 > test_gen (GEN3=2)
    1.2 再设定测试模式: echo 1 > cts_pattern (MFTP=1)
    1.3 调整TX参数: echo [enable] [db] [level] > de_emphasis
     enable=0: 仅Vpp调整(适用于GEN1/GEN2/GEN3)
     enable=1: 启用去加重(仅适用于GEN3)
     db: 0=(-1.5dB), 1=(-2.5dB), 2=(-3.5dB), 3=(-6.0dB)
     level: 0=(0.4Vpp) ~ 8=(1.2Vpp)
    2.建议先尝试提高Vpp(level值),逐步从3(0.7Vpp)增加到6(1.0Vpp)测试
    3.若仅提高Vpp不够,GEN3下启用去加重(enable=1)配合适当db值测试
    4.配合示波器量测SATA TX信号眼图验证信号质量改善
    5.确认调优后参数是否稳定,重复测试多次
    出口条件1:
    1.调优PHY参数后性能恢复正常
    > PHY参数调优解决
    出口条件2:
    1.调优后速率仍无法提升到预期
    > 硬件信号质量限制
    出口条件3:
    1.示波器测量信号眼图不达标
    ==> 硬件走线或SATA线缆问题
    出口条件1:
    >流程结束,将调优后的参数更新到DTS
    出口条件2:
    >流程结束
    出口条件3:
    ==>流程结束
    出口条件1:
    >1.记录CTS调优过程和最终参数
    >2.参考使用说明更新DTS中tx_gen3_de_emphasis和tx_gen1_gen2_Vpp
    出口条件2:
    >1.提供dmesg中速率协商log
    >2.提供示波器信号眼图
    出口条件3:
    ==>1.提供示波器信号眼图
    C 1.使用hdparm测试硬盘底层读写性能:
    hdparm -t /dev/sda (buffered disk read)
    hdparm -T /dev/sda (cache read)
    2.使用fio工具进行更准确的性能测试:
    顺序读: fio --name=read --rw=read --bs=4M --size=1G --numjobs=1 --direct=1 --iodepth=24
    顺序写: fio --name=write --rw=write --bs=4M --size=1G --numjobs=1 --direct=1 --iodepth=24
    随机读: fio --name=randread --rw=randread --bs=4K --size=1G --numjobs=1 --direct=1 --iodepth=24
    随机写: fio --name=randwrite --rw=randwrite --bs=4K --size=1G --numjobs=1 --direct=1 --iodepth=24
    3.确认测试命令是否正确,常见问题:
    3.1 fio未加--direct=1导致测试了page cache
    3.2 未使用--iodepth参数无法发挥NCQ性能
    出口条件1:
    1.hdparm缓冲读取性能正常,但fio direct IO性能低
    > DMA或IO调度层面问题
    出口条件2:
    1.hdparm和fio性能均低
    > 硬件层面或控制器层面问题
    出口条件3:
    1.测试命令有误,修正后性能恢复正常
    ==> 测试方法问题
    出口条件1:
    >D
    出口条件2:
    >D
    出口条件3:
    ==>流程结束
    出口条件3:
    ==>确认使用正确的fio参数
    D 1.使用top/vmstat观察SATA读写期间系统资源使用情况:
    1.1 CPU Loading: top命令关注idle百分比(cpu loading = 100% - idle)
    1.2 内存使用: free命令关注available内存
    1.3 中断分布: cat /proc/interrupts 关注SATA MAC中断次数
    2.若CPU Loading高,检查是否有其他高优先级任务抢占资源
    3.检查SATA中断是否集中在单核处理
    4.检查系统内存带宽是否为瓶颈: 使用mbw工具测试
    出口条件1:
    1.CPU Loading过高导致SATA处理不及时(idle接近0%)
    > CPU瓶颈问题
    出口条件2:
    1.内存不足导致频繁换页
    > 内存瓶颈问题
    出口条件3:
    1.中断集中在单核
    > 尝试绑核优化
    出口条件4:
    1.系统资源充足,性能仍不达标
    > PHY信号质量或控制器层面问题
    出口条件1:
    >流程结束
    出口条件2:
    >流程结束
    出口条件3:
    >尝试绑核后重新测试
    出口条件4:
    >E
    出口条件4:
    >1.提供top/vmstat输出
    >2.提供/proc/interrupts内容
    E 1.综合调整PHY参数优化信号质量:
    1.1 调整TX Vpp: 通过de_emphasis节点提高level值
    1.2 GEN3下启用去加重: enable=1,调整db值
    1.3 调整RX均衡参数: 修改DTS中rx_eq_rs1/rx_eq_rs2/rx_eq_ctle(通常TX参数已足够,仅在TX调优后仍有问题时调整)
    2.确认SSC(扩频时钟)配置是否影响性能:
    cat /sys/devices/virtual/sgs/sata0/test_ssc
    DTS中tx_ssc_mode=0表示关闭SSC
    3.配合示波器量测SATA信号眼图
    4.若调整后性能有改善但仍未达标,dump完整寄存器信息提供给SWRD
    出口条件1:
    1.调优PHY参数后性能恢复到预期水平
    > PHY参数调优解决
    出口条件2:
    1.调优后性能有改善但仍低于预期
    > 信号完整性限制
    出口条件3:
    1.所有调整后性能仍不达标
    ==> 需要SWRD进一步分析
    出口条件1:
    >流程结束,将参数更新到DTS
    出口条件2:
    >流程结束
    出口条件3:
    ==>流程结束
    出口条件1:
    >1.记录调优前后的PHY参数对比
    出口条件2:
    >1.提供示波器信号眼图
    出口条件3:
    >1.dump所有SATA寄存器(AHCI: riux32_r 0x1A34/0x1A35全部offset; PHY: riu_r 0x1438/0x1439/0x143A/0x143B全部offset(Port0)或0x1441/0x143C/0x143D/0x143E全部offset(Port1))
    >2.完整dmesg log和fio测试log
    ==>3.示波器信号波形

    3. 附录

    3.1 SATA sysfs调试节点说明

    SATA PHY驱动注册后,会在sysfs创建以下调试节点:

    节点路径:

    • Port0: /sys/devices/virtual/sgs/sata0/
    • Port1: /sys/devices/virtual/sgs/sata1/

      节点名称 操作 说明
      sata_dump cat 查看link错误计数和各速率link成功计数
      test_gen cat / echo 查看/设置PHY测试速率:0=GEN1(1.5G), 1=GEN2(3G), 2=GEN3(6G)
      cts_pattern cat / echo 查看/设置CTS测试pattern: 0=HFTP, 1=MFTP, 2=LFTP, 3=LBP, 4=SSOP
      de_emphasis cat / echo 查看/设置TX参数:echo [enable] [db] [level] > de_emphasis
      test_ssc cat / echo 查看/设置SSC:0=关闭,1=开启

    注意:CTS设定时必须先设定传输速率(test_gen),再设定测试模式(cts_pattern)。

    de_emphasis参数说明:

    参数 说明 可选值
    enable GEN3去加重使能 0=仅Vpp, 1=使用去加重
    db 去加重档位(enable=1时有效) 0=(-1.5dB), 1=(-2.5dB), 2=(-3.5dB), 3=(-6.0dB)
    level 电压摆幅档位 0=(0.4Vpp) ~ 8=(1.2Vpp)

    3.2 AHCI关键寄存器

    读写方法: riux32_r / riux32_w(bank 0x1A34、0x1A35 为 x32 寄存器)

    寄存器 Bank Offset 说明
    CAP 0x1A34 (Port0) / 0x1A35 (Port1) 0x00 控制器能力
    GHC 同上 0x01 全局控制,bit31=AE(AHCI Enable)
    PI 同上 0x03 Port Implemented
    PxCLB 同上 0x10 Command List Base
    PxFB 同上 0x14 FIS Base
    PxIS 同上 0x40 Port Interrupt Status
    PxIE 同上 0x44 Port Interrupt Enable
    PxCMD 同上 0x48 Port Command
    PxTFD 同上 0x50 Port Task File Data
    PxSIG 同上 0x54 Port Signature
    PxSSTS 同上 0x4A Port Serial Status
    bit[3:0]: 设备检测(1h=已连接)
    bit[7:4]: 协商速率(1h=GEN1, 2h=GEN2, 3h=GEN3)
    PxSCTL 同上 0x4B Port Serial Control
    PxSERR 同上 0x4C Port Serial Error
    PxSACT 同上 0x50 Port Serial Active

    读写示例:

    # 读取Port0 PxSSTS
    riux32_r 0x1A34 0x4A
    
    # 读取Port1 PxSSTS
    riux32_r 0x1A35 0x4A
    

    3.3 SATA PHY寄存器

    读写方法: riu_r / riu_w

    区域 Port0 Bank Port1 Bank 大小
    phyd 0x1439 0x143C 0x200
    phya 0x143A 0x143D 0x200
    phya2 0x143B 0x143E 0x200
    ahci_misc 0x1438 0x1441 0x200

    读写示例:

    # 读取Port0 PHY phyd区域
    riu_r 0x1439 offset
    
    # 读取Port1 PHY phyd区域
    riu_r 0x143C offset
    

    dump所有SATA寄存器示例(以Port0为例):

    # AHCI寄存器 (x32)
    riux32_r 0x1A34
    # PHY寄存器 (全部bank)
    riu_r 0x1438    # ahci_misc
    riu_r 0x1439    # phyd
    riu_r 0x143A    # phya
    riu_r 0x143B    # phya2
    

    dump所有SATA寄存器示例(以Port1为例):

    # AHCI寄存器 (x32)
    riux32_r 0x1A35
    # PHY寄存器 (全部bank)
    riu_r 0x1441    # ahci_misc
    riu_r 0x143C    # phyd
    riu_r 0x143D    # phya
    riu_r 0x143E    # phya2
    

    3.4 DTS关键参数速查

    属性 说明 可配置值
    phy_mode PHY速率模式 0=GEN1(1.5G), 1=GEN2(3G), 2=GEN3(6G)
    tx_ssc_mode 扩频时钟 0=关闭,1=开启
    tx_gen1_gen2_Vpp GEN1/GEN2发送电压摆幅 0xFF=默认值,0~5=手动档位
    tx_gen3_de_emphasis GEN3去加重参数 0xFF=默认值,格式:\<enable> \<db> \<level>
    rx_eq_rs1 接收均衡参数RS1 0xFF=默认值
    rx_eq_rs2 接收均衡参数RS2 0xFF=默认值
    rx_eq_ctle 接收均衡参数CTLE 0xFF=默认值

    PHY参数中 0xFF 表示使用默认配置。如需优化信号质量,请参考《SATA Host使用说明》第6节HW CTS设定流程。