From 7054d38de3a80d433981df6d89c5936a2cae02c8 Mon Sep 17 00:00:00 2001 From: hschang Date: Wed, 17 Jul 2013 13:22:49 +0900 Subject: [PATCH] Support WOL in duo2(needs a CFE update) - Duo2 CFE V2 URL --> http://archive.vuplus.com/download/cfe/duo2/v2/Duo2_CFE_V2.zip - Duo2 CFE V2 Upate HOWTO : http://archive.vuplus.com/download/doc/duo2_cfe_v2_update.txt --- meta-bsp/vuduo2/conf/machine/vuduo2.conf | 1 + .../linux/linux-vuplus-3.3.8/brcm_s3_wol.patch | 67 +++++++++++++++++++++ .../recipes/linux/linux-vuplus_3.3.8.bbappend | 3 +- .../recipes/vuplus/vuplus-dvb-modules.bbappend | 6 +- meta-openvuplus/recipes-vuplus/enigma2/enigma2.bb | 2 +- .../recipes-vuplus/tasks/task-vuplus-base.inc | 3 +- .../recipes-vuplus/tasks/task-vuplus-enigma2.inc | 3 +- .../vuplus-coldboot/vuplus-coldboot.bb | 21 +++++++ .../vuplus-coldboot/vuplus-coldboot/coldboot | Bin 0 -> 12403 bytes .../vuplus-coldboot/vuplus-coldboot/coldboot.sh | 14 +++++ 10 files changed, 113 insertions(+), 7 deletions(-) create mode 100644 meta-bsp/vuduo2/recipes/linux/linux-vuplus-3.3.8/brcm_s3_wol.patch create mode 100644 meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot.bb create mode 100755 meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot/coldboot create mode 100755 meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot/coldboot.sh diff --git a/meta-bsp/vuduo2/conf/machine/vuduo2.conf b/meta-bsp/vuduo2/conf/machine/vuduo2.conf index 50024f7..1eb9568 100644 --- a/meta-bsp/vuduo2/conf/machine/vuduo2.conf +++ b/meta-bsp/vuduo2/conf/machine/vuduo2.conf @@ -17,6 +17,7 @@ VUPLUS_FEATURES += "webif" VUPLUS_FEATURES += "autoshutdown" VUPLUS_FEATURES += "transcoding" VUPLUS_FEATURES += "webmanual" +VUPLUS_FEATURES += "wol" IMAGE_UNPACK_PATH = "vuplus/duo2" MKFS_UBI_MAX_ERASE_BLK_COUNT = "4096" diff --git a/meta-bsp/vuduo2/recipes/linux/linux-vuplus-3.3.8/brcm_s3_wol.patch b/meta-bsp/vuduo2/recipes/linux/linux-vuplus-3.3.8/brcm_s3_wol.patch new file mode 100644 index 0000000..dcfc5f7 --- /dev/null +++ b/meta-bsp/vuduo2/recipes/linux/linux-vuplus-3.3.8/brcm_s3_wol.patch @@ -0,0 +1,67 @@ +diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c +old mode 100644 +new mode 100755 +index faf58ab..52e31ed +--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c ++++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c +@@ -3123,6 +3123,34 @@ static int bcmgenet_set_wol(struct net_device *dev, + umac->mpd_ctrl |= MPD_PW_EN; + } + ++ if (pDevCtrl->phyType == BRCM_PHY_TYPE_EXT_RGMII) ++ { ++ if(wol->wolopts & WAKE_MAGIC) ++ { ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0007); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006e); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x15, dev->dev_addr[1]<<8 | dev->dev_addr[0]); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x16, dev->dev_addr[3]<<8 | dev->dev_addr[2]); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x17, dev->dev_addr[5]<<8 | dev->dev_addr[4]); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0007); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006d); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x16, 0x9fff); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x15, 0x1000); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006d); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x19, 0x0001); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0000); ++ ++ } ++ else ++ { ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0007); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1e, 0x006d); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x16, 0x9fff); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x15, 0x0000); ++ pDevCtrl->mii.mdio_write(dev, pDevCtrl->phyAddr, 0x1f, 0x0000); ++ } ++ } ++ + device_set_wakeup_enable(&dev->dev, wol->wolopts); + pDevCtrl->wolopts = wol->wolopts; + return 0; +diff --git a/kernel/printk.c b/kernel/printk.c +index 1af3691..b0b73ff 100644 +--- a/kernel/printk.c ++++ b/kernel/printk.c +@@ -1125,11 +1125,21 @@ MODULE_PARM_DESC(console_suspend, "suspend console during suspend" + * + * This disables printk() while we go into suspend states + */ ++void (*brcm_s3_cb)(void); ++ ++ ++void register_brcm_s3_cb(void (*cb)(void)) ++{ ++ brcm_s3_cb = cb; ++} ++EXPORT_SYMBOL(register_brcm_s3_cb); ++ + void suspend_console(void) + { + if (!console_suspend_enabled) + return; + printk("Suspending console(s) (use no_console_suspend to debug)\n"); ++ if(brcm_s3_cb) brcm_s3_cb(); + console_lock(); + console_suspended = 1; + up(&console_sem); diff --git a/meta-bsp/vuduo2/recipes/linux/linux-vuplus_3.3.8.bbappend b/meta-bsp/vuduo2/recipes/linux/linux-vuplus_3.3.8.bbappend index f6a2ab5..faf81bd 100644 --- a/meta-bsp/vuduo2/recipes/linux/linux-vuplus_3.3.8.bbappend +++ b/meta-bsp/vuduo2/recipes/linux/linux-vuplus_3.3.8.bbappend @@ -1,7 +1,8 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${P}:" -PR .= "-bsp2" +PR .= "-bsp3" SRC_URI += "file://remove_genet1.patch;patch=1;pnum=1 \ file://nand_base.patch;patch=1;pnum=1 \ + file://brcm_s3_wol.patch;patch=1;pnum=1 \ " diff --git a/meta-bsp/vuduo2/recipes/vuplus/vuplus-dvb-modules.bbappend b/meta-bsp/vuduo2/recipes/vuplus/vuplus-dvb-modules.bbappend index c1bad62..f15d647 100644 --- a/meta-bsp/vuduo2/recipes/vuplus/vuplus-dvb-modules.bbappend +++ b/meta-bsp/vuduo2/recipes/vuplus/vuplus-dvb-modules.bbappend @@ -1,6 +1,6 @@ -SRCDATE = "20130711" +SRCDATE = "20130716" MODULES_NAME = "procmk\ndvb-bcm7424\nbrcmfb\nfpga_directc" -SRC_URI[md5sum] = "ac1583a300f2707a591c8def871e72fb" -SRC_URI[sha256sum] = "a0d6ecf6cbdcfdd72ab49d2bb6850d2a197ccd477d8e49d2c031cd4c51fb8c2d" +SRC_URI[md5sum] = "f1ccddbea1af75a56dbb4a80bcfcc40c" +SRC_URI[sha256sum] = "3884a71ab0afae59651e797aae02e22dd02bc216a0da5449858f7c1346bb586d" diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2.bb b/meta-openvuplus/recipes-vuplus/enigma2/enigma2.bb index 831ab21..d09e536 100644 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2.bb +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2.bb @@ -85,7 +85,7 @@ RDEPENDS_enigma2-plugin-systemplugins-3gmodemmanager = "ppp usb-modeswitch usb-m RDEPENDS_enigma2-plugin-systemplugins-devicemanager = "util-linux-blkid ntfs-3g dosfstools" PN = "enigma2" -PR = "r23" +PR = "r24" SRCDATE = "20121128" #SRCDATE is NOT used by git to checkout a specific revision diff --git a/meta-openvuplus/recipes-vuplus/tasks/task-vuplus-base.inc b/meta-openvuplus/recipes-vuplus/tasks/task-vuplus-base.inc index ae9f3be..799a14f 100644 --- a/meta-openvuplus/recipes-vuplus/tasks/task-vuplus-base.inc +++ b/meta-openvuplus/recipes-vuplus/tasks/task-vuplus-base.inc @@ -2,7 +2,7 @@ SUMMARY = "Vuplus: Base Task for Vuplus." SECTION = "vuplus/base" LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" -INC_PR = "r7" +INC_PR = "r8" inherit task @@ -62,6 +62,7 @@ VUPLUS_BASE_RECOMMENDS = "\ openvpn \ zeroconf \ ${@base_contains("VUPLUS_FEATURES", "vuplus-fpga-update", "vuplus-fpga-update", "", d)} \ + ${@base_contains("VUPLUS_FEATURES", "wol", "vuplus-coldboot", "", d)} \ " VUPLUS_BASE_OPTIONAL_RECOMMENDS = "\ diff --git a/meta-openvuplus/recipes-vuplus/tasks/task-vuplus-enigma2.inc b/meta-openvuplus/recipes-vuplus/tasks/task-vuplus-enigma2.inc index 60f9fea..c080bb8 100644 --- a/meta-openvuplus/recipes-vuplus/tasks/task-vuplus-enigma2.inc +++ b/meta-openvuplus/recipes-vuplus/tasks/task-vuplus-enigma2.inc @@ -2,7 +2,7 @@ SUMMARY = "Enigma2 Task for Vuplus" SECTION = "vuplus/base" LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" -INC_PR = "r9" +INC_PR = "r10" inherit task @@ -58,6 +58,7 @@ RDEPENDS_${PN} += " \ ${@base_contains("VUPLUS_FEATURES", "3gmodem", "enigma2-plugin-systemplugins-3gmodemmanager", "", d)} \ ${@base_contains("VUPLUS_FEATURES", "autoshutdown", "enigma2-plugin-systemplugins-autoshutdown", "", d)} \ ${@base_contains("VUPLUS_FEATURES", "transcoding", "enigma2-plugin-systemplugins-transcodingsetup enigma2-transtreamproxy", "", d)} \ + ${@base_contains("VUPLUS_FEATURES", "wol", "enigma2-plugin-systemplugins-wolsetup", "", d)} \ ${@base_conditional("MACHINE", "vuduo2", "duo2lcd4linux lcd4linuxsupport", "", d)} \ " diff --git a/meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot.bb b/meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot.bb new file mode 100644 index 0000000..df15ed7 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot.bb @@ -0,0 +1,21 @@ +DESCIPTION = "S3 cold boot" +MAINTAINER = "vuplus team" +LICENSE = "CLOSED" + + +PV = "1.0" +PR = "r0" +SRC_REV = "" + +SRC_URI = "file://coldboot \ + file://coldboot.sh" + +do_install() { + install -d ${D}/etc/init.d \ + ${D}/usr/bin \ + ${D}${sysconfdir}/rc0.d + + install -m 0755 ${WORKDIR}/coldboot.sh ${D}/etc/init.d/coldboot.sh + install -m 0755 ${WORKDIR}/coldboot ${D}/usr/bin/coldboot + ln -sf ../init.d/coldboot.sh ${D}${sysconfdir}/rc0.d/S30coldboot.sh +} diff --git a/meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot/coldboot b/meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot/coldboot new file mode 100755 index 0000000000000000000000000000000000000000..33473d5c9b8718c88fb36a81bbb8362a1e5a17b9 GIT binary patch literal 12403 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