Support WOL in duo2(needs a CFE update)
[vuplus_openvuplus_3.0] / meta-bsp / vuduo2 / recipes / linux / linux-vuplus-3.3.8 / brcm_s3_wol.patch
1 diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
2 old mode 100644
3 new mode 100755
4 index faf58ab..52e31ed
5 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
6 +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
7 @@ -3123,6 +3123,34 @@ static int bcmgenet_set_wol(struct net_device *dev,
8                 umac->mpd_ctrl |= MPD_PW_EN;
9         }
10  
11 +       if (pDevCtrl->phyType == BRCM_PHY_TYPE_EXT_RGMII)
12 +       {
13 +               if(wol->wolopts & WAKE_MAGIC)
14 +               {
15 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0007);
16 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006e);
17 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x15, dev->dev_addr[1]<<8 | dev->dev_addr[0]);
18 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x16, dev->dev_addr[3]<<8 | dev->dev_addr[2]);
19 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x17, dev->dev_addr[5]<<8 | dev->dev_addr[4]);
20 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0007);
21 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006d);
22 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x16, 0x9fff);
23 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x15, 0x1000);
24 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006d);
25 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x19, 0x0001);
26 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0000);
27 +
28 +               }
29 +               else
30 +               {
31 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0007);
32 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006d);
33 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x16, 0x9fff);
34 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x15, 0x0000);
35 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0000);
36 +               }
37 +       }
38 +
39         device_set_wakeup_enable(&dev->dev, wol->wolopts);
40         pDevCtrl->wolopts = wol->wolopts;
41         return 0;
42 diff --git a/kernel/printk.c b/kernel/printk.c
43 index 1af3691..b0b73ff 100644
44 --- a/kernel/printk.c
45 +++ b/kernel/printk.c
46 @@ -1125,11 +1125,21 @@ MODULE_PARM_DESC(console_suspend, "suspend console during suspend"
47   *
48   * This disables printk() while we go into suspend states
49   */
50 +void (*brcm_s3_cb)(void);
51 +
52 +
53 +void register_brcm_s3_cb(void (*cb)(void))
54 +{
55 +       brcm_s3_cb = cb;
56 +}
57 +EXPORT_SYMBOL(register_brcm_s3_cb);
58 +
59  void suspend_console(void)
60  {
61         if (!console_suspend_enabled)
62                 return;
63         printk("Suspending console(s) (use no_console_suspend to debug)\n");
64 +       if(brcm_s3_cb) brcm_s3_cb();
65         console_lock();
66         console_suspended = 1;
67         up(&console_sem);