All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-wired-lan] [PATCH v1 1/1] igc: Remove copper fiber switch control
@ 2020-03-02 20:23 Sasha Neftin
  2020-03-02 21:26 ` Alexander Duyck
  0 siblings, 1 reply; 5+ messages in thread
From: Sasha Neftin @ 2020-03-02 20:23 UTC (permalink / raw)
  To: intel-wired-lan

i225 device support copper mode only
PHY signal detect indication for copper fiber switch
not applicable to i225 part

Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>
---
 drivers/net/ethernet/intel/igc/igc_defines.h |   2 -
 drivers/net/ethernet/intel/igc/igc_ethtool.c | 193 +++++++++++++--------------
 drivers/net/ethernet/intel/igc/igc_main.c    |   9 --
 drivers/net/ethernet/intel/igc/igc_regs.h    |   1 -
 4 files changed, 96 insertions(+), 109 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_defines.h b/drivers/net/ethernet/intel/igc/igc_defines.h
index dd0c86ce09ed..e5116337b68d 100644
--- a/drivers/net/ethernet/intel/igc/igc_defines.h
+++ b/drivers/net/ethernet/intel/igc/igc_defines.h
@@ -91,8 +91,6 @@
 #define IGC_CTRL_RFCE		0x08000000  /* Receive Flow Control enable */
 #define IGC_CTRL_TFCE		0x10000000  /* Transmit flow control enable */
 
-#define IGC_CONNSW_AUTOSENSE_EN	0x1
-
 /* As per the EAS the maximum supported size is 9.5KB (9728 bytes) */
 #define MAX_JUMBO_FRAME_SIZE	0x2600
 
diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
index 69f50b8e2af3..82d0c893ed41 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -160,142 +160,141 @@ static void igc_get_regs(struct net_device *netdev,
 	regs_buff[1] = rd32(IGC_STATUS);
 	regs_buff[2] = rd32(IGC_CTRL_EXT);
 	regs_buff[3] = rd32(IGC_MDIC);
-	regs_buff[4] = rd32(IGC_CONNSW);
 
 	/* NVM Register */
-	regs_buff[5] = rd32(IGC_EECD);
+	regs_buff[4] = rd32(IGC_EECD);
 
 	/* Interrupt */
 	/* Reading EICS for EICR because they read the
 	 * same but EICS does not clear on read
 	 */
+	regs_buff[5] = rd32(IGC_EICS);
 	regs_buff[6] = rd32(IGC_EICS);
-	regs_buff[7] = rd32(IGC_EICS);
-	regs_buff[8] = rd32(IGC_EIMS);
-	regs_buff[9] = rd32(IGC_EIMC);
-	regs_buff[10] = rd32(IGC_EIAC);
-	regs_buff[11] = rd32(IGC_EIAM);
+	regs_buff[7] = rd32(IGC_EIMS);
+	regs_buff[8] = rd32(IGC_EIMC);
+	regs_buff[9] = rd32(IGC_EIAC);
+	regs_buff[10] = rd32(IGC_EIAM);
 	/* Reading ICS for ICR because they read the
 	 * same but ICS does not clear on read
 	 */
+	regs_buff[11] = rd32(IGC_ICS);
 	regs_buff[12] = rd32(IGC_ICS);
-	regs_buff[13] = rd32(IGC_ICS);
-	regs_buff[14] = rd32(IGC_IMS);
-	regs_buff[15] = rd32(IGC_IMC);
-	regs_buff[16] = rd32(IGC_IAC);
-	regs_buff[17] = rd32(IGC_IAM);
+	regs_buff[13] = rd32(IGC_IMS);
+	regs_buff[14] = rd32(IGC_IMC);
+	regs_buff[15] = rd32(IGC_IAC);
+	regs_buff[16] = rd32(IGC_IAM);
 
 	/* Flow Control */
-	regs_buff[18] = rd32(IGC_FCAL);
-	regs_buff[19] = rd32(IGC_FCAH);
-	regs_buff[20] = rd32(IGC_FCTTV);
-	regs_buff[21] = rd32(IGC_FCRTL);
-	regs_buff[22] = rd32(IGC_FCRTH);
-	regs_buff[23] = rd32(IGC_FCRTV);
+	regs_buff[17] = rd32(IGC_FCAL);
+	regs_buff[18] = rd32(IGC_FCAH);
+	regs_buff[19] = rd32(IGC_FCTTV);
+	regs_buff[20] = rd32(IGC_FCRTL);
+	regs_buff[21] = rd32(IGC_FCRTH);
+	regs_buff[22] = rd32(IGC_FCRTV);
 
 	/* Receive */
-	regs_buff[24] = rd32(IGC_RCTL);
-	regs_buff[25] = rd32(IGC_RXCSUM);
-	regs_buff[26] = rd32(IGC_RLPML);
-	regs_buff[27] = rd32(IGC_RFCTL);
+	regs_buff[23] = rd32(IGC_RCTL);
+	regs_buff[24] = rd32(IGC_RXCSUM);
+	regs_buff[25] = rd32(IGC_RLPML);
+	regs_buff[26] = rd32(IGC_RFCTL);
 
 	/* Transmit */
-	regs_buff[28] = rd32(IGC_TCTL);
-	regs_buff[29] = rd32(IGC_TIPG);
+	regs_buff[27] = rd32(IGC_TCTL);
+	regs_buff[28] = rd32(IGC_TIPG);
 
 	/* Wake Up */
 
 	/* MAC */
 
 	/* Statistics */
-	regs_buff[30] = adapter->stats.crcerrs;
-	regs_buff[31] = adapter->stats.algnerrc;
-	regs_buff[32] = adapter->stats.symerrs;
-	regs_buff[33] = adapter->stats.rxerrc;
-	regs_buff[34] = adapter->stats.mpc;
-	regs_buff[35] = adapter->stats.scc;
-	regs_buff[36] = adapter->stats.ecol;
-	regs_buff[37] = adapter->stats.mcc;
-	regs_buff[38] = adapter->stats.latecol;
-	regs_buff[39] = adapter->stats.colc;
-	regs_buff[40] = adapter->stats.dc;
-	regs_buff[41] = adapter->stats.tncrs;
-	regs_buff[42] = adapter->stats.sec;
-	regs_buff[43] = adapter->stats.htdpmc;
-	regs_buff[44] = adapter->stats.rlec;
-	regs_buff[45] = adapter->stats.xonrxc;
-	regs_buff[46] = adapter->stats.xontxc;
-	regs_buff[47] = adapter->stats.xoffrxc;
-	regs_buff[48] = adapter->stats.xofftxc;
-	regs_buff[49] = adapter->stats.fcruc;
-	regs_buff[50] = adapter->stats.prc64;
-	regs_buff[51] = adapter->stats.prc127;
-	regs_buff[52] = adapter->stats.prc255;
-	regs_buff[53] = adapter->stats.prc511;
-	regs_buff[54] = adapter->stats.prc1023;
-	regs_buff[55] = adapter->stats.prc1522;
-	regs_buff[56] = adapter->stats.gprc;
-	regs_buff[57] = adapter->stats.bprc;
-	regs_buff[58] = adapter->stats.mprc;
-	regs_buff[59] = adapter->stats.gptc;
-	regs_buff[60] = adapter->stats.gorc;
-	regs_buff[61] = adapter->stats.gotc;
-	regs_buff[62] = adapter->stats.rnbc;
-	regs_buff[63] = adapter->stats.ruc;
-	regs_buff[64] = adapter->stats.rfc;
-	regs_buff[65] = adapter->stats.roc;
-	regs_buff[66] = adapter->stats.rjc;
-	regs_buff[67] = adapter->stats.mgprc;
-	regs_buff[68] = adapter->stats.mgpdc;
-	regs_buff[69] = adapter->stats.mgptc;
-	regs_buff[70] = adapter->stats.tor;
-	regs_buff[71] = adapter->stats.tot;
-	regs_buff[72] = adapter->stats.tpr;
-	regs_buff[73] = adapter->stats.tpt;
-	regs_buff[74] = adapter->stats.ptc64;
-	regs_buff[75] = adapter->stats.ptc127;
-	regs_buff[76] = adapter->stats.ptc255;
-	regs_buff[77] = adapter->stats.ptc511;
-	regs_buff[78] = adapter->stats.ptc1023;
-	regs_buff[79] = adapter->stats.ptc1522;
-	regs_buff[80] = adapter->stats.mptc;
-	regs_buff[81] = adapter->stats.bptc;
-	regs_buff[82] = adapter->stats.tsctc;
-	regs_buff[83] = adapter->stats.iac;
-	regs_buff[84] = adapter->stats.rpthc;
-	regs_buff[85] = adapter->stats.hgptc;
-	regs_buff[86] = adapter->stats.hgorc;
-	regs_buff[87] = adapter->stats.hgotc;
-	regs_buff[88] = adapter->stats.lenerrs;
-	regs_buff[89] = adapter->stats.scvpc;
-	regs_buff[90] = adapter->stats.hrmpc;
+	regs_buff[29] = adapter->stats.crcerrs;
+	regs_buff[30] = adapter->stats.algnerrc;
+	regs_buff[31] = adapter->stats.symerrs;
+	regs_buff[32] = adapter->stats.rxerrc;
+	regs_buff[33] = adapter->stats.mpc;
+	regs_buff[34] = adapter->stats.scc;
+	regs_buff[35] = adapter->stats.ecol;
+	regs_buff[36] = adapter->stats.mcc;
+	regs_buff[37] = adapter->stats.latecol;
+	regs_buff[38] = adapter->stats.colc;
+	regs_buff[39] = adapter->stats.dc;
+	regs_buff[40] = adapter->stats.tncrs;
+	regs_buff[41] = adapter->stats.sec;
+	regs_buff[42] = adapter->stats.htdpmc;
+	regs_buff[43] = adapter->stats.rlec;
+	regs_buff[44] = adapter->stats.xonrxc;
+	regs_buff[45] = adapter->stats.xontxc;
+	regs_buff[46] = adapter->stats.xoffrxc;
+	regs_buff[47] = adapter->stats.xofftxc;
+	regs_buff[48] = adapter->stats.fcruc;
+	regs_buff[49] = adapter->stats.prc64;
+	regs_buff[50] = adapter->stats.prc127;
+	regs_buff[51] = adapter->stats.prc255;
+	regs_buff[52] = adapter->stats.prc511;
+	regs_buff[53] = adapter->stats.prc1023;
+	regs_buff[54] = adapter->stats.prc1522;
+	regs_buff[55] = adapter->stats.gprc;
+	regs_buff[56] = adapter->stats.bprc;
+	regs_buff[57] = adapter->stats.mprc;
+	regs_buff[58] = adapter->stats.gptc;
+	regs_buff[59] = adapter->stats.gorc;
+	regs_buff[60] = adapter->stats.gotc;
+	regs_buff[61] = adapter->stats.rnbc;
+	regs_buff[62] = adapter->stats.ruc;
+	regs_buff[63] = adapter->stats.rfc;
+	regs_buff[64] = adapter->stats.roc;
+	regs_buff[65] = adapter->stats.rjc;
+	regs_buff[66] = adapter->stats.mgprc;
+	regs_buff[67] = adapter->stats.mgpdc;
+	regs_buff[68] = adapter->stats.mgptc;
+	regs_buff[69] = adapter->stats.tor;
+	regs_buff[70] = adapter->stats.tot;
+	regs_buff[71] = adapter->stats.tpr;
+	regs_buff[72] = adapter->stats.tpt;
+	regs_buff[73] = adapter->stats.ptc64;
+	regs_buff[74] = adapter->stats.ptc127;
+	regs_buff[75] = adapter->stats.ptc255;
+	regs_buff[76] = adapter->stats.ptc511;
+	regs_buff[77] = adapter->stats.ptc1023;
+	regs_buff[78] = adapter->stats.ptc1522;
+	regs_buff[79] = adapter->stats.mptc;
+	regs_buff[80] = adapter->stats.bptc;
+	regs_buff[81] = adapter->stats.tsctc;
+	regs_buff[82] = adapter->stats.iac;
+	regs_buff[83] = adapter->stats.rpthc;
+	regs_buff[84] = adapter->stats.hgptc;
+	regs_buff[85] = adapter->stats.hgorc;
+	regs_buff[86] = adapter->stats.hgotc;
+	regs_buff[87] = adapter->stats.lenerrs;
+	regs_buff[88] = adapter->stats.scvpc;
+	regs_buff[89] = adapter->stats.hrmpc;
 
 	for (i = 0; i < 4; i++)
-		regs_buff[91 + i] = rd32(IGC_SRRCTL(i));
+		regs_buff[90 + i] = rd32(IGC_SRRCTL(i));
 	for (i = 0; i < 4; i++)
-		regs_buff[95 + i] = rd32(IGC_PSRTYPE(i));
+		regs_buff[94 + i] = rd32(IGC_PSRTYPE(i));
 	for (i = 0; i < 4; i++)
-		regs_buff[99 + i] = rd32(IGC_RDBAL(i));
+		regs_buff[98 + i] = rd32(IGC_RDBAL(i));
 	for (i = 0; i < 4; i++)
-		regs_buff[103 + i] = rd32(IGC_RDBAH(i));
+		regs_buff[102 + i] = rd32(IGC_RDBAH(i));
 	for (i = 0; i < 4; i++)
-		regs_buff[107 + i] = rd32(IGC_RDLEN(i));
+		regs_buff[106 + i] = rd32(IGC_RDLEN(i));
 	for (i = 0; i < 4; i++)
-		regs_buff[111 + i] = rd32(IGC_RDH(i));
+		regs_buff[110 + i] = rd32(IGC_RDH(i));
 	for (i = 0; i < 4; i++)
-		regs_buff[115 + i] = rd32(IGC_RDT(i));
+		regs_buff[114 + i] = rd32(IGC_RDT(i));
 	for (i = 0; i < 4; i++)
-		regs_buff[119 + i] = rd32(IGC_RXDCTL(i));
+		regs_buff[118 + i] = rd32(IGC_RXDCTL(i));
 
 	for (i = 0; i < 10; i++)
-		regs_buff[123 + i] = rd32(IGC_EITR(i));
+		regs_buff[122 + i] = rd32(IGC_EITR(i));
 	for (i = 0; i < 16; i++)
-		regs_buff[139 + i] = rd32(IGC_RAL(i));
+		regs_buff[138 + i] = rd32(IGC_RAL(i));
 	for (i = 0; i < 16; i++)
-		regs_buff[145 + i] = rd32(IGC_RAH(i));
+		regs_buff[144 + i] = rd32(IGC_RAH(i));
 
 	for (i = 0; i < 4; i++)
-		regs_buff[149 + i] = rd32(IGC_TDBAL(i));
+		regs_buff[148 + i] = rd32(IGC_TDBAL(i));
 	for (i = 0; i < 4; i++)
 		regs_buff[152 + i] = rd32(IGC_TDBAH(i));
 	for (i = 0; i < 4; i++)
diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index d406aaea24af..47009fe0cbde 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -4036,7 +4036,6 @@ static void igc_watchdog_task(struct work_struct *work)
 	struct igc_hw *hw = &adapter->hw;
 	struct igc_phy_info *phy = &hw->phy;
 	u16 phy_data, retry_count = 20;
-	u32 connsw;
 	u32 link;
 	int i;
 
@@ -4049,14 +4048,6 @@ static void igc_watchdog_task(struct work_struct *work)
 			link = false;
 	}
 
-	/* Force link down if we have fiber to swap to */
-	if (adapter->flags & IGC_FLAG_MAS_ENABLE) {
-		if (hw->phy.media_type == igc_media_type_copper) {
-			connsw = rd32(IGC_CONNSW);
-			if (!(connsw & IGC_CONNSW_AUTOSENSE_EN))
-				link = 0;
-		}
-	}
 	if (link) {
 		/* Cancel scheduled suspend requests. */
 		pm_runtime_resume(netdev->dev.parent);
diff --git a/drivers/net/ethernet/intel/igc/igc_regs.h b/drivers/net/ethernet/intel/igc/igc_regs.h
index 96dee3c1a5f7..79789176fc80 100644
--- a/drivers/net/ethernet/intel/igc/igc_regs.h
+++ b/drivers/net/ethernet/intel/igc/igc_regs.h
@@ -11,7 +11,6 @@
 #define IGC_CTRL_EXT		0x00018  /* Extended Device Control - RW */
 #define IGC_MDIC		0x00020  /* MDI Control - RW */
 #define IGC_MDICNFG		0x00E04  /* MDC/MDIO Configuration - RW */
-#define IGC_CONNSW		0x00034  /* Copper/Fiber switch control - RW */
 #define IGC_I225_PHPM		0x00E14  /* I225 PHY Power Management */
 
 /* Internal Packet Buffer Size Registers */
-- 
2.11.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Intel-wired-lan] [PATCH v1 1/1] igc: Remove copper fiber switch control
  2020-03-02 20:23 [Intel-wired-lan] [PATCH v1 1/1] igc: Remove copper fiber switch control Sasha Neftin
@ 2020-03-02 21:26 ` Alexander Duyck
  2020-03-03  0:44   ` Neftin, Sasha
  0 siblings, 1 reply; 5+ messages in thread
From: Alexander Duyck @ 2020-03-02 21:26 UTC (permalink / raw)
  To: intel-wired-lan

On Mon, Mar 2, 2020 at 12:23 PM Sasha Neftin <sasha.neftin@intel.com> wrote:
>
> i225 device support copper mode only
> PHY signal detect indication for copper fiber switch
> not applicable to i225 part
>
> Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>

So there are a couple issues with this patch.

All the changes in igc_ethtool.c are broken at this point. Once a
register is defined in regs_buff you cannot change it. Otherwise you
cannot debug this in the future. You would be better off just skipping
the register that you were storing CONNSW and let it default to zero
instead of doing all of the shifting you are doing. You can just skip
over the register in the dump in ethtool assuming there is even a file
for the device that has been added.

Also you might want to change the patch description to specify that
the CONNSW register doesn't exist for the i225 part. Then it makes
sense to remove the register from igc_get_regs.

> ---
>  drivers/net/ethernet/intel/igc/igc_defines.h |   2 -
>  drivers/net/ethernet/intel/igc/igc_ethtool.c | 193 +++++++++++++--------------
>  drivers/net/ethernet/intel/igc/igc_main.c    |   9 --
>  drivers/net/ethernet/intel/igc/igc_regs.h    |   1 -
>  4 files changed, 96 insertions(+), 109 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/igc/igc_defines.h b/drivers/net/ethernet/intel/igc/igc_defines.h
> index dd0c86ce09ed..e5116337b68d 100644
> --- a/drivers/net/ethernet/intel/igc/igc_defines.h
> +++ b/drivers/net/ethernet/intel/igc/igc_defines.h
> @@ -91,8 +91,6 @@
>  #define IGC_CTRL_RFCE          0x08000000  /* Receive Flow Control enable */
>  #define IGC_CTRL_TFCE          0x10000000  /* Transmit flow control enable */
>
> -#define IGC_CONNSW_AUTOSENSE_EN        0x1
> -
>  /* As per the EAS the maximum supported size is 9.5KB (9728 bytes) */
>  #define MAX_JUMBO_FRAME_SIZE   0x2600
>
> diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
> index 69f50b8e2af3..82d0c893ed41 100644
> --- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
> +++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
> @@ -160,142 +160,141 @@ static void igc_get_regs(struct net_device *netdev,
>         regs_buff[1] = rd32(IGC_STATUS);
>         regs_buff[2] = rd32(IGC_CTRL_EXT);
>         regs_buff[3] = rd32(IGC_MDIC);
> -       regs_buff[4] = rd32(IGC_CONNSW);
>
>         /* NVM Register */
> -       regs_buff[5] = rd32(IGC_EECD);
> +       regs_buff[4] = rd32(IGC_EECD);
>
>         /* Interrupt */
>         /* Reading EICS for EICR because they read the
>          * same but EICS does not clear on read
>          */
> +       regs_buff[5] = rd32(IGC_EICS);
>         regs_buff[6] = rd32(IGC_EICS);
> -       regs_buff[7] = rd32(IGC_EICS);
> -       regs_buff[8] = rd32(IGC_EIMS);
> -       regs_buff[9] = rd32(IGC_EIMC);
> -       regs_buff[10] = rd32(IGC_EIAC);
> -       regs_buff[11] = rd32(IGC_EIAM);
> +       regs_buff[7] = rd32(IGC_EIMS);
> +       regs_buff[8] = rd32(IGC_EIMC);
> +       regs_buff[9] = rd32(IGC_EIAC);
> +       regs_buff[10] = rd32(IGC_EIAM);
>         /* Reading ICS for ICR because they read the
>          * same but ICS does not clear on read
>          */
> +       regs_buff[11] = rd32(IGC_ICS);
>         regs_buff[12] = rd32(IGC_ICS);
> -       regs_buff[13] = rd32(IGC_ICS);
> -       regs_buff[14] = rd32(IGC_IMS);
> -       regs_buff[15] = rd32(IGC_IMC);
> -       regs_buff[16] = rd32(IGC_IAC);
> -       regs_buff[17] = rd32(IGC_IAM);
> +       regs_buff[13] = rd32(IGC_IMS);
> +       regs_buff[14] = rd32(IGC_IMC);
> +       regs_buff[15] = rd32(IGC_IAC);
> +       regs_buff[16] = rd32(IGC_IAM);
>
>         /* Flow Control */
> -       regs_buff[18] = rd32(IGC_FCAL);
> -       regs_buff[19] = rd32(IGC_FCAH);
> -       regs_buff[20] = rd32(IGC_FCTTV);
> -       regs_buff[21] = rd32(IGC_FCRTL);
> -       regs_buff[22] = rd32(IGC_FCRTH);
> -       regs_buff[23] = rd32(IGC_FCRTV);
> +       regs_buff[17] = rd32(IGC_FCAL);
> +       regs_buff[18] = rd32(IGC_FCAH);
> +       regs_buff[19] = rd32(IGC_FCTTV);
> +       regs_buff[20] = rd32(IGC_FCRTL);
> +       regs_buff[21] = rd32(IGC_FCRTH);
> +       regs_buff[22] = rd32(IGC_FCRTV);
>
>         /* Receive */
> -       regs_buff[24] = rd32(IGC_RCTL);
> -       regs_buff[25] = rd32(IGC_RXCSUM);
> -       regs_buff[26] = rd32(IGC_RLPML);
> -       regs_buff[27] = rd32(IGC_RFCTL);
> +       regs_buff[23] = rd32(IGC_RCTL);
> +       regs_buff[24] = rd32(IGC_RXCSUM);
> +       regs_buff[25] = rd32(IGC_RLPML);
> +       regs_buff[26] = rd32(IGC_RFCTL);
>
>         /* Transmit */
> -       regs_buff[28] = rd32(IGC_TCTL);
> -       regs_buff[29] = rd32(IGC_TIPG);
> +       regs_buff[27] = rd32(IGC_TCTL);
> +       regs_buff[28] = rd32(IGC_TIPG);
>
>         /* Wake Up */
>
>         /* MAC */
>
>         /* Statistics */
> -       regs_buff[30] = adapter->stats.crcerrs;
> -       regs_buff[31] = adapter->stats.algnerrc;
> -       regs_buff[32] = adapter->stats.symerrs;
> -       regs_buff[33] = adapter->stats.rxerrc;
> -       regs_buff[34] = adapter->stats.mpc;
> -       regs_buff[35] = adapter->stats.scc;
> -       regs_buff[36] = adapter->stats.ecol;
> -       regs_buff[37] = adapter->stats.mcc;
> -       regs_buff[38] = adapter->stats.latecol;
> -       regs_buff[39] = adapter->stats.colc;
> -       regs_buff[40] = adapter->stats.dc;
> -       regs_buff[41] = adapter->stats.tncrs;
> -       regs_buff[42] = adapter->stats.sec;
> -       regs_buff[43] = adapter->stats.htdpmc;
> -       regs_buff[44] = adapter->stats.rlec;
> -       regs_buff[45] = adapter->stats.xonrxc;
> -       regs_buff[46] = adapter->stats.xontxc;
> -       regs_buff[47] = adapter->stats.xoffrxc;
> -       regs_buff[48] = adapter->stats.xofftxc;
> -       regs_buff[49] = adapter->stats.fcruc;
> -       regs_buff[50] = adapter->stats.prc64;
> -       regs_buff[51] = adapter->stats.prc127;
> -       regs_buff[52] = adapter->stats.prc255;
> -       regs_buff[53] = adapter->stats.prc511;
> -       regs_buff[54] = adapter->stats.prc1023;
> -       regs_buff[55] = adapter->stats.prc1522;
> -       regs_buff[56] = adapter->stats.gprc;
> -       regs_buff[57] = adapter->stats.bprc;
> -       regs_buff[58] = adapter->stats.mprc;
> -       regs_buff[59] = adapter->stats.gptc;
> -       regs_buff[60] = adapter->stats.gorc;
> -       regs_buff[61] = adapter->stats.gotc;
> -       regs_buff[62] = adapter->stats.rnbc;
> -       regs_buff[63] = adapter->stats.ruc;
> -       regs_buff[64] = adapter->stats.rfc;
> -       regs_buff[65] = adapter->stats.roc;
> -       regs_buff[66] = adapter->stats.rjc;
> -       regs_buff[67] = adapter->stats.mgprc;
> -       regs_buff[68] = adapter->stats.mgpdc;
> -       regs_buff[69] = adapter->stats.mgptc;
> -       regs_buff[70] = adapter->stats.tor;
> -       regs_buff[71] = adapter->stats.tot;
> -       regs_buff[72] = adapter->stats.tpr;
> -       regs_buff[73] = adapter->stats.tpt;
> -       regs_buff[74] = adapter->stats.ptc64;
> -       regs_buff[75] = adapter->stats.ptc127;
> -       regs_buff[76] = adapter->stats.ptc255;
> -       regs_buff[77] = adapter->stats.ptc511;
> -       regs_buff[78] = adapter->stats.ptc1023;
> -       regs_buff[79] = adapter->stats.ptc1522;
> -       regs_buff[80] = adapter->stats.mptc;
> -       regs_buff[81] = adapter->stats.bptc;
> -       regs_buff[82] = adapter->stats.tsctc;
> -       regs_buff[83] = adapter->stats.iac;
> -       regs_buff[84] = adapter->stats.rpthc;
> -       regs_buff[85] = adapter->stats.hgptc;
> -       regs_buff[86] = adapter->stats.hgorc;
> -       regs_buff[87] = adapter->stats.hgotc;
> -       regs_buff[88] = adapter->stats.lenerrs;
> -       regs_buff[89] = adapter->stats.scvpc;
> -       regs_buff[90] = adapter->stats.hrmpc;
> +       regs_buff[29] = adapter->stats.crcerrs;
> +       regs_buff[30] = adapter->stats.algnerrc;
> +       regs_buff[31] = adapter->stats.symerrs;
> +       regs_buff[32] = adapter->stats.rxerrc;
> +       regs_buff[33] = adapter->stats.mpc;
> +       regs_buff[34] = adapter->stats.scc;
> +       regs_buff[35] = adapter->stats.ecol;
> +       regs_buff[36] = adapter->stats.mcc;
> +       regs_buff[37] = adapter->stats.latecol;
> +       regs_buff[38] = adapter->stats.colc;
> +       regs_buff[39] = adapter->stats.dc;
> +       regs_buff[40] = adapter->stats.tncrs;
> +       regs_buff[41] = adapter->stats.sec;
> +       regs_buff[42] = adapter->stats.htdpmc;
> +       regs_buff[43] = adapter->stats.rlec;
> +       regs_buff[44] = adapter->stats.xonrxc;
> +       regs_buff[45] = adapter->stats.xontxc;
> +       regs_buff[46] = adapter->stats.xoffrxc;
> +       regs_buff[47] = adapter->stats.xofftxc;
> +       regs_buff[48] = adapter->stats.fcruc;
> +       regs_buff[49] = adapter->stats.prc64;
> +       regs_buff[50] = adapter->stats.prc127;
> +       regs_buff[51] = adapter->stats.prc255;
> +       regs_buff[52] = adapter->stats.prc511;
> +       regs_buff[53] = adapter->stats.prc1023;
> +       regs_buff[54] = adapter->stats.prc1522;
> +       regs_buff[55] = adapter->stats.gprc;
> +       regs_buff[56] = adapter->stats.bprc;
> +       regs_buff[57] = adapter->stats.mprc;
> +       regs_buff[58] = adapter->stats.gptc;
> +       regs_buff[59] = adapter->stats.gorc;
> +       regs_buff[60] = adapter->stats.gotc;
> +       regs_buff[61] = adapter->stats.rnbc;
> +       regs_buff[62] = adapter->stats.ruc;
> +       regs_buff[63] = adapter->stats.rfc;
> +       regs_buff[64] = adapter->stats.roc;
> +       regs_buff[65] = adapter->stats.rjc;
> +       regs_buff[66] = adapter->stats.mgprc;
> +       regs_buff[67] = adapter->stats.mgpdc;
> +       regs_buff[68] = adapter->stats.mgptc;
> +       regs_buff[69] = adapter->stats.tor;
> +       regs_buff[70] = adapter->stats.tot;
> +       regs_buff[71] = adapter->stats.tpr;
> +       regs_buff[72] = adapter->stats.tpt;
> +       regs_buff[73] = adapter->stats.ptc64;
> +       regs_buff[74] = adapter->stats.ptc127;
> +       regs_buff[75] = adapter->stats.ptc255;
> +       regs_buff[76] = adapter->stats.ptc511;
> +       regs_buff[77] = adapter->stats.ptc1023;
> +       regs_buff[78] = adapter->stats.ptc1522;
> +       regs_buff[79] = adapter->stats.mptc;
> +       regs_buff[80] = adapter->stats.bptc;
> +       regs_buff[81] = adapter->stats.tsctc;
> +       regs_buff[82] = adapter->stats.iac;
> +       regs_buff[83] = adapter->stats.rpthc;
> +       regs_buff[84] = adapter->stats.hgptc;
> +       regs_buff[85] = adapter->stats.hgorc;
> +       regs_buff[86] = adapter->stats.hgotc;
> +       regs_buff[87] = adapter->stats.lenerrs;
> +       regs_buff[88] = adapter->stats.scvpc;
> +       regs_buff[89] = adapter->stats.hrmpc;
>
>         for (i = 0; i < 4; i++)
> -               regs_buff[91 + i] = rd32(IGC_SRRCTL(i));
> +               regs_buff[90 + i] = rd32(IGC_SRRCTL(i));
>         for (i = 0; i < 4; i++)
> -               regs_buff[95 + i] = rd32(IGC_PSRTYPE(i));
> +               regs_buff[94 + i] = rd32(IGC_PSRTYPE(i));
>         for (i = 0; i < 4; i++)
> -               regs_buff[99 + i] = rd32(IGC_RDBAL(i));
> +               regs_buff[98 + i] = rd32(IGC_RDBAL(i));
>         for (i = 0; i < 4; i++)
> -               regs_buff[103 + i] = rd32(IGC_RDBAH(i));
> +               regs_buff[102 + i] = rd32(IGC_RDBAH(i));
>         for (i = 0; i < 4; i++)
> -               regs_buff[107 + i] = rd32(IGC_RDLEN(i));
> +               regs_buff[106 + i] = rd32(IGC_RDLEN(i));
>         for (i = 0; i < 4; i++)
> -               regs_buff[111 + i] = rd32(IGC_RDH(i));
> +               regs_buff[110 + i] = rd32(IGC_RDH(i));
>         for (i = 0; i < 4; i++)
> -               regs_buff[115 + i] = rd32(IGC_RDT(i));
> +               regs_buff[114 + i] = rd32(IGC_RDT(i));
>         for (i = 0; i < 4; i++)
> -               regs_buff[119 + i] = rd32(IGC_RXDCTL(i));
> +               regs_buff[118 + i] = rd32(IGC_RXDCTL(i));
>
>         for (i = 0; i < 10; i++)
> -               regs_buff[123 + i] = rd32(IGC_EITR(i));
> +               regs_buff[122 + i] = rd32(IGC_EITR(i));
>         for (i = 0; i < 16; i++)
> -               regs_buff[139 + i] = rd32(IGC_RAL(i));
> +               regs_buff[138 + i] = rd32(IGC_RAL(i));
>         for (i = 0; i < 16; i++)
> -               regs_buff[145 + i] = rd32(IGC_RAH(i));
> +               regs_buff[144 + i] = rd32(IGC_RAH(i));
>
>         for (i = 0; i < 4; i++)
> -               regs_buff[149 + i] = rd32(IGC_TDBAL(i));
> +               regs_buff[148 + i] = rd32(IGC_TDBAL(i));
>         for (i = 0; i < 4; i++)
>                 regs_buff[152 + i] = rd32(IGC_TDBAH(i));
>         for (i = 0; i < 4; i++)
> diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
> index d406aaea24af..47009fe0cbde 100644
> --- a/drivers/net/ethernet/intel/igc/igc_main.c
> +++ b/drivers/net/ethernet/intel/igc/igc_main.c
> @@ -4036,7 +4036,6 @@ static void igc_watchdog_task(struct work_struct *work)
>         struct igc_hw *hw = &adapter->hw;
>         struct igc_phy_info *phy = &hw->phy;
>         u16 phy_data, retry_count = 20;
> -       u32 connsw;
>         u32 link;
>         int i;
>
> @@ -4049,14 +4048,6 @@ static void igc_watchdog_task(struct work_struct *work)
>                         link = false;
>         }
>
> -       /* Force link down if we have fiber to swap to */
> -       if (adapter->flags & IGC_FLAG_MAS_ENABLE) {
> -               if (hw->phy.media_type == igc_media_type_copper) {
> -                       connsw = rd32(IGC_CONNSW);
> -                       if (!(connsw & IGC_CONNSW_AUTOSENSE_EN))
> -                               link = 0;
> -               }
> -       }
>         if (link) {
>                 /* Cancel scheduled suspend requests. */
>                 pm_runtime_resume(netdev->dev.parent);
> diff --git a/drivers/net/ethernet/intel/igc/igc_regs.h b/drivers/net/ethernet/intel/igc/igc_regs.h
> index 96dee3c1a5f7..79789176fc80 100644
> --- a/drivers/net/ethernet/intel/igc/igc_regs.h
> +++ b/drivers/net/ethernet/intel/igc/igc_regs.h
> @@ -11,7 +11,6 @@
>  #define IGC_CTRL_EXT           0x00018  /* Extended Device Control - RW */
>  #define IGC_MDIC               0x00020  /* MDI Control - RW */
>  #define IGC_MDICNFG            0x00E04  /* MDC/MDIO Configuration - RW */
> -#define IGC_CONNSW             0x00034  /* Copper/Fiber switch control - RW */
>  #define IGC_I225_PHPM          0x00E14  /* I225 PHY Power Management */
>
>  /* Internal Packet Buffer Size Registers */
> --
> 2.11.0
>
> _______________________________________________
> Intel-wired-lan mailing list
> Intel-wired-lan at osuosl.org
> https://lists.osuosl.org/mailman/listinfo/intel-wired-lan

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Intel-wired-lan] [PATCH v1 1/1] igc: Remove copper fiber switch control
  2020-03-02 21:26 ` Alexander Duyck
