net: qcom/emac: rename emac_phy to emac_sgmii and move it
Subsystems (3)
PATCH 1/1 net: qcom/emac: rename emac_phy to emac_sgmii and move it
The EMAC has an internal PHY that is often called the "SGMII". This SGMII is also connected to an external PHY, which is managed by phylib. These dual PHYs often cause confusion. In this case, the data structure for managing the SGMII was mis-named and located in the wrong header file.
Structure emac_phy is renamed to emac_sgmii to clearly indicate it applies to the internal PHY only. It also also moved from emac_phy.h (which supports the external PHY) to emac_sgmii.h (where it belongs).
To keep the changes minimal, only the structure name is changed, not the names of any variables of that type.
--- drivers/net/ethernet/qualcomm/emac/emac-phy.c | 2 -- drivers/net/ethernet/qualcomm/emac/emac-phy.h | 13 ------------- drivers/net/ethernet/qualcomm/emac/emac-sgmii-fsm9900.c | 2 +- drivers/net/ethernet/qualcomm/emac/emac-sgmii-qdf2400.c | 2 +- drivers/net/ethernet/qualcomm/emac/emac-sgmii-qdf2432.c | 2 +- drivers/net/ethernet/qualcomm/emac/emac-sgmii.c | 8 ++++---- drivers/net/ethernet/qualcomm/emac/emac-sgmii.h | 13 +++++++++++++ drivers/net/ethernet/qualcomm/emac/emac.c | 2 +- drivers/net/ethernet/qualcomm/emac/emac.h | 3 ++- 9 files changed, 23 insertions(+), 24 deletions(-)
drivers/net/ethernet/qualcomm/emac/emac-phy.c +0 -2
@@ -22,8 +22,6 @@#include <linux/acpi.h> #include "emac.h" #include "emac-mac.h" -#include "emac-phy.h" -#include "emac-sgmii.h" /* EMAC base register offsets */ #define EMAC_MDIO_CTRL 0x001414
drivers/net/ethernet/qualcomm/emac/emac-phy.h +0 -13
@@ -13,19 +13,6 @@#ifndef _EMAC_PHY_H_#define _EMAC_PHY_H_ -typedef int (*emac_sgmii_initialize )(struct emac_adapter *adpt); - -/** emac_phy - internal emac phy -* @base base address -* @digital per-lane digital block -* @initialize initialization function -*/ -struct emac_phy { -void __iomem *base; -void __iomem *digital; -emac_sgmii_initialize initialize; -}; -struct emac_adapter ;int emac_phy_config (struct platform_device *pdev,struct emac_adapter *adpt);
drivers/net/ethernet/qualcomm/emac/emac-sgmii-fsm9900.c +1 -1
@@ -214,7 +214,7 @@ static void emac_reg_write_all(void __iomem *base,int emac_sgmii_init_fsm9900 (struct emac_adapter *adpt) { -struct emac_phy *phy = &adpt->phy; +struct emac_sgmii *phy = &adpt->phy;unsigned int i; emac_reg_write_all(phy->base, physical_coding_sublayer_programming,
drivers/net/ethernet/qualcomm/emac/emac-sgmii-qdf2400.c +1 -1
@@ -174,7 +174,7 @@ static void emac_reg_write_all(void __iomem *base,int emac_sgmii_init_qdf2400 (struct emac_adapter *adpt) { -struct emac_phy *phy = &adpt->phy; +struct emac_sgmii *phy = &adpt->phy;void __iomem *phy_regs = phy->base;void __iomem *laned = phy->digital;unsigned int i;
drivers/net/ethernet/qualcomm/emac/emac-sgmii-qdf2432.c +1 -1
@@ -167,7 +167,7 @@ static void emac_reg_write_all(void __iomem *base,int emac_sgmii_init_qdf2432 (struct emac_adapter *adpt) { -struct emac_phy *phy = &adpt->phy; +struct emac_sgmii *phy = &adpt->phy;void __iomem *phy_regs = phy->base;void __iomem *laned = phy->digital;unsigned int i;
drivers/net/ethernet/qualcomm/emac/emac-sgmii.c +4 -4
@@ -50,7 +50,7 @@static int emac_sgmii_link_init (struct emac_adapter *adpt) {struct phy_device *phydev = adpt->phydev; -struct emac_phy *phy = &adpt->phy; +struct emac_sgmii *phy = &adpt->phy;u32 val; val =readl (phy->base +EMAC_SGMII_PHY_AUTONEG_CFG2 );
@@ -89,7 +89,7 @@ static int emac_sgmii_link_init(struct emac_adapter *adpt)static int emac_sgmii_irq_clear (struct emac_adapter *adpt,u32 irq_bits) { -struct emac_phy *phy = &adpt->phy; +struct emac_sgmii *phy = &adpt->phy;u32 status;writel_relaxed (irq_bits, phy->base +EMAC_SGMII_PHY_INTERRUPT_CLEAR );
@@ -123,7 +123,7 @@ static int emac_sgmii_irq_clear(struct emac_adapter *adpt, u32 irq_bits)static void emac_sgmii_reset_prepare (struct emac_adapter *adpt) { -struct emac_phy *phy = &adpt->phy; +struct emac_sgmii *phy = &adpt->phy;u32 val;/* Reset PHY */
@@ -217,7 +217,7 @@ static int emac_sgmii_acpi_match(struct device *dev, void *data)int emac_sgmii_config (struct platform_device *pdev,struct emac_adapter *adpt) {struct platform_device *sgmii_pdev =NULL ; -struct emac_phy *phy = &adpt->phy; +struct emac_sgmii *phy = &adpt->phy;struct resource *res;int ret;
drivers/net/ethernet/qualcomm/emac/emac-sgmii.h +13 -0
@@ -16,6 +16,19 @@struct emac_adapter ;struct platform_device ; +typedef int (*emac_sgmii_initialize )(struct emac_adapter *adpt); + +/** emac_sgmii - internal emac phy +* @base base address +* @digital per-lane digital block +* @initialize initialization function +*/ +struct emac_sgmii { +void __iomem *base; +void __iomem *digital; +emac_sgmii_initialize initialize; +}; +int emac_sgmii_config (struct platform_device *pdev,struct emac_adapter *adpt);void emac_sgmii_reset (struct emac_adapter *adpt);
drivers/net/ethernet/qualcomm/emac/emac.c +1 -1
@@ -602,7 +602,7 @@ static int emac_probe(struct platform_device *pdev) {struct net_device *netdev;struct emac_adapter *adpt; -struct emac_phy *phy; +struct emac_sgmii *phy;u16 devid, revid;u32 reg;int ret;
drivers/net/ethernet/qualcomm/emac/emac.h +2 -1
@@ -19,6 +19,7 @@#include <linux/platform_device.h> #include "emac-mac.h" #include "emac-phy.h" +#include "emac-sgmii.h" /* EMAC base register offsets */ #define EMAC_DMA_MAS_CTRL 0x001400
@@ -291,7 +292,7 @@ struct emac_adapter {void __iomem *base;void __iomem *csr; -struct emac_phy phy; +struct emac_sgmii phy;struct emac_stats stats;struct emac_irq irq;
Signature · 3 lines
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
PATCH v2 1/1 net: qcom/emac: claim the irq only when the device is opened
During reset, functions emac_mac_down() and emac_mac_up() are called, so we don't want to free and claim the IRQ unnecessarily. Move those operations to open/close.
---
Notes:
v2: keep synchronize_irq call where it is
drivers/net/ethernet/qualcomm/emac/emac-mac.c | 13 ------------- drivers/net/ethernet/qualcomm/emac/emac.c | 11 +++++++++++ drivers/net/ethernet/qualcomm/emac/emac.h | 1 - 3 files changed, 11 insertions(+), 14 deletions(-)
drivers/net/ethernet/qualcomm/emac/emac-mac.c +0 -13
@@ -314,8 +314,6 @@ struct emac_skb_cb { RX_PKT_INT2 |\ RX_PKT_INT3) -#define EMAC_MAC_IRQ_RES "core0" -void emac_mac_multicast_addr_set (struct emac_adapter *adpt,u8 *addr) {u32 crc32, bit, reg, mta;
@@ -977,26 +975,16 @@ static void emac_adjust_link(struct net_device *netdev)int emac_mac_up (struct emac_adapter *adpt) {struct net_device *netdev = adpt->netdev; -struct emac_irq *irq = &adpt->irq;int ret;emac_mac_rx_tx_ring_reset_all (adpt);emac_mac_config (adpt); - - ret =request_irq (irq->irq, emac_isr,0 ,EMAC_MAC_IRQ_RES , irq); -if (ret) { -netdev_err (adpt->netdev,"could not request %s irq\n" , -EMAC_MAC_IRQ_RES ); -return ret; - } -emac_mac_rx_descs_refill (adpt, &adpt->rx_q); ret =phy_connect_direct (netdev, adpt->phydev, emac_adjust_link,PHY_INTERFACE_MODE_SGMII );if (ret) {netdev_err (adpt->netdev,"could not connect phy\n" ); -free_irq (irq->irq, irq);return ret; }
@@ -1030,7 +1018,6 @@ void emac_mac_down(struct emac_adapter *adpt)writel (DIS_INT , adpt->base +EMAC_INT_STATUS );writel (0 , adpt->base +EMAC_INT_MASK );synchronize_irq (adpt->irq.irq); -free_irq (adpt->irq.irq, &adpt->irq);phy_disconnect (adpt->phydev);
drivers/net/ethernet/qualcomm/emac/emac.c +11 -0
@@ -256,18 +256,27 @@ static int emac_change_mtu(struct net_device *netdev, int new_mtu)static int emac_open (struct net_device *netdev) {struct emac_adapter *adpt =netdev_priv (netdev); +struct emac_irq *irq = &adpt->irq;int ret; + ret =request_irq (irq->irq, emac_isr,0 ,"emac-core0" , irq); +if (ret) { +netdev_err (adpt->netdev,"could not request emac-core0 irq\n" ); +return ret; + } +/* allocate rx/tx dma buffer & descriptors */ ret =emac_mac_rx_tx_rings_alloc_all (adpt);if (ret) {netdev_err (adpt->netdev,"error allocating rx/tx rings\n" ); +free_irq (irq->irq, irq);return ret; } ret =emac_mac_up (adpt);if (ret) {emac_mac_rx_tx_rings_free_all (adpt); +free_irq (irq->irq, irq);return ret; }
@@ -286,6 +295,8 @@ static int emac_close(struct net_device *netdev)emac_mac_down (adpt);emac_mac_rx_tx_rings_free_all (adpt); +free_irq (adpt->irq.irq, &adpt->irq); +mutex_unlock (&adpt->reset_lock);return 0 ;
drivers/net/ethernet/qualcomm/emac/emac.h +0 -1
@@ -331,7 +331,6 @@ struct emac_adapter {int emac_reinit_locked (struct emac_adapter *adpt);void emac_reg_update32 (void __iomem *addr,u32 mask,u32 val); -irqreturn_t emac_isr (int irq,void *data);void emac_set_ethtool_ops (struct net_device *netdev);void emac_update_hw_stats (struct emac_adapter *adpt);
Signature · 3 lines
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
Re: [PATCH] [net-next][v2] net: qcom/emac: claim the irq only when the device is opened
Hi Timur,
Quoted 109 lines · Timur Tabi
During reset, functions
emac_mac_down()andemac_mac_up()are called, so we don't want to free and claim the IRQ unnecessarily. Move those operations to open/close.Signed-off-by Timur Tabi <[email protected]>---
Notes:
v2: keepsynchronize_irqcall where it isdrivers/net/ethernet/qualcomm/emac/emac-mac.c | 13 ------------- drivers/net/ethernet/qualcomm/emac/emac.c | 11 +++++++++++ drivers/net/ethernet/qualcomm/emac/emac.h | 1 - 3 files changed, 11 insertions(+), 14 deletions(-)drivers/net/ethernet/qualcomm/emac/emac-mac.c +0
-13@@ -314,8 +314,6 @@ struct emac_skb_cb { RX_PKT_INT2 |\ RX_PKT_INT3) -#define EMAC_MAC_IRQ_RES "core0" -void emac_mac_multicast_addr_set (struct emac_adapter *adpt,u8 *addr) {u32 crc32, bit, reg, mta;@@ -977,26 +975,16 @@ static void emac_adjust_link(struct net_device *netdev)int emac_mac_up (struct emac_adapter *adpt) {struct net_device *netdev = adpt->netdev; -struct emac_irq *irq = &adpt->irq;int ret;emac_mac_rx_tx_ring_reset_all (adpt);emac_mac_config (adpt); - - ret =request_irq (irq->irq, emac_isr,0 ,EMAC_MAC_IRQ_RES , irq); -if (ret) { -netdev_err (adpt->netdev,"could not request %s irq\n" , -EMAC_MAC_IRQ_RES ); -return ret; - } -emac_mac_rx_descs_refill (adpt, &adpt->rx_q); ret =phy_connect_direct (netdev, adpt->phydev, emac_adjust_link,PHY_INTERFACE_MODE_SGMII );if (ret) {netdev_err (adpt->netdev,"could not connect phy\n" ); -free_irq (irq->irq, irq);return ret; }@@ -1030,7 +1018,6 @@ void emac_mac_down(struct emac_adapter *adpt)writel (DIS_INT , adpt->base +EMAC_INT_STATUS );writel (0 , adpt->base +EMAC_INT_MASK );synchronize_irq (adpt->irq.irq); -free_irq (adpt->irq.irq, &adpt->irq);phy_disconnect (adpt->phydev);drivers/net/ethernet/qualcomm/emac/emac.c +11
-0@@ -256,18 +256,27 @@ static int emac_change_mtu(struct net_device *netdev, int new_mtu)static int emac_open (struct net_device *netdev) {struct emac_adapter *adpt =netdev_priv (netdev); +struct emac_irq *irq = &adpt->irq;int ret; + ret =request_irq (irq->irq, emac_isr,0 ,"emac-core0" , irq); +if (ret) { +netdev_err (adpt->netdev,"could not request emac-core0 irq\n" ); +return ret; + } +/* allocate rx/tx dma buffer & descriptors */ ret =emac_mac_rx_tx_rings_alloc_all (adpt);if (ret) {netdev_err (adpt->netdev,"error allocating rx/tx rings\n" ); +free_irq (irq->irq, irq);return ret; } ret =emac_mac_up (adpt);if (ret) {emac_mac_rx_tx_rings_free_all (adpt); +free_irq (irq->irq, irq);return ret; }@@ -286,6 +295,8 @@ static int emac_close(struct net_device *netdev)emac_mac_down (adpt);emac_mac_rx_tx_rings_free_all (adpt); +free_irq (adpt->irq.irq, &adpt->irq); +mutex_unlock (&adpt->reset_lock);return 0 ;drivers/net/ethernet/qualcomm/emac/emac.h +0
-0
drivers/net/ethernet/qualcomm/emac/emac.h struct emac_adapter { · line 336
Quoted 7 lines
drivers/net/ethernet/qualcomm/emac/emac.h +0
-1@@ -331,7 +331,6 @@ struct emac_adapter {int emac_reinit_locked (struct emac_adapter *adpt);void emac_reg_update32 (void __iomem *addr,u32 mask,u32 val); -irqreturn_t emac_isr (int irq,void *data);void emac_set_ethtool_ops (struct net_device *netdev);void emac_update_hw_stats (struct emac_adapter *adpt);
looks good now.
Regards,
Lino
Re: [PATCH] [net-next][v2] net: qcom/emac: claim the irq only when the device is opened
In reply to Timur TabiFrom: Timur Tabi <[email protected]>
Date: Fri, 20 Jan 2017 17:21:04 -0600
Quoted 9 lines
During reset, functions
emac_mac_down()andemac_mac_up()are called, so we don't want to free and claim the IRQ unnecessarily. Move those operations to open/close.Signed-off-by Timur Tabi <[email protected]>---
Notes:
v2: keepsynchronize_irqcall where it is
Applied.
David Miller
AppliedFrom: Timur Tabi <[email protected]>
Date: Fri, 20 Jan 2017 17:21:03 -0600
Quoted 5 lines
The EMAC has an internal PHY that is often called the "SGMII". This SGMII is also connected to an external PHY, which is managed by phylib. These dual PHYs often cause confusion. In this case, the data structure for managing the SGMII was mis-named and located in the wrong header file.
Quoted 8 lines
Structure
emac_phyis renamed toemac_sgmiito clearly indicate it applies to the internal PHY only. It also also moved fromemac_phy.h(which supports the external PHY) toemac_sgmii.h(where it belongs).To keep the changes minimal, only the structure name is changed, not the names of any variables of that type.
Signed-off-by Timur Tabi <[email protected]>
Applied, thanks.