]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/suse-2.6.27.39/patches.drivers/broadcom-Add-support-for-the-57780-integrated-PHY.patch
Add a patch to fix Intel E100 wake-on-lan problems.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.drivers / broadcom-Add-support-for-the-57780-integrated-PHY.patch
1 From fe9ea211b215172aca41dff8cc454f60e3346739 Mon Sep 17 00:00:00 2001
2 From: root <root@unixgrp-03.broadcom.net>
3 Date: Fri, 3 Oct 2008 09:59:42 -0700
4 Subject: [PATCH 2/2] broadcom: Add support for the 57780 integrated PHY
5 Acked-by: Karsten Keil <kkeil@novell.com>
6 Reference: bnc#434147
7
8 This patch adds support for the 57780 integrated PHY.
9 ---
10 drivers/net/phy/broadcom.c | 24 ++++++++++++++++++++++--
11 drivers/net/tg3.c | 9 ++++++++-
12 drivers/net/tg3.h | 5 +++--
13 3 files changed, 33 insertions(+), 5 deletions(-)
14
15 diff --git a/drivers/net/phy/broadcom.c b/drivers/net/phy/broadcom.c
16 index 4b4dc98..ad5c4f7 100644
17 --- a/drivers/net/phy/broadcom.c
18 +++ b/drivers/net/phy/broadcom.c
19 @@ -402,14 +402,29 @@ static struct phy_driver bcm5481_driver = {
20 };
21
22 static struct phy_driver bcm5482_driver = {
23 + .phy_id = 0x03625d90,
24 + .phy_id_mask = 0xfffffff0,
25 + .name = "Broadcom BCM57780",
26 + .features = PHY_GBIT_FEATURES |
27 + SUPPORTED_Pause | SUPPORTED_Asym_Pause,
28 + .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
29 + .config_init = bcm5482_config_init,
30 + .config_aneg = genphy_config_aneg,
31 + .read_status = bcm5482_read_status,
32 + .ack_interrupt = bcm54xx_ack_interrupt,
33 + .config_intr = bcm54xx_config_intr,
34 + .driver = { .owner = THIS_MODULE },
35 +};
36 +
37 +static struct phy_driver bcm57780_driver = {
38 .phy_id = 0x0143bcb0,
39 .phy_id_mask = 0xfffffff0,
40 .name = "Broadcom BCM5482",
41 .features = PHY_GBIT_FEATURES,
42 .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
43 - .config_init = bcm5482_config_init,
44 + .config_init = bcm54xx_config_init,
45 .config_aneg = genphy_config_aneg,
46 - .read_status = bcm5482_read_status,
47 + .read_status = genphy_read_status,
48 .ack_interrupt = bcm54xx_ack_interrupt,
49 .config_intr = bcm54xx_config_intr,
50 .driver = { .owner = THIS_MODULE },
51 @@ -437,8 +452,13 @@ static int __init broadcom_init(void)
52 ret = phy_driver_register(&bcm5482_driver);
53 if (ret)
54 goto out_5482;
55 + ret = phy_driver_register(&bcm57780_driver);
56 + if (ret)
57 + goto out_57780;
58 return ret;
59
60 +out_57780:
61 + phy_driver_unregister(&bcm5482_driver);
62 out_5482:
63 phy_driver_unregister(&bcm5481_driver);
64 out_5481:
65 diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
66 index 7188675..43691c6 100644
67 --- a/drivers/net/tg3.c
68 +++ b/drivers/net/tg3.c
69 @@ -994,7 +994,14 @@ static int tg3_mdio_init(struct tg3 *tp)
70
71 phydev = tp->mdio_bus.phy_map[PHY_ADDR];
72
73 - switch (phydev->phy_id) {
74 +if(!phydev || !phydev->drv)
75 + return -1;
76 +
77 + switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
78 + case TG3_PHY_ID_BCM57780:
79 + phydev->interface = PHY_INTERFACE_MODE_GMII;
80 + phydev->dev_flags = PHY_BRCM_WIRESPEED_ENABLE;
81 + break;
82 case TG3_PHY_ID_BCM50610:
83 phydev->interface = PHY_INTERFACE_MODE_RGMII;
84 if (tp->tg3_flags3 & TG3_FLG3_RGMII_STD_IBND_DISABLE)
85 diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h
86 index 06859d1..fc313a4 100644
87 --- a/drivers/net/tg3.h
88 +++ b/drivers/net/tg3.h
89 @@ -2592,8 +2592,9 @@ struct tg3 {
90 #define PHY_REV_BCM5401_B2 0x3
91 #define PHY_REV_BCM5401_C0 0x6
92 #define PHY_REV_BCM5411_X0 0x1 /* Found on Netgear GA302T */
93 -#define TG3_PHY_ID_BCM50610 0x143bd60
94 -#define TG3_PHY_ID_BCMAC131 0x143bc70
95 +#define TG3_PHY_ID_BCM50610 0x0143bd60
96 +#define TG3_PHY_ID_BCMAC131 0x0143bc70
97 +#define TG3_PHY_ID_BCM57780 0x03625d90
98
99
100 u32 led_ctrl;
101 --
102 1.5.6.4
103