imx ahci DT updates + cubox-i eSATA support
Subsystems (3)
cover imx ahci DT updates + cubox-i eSATA support
The following series adds several DT properties to the iMX ahci driver, which are necessary to configure the electrical characteristics of the SATA interface.
The required electrical characteristics are board dependent, so the existing solution where the parameters are hard-coded for the first board(s) which came along is completely rediculous, and cause their own set of problems: we have to default to these parameters when no properties are given, and it means we have to use negative properties to turn stuff off rather than positive properties to enable features.
Yes, I know that the required Documentation/devicetree file is missing, I couldn't find the existing file to update for this driver with the new properties. :)
arch/arm/boot/dts/imx6q-cubox-i.dts | 4 + drivers/ata/ahci_imx.c | 188 ++++++++++++++++++++++++++++++++++-- 2 files changed, 184 insertions(+), 8 deletions(-)
Signature · 2 lines
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly improving, and getting towards what was expected from it.
RFC PATCH 1/5 ata: ahci_imx: warn when disabling ahci link
When the AHCI link is disabled, it can't be re-enabled except by resetting the entire SoC. Rather than doing this silently print some kernel messages to inform the user, along with how to avoid this.
--- drivers/ata/ahci_imx.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/ata/ahci_imx.c +4 -0
@@ -160,6 +160,10 @@ static void ahci_imx_error_handler(struct ata_port *ap)writel (reg_val |PORT_PHY_CTL_PDDQ_LOC , mmio +PORT_PHY_CTL );imx_sata_disable (hpriv); imxpriv->no_device = true; + +dev_info (ap->dev,"no device found, disabling link.\n" ); +dev_info (ap->dev,"pass " MODULE_PARAM_PREFIX +".hotplug=1 to enable hotplug\n" ); } static int ahci_imx_softreset(struct ata_link *link, unsigned int *class,
Signature · 1 line
1.8.3.1
RFC PATCH 2/5 ata: ahci_imx: avoid reprobing ahci_imx driver when using DT
In reply to Russell King - ARM LinuxAvoid matching our child platform device, which can happen as we copy the DT node to the child device. This allows the child platform device to be matched against the ahci-imx driver and should this happen, it will cause another platform device to be allocated, resulting in failure.
Ideally, we shouldn't be copying the of_node, but this is unavoidable as prevents ahci_platform() obtaining its resources.
--- drivers/ata/ahci_imx.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/ata/ahci_imx.c +4 -0
@@ -213,6 +213,10 @@ static int imx_ahci_probe(struct platform_device *pdev)unsigned int reg_val;int ret; +/* Prevent our child ahci device coming back to us */ +if (!strcmp (dev_name (&pdev->dev),"ahci" )) +return -ENODEV ; + of_id =of_match_device (imx_ahci_of_match, dev);if (!of_id)return -EINVAL ;
Signature · 1 line
1.8.3.1
RFC PATCH 2/5 ata: ahci_imx: avoid reprobing ahci_imx driver when using DT
Quoted 4 lines · Russell King
Avoid matching our child platform device, which can happen as we copy the DT node to the child device. This allows the child platform device to be matched against the ahci-imx driver and should this happen, it will cause another platform device to be allocated, resulting in failure.
This is not the case anymore, since commit 90870d7 (ahci-imx: Port to library-ised ahci_platform) is merged into v3.15-rc1.
Shawn
Quoted 34 lines
Ideally, we shouldn't be copying the
of_node, but this is unavoidable as preventsahci_platform()obtaining its resources.Signed-off-by Russell King <[email protected]>--- drivers/ata/ahci_imx.c | 4 ++++ 1 file changed, 4 insertions(+)drivers/ata/ahci_imx.c +4
-0@@ -213,6 +213,10 @@ static int imx_ahci_probe(struct platform_device *pdev)unsigned int reg_val;int ret; +/* Prevent our child ahci device coming back to us */ +if (!strcmp (dev_name (&pdev->dev),"ahci" )) +return -ENODEV ; + of_id =of_match_device (imx_ahci_of_match, dev);if (!of_id)return -EINVAL ;Signature · 7 lines
1.8.3.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel at lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
RFC PATCH 2/5 ata: ahci_imx: avoid reprobing ahci_imx driver when using DT
Quoted 8 lines · Shawn Guo
Quoted 4 lines · Russell King
Avoid matching our child platform device, which can happen as we copy the DT node to the child device. This allows the child platform device to be matched against the ahci-imx driver and should this happen, it will cause another platform device to be allocated, resulting in failure.
This is not the case anymore, since commit 90870d7 (ahci-imx: Port to library-ised
ahci_platform) is merged into v3.15-rc1.
Thanks, I've moved this patch.
Signature · 2 lines
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly improving, and getting towards what was expected from it.
RFC PATCH 3/5 ata: ahci_imx: allow hardware parameters to be specified in DT
In reply to Russell King - ARM LinuxVarious SATA phy parameters are board specific, and therefore need to be configured.
--- drivers/ata/ahci_imx.c | 168 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 160 insertions(+), 8 deletions(-)
drivers/ata/ahci_imx.c +160 -8
@@ -46,6 +46,7 @@ struct imx_ahci_priv {struct regmap *gpr;bool no_device;bool first_time; +u32 phy_params; };static int ahci_imx_hotplug;
@@ -90,14 +91,7 @@ static int imx_sata_enable(struct ahci_host_priv *hpriv)IMX6Q_GPR13_SATA_TX_LVL_MASK |IMX6Q_GPR13_SATA_MPLL_CLK_EN |IMX6Q_GPR13_SATA_TX_EDGE_RATE , -IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB | -IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M | -IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F | -IMX6Q_GPR13_SATA_SPD_MODE_3P0G | -IMX6Q_GPR13_SATA_MPLL_SS_EN | -IMX6Q_GPR13_SATA_TX_ATTEN_9_16 | -IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB | - IMX6Q_GPR13_SATA_TX_LVL_1_025_V); + imxpriv->phy_params);regmap_update_bits (imxpriv->gpr,IOMUXC_GPR13 ,IMX6Q_GPR13_SATA_MPLL_CLK_EN ,IMX6Q_GPR13_SATA_MPLL_CLK_EN );
@@ -204,6 +198,152 @@ static const struct of_device_id imx_ahci_of_match[] = { };MODULE_DEVICE_TABLE (of, imx_ahci_of_match); +struct reg_value { +u32 of_value; +u32 reg_value; +}; + +struct reg_property { +const char *name; +const struct reg_value *values; +size_t num_values; +u32 def_value; +}; + +static const struct reg_value gpr13_tx_level[] = { + {937 ,IMX6Q_GPR13_SATA_TX_LVL_0_937_V }, + {947 ,IMX6Q_GPR13_SATA_TX_LVL_0_947_V }, + {957 ,IMX6Q_GPR13_SATA_TX_LVL_0_957_V }, + {966 ,IMX6Q_GPR13_SATA_TX_LVL_0_966_V }, + {976 ,IMX6Q_GPR13_SATA_TX_LVL_0_976_V }, + {986 ,IMX6Q_GPR13_SATA_TX_LVL_0_986_V }, + {996 ,IMX6Q_GPR13_SATA_TX_LVL_0_996_V }, + {1005 ,IMX6Q_GPR13_SATA_TX_LVL_1_005_V }, + {1015 ,IMX6Q_GPR13_SATA_TX_LVL_1_015_V }, + {1025 ,IMX6Q_GPR13_SATA_TX_LVL_1_025_V }, + {1035 ,IMX6Q_GPR13_SATA_TX_LVL_1_035_V }, + {1045 ,IMX6Q_GPR13_SATA_TX_LVL_1_045_V }, + {1054 ,IMX6Q_GPR13_SATA_TX_LVL_1_054_V }, + {1064 ,IMX6Q_GPR13_SATA_TX_LVL_1_064_V }, + {1074 ,IMX6Q_GPR13_SATA_TX_LVL_1_074_V }, + {1084 ,IMX6Q_GPR13_SATA_TX_LVL_1_084_V }, + {1094 ,IMX6Q_GPR13_SATA_TX_LVL_1_094_V }, + {1104 ,IMX6Q_GPR13_SATA_TX_LVL_1_104_V }, + {1113 ,IMX6Q_GPR13_SATA_TX_LVL_1_113_V }, + {1123 ,IMX6Q_GPR13_SATA_TX_LVL_1_123_V }, + {1133 ,IMX6Q_GPR13_SATA_TX_LVL_1_133_V }, + {1143 ,IMX6Q_GPR13_SATA_TX_LVL_1_143_V }, + {1152 ,IMX6Q_GPR13_SATA_TX_LVL_1_152_V }, + {1162 ,IMX6Q_GPR13_SATA_TX_LVL_1_162_V }, + {1172 ,IMX6Q_GPR13_SATA_TX_LVL_1_172_V }, + {1182 ,IMX6Q_GPR13_SATA_TX_LVL_1_182_V }, + {1191 ,IMX6Q_GPR13_SATA_TX_LVL_1_191_V }, + {1201 ,IMX6Q_GPR13_SATA_TX_LVL_1_201_V }, + {1211 ,IMX6Q_GPR13_SATA_TX_LVL_1_211_V }, + {1221 ,IMX6Q_GPR13_SATA_TX_LVL_1_221_V }, + {1230 ,IMX6Q_GPR13_SATA_TX_LVL_1_230_V }, + {1240 ,IMX6Q_GPR13_SATA_TX_LVL_1_240_V } +}; + +static const struct reg_value gpr13_tx_boost[] = { + {0 ,IMX6Q_GPR13_SATA_TX_BOOST_0_00_DB }, + {370 ,IMX6Q_GPR13_SATA_TX_BOOST_0_37_DB }, + {740 ,IMX6Q_GPR13_SATA_TX_BOOST_0_74_DB }, + {111 ,IMX6Q_GPR13_SATA_TX_BOOST_1_11_DB }, + {148 ,IMX6Q_GPR13_SATA_TX_BOOST_1_48_DB }, + {185 ,IMX6Q_GPR13_SATA_TX_BOOST_1_85_DB }, + {222 ,IMX6Q_GPR13_SATA_TX_BOOST_2_22_DB }, + {259 ,IMX6Q_GPR13_SATA_TX_BOOST_2_59_DB }, + {296 ,IMX6Q_GPR13_SATA_TX_BOOST_2_96_DB }, + {333 ,IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB }, + {370 ,IMX6Q_GPR13_SATA_TX_BOOST_3_70_DB }, + {407 ,IMX6Q_GPR13_SATA_TX_BOOST_4_07_DB }, + {444 ,IMX6Q_GPR13_SATA_TX_BOOST_4_44_DB }, + {481 ,IMX6Q_GPR13_SATA_TX_BOOST_4_81_DB }, + {528 ,IMX6Q_GPR13_SATA_TX_BOOST_5_28_DB }, + {575 ,IMX6Q_GPR13_SATA_TX_BOOST_5_75_DB } +}; + +static const struct reg_value gpr13_tx_atten[] = { + {8 ,IMX6Q_GPR13_SATA_TX_ATTEN_8_16 }, + {9 ,IMX6Q_GPR13_SATA_TX_ATTEN_9_16 }, + {10 ,IMX6Q_GPR13_SATA_TX_ATTEN_10_16 }, + {12 ,IMX6Q_GPR13_SATA_TX_ATTEN_12_16 }, + {14 ,IMX6Q_GPR13_SATA_TX_ATTEN_14_16 }, + {16 ,IMX6Q_GPR13_SATA_TX_ATTEN_16_16 }, +}; + +static const struct reg_value gpr13_rx_eq[] = { + {500 ,IMX6Q_GPR13_SATA_RX_EQ_VAL_0_5_DB }, + {1000 ,IMX6Q_GPR13_SATA_RX_EQ_VAL_1_0_DB }, + {1500 ,IMX6Q_GPR13_SATA_RX_EQ_VAL_1_5_DB }, + {2000 ,IMX6Q_GPR13_SATA_RX_EQ_VAL_2_0_DB }, + {2500 ,IMX6Q_GPR13_SATA_RX_EQ_VAL_2_5_DB }, + {3000 ,IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB }, + {3500 ,IMX6Q_GPR13_SATA_RX_EQ_VAL_3_5_DB }, + {4000 ,IMX6Q_GPR13_SATA_RX_EQ_VAL_4_0_DB }, +}; + +static const struct reg_property gpr13_props[] = { + { + .name ="fsl,transmit-level-mV" , + .values = gpr13_tx_level, + .num_values =ARRAY_SIZE (gpr13_tx_level), + .def_value =IMX6Q_GPR13_SATA_TX_LVL_1_025_V , + }, { + .name ="fsl,transmit-boost-mdB" , + .values = gpr13_tx_boost, + .num_values =ARRAY_SIZE (gpr13_tx_boost), + .def_value =IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB , + }, { + .name ="fsl,transmit-atten-16ths" , + .values = gpr13_tx_atten, + .num_values =ARRAY_SIZE (gpr13_tx_atten), + .def_value =IMX6Q_GPR13_SATA_TX_ATTEN_9_16 , + }, { + .name ="fsl,receive-eq-mdB" , + .values = gpr13_rx_eq, + .num_values =ARRAY_SIZE (gpr13_rx_eq), + .def_value =IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB , + }, +}; + +static u32 imx_ahci_parse_props (struct device *dev, +const struct reg_property *prop,size_t num) +{ +struct device_node *np = dev->of_node; +u32 reg_value =0 ; +int i, j; + +for (i =0 ; i < num; i++, prop++) { +u32 of_val; + +if (of_property_read_u32 (np, prop->name, &of_val)) { +dev_info (dev,"%s not specified, using %08x\n" , + prop->name, prop->def_value); + reg_value |= prop->def_value; +continue ; + } + +for (j =0 ; j < prop->num_values; j++) { +if (prop->values[j].of_value == of_val) { +dev_info (dev,"%s value %u, using %08x\n" , + prop->name, of_val, prop->values[j].reg_value); + reg_value |= prop->values[j].reg_value; +break ; + } + } + +if (j == prop->num_values) { +dev_err (dev,"DT property %s is not a valid value\n" , + prop->name); + reg_value |= prop->def_value; + } + } + +return reg_value; +} +static int imx_ahci_probe (struct platform_device *pdev) {struct device *dev = &pdev->dev;
@@ -235,6 +375,8 @@ static int imx_ahci_probe(struct platform_device *pdev) }if (imxpriv->type ==AHCI_IMX6Q ) { +u32 reg_value; + imxpriv->gpr =syscon_regmap_lookup_by_compatible ("fsl,imx6q-iomuxc-gpr" );if (IS_ERR (imxpriv->gpr)) {
@@ -242,6 +384,16 @@ static int imx_ahci_probe(struct platform_device *pdev) "failed to find fsl,imx6q-iomux-gpr regmap\n");return PTR_ERR (imxpriv->gpr); } + + reg_value =imx_ahci_parse_props (dev, gpr13_props, +ARRAY_SIZE (gpr13_props)); + + imxpriv->phy_params = +IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M | +IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F | +IMX6Q_GPR13_SATA_SPD_MODE_3P0G | +IMX6Q_GPR13_SATA_MPLL_SS_EN | + reg_value; } hpriv =ahci_platform_get_resources (pdev);
Signature · 1 line
1.8.3.1
RFC PATCH 4/5 ARM: cubox-i: add eSATA DT configuration
In reply to Russell King - ARM Linux--- arch/arm/boot/dts/imx6q-cubox-i.dts | 3 +++ 1 file changed, 3 insertions(+)
arch/arm/boot/dts/imx6q-cubox-i.dts +3 -0
@@ -13,4 +13,7 @@ &sata { status = "okay"; + fsl,transmit-level-mV = <1104>; + fsl,transmit-boost-mdB = <0>; + fsl,transmit-atten-16ths = <9>; };
Signature · 1 line
1.8.3.1
RFC PATCH 5/5 ahci_imx: add disable for spread-spectrum
In reply to Russell King - ARM LinuxSpread-spectrum doesn't work with Cubox-i hardware, so we have to disable this feature. Add a DT property so that platforms can indicate that this feature should not be enabled.
Having it as a negative property keeps existing DT files working.
--- arch/arm/boot/dts/imx6q-cubox-i.dts | 1 + drivers/ata/ahci_imx.c | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-)
arch/arm/boot/dts/imx6q-cubox-i.dts +1 -0
@@ -16,4 +16,5 @@ fsl,transmit-level-mV = <1104>; fsl,transmit-boost-mdB = <0>; fsl,transmit-atten-16ths = <9>; + fsl,no-spread-spectrum; };
drivers/ata/ahci_imx.c +13 -1
@@ -208,6 +208,7 @@ struct reg_property {const struct reg_value *values;size_t num_values;u32 def_value; +u32 set_value; };static const struct reg_value gpr13_tx_level[] = {
@@ -305,6 +306,10 @@ static const struct reg_property gpr13_props[] = { .values = gpr13_rx_eq, .num_values = ARRAY_SIZE(gpr13_rx_eq), .def_value = IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB, + }, { + .name = "fsl,no-spread-spectrum", + .def_value = IMX6Q_GPR13_SATA_MPLL_SS_EN, + .set_value = 0, }, };
@@ -318,6 +323,14 @@ static u32 imx_ahci_parse_props(struct device *dev,for (i =0 ; i < num; i++, prop++) {u32 of_val; +if (prop->num_values ==0 ) { +if (of_property_read_bool (np, prop->name)) + reg_value |= prop->set_value; +else + reg_value |= prop->def_value; +continue ; + } +if (of_property_read_u32 (np, prop->name, &of_val)) {dev_info (dev,"%s not specified, using %08x\n" , prop->name, prop->def_value);
@@ -392,7 +405,6 @@ static int imx_ahci_probe(struct platform_device *pdev)IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M |IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F |IMX6Q_GPR13_SATA_SPD_MODE_3P0G | -IMX6Q_GPR13_SATA_MPLL_SS_EN | reg_value; }
Signature · 1 line
1.8.3.1
RFC PATCH 5/5 ahci_imx: add disable for spread-spectrum
Quoted 3 lines · Russell King
Spread-spectrum doesn't work with Cubox-i hardware, so we have to disable this feature. Add a DT property so that platforms can indicate that this feature should not be enabled.
This is for spread-spectrum tx or rx? Transmit SS is optional to support, but the receiver must support SS. Otherwise random drives won't work which makes for a good user experience. Is this really a board quirk rather than a Si issue?
Rob
Quoted 68 lines
Having it as a negative property keeps existing DT files working.
Signed-off-by Russell King <[email protected]>--- arch/arm/boot/dts/imx6q-cubox-i.dts | 1 + drivers/ata/ahci_imx.c | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-)arch/arm/boot/dts/imx6q-cubox-i.dts +1
-0@@ -16,4 +16,5 @@ fsl,transmit-level-mV = <1104>; fsl,transmit-boost-mdB = <0>; fsl,transmit-atten-16ths = <9>; + fsl,no-spread-spectrum; };drivers/ata/ahci_imx.c +13
-2@@ -208,6 +208,7 @@ struct reg_property {const struct reg_value *values;size_t num_values;u32 def_value; +u32 set_value; };static const struct reg_value gpr13_tx_level[] = {@@ -305,6 +306,10 @@ static const struct reg_property gpr13_props[] = { .values = gpr13_rx_eq, .num_values = ARRAY_SIZE(gpr13_rx_eq), .def_value = IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB, + }, { + .name = "fsl,no-spread-spectrum", + .def_value = IMX6Q_GPR13_SATA_MPLL_SS_EN, + .set_value = 0, }, };@@ -318,6 +323,14 @@ static u32 imx_ahci_parse_props(struct device *dev,for (i =0 ; i < num; i++, prop++) {u32 of_val; +if (prop->num_values ==0 ) { +if (of_property_read_bool (np, prop->name)) + reg_value |= prop->set_value; +else + reg_value |= prop->def_value; +continue ; + } +if (of_property_read_u32 (np, prop->name, &of_val)) {dev_info (dev,"%s not specified, using %08x\n" , prop->name, prop->def_value);@@ -392,7 +405,6 @@ static int imx_ahci_probe(struct platform_device *pdev)IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M |IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F |IMX6Q_GPR13_SATA_SPD_MODE_3P0G | -IMX6Q_GPR13_SATA_MPLL_SS_EN | reg_value; } --1.8.3.1
RFC PATCH 5/5 ahci_imx: add disable for spread-spectrum
Quoted 10 lines · Rob Herring
Quoted 3 lines · Russell King
Spread-spectrum doesn't work with Cubox-i hardware, so we have to disable this feature. Add a DT property so that platforms can indicate that this feature should not be enabled.
This is for spread-spectrum tx or rx? Transmit SS is optional to support, but the receiver must support SS. Otherwise random drives won't work which makes for a good user experience. Is this really a board quirk rather than a Si issue?
No idea. This bit controls clock generation, and one reason given to disable it is if the reference clock being supplied is already spread spectrum. I don't think that applies here. It doesn't say which clock(s) this is applied to - I would guess it's the transmit clock.
All I know is that with SS enabled, the drive is not detected, and SolidRun's original port disables SS. Disabling SS allows the external drive to be detected.
I have no capability to check the eye pattern, so I've no idea if there's a problem with the electrical setup which stops SS from working. All I know is with the parameters I give here (which are those which SolidRun's original port uses) and with SS disabled, it works.
Signature · 2 lines
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly improving, and getting towards what was expected from it.
RFC PATCH 5/5 ahci_imx: add disable for spread-spectrum
Quoted 21 lines · Russell King - ARM Linux
Quoted 10 lines · Rob Herring
Quoted 3 lines · Russell King
Spread-spectrum doesn't work with Cubox-i hardware, so we have to disable this feature. Add a DT property so that platforms can indicate that this feature should not be enabled.
This is for spread-spectrum tx or rx? Transmit SS is optional to support, but the receiver must support SS. Otherwise random drives won't work which makes for a good user experience. Is this really a board quirk rather than a Si issue?
No idea. This bit controls clock generation, and one reason given to disable it is if the reference clock being supplied is already spread spectrum. I don't think that applies here. It doesn't say which clock(s) this is applied to - I would guess it's the transmit clock.
All I know is that with SS enabled, the drive is not detected, and SolidRun's original port disables SS. Disabling SS allows the external drive to be detected.
Quoted 5 lines
I have no capability to check the eye pattern, so I've no idea if there's a problem with the electrical setup which stops SS from working. All I know is with the parameters I give here (which are those which SolidRun's original port uses) and with SS disabled, it works.
I'll correct that - it _is_ detected with SS enabled, but things go awry very quickly with errors, which then result in corrupted IDENTIFY responses, the link dropping back to 1.5Gbps, more errors and corruption and eventually the SATA layer gives up and declares the port dead.
Signature · 2 lines
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly improving, and getting towards what was expected from it.
RFC PATCH 5/5 ahci_imx: add disable for spread-spectrum
Quoted 28 lines · Russell King - ARM Linux
Quoted 21 lines · Russell King - ARM Linux
Quoted 10 lines · Rob Herring
Quoted 3 lines · Russell King
Spread-spectrum doesn't work with Cubox-i hardware, so we have to disable this feature. Add a DT property so that platforms can indicate that this feature should not be enabled.
This is for spread-spectrum tx or rx? Transmit SS is optional to support, but the receiver must support SS. Otherwise random drives won't work which makes for a good user experience. Is this really a board quirk rather than a Si issue?
No idea. This bit controls clock generation, and one reason given to disable it is if the reference clock being supplied is already spread spectrum. I don't think that applies here. It doesn't say which clock(s) this is applied to - I would guess it's the transmit clock.
All I know is that with SS enabled, the drive is not detected, and SolidRun's original port disables SS. Disabling SS allows the external drive to be detected.
Quoted 5 lines
I have no capability to check the eye pattern, so I've no idea if there's a problem with the electrical setup which stops SS from working. All I know is with the parameters I give here (which are those which SolidRun's original port uses) and with SS disabled, it works.
Quoted 4 lines
I'll correct that - it _is_ detected with SS enabled, but things go awry very quickly with errors, which then result in corrupted IDENTIFY responses, the link dropping back to 1.5Gbps, more errors and corruption and eventually the SATA layer gives up and declares the port dead.
Rob,
Can I take your lack of reply on this as meaning that you don't have any objections against these new DT properties for this driver - if so, can I have your ack for these properties please?
Signature · 2 lines
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly improving, and getting towards what was expected from it.
RFC PATCH 5/5 ahci_imx: add disable for spread-spectrum
Quoted 34 lines · Russell King - ARM Linux
Quoted 28 lines · Russell King - ARM Linux
Quoted 21 lines · Russell King - ARM Linux
Quoted 10 lines · Rob Herring
Quoted 3 lines · Russell King
Spread-spectrum doesn't work with Cubox-i hardware, so we have to disable this feature. Add a DT property so that platforms can indicate that this feature should not be enabled.
This is for spread-spectrum tx or rx? Transmit SS is optional to support, but the receiver must support SS. Otherwise random drives won't work which makes for a good user experience. Is this really a board quirk rather than a Si issue?
No idea. This bit controls clock generation, and one reason given to disable it is if the reference clock being supplied is already spread spectrum. I don't think that applies here. It doesn't say which clock(s) this is applied to - I would guess it's the transmit clock.
All I know is that with SS enabled, the drive is not detected, and SolidRun's original port disables SS. Disabling SS allows the external drive to be detected.
Quoted 5 lines
I have no capability to check the eye pattern, so I've no idea if there's a problem with the electrical setup which stops SS from working. All I know is with the parameters I give here (which are those which SolidRun's original port uses) and with SS disabled, it works.
Quoted 4 lines
I'll correct that - it _is_ detected with SS enabled, but things go awry very quickly with errors, which then result in corrupted IDENTIFY responses, the link dropping back to 1.5Gbps, more errors and corruption and eventually the SATA layer gives up and declares the port dead.
Quoted 5 lines
Rob,
Can I take your lack of reply on this as meaning that you don't have any objections against these new DT properties for this driver - if so, can I have your ack for these properties please?
Yes, they are okay. I'll ack the documentation once that is done.
Rob
RFC PATCH 5/5 ahci_imx: add disable for spread-spectrum
Quoted 1 line · Rob Herring
Yes, they are okay. I'll ack the documentation once that is done.
When someone documents the existing implmentation, then I'll add to it - I've not really looked into what the differences are between the compatible strings, so that's something I can't document.
Signature · 2 lines
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly improving, and getting towards what was expected from it.