Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81206ebc authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'gianfar'



Claudiu Manoil says:

====================
gianfar: Device configuration fixes

This patchset represents the first part of an effort
to solve some old device configuration issues in gianfar,
especially run-time reset and re-configuration problems.
I'm referring to "on-the-fly" configuration of registers
against HW specification, concurrency issues during device
reset / re-configuration operations, and implementing HW
advisories for these operations.

There's also a good deal of code cleanup and refactoring,
and some other (minor) fixes as well.

v2: Remove sysfs stubs w/o replacing them with module
    params (patch 2).
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents c85fde83 7cca336a
Loading
Loading
Loading
Loading
+0 −30
Original line number Original line Diff line number Diff line
The Gianfar Ethernet Driver
The Gianfar Ethernet Driver
Sysfs File description


Author: Andy Fleming <afleming@freescale.com>
Author: Andy Fleming <afleming@freescale.com>
Updated: 2005-07-28
Updated: 2005-07-28


SYSFS

Several of the features of the gianfar driver are controlled
through sysfs files.  These are:

bd_stash:
To stash RX Buffer Descriptors in the L2, echo 'on' or '1' to
bd_stash, echo 'off' or '0' to disable

rx_stash_len:
To stash the first n bytes of the packet in L2, echo the number
of bytes to buf_stash_len.  echo 0 to disable.

WARNING: You could really screw these up if you set them too low or high!
fifo_threshold:
To change the number of bytes the controller needs in the
fifo before it starts transmission, echo the number of bytes to 
fifo_thresh.  Range should be 0-511.

fifo_starve:
When the FIFO has less than this many bytes during a transmit, it
enters starve mode, and increases the priority of TX memory
transactions.  To change, echo the number of bytes to
fifo_starve.  Range should be 0-511.

fifo_starve_off:
Once in starve mode, the FIFO remains there until it has this
many bytes.  To change, echo the number of bytes to
fifo_starve_off.  Range should be 0-511.


CHECKSUM OFFLOADING
CHECKSUM OFFLOADING


+1 −2
Original line number Original line Diff line number Diff line
@@ -14,7 +14,6 @@ obj-$(CONFIG_FSL_XGMAC_MDIO) += xgmac_mdio.o
obj-$(CONFIG_GIANFAR) += gianfar_driver.o
obj-$(CONFIG_GIANFAR) += gianfar_driver.o
obj-$(CONFIG_PTP_1588_CLOCK_GIANFAR) += gianfar_ptp.o
obj-$(CONFIG_PTP_1588_CLOCK_GIANFAR) += gianfar_ptp.o
gianfar_driver-objs := gianfar.o \
gianfar_driver-objs := gianfar.o \
		gianfar_ethtool.o \
		gianfar_ethtool.o
		gianfar_sysfs.o
obj-$(CONFIG_UCC_GETH) += ucc_geth_driver.o
obj-$(CONFIG_UCC_GETH) += ucc_geth_driver.o
ucc_geth_driver-objs := ucc_geth.o ucc_geth_ethtool.o
ucc_geth_driver-objs := ucc_geth.o ucc_geth_ethtool.o
+236 −264

File changed.

Preview size limit exceeded, changes collapsed.

+33 −11
Original line number Original line Diff line number Diff line
@@ -9,7 +9,7 @@
 * Maintainer: Kumar Gala
 * Maintainer: Kumar Gala
 * Modifier: Sandeep Gopalpet <sandeep.kumar@freescale.com>
 * Modifier: Sandeep Gopalpet <sandeep.kumar@freescale.com>
 *
 *
 * Copyright 2002-2009, 2011 Freescale Semiconductor, Inc.
 * Copyright 2002-2009, 2011-2013 Freescale Semiconductor, Inc.
 *
 *
 * This program is free software; you can redistribute  it and/or modify it
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * under  the terms of  the GNU General  Public License as published by the
@@ -880,7 +880,6 @@ struct gfar {
#define FSL_GIANFAR_DEV_HAS_CSUM		0x00000010
#define FSL_GIANFAR_DEV_HAS_CSUM		0x00000010
#define FSL_GIANFAR_DEV_HAS_VLAN		0x00000020
#define FSL_GIANFAR_DEV_HAS_VLAN		0x00000020
#define FSL_GIANFAR_DEV_HAS_EXTENDED_HASH	0x00000040
#define FSL_GIANFAR_DEV_HAS_EXTENDED_HASH	0x00000040
#define FSL_GIANFAR_DEV_HAS_PADDING		0x00000080
#define FSL_GIANFAR_DEV_HAS_MAGIC_PACKET	0x00000100
#define FSL_GIANFAR_DEV_HAS_MAGIC_PACKET	0x00000100
#define FSL_GIANFAR_DEV_HAS_BD_STASHING		0x00000200
#define FSL_GIANFAR_DEV_HAS_BD_STASHING		0x00000200
#define FSL_GIANFAR_DEV_HAS_BUF_STASHING	0x00000400
#define FSL_GIANFAR_DEV_HAS_BUF_STASHING	0x00000400
@@ -892,8 +891,8 @@ struct gfar {
#define DEFAULT_MAPPING 	0xFF
#define DEFAULT_MAPPING 	0xFF
#endif
#endif


#define ISRG_SHIFT_TX	0x10
#define ISRG_RR0	0x80000000
#define ISRG_SHIFT_RX	0x18
#define ISRG_TR0	0x00800000


/* The same driver can operate in two modes */
/* The same driver can operate in two modes */
/* SQ_SG_MODE: Single Queue Single Group Mode
/* SQ_SG_MODE: Single Queue Single Group Mode
@@ -1113,6 +1112,9 @@ struct gfar_private {
	unsigned int total_tx_ring_size;
	unsigned int total_tx_ring_size;
	unsigned int total_rx_ring_size;
	unsigned int total_rx_ring_size;


	u32 rqueue;
	u32 tqueue;

	/* RX per device parameters */
	/* RX per device parameters */
	unsigned int rx_stash_size;
	unsigned int rx_stash_size;
	unsigned int rx_stash_index;
	unsigned int rx_stash_index;
@@ -1127,11 +1129,6 @@ struct gfar_private {
	u32 __iomem *hash_regs[16];
	u32 __iomem *hash_regs[16];
	int hash_width;
	int hash_width;


	/* global parameters */
	unsigned int fifo_threshold;
	unsigned int fifo_starve;
	unsigned int fifo_starve_off;

	/*Filer table*/
	/*Filer table*/
	unsigned int ftp_rqfpr[MAX_FILER_IDX + 1];
	unsigned int ftp_rqfpr[MAX_FILER_IDX + 1];
	unsigned int ftp_rqfcr[MAX_FILER_IDX + 1];
	unsigned int ftp_rqfcr[MAX_FILER_IDX + 1];
@@ -1176,6 +1173,31 @@ static inline void gfar_read_filer(struct gfar_private *priv,
	*fpr = gfar_read(&regs->rqfpr);
	*fpr = gfar_read(&regs->rqfpr);
}
}


static inline void gfar_write_isrg(struct gfar_private *priv)
{
	struct gfar __iomem *regs = priv->gfargrp[0].regs;
	u32 __iomem *baddr = &regs->isrg0;
	u32 isrg = 0;
	int grp_idx, i;

	for (grp_idx = 0; grp_idx < priv->num_grps; grp_idx++) {
		struct gfar_priv_grp *grp = &priv->gfargrp[grp_idx];

		for_each_set_bit(i, &grp->rx_bit_map, priv->num_rx_queues) {
			isrg |= (ISRG_RR0 >> i);
		}

		for_each_set_bit(i, &grp->tx_bit_map, priv->num_tx_queues) {
			isrg |= (ISRG_TR0 >> i);
		}

		gfar_write(baddr, isrg);

		baddr++;
		isrg = 0;
	}
}

void lock_rx_qs(struct gfar_private *priv);
void lock_rx_qs(struct gfar_private *priv);
void lock_tx_qs(struct gfar_private *priv);
void lock_tx_qs(struct gfar_private *priv);
void unlock_rx_qs(struct gfar_private *priv);
void unlock_rx_qs(struct gfar_private *priv);
@@ -1183,11 +1205,11 @@ void unlock_tx_qs(struct gfar_private *priv);
irqreturn_t gfar_receive(int irq, void *dev_id);
irqreturn_t gfar_receive(int irq, void *dev_id);
int startup_gfar(struct net_device *dev);
int startup_gfar(struct net_device *dev);
void stop_gfar(struct net_device *dev);
void stop_gfar(struct net_device *dev);
void gfar_halt(struct net_device *dev);
void gfar_halt(struct gfar_private *priv);
void gfar_start(struct gfar_private *priv);
void gfar_phy_test(struct mii_bus *bus, struct phy_device *phydev, int enable,
void gfar_phy_test(struct mii_bus *bus, struct phy_device *phydev, int enable,
		   u32 regnum, u32 read);
		   u32 regnum, u32 read);
void gfar_configure_coalescing_all(struct gfar_private *priv);
void gfar_configure_coalescing_all(struct gfar_private *priv);
void gfar_init_sysfs(struct net_device *dev);
int gfar_set_features(struct net_device *dev, netdev_features_t features);
int gfar_set_features(struct net_device *dev, netdev_features_t features);
void gfar_check_rx_parser_mode(struct gfar_private *priv);
void gfar_check_rx_parser_mode(struct gfar_private *priv);
void gfar_vlan_mode(struct net_device *dev, netdev_features_t features);
void gfar_vlan_mode(struct net_device *dev, netdev_features_t features);
+8 −56

File changed.

Preview size limit exceeded, changes collapsed.

Loading