PCI: rockchip: 5.0 GT/s speed discouraged by Rockchip
v5 cover PCI: rockchip: 5.0 GT/s speed discouraged by Rockchip
Dragan Simic already had warned me of potential issues with 5.0 GT/s speed operation in Rockchip PCIe. However, in recent interactions with Shawn Lin from Rockchip it came to my attention there's grave danger in the unknown errata regarding 5.0 GT/s operational speed of their PCIe core.
Drop all code related to 5.0 GT/s operational speed from this driver.
Endpoint Mode driver was not tested.
---
Changes in v5:
- Changed commit order to not break builds and adjusted copy pasted
commit message. (thanks Charalampos!)
- Reintroduced behavior to force 2.5 GT/s in case there's something
non-default in the DT. (thanks Dragan!)
- Link to v4: https://lore.kernel.org/linux-rockchip/[email protected]/T/
Changes in v4:
- Incorporate suggestion by Bjorn and refined by Dragan to drop the
"catastrophic" code
- Link to v3: https://lore.kernel.org/linux-rockchip/[email protected]/T/
Changes in v3:
- Clarify warning message even though Rockchip won't disclose details
- Drop DT changes as they were applied as subset by Heiko
- Link to v2: https://lore.kernel.org/all/[email protected]/T/
Changes in v2:
- hard limit to 2.5 GT/s, not just warn
- add Reported-by: and Reviewed-by: Dragan Simic
- remove redundant declaration of max-link-speed from helios64 dts
- fix Link: of helios64 patch
- simplify RC mode comment
- Link to v1: https://lore.kernel.org/all/aRhR79u5BPtRRFw3@geday/T/
---
Geraldo Nascimento (4):
PCI: rockchip-ep: do not attempt 5.0 GT/s retraining
PCI: rockchip-host: do not attempt 5.0 GT/s retraining
PCI: rockchip: drive at 2.5 GT/s, error other speeds
PCI: rockchip: drop 5.0 GT/s defines
drivers/pci/controller/pcie-rockchip-ep.c | 13 ------------- drivers/pci/controller/pcie-rockchip-host.c | 20 -------------------- drivers/pci/controller/pcie-rockchip.c | 15 +++++++++------ drivers/pci/controller/pcie-rockchip.h | 3 --- 4 files changed, 9 insertions(+), 42 deletions(-)
Signature · 1 line
2.52.0
PATCH v5 1/4 PCI: rockchip-ep: do not attempt 5.0 GT/s retraining
Drop the 5.0 GT/s Link Speed retraining code block from Rockchip PCIe EP driver. The reason is that Shawn Lin from Rockchip has reiterated that there may be danger of "catastrophic failure" in using their PCIe with 5.0 GT/s speeds.
While Rockchip has done so informally without issuing a proper errata, and the particulars are thus unknown, this may cause data loss or worse.
This change is corroborated by RK3399 official datasheet [1], which states maximum link speed for this platform is 2.5 GT/s.
[1] https://opensource.rock-chips.com/images/d/d7/Rockchip_RK3399_Datasheet_V2.1-20200323.pdf
--- drivers/pci/controller/pcie-rockchip-ep.c | 13 ------------- 1 file changed, 13 deletions(-)
drivers/pci/controller/pcie-rockchip-ep.c +0 -13
@@ -553,19 +553,6 @@ static void rockchip_pcie_ep_link_training(struct work_struct *work)if (ret) goto again; -/* -* Check the current speed: if gen2 speed was requested and we are not -* at gen2 speed yet, retrain again for gen2. -*/ - val =rockchip_pcie_read (rockchip,PCIE_CORE_CTRL ); -if (!PCIE_LINK_IS_GEN2 (val) && rockchip->link_gen ==2 ) { -/* Enable retrain for gen2 */ -rockchip_pcie_ep_retrain_link (rockchip); -readl_poll_timeout (rockchip->apb_base +PCIE_CORE_CTRL , - val,PCIE_LINK_IS_GEN2 (val),50 , -LINK_TRAIN_TIMEOUT ); - } -/* Check again that the link is up */ if (!rockchip_pcie_ep_link_up (rockchip)) goto again;
Signature · 1 line
2.52.0
PATCH v5 2/4 PCI: rockchip-host: do not attempt 5.0 GT/s retraining
In reply to Geraldo NascimentoDrop the 5.0 GT/s Link Speed retraining from Rockchip PCIe Root Complex Mode Operation, so called host driver.
The reason is that Shawn Lin from Rockchip has reiterated that there may be danger of "catastrophic failure" in using their PCIe with 5.0GT/s speeds.
While Rockchip has done so informally without issuing a proper errata, and the particulars are thus unknown, this may cause data loss or worse.
This change is corroborated by RK3399 official datasheet [1], which states maximum link speed for this platform is 2.5 GT/s.
[1] https://opensource.rock-chips.com/images/d/d7/Rockchip_RK3399_Datasheet_V2.1-20200323.pdf
--- drivers/pci/controller/pcie-rockchip-host.c | 20 -------------------- 1 file changed, 20 deletions(-)
drivers/pci/controller/pcie-rockchip-host.c +0 -20
@@ -328,26 +328,6 @@ static int rockchip_pcie_host_init_port(struct rockchip_pcie *rockchip) goto err_power_off_phy; } -if (rockchip->link_gen ==2 ) { -/* -* Enable retrain for gen2. This should be configured only after -* gen1 finished. -*/ - status =rockchip_pcie_read (rockchip,PCIE_RC_CONFIG_CR +PCI_EXP_LNKCTL2 ); - status &= ~PCI_EXP_LNKCTL2_TLS ; - status |=PCI_EXP_LNKCTL2_TLS_5_0GT ; -rockchip_pcie_write (rockchip, status,PCIE_RC_CONFIG_CR +PCI_EXP_LNKCTL2 ); - status =rockchip_pcie_read (rockchip,PCIE_RC_CONFIG_CR +PCI_EXP_LNKCTL ); - status |=PCI_EXP_LNKCTL_RL ; -rockchip_pcie_write (rockchip, status,PCIE_RC_CONFIG_CR +PCI_EXP_LNKCTL ); - - err =readl_poll_timeout (rockchip->apb_base +PCIE_CORE_CTRL , - status,PCIE_LINK_IS_GEN2 (status),20 , -500 *USEC_PER_MSEC ); -if (err) -dev_dbg (dev,"PCIe link training gen2 timeout, fall back to gen1!\n" ); - } -/* Check the final link width from negotiated lane counter from MGMT */ status =rockchip_pcie_read (rockchip,PCIE_CORE_CTRL ); status = 0x1 << ((status & PCIE_CORE_PL_CONF_LANE_MASK) >>
Signature · 1 line
2.52.0
PATCH v5 3/4 PCI: rockchip: drive at 2.5 GT/s, error other speeds
In reply to Geraldo NascimentoConfigure the core to be driven at 2.5 GT/s Link Speed and ignore any other speed with a warning. The reason is that Shawn Lin from Rockchip has reiterated that there may be danger of "catastrophic failure" in using their PCIe with 5.0 GT/s speeds.
While Rockchip has done so informally without issuing a proper errata, and the particulars are thus unknown, this may cause data loss or worse.
This change is corroborated by RK3399 official datasheet [1], which states maximum link speed for this platform is 2.5 GT/s.
[1] https://opensource.rock-chips.com/images/d/d7/Rockchip_RK3399_Datasheet_V2.1-20200323.pdf
--- drivers/pci/controller/pcie-rockchip.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
drivers/pci/controller/pcie-rockchip.c +9 -6
@@ -66,8 +66,10 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) } rockchip->link_gen =of_pci_get_max_link_speed (node); -if (rockchip->link_gen <0 || rockchip->link_gen >2 ) - rockchip->link_gen =2 ; +if (rockchip->link_gen <0 || rockchip->link_gen >=2 ) { + rockchip->link_gen =1 ; +dev_warn (dev,"invalid max-link-speed, fix your DT\n" ); + }for (i =0 ; i <ROCKCHIP_NUM_PM_RSTS ; i++) rockchip->pm_rsts[i].id = rockchip_pci_pm_rsts[i];
@@ -147,12 +149,13 @@ int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) goto err_exit_phy; } -if (rockchip->link_gen ==2 ) -rockchip_pcie_write (rockchip,PCIE_CLIENT_GEN_SEL_2 , -PCIE_CLIENT_CONFIG ); -else +if (rockchip->link_gen ==2 ) { +/* 5.0 GT/s may cause catastrophic failure for this core */ +dev_warn (dev,"5.0 GT/s may cause data loss or worse\n" ); + }else {rockchip_pcie_write (rockchip,PCIE_CLIENT_GEN_SEL_1 ,PCIE_CLIENT_CONFIG ); + } regs =PCIE_CLIENT_ARI_ENABLE |PCIE_CLIENT_CONF_LANE_NUM (rockchip->lanes);
Signature · 1 line
2.52.0
Re: [PATCH v5 3/4] PCI: rockchip: drive at 2.5 GT/s, error other speeds
Hello Geraldo,
Quoted 29 lines · Geraldo Nascimento
Configure the core to be driven at 2.5 GT/s Link Speed and ignore any other speed with a warning. The reason is that Shawn Lin from Rockchip has reiterated that there may be danger of "catastrophic failure" in using their PCIe with 5.0 GT/s speeds.
While Rockchip has done so informally without issuing a proper errata, and the particulars are thus unknown, this may cause data loss or worse.
This change is corroborated by RK3399 official datasheet [1], which states maximum link speed for this platform is 2.5 GT/s.
[1] https://opensource.rock-chips.com/images/d/d7/Rockchip_RK3399_Datasheet_V2.1-20200323.pdf
Fixes 956cd99b35a8 ("PCI: rockchip: Separate common code from RC driver")Reported-by Dragan Simic <[email protected]>Reported-by Shawn Lin <[email protected]>Signed-off-by Geraldo Nascimento <[email protected]>--- drivers/pci/controller/pcie-rockchip.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)drivers/pci/controller/pcie-rockchip.c +0
-0
drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) · line 72
Quoted 9 lines
drivers/pci/controller/pcie-rockchip.c +4
-2@@ -66,8 +66,10 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) } rockchip->link_gen =of_pci_get_max_link_speed (node); -if (rockchip->link_gen <0 || rockchip->link_gen >2 ) - rockchip->link_gen =2 ; +if (rockchip->link_gen <0 || rockchip->link_gen >=2 ) { + rockchip->link_gen =1 ; +dev_warn (dev,"invalid max-link-speed, fix your DT\n" ); + }
I'd suggest using a bit more formal message here, like the one below, which would also avoid addressing the user directly:
"Invalid max-link-speed found, limited to Gen1 to avoid data corruption"
Quoted 7 lines
drivers/pci/controller/pcie-rockchip.c +0
-1for (i =0 ; i <ROCKCHIP_NUM_PM_RSTS ; i++) rockchip->pm_rsts[i].id = rockchip_pci_pm_rsts[i];@@ -147,12 +149,13 @@ int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) goto err_exit_phy; } -if (rockchip->link_gen ==2 )
drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) · line 158
Quoted 10 lines
drivers/pci/controller/pcie-rockchip.c +5
-3-rockchip_pcie_write (rockchip,PCIE_CLIENT_GEN_SEL_2 , -PCIE_CLIENT_CONFIG ); - else +if (rockchip->link_gen ==2 ) { +/* 5.0 GT/s may cause catastrophic failure for this core */ +dev_warn (dev,"5.0 GT/s may cause data loss or worse\n" ); + }else {rockchip_pcie_write (rockchip,PCIE_CLIENT_GEN_SEL_1 ,PCIE_CLIENT_CONFIG ); + }
I don't think we need to emit a warning here, because, as we've already established through earlier discussions, the rockchip_pcie_init_port() function should never receive an invalid speed value.
drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) · line 161
Quoted 2 lines
drivers/pci/controller/pcie-rockchip.c +0
-0regs =PCIE_CLIENT_ARI_ENABLE |PCIE_CLIENT_CONF_LANE_NUM (rockchip->lanes);
It would make most sense to squash all three patches in this series into a single patch, because they all form a single logical unit, which introduces changes that are just going to be harder to track down later if it's all scattered into multiple separate patches.
The only possible issue with the squashing comes from the inability to have different patch subject prefixes for different driver changes, but I think that's actually not an issue. The long-term benefits of having everything as a single patch outweighs the benefits of having different patch subjects with separate patches.
Re: [PATCH v5 3/4] PCI: rockchip: drive at 2.5 GT/s, error other speeds
Quoted 1 line · Dragan Simic
Hello Geraldo,
Hi Dragan,
Quoted 44 lines · Geraldo Nascimento
Quoted 29 lines
Configure the core to be driven at 2.5 GT/s Link Speed and ignore any other speed with a warning. The reason is that Shawn Lin from Rockchip has reiterated that there may be danger of "catastrophic failure" in using their PCIe with 5.0 GT/s speeds.
While Rockchip has done so informally without issuing a proper errata, and the particulars are thus unknown, this may cause data loss or worse.
This change is corroborated by RK3399 official datasheet [1], which states maximum link speed for this platform is 2.5 GT/s.
[1] https://opensource.rock-chips.com/images/d/d7/Rockchip_RK3399_Datasheet_V2.1-20200323.pdf
Fixes 956cd99b35a8 ("PCI: rockchip: Separate common code from RC driver")Reported-by Dragan Simic <[email protected]>Reported-by Shawn Lin <[email protected]>Signed-off-by Geraldo Nascimento <[email protected]>--- drivers/pci/controller/pcie-rockchip.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)drivers/pci/controller/pcie-rockchip.c +0
-0drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) · line 72
Quoted 9 lines
drivers/pci/controller/pcie-rockchip.c +4
-2@@ -66,8 +66,10 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) } rockchip->link_gen =of_pci_get_max_link_speed (node); -if (rockchip->link_gen <0 || rockchip->link_gen >2 ) - rockchip->link_gen =2 ; +if (rockchip->link_gen <0 || rockchip->link_gen >=2 ) { + rockchip->link_gen =1 ; +dev_warn (dev,"invalid max-link-speed, fix your DT\n" ); + }I'd suggest using a bit more formal message here, like the one below, which would also avoid addressing the user directly:
Quoted 1 line
"Invalid max-link-speed found, limited to Gen1 to avoid data corruption"
We really should spare on characters here, but I see your point and will try to cook up a better way.
Quoted 7 lines
Quoted 7 lines
drivers/pci/controller/pcie-rockchip.c +0
-0for (i =0 ; i <ROCKCHIP_NUM_PM_RSTS ; i++) rockchip->pm_rsts[i].id = rockchip_pci_pm_rsts[i];@@ -147,12 +149,13 @@ int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) goto err_exit_phy; }
Quoted 15 lines
drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) · line 158
Quoted 11 lines
drivers/pci/controller/pcie-rockchip.c +5
-4-if (rockchip->link_gen ==2 ) -rockchip_pcie_write (rockchip,PCIE_CLIENT_GEN_SEL_2 , -PCIE_CLIENT_CONFIG ); -else +if (rockchip->link_gen ==2 ) { +/* 5.0 GT/s may cause catastrophic failure for this core */ +dev_warn (dev,"5.0 GT/s may cause data loss or worse\n" ); + }else {rockchip_pcie_write (rockchip,PCIE_CLIENT_GEN_SEL_1 ,PCIE_CLIENT_CONFIG ); + }I don't think we need to emit a warning here, because, as we've already established through earlier discussions, the
rockchip_pcie_init_port()function should never receive an invalid speed value.
Just as a lame excuse, those messages were everywhere in the mid of my development, this is one that escaped deletion, will drop.
Quoted 8 lines
drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) · line 161
Quoted 3 lines
drivers/pci/controller/pcie-rockchip.c +0
-0regs =PCIE_CLIENT_ARI_ENABLE |PCIE_CLIENT_CONF_LANE_NUM (rockchip->lanes);It would make most sense to squash all three patches in this series into a single patch, because they all form a single logical unit, which introduces changes that are just going to be harder to track down later if it's all scattered into multiple separate patches.
I agree, having all drops in one big patch is the better tactic here.
Quoted 7 lines
The only possible issue with the squashing comes from the inability to have different patch subject prefixes for different driver changes, but I think that's actually not an issue. The long-term benefits of having everything as a single patch outweighs the benefits of having different patch subjects with separate patches.
Sure, will do so for v6.
Many thanks,
Geraldo Nascimento
Re: [PATCH v5 3/4] PCI: rockchip: drive at 2.5 GT/s, error other speeds
Hello Geraldo,
Quoted 44 lines · Geraldo Nascimento
Quoted 43 lines · Dragan Simic
Quoted 29 lines · Geraldo Nascimento
Configure the core to be driven at 2.5 GT/s Link Speed and ignore any other speed with a warning. The reason is that Shawn Lin from Rockchip has reiterated that there may be danger of "catastrophic failure" in using their PCIe with 5.0 GT/s speeds.
While Rockchip has done so informally without issuing a proper errata, and the particulars are thus unknown, this may cause data loss or worse.
This change is corroborated by RK3399 official datasheet [1], which states maximum link speed for this platform is 2.5 GT/s.
[1] https://opensource.rock-chips.com/images/d/d7/Rockchip_RK3399_Datasheet_V2.1-20200323.pdf
Fixes 956cd99b35a8 ("PCI: rockchip: Separate common code from RC driver")Reported-by Dragan Simic <[email protected]>Reported-by Shawn Lin <[email protected]>Signed-off-by Geraldo Nascimento <[email protected]>--- drivers/pci/controller/pcie-rockchip.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)drivers/pci/controller/pcie-rockchip.c +0
-0drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) · line 72
Quoted 9 lines
drivers/pci/controller/pcie-rockchip.c +4
-2@@ -66,8 +66,10 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) } rockchip->link_gen =of_pci_get_max_link_speed (node); -if (rockchip->link_gen <0 || rockchip->link_gen >2 ) - rockchip->link_gen =2 ; +if (rockchip->link_gen <0 || rockchip->link_gen >=2 ) { + rockchip->link_gen =1 ; +dev_warn (dev,"invalid max-link-speed, fix your DT\n" ); + }I'd suggest using a bit more formal message here, like the one below, which would also avoid addressing the user directly:
Quoted 4 lines
Quoted 1 line
"Invalid max-link-speed found, limited to Gen1 to avoid data corruption"
We really should spare on characters here, but I see your point and will try to cook up a better way.
Makes sense, so perhaps just "Limited to Gen1 to avoid data corruption" should be fine for the purpose, because anyone attempting to get rid of that warning should search for what emitted it in the kernel source, which would provide them with further information.
Quoted 22 lines
Quoted 6 lines
Quoted 6 lines
drivers/pci/controller/pcie-rockchip.c +0
-0for (i =0 ; i <ROCKCHIP_NUM_PM_RSTS ; i++) rockchip->pm_rsts[i].id = rockchip_pci_pm_rsts[i];@@ -147,12 +149,13 @@ int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) goto err_exit_phy; }Quoted 15 lines
drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) · line 158
Quoted 11 lines
drivers/pci/controller/pcie-rockchip.c +5
-4-if (rockchip->link_gen ==2 ) -rockchip_pcie_write (rockchip,PCIE_CLIENT_GEN_SEL_2 , -PCIE_CLIENT_CONFIG ); -else +if (rockchip->link_gen ==2 ) { +/* 5.0 GT/s may cause catastrophic failure for this core */ +dev_warn (dev,"5.0 GT/s may cause data loss or worse\n" ); + }else {rockchip_pcie_write (rockchip,PCIE_CLIENT_GEN_SEL_1 ,PCIE_CLIENT_CONFIG ); + }I don't think we need to emit a warning here, because, as we've already established through earlier discussions, the
rockchip_pcie_init_port()function should never receive an invalid speed value.
Quoted 2 lines
Just as a lame excuse, those messages were everywhere in the mid of my development, this is one that escaped deletion, will drop.
Thanks.
Quoted 10 lines
Quoted 7 lines
drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) · line 161
Quoted 2 lines
drivers/pci/controller/pcie-rockchip.c +0
-0regs =PCIE_CLIENT_ARI_ENABLE |PCIE_CLIENT_CONF_LANE_NUM (rockchip->lanes);It would make most sense to squash all three patches in this series into a single patch, because they all form a single logical unit, which introduces changes that are just going to be harder to track down later if it's all scattered into multiple separate patches.
I agree, having all drops in one big patch is the better tactic here.
Quoted 7 lines
Quoted 5 lines
The only possible issue with the squashing comes from the inability to have different patch subject prefixes for different driver changes, but I think that's actually not an issue. The long-term benefits of having everything as a single patch outweighs the benefits of having different patch subjects with separate patches.
Sure, will do so for v6.
Thanks, but as Manivannan pointed out, having the changes split across a couple of patches actually comes with benefits.
Manivannan Sadhasivam
maintainerRe: [PATCH v5 3/4] PCI: rockchip: drive at 2.5 GT/s, error other speeds
In reply to Dragan SimicQuoted 77 lines · Dragan Simic
Hello Geraldo,
Quoted 29 lines · Geraldo Nascimento
Configure the core to be driven at 2.5 GT/s Link Speed and ignore any other speed with a warning. The reason is that Shawn Lin from Rockchip has reiterated that there may be danger of "catastrophic failure" in using their PCIe with 5.0 GT/s speeds.
While Rockchip has done so informally without issuing a proper errata, and the particulars are thus unknown, this may cause data loss or worse.
This change is corroborated by RK3399 official datasheet [1], which states maximum link speed for this platform is 2.5 GT/s.
[1] https://opensource.rock-chips.com/images/d/d7/Rockchip_RK3399_Datasheet_V2.1-20200323.pdf
Fixes 956cd99b35a8 ("PCI: rockchip: Separate common code from RC driver")Reported-by Dragan Simic <[email protected]>Reported-by Shawn Lin <[email protected]>Signed-off-by Geraldo Nascimento <[email protected]>--- drivers/pci/controller/pcie-rockchip.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)drivers/pci/controller/pcie-rockchip.c +0
-0drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) · line 72
Quoted 9 lines
drivers/pci/controller/pcie-rockchip.c +4
-2@@ -66,8 +66,10 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) } rockchip->link_gen =of_pci_get_max_link_speed (node); -if (rockchip->link_gen <0 || rockchip->link_gen >2 ) - rockchip->link_gen =2 ; +if (rockchip->link_gen <0 || rockchip->link_gen >=2 ) { + rockchip->link_gen =1 ; +dev_warn (dev,"invalid max-link-speed, fix your DT\n" ); + }I'd suggest using a bit more formal message here, like the one below, which would also avoid addressing the user directly:
"Invalid max-link-speed found, limited to Gen1 to avoid data corruption"
Quoted 7 lines
drivers/pci/controller/pcie-rockchip.c +0
-1for (i =0 ; i <ROCKCHIP_NUM_PM_RSTS ; i++) rockchip->pm_rsts[i].id = rockchip_pci_pm_rsts[i];@@ -147,12 +149,13 @@ int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) goto err_exit_phy; } -if (rockchip->link_gen ==2 )drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) · line 158
Quoted 10 lines
drivers/pci/controller/pcie-rockchip.c +5
-3-rockchip_pcie_write (rockchip,PCIE_CLIENT_GEN_SEL_2 , -PCIE_CLIENT_CONFIG ); - else +if (rockchip->link_gen ==2 ) { +/* 5.0 GT/s may cause catastrophic failure for this core */ +dev_warn (dev,"5.0 GT/s may cause data loss or worse\n" ); + }else {rockchip_pcie_write (rockchip,PCIE_CLIENT_GEN_SEL_1 ,PCIE_CLIENT_CONFIG ); + }I don't think we need to emit a warning here, because, as we've already established through earlier discussions, the
rockchip_pcie_init_port()function should never receive an invalid speed value.drivers/pci/controller/pcie-rockchip.c int rockchip_pcie_init_port(struct rockchip_pcie *rockchip) · line 161
Quoted 2 lines
drivers/pci/controller/pcie-rockchip.c +0
-0regs =PCIE_CLIENT_ARI_ENABLE |PCIE_CLIENT_CONF_LANE_NUM (rockchip->lanes);It would make most sense to squash all three patches in this series into a single patch, because they all form a single logical unit, which introduces changes that are just going to be harder to track down later if it's all scattered into multiple separate patches.
Quoted 6 lines
The only possible issue with the squashing comes from the inability to have different patch subject prefixes for different driver changes, but I think that's actually not an issue. The long-term benefits of having everything as a single patch outweighs the benefits of having different patch subjects with separate patches.
Patches 3&4 can be squashed together, but the rest should be in separate patches as they target different drivers. If we were to revert any of these in the future, it becomes easy.
- Mani
Signature · 1 line
மணிவண்ணன் சதாசிவம்
Re: [PATCH v5 3/4] PCI: rockchip: drive at 2.5 GT/s, error other speeds
Quoted 3 lines · Manivannan Sadhasivam
Patches 3&4 can be squashed together, but the rest should be in separate patches as they target different drivers. If we were to revert any of these in the future, it becomes easy.
Ah, OK, Mani, thanks for the clarification.
Geraldo Nascimento
Quoted 5 lines
- Mani
Signature · 1 line
மணிவண்ணன் சதாசிவம்
PATCH v5 4/4 PCI: rockchip: drop 5.0 GT/s defines
In reply to Geraldo NascimentoDrop the 5.0 GT/s Link Speed defines from Rockchip PCIe header. The reason is that Shawn Lin from Rockchip has reiterated that there may be danger of "catastrophic failure" in using their PCIe with 5.0 GT/s speeds.
While Rockchip has done so informally without issuing a proper errata, and the particulars are thus unknown, this may cause data loss or worse.
This change is corroborated by RK3399 official datasheet [1], which states maximum link speed for this platform is 2.5 GT/s.
[1] https://opensource.rock-chips.com/images/d/d7/Rockchip_RK3399_Datasheet_V2.1-20200323.pdf
--- drivers/pci/controller/pcie-rockchip.h | 3 --- 1 file changed, 3 deletions(-)
drivers/pci/controller/pcie-rockchip.h +0 -3
@@ -42,7 +42,6 @@#define PCIE_CLIENT_MODE_RC HWORD_SET_BIT(0x0040)#define PCIE_CLIENT_MODE_EP HWORD_CLR_BIT(0x0040)#define PCIE_CLIENT_GEN_SEL_1 HWORD_CLR_BIT(0x0080) -#define PCIE_CLIENT_GEN_SEL_2 HWORD_SET_BIT(0x0080)#define PCIE_CLIENT_LEGACY_INT_CTRL (PCIE_CLIENT_BASE + 0x0c)#define PCIE_CLIENT_INT_IN_ASSERT HWORD_SET_BIT(0x0002)#define PCIE_CLIENT_INT_IN_DEASSERT HWORD_CLR_BIT(0x0002)
@@ -197,8 +196,6 @@ (((x) & PCIE_CORE_PL_CONF_LS_MASK) == PCIE_CORE_PL_CONF_LS_READY)#define PCIE_LINK_UP (x) \ (((x) & PCIE_CLIENT_LINK_STATUS_MASK) == PCIE_CLIENT_LINK_STATUS_UP) -#define PCIE_LINK_IS_GEN2 (x) \ - (((x) & PCIE_CORE_PL_CONF_SPEED_MASK) == PCIE_CORE_PL_CONF_SPEED_5G)#define RC_REGION_0_ADDR_TRANS_H 0x00000000#define RC_REGION_0_ADDR_TRANS_L 0x00000000
Signature · 1 line
2.52.0