use fixed SRCREV 1e99787f3387d3dd1e6167af73597674bf8fe37d.
[vuplus_openvuplus_3.0] / meta-bsp / vuduo2 / recipes / linux / linux-vuplus-3.3.8 / brcm_s3_wol.patch
1 diff --git a/arch/mips/brcmstb/s3_standby.S b/arch/mips/brcmstb/s3_standby.S
2 index f1d836a..038a67d 100644
3 --- a/arch/mips/brcmstb/s3_standby.S
4 +++ b/arch/mips/brcmstb/s3_standby.S
5 @@ -76,6 +76,7 @@
6  # save cp0 sr
7         sw      t1, 48(t0)
8  
9 +#if 0
10  # Write-back gp registers - cache will be gone after wakeup
11  # align context area address to the cache line
12         addiu   t1, a2, -1
13 @@ -118,6 +119,7 @@ skip_dram_encode:
14         sw      t1, 0(t0)
15         lw      zero, 0(t0)
16  
17 +#endif
18  # deep power down request
19  pd_request:
20         li      t0, REG(BCHP_AON_CTRL_PM_CTRL)
21 diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
22 old mode 100644
23 new mode 100755
24 index faf58ab..52e31ed
25 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
26 +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
27 @@ -3123,6 +3123,34 @@ static int bcmgenet_set_wol(struct net_device *dev,
28                 umac->mpd_ctrl |= MPD_PW_EN;
29         }
30  
31 +       if (pDevCtrl->phyType == BRCM_PHY_TYPE_EXT_RGMII)
32 +       {
33 +               if(wol->wolopts & WAKE_MAGIC)
34 +               {
35 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0007);
36 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006e);
37 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x15, dev->dev_addr[1]<<8 | dev->dev_addr[0]);
38 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x16, dev->dev_addr[3]<<8 | dev->dev_addr[2]);
39 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x17, dev->dev_addr[5]<<8 | dev->dev_addr[4]);
40 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0007);
41 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006d);
42 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x16, 0x9fff);
43 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x15, 0x1000);
44 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006d);
45 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x19, 0x0001);
46 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0000);
47 +
48 +               }
49 +               else
50 +               {
51 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0007);
52 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006d);
53 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x16, 0x9fff);
54 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x15, 0x0000);
55 +                       pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0000);
56 +               }
57 +       }
58 +
59         device_set_wakeup_enable(&dev->dev, wol->wolopts);
60         pDevCtrl->wolopts = wol->wolopts;
61         return 0;
62 diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
63 index 038d72b..dce3483 100644
64 --- a/kernel/power/suspend.c
65 +++ b/kernel/power/suspend.c
66 @@ -131,6 +131,15 @@ void __attribute__ ((weak)) arch_suspend_enable_irqs(void)
67   *
68   * This function should be called after devices have been suspended.
69   */
70 +void (*brcm_s3_cb)(void);
71 +
72 +
73 +void register_brcm_s3_cb(void (*cb)(void))
74 +{
75 +        brcm_s3_cb = cb;
76 +}
77 +EXPORT_SYMBOL(register_brcm_s3_cb);
78 +
79  static int suspend_enter(suspend_state_t state, bool *wakeup)
80  {
81         int error;
82 @@ -156,6 +165,7 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
83         if (suspend_test(TEST_PLATFORM))
84                 goto Platform_wake;
85  
86 +       if(brcm_s3_cb) brcm_s3_cb();
87         error = disable_nonboot_cpus();
88         if (error || suspend_test(TEST_CPUS))
89                 goto Enable_cpus;