From 62cb85501a8f5a06305f0a8afb6c11eeadcf07f9 Mon Sep 17 00:00:00 2001 From: schon Date: Thu, 25 Sep 2014 10:43:34 +0900 Subject: [PATCH] Fix WOL problem in duo2 --- .../linux/linux-vuplus-3.13.5/brcm_s3_wol.patch | 37 +++++++++++---------- .../recipes/linux/linux-vuplus_3.13.5.bbappend | 2 +- .../vuplus-coldboot/vuplus-coldboot.bb | 4 +-- .../vuplus-coldboot/vuplus-coldboot/coldboot | Bin 6232 -> 15248 bytes 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/meta-bsp/vuduo2/recipes/linux/linux-vuplus-3.13.5/brcm_s3_wol.patch b/meta-bsp/vuduo2/recipes/linux/linux-vuplus-3.13.5/brcm_s3_wol.patch index 1eca800..57baaef 100644 --- a/meta-bsp/vuduo2/recipes/linux/linux-vuplus-3.13.5/brcm_s3_wol.patch +++ b/meta-bsp/vuduo2/recipes/linux/linux-vuplus-3.13.5/brcm_s3_wol.patch @@ -37,14 +37,14 @@ index c23156a..9ae22a9 100644 device_set_wakeup_enable(&dev->dev, wol->wolopts); pDevCtrl->wolopts = wol->wolopts; -diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c -index 62ee437..ffd0bb5 100644 ---- a/kernel/power/suspend.c -+++ b/kernel/power/suspend.c -@@ -167,6 +167,15 @@ void __attribute__ ((weak)) arch_suspend_enable_irqs(void) - local_irq_enable(); +diff --git a/drivers/brcmstb/setup.c b/drivers/brcmstb/setup.c +index 21a6e42..954b902 100644 +--- a/drivers/brcmstb/setup.c ++++ b/drivers/brcmstb/setup.c +@@ -932,6 +932,15 @@ void brcm_machine_restart(const char *command) + ; } - + +void (*brcm_s3_cb)(void); + + @@ -54,14 +54,15 @@ index 62ee437..ffd0bb5 100644 +} +EXPORT_SYMBOL(register_brcm_s3_cb); + - /** - * suspend_enter - Make the system enter the given sleep state. - * @state: System sleep state to enter. -@@ -211,6 +220,7 @@ static int suspend_enter(suspend_state_t state, bool *wakeup) - } - - ftrace_stop(); -+ if(brcm_s3_cb) brcm_s3_cb(); - error = disable_nonboot_cpus(); - if (error || suspend_test(TEST_CPUS)) - goto Enable_cpus; + void brcm_machine_halt(void) + { + #ifdef CONFIG_BRCM_IRW_HALT +@@ -939,6 +948,7 @@ void brcm_machine_halt(void) + BDEV_WR_F_RB(SUN_TOP_CTRL_GENERAL_CTRL_1, irw_top_sw_pwroff, 0); + BDEV_WR_F_RB(SUN_TOP_CTRL_GENERAL_CTRL_1, irw_top_sw_pwroff, 1); + #endif ++ if(brcm_s3_cb) brcm_s3_cb(); + #ifdef CONFIG_BRCM_HAS_AON + /* may be S3 cold boot */ + brcm_pm_s3_cold_boot(); + diff --git a/meta-bsp/vuduo2/recipes/linux/linux-vuplus_3.13.5.bbappend b/meta-bsp/vuduo2/recipes/linux/linux-vuplus_3.13.5.bbappend index 233ccff..1a1a2ca 100644 --- a/meta-bsp/vuduo2/recipes/linux/linux-vuplus_3.13.5.bbappend +++ b/meta-bsp/vuduo2/recipes/linux/linux-vuplus_3.13.5.bbappend @@ -1,6 +1,6 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${P}:" -PR .= "-bsp1" +PR .= "-bsp2" SRC_URI += " \ file://brcm_s3_wol.patch;patch=1;pnum=1 \ diff --git a/meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot.bb b/meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot.bb index 7e926b0..ff40cde 100644 --- a/meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot.bb +++ b/meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot.bb @@ -4,7 +4,7 @@ LICENSE = "CLOSED" PV = "1.0" -PR = "r2" +PR = "r3" SRC_REV = "" SRC_URI = "file://coldboot \ @@ -20,6 +20,6 @@ do_install() { install -m 0755 ${WORKDIR}/coldboot.sh ${D}/etc/init.d/coldboot.sh install -m 0755 ${WORKDIR}/ethwol.sh ${D}/etc/init.d/ethwol.sh install -m 0755 ${WORKDIR}/coldboot ${D}/usr/bin/coldboot - ln -sf ../init.d/coldboot.sh ${D}${sysconfdir}/rc0.d/S30coldboot.sh + ln -sf ../init.d/coldboot.sh ${D}${sysconfdir}/rc0.d/S50coldboot.sh ln -sf ../init.d/ethwol.sh ${D}${sysconfdir}/rc0.d/K32ethwol.sh } diff --git a/meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot/coldboot b/meta-openvuplus/recipes-vuplus/vuplus-coldboot/vuplus-coldboot/coldboot index 0e355883b5bf9d804de3862e04d41c3cd39c678a..6c2162308f86bbf78dee01fd62fe8939686caf9a 100755 GIT binary patch literal 15248 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 literal 6232 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 r9RDNuE$k0H@G