ralink: add mt7628 support to the ethernet driver
Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 43196
This commit is contained in:
		@@ -38,7 +38,29 @@
 | 
			
		||||
#include <linux/mii.h>
 | 
			
		||||
 | 
			
		||||
#include <ralink_regs.h>
 | 
			
		||||
#ifdef CONFIG_SOC_MT7620
 | 
			
		||||
static inline int soc_is_rt3352(void)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int soc_is_mt7628(void)
 | 
			
		||||
{
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int soc_is_rt5350(void)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
#include <asm/mach-ralink/rt305x.h>
 | 
			
		||||
static inline int soc_is_mt7628(void)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <asm/mach-ralink/rt305x_esw_platform.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -616,6 +638,53 @@ static void esw_hw_init(struct rt305x_esw *esw)
 | 
			
		||||
		rt305x_mii_write(esw, 0, 29, 0x598b);
 | 
			
		||||
		/* select local register */
 | 
			
		||||
		rt305x_mii_write(esw, 0, 31, 0x8000);
 | 
			
		||||
	} else if (soc_is_mt7628()) {
 | 
			
		||||
		int i;
 | 
			
		||||
		u32 phy_val;
 | 
			
		||||
		u32 val;
 | 
			
		||||
 | 
			
		||||
		/* reset EPHY */
 | 
			
		||||
		val = rt_sysc_r32(SYSC_REG_RESET_CTRL);
 | 
			
		||||
		rt_sysc_w32(val | RT5350_RESET_EPHY, SYSC_REG_RESET_CTRL);
 | 
			
		||||
		rt_sysc_w32(val, SYSC_REG_RESET_CTRL);
 | 
			
		||||
 | 
			
		||||
		rt305x_mii_write(esw, 0, 31, 0x2000); /* change G2 page */
 | 
			
		||||
		rt305x_mii_write(esw, 0, 26, 0x0020);
 | 
			
		||||
 | 
			
		||||
		for (i = 0; i < 5; i++) {
 | 
			
		||||
			rt305x_mii_write(esw, i, 31, 0x8000); //change L0 page
 | 
			
		||||
			rt305x_mii_write(esw, i,  0, 0x3100);
 | 
			
		||||
//			mii_mgr_read(i, 26, &phy_val);// EEE setting
 | 
			
		||||
//			phy_val |= (1 << 5);
 | 
			
		||||
//			rt305x_mii_write(esw, i, 26, phy_val);
 | 
			
		||||
			rt305x_mii_write(esw, i, 30, 0xa000);
 | 
			
		||||
			rt305x_mii_write(esw, i, 31, 0xa000); // change L2 page
 | 
			
		||||
			rt305x_mii_write(esw, i, 16, 0x0606);
 | 
			
		||||
			rt305x_mii_write(esw, i, 23, 0x0f0e);
 | 
			
		||||
			rt305x_mii_write(esw, i, 24, 0x1610);
 | 
			
		||||
			rt305x_mii_write(esw, i, 30, 0x1f15);
 | 
			
		||||
			rt305x_mii_write(esw, i, 28, 0x6111);
 | 
			
		||||
//			mii_mgr_read(i, 4, &phy_val);
 | 
			
		||||
//			phy_val |= (1 << 10);
 | 
			
		||||
//			rt305x_mii_write(esw, i, 4, phy_val);
 | 
			
		||||
			rt305x_mii_write(esw, i, 31, 0x2000); // change G2 page
 | 
			
		||||
			rt305x_mii_write(esw, i, 26, 0x0000);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//100Base AOI setting
 | 
			
		||||
		rt305x_mii_write(esw, 0, 31, 0x5000);  //change G5 page
 | 
			
		||||
		rt305x_mii_write(esw, 0, 19, 0x004a);
 | 
			
		||||
		rt305x_mii_write(esw, 0, 20, 0x015a);
 | 
			
		||||
		rt305x_mii_write(esw, 0, 21, 0x00ee);
 | 
			
		||||
		rt305x_mii_write(esw, 0, 22, 0x0033);
 | 
			
		||||
		rt305x_mii_write(esw, 0, 23, 0x020a);
 | 
			
		||||
		rt305x_mii_write(esw, 0, 24, 0x0000);
 | 
			
		||||
		rt305x_mii_write(esw, 0, 25, 0x024a);
 | 
			
		||||
		rt305x_mii_write(esw, 0, 26, 0x035a);
 | 
			
		||||
		rt305x_mii_write(esw, 0, 27, 0x02ee);
 | 
			
		||||
		rt305x_mii_write(esw, 0, 28, 0x0233);
 | 
			
		||||
		rt305x_mii_write(esw, 0, 29, 0x000a);
 | 
			
		||||
		rt305x_mii_write(esw, 0, 30, 0x0000);
 | 
			
		||||
	} else {
 | 
			
		||||
		rt305x_mii_write(esw, 0, 31, 0x8000);
 | 
			
		||||
		for (i = 0; i < 5; i++) {
 | 
			
		||||
@@ -1002,7 +1071,7 @@ esw_get_port_tr_badgood(struct switch_dev *dev,
 | 
			
		||||
	int shift = attr->id == RT5350_ESW_ATTR_PORT_TR_GOOD ? 0 : 16;
 | 
			
		||||
	u32 reg;
 | 
			
		||||
 | 
			
		||||
	if (!soc_is_rt5350())
 | 
			
		||||
	if (!soc_is_rt5350() && !soc_is_mt7628())
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	if (idx < 0 || idx >= RT305X_ESW_NUM_LANWAN)
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,19 @@
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/mach-ralink/ralink_regs.h>
 | 
			
		||||
#ifdef CONFIG_SOC_MT7620
 | 
			
		||||
static inline int soc_is_rt3352(void)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int soc_is_rt3052(void)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
#include <asm/mach-ralink/rt305x.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ralink_soc_eth.h"
 | 
			
		||||
#include "mdio_rt2880.h"
 | 
			
		||||
@@ -79,6 +91,9 @@ static void rt305x_fe_reset(void)
 | 
			
		||||
static void rt5350_init_data(struct fe_soc_data *data,
 | 
			
		||||
		struct net_device *netdev)
 | 
			
		||||
{
 | 
			
		||||
	struct fe_priv *priv = netdev_priv(netdev);
 | 
			
		||||
 | 
			
		||||
	priv->flags = FE_FLAG_PADDING_64B | FE_FLAG_PADDING_BUG;
 | 
			
		||||
	netdev->hw_features = NETIF_F_SG | NETIF_F_RXCSUM;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user