Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/team/team.c drivers/net/usb/qmi_wwan.c net/batman-adv/bat_iv_ogm.c net/ipv4/fib_frontend.c net/ipv4/route.c net/l2tp/l2tp_netlink.c The team, fib_frontend, route, and l2tp_netlink conflicts were simply overlapping changes. qmi_wwan and bat_iv_ogm were of the "use HEAD" variety. With help from Antonio Quartulli. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -229,3 +229,5 @@ static void __exit bcm87xx_exit(void)
|
||||
ARRAY_SIZE(bcm87xx_driver));
|
||||
}
|
||||
module_exit(bcm87xx_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@@ -21,6 +21,12 @@
|
||||
#include <linux/phy.h>
|
||||
#include <linux/micrel_phy.h>
|
||||
|
||||
/* Operation Mode Strap Override */
|
||||
#define MII_KSZPHY_OMSO 0x16
|
||||
#define KSZPHY_OMSO_B_CAST_OFF (1 << 9)
|
||||
#define KSZPHY_OMSO_RMII_OVERRIDE (1 << 1)
|
||||
#define KSZPHY_OMSO_MII_OVERRIDE (1 << 0)
|
||||
|
||||
/* general Interrupt control/status reg in vendor specific block. */
|
||||
#define MII_KSZPHY_INTCS 0x1B
|
||||
#define KSZPHY_INTCS_JABBER (1 << 15)
|
||||
@@ -101,6 +107,13 @@ static int kszphy_config_init(struct phy_device *phydev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ksz8021_config_init(struct phy_device *phydev)
|
||||
{
|
||||
const u16 val = KSZPHY_OMSO_B_CAST_OFF | KSZPHY_OMSO_RMII_OVERRIDE;
|
||||
phy_write(phydev, MII_KSZPHY_OMSO, val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ks8051_config_init(struct phy_device *phydev)
|
||||
{
|
||||
int regval;
|
||||
@@ -128,9 +141,22 @@ static struct phy_driver ksphy_driver[] = {
|
||||
.config_intr = ks8737_config_intr,
|
||||
.driver = { .owner = THIS_MODULE,},
|
||||
}, {
|
||||
.phy_id = PHY_ID_KS8041,
|
||||
.phy_id = PHY_ID_KSZ8021,
|
||||
.phy_id_mask = 0x00ffffff,
|
||||
.name = "Micrel KSZ8021",
|
||||
.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause |
|
||||
SUPPORTED_Asym_Pause),
|
||||
.flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
|
||||
.config_init = ksz8021_config_init,
|
||||
.config_aneg = genphy_config_aneg,
|
||||
.read_status = genphy_read_status,
|
||||
.ack_interrupt = kszphy_ack_interrupt,
|
||||
.config_intr = kszphy_config_intr,
|
||||
.driver = { .owner = THIS_MODULE,},
|
||||
}, {
|
||||
.phy_id = PHY_ID_KSZ8041,
|
||||
.phy_id_mask = 0x00fffff0,
|
||||
.name = "Micrel KS8041",
|
||||
.name = "Micrel KSZ8041",
|
||||
.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause
|
||||
| SUPPORTED_Asym_Pause),
|
||||
.flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
|
||||
@@ -141,9 +167,9 @@ static struct phy_driver ksphy_driver[] = {
|
||||
.config_intr = kszphy_config_intr,
|
||||
.driver = { .owner = THIS_MODULE,},
|
||||
}, {
|
||||
.phy_id = PHY_ID_KS8051,
|
||||
.phy_id = PHY_ID_KSZ8051,
|
||||
.phy_id_mask = 0x00fffff0,
|
||||
.name = "Micrel KS8051",
|
||||
.name = "Micrel KSZ8051",
|
||||
.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause
|
||||
| SUPPORTED_Asym_Pause),
|
||||
.flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
|
||||
@@ -154,8 +180,8 @@ static struct phy_driver ksphy_driver[] = {
|
||||
.config_intr = kszphy_config_intr,
|
||||
.driver = { .owner = THIS_MODULE,},
|
||||
}, {
|
||||
.phy_id = PHY_ID_KS8001,
|
||||
.name = "Micrel KS8001 or KS8721",
|
||||
.phy_id = PHY_ID_KSZ8001,
|
||||
.name = "Micrel KSZ8001 or KS8721",
|
||||
.phy_id_mask = 0x00ffffff,
|
||||
.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause),
|
||||
.flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
|
||||
@@ -201,10 +227,11 @@ MODULE_LICENSE("GPL");
|
||||
|
||||
static struct mdio_device_id __maybe_unused micrel_tbl[] = {
|
||||
{ PHY_ID_KSZ9021, 0x000ffffe },
|
||||
{ PHY_ID_KS8001, 0x00ffffff },
|
||||
{ PHY_ID_KSZ8001, 0x00ffffff },
|
||||
{ PHY_ID_KS8737, 0x00fffff0 },
|
||||
{ PHY_ID_KS8041, 0x00fffff0 },
|
||||
{ PHY_ID_KS8051, 0x00fffff0 },
|
||||
{ PHY_ID_KSZ8021, 0x00ffffff },
|
||||
{ PHY_ID_KSZ8041, 0x00fffff0 },
|
||||
{ PHY_ID_KSZ8051, 0x00fffff0 },
|
||||
{ }
|
||||
};
|
||||
|
||||
|
@@ -56,6 +56,32 @@ static int smsc_phy_config_init(struct phy_device *phydev)
|
||||
return smsc_phy_ack_interrupt (phydev);
|
||||
}
|
||||
|
||||
static int lan87xx_config_init(struct phy_device *phydev)
|
||||
{
|
||||
/*
|
||||
* Make sure the EDPWRDOWN bit is NOT set. Setting this bit on
|
||||
* LAN8710/LAN8720 PHY causes the PHY to misbehave, likely due
|
||||
* to a bug on the chip.
|
||||
*
|
||||
* When the system is powered on with the network cable being
|
||||
* disconnected all the way until after ifconfig ethX up is
|
||||
* issued for the LAN port with this PHY, connecting the cable
|
||||
* afterwards does not cause LINK change detection, while the
|
||||
* expected behavior is the Link UP being detected.
|
||||
*/
|
||||
int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
rc &= ~MII_LAN83C185_EDPWRDOWN;
|
||||
|
||||
rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS, rc);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
return smsc_phy_ack_interrupt(phydev);
|
||||
}
|
||||
|
||||
static int lan911x_config_init(struct phy_device *phydev)
|
||||
{
|
||||
return smsc_phy_ack_interrupt(phydev);
|
||||
@@ -162,7 +188,7 @@ static struct phy_driver smsc_phy_driver[] = {
|
||||
/* basic functions */
|
||||
.config_aneg = genphy_config_aneg,
|
||||
.read_status = genphy_read_status,
|
||||
.config_init = smsc_phy_config_init,
|
||||
.config_init = lan87xx_config_init,
|
||||
|
||||
/* IRQ related */
|
||||
.ack_interrupt = smsc_phy_ack_interrupt,
|
||||
|
Reference in New Issue
Block a user