Linux SATA 开发指南
:::info 文档信息
文档标识:RK-KF-YF-148 · 发布版本:V2.0.0 · 发布日期:2021-12-23 · 页数:8 · 语言:中文
原始文档:Rockchip_Developer_Guide_SATA_CN.pdf
:::
章节大纲
- Linux SATA 开发指南(P1)
- 芯片资源介绍(P4)
- DTS 配置(P4)
- menuconfig 配置(P6)
- 常见问题(P6)
在线预览
若预览无法显示,请直接下载 PDF 后用本地阅读器打开。
1. 芯片资源介绍
RK3566
| 资源 | 模式 | 支持PM芯片扩展 | PHY复用 | 备注 |
|---|---|---|---|---|
| SATA1 | 6G/3G/1.5G | 支持 | USB、QSGMII | |
| SATA2 | 6G/3G/1.5G | 支持 | PCIE、QSGMII |
RK3568
| 资源 | 速率 | 支持PM芯片扩展 | PHY复用 | 备注 |
|---|---|---|---|---|
| SATA0 | 6G/3G/1.5G | 支持 | USB | |
| SATA1 | 6G/3G/1.5G | 支持 | USB、QSGMII | |
| SATA2 | 6G/3G/1.5G | 支持 | PCIE、QSGMII |
2. DTS 配置
RK3566
| 资源 | 参考配置 | 控制器节点 | PHY节点 |
|---|---|---|---|
| SATA1 | rk3568.dtsi | sata1 | combphy1 usq _ |
| SATA2 | rk3568.dtsi | sata2 | combphy2 psq _ |
RK3568
| 资源 | 参考配置 | 控制器节点 | PHY节点 |
|---|---|---|---|
| SATA0 | rk3568.dtsi | sata0 | combphy0 us _ |
| SATA1 | rk3568.dtsi | sata1 | combphy1 usq _ |
| SATA2 | rk3568.dtsi | sata2 | combphy2 psq _ |
RK3588
| 资源 | 参考配置 | 控制器节点 | PHY节点 |
|---|---|---|---|
| SATA0 | rk3588s.dtsi | sata0 | combphy0 ps _ |
| SATA1 | rk3588.dtsi | sata1 | combphy1 ps _ |
| SATA2 | rk3588s.dtsi | sata2 | combphy2 psu _ |
RK3588s
| 资源 | 参考配置 | 控制器节点 | PHY节点 |
|---|---|---|---|
| SATA0 | rk3588s.dtsi | sata0 | combphy0 ps _ |
| SATA2 | rk3588s.dtsi | sata2 | combphy2 psu _ |
1. compatible = "rockchip,rk-ahci", "snps,dwc-ahci";
必须配置项:默认配置,对应驱动:drivers/ata/ahci_platform.c。
2. phy-names = "sata-phy“;
必须配置项:不可以修改,AHCI驱动会根据"sata-phy“名字找到对应combphy节点。
3. status = <okay>;
必须配置项:此配置需要在 SATA控制器节点和对应的 phy 节点同时使能。
4. assigned-clock-rates = <100000000>;
必须配置项:可以配置的参考时钟频率值有:24000000、25000000和100000000,推荐配置100000000。
5. pinctrl-0 = <&sata_pm_reset>;
sata_pm_reset: sata-pm-reset {
rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_output_high>;
&combphy1_usq {
pinctrl-names = "default";
pinctrl-0 = <&sata_pm_reset>;
可选配置项:外接PM芯片扩展SATA口时,可能需要一个GPIO来复位PM芯片,具体可以参考“rk3568- nvr-demo-v10.dtsi”里面设置。
6. pinctrl-0 = <&sata2_pins>;
&sata0 {
pinctrl-names = "default";
pinctrl-0 = <&sata0_pins>;
&sata1 {
pinctrl-names = "default";
pinctrl-0 = <&sata1_pins>;
&sata2 {
pinctrl-names = "default";
pinctrl-0 = <&sata2_pins>;
可选配置项:在对应的sata控制器节点增加pinctrl配置来启用SATA ACT LED功能。
3. menuconfig 配置
需要确保如下配置打开,方可正确的使用 SATA相关功能。
CONFIG_ATA=y
CONFIG_SATA_AHCI=y
CONFIG_SATA_AHCI_PLATFORM=y
CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=y
4. 常见问题
Q1: 是否支持通过SATA接口给PM芯片下载固件?
A1: 目前验证过JMB575,没法下载固件。需要外接一个SPI NOR用于存放JMB575最新固件。
Q2: SATA性能怎么测试?
A2: 参考文档 RK-KF-YF-138 《Rockchip_RK3568_Reference_SATA_Performance_CN》。
Q3: 默认SDK代码认不到SATA设备,什么原因?
A3: 软件情况1:第一版SDK代码单独更新uboot后,会出现这个问题,需要更新一下kernel下phy驱动。
commit b3f78165e536d35b2337063093bb33a018ff518d
Author: Shawn Lin <shawn.lin@rock-chips.com>
Date: Wed Dec 23 16:17:31 2020 +0800
phy: rockchip: naneng-combphy: Reset phy if not being used
Change-Id: Ia62481ebf5aa5684c359fd00a3933bb02e2caaff
Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
软件情况2: SATA和PCIE只能二选一,DTS里面需要把PCIE配置为disabled
硬件情况: SATA和PCIE只能二选一,如果有做兼容布板会影响信号,把PCIE走线部分的分支割掉。
Q4: 如何限制SATA速度到1.5G或者3G?
A4:限制到1.5G补丁:
diff --git a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
index 08445c1890eb..3df0e0e05ab4 100644
--- a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
+++ b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
@@ -604,7 +604,7 @@ static const struct rockchip_combphy_grfcfg
rk3568_combphy_grfcfgs = {
.con2_for_sata = { 0x0008, 15, 0, 0x00, 0x80c3 },
.con3_for_sata = { 0x000c, 15, 0, 0x00, 0x4407 },
/* pipe-grf */
- .pipe_con0_for_sata = { 0x0000, 15, 0, 0x00, 0x2220 },
+ .pipe_con0_for_sata = { 0x0000, 15, 0, 0x00, 0x0000 },
.pipe_sgmii_mac_sel = { 0x0040, 1, 1, 0x00, 0x01 },
.pipe_xpcs_phy_ready = { 0x0040, 2, 2, 0x00, 0x01 },
.u3otg0_port_en = { 0x0104, 15, 0, 0x0181, 0x1100 },
限制到3G补丁:
diff --git a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
index 08445c1890eb..3df0e0e05ab4 100644
--- a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
+++ b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
@@ -604,7 +604,7 @@ static const struct rockchip_combphy_grfcfg
rk3568_combphy_grfcfgs = {
.con2_for_sata = { 0x0008, 15, 0, 0x00, 0x80c3 },
.con3_for_sata = { 0x000c, 15, 0, 0x00, 0x4407 },
/* pipe-grf */
- .pipe_con0_for_sata = { 0x0000, 15, 0, 0x00, 0x2220 },
+ .pipe_con0_for_sata = { 0x0000, 15, 0, 0x00, 0x1110 },
.pipe_sgmii_mac_sel = { 0x0040, 1, 1, 0x00, 0x01 },
.pipe_xpcs_phy_ready = { 0x0040, 2, 2, 0x00, 0x01 },
.u3otg0_port_en = { 0x0104, 15, 0, 0x0181, 0x1100 },
**Q5: RK356X怎么启用FBS功能?
A5: 更新下面补丁,然后dtsi修改sata的节点 compatible = "rockchip,rk-ahci", "snps,dwc-
ahci";
diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
index 3aab2e3d57f3..1825b33cc274 100644
--- a/drivers/ata/ahci_platform.c
+++ b/drivers/ata/ahci_platform.c
@@ -62,6 +62,9 @@ static int ahci_probe(struct platform_device *pdev)
if (of_device_is_compatible(dev->of_node, "hisilicon,hisi-ahci"))
hpriv->flags |= AHCI_HFLAG_NO_FBS | AHCI_HFLAG_NO_NCQ;
+ if (of_device_is_compatible(dev->of_node, "rockchip,rk-ahci"))
+ hpriv->flags |= AHCI_HFLAG_YES_FBS;
+
port = acpi_device_get_match_data(dev);
if (!port)
port = &ahci_port_info;
@@ -88,6 +91,7 @@ static const struct of_device_id ahci_of_match[] = {
{ .compatible = "snps,dwc-ahci", },
{ .compatible = "hisilicon,hisi-ahci", },
{ .compatible = "cavium,octeon-7130-ahci", },
+ { .compatible = "rockchip,rk-ahci", },
{},