@ 2020-03-03  0:44   ` Neftin, Sasha
  2020-03-03 16:00     ` Alexander Duyck
  0 siblings, 1 reply; 5+ messages in thread
From: Neftin, Sasha @ 2020-03-03  0:44 UTC (permalink / raw)
  To: intel-wired-lan

On 3/2/2020 13:26, Alexander Duyck wrote:
> On Mon, Mar 2, 2020 at 12:23 PM Sasha Neftin <sasha.neftin@intel.com> wrote:
>>
>> i225 device support copper mode only
>> PHY signal detect indication for copper fiber switch
>> not applicable to i225 part
>>
>> Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>
> 
> So there are a couple issues with this patch.
> 
> All the changes in igc_ethtool.c are broken at this point. Once a
> register is defined in regs_buff you cannot change it. Otherwise you
> cannot debug this in the future. You would be better off just skipping
> the register that you were storing CONNSW and let it default to zero
> instead of doing all of the shifting you are doing. You can just skip
> over the register in the dump in ethtool assuming there is even a file
> for the device that hasbeen added.
> 
This change not affected igc_ethtool.c behavior. I see the same behavior 
on my setup.
Actually ethtool --register-dump not called (as properly).get_regs 
callback from igc_ethtool.c. This is not related to this patch and I 
need investigate and fix it.
ethtool --register-dump <adapter> show me row generic data. Data is 
really from i225 registers, but not parcered as for other drivers.

> Also you might want to change the patch description to specify that
> the CONNSW register doesn't exist for the i225 part. Then it makes
> sense to remove the register from igc_get_regs.
> 
>> ---
>>   drivers/net/ethernet/intel/igc/igc_defines.h |   2 -
>>   drivers/net/ethernet/intel/igc/igc_ethtool.c | 193 +++++++++++++--------------
>>   drivers/net/ethernet/intel/igc/igc_main.c    |   9 --
>>   drivers/net/ethernet/intel/igc/igc_regs.h    |   1 -
>>   4 files changed, 96 insertions(+), 109 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/intel/igc/igc_defines.h b/drivers/net/ethernet/intel/igc/igc_defines.h
>> index dd0c86ce09ed..e5116337b68d 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_defines.h
>> +++ b/drivers/net/ethernet/intel/igc/igc_defines.h
>> @@ -91,8 +91,6 @@
>>   #define IGC_CTRL_RFCE          0x08000000  /* Receive Flow Control enable */
>>   #define IGC_CTRL_TFCE          0x10000000  /* Transmit flow control enable */
>>
>> -#define IGC_CONNSW_AUTOSENSE_EN        0x1
>> -
>>   /* As per the EAS the maximum supported size is 9.5KB (9728 bytes) */
>>   #define MAX_JUMBO_FRAME_SIZE   0x2600
>>
>> diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
>> index 69f50b8e2af3..82d0c893ed41 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
>> +++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
>> @@ -160,142 +160,141 @@ static void igc_get_regs(struct net_device *netdev,
>>          regs_buff[1] = rd32(IGC_STATUS);
>>          regs_buff[2] = rd32(IGC_CTRL_EXT);
>>          regs_buff[3] = rd32(IGC_MDIC);
>> -       regs_buff[4] = rd32(IGC_CONNSW);
>>
>>          /* NVM Register */
>> -       regs_buff[5] = rd32(IGC_EECD);
>> +       regs_buff[4] = rd32(IGC_EECD);
>>
>>          /* Interrupt */
>>          /* Reading EICS for EICR because they read the
>>           * same but EICS does not clear on read
>>           */
>> +       regs_buff[5] = rd32(IGC_EICS);
>>          regs_buff[6] = rd32(IGC_EICS);
>> -       regs_buff[7] = rd32(IGC_EICS);
>> -       regs_buff[8] = rd32(IGC_EIMS);
>> -       regs_buff[9] = rd32(IGC_EIMC);
>> -       regs_buff[10] = rd32(IGC_EIAC);
>> -       regs_buff[11] = rd32(IGC_EIAM);
>> +       regs_buff[7] = rd32(IGC_EIMS);
>> +       regs_buff[8] = rd32(IGC_EIMC);
>> +       regs_buff[9] = rd32(IGC_EIAC);
>> +       regs_buff[10] = rd32(IGC_EIAM);
>>          /* Reading ICS for ICR because they read the
>>           * same but ICS does not clear on read
>>           */
>> +       regs_buff[11] = rd32(IGC_ICS);
>>          regs_buff[12] = rd32(IGC_ICS);
>> -       regs_buff[13] = rd32(IGC_ICS);
>> -       regs_buff[14] = rd32(IGC_IMS);
>> -       regs_buff[15] = rd32(IGC_IMC);
>> -       regs_buff[16] = rd32(IGC_IAC);
>> -       regs_buff[17] = rd32(IGC_IAM);
>> +       regs_buff[13] = rd32(IGC_IMS);
>> +       regs_buff[14] = rd32(IGC_IMC);
>> +       regs_buff[15] = rd32(IGC_IAC);
>> +       regs_buff[16] = rd32(IGC_IAM);
>>
>>          /* Flow Control */
>> -       regs_buff[18] = rd32(IGC_FCAL);
>> -       regs_buff[19] = rd32(IGC_FCAH);
>> -       regs_buff[20] = rd32(IGC_FCTTV);
>> -       regs_buff[21] = rd32(IGC_FCRTL);
>> -       regs_buff[22] = rd32(IGC_FCRTH);
>> -       regs_buff[23] = rd32(IGC_FCRTV);
>> +       regs_buff[17] = rd32(IGC_FCAL);
>> +       regs_buff[18] = rd32(IGC_FCAH);
>> +       regs_buff[19] = rd32(IGC_FCTTV);
>> +       regs_buff[20] = rd32(IGC_FCRTL);
>> +       regs_buff[21] = rd32(IGC_FCRTH);
>> +       regs_buff[22] = rd32(IGC_FCRTV);
>>
>>          /* Receive */
>> -       regs_buff[24] = rd32(IGC_RCTL);
>> -       regs_buff[25] = rd32(IGC_RXCSUM);
>> -       regs_buff[26] = rd32(IGC_RLPML);
>> -       regs_buff[27] = rd32(IGC_RFCTL);
>> +       regs_buff[23] = rd32(IGC_RCTL);
>> +       regs_buff[24] = rd32(IGC_RXCSUM);
>> +       regs_buff[25] = rd32(IGC_RLPML);
>> +       regs_buff[26] = rd32(IGC_RFCTL);
>>
>>          /* Transmit */
>> -       regs_buff[28] = rd32(IGC_TCTL);
>> -       regs_buff[29] = rd32(IGC_TIPG);
>> +       regs_buff[27] = rd32(IGC_TCTL);
>> +       regs_buff[28] = rd32(IGC_TIPG);
>>
>>          /* Wake Up */
>>
>>          /* MAC */
>>
>>          /* Statistics */
>> -       regs_buff[30] = adapter->stats.crcerrs;
>> -       regs_buff[31] = adapter->stats.algnerrc;
>> -       regs_buff[32] = adapter->stats.symerrs;
>> -       regs_buff[33] = adapter->stats.rxerrc;
>> -       regs_buff[34] = adapter->stats.mpc;
>> -       regs_buff[35] = adapter->stats.scc;
>> -       regs_buff[36] = adapter->stats.ecol;
>> -       regs_buff[37] = adapter->stats.mcc;
>> -       regs_buff[38] = adapter->stats.latecol;
>> -       regs_buff[39] = adapter->stats.colc;
>> -       regs_buff[40] = adapter->stats.dc;
>> -       regs_buff[41] = adapter->stats.tncrs;
>> -       regs_buff[42] = adapter->stats.sec;
>> -       regs_buff[43] = adapter->stats.htdpmc;
>> -       regs_buff[44] = adapter->stats.rlec;
>> -       regs_buff[45] = adapter->stats.xonrxc;
>> -       regs_buff[46] = adapter->stats.xontxc;
>> -       regs_buff[47] = adapter->stats.xoffrxc;
>> -       regs_buff[48] = adapter->stats.xofftxc;
>> -       regs_buff[49] = adapter->stats.fcruc;
>> -       regs_buff[50] = adapter->stats.prc64;
>> -       regs_buff[51] = adapter->stats.prc127;
>> -       regs_buff[52] = adapter->stats.prc255;
>> -       regs_buff[53] = adapter->stats.prc511;
>> -       regs_buff[54] = adapter->stats.prc1023;
>> -       regs_buff[55] = adapter->stats.prc1522;
>> -       regs_buff[56] = adapter->stats.gprc;
>> -       regs_buff[57] = adapter->stats.bprc;
>> -       regs_buff[58] = adapter->stats.mprc;
>> -       regs_buff[59] = adapter->stats.gptc;
>> -       regs_buff[60] = adapter->stats.gorc;
>> -       regs_buff[61] = adapter->stats.gotc;
>> -       regs_buff[62] = adapter->stats.rnbc;
>> -       regs_buff[63] = adapter->stats.ruc;
>> -       regs_buff[64] = adapter->stats.rfc;
>> -       regs_buff[65] = adapter->stats.roc;
>> -       regs_buff[66] = adapter->stats.rjc;
>> -       regs_buff[67] = adapter->stats.mgprc;
>> -       regs_buff[68] = adapter->stats.mgpdc;
>> -       regs_buff[69] = adapter->stats.mgptc;
>> -       regs_buff[70] = adapter->stats.tor;
>> -       regs_buff[71] = adapter->stats.tot;
>> -       regs_buff[72] = adapter->stats.tpr;
>> -       regs_buff[73] = adapter->stats.tpt;
>> -       regs_buff[74] = adapter->stats.ptc64;
>> -       regs_buff[75] = adapter->stats.ptc127;
>> -       regs_buff[76] = adapter->stats.ptc255;
>> -       regs_buff[77] = adapter->stats.ptc511;
>> -       regs_buff[78] = adapter->stats.ptc1023;
>> -       regs_buff[79] = adapter->stats.ptc1522;
>> -       regs_buff[80] = adapter->stats.mptc;
>> -       regs_buff[81] = adapter->stats.bptc;
>> -       regs_buff[82] = adapter->stats.tsctc;
>> -       regs_buff[83] = adapter->stats.iac;
>> -       regs_buff[84] = adapter->stats.rpthc;
>> -       regs_buff[85] = adapter->stats.hgptc;
>> -       regs_buff[86] = adapter->stats.hgorc;
>> -       regs_buff[87] = adapter->stats.hgotc;
>> -       regs_buff[88] = adapter->stats.lenerrs;
>> -       regs_buff[89] = adapter->stats.scvpc;
>> -       regs_buff[90] = adapter->stats.hrmpc;
>> +       regs_buff[29] = adapter->stats.crcerrs;
>> +       regs_buff[30] = adapter->stats.algnerrc;
>> +       regs_buff[31] = adapter->stats.symerrs;
>> +       regs_buff[32] = adapter->stats.rxerrc;
>> +       regs_buff[33] = adapter->stats.mpc;
>> +       regs_buff[34] = adapter->stats.scc;
>> +       regs_buff[35] = adapter->stats.ecol;
>> +       regs_buff[36] = adapter->stats.mcc;
>> +       regs_buff[37] = adapter->stats.latecol;
>> +       regs_buff[38] = adapter->stats.colc;
>> +       regs_buff[39] = adapter->stats.dc;
>> +       regs_buff[40] = adapter->stats.tncrs;
>> +       regs_buff[41] = adapter->stats.sec;
>> +       regs_buff[42] = adapter->stats.htdpmc;
>> +       regs_buff[43] = adapter->stats.rlec;
>> +       regs_buff[44] = adapter->stats.xonrxc;
>> +       regs_buff[45] = adapter->stats.xontxc;
>> +       regs_buff[46] = adapter->stats.xoffrxc;
>> +       regs_buff[47] = adapter->stats.xofftxc;
>> +       regs_buff[48] = adapter->stats.fcruc;
>> +       regs_buff[49] = adapter->stats.prc64;
>> +       regs_buff[50] = adapter->stats.prc127;
>> +       regs_buff[51] = adapter->stats.prc255;
>> +       regs_buff[52] = adapter->stats.prc511;
>> +       regs_buff[53] = adapter->stats.prc1023;
>> +       regs_buff[54] = adapter->stats.prc1522;
>> +       regs_buff[55] = adapter->stats.gprc;
>> +       regs_buff[56] = adapter->stats.bprc;
>> +       regs_buff[57] = adapter->stats.mprc;
>> +       regs_buff[58] = adapter->stats.gptc;
>> +       regs_buff[59] = adapter->stats.gorc;
>> +       regs_buff[60] = adapter->stats.gotc;
>> +       regs_buff[61] = adapter->stats.rnbc;
>> +       regs_buff[62] = adapter->stats.ruc;
>> +       regs_buff[63] = adapter->stats.rfc;
>> +       regs_buff[64] = adapter->stats.roc;
>> +       regs_buff[65] = adapter->stats.rjc;
>> +       regs_buff[66] = adapter->stats.mgprc;
>> +       regs_buff[67] = adapter->stats.mgpdc;
>> +       regs_buff[68] = adapter->stats.mgptc;
>> +       regs_buff[69] = adapter->stats.tor;
>> +       regs_buff[70] = adapter->stats.tot;
>> +       regs_buff[71] = adapter->stats.tpr;
>> +       regs_buff[72] = adapter->stats.tpt;
>> +       regs_buff[73] = adapter->stats.ptc64;
>> +       regs_buff[74] = adapter->stats.ptc127;
>> +       regs_buff[75] = adapter->stats.ptc255;
>> +       regs_buff[76] = adapter->stats.ptc511;
>> +       regs_buff[77] = adapter->stats.ptc1023;
>> +       regs_buff[78] = adapter->stats.ptc1522;
>> +       regs_buff[79] = adapter->stats.mptc;
>> +       regs_buff[80] = adapter->stats.bptc;
>> +       regs_buff[81] = adapter->stats.tsctc;
>> +       regs_buff[82] = adapter->stats.iac;
>> +       regs_buff[83] = adapter->stats.rpthc;
>> +       regs_buff[84] = adapter->stats.hgptc;
>> +       regs_buff[85] = adapter->stats.hgorc;
>> +       regs_buff[86] = adapter->stats.hgotc;
>> +       regs_buff[87] = adapter->stats.lenerrs;
>> +       regs_buff[88] = adapter->stats.scvpc;
>> +       regs_buff[89] = adapter->stats.hrmpc;
>>
>>          for (i = 0; i < 4; i++)
>> -               regs_buff[91 + i] = rd32(IGC_SRRCTL(i));
>> +               regs_buff[90 + i] = rd32(IGC_SRRCTL(i));
>>          for (i = 0; i < 4; i++)
>> -               regs_buff[95 + i] = rd32(IGC_PSRTYPE(i));
>> +               regs_buff[94 + i] = rd32(IGC_PSRTYPE(i));
>>          for (i = 0; i < 4; i++)
>> -               regs_buff[99 + i] = rd32(IGC_RDBAL(i));
>> +               regs_buff[98 + i] = rd32(IGC_RDBAL(i));
>>          for (i = 0; i < 4; i++)
>> -               regs_buff[103 + i] = rd32(IGC_RDBAH(i));
>> +               regs_buff[102 + i] = rd32(IGC_RDBAH(i));
>>          for (i = 0; i < 4; i++)
>> -               regs_buff[107 + i] = rd32(IGC_RDLEN(i));
>> +               regs_buff[106 + i] = rd32(IGC_RDLEN(i));
>>          for (i = 0; i < 4; i++)
>> -               regs_buff[111 + i] = rd32(IGC_RDH(i));
>> +               regs_buff[110 + i] = rd32(IGC_RDH(i));
>>          for (i = 0; i < 4; i++)
>> -               regs_buff[115 + i] = rd32(IGC_RDT(i));
>> +               regs_buff[114 + i] = rd32(IGC_RDT(i));
>>          for (i = 0; i < 4; i++)
>> -               regs_buff[119 + i] = rd32(IGC_RXDCTL(i));
>> +               regs_buff[118 + i] = rd32(IGC_RXDCTL(i));
>>
>>          for (i = 0; i < 10; i++)
>> -               regs_buff[123 + i] = rd32(IGC_EITR(i));
>> +               regs_buff[122 + i] = rd32(IGC_EITR(i));
>>          for (i = 0; i < 16; i++)
>> -               regs_buff[139 + i] = rd32(IGC_RAL(i));
>> +               regs_buff[138 + i] = rd32(IGC_RAL(i));
>>          for (i = 0; i < 16; i++)
>> -               regs_buff[145 + i] = rd32(IGC_RAH(i));
>> +               regs_buff[144 + i] = rd32(IGC_RAH(i));
>>
>>          for (i = 0; i < 4; i++)
>> -               regs_buff[149 + i] = rd32(IGC_TDBAL(i));
>> +               regs_buff[148 + i] = rd32(IGC_TDBAL(i));
>>          for (i = 0; i < 4; i++)
>>                  regs_buff[152 + i] = rd32(IGC_TDBAH(i));
>>          for (i = 0; i < 4; i++)
>> diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
>> index d406aaea24af..47009fe0cbde 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_main.c
>> +++ b/drivers/net/ethernet/intel/igc/igc_main.c
>> @@ -4036,7 +4036,6 @@ static void igc_watchdog_task(struct work_struct *work)
>>          struct igc_hw *hw = &adapter->hw;
>>          struct igc_phy_info *phy = &hw->phy;
>>          u16 phy_data, retry_count = 20;
>> -       u32 connsw;
>>          u32 link;
>>          int i;
>>
>> @@ -4049,14 +4048,6 @@ static void igc_watchdog_task(struct work_struct *work)
>>                          link = false;
>>          }
>>
>> -       /* Force link down if we have fiber to swap to */
>> -       if (adapter->flags & IGC_FLAG_MAS_ENABLE) {
>> -               if (hw->phy.media_type == igc_media_type_copper) {
>> -                       connsw = rd32(IGC_CONNSW);
>> -                       if (!(connsw & IGC_CONNSW_AUTOSENSE_EN))
>> -                               link = 0;
>> -               }
>> -       }
>>          if (link) {
>>                  /* Cancel scheduled suspend requests. */
>>                  pm_runtime_resume(netdev->dev.parent);
>> diff --git a/drivers/net/ethernet/intel/igc/igc_regs.h b/drivers/net/ethernet/intel/igc/igc_regs.h
>> index 96dee3c1a5f7..79789176fc80 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_regs.h
>> +++ b/drivers/net/ethernet/intel/igc/igc_regs.h
>> @@ -11,7 +11,6 @@
>>   #define IGC_CTRL_EXT           0x00018  /* Extended Device Control - RW */
>>   #define IGC_MDIC               0x00020  /* MDI Control - RW */
>>   #define IGC_MDICNFG            0x00E04  /* MDC/MDIO Configuration - RW */
>> -#define IGC_CONNSW             0x00034  /* Copper/Fiber switch control - RW */
>>   #define IGC_I225_PHPM          0x00E14  /* I225 PHY Power Management */
>>
>>   /* Internal Packet Buffer Size Registers */
>> --
>> 2.11.0
>>
>> _______________________________________________
>> Intel-wired-lan mailing list
>> Intel-wired-lan at osuosl.org
>> https://lists.osuosl.org/mailman/listinfo/intel-wired-lan


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Intel-wired-lan] [PATCH v1 1/1] igc: Remove copper fiber switch control
  2020-03-03  0:44   ` Neftin, Sasha
@ 2020-03-03 16:00     ` Alexander Duyck
  2020-03-03 16:53       ` Neftin, Sasha
  0 siblings, 1 reply; 5+ messages in thread
From: Alexander Duyck @ 2020-03-03 16:00 UTC (permalink / raw)
  To: intel-wired-lan

On Mon, Mar 2, 2020 at 4:44 PM Neftin, Sasha <sasha.neftin@intel.com> wrote:
>
> On 3/2/2020 13:26, Alexander Duyck wrote:
> > On Mon, Mar 2, 2020 at 12:23 PM Sasha Neftin <sasha.neftin@intel.com> wrote:
> >>
> >> i225 device support copper mode only
> >> PHY signal detect indication for copper fiber switch
> >> not applicable to i225 part
> >>
> >> Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>
> >
> > So there are a couple issues with this patch.
> >
> > All the changes in igc_ethtool.c are broken at this point. Once a
> > register is defined in regs_buff you cannot change it. Otherwise you
> > cannot debug this in the future. You would be better off just skipping
> > the register that you were storing CONNSW and let it default to zero
> > instead of doing all of the shifting you are doing. You can just skip
> > over the register in the dump in ethtool assuming there is even a file
> > for the device that hasbeen added.
> >
> This change not affected igc_ethtool.c behavior. I see the same behavior
> on my setup.
> Actually ethtool --register-dump not called (as properly).get_regs
> callback from igc_ethtool.c. This is not related to this patch and I
> need investigate and fix it.
> ethtool --register-dump <adapter> show me row generic data. Data is
> really from i225 registers, but not parcered as for other drivers.
>

Right. It isn't implemented yet, but you don't want to break it. The
logic for the register dump assumes the register locations are fixed.
So once you released this the first time you cannot move the registers
around. You can drop registers or add registers, but once they are in
the list they are permanently in that position. If you don't do that
you will never be able to decode the data.

- Alex

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Intel-wired-lan] [PATCH v1 1/1] igc: Remove copper fiber switch control
  2020-03-03 16:00     ` Alexander Duyck
@ 2020-03-03 16:53       ` Neftin, Sasha
  0 siblings, 0 replies; 5+ messages in thread
From: Neftin, Sasha @ 2020-03-03 16:53 UTC (permalink / raw)
  To: intel-wired-lan

On 3/3/2020 08:00, Alexander Duyck wrote:
> On Mon, Mar 2, 2020 at 4:44 PM Neftin, Sasha <sasha.neftin@intel.com> wrote:
>>
>> On 3/2/2020 13:26, Alexander Duyck wrote:
>>> On Mon, Mar 2, 2020 at 12:23 PM Sasha Neftin <sasha.neftin@intel.com> wrote:
>>>>
>>>> i225 device support copper mode only
>>>> PHY signal detect indication for copper fiber switch
>>>> not applicable to i225 part
>>>>
>>>> Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>
>>>
>>> So there are a couple issues with this patch.
>>>
>>> All the changes in igc_ethtool.c are broken at this point. Once a
>>> register is defined in regs_buff you cannot change it. Otherwise you
>>> cannot debug this in the future. You would be better off just skipping
>>> the register that you were storing CONNSW and let it default to zero
>>> instead of doing all of the shifting you are doing. You can just skip
>>> over the register in the dump in ethtool assuming there is even a file
>>> for the device that hasbeen added.
>>>
>> This change not affected igc_ethtool.c behavior. I see the same behavior
>> on my setup.
>> Actually ethtool --register-dump not called (as properly).get_regs
>> callback from igc_ethtool.c. This is not related to this patch and I
>> need investigate and fix it.
>> ethtool --register-dump <adapter> show me row generic data. Data is
>> really from i225 registers, but not parcered as for other drivers.
>>
> 
> Right. It isn't implemented yet, but you don't want to break it. The
> logic for the register dump assumes the register locations are fixed.
> So once you released this the first time you cannot move the registers
> around. You can drop registers or add registers, but once they are in
> the list they are permanently in that position. If you don't do that
> you will never be able to decode the data.
> 
ok. I will re-send v2 and leave igc_ethtool.c no changes at this point.
Sasha
> - Alex
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-03-03 16:53 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-02 20:23 [Intel-wired-lan] [PATCH v1 1/1] igc: Remove copper fiber switch control Sasha Neftin
2020-03-02 21:26 ` Alexander Duyck
2020-03-03  0:44   ` Neftin, Sasha
2020-03-03 16:00     ` Alexander Duyck
2020-03-03 16:53       ` Neftin, Sasha

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.