Commit ceb69499 authored by Giuseppe CAVALLARO's avatar Giuseppe CAVALLARO Committed by David S. Miller

stmmac: code tidy-up

This patch tidies up the code. I have run Linden (and verified with checkpatch)
many part of the driver trying to reorganize some sections respecting the
codying-style rules in the points where it was not done.
Signed-off-by: default avatarGiuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 32ceabca
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum) static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
{ {
struct stmmac_priv *priv = (struct stmmac_priv *) p; struct stmmac_priv *priv = (struct stmmac_priv *)p;
unsigned int txsize = priv->dma_tx_size; unsigned int txsize = priv->dma_tx_size;
unsigned int entry = priv->cur_tx % txsize; unsigned int entry = priv->cur_tx % txsize;
struct dma_desc *desc = priv->dma_tx + entry; struct dma_desc *desc = priv->dma_tx + entry;
...@@ -103,7 +103,7 @@ static void stmmac_init_dma_chain(void *des, dma_addr_t phy_addr, ...@@ -103,7 +103,7 @@ static void stmmac_init_dma_chain(void *des, dma_addr_t phy_addr,
dma_addr_t dma_phy = phy_addr; dma_addr_t dma_phy = phy_addr;
if (extend_desc) { if (extend_desc) {
struct dma_extended_desc *p = (struct dma_extended_desc *) des; struct dma_extended_desc *p = (struct dma_extended_desc *)des;
for (i = 0; i < (size - 1); i++) { for (i = 0; i < (size - 1); i++) {
dma_phy += sizeof(struct dma_extended_desc); dma_phy += sizeof(struct dma_extended_desc);
p->basic.des3 = (unsigned int)dma_phy; p->basic.des3 = (unsigned int)dma_phy;
...@@ -112,7 +112,7 @@ static void stmmac_init_dma_chain(void *des, dma_addr_t phy_addr, ...@@ -112,7 +112,7 @@ static void stmmac_init_dma_chain(void *des, dma_addr_t phy_addr,
p->basic.des3 = (unsigned int)phy_addr; p->basic.des3 = (unsigned int)phy_addr;
} else { } else {
struct dma_desc *p = (struct dma_desc *) des; struct dma_desc *p = (struct dma_desc *)des;
for (i = 0; i < (size - 1); i++) { for (i = 0; i < (size - 1); i++) {
dma_phy += sizeof(struct dma_desc); dma_phy += sizeof(struct dma_desc);
p->des3 = (unsigned int)dma_phy; p->des3 = (unsigned int)dma_phy;
...@@ -133,7 +133,7 @@ static void stmmac_refill_desc3(void *priv_ptr, struct dma_desc *p) ...@@ -133,7 +133,7 @@ static void stmmac_refill_desc3(void *priv_ptr, struct dma_desc *p)
*/ */
p->des3 = (unsigned int)(priv->dma_rx_phy + p->des3 = (unsigned int)(priv->dma_rx_phy +
(((priv->dirty_rx) + 1) % (((priv->dirty_rx) + 1) %
priv->dma_rx_size) * priv->dma_rx_size) *
sizeof(struct dma_desc)); sizeof(struct dma_desc));
} }
...@@ -148,8 +148,8 @@ static void stmmac_clean_desc3(void *priv_ptr, struct dma_desc *p) ...@@ -148,8 +148,8 @@ static void stmmac_clean_desc3(void *priv_ptr, struct dma_desc *p)
*/ */
p->des3 = (unsigned int)(priv->dma_tx_phy + p->des3 = (unsigned int)(priv->dma_tx_phy +
(((priv->dirty_tx + 1) % (((priv->dirty_tx + 1) %
priv->dma_tx_size) * priv->dma_tx_size) *
sizeof(struct dma_desc))); sizeof(struct dma_desc)));
} }
const struct stmmac_chain_mode_ops chain_mode_ops = { const struct stmmac_chain_mode_ops chain_mode_ops = {
......
...@@ -174,37 +174,37 @@ struct stmmac_extra_stats { ...@@ -174,37 +174,37 @@ struct stmmac_extra_stats {
#define STMMAC_PCS_TBI (1 << 2) #define STMMAC_PCS_TBI (1 << 2)
#define STMMAC_PCS_RTBI (1 << 3) #define STMMAC_PCS_RTBI (1 << 3)
#define SF_DMA_MODE 1 /* DMA STORE-AND-FORWARD Operation Mode */ #define SF_DMA_MODE 1 /* DMA STORE-AND-FORWARD Operation Mode */
/* DAM HW feature register fields */ /* DAM HW feature register fields */
#define DMA_HW_FEAT_MIISEL 0x00000001 /* 10/100 Mbps Support */ #define DMA_HW_FEAT_MIISEL 0x00000001 /* 10/100 Mbps Support */
#define DMA_HW_FEAT_GMIISEL 0x00000002 /* 1000 Mbps Support */ #define DMA_HW_FEAT_GMIISEL 0x00000002 /* 1000 Mbps Support */
#define DMA_HW_FEAT_HDSEL 0x00000004 /* Half-Duplex Support */ #define DMA_HW_FEAT_HDSEL 0x00000004 /* Half-Duplex Support */
#define DMA_HW_FEAT_EXTHASHEN 0x00000008 /* Expanded DA Hash Filter */ #define DMA_HW_FEAT_EXTHASHEN 0x00000008 /* Expanded DA Hash Filter */
#define DMA_HW_FEAT_HASHSEL 0x00000010 /* HASH Filter */ #define DMA_HW_FEAT_HASHSEL 0x00000010 /* HASH Filter */
#define DMA_HW_FEAT_ADDMACADRSEL 0x00000020 /* Multiple MAC Addr Reg */ #define DMA_HW_FEAT_ADDMAC 0x00000020 /* Multiple MAC Addr Reg */
#define DMA_HW_FEAT_PCSSEL 0x00000040 /* PCS registers */ #define DMA_HW_FEAT_PCSSEL 0x00000040 /* PCS registers */
#define DMA_HW_FEAT_L3L4FLTREN 0x00000080 /* Layer 3 & Layer 4 Feature */ #define DMA_HW_FEAT_L3L4FLTREN 0x00000080 /* Layer 3 & Layer 4 Feature */
#define DMA_HW_FEAT_SMASEL 0x00000100 /* SMA(MDIO) Interface */ #define DMA_HW_FEAT_SMASEL 0x00000100 /* SMA(MDIO) Interface */
#define DMA_HW_FEAT_RWKSEL 0x00000200 /* PMT Remote Wakeup */ #define DMA_HW_FEAT_RWKSEL 0x00000200 /* PMT Remote Wakeup */
#define DMA_HW_FEAT_MGKSEL 0x00000400 /* PMT Magic Packet */ #define DMA_HW_FEAT_MGKSEL 0x00000400 /* PMT Magic Packet */
#define DMA_HW_FEAT_MMCSEL 0x00000800 /* RMON Module */ #define DMA_HW_FEAT_MMCSEL 0x00000800 /* RMON Module */
#define DMA_HW_FEAT_TSVER1SEL 0x00001000 /* Only IEEE 1588-2002 Timestamp */ #define DMA_HW_FEAT_TSVER1SEL 0x00001000 /* Only IEEE 1588-2002 */
#define DMA_HW_FEAT_TSVER2SEL 0x00002000 /* IEEE 1588-2008 Adv Timestamp */ #define DMA_HW_FEAT_TSVER2SEL 0x00002000 /* IEEE 1588-2008 PTPv2 */
#define DMA_HW_FEAT_EEESEL 0x00004000 /* Energy Efficient Ethernet */ #define DMA_HW_FEAT_EEESEL 0x00004000 /* Energy Efficient Ethernet */
#define DMA_HW_FEAT_AVSEL 0x00008000 /* AV Feature */ #define DMA_HW_FEAT_AVSEL 0x00008000 /* AV Feature */
#define DMA_HW_FEAT_TXCOESEL 0x00010000 /* Checksum Offload in Tx */ #define DMA_HW_FEAT_TXCOESEL 0x00010000 /* Checksum Offload in Tx */
#define DMA_HW_FEAT_RXTYP1COE 0x00020000 /* IP csum Offload(Type 1) in Rx */ #define DMA_HW_FEAT_RXTYP1COE 0x00020000 /* IP COE (Type 1) in Rx */
#define DMA_HW_FEAT_RXTYP2COE 0x00040000 /* IP csum Offload(Type 2) in Rx */ #define DMA_HW_FEAT_RXTYP2COE 0x00040000 /* IP COE (Type 2) in Rx */
#define DMA_HW_FEAT_RXFIFOSIZE 0x00080000 /* Rx FIFO > 2048 Bytes */ #define DMA_HW_FEAT_RXFIFOSIZE 0x00080000 /* Rx FIFO > 2048 Bytes */
#define DMA_HW_FEAT_RXCHCNT 0x00300000 /* No. of additional Rx Channels */ #define DMA_HW_FEAT_RXCHCNT 0x00300000 /* No. additional Rx Channels */
#define DMA_HW_FEAT_TXCHCNT 0x00c00000 /* No. of additional Tx Channels */ #define DMA_HW_FEAT_TXCHCNT 0x00c00000 /* No. additional Tx Channels */
#define DMA_HW_FEAT_ENHDESSEL 0x01000000 /* Alternate (Enhanced Descriptor) */ #define DMA_HW_FEAT_ENHDESSEL 0x01000000 /* Alternate Descriptor */
#define DMA_HW_FEAT_INTTSEN 0x02000000 /* Timestamping with Internal /* Timestamping with Internal System Time */
System Time */ #define DMA_HW_FEAT_INTTSEN 0x02000000
#define DMA_HW_FEAT_FLEXIPPSEN 0x04000000 /* Flexible PPS Output */ #define DMA_HW_FEAT_FLEXIPPSEN 0x04000000 /* Flexible PPS Output */
#define DMA_HW_FEAT_SAVLANINS 0x08000000 /* Source Addr or VLAN Insertion */ #define DMA_HW_FEAT_SAVLANINS 0x08000000 /* Source Addr or VLAN */
#define DMA_HW_FEAT_ACTPHYIF 0x70000000 /* Active/selected PHY interface */ #define DMA_HW_FEAT_ACTPHYIF 0x70000000 /* Active/selected PHY iface */
#define DEFAULT_DMA_PBL 8 #define DEFAULT_DMA_PBL 8
/* Max/Min RI Watchdog Timer count value */ /* Max/Min RI Watchdog Timer count value */
...@@ -216,7 +216,8 @@ struct stmmac_extra_stats { ...@@ -216,7 +216,8 @@ struct stmmac_extra_stats {
#define STMMAC_TX_MAX_FRAMES 256 #define STMMAC_TX_MAX_FRAMES 256
#define STMMAC_TX_FRAMES 64 #define STMMAC_TX_FRAMES 64
enum rx_frame_status { /* IPC status */ /* Rx IPC status */
enum rx_frame_status {
good_frame = 0, good_frame = 0,
discard_frame = 1, discard_frame = 1,
csum_none = 2, csum_none = 2,
...@@ -261,9 +262,9 @@ struct dma_features { ...@@ -261,9 +262,9 @@ struct dma_features {
unsigned int pmt_remote_wake_up; unsigned int pmt_remote_wake_up;
unsigned int pmt_magic_frame; unsigned int pmt_magic_frame;
unsigned int rmon; unsigned int rmon;
/* IEEE 1588-2002*/ /* IEEE 1588-2002 */
unsigned int time_stamp; unsigned int time_stamp;
/* IEEE 1588-2008*/ /* IEEE 1588-2008 */
unsigned int atime_stamp; unsigned int atime_stamp;
/* 802.3az - Energy-Efficient Ethernet (EEE) */ /* 802.3az - Energy-Efficient Ethernet (EEE) */
unsigned int eee; unsigned int eee;
...@@ -276,7 +277,7 @@ struct dma_features { ...@@ -276,7 +277,7 @@ struct dma_features {
/* TX and RX number of channels */ /* TX and RX number of channels */
unsigned int number_rx_channel; unsigned int number_rx_channel;
unsigned int number_tx_channel; unsigned int number_tx_channel;
/* Alternate (enhanced) DESC mode*/ /* Alternate (enhanced) DESC mode */
unsigned int enh_desc; unsigned int enh_desc;
}; };
...@@ -344,7 +345,7 @@ struct stmmac_desc_ops { ...@@ -344,7 +345,7 @@ struct stmmac_desc_ops {
/* get tx timestamp status */ /* get tx timestamp status */
int (*get_tx_timestamp_status) (struct dma_desc *p); int (*get_tx_timestamp_status) (struct dma_desc *p);
/* get timestamp value */ /* get timestamp value */
u64 (*get_timestamp) (void *desc, u32 ats); u64(*get_timestamp) (void *desc, u32 ats);
/* get rx timestamp status */ /* get rx timestamp status */
int (*get_rx_timestamp_status) (void *desc, u32 ats); int (*get_rx_timestamp_status) (void *desc, u32 ats);
}; };
...@@ -378,7 +379,7 @@ struct stmmac_dma_ops { ...@@ -378,7 +379,7 @@ struct stmmac_dma_ops {
struct stmmac_ops { struct stmmac_ops {
/* MAC core initialization */ /* MAC core initialization */
void (*core_init) (void __iomem *ioaddr) ____cacheline_aligned; void (*core_init) (void __iomem *ioaddr);
/* Enable and verify that the IPC module is supported */ /* Enable and verify that the IPC module is supported */
int (*rx_ipc) (void __iomem *ioaddr); int (*rx_ipc) (void __iomem *ioaddr);
/* Dump MAC registers */ /* Dump MAC registers */
...@@ -410,10 +411,10 @@ struct stmmac_hwtimestamp { ...@@ -410,10 +411,10 @@ struct stmmac_hwtimestamp {
void (*config_hw_tstamping) (void __iomem *ioaddr, u32 data); void (*config_hw_tstamping) (void __iomem *ioaddr, u32 data);
void (*config_sub_second_increment) (void __iomem *ioaddr); void (*config_sub_second_increment) (void __iomem *ioaddr);
int (*init_systime) (void __iomem *ioaddr, u32 sec, u32 nsec); int (*init_systime) (void __iomem *ioaddr, u32 sec, u32 nsec);
int (*config_addend)(void __iomem *ioaddr, u32 addend); int (*config_addend) (void __iomem *ioaddr, u32 addend);
int (*adjust_systime)(void __iomem *ioaddr, u32 sec, u32 nsec, int (*adjust_systime) (void __iomem *ioaddr, u32 sec, u32 nsec,
int add_sub); int add_sub);
u64 (*get_systime)(void __iomem *ioaddr); u64(*get_systime) (void __iomem *ioaddr);
}; };
struct mac_link { struct mac_link {
...@@ -446,11 +447,11 @@ struct stmmac_chain_mode_ops { ...@@ -446,11 +447,11 @@ struct stmmac_chain_mode_ops {
}; };
struct mac_device_info { struct mac_device_info {
const struct stmmac_ops *mac; const struct stmmac_ops *mac;
const struct stmmac_desc_ops *desc; const struct stmmac_desc_ops *desc;
const struct stmmac_dma_ops *dma; const struct stmmac_dma_ops *dma;
const struct stmmac_ring_mode_ops *ring; const struct stmmac_ring_mode_ops *ring;
const struct stmmac_chain_mode_ops *chain; const struct stmmac_chain_mode_ops *chain;
const struct stmmac_hwtimestamp *ptp; const struct stmmac_hwtimestamp *ptp;
struct mii_regs mii; /* MII register Addresses */ struct mii_regs mii; /* MII register Addresses */
struct mac_link link; struct mac_link link;
......
...@@ -192,9 +192,9 @@ struct dma_extended_desc { ...@@ -192,9 +192,9 @@ struct dma_extended_desc {
u32 reserved; u32 reserved;
} etx; } etx;
} des4; } des4;
unsigned int des5; /* Reserved */ unsigned int des5; /* Reserved */
unsigned int des6; /* Tx/Rx Timestamp Low */ unsigned int des6; /* Tx/Rx Timestamp Low */
unsigned int des7; /* Tx/Rx Timestamp High */ unsigned int des7; /* Tx/Rx Timestamp High */
}; };
/* Transmit checksum insertion control */ /* Transmit checksum insertion control */
......
...@@ -117,8 +117,7 @@ static inline void ndesc_rx_set_on_chain(struct dma_desc *p, int end) ...@@ -117,8 +117,7 @@ static inline void ndesc_rx_set_on_chain(struct dma_desc *p, int end)
p->des01.rx.second_address_chained = 1; p->des01.rx.second_address_chained = 1;
} }
static inline void ndesc_tx_set_on_chain(struct dma_desc *p, int static inline void ndesc_tx_set_on_chain(struct dma_desc *p, int ring_size)
ring_size)
{ {
p->des01.tx.second_address_chained = 1; p->des01.tx.second_address_chained = 1;
} }
......
...@@ -99,18 +99,18 @@ enum power_event { ...@@ -99,18 +99,18 @@ enum power_event {
#define GMAC_S_R_GMII 0x000000d8 /* SGMII RGMII status */ #define GMAC_S_R_GMII 0x000000d8 /* SGMII RGMII status */
/* AN Configuration defines */ /* AN Configuration defines */
#define GMAC_AN_CTRL_RAN 0x00000200 /* Restart Auto-Negotiation */ #define GMAC_AN_CTRL_RAN 0x00000200 /* Restart Auto-Negotiation */
#define GMAC_AN_CTRL_ANE 0x00001000 /* Auto-Negotiation Enable */ #define GMAC_AN_CTRL_ANE 0x00001000 /* Auto-Negotiation Enable */
#define GMAC_AN_CTRL_ELE 0x00004000 /* External Loopback Enable */ #define GMAC_AN_CTRL_ELE 0x00004000 /* External Loopback Enable */
#define GMAC_AN_CTRL_ECD 0x00010000 /* Enable Comma Detect */ #define GMAC_AN_CTRL_ECD 0x00010000 /* Enable Comma Detect */
#define GMAC_AN_CTRL_LR 0x00020000 /* Lock to Reference */ #define GMAC_AN_CTRL_LR 0x00020000 /* Lock to Reference */
#define GMAC_AN_CTRL_SGMRAL 0x00040000 /* SGMII RAL Control */ #define GMAC_AN_CTRL_SGMRAL 0x00040000 /* SGMII RAL Control */
/* AN Status defines */ /* AN Status defines */
#define GMAC_AN_STATUS_LS 0x00000004 /* Link Status 0:down 1:up */ #define GMAC_AN_STATUS_LS 0x00000004 /* Link Status 0:down 1:up */
#define GMAC_AN_STATUS_ANA 0x00000008 /* Auto-Negotiation Ability */ #define GMAC_AN_STATUS_ANA 0x00000008 /* Auto-Negotiation Ability */
#define GMAC_AN_STATUS_ANC 0x00000020 /* Auto-Negotiation Complete */ #define GMAC_AN_STATUS_ANC 0x00000020 /* Auto-Negotiation Complete */
#define GMAC_AN_STATUS_ES 0x00000100 /* Extended Status */ #define GMAC_AN_STATUS_ES 0x00000100 /* Extended Status */
/* Register 54 (SGMII/RGMII status register) */ /* Register 54 (SGMII/RGMII status register) */
#define GMAC_S_R_GMII_LINK 0x8 #define GMAC_S_R_GMII_LINK 0x8
...@@ -127,8 +127,8 @@ enum power_event { ...@@ -127,8 +127,8 @@ enum power_event {
#define GMAC_ANE_PSE_SHIFT 7 #define GMAC_ANE_PSE_SHIFT 7
/* GMAC Configuration defines */ /* GMAC Configuration defines */
#define GMAC_CONTROL_TC 0x01000000 /* Transmit Conf. in RGMII/SGMII */ #define GMAC_CONTROL_TC 0x01000000 /* Transmit Conf. in RGMII/SGMII */
#define GMAC_CONTROL_WD 0x00800000 /* Disable Watchdog on receive */ #define GMAC_CONTROL_WD 0x00800000 /* Disable Watchdog on receive */
/* GMAC Configuration defines */ /* GMAC Configuration defines */
#define GMAC_CONTROL_TC 0x01000000 /* Transmit Conf. in RGMII/SGMII */ #define GMAC_CONTROL_TC 0x01000000 /* Transmit Conf. in RGMII/SGMII */
...@@ -141,19 +141,19 @@ enum inter_frame_gap { ...@@ -141,19 +141,19 @@ enum inter_frame_gap {
GMAC_CONTROL_IFG_80 = 0x00020000, GMAC_CONTROL_IFG_80 = 0x00020000,
GMAC_CONTROL_IFG_40 = 0x000e0000, GMAC_CONTROL_IFG_40 = 0x000e0000,
}; };
#define GMAC_CONTROL_DCRS 0x00010000 /* Disable carrier sense during tx */ #define GMAC_CONTROL_DCRS 0x00010000 /* Disable carrier sense */
#define GMAC_CONTROL_PS 0x00008000 /* Port Select 0:GMI 1:MII */ #define GMAC_CONTROL_PS 0x00008000 /* Port Select 0:GMI 1:MII */
#define GMAC_CONTROL_FES 0x00004000 /* Speed 0:10 1:100 */ #define GMAC_CONTROL_FES 0x00004000 /* Speed 0:10 1:100 */
#define GMAC_CONTROL_DO 0x00002000 /* Disable Rx Own */ #define GMAC_CONTROL_DO 0x00002000 /* Disable Rx Own */
#define GMAC_CONTROL_LM 0x00001000 /* Loop-back mode */ #define GMAC_CONTROL_LM 0x00001000 /* Loop-back mode */
#define GMAC_CONTROL_DM 0x00000800 /* Duplex Mode */ #define GMAC_CONTROL_DM 0x00000800 /* Duplex Mode */
#define GMAC_CONTROL_IPC 0x00000400 /* Checksum Offload */ #define GMAC_CONTROL_IPC 0x00000400 /* Checksum Offload */
#define GMAC_CONTROL_DR 0x00000200 /* Disable Retry */ #define GMAC_CONTROL_DR 0x00000200 /* Disable Retry */
#define GMAC_CONTROL_LUD 0x00000100 /* Link up/down */ #define GMAC_CONTROL_LUD 0x00000100 /* Link up/down */
#define GMAC_CONTROL_ACS 0x00000080 /* Automatic Pad/FCS Stripping */ #define GMAC_CONTROL_ACS 0x00000080 /* Auto Pad/FCS Stripping */
#define GMAC_CONTROL_DC 0x00000010 /* Deferral Check */ #define GMAC_CONTROL_DC 0x00000010 /* Deferral Check */
#define GMAC_CONTROL_TE 0x00000008 /* Transmitter Enable */ #define GMAC_CONTROL_TE 0x00000008 /* Transmitter Enable */
#define GMAC_CONTROL_RE 0x00000004 /* Receiver Enable */ #define GMAC_CONTROL_RE 0x00000004 /* Receiver Enable */
#define GMAC_CORE_INIT (GMAC_CONTROL_JD | GMAC_CONTROL_PS | GMAC_CONTROL_ACS | \ #define GMAC_CORE_INIT (GMAC_CONTROL_JD | GMAC_CONTROL_PS | GMAC_CONTROL_ACS | \
GMAC_CONTROL_JE | GMAC_CONTROL_BE) GMAC_CONTROL_JE | GMAC_CONTROL_BE)
...@@ -184,16 +184,16 @@ enum inter_frame_gap { ...@@ -184,16 +184,16 @@ enum inter_frame_gap {
#define DMA_BUS_MODE_SFT_RESET 0x00000001 /* Software Reset */ #define DMA_BUS_MODE_SFT_RESET 0x00000001 /* Software Reset */
#define DMA_BUS_MODE_DA 0x00000002 /* Arbitration scheme */ #define DMA_BUS_MODE_DA 0x00000002 /* Arbitration scheme */
#define DMA_BUS_MODE_DSL_MASK 0x0000007c /* Descriptor Skip Length */ #define DMA_BUS_MODE_DSL_MASK 0x0000007c /* Descriptor Skip Length */
#define DMA_BUS_MODE_DSL_SHIFT 2 /* (in DWORDS) */ #define DMA_BUS_MODE_DSL_SHIFT 2 /* (in DWORDS) */
/* Programmable burst length (passed thorugh platform)*/ /* Programmable burst length (passed thorugh platform)*/
#define DMA_BUS_MODE_PBL_MASK 0x00003f00 /* Programmable Burst Len */ #define DMA_BUS_MODE_PBL_MASK 0x00003f00 /* Programmable Burst Len */
#define DMA_BUS_MODE_PBL_SHIFT 8 #define DMA_BUS_MODE_PBL_SHIFT 8
#define DMA_BUS_MODE_ATDS 0x00000080 /* Alternate Descriptor Size */ #define DMA_BUS_MODE_ATDS 0x00000080 /* Alternate Descriptor Size */
enum rx_tx_priority_ratio { enum rx_tx_priority_ratio {
double_ratio = 0x00004000, /*2:1 */ double_ratio = 0x00004000, /* 2:1 */
triple_ratio = 0x00008000, /*3:1 */ triple_ratio = 0x00008000, /* 3:1 */
quadruple_ratio = 0x0000c000, /*4:1 */ quadruple_ratio = 0x0000c000, /* 4:1 */
}; };
#define DMA_BUS_MODE_FB 0x00010000 /* Fixed burst */ #define DMA_BUS_MODE_FB 0x00010000 /* Fixed burst */
...@@ -213,9 +213,10 @@ enum rx_tx_priority_ratio { ...@@ -213,9 +213,10 @@ enum rx_tx_priority_ratio {
#define DMA_BUS_FB 0x00010000 /* Fixed Burst */ #define DMA_BUS_FB 0x00010000 /* Fixed Burst */
/* DMA operation mode defines (start/stop tx/rx are placed in common header)*/ /* DMA operation mode defines (start/stop tx/rx are placed in common header)*/
#define DMA_CONTROL_DT 0x04000000 /* Disable Drop TCP/IP csum error */ /* Disable Drop TCP/IP csum error */
#define DMA_CONTROL_RSF 0x02000000 /* Receive Store and Forward */ #define DMA_CONTROL_DT 0x04000000
#define DMA_CONTROL_DFF 0x01000000 /* Disaable flushing */ #define DMA_CONTROL_RSF 0x02000000 /* Receive Store and Forward */
#define DMA_CONTROL_DFF 0x01000000 /* Disaable flushing */
/* Threshold for Activating the FC */ /* Threshold for Activating the FC */
enum rfa { enum rfa {
act_full_minus_1 = 0x00800000, act_full_minus_1 = 0x00800000,
...@@ -230,7 +231,7 @@ enum rfd { ...@@ -230,7 +231,7 @@ enum rfd {
deac_full_minus_3 = 0x00401000, deac_full_minus_3 = 0x00401000,
deac_full_minus_4 = 0x00401800, deac_full_minus_4 = 0x00401800,
}; };
#define DMA_CONTROL_TSF 0x00200000 /* Transmit Store and Forward */ #define DMA_CONTROL_TSF 0x00200000 /* Transmit Store and Forward */
enum ttc_control { enum ttc_control {
DMA_CONTROL_TTC_64 = 0x00000000, DMA_CONTROL_TTC_64 = 0x00000000,
...@@ -264,7 +265,5 @@ enum rtc_control { ...@@ -264,7 +265,5 @@ enum rtc_control {
#define GMAC_MMC_TX_INTR 0x108 #define GMAC_MMC_TX_INTR 0x108
#define GMAC_MMC_RX_CSUM_OFFLOAD 0x208 #define GMAC_MMC_RX_CSUM_OFFLOAD 0x208
extern const struct stmmac_dma_ops dwmac1000_dma_ops; extern const struct stmmac_dma_ops dwmac1000_dma_ops;
#endif /* __DWMAC1000_H__ */ #endif /* __DWMAC1000_H__ */
...@@ -72,22 +72,22 @@ static void dwmac1000_dump_regs(void __iomem *ioaddr) ...@@ -72,22 +72,22 @@ static void dwmac1000_dump_regs(void __iomem *ioaddr)
} }
static void dwmac1000_set_umac_addr(void __iomem *ioaddr, unsigned char *addr, static void dwmac1000_set_umac_addr(void __iomem *ioaddr, unsigned char *addr,
unsigned int reg_n) unsigned int reg_n)
{ {
stmmac_set_mac_addr(ioaddr, addr, GMAC_ADDR_HIGH(reg_n), stmmac_set_mac_addr(ioaddr, addr, GMAC_ADDR_HIGH(reg_n),
GMAC_ADDR_LOW(reg_n)); GMAC_ADDR_LOW(reg_n));
} }
static void dwmac1000_get_umac_addr(void __iomem *ioaddr, unsigned char *addr, static void dwmac1000_get_umac_addr(void __iomem *ioaddr, unsigned char *addr,
unsigned int reg_n) unsigned int reg_n)
{ {
stmmac_get_mac_addr(ioaddr, addr, GMAC_ADDR_HIGH(reg_n), stmmac_get_mac_addr(ioaddr, addr, GMAC_ADDR_HIGH(reg_n),
GMAC_ADDR_LOW(reg_n)); GMAC_ADDR_LOW(reg_n));
} }
static void dwmac1000_set_filter(struct net_device *dev, int id) static void dwmac1000_set_filter(struct net_device *dev, int id)
{ {
void __iomem *ioaddr = (void __iomem *) dev->base_addr; void __iomem *ioaddr = (void __iomem *)dev->base_addr;
unsigned int value = 0; unsigned int value = 0;
unsigned int perfect_addr_number; unsigned int perfect_addr_number;
...@@ -97,7 +97,7 @@ static void dwmac1000_set_filter(struct net_device *dev, int id) ...@@ -97,7 +97,7 @@ static void dwmac1000_set_filter(struct net_device *dev, int id)
if (dev->flags & IFF_PROMISC) if (dev->flags & IFF_PROMISC)
value = GMAC_FRAME_FILTER_PR; value = GMAC_FRAME_FILTER_PR;
else if ((netdev_mc_count(dev) > HASH_TABLE_SIZE) else if ((netdev_mc_count(dev) > HASH_TABLE_SIZE)
|| (dev->flags & IFF_ALLMULTI)) { || (dev->flags & IFF_ALLMULTI)) {
value = GMAC_FRAME_FILTER_PM; /* pass all multi */ value = GMAC_FRAME_FILTER_PM; /* pass all multi */
writel(0xffffffff, ioaddr + GMAC_HASH_HIGH); writel(0xffffffff, ioaddr + GMAC_HASH_HIGH);
writel(0xffffffff, ioaddr + GMAC_HASH_LOW); writel(0xffffffff, ioaddr + GMAC_HASH_LOW);
...@@ -111,12 +111,13 @@ static void dwmac1000_set_filter(struct net_device *dev, int id) ...@@ -111,12 +111,13 @@ static void dwmac1000_set_filter(struct net_device *dev, int id)
memset(mc_filter, 0, sizeof(mc_filter)); memset(mc_filter, 0, sizeof(mc_filter));
netdev_for_each_mc_addr(ha, dev) { netdev_for_each_mc_addr(ha, dev) {
/* The upper 6 bits of the calculated CRC are used to /* The upper 6 bits of the calculated CRC are used to
index the contens of the hash table */ * index the contens of the hash table
int bit_nr = */
bitrev32(~crc32_le(~0, ha->addr, 6)) >> 26; int bit_nr = bitrev32(~crc32_le(~0, ha->addr, 6)) >> 26;
/* The most significant bit determines the register to /* The most significant bit determines the register to
* use (H/L) while the other 5 bits determine the bit * use (H/L) while the other 5 bits determine the bit
* within the register. */ * within the register.
*/
mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31); mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
} }
writel(mc_filter[0], ioaddr + GMAC_HASH_LOW); writel(mc_filter[0], ioaddr + GMAC_HASH_LOW);
...@@ -129,10 +130,11 @@ static void dwmac1000_set_filter(struct net_device *dev, int id) ...@@ -129,10 +130,11 @@ static void dwmac1000_set_filter(struct net_device *dev, int id)
else else
perfect_addr_number = GMAC_MAX_PERFECT_ADDRESSES / 2; perfect_addr_number = GMAC_MAX_PERFECT_ADDRESSES / 2;
/* Handle multiple unicast addresses (perfect filtering)*/ /* Handle multiple unicast addresses (perfect filtering) */
if (netdev_uc_count(dev) > perfect_addr_number) if (netdev_uc_count(dev) > perfect_addr_number)
/* Switch to promiscuous mode is more than 16 addrs /* Switch to promiscuous mode if more than 16 addrs
are required */ * are required
*/
value |= GMAC_FRAME_FILTER_PR; value |= GMAC_FRAME_FILTER_PR;
else { else {
int reg = 1; int reg = 1;
...@@ -150,13 +152,13 @@ static void dwmac1000_set_filter(struct net_device *dev, int id) ...@@ -150,13 +152,13 @@ static void dwmac1000_set_filter(struct net_device *dev, int id)
#endif #endif
writel(value, ioaddr + GMAC_FRAME_FILTER); writel(value, ioaddr + GMAC_FRAME_FILTER);
CHIP_DBG(KERN_INFO "\tFrame Filter reg: 0x%08x\n\tHash regs: " CHIP_DBG(KERN_INFO "\tFilter: 0x%08x\n\tHash: HI 0x%08x, LO 0x%08x\n",
"HI 0x%08x, LO 0x%08x\n", readl(ioaddr + GMAC_FRAME_FILTER), readl(ioaddr + GMAC_FRAME_FILTER),
readl(ioaddr + GMAC_HASH_HIGH), readl(ioaddr + GMAC_HASH_LOW)); readl(ioaddr + GMAC_HASH_HIGH), readl(ioaddr + GMAC_HASH_LOW));
} }
static void dwmac1000_flow_ctrl(void __iomem *ioaddr, unsigned int duplex, static void dwmac1000_flow_ctrl(void __iomem *ioaddr, unsigned int duplex,
unsigned int fc, unsigned int pause_time) unsigned int fc, unsigned int pause_time)
{ {
unsigned int flow = 0; unsigned int flow = 0;
...@@ -203,23 +205,22 @@ static int dwmac1000_irq_status(void __iomem *ioaddr, ...@@ -203,23 +205,22 @@ static int dwmac1000_irq_status(void __iomem *ioaddr,
/* Not used events (e.g. MMC interrupts) are not handled. */ /* Not used events (e.g. MMC interrupts) are not handled. */
if ((intr_status & mmc_tx_irq)) { if ((intr_status & mmc_tx_irq)) {
CHIP_DBG(KERN_INFO "GMAC: MMC tx interrupt: 0x%08x\n", CHIP_DBG(KERN_INFO "GMAC: MMC tx interrupt: 0x%08x\n",
readl(ioaddr + GMAC_MMC_TX_INTR)); readl(ioaddr + GMAC_MMC_TX_INTR));
x->mmc_tx_irq_n++; x->mmc_tx_irq_n++;
} }
if (unlikely(intr_status & mmc_rx_irq)) { if (unlikely(intr_status & mmc_rx_irq)) {
CHIP_DBG(KERN_INFO "GMAC: MMC rx interrupt: 0x%08x\n", CHIP_DBG(KERN_INFO "GMAC: MMC rx interrupt: 0x%08x\n",
readl(ioaddr + GMAC_MMC_RX_INTR)); readl(ioaddr + GMAC_MMC_RX_INTR));
x->mmc_rx_irq_n++; x->mmc_rx_irq_n++;
} }
if (unlikely(intr_status & mmc_rx_csum_offload_irq)) { if (unlikely(intr_status & mmc_rx_csum_offload_irq)) {
CHIP_DBG(KERN_INFO "GMAC: MMC rx csum offload: 0x%08x\n", CHIP_DBG(KERN_INFO "GMAC: MMC rx csum offload: 0x%08x\n",
readl(ioaddr + GMAC_MMC_RX_CSUM_OFFLOAD)); readl(ioaddr + GMAC_MMC_RX_CSUM_OFFLOAD));
x->mmc_rx_csum_offload_irq_n++; x->mmc_rx_csum_offload_irq_n++;
} }
if (unlikely(intr_status & pmt_irq)) { if (unlikely(intr_status & pmt_irq)) {
CHIP_DBG(KERN_INFO "GMAC: received Magic frame\n"); CHIP_DBG(KERN_INFO "GMAC: received Magic frame\n");
/* clear the PMT bits 5 and 6 by reading the PMT /* clear the PMT bits 5 and 6 by reading the PMT status reg */
* status register. */
readl(ioaddr + GMAC_PMT); readl(ioaddr + GMAC_PMT);
x->irq_receive_pmt_irq_n++; x->irq_receive_pmt_irq_n++;
} }
...@@ -252,14 +253,14 @@ static int dwmac1000_irq_status(void __iomem *ioaddr, ...@@ -252,14 +253,14 @@ static int dwmac1000_irq_status(void __iomem *ioaddr,
x->irq_pcs_ane_n++; x->irq_pcs_ane_n++;
} }
if (intr_status & rgmii_irq) { if (intr_status & rgmii_irq) {
u32 status = readl(ioaddr + GMAC_S_R_GMII); u32 status = readl(ioaddr + GMAC_S_R_GMII);
CHIP_DBG(KERN_INFO "GMAC RGMII/SGMII interrupt\n"); CHIP_DBG(KERN_INFO "GMAC RGMII/SGMII interrupt\n");
x->irq_rgmii_n++; x->irq_rgmii_n++;
/* Save and dump the link status. */ /* Save and dump the link status. */
if (status & GMAC_S_R_GMII_LINK) { if (status & GMAC_S_R_GMII_LINK) {
int speed_value = (status & GMAC_S_R_GMII_SPEED) >> int speed_value = (status & GMAC_S_R_GMII_SPEED) >>
GMAC_S_R_GMII_SPEED_SHIFT; GMAC_S_R_GMII_SPEED_SHIFT;
x->pcs_duplex = (status & GMAC_S_R_GMII_MODE); x->pcs_duplex = (status & GMAC_S_R_GMII_MODE);
if (speed_value == GMAC_S_R_GMII_SPEED_125) if (speed_value == GMAC_S_R_GMII_SPEED_125)
...@@ -270,7 +271,7 @@ static int dwmac1000_irq_status(void __iomem *ioaddr, ...@@ -270,7 +271,7 @@ static int dwmac1000_irq_status(void __iomem *ioaddr,
x->pcs_speed = SPEED_10; x->pcs_speed = SPEED_10;
x->pcs_link = 1; x->pcs_link = 1;
pr_debug("Link is Up - %d/%s\n", (int) x->pcs_speed, pr_debug("Link is Up - %d/%s\n", (int)x->pcs_speed,
x->pcs_duplex ? "Full" : "Half"); x->pcs_duplex ? "Full" : "Half");
} else { } else {
x->pcs_link = 0; x->pcs_link = 0;
...@@ -281,19 +282,20 @@ static int dwmac1000_irq_status(void __iomem *ioaddr, ...@@ -281,19 +282,20 @@ static int dwmac1000_irq_status(void __iomem *ioaddr,
return ret; return ret;
} }
static void dwmac1000_set_eee_mode(void __iomem *ioaddr) static void dwmac1000_set_eee_mode(void __iomem *ioaddr)
{ {
u32 value; u32 value;
/* Enable the link status receive on RGMII, SGMII ore SMII /* Enable the link status receive on RGMII, SGMII ore SMII
* receive path and instruct the transmit to enter in LPI * receive path and instruct the transmit to enter in LPI
* state. */ * state.
*/
value = readl(ioaddr + LPI_CTRL_STATUS); value = readl(ioaddr + LPI_CTRL_STATUS);
value |= LPI_CTRL_STATUS_LPIEN | LPI_CTRL_STATUS_LPITXA; value |= LPI_CTRL_STATUS_LPIEN | LPI_CTRL_STATUS_LPITXA;
writel(value, ioaddr + LPI_CTRL_STATUS); writel(value, ioaddr + LPI_CTRL_STATUS);
} }
static void dwmac1000_reset_eee_mode(void __iomem *ioaddr) static void dwmac1000_reset_eee_mode(void __iomem *ioaddr)
{ {
u32 value; u32 value;
...@@ -302,7 +304,7 @@ static void dwmac1000_reset_eee_mode(void __iomem *ioaddr) ...@@ -302,7 +304,7 @@ static void dwmac1000_reset_eee_mode(void __iomem *ioaddr)
writel(value, ioaddr + LPI_CTRL_STATUS); writel(value, ioaddr + LPI_CTRL_STATUS);
} }
static void dwmac1000_set_eee_pls(void __iomem *ioaddr, int link) static void dwmac1000_set_eee_pls(void __iomem *ioaddr, int link)
{ {
u32 value; u32 value;
...@@ -316,7 +318,7 @@ static void dwmac1000_set_eee_pls(void __iomem *ioaddr, int link) ...@@ -316,7 +318,7 @@ static void dwmac1000_set_eee_pls(void __iomem *ioaddr, int link)
writel(value, ioaddr + LPI_CTRL_STATUS); writel(value, ioaddr + LPI_CTRL_STATUS);
} }
static void dwmac1000_set_eee_timer(void __iomem *ioaddr, int ls, int tw) static void dwmac1000_set_eee_timer(void __iomem *ioaddr, int ls, int tw)
{ {
int value = ((tw & 0xffff)) | ((ls & 0x7ff) << 16); int value = ((tw & 0xffff)) | ((ls & 0x7ff) << 16);
...@@ -375,10 +377,10 @@ static const struct stmmac_ops dwmac1000_ops = { ...@@ -375,10 +377,10 @@ static const struct stmmac_ops dwmac1000_ops = {
.pmt = dwmac1000_pmt, .pmt = dwmac1000_pmt,
.set_umac_addr = dwmac1000_set_umac_addr, .set_umac_addr = dwmac1000_set_umac_addr,
.get_umac_addr = dwmac1000_get_umac_addr, .get_umac_addr = dwmac1000_get_umac_addr,
.set_eee_mode = dwmac1000_set_eee_mode, .set_eee_mode = dwmac1000_set_eee_mode,
.reset_eee_mode = dwmac1000_reset_eee_mode, .reset_eee_mode = dwmac1000_reset_eee_mode,
.set_eee_timer = dwmac1000_set_eee_timer, .set_eee_timer = dwmac1000_set_eee_timer,
.set_eee_pls = dwmac1000_set_eee_pls, .set_eee_pls = dwmac1000_set_eee_pls,
.ctrl_ane = dwmac1000_ctrl_ane, .ctrl_ane = dwmac1000_ctrl_ane,
.get_adv = dwmac1000_get_adv, .get_adv = dwmac1000_get_adv,
}; };
......
...@@ -60,7 +60,7 @@ static int dwmac1000_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb, ...@@ -60,7 +60,7 @@ static int dwmac1000_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb,
* depending on pbl value. * depending on pbl value.
*/ */
value = DMA_BUS_MODE_PBL | ((pbl << DMA_BUS_MODE_PBL_SHIFT) | value = DMA_BUS_MODE_PBL | ((pbl << DMA_BUS_MODE_PBL_SHIFT) |
(pbl << DMA_BUS_MODE_RPBL_SHIFT)); (pbl << DMA_BUS_MODE_RPBL_SHIFT));
/* Set the Fixed burst mode */ /* Set the Fixed burst mode */
if (fb) if (fb)
...@@ -94,14 +94,16 @@ static int dwmac1000_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb, ...@@ -94,14 +94,16 @@ static int dwmac1000_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb,
* *
* For Non Fixed Burst Mode: provide the maximum value of the * For Non Fixed Burst Mode: provide the maximum value of the
* burst length. Any burst equal or below the provided burst * burst length. Any burst equal or below the provided burst
* length would be allowed to perform. */ * length would be allowed to perform.
*/
writel(burst_len, ioaddr + DMA_AXI_BUS_MODE); writel(burst_len, ioaddr + DMA_AXI_BUS_MODE);
/* Mask interrupts by writing to CSR7 */ /* Mask interrupts by writing to CSR7 */
writel(DMA_INTR_DEFAULT_MASK, ioaddr + DMA_INTR_ENA); writel(DMA_INTR_DEFAULT_MASK, ioaddr + DMA_INTR_ENA);
/* The base address of the RX/TX descriptor lists must be written into /* RX/TX descriptor base address lists must be written into
* DMA CSR3 and CSR4, respectively. */ * DMA CSR3 and CSR4, respectively
*/
writel(dma_tx, ioaddr + DMA_TX_BASE_ADDR); writel(dma_tx, ioaddr + DMA_TX_BASE_ADDR);
writel(dma_rx, ioaddr + DMA_RCV_BASE_ADDR); writel(dma_rx, ioaddr + DMA_RCV_BASE_ADDR);
...@@ -109,7 +111,7 @@ static int dwmac1000_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb, ...@@ -109,7 +111,7 @@ static int dwmac1000_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb,
} }
static void dwmac1000_dma_operation_mode(void __iomem *ioaddr, int txmode, static void dwmac1000_dma_operation_mode(void __iomem *ioaddr, int txmode,
int rxmode) int rxmode)
{ {
u32 csr6 = readl(ioaddr + DMA_CONTROL); u32 csr6 = readl(ioaddr + DMA_CONTROL);
...@@ -118,11 +120,12 @@ static void dwmac1000_dma_operation_mode(void __iomem *ioaddr, int txmode, ...@@ -118,11 +120,12 @@ static void dwmac1000_dma_operation_mode(void __iomem *ioaddr, int txmode,
/* Transmit COE type 2 cannot be done in cut-through mode. */ /* Transmit COE type 2 cannot be done in cut-through mode. */
csr6 |= DMA_CONTROL_TSF; csr6 |= DMA_CONTROL_TSF;
/* Operating on second frame increase the performance /* Operating on second frame increase the performance
* especially when transmit store-and-forward is used.*/ * especially when transmit store-and-forward is used.
*/
csr6 |= DMA_CONTROL_OSF; csr6 |= DMA_CONTROL_OSF;
} else { } else {
CHIP_DBG(KERN_DEBUG "GMAC: disabling TX store and forward mode" CHIP_DBG(KERN_DEBUG "GMAC: disabling TX SF (threshold %d)\n",
" (threshold = %d)\n", txmode); txmode);
csr6 &= ~DMA_CONTROL_TSF; csr6 &= ~DMA_CONTROL_TSF;
csr6 &= DMA_CONTROL_TC_TX_MASK; csr6 &= DMA_CONTROL_TC_TX_MASK;
/* Set the transmit threshold */ /* Set the transmit threshold */
...@@ -142,8 +145,8 @@ static void dwmac1000_dma_operation_mode(void __iomem *ioaddr, int txmode, ...@@ -142,8 +145,8 @@ static void dwmac1000_dma_operation_mode(void __iomem *ioaddr, int txmode,
CHIP_DBG(KERN_DEBUG "GMAC: enable RX store and forward mode\n"); CHIP_DBG(KERN_DEBUG "GMAC: enable RX store and forward mode\n");
csr6 |= DMA_CONTROL_RSF; csr6 |= DMA_CONTROL_RSF;
} else { } else {
CHIP_DBG(KERN_DEBUG "GMAC: disabling RX store and forward mode" CHIP_DBG(KERN_DEBUG "GMAC: disable RX SF mode (threshold %d)\n",
" (threshold = %d)\n", rxmode); rxmode);
csr6 &= ~DMA_CONTROL_RSF; csr6 &= ~DMA_CONTROL_RSF;
csr6 &= DMA_CONTROL_TC_RX_MASK; csr6 &= DMA_CONTROL_TC_RX_MASK;
if (rxmode <= 32) if (rxmode <= 32)
......
...@@ -47,8 +47,7 @@ static void dwmac100_dump_mac_regs(void __iomem *ioaddr) ...@@ -47,8 +47,7 @@ static void dwmac100_dump_mac_regs(void __iomem *ioaddr)
{ {
pr_info("\t----------------------------------------------\n" pr_info("\t----------------------------------------------\n"
"\t DWMAC 100 CSR (base addr = 0x%p)\n" "\t DWMAC 100 CSR (base addr = 0x%p)\n"
"\t----------------------------------------------\n", "\t----------------------------------------------\n", ioaddr);
ioaddr);
pr_info("\tcontrol reg (offset 0x%x): 0x%08x\n", MAC_CONTROL, pr_info("\tcontrol reg (offset 0x%x): 0x%08x\n", MAC_CONTROL,
readl(ioaddr + MAC_CONTROL)); readl(ioaddr + MAC_CONTROL));
pr_info("\taddr HI (offset 0x%x): 0x%08x\n ", MAC_ADDR_HIGH, pr_info("\taddr HI (offset 0x%x): 0x%08x\n ", MAC_ADDR_HIGH,
...@@ -92,7 +91,7 @@ static void dwmac100_get_umac_addr(void __iomem *ioaddr, unsigned char *addr, ...@@ -92,7 +91,7 @@ static void dwmac100_get_umac_addr(void __iomem *ioaddr, unsigned char *addr,
static void dwmac100_set_filter(struct net_device *dev, int id) static void dwmac100_set_filter(struct net_device *dev, int id)
{ {
void __iomem *ioaddr = (void __iomem *) dev->base_addr; void __iomem *ioaddr = (void __iomem *)dev->base_addr;
u32 value = readl(ioaddr + MAC_CONTROL); u32 value = readl(ioaddr + MAC_CONTROL);
if (dev->flags & IFF_PROMISC) { if (dev->flags & IFF_PROMISC) {
...@@ -113,7 +112,8 @@ static void dwmac100_set_filter(struct net_device *dev, int id) ...@@ -113,7 +112,8 @@ static void dwmac100_set_filter(struct net_device *dev, int id)
struct netdev_hw_addr *ha; struct netdev_hw_addr *ha;
/* Perfect filter mode for physical address and Hash /* Perfect filter mode for physical address and Hash
filter for multicast */ * filter for multicast
*/
value |= MAC_CONTROL_HP; value |= MAC_CONTROL_HP;
value &= ~(MAC_CONTROL_PM | MAC_CONTROL_PR | value &= ~(MAC_CONTROL_PM | MAC_CONTROL_PR |
MAC_CONTROL_IF | MAC_CONTROL_HO); MAC_CONTROL_IF | MAC_CONTROL_HO);
...@@ -121,12 +121,13 @@ static void dwmac100_set_filter(struct net_device *dev, int id) ...@@ -121,12 +121,13 @@ static void dwmac100_set_filter(struct net_device *dev, int id)
memset(mc_filter, 0, sizeof(mc_filter)); memset(mc_filter, 0, sizeof(mc_filter));
netdev_for_each_mc_addr(ha, dev) { netdev_for_each_mc_addr(ha, dev) {
/* The upper 6 bits of the calculated CRC are used to /* The upper 6 bits of the calculated CRC are used to
* index the contens of the hash table */ * index the contens of the hash table
int bit_nr = */
ether_crc(ETH_ALEN, ha->addr) >> 26; int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
/* The most significant bit determines the register to /* The most significant bit determines the register to
* use (H/L) while the other 5 bits determine the bit * use (H/L) while the other 5 bits determine the bit
* within the register. */ * within the register.
*/
mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31); mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
} }
writel(mc_filter[0], ioaddr + MAC_HASH_LOW); writel(mc_filter[0], ioaddr + MAC_HASH_LOW);
...@@ -135,10 +136,9 @@ static void dwmac100_set_filter(struct net_device *dev, int id) ...@@ -135,10 +136,9 @@ static void dwmac100_set_filter(struct net_device *dev, int id)
writel(value, ioaddr + MAC_CONTROL); writel(value, ioaddr + MAC_CONTROL);
CHIP_DBG(KERN_INFO "%s: CTRL reg: 0x%08x Hash regs: " CHIP_DBG(KERN_INFO "%s: Filter: 0x%08x Hash: HI 0x%08x, LO 0x%08x\n",
"HI 0x%08x, LO 0x%08x\n", __func__, readl(ioaddr + MAC_CONTROL),
__func__, readl(ioaddr + MAC_CONTROL), readl(ioaddr + MAC_HASH_HIGH), readl(ioaddr + MAC_HASH_LOW));
readl(ioaddr + MAC_HASH_HIGH), readl(ioaddr + MAC_HASH_LOW));
} }
static void dwmac100_flow_ctrl(void __iomem *ioaddr, unsigned int duplex, static void dwmac100_flow_ctrl(void __iomem *ioaddr, unsigned int duplex,
...@@ -151,9 +151,7 @@ static void dwmac100_flow_ctrl(void __iomem *ioaddr, unsigned int duplex, ...@@ -151,9 +151,7 @@ static void dwmac100_flow_ctrl(void __iomem *ioaddr, unsigned int duplex,
writel(flow, ioaddr + MAC_FLOW_CTRL); writel(flow, ioaddr + MAC_FLOW_CTRL);
} }
/* No PMT module supported for this Ethernet Controller. /* No PMT module supported on ST boards with this Eth chip. */
* Tested on ST platforms only.
*/
static void dwmac100_pmt(void __iomem *ioaddr, unsigned long mode) static void dwmac100_pmt(void __iomem *ioaddr, unsigned long mode)
{ {
return; return;
......
...@@ -52,22 +52,25 @@ static int dwmac100_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb, ...@@ -52,22 +52,25 @@ static int dwmac100_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb,
/* Enable Application Access by writing to DMA CSR0 */ /* Enable Application Access by writing to DMA CSR0 */
writel(DMA_BUS_MODE_DEFAULT | (pbl << DMA_BUS_MODE_PBL_SHIFT), writel(DMA_BUS_MODE_DEFAULT | (pbl << DMA_BUS_MODE_PBL_SHIFT),
ioaddr + DMA_BUS_MODE); ioaddr + DMA_BUS_MODE);
/* Mask interrupts by writing to CSR7 */ /* Mask interrupts by writing to CSR7 */
writel(DMA_INTR_DEFAULT_MASK, ioaddr + DMA_INTR_ENA); writel(DMA_INTR_DEFAULT_MASK, ioaddr + DMA_INTR_ENA);
/* The base address of the RX/TX descriptor lists must be written into /* RX/TX descriptor base addr lists must be written into
* DMA CSR3 and CSR4, respectively. */ * DMA CSR3 and CSR4, respectively
*/
writel(dma_tx, ioaddr + DMA_TX_BASE_ADDR); writel(dma_tx, ioaddr + DMA_TX_BASE_ADDR);
writel(dma_rx, ioaddr + DMA_RCV_BASE_ADDR); writel(dma_rx, ioaddr + DMA_RCV_BASE_ADDR);
return 0; return 0;
} }
/* Store and Forward capability is not used at all.. /* Store and Forward capability is not used at all.
* The transmit threshold can be programmed by *
* setting the TTC bits in the DMA control register.*/ * The transmit threshold can be programmed by setting the TTC bits in the DMA
* control register.
*/
static void dwmac100_dma_operation_mode(void __iomem *ioaddr, int txmode, static void dwmac100_dma_operation_mode(void __iomem *ioaddr, int txmode,
int rxmode) int rxmode)
{ {
...@@ -90,16 +93,15 @@ static void dwmac100_dump_dma_regs(void __iomem *ioaddr) ...@@ -90,16 +93,15 @@ static void dwmac100_dump_dma_regs(void __iomem *ioaddr)
CHIP_DBG(KERN_DEBUG "DWMAC 100 DMA CSR\n"); CHIP_DBG(KERN_DEBUG "DWMAC 100 DMA CSR\n");
for (i = 0; i < 9; i++) for (i = 0; i < 9; i++)
pr_debug("\t CSR%d (offset 0x%x): 0x%08x\n", i, pr_debug("\t CSR%d (offset 0x%x): 0x%08x\n", i,
(DMA_BUS_MODE + i * 4), (DMA_BUS_MODE + i * 4),
readl(ioaddr + DMA_BUS_MODE + i * 4)); readl(ioaddr + DMA_BUS_MODE + i * 4));
CHIP_DBG(KERN_DEBUG "\t CSR20 (offset 0x%x): 0x%08x\n", CHIP_DBG(KERN_DEBUG "\t CSR20 (offset 0x%x): 0x%08x\n",
DMA_CUR_TX_BUF_ADDR, readl(ioaddr + DMA_CUR_TX_BUF_ADDR)); DMA_CUR_TX_BUF_ADDR, readl(ioaddr + DMA_CUR_TX_BUF_ADDR));
CHIP_DBG(KERN_DEBUG "\t CSR21 (offset 0x%x): 0x%08x\n", CHIP_DBG(KERN_DEBUG "\t CSR21 (offset 0x%x): 0x%08x\n",
DMA_CUR_RX_BUF_ADDR, readl(ioaddr + DMA_CUR_RX_BUF_ADDR)); DMA_CUR_RX_BUF_ADDR, readl(ioaddr + DMA_CUR_RX_BUF_ADDR));
} }
/* DMA controller has two counters to track the number of /* DMA controller has two counters to track the number of the missed frames. */
* the receive missed frames. */
static void dwmac100_dma_diagnostic_fr(void *data, struct stmmac_extra_stats *x, static void dwmac100_dma_diagnostic_fr(void *data, struct stmmac_extra_stats *x,
void __iomem *ioaddr) void __iomem *ioaddr)
{ {
......
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
#define DMA_STATUS_TU 0x00000004 /* Transmit Buffer Unavailable */ #define DMA_STATUS_TU 0x00000004 /* Transmit Buffer Unavailable */
#define DMA_STATUS_TPS 0x00000002 /* Transmit Process Stopped */ #define DMA_STATUS_TPS 0x00000002 /* Transmit Process Stopped */
#define DMA_STATUS_TI 0x00000001 /* Transmit Interrupt */ #define DMA_STATUS_TI 0x00000001 /* Transmit Interrupt */
#define DMA_CONTROL_FTF 0x00100000 /* Flush transmit FIFO */ #define DMA_CONTROL_FTF 0x00100000 /* Flush transmit FIFO */
extern void dwmac_enable_dma_transmission(void __iomem *ioaddr); extern void dwmac_enable_dma_transmission(void __iomem *ioaddr);
extern void dwmac_enable_dma_irq(void __iomem *ioaddr); extern void dwmac_enable_dma_irq(void __iomem *ioaddr);
...@@ -112,6 +112,6 @@ extern void dwmac_dma_stop_tx(void __iomem *ioaddr); ...@@ -112,6 +112,6 @@ extern void dwmac_dma_stop_tx(void __iomem *ioaddr);
extern void dwmac_dma_start_rx(void __iomem *ioaddr); extern void dwmac_dma_start_rx(void __iomem *ioaddr);
extern void dwmac_dma_stop_rx(void __iomem *ioaddr); extern void dwmac_dma_stop_rx(void __iomem *ioaddr);
extern int dwmac_dma_interrupt(void __iomem *ioaddr, extern int dwmac_dma_interrupt(void __iomem *ioaddr,
struct stmmac_extra_stats *x); struct stmmac_extra_stats *x);
#endif /* __DWMAC_DMA_H__ */ #endif /* __DWMAC_DMA_H__ */
...@@ -28,8 +28,7 @@ ...@@ -28,8 +28,7 @@
/* MMC control register */ /* MMC control register */
/* When set, all counter are reset */ /* When set, all counter are reset */
#define MMC_CNTRL_COUNTER_RESET 0x1 #define MMC_CNTRL_COUNTER_RESET 0x1
/* When set, do not roll over zero /* When set, do not roll over zero after reaching the max value*/
* after reaching the max value*/
#define MMC_CNTRL_COUNTER_STOP_ROLLOVER 0x2 #define MMC_CNTRL_COUNTER_STOP_ROLLOVER 0x2
#define MMC_CNTRL_RESET_ON_READ 0x4 /* Reset after reading */ #define MMC_CNTRL_RESET_ON_READ 0x4 /* Reset after reading */
#define MMC_CNTRL_COUNTER_FREEZER 0x8 /* Freeze counter values to the #define MMC_CNTRL_COUNTER_FREEZER 0x8 /* Freeze counter values to the
......
...@@ -79,8 +79,8 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x, ...@@ -79,8 +79,8 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x,
struct net_device_stats *stats = (struct net_device_stats *)data; struct net_device_stats *stats = (struct net_device_stats *)data;
if (unlikely(p->des01.rx.last_descriptor == 0)) { if (unlikely(p->des01.rx.last_descriptor == 0)) {
pr_warning("ndesc Error: Oversized Ethernet " pr_warn("%s: Oversized frame spanned multiple buffers\n",
"frame spanned multiple buffers\n"); __func__);
stats->rx_length_errors++; stats->rx_length_errors++;
return discard_frame; return discard_frame;
} }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum) static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
{ {
struct stmmac_priv *priv = (struct stmmac_priv *) p; struct stmmac_priv *priv = (struct stmmac_priv *)p;
unsigned int txsize = priv->dma_tx_size; unsigned int txsize = priv->dma_tx_size;
unsigned int entry = priv->cur_tx % txsize; unsigned int entry = priv->cur_tx % txsize;
struct dma_desc *desc = priv->dma_tx + entry; struct dma_desc *desc = priv->dma_tx + entry;
......
...@@ -142,6 +142,7 @@ static inline int stmmac_register_platform(void) ...@@ -142,6 +142,7 @@ static inline int stmmac_register_platform(void)
return err; return err;
} }
static inline void stmmac_unregister_platform(void) static inline void stmmac_unregister_platform(void)
{ {
platform_driver_unregister(&stmmac_pltfr_driver); platform_driver_unregister(&stmmac_pltfr_driver);
...@@ -153,6 +154,7 @@ static inline int stmmac_register_platform(void) ...@@ -153,6 +154,7 @@ static inline int stmmac_register_platform(void)
return 0; return 0;
} }
static inline void stmmac_unregister_platform(void) static inline void stmmac_unregister_platform(void)
{ {
} }
...@@ -170,6 +172,7 @@ static inline int stmmac_register_pci(void) ...@@ -170,6 +172,7 @@ static inline int stmmac_register_pci(void)
return err; return err;
} }
static inline void stmmac_unregister_pci(void) static inline void stmmac_unregister_pci(void)
{ {
pci_unregister_driver(&stmmac_pci_driver); pci_unregister_driver(&stmmac_pci_driver);
...@@ -181,6 +184,7 @@ static inline int stmmac_register_pci(void) ...@@ -181,6 +184,7 @@ static inline int stmmac_register_pci(void)
return 0; return 0;
} }
static inline void stmmac_unregister_pci(void) static inline void stmmac_unregister_pci(void)
{ {
} }
......
...@@ -177,7 +177,7 @@ int stmmac_mdio_register(struct net_device *ndev) ...@@ -177,7 +177,7 @@ int stmmac_mdio_register(struct net_device *ndev)
new_bus->write = &stmmac_mdio_write; new_bus->write = &stmmac_mdio_write;
new_bus->reset = &stmmac_mdio_reset; new_bus->reset = &stmmac_mdio_reset;
snprintf(new_bus->id, MII_BUS_ID_SIZE, "%s-%x", snprintf(new_bus->id, MII_BUS_ID_SIZE, "%s-%x",
new_bus->name, priv->plat->bus_id); new_bus->name, priv->plat->bus_id);
new_bus->priv = ndev; new_bus->priv = ndev;
new_bus->irq = irqlist; new_bus->irq = irqlist;
new_bus->phy_mask = mdio_bus_data->phy_mask; new_bus->phy_mask = mdio_bus_data->phy_mask;
......
...@@ -88,7 +88,7 @@ static int stmmac_pci_probe(struct pci_dev *pdev, ...@@ -88,7 +88,7 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
continue; continue;
addr = pci_iomap(pdev, i, 0); addr = pci_iomap(pdev, i, 0);
if (addr == NULL) { if (addr == NULL) {
pr_err("%s: ERROR: cannot map register memory, aborting", pr_err("%s: ERROR: cannot map register memory aborting",
__func__); __func__);
ret = -EIO; ret = -EIO;
goto err_out_map_failed; goto err_out_map_failed;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment