Initial commit, long overdue

This commit is contained in:
Tad 2016-12-21 19:30:02 -05:00
commit c0083c1519
292 changed files with 951990 additions and 0 deletions

1550
Patches/OLD/Bacon-TWRP.patch Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,31 @@
From ba175c7252b77fc25384bf76957434193800a8f6 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Wed, 4 Nov 2015 23:14:54 -0500
Subject: [PATCH] Dont enable battery saver when switching to power save perf
profile
Change-Id: If011b0ad5b8aeb825b741671908ef548ec95d951
---
.../core/java/com/android/server/power/PowerManagerService.java | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 4b2ce36..a4bd55b 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -3421,11 +3421,7 @@ public final class PowerManagerService extends SystemService
public boolean setPowerProfile(String profile) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
final long ident = Binder.clearCallingIdentity();
- try {
- setLowPowerModeInternal(PowerManager.PROFILE_POWER_SAVE.equals(profile));
- } finally {
- Binder.restoreCallingIdentity(ident);
- }
+ Binder.restoreCallingIdentity(ident);
return mPerformanceManager.setPowerProfile(profile);
}
--
2.6.2

View file

@ -0,0 +1,62 @@
From 216cc9fe474a16a0105e51d97f7bc49c2e52a0da Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Wed, 4 Nov 2015 23:11:47 -0500
Subject: [PATCH] Change toolchain
Change-Id: I135e9cdfaec3a70684ee3b3789fe0588d1237712
---
core/combo/TARGET_linux-arm.mk | 4 ++--
envsetup.sh | 6 +++---
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/core/combo/TARGET_linux-arm.mk b/core/combo/TARGET_linux-arm.mk
index 95b1804..177948b 100644
--- a/core/combo/TARGET_linux-arm.mk
+++ b/core/combo/TARGET_linux-arm.mk
@@ -35,10 +35,10 @@ TARGET_$(combo_2nd_arch_prefix)ARCH_VARIANT := armv5te
endif
# Decouple NDK library selection with platform compiler version
-$(combo_2nd_arch_prefix)TARGET_NDK_GCC_VERSION := 4.8
+$(combo_2nd_arch_prefix)TARGET_NDK_GCC_VERSION := 4.9
ifeq ($(strip $(TARGET_GCC_VERSION_EXP)),)
-$(combo_2nd_arch_prefix)TARGET_GCC_VERSION := 4.8
+$(combo_2nd_arch_prefix)TARGET_GCC_VERSION := 4.9-cortex-a15
else
$(combo_2nd_arch_prefix)TARGET_GCC_VERSION := $(TARGET_GCC_VERSION_EXP)
endif
diff --git a/envsetup.sh b/envsetup.sh
index 51f3253..b5009ed 100644
--- a/envsetup.sh
+++ b/envsetup.sh
@@ -142,7 +142,7 @@ function setpaths()
gccprebuiltdir=$(get_abs_build_var ANDROID_GCC_PREBUILTS)
# defined in core/config.mk
- targetgccversion=$(get_build_var TARGET_GCC_VERSION)
+ targetgccversion=4.9-cortex-a15
targetgccversion2=$(get_build_var 2ND_TARGET_GCC_VERSION)
export TARGET_GCC_VERSION=$targetgccversion
@@ -155,7 +155,7 @@ function setpaths()
;;
x86_64) toolchaindir=x86/x86_64-linux-android-$targetgccversion/bin
;;
- arm) toolchaindir=arm/arm-linux-androideabi-$targetgccversion/bin
+ arm) toolchaindir=arm/arm-linux-androideabi-4.9-cortex-a15/bin
;;
arm64) toolchaindir=aarch64/aarch64-linux-android-$targetgccversion/bin;
toolchaindir2=arm/arm-linux-androideabi-$targetgccversion2/bin
@@ -179,7 +179,7 @@ function setpaths()
case $ARCH in
arm)
# Legacy toolchain configuration used for ARM kernel compilation
- toolchaindir=arm/arm-eabi-$targetgccversion/bin
+ toolchaindir=arm/arm-eabi-4.8-cortex-a15/bin
if [ -d "$gccprebuiltdir/$toolchaindir" ]; then
export ARM_EABI_TOOLCHAIN="$gccprebuiltdir/$toolchaindir"
ANDROID_KERNEL_TOOLCHAIN_PATH="$ARM_EABI_TOOLCHAIN":
--
2.6.2

View file

@ -0,0 +1,33 @@
From 1e69f23b5f6f31406240bf61d66db3ac6a19484f Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Wed, 11 Nov 2015 21:01:29 -0500
Subject: [PATCH] Harden misc options
Change-Id: I4c82dffb19a5448b01df9942e59642ce96cf8416
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 19cbbdb..16ffbdd 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -3431,13 +3431,13 @@ CONFIG_ARM_UNWIND=y
CONFIG_KEYS=y
# CONFIG_ENCRYPTED_KEYS is not set
# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITY=y
# CONFIG_SECURITYFS is not set
CONFIG_SECURITY_NETWORK=y
# CONFIG_SECURITY_NETWORK_XFRM is not set
# CONFIG_SECURITY_PATH is not set
-CONFIG_LSM_MMAP_MIN_ADDR=4096
+CONFIG_LSM_MMAP_MIN_ADDR=32768
CONFIG_SECURITY_SELINUX=y
# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set
# CONFIG_SECURITY_SELINUX_DISABLE is not set
--
2.6.2

View file

@ -0,0 +1,67 @@
From f245b2d23f649928cb16e0e3ecf66891511f705d Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Wed, 30 Dec 2015 14:20:30 -0500
Subject: [PATCH] Add TWRP
Change-Id: I9e6ff0717b0a5df908b771f50c62e21193c20ab4
---
BoardConfig.mk | 16 ++++++++++++++++
device.mk | 1 +
twrp.fstab | 6 ++++++
3 files changed, 23 insertions(+)
create mode 100644 twrp.fstab
diff --git a/BoardConfig.mk b/BoardConfig.mk
index d8d9f5c..753f7e8 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -129,6 +129,22 @@ MALLOC_IMPL := dlmalloc
-include vendor/lge/mako/BoardConfigVendor.mk
+#TWRP config
+DEVICE_RESOLUTION := 720x1280
+RECOVERY_SDCARD_ON_DATA := true
+RECOVERY_GRAPHICS_USE_LINELENGTH := true
+BOARD_HAS_NO_REAL_SDCARD := true
+PRODUCT_BUILD_PROP_OVERRIDES += BUILD_UTC_DATE=0
+#TW_INCLUDE_CRYPTO := true
+TW_INCLUDE_JB_CRYPTO := true
+TW_FLASH_FROM_STORAGE := true
+TW_NO_USB_STORAGE := true
+TW_INTERNAL_STORAGE_PATH := "/data/media"
+TW_INTERNAL_STORAGE_MOUNT_POINT := "data"
+TW_EXTERNAL_STORAGE_PATH := "/usb-otg"
+TW_EXTERNAL_STORAGE_MOUNT_POINT := "usb-otg"
+TW_SIGNED_ZIP_VERIFY := true
+
BOARD_HAS_NO_SELECT_BUTTON := true
BOARD_HARDWARE_CLASS := device/lge/mako/cmhw/
diff --git a/device.mk b/device.mk
index 8b300f2..b2dc8ac 100644
--- a/device.mk
+++ b/device.mk
@@ -62,6 +62,7 @@ PRODUCT_COPY_FILES += \
device/lge/mako/init.mako.rc:root/init.mako.rc \
device/lge/mako/init.mako.usb.rc:root/init.mako.usb.rc \
device/lge/mako/fstab.mako:root/fstab.mako \
+ device/lge/mako/twrp.fstab:root/etc/twrp.fstab \
device/lge/mako/ueventd.mako.rc:root/ueventd.mako.rc \
device/lge/mako/media_profiles.xml:system/etc/media_profiles.xml \
frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:system/etc/media_codecs_google_audio.xml \
diff --git a/twrp.fstab b/twrp.fstab
new file mode 100644
index 0000000..4c95eba
--- /dev/null
+++ b/twrp.fstab
@@ -0,0 +1,6 @@
+/boot emmc /dev/block/platform/msm_sdcc.1/by-name/boot
+/recovery emmc /dev/block/platform/msm_sdcc.1/by-name/recovery
+/system ext4 /dev/block/platform/msm_sdcc.1/by-name/system
+/data ext4 /dev/block/platform/msm_sdcc.1/by-name/userdata length=-16384
+/cache ext4 /dev/block/platform/msm_sdcc.1/by-name/cache
+
--
2.6.4

View file

@ -0,0 +1,209 @@
From a3788d9279bbe01ba2a23d4230ec1c064c523680 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Wed, 18 Nov 2015 07:22:21 -0500
Subject: [PATCH] Take advantage of per-app performance profiles
Change-Id: Ib383403739de7fee8efa46790d70caf4b75fb097
---
.../frameworks/base/core/res/res/values/config.xml | 185 ++++++++++++++++++++-
1 file changed, 182 insertions(+), 3 deletions(-)
diff --git a/overlay/common/frameworks/base/core/res/res/values/config.xml b/overlay/common/frameworks/base/core/res/res/values/config.xml
index b33887a..973bdba 100644
--- a/overlay/common/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/common/frameworks/base/core/res/res/values/config.xml
@@ -48,9 +48,188 @@
Each item should list the fully-qualified activity
name and the power profile id, separated by a comma. -->
<string-array name="config_auto_perf_activities" translatable="false">
- <item>com.aurorasoftworks.quadrant.*BenchmarkExecutionActivity,2</item>
- <item>com.antutu.ABenchMark.*,2</item>
- <item>.*com.antutu.benchmark.*,2</item>
+ <item>au.com.shiftyjelly.pocketcasts.*,0</item>
+ <item>be.uhasselt.privacypolice.*,0</item>
+ <item>com.accuweather.android.*,0</item>
+ <item>com.adobe.reader.*,0</item>
+ <item>com.alensw.PicFolder.*,0</item>
+ <item>com.amaze.filemanager.*,0</item>
+ <item>com.amazon.kindle.*,0</item>
+ <item>com.amazon.mShop.android.shopping.*,0</item>
+ <item>com.amazon.windowshop.*,0</item>
+ <item>com.andrewshu.android.reddit.*,0</item>
+ <item>com.andrewshu.android.redditdonation.*,0</item>
+ <item>com.android.browser.*,1</item>
+ <item>com.android.calculator2.*,0</item>
+ <item>com.android.calendar.*,0</item>
+ <item>com.android.camera2.*,1</item>
+ <item>com.android.chrome.*,1</item>
+ <item>com.android.contacts.*,0</item>
+ <item>com.android.deskclock.*,0</item>
+ <item>com.android.dialer.*,0</item>
+ <item>com.android.email.*,0</item>
+ <item>com.android.gallery3d.*,0</item>
+ <item>com.android.incallui.*,0</item>
+ <item>com.android.keepass.*,1</item>
+ <item>com.android.mms.*,0</item>
+ <item>com.android.providers.downloads.ui.*,0</item>
+ <item>com.android.settings.*,0</item>
+ <item>com.android.soundrecorder.*,0</item>
+ <item>com.antutu.ABenchMark.*,2</item>
+ <item>.*com.antutu.benchmark.*,2</item>
+ <item>com.asksven.betterbatterystats.*,0</item>
+ <item>com.aurorasoftworks.quadrant.*BenchmarkExecutionActivity,2</item>
+ <item>com.authy.authy.*,0</item>
+ <item>com.bethsoft.falloutshelter.*,1</item>
+ <item>com.coffeestainstudios.goatsimulator.*,1</item>
+ <item>com.cyanogenmod.trebuchet.*,0</item>
+ <item>com.danvelazco.fbwrapper.*,0</item>
+ <item>com.distractionware.superhexagon.*,1</item>
+ <item>com.dropbox.android.*,0</item>
+ <item>com.eamobile.monopoly_na_wf.*,1</item>
+ <item>com.ebay.mobile.*,0</item>
+ <item>com.facebook.katana.*,1</item>
+ <item>com.facebook.orca.*,1</item>
+ <item>com.farproc.wifi.analyzer.*,0</item>
+ <item>com.fifthelement.trimmer.*,1</item>
+ <item>com.flightradar24pro.*,1</item>
+ <item>com.flyersoft.moonreader.*,0</item>
+ <item>com.flyersoft.moonreaderp.*,0</item>
+ <item>com.gh4a.*,0</item>
+ <item>com.google.android.apps.chromecast.app.*,0</item>
+ <item>com.google.android.apps.docs.editors.docs.*,1</item>
+ <item>com.google.android.apps.docs.editors.sheets.*,1</item>
+ <item>com.google.android.apps.docs.editors.slides.*,1</item>
+ <item>com.google.android.apps.gmoney.*,0</item>
+ <item>com.google.android.apps.hangoutsdialer.*,1</item>
+ <item>com.google.android.apps.inbox.*,0</item>
+ <item>com.google.android.apps.messaging.*,0</item>
+ <item>com.google.android.apps.pdfviewer.*,0</item>
+ <item>com.google.android.apps.photos.*,0</item>
+ <item>com.google.android.apps.translate.*,1</item>
+ <item>com.google.android.calendar.*,0</item>
+ <item>com.google.android.gms.*,0</item>
+ <item>com.google.android.googlequicksearchbox.*,1</item>
+ <item>com.google.android.keep.*,0</item>
+ <item>com.google.android.play.games.*,0</item>
+ <item>com.google.android.youtube.*,1</item>
+ <item>com.google.earth.*,1</item>
+ <item>com.google.xzing.client.android.*,0</item>
+ <item>com.grarak.kerneladiutor.*,0</item>
+ <item>com.hulu.plus.*,1</item>
+ <item>com.instagram.android.*,1</item>
+ <item>com.ironhidegames.android.kingdomrushfrontiers.*,1</item>
+ <item>com.ironhidegames.android.kingdomrushorigins.*,1</item>
+ <item>com.jeremysteckling.facerrel.*,0</item>
+ <item>com.koushikdutta.backup.*,1</item>
+ <item>com.koushikdutta.backup.license.*,1</item>
+ <item>com.laurencedawson.reddit_sync.*,0</item>
+ <item>com.laurencedawson.reddit_sync.pro.*,0</item>
+ <item>com.leosfortune.*,0</item>
+ <item>com.lightricks.facetune.*,1</item>
+ <item>com.mb.android.*,1</item>
+ <item>com.melodis.midomiMusicIdentifier.freemium.*,0</item>
+ <item>com.mgaetan89.showsrage.*,0</item>
+ <item>com.microblink.photomath.*,1</item>
+ <item>com.microsoft.office.excel.*,1</item>
+ <item>com.microsoft.office.outlook.*,0</item>
+ <item>com.microsoft.office.powerpoint.*,1</item>
+ <item>com.microsoft.office.word.*,1</item>
+ <item>com.microsoft.skydrive.*,0</item>
+ <item>com.miniclip.plagueinc.*,0</item>
+ <item>com.mitzuli.*,0</item>
+ <item>com.mojang.minecraftpe.*,1</item>
+ <item>com.morlunk.mumbleclient.*,0</item>
+ <item>com.mxtech.videoplayer.ad.*,1</item>
+ <item>com.mxtech.videoplayer.pro.*,1</item>
+ <item>com.netflix.mediaclient.*,1</item>
+ <item>com.ngmoco.pocketgod.*,0</item>
+ <item>com.ninjakiwi.bloonstd5.*,1</item>
+ <item>com.nutomic.syncthingandroid.*,1</item>
+ <item>com.oasisfeng.greenify.*,0</item>
+ <item>com.oasisfeng.greenify.pro.*,0</item>
+ <item>com.pandora.android.*,0</item>
+ <item>com.paypal.android.p2pmobile.*,0</item>
+ <item>com.pinterest.*,0</item>
+ <item>com.plexapp.android.*,1</item>
+ <item>com.primatelabs.geekbench.*,2</item>
+ <item>com.quizup.core.*,0</item>
+ <item>com.redbox.android.activity.*,0</item>
+ <item>com.roku.remote.*,0</item>
+ <item>com.rovio.angrybirds.*,0</item>
+ <item>com.samruston.weather.*,0</item>
+ <item>com.SecUpwN.AIMSICD.*,0</item>
+ <item>com.shazam.android.*,0</item>
+ <item>com.shazam.encore.android.*,0</item>
+ <item>com.skype.radar.*,1</item>
+ <item>com.snapchat.android.*,1</item>
+ <item>com.soundcloud.android.*,0</item>
+ <item>com.spotify.music.*,0</item>
+ <item>com.target.ui.*,0</item>
+ <item>com.tassadar.multirommgr.*,1</item>
+ <item>com.teamspeak.ts3client.*,0</item>
+ <item>com.tinder.*,0</item>
+ <item>com.tobykurien.google_news.*,0</item>
+ <item>com.tumblr.*,0</item>
+ <item>com.twitter.android.*,0</item>
+ <item>com.ubercab.*,1</item>
+ <item>com.ubercab.driver.*,1</item>
+ <item>com.urbandroid.sleep.*,0</item>
+ <item>com.ustwo.monumentvalley.*,0</item>
+ <item>com.uzumapps.wakelockdetector.*,0</item>
+ <item>com.valvesoftware.android.steam.community.*,0</item>
+ <item>com.walmart.android.*,0</item>
+ <item>com.waze.*,1</item>
+ <item>com.weather.Weather.*,0</item>
+ <item>com.whatsapp.*,0</item>
+ <item>com.xzbber.androiddev.*,0</item>
+ <item>com.yelp.android.*,0</item>
+ <item>com.yodo1.crossroad.*,0</item>
+ <item>com.yubico.yubiclip.*,0</item>
+ <item>com.yubico.yubioath.*,0</item>
+ <item>com.zillow.android.zillowmap.*,1</item>
+ <item>co.vine.android.*,1</item>
+ <item>de.srlabs.snoopsnitch.*,0</item>
+ <item>de.tap.easy_xkcd.*,0</item>
+ <item>dev.ukanth.ufirewall.*, 1</item>
+ <item>dk.jens.backup.*,1</item>
+ <item>eu.chainfire.supersu.*,0</item>
+ <item>eu.chainfire.supersu.pro.*,0</item>
+ <item>eu.thedarken.sdm.*,1</item>
+ <item>fr.kwiatkowski.ApkTrack.*,1</item>
+ <item>io.github.droidapps.pdfreader.*,0</item>
+ <item>it.mvilla.android.fenix.*,0</item>
+ <item>kik.android.*,1</item>
+ <item>me.ccrama.redditslide.*,0</item>
+ <item>me.ccrama.slideforreddit.*,0</item>
+ <item>me.ccrama.slideforreddittabletuiunlock.*,0</item>
+ <item>net.dinglisch.android.taskerm.*,0</item>
+ <item>net.etuldan.sparss.floss.*,0</item>
+ <item>net.i2p.android.router.*,0</item>
+ <item>net.minetest.minetest.*,1</item>
+ <item>net.nightwhistler.pageturner.*,0</item>
+ <item>net.osmand.plus.*,1</item>
+ <item>org.adaway.*,1</item>
+ <item>org.chromium.chrome.*,1</item>
+ <item>org.connectbot.*,0</item>
+ <item>org.csploit.android.*,1</item>
+ <item>org.cyanogenmod.audiofx.*,0</item>
+ <item>org.documentfoundation.libreoffice.*,0</item>
+ <item>org.fdroid.fdroid.*,1</item>
+ <item>org.ligi.blexplorer.*,0</item>
+ <item>org.mozilla.firefox.*,1</item>
+ <item>org.ppsspp.ppsspp.*,1</item>
+ <item>org.ppsspp.ppssppgold.*,1</item>
+ <item>org.quantumbadger.redreader.*,0</item>
+ <item>org.schabi.newpipe.*,1</item>
+ <item>org.torproject.android.*,0</item>
+ <item>org.videolan.vlc.*,1</item>
+ <item>org.wikipedia.*,0</item>
+ <item>org.yaaic.*,0</item>
+ <item>org.zwanoo.android.speedtest.*,2</item>
+ <item>reddit.news.*,0</item>
+ <item>rs.pedajaapps.alogcatroot.app.*,0</item>
+ <item>tw.twitch.android.app.*,1</item>
</string-array>
<!-- Defines the default set of global actions. Actions may still be disabled or hidden based
--
2.6.2

View file

@ -0,0 +1,35 @@
From ce457c4d401e9ccc72a7f7806d0413a93a4ee89b Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Tue, 17 Nov 2015 10:06:29 -0500
Subject: [PATCH] Sepolicy fixes
Change-Id: Idc72b9ccf46405bc09bd8117d0d0c5c134663d21
---
sepolicy/mediaserver.te | 3 +++
sepolicy/system_server.te | 2 ++
2 files changed, 5 insertions(+)
diff --git a/sepolicy/mediaserver.te b/sepolicy/mediaserver.te
index 550b069..b986249 100644
--- a/sepolicy/mediaserver.te
+++ b/sepolicy/mediaserver.te
@@ -3,3 +3,6 @@ allow mediaserver camera_prop:property_service set;
# check sound card status
allow mediaserver audiod:binder call;
+
+# For text relocations in /system/vendor/lib/libmmjpeg.so
+allow mediaserver system_file:file execmod;
diff --git a/sepolicy/system_server.te b/sepolicy/system_server.te
index 2edd5b7..a276326 100644
--- a/sepolicy/system_server.te
+++ b/sepolicy/system_server.te
@@ -7,3 +7,5 @@ allow system_server vibeamp_sysfs:file rw_file_perms;
# timerfd
allow system_server rtc_device:chr_file rw_file_perms;
+
+allow system_server system_file:file execmod;
--
2.6.2

View file

@ -0,0 +1,38 @@
From c011137f91433df73fe63cc3f44f42c050d2e637 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Wed, 18 Nov 2015 16:08:52 -0500
Subject: [PATCH] SEPolicy Fixes
Change-Id: I06468fc723c4847506d3c7a28e62fb918794ceaa
---
common/mm-qcamerad.te | 1 +
common/sensors.te | 1 +
2 files changed, 2 insertions(+)
diff --git a/common/mm-qcamerad.te b/common/mm-qcamerad.te
index b912bdf..ca777f2 100644
--- a/common/mm-qcamerad.te
+++ b/common/mm-qcamerad.te
@@ -19,6 +19,7 @@ binder_call(mm-qcamerad, system_server);
binder_use(mm-qcamerad);
allow mm-qcamerad self:process execmem;
+allow mm-qcamerad system_file:file execmod;
# Interact with other media devices
allow mm-qcamerad camera_device:dir search;
allow mm-qcamerad { gpu_device video_device camera_device sensors_device }:chr_file rw_file_perms;
diff --git a/common/sensors.te b/common/sensors.te
index 0e9c847..2ee263b 100644
--- a/common/sensors.te
+++ b/common/sensors.te
@@ -37,6 +37,7 @@ allow sensors sensors_persist_file:file create_file_perms;
# Access to execmem
allow sensors self:process execmem;
+allow sensors system_file:file execmod;
# Wake lock access
wakelock_use(sensors)
--
2.6.2

View file

@ -0,0 +1,22 @@
From bf7a25786c1d4f0fb9ebefee23450f71ae8f7e4d Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Thu, 19 Nov 2015 21:02:28 -0500
Subject: [PATCH] SEPolicy Fixes
Change-Id: I41b9256b69effb64fefd352cc953661373648714
---
sepolicy/custom.te | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 sepolicy/custom.te
diff --git a/sepolicy/custom.te b/sepolicy/custom.te
new file mode 100644
index 0000000..567f78d
--- /dev/null
+++ b/sepolicy/custom.te
@@ -0,0 +1,2 @@
+allow mpdecision self:capability sys_ptrace;
+allow untrusted_app self:file getattr;
--
2.6.2

View file

@ -0,0 +1,210 @@
From 7a1726f94f5f65d5967e3480ef7668f7cfa90685 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Wed, 28 Oct 2015 09:39:52 -0400
Subject: [PATCH] Basic Changes
---
bacon.mk | 4 +-
phone-xxhdpi-3072-dalvik-heap.mk | 25 ++++++++++
phone-xxhdpi-3072-hwui-memory.mk | 30 +++++++++++
system.prop | 104 +++++++++++++++++++++++++++++++++++++++
4 files changed, 161 insertions(+), 2 deletions(-)
create mode 100644 phone-xxhdpi-3072-dalvik-heap.mk
create mode 100644 phone-xxhdpi-3072-hwui-memory.mk
diff --git a/bacon.mk b/bacon.mk
index 8297699..0e9227a 100644
--- a/bacon.mk
+++ b/bacon.mk
@@ -106,8 +106,8 @@ PRODUCT_PACKAGES += \
charger_res_images
# Dalvik/HWUI
-$(call inherit-product-if-exists, frameworks/native/build/phone-xxhdpi-2048-dalvik-heap.mk)
-$(call inherit-product-if-exists, frameworks/native/build/phone-xxhdpi-2048-hwui-memory.mk)
+$(call inherit-product-if-exists, device/oneplus/bacon/phone-xxhdpi-3072-dalvik-heap.mk)
+$(call inherit-product-if-exists, device/oneplus/bacon/phone-xxhdpi-3072-hwui-memory.mk)
# Display
PRODUCT_AAPT_CONFIG := normal
diff --git a/phone-xxhdpi-3072-dalvik-heap.mk b/phone-xxhdpi-3072-dalvik-heap.mk
new file mode 100644
index 0000000..a585268
--- /dev/null
+++ b/phone-xxhdpi-3072-dalvik-heap.mk
@@ -0,0 +1,25 @@
+#
+# Copyright (C) 2014 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Provides overrides to configure the Dalvik heap for a 3G phone
+
+PRODUCT_PROPERTY_OVERRIDES += \
+ dalvik.vm.heapstartsize=24m \
+ dalvik.vm.heapgrowthlimit=320m \
+ dalvik.vm.heapsize=768m \
+ dalvik.vm.heaptargetutilization=0.75 \
+ dalvik.vm.heapminfree=2m \
+ dalvik.vm.heapmaxfree=8m
\ No newline at end of file
diff --git a/phone-xxhdpi-3072-hwui-memory.mk b/phone-xxhdpi-3072-hwui-memory.mk
new file mode 100644
index 0000000..9eff929
--- /dev/null
+++ b/phone-xxhdpi-3072-hwui-memory.mk
@@ -0,0 +1,30 @@
+#
+# Copyright (C) 2014 The CyanogenMod Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Provides overrides to configure the HWUI memory limits
+
+PRODUCT_PROPERTY_OVERRIDES += \
+ ro.hwui.texture_cache_size=96 \
+ ro.hwui.layer_cache_size=64 \
+ ro.hwui.r_buffer_cache_size=12 \
+ ro.hwui.path_cache_size=39 \
+ ro.hwui.gradient_cache_size=1 \
+ ro.hwui.drop_shadow_cache_size=7 \
+ ro.hwui.texture_cache_flushrate=0.4 \
+ ro.hwui.text_small_cache_width=2048 \
+ ro.hwui.text_small_cache_height=2048 \
+ ro.hwui.text_large_cache_width=3072 \
+ ro.hwui.text_large_cache_height=2048
\ No newline at end of file
diff --git a/system.prop b/system.prop
index 8e0027b..110521f 100644
--- a/system.prop
+++ b/system.prop
@@ -23,3 +23,107 @@ ro.gps.agps_provider=1
# cabl is handled by the panel
ro.qualcomm.cabl=0
+
+# enable lazy dexopt
+persist.sys.lazy.dexopt=true
+
+# performance/battery tweaks
+windowsmgr.max_events_per_sec=90
+ro.max.fling_velocity=15000
+ro.min.fling_velocity=8000
+ro.min_pointer_dur=8
+touch.pressure.scale=0.01
+debugtool.anrhistory=0
+profiler.debugmonitor=false
+profiler.launch=false
+profiler.hung.dumpdobugreport=false
+ro.config.htc.nocheckin=1
+ro.config.nocheckin=1
+ro.kernel.android.checkjni=0
+ro.kernel.checkjni=0
+ro.telephony.call_ring.delay=0
+ring.delay=0
+ro.config.combined_signal=true
+net.ipv4.ip_no_pmtu_disc=0
+net.ipv4.route.flush=1
+net.ipv4.tcp_ecn=0
+net.ipv4.tcp_fack=1
+net.ipv4.tcp_mem=187000 187000 187000
+net.ipv4.tcp_moderate_rcvbuf=1
+net.ipv4.tcp_no_metrics_save=1
+net.ipv4.tcp_rfc1337=1
+net.ipv4.tcp_rmem=4096 39000 187000
+net.ipv4.tcp_sack=1
+net.ipv4.tcp_timestamps=1
+net.ipv4.tcp_wmem=4096 39000 18700
+wifi.supplicant_scan_interval=300
+net.ipv4.tcp_window_scaling=1
+ro.ril.hsxpa=3
+ro.ril.gprsclass=10
+ro.ril.hep=1
+ro.ril.hsdpa.category=12
+ro.ril.enable.3g.prefix=1
+ro.ril.htcmaskw1.bitmask=4294967295
+ro.ril.htcmaskw1=14449
+ro.ril.hsupa.category=7
+ro.ril.hsdpa.category=10
+ro.ril.set.mtu1472=1
+persist.cust.tel.eons=1
+persist.data_netmgrd_mtu=1482
+persist.data_netmgrd_nint=8
+ro.use_data_netmgrd=true
+ro.ril.enable.dtm=1
+ro.ril.def.agps.mode=2
+ro.ril.def.agps.feature=1
+ro.ril.enable.gea3=1
+ro.ril.enable.fd.plmn.prefix=23402,23410,23411
+net.tcp.buffersize.default=4096,87380,256960,4096, 16384,256960
+net.tcp.buffersize.wifi=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.umts=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.gprs=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.edge=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.hspa=6144,87380,524288,6144,163 84,262144
+net.tcp.buffersize.lte=524288,1048576,2097152,5242 88,1048576,2097152
+net.tcp.buffersize.hsdpa=6144,87380,1048576,6144,8 7380,1048576
+net.tcp.buffersize.evdo_b=6144,87380,1048576,6144, 87380,1048576
+ro.ril.enable.amr.wideband=1
+profiler.force_disable_err_rpt=1
+profiler.force_disable_ulog=1
+debug.composition.type=gpu
+debug.egl.hw=1
+debug.enabletr=true
+debug.overlayui.enable=1
+debug.performance.tuning=1
+debug.sf.hw=1
+dev.pm.dyn_samplingrate=1
+hw3d.force=1
+ro.config.disable.hw_accel=false
+ro.fb.mode=1
+ro.sf.compbypass.enable=0
+ro.vold.umsdirtyratio=20
+persist.sys.composition.type=c2d
+persist.sys.ui.hw=1
+video.accelerate.hw=1
+persist.sys.use_16bpp_alpha=1
+debug.gr.swapinterval=0
+com.qc.hardware=1
+debug.qc.hardware=true
+debug.qctwa.preservebuf=1
+debug.qctwa.statusbar=1
+pm.sleep_mode=1
+ro.ril.disable.power.collapse=0
+profiler.force_disable_err_rpt=1
+profiler.force_disable_ulog=1
+dalvik.vm.checkjni=false
+dalvik.vm.execution-mode=int:jit
+ro.ril.power_collapse=1
+power_supply.wakeup=enable
+ro.mot.eri.losalert.delay=1000
+ro.config.hw_fast_dormancy=1
+ro.config.hw_power_saving=1
+ro.camcorder.videoModes=true
+ime_extend_row_keyboard=true
+ime_onehand_keyboard=true
+ime_split_keyboard=true
+ime_vibration_pattern=0:60
+dalvik.vm.verify-bytecode=false

View file

@ -0,0 +1,208 @@
From 1bd1c56ef8caf86e28c154a0d8ea0c6ca2d2dd15 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Thu, 29 Oct 2015 08:11:36 -0400
Subject: [PATCH] Update build.prop
---
system.prop | 167 ++++++++++++++++++++++++++++++++----------------------------
1 file changed, 90 insertions(+), 77 deletions(-)
diff --git a/system.prop b/system.prop
index 110521f..41dae74 100644
--- a/system.prop
+++ b/system.prop
@@ -27,103 +27,116 @@ ro.qualcomm.cabl=0
# enable lazy dexopt
persist.sys.lazy.dexopt=true
-# performance/battery tweaks
-windowsmgr.max_events_per_sec=90
-ro.max.fling_velocity=15000
-ro.min.fling_velocity=8000
-ro.min_pointer_dur=8
-touch.pressure.scale=0.01
+com.qc.hardware=1
+dalvik.vm.checkjni=false
+dalvik.vm.execution-mode=int:jit
+dalvik.vm.verify-bytecode=false
+debug.composition.type=gpu
+debug.egl.hw=1
+debug.enabletr=true
+debug.gr.swapinterval=0
+debug.overlayui.enable=1
+debug.performance.tuning=1
+debug.qc.hardware=true
+debug.qctwa.preservebuf=1
+debug.qctwa.statusbar=1
+debug.sf.hw=1
debugtool.anrhistory=0
-profiler.debugmonitor=false
-profiler.launch=false
-profiler.hung.dumpdobugreport=false
-ro.config.htc.nocheckin=1
-ro.config.nocheckin=1
-ro.kernel.android.checkjni=0
-ro.kernel.checkjni=0
-ro.telephony.call_ring.delay=0
-ring.delay=0
-ro.config.combined_signal=true
+dev.pm.dyn_samplingrate=1
+hw3d.force=1
+ime_extend_row_keyboard=true
+ime_onehand_keyboard=true
+ime_split_keyboard=true
+ime_vibration_pattern=0:60
+media.stagefright.enable-aac=true
+media.stagefright.enable-http=true
+media.stagefright.enable-meta=true
+media.stagefright.enable-player=true
+media.stagefright.enable-qcp=true
+media.stagefright.enable-record=false
+media.stagefright.enable-scan=true
net.ipv4.ip_no_pmtu_disc=0
net.ipv4.route.flush=1
net.ipv4.tcp_ecn=0
net.ipv4.tcp_fack=1
net.ipv4.tcp_mem=187000 187000 187000
-net.ipv4.tcp_moderate_rcvbuf=1
+net.ipv4.tcp_moderate_rcvbuf=1
net.ipv4.tcp_no_metrics_save=1
net.ipv4.tcp_rfc1337=1
-net.ipv4.tcp_rmem=4096 39000 187000
+net.ipv4.tcp_rmem=4096 39000 187000
net.ipv4.tcp_sack=1
net.ipv4.tcp_timestamps=1
-net.ipv4.tcp_wmem=4096 39000 18700
-wifi.supplicant_scan_interval=300
net.ipv4.tcp_window_scaling=1
-ro.ril.hsxpa=3
-ro.ril.gprsclass=10
-ro.ril.hep=1
-ro.ril.hsdpa.category=12
-ro.ril.enable.3g.prefix=1
-ro.ril.htcmaskw1.bitmask=4294967295
-ro.ril.htcmaskw1=14449
-ro.ril.hsupa.category=7
-ro.ril.hsdpa.category=10
-ro.ril.set.mtu1472=1
-persist.cust.tel.eons=1
-persist.data_netmgrd_mtu=1482
-persist.data_netmgrd_nint=8
-ro.use_data_netmgrd=true
-ro.ril.enable.dtm=1
-ro.ril.def.agps.mode=2
-ro.ril.def.agps.feature=1
-ro.ril.enable.gea3=1
-ro.ril.enable.fd.plmn.prefix=23402,23410,23411
+net.ipv4.tcp_wmem=4096 39000 18700
net.tcp.buffersize.default=4096,87380,256960,4096, 16384,256960
-net.tcp.buffersize.wifi=4096,87380,256960,4096,163 84,256960
-net.tcp.buffersize.umts=4096,87380,256960,4096,163 84,256960
-net.tcp.buffersize.gprs=4096,87380,256960,4096,163 84,256960
net.tcp.buffersize.edge=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.evdo_b=6144,87380,1048576,6144, 87380,1048576
+net.tcp.buffersize.gprs=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.hsdpa=6144,87380,1048576,6144,8 7380,1048576
net.tcp.buffersize.hspa=6144,87380,524288,6144,163 84,262144
net.tcp.buffersize.lte=524288,1048576,2097152,5242 88,1048576,2097152
-net.tcp.buffersize.hsdpa=6144,87380,1048576,6144,8 7380,1048576
-net.tcp.buffersize.evdo_b=6144,87380,1048576,6144, 87380,1048576
-ro.ril.enable.amr.wideband=1
-profiler.force_disable_err_rpt=1
-profiler.force_disable_ulog=1
-debug.composition.type=gpu
-debug.egl.hw=1
-debug.enabletr=true
-debug.overlayui.enable=1
-debug.performance.tuning=1
-debug.sf.hw=1
-dev.pm.dyn_samplingrate=1
-hw3d.force=1
-ro.config.disable.hw_accel=false
-ro.fb.mode=1
-ro.sf.compbypass.enable=0
-ro.vold.umsdirtyratio=20
+net.tcp.buffersize.umts=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.wifi=4096,87380,256960,4096,163 84,256960
+persist.cust.tel.eons=1
+persist.data_netmgrd_mtu=1482
+persist.data_netmgrd_nint=8
persist.sys.composition.type=c2d
persist.sys.ui.hw=1
-video.accelerate.hw=1
persist.sys.use_16bpp_alpha=1
-debug.gr.swapinterval=0
-com.qc.hardware=1
-debug.qc.hardware=true
-debug.qctwa.preservebuf=1
-debug.qctwa.statusbar=1
pm.sleep_mode=1
-ro.ril.disable.power.collapse=0
+power_supply.wakeup=enable
+profiler.debugmonitor=false
profiler.force_disable_err_rpt=1
profiler.force_disable_ulog=1
-dalvik.vm.checkjni=false
-dalvik.vm.execution-mode=int:jit
-ro.ril.power_collapse=1
-power_supply.wakeup=enable
-ro.mot.eri.losalert.delay=1000
+profiler.hung.dumpdobugreport=false
+profiler.launch=false
+ring.delay=0
+ro.camcorder.videoModes=true
+ro.config.combined_signal=true
+ro.config.disable.hw_accel=false
+ro.config.htc.nocheckin=1
ro.config.hw_fast_dormancy=1
ro.config.hw_power_saving=1
-ro.camcorder.videoModes=true
-ime_extend_row_keyboard=true
-ime_onehand_keyboard=true
-ime_split_keyboard=true
-ime_vibration_pattern=0:60
-dalvik.vm.verify-bytecode=false
+ro.config.nocheckin=1
+ro.fb.mode=1
+ro.kernel.android.checkjni=0
+ro.kernel.checkjni=0
+ro.max.fling_velocity=15000
+ro.media.dec.jpeg.memcap=8000000
+ro.media.enc.hprof.vid.bps=8000000
+ro.media.enc.hprof.vid.fps=65
+ro.media.enc.jpeg.quality=100
+ro.media.panorama.defres=3264x1840
+ro.media.panorama.frameres=1280x720
+ro.min.fling_velocity=8000
+ro.min_pointer_dur=8
+ro.mot.eri.losalert.delay=1000
+ro.ril.def.agps.feature=1
+ro.ril.def.agps.mode=2
+ro.ril.disable.power.collapse=0
+ro.ril.enable.3g.prefix=1
+ro.ril.enable.a52=1
+ro.ril.enable.a53=1
+ro.ril.enable.amr.wideband=1
+ro.ril.enable.dtm=1
+ro.ril.enable.fd.plmn.prefix=23402,23410,23411
+ro.ril.enable.fd.plmn.prefix=23402,23410,23411
+ro.ril.enable.gea3=1
+ro.ril.gprsclass=10
+ro.ril.hep=1
+ro.ril.hsdpa.category=10
+ro.ril.hsdpa.category=12
+ro.ril.hsupa.category=7
+ro.ril.hsxpa=3
+ro.ril.htcmaskw1=14449
+ro.ril.htcmaskw1.bitmask=4294967295
+ro.ril.power_collapse=1
+ro.ril.set.mtu1472=1
+ro.sf.compbypass.enable=0
+ro.telephony.call_ring.delay=0
+ro.use_data_netmgrd=true
+ro.vold.umsdirtyratio=20
+touch.pressure.scale=0.01
+video.accelerate.hw=1
+wifi.supplicant_scan_interval=300
+windowsmgr.max_events_per_sec=90
\ No newline at end of file

View file

@ -0,0 +1,44 @@
From 9f0c8892e0133ba7c525508793d7d7f697ab277f Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Tue, 3 Nov 2015 15:28:57 -0500
Subject: [PATCH] Dont add in Google Widevine DRM and Microsoft PlayReady DRM
---
Android.mk | 24 ------------------------
1 file changed, 24 deletions(-)
diff --git a/Android.mk b/Android.mk
index 4380569..a197677 100644
--- a/Android.mk
+++ b/Android.mk
@@ -124,30 +124,6 @@ $(MC_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
ALL_DEFAULT_INSTALLED_MODULES += $(MC_SYMLINKS)
-PLAYREADY_IMAGES := \
- playread.b00 playread.b01 playread.b02 playread.b03 playread.mdt
-
-PLAYREADY_SYMLINKS := $(addprefix $(TARGET_OUT_ETC)/firmware/,$(notdir $(PLAYREADY_IMAGES)))
-$(PLAYREADY_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
- @echo "Playready firmware link: $@"
- @mkdir -p $(dir $@)
- @rm -rf $@
- $(hide) ln -sf /firmware/image/$(notdir $@) $@
-
-ALL_DEFAULT_INSTALLED_MODULES += $(PLAYREADY_SYMLINKS)
-
-WV_IMAGES := \
- widevine.b00 widevine.b01 widevine.b02 widevine.b03 widevine.mdt
-
-WV_SYMLINKS := $(addprefix $(TARGET_OUT_ETC)/firmware/,$(notdir $(WV_IMAGES)))
-$(WV_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
- @echo "Widevine firmware link: $@"
- @mkdir -p $(dir $@)
- @rm -rf $@
- $(hide) ln -sf /firmware/image/$(notdir $@) $@
-
-ALL_DEFAULT_INSTALLED_MODULES += $(WV_SYMLINKS)
-
# Create links for audcal data files
$(shell mkdir -p $(TARGET_OUT)/etc/firmware/wcd9320; \
ln -sf /data/misc/audio/wcd9320_anc.bin \

View file

@ -0,0 +1,210 @@
From 6d4556965099ffa938810f512307c6309c305658 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Wed, 28 Oct 2015 09:39:52 -0400
Subject: [PATCH] Basic Changes
---
bacon.mk | 4 +-
phone-xxhdpi-3072-dalvik-heap.mk | 25 ++++++++++
phone-xxhdpi-3072-hwui-memory.mk | 30 +++++++++++
system.prop | 104 +++++++++++++++++++++++++++++++++++++++
4 files changed, 161 insertions(+), 2 deletions(-)
create mode 100644 phone-xxhdpi-3072-dalvik-heap.mk
create mode 100644 phone-xxhdpi-3072-hwui-memory.mk
diff --git a/bacon.mk b/bacon.mk
index b8eb98c..5cc342d 100644
--- a/bacon.mk
+++ b/bacon.mk
@@ -104,8 +104,8 @@ PRODUCT_PACKAGES += \
charger_res_images
# Dalvik/HWUI
-$(call inherit-product-if-exists, frameworks/native/build/phone-xxhdpi-2048-dalvik-heap.mk)
-$(call inherit-product-if-exists, frameworks/native/build/phone-xxhdpi-2048-hwui-memory.mk)
+$(call inherit-product-if-exists, device/oneplus/bacon/phone-xxhdpi-3072-dalvik-heap.mk)
+$(call inherit-product-if-exists, device/oneplus/bacon/phone-xxhdpi-3072-hwui-memory.mk)
# Display
PRODUCT_AAPT_CONFIG := normal
diff --git a/phone-xxhdpi-3072-dalvik-heap.mk b/phone-xxhdpi-3072-dalvik-heap.mk
new file mode 100644
index 0000000..a585268
--- /dev/null
+++ b/phone-xxhdpi-3072-dalvik-heap.mk
@@ -0,0 +1,25 @@
+#
+# Copyright (C) 2014 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Provides overrides to configure the Dalvik heap for a 3G phone
+
+PRODUCT_PROPERTY_OVERRIDES += \
+ dalvik.vm.heapstartsize=24m \
+ dalvik.vm.heapgrowthlimit=320m \
+ dalvik.vm.heapsize=768m \
+ dalvik.vm.heaptargetutilization=0.75 \
+ dalvik.vm.heapminfree=2m \
+ dalvik.vm.heapmaxfree=8m
\ No newline at end of file
diff --git a/phone-xxhdpi-3072-hwui-memory.mk b/phone-xxhdpi-3072-hwui-memory.mk
new file mode 100644
index 0000000..9eff929
--- /dev/null
+++ b/phone-xxhdpi-3072-hwui-memory.mk
@@ -0,0 +1,30 @@
+#
+# Copyright (C) 2014 The CyanogenMod Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Provides overrides to configure the HWUI memory limits
+
+PRODUCT_PROPERTY_OVERRIDES += \
+ ro.hwui.texture_cache_size=96 \
+ ro.hwui.layer_cache_size=64 \
+ ro.hwui.r_buffer_cache_size=12 \
+ ro.hwui.path_cache_size=39 \
+ ro.hwui.gradient_cache_size=1 \
+ ro.hwui.drop_shadow_cache_size=7 \
+ ro.hwui.texture_cache_flushrate=0.4 \
+ ro.hwui.text_small_cache_width=2048 \
+ ro.hwui.text_small_cache_height=2048 \
+ ro.hwui.text_large_cache_width=3072 \
+ ro.hwui.text_large_cache_height=2048
\ No newline at end of file
diff --git a/system.prop b/system.prop
index 8e0027b..110521f 100644
--- a/system.prop
+++ b/system.prop
@@ -23,3 +23,107 @@ ro.gps.agps_provider=1
# cabl is handled by the panel
ro.qualcomm.cabl=0
+
+# enable lazy dexopt
+persist.sys.lazy.dexopt=true
+
+# performance/battery tweaks
+windowsmgr.max_events_per_sec=90
+ro.max.fling_velocity=15000
+ro.min.fling_velocity=8000
+ro.min_pointer_dur=8
+touch.pressure.scale=0.01
+debugtool.anrhistory=0
+profiler.debugmonitor=false
+profiler.launch=false
+profiler.hung.dumpdobugreport=false
+ro.config.htc.nocheckin=1
+ro.config.nocheckin=1
+ro.kernel.android.checkjni=0
+ro.kernel.checkjni=0
+ro.telephony.call_ring.delay=0
+ring.delay=0
+ro.config.combined_signal=true
+net.ipv4.ip_no_pmtu_disc=0
+net.ipv4.route.flush=1
+net.ipv4.tcp_ecn=0
+net.ipv4.tcp_fack=1
+net.ipv4.tcp_mem=187000 187000 187000
+net.ipv4.tcp_moderate_rcvbuf=1
+net.ipv4.tcp_no_metrics_save=1
+net.ipv4.tcp_rfc1337=1
+net.ipv4.tcp_rmem=4096 39000 187000
+net.ipv4.tcp_sack=1
+net.ipv4.tcp_timestamps=1
+net.ipv4.tcp_wmem=4096 39000 18700
+wifi.supplicant_scan_interval=300
+net.ipv4.tcp_window_scaling=1
+ro.ril.hsxpa=3
+ro.ril.gprsclass=10
+ro.ril.hep=1
+ro.ril.hsdpa.category=12
+ro.ril.enable.3g.prefix=1
+ro.ril.htcmaskw1.bitmask=4294967295
+ro.ril.htcmaskw1=14449
+ro.ril.hsupa.category=7
+ro.ril.hsdpa.category=10
+ro.ril.set.mtu1472=1
+persist.cust.tel.eons=1
+persist.data_netmgrd_mtu=1482
+persist.data_netmgrd_nint=8
+ro.use_data_netmgrd=true
+ro.ril.enable.dtm=1
+ro.ril.def.agps.mode=2
+ro.ril.def.agps.feature=1
+ro.ril.enable.gea3=1
+ro.ril.enable.fd.plmn.prefix=23402,23410,23411
+net.tcp.buffersize.default=4096,87380,256960,4096, 16384,256960
+net.tcp.buffersize.wifi=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.umts=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.gprs=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.edge=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.hspa=6144,87380,524288,6144,163 84,262144
+net.tcp.buffersize.lte=524288,1048576,2097152,5242 88,1048576,2097152
+net.tcp.buffersize.hsdpa=6144,87380,1048576,6144,8 7380,1048576
+net.tcp.buffersize.evdo_b=6144,87380,1048576,6144, 87380,1048576
+ro.ril.enable.amr.wideband=1
+profiler.force_disable_err_rpt=1
+profiler.force_disable_ulog=1
+debug.composition.type=gpu
+debug.egl.hw=1
+debug.enabletr=true
+debug.overlayui.enable=1
+debug.performance.tuning=1
+debug.sf.hw=1
+dev.pm.dyn_samplingrate=1
+hw3d.force=1
+ro.config.disable.hw_accel=false
+ro.fb.mode=1
+ro.sf.compbypass.enable=0
+ro.vold.umsdirtyratio=20
+persist.sys.composition.type=c2d
+persist.sys.ui.hw=1
+video.accelerate.hw=1
+persist.sys.use_16bpp_alpha=1
+debug.gr.swapinterval=0
+com.qc.hardware=1
+debug.qc.hardware=true
+debug.qctwa.preservebuf=1
+debug.qctwa.statusbar=1
+pm.sleep_mode=1
+ro.ril.disable.power.collapse=0
+profiler.force_disable_err_rpt=1
+profiler.force_disable_ulog=1
+dalvik.vm.checkjni=false
+dalvik.vm.execution-mode=int:jit
+ro.ril.power_collapse=1
+power_supply.wakeup=enable
+ro.mot.eri.losalert.delay=1000
+ro.config.hw_fast_dormancy=1
+ro.config.hw_power_saving=1
+ro.camcorder.videoModes=true
+ime_extend_row_keyboard=true
+ime_onehand_keyboard=true
+ime_split_keyboard=true
+ime_vibration_pattern=0:60
+dalvik.vm.verify-bytecode=false

View file

@ -0,0 +1,208 @@
From 54a7c9a176626217aca1cd9dba96d5314e18a0fb Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Thu, 29 Oct 2015 08:11:36 -0400
Subject: [PATCH] Update build.prop
---
system.prop | 167 ++++++++++++++++++++++++++++++++----------------------------
1 file changed, 90 insertions(+), 77 deletions(-)
diff --git a/system.prop b/system.prop
index 110521f..41dae74 100644
--- a/system.prop
+++ b/system.prop
@@ -27,103 +27,116 @@ ro.qualcomm.cabl=0
# enable lazy dexopt
persist.sys.lazy.dexopt=true
-# performance/battery tweaks
-windowsmgr.max_events_per_sec=90
-ro.max.fling_velocity=15000
-ro.min.fling_velocity=8000
-ro.min_pointer_dur=8
-touch.pressure.scale=0.01
+com.qc.hardware=1
+dalvik.vm.checkjni=false
+dalvik.vm.execution-mode=int:jit
+dalvik.vm.verify-bytecode=false
+debug.composition.type=gpu
+debug.egl.hw=1
+debug.enabletr=true
+debug.gr.swapinterval=0
+debug.overlayui.enable=1
+debug.performance.tuning=1
+debug.qc.hardware=true
+debug.qctwa.preservebuf=1
+debug.qctwa.statusbar=1
+debug.sf.hw=1
debugtool.anrhistory=0
-profiler.debugmonitor=false
-profiler.launch=false
-profiler.hung.dumpdobugreport=false
-ro.config.htc.nocheckin=1
-ro.config.nocheckin=1
-ro.kernel.android.checkjni=0
-ro.kernel.checkjni=0
-ro.telephony.call_ring.delay=0
-ring.delay=0
-ro.config.combined_signal=true
+dev.pm.dyn_samplingrate=1
+hw3d.force=1
+ime_extend_row_keyboard=true
+ime_onehand_keyboard=true
+ime_split_keyboard=true
+ime_vibration_pattern=0:60
+media.stagefright.enable-aac=true
+media.stagefright.enable-http=true
+media.stagefright.enable-meta=true
+media.stagefright.enable-player=true
+media.stagefright.enable-qcp=true
+media.stagefright.enable-record=false
+media.stagefright.enable-scan=true
net.ipv4.ip_no_pmtu_disc=0
net.ipv4.route.flush=1
net.ipv4.tcp_ecn=0
net.ipv4.tcp_fack=1
net.ipv4.tcp_mem=187000 187000 187000
-net.ipv4.tcp_moderate_rcvbuf=1
+net.ipv4.tcp_moderate_rcvbuf=1
net.ipv4.tcp_no_metrics_save=1
net.ipv4.tcp_rfc1337=1
-net.ipv4.tcp_rmem=4096 39000 187000
+net.ipv4.tcp_rmem=4096 39000 187000
net.ipv4.tcp_sack=1
net.ipv4.tcp_timestamps=1
-net.ipv4.tcp_wmem=4096 39000 18700
-wifi.supplicant_scan_interval=300
net.ipv4.tcp_window_scaling=1
-ro.ril.hsxpa=3
-ro.ril.gprsclass=10
-ro.ril.hep=1
-ro.ril.hsdpa.category=12
-ro.ril.enable.3g.prefix=1
-ro.ril.htcmaskw1.bitmask=4294967295
-ro.ril.htcmaskw1=14449
-ro.ril.hsupa.category=7
-ro.ril.hsdpa.category=10
-ro.ril.set.mtu1472=1
-persist.cust.tel.eons=1
-persist.data_netmgrd_mtu=1482
-persist.data_netmgrd_nint=8
-ro.use_data_netmgrd=true
-ro.ril.enable.dtm=1
-ro.ril.def.agps.mode=2
-ro.ril.def.agps.feature=1
-ro.ril.enable.gea3=1
-ro.ril.enable.fd.plmn.prefix=23402,23410,23411
+net.ipv4.tcp_wmem=4096 39000 18700
net.tcp.buffersize.default=4096,87380,256960,4096, 16384,256960
-net.tcp.buffersize.wifi=4096,87380,256960,4096,163 84,256960
-net.tcp.buffersize.umts=4096,87380,256960,4096,163 84,256960
-net.tcp.buffersize.gprs=4096,87380,256960,4096,163 84,256960
net.tcp.buffersize.edge=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.evdo_b=6144,87380,1048576,6144, 87380,1048576
+net.tcp.buffersize.gprs=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.hsdpa=6144,87380,1048576,6144,8 7380,1048576
net.tcp.buffersize.hspa=6144,87380,524288,6144,163 84,262144
net.tcp.buffersize.lte=524288,1048576,2097152,5242 88,1048576,2097152
-net.tcp.buffersize.hsdpa=6144,87380,1048576,6144,8 7380,1048576
-net.tcp.buffersize.evdo_b=6144,87380,1048576,6144, 87380,1048576
-ro.ril.enable.amr.wideband=1
-profiler.force_disable_err_rpt=1
-profiler.force_disable_ulog=1
-debug.composition.type=gpu
-debug.egl.hw=1
-debug.enabletr=true
-debug.overlayui.enable=1
-debug.performance.tuning=1
-debug.sf.hw=1
-dev.pm.dyn_samplingrate=1
-hw3d.force=1
-ro.config.disable.hw_accel=false
-ro.fb.mode=1
-ro.sf.compbypass.enable=0
-ro.vold.umsdirtyratio=20
+net.tcp.buffersize.umts=4096,87380,256960,4096,163 84,256960
+net.tcp.buffersize.wifi=4096,87380,256960,4096,163 84,256960
+persist.cust.tel.eons=1
+persist.data_netmgrd_mtu=1482
+persist.data_netmgrd_nint=8
persist.sys.composition.type=c2d
persist.sys.ui.hw=1
-video.accelerate.hw=1
persist.sys.use_16bpp_alpha=1
-debug.gr.swapinterval=0
-com.qc.hardware=1
-debug.qc.hardware=true
-debug.qctwa.preservebuf=1
-debug.qctwa.statusbar=1
pm.sleep_mode=1
-ro.ril.disable.power.collapse=0
+power_supply.wakeup=enable
+profiler.debugmonitor=false
profiler.force_disable_err_rpt=1
profiler.force_disable_ulog=1
-dalvik.vm.checkjni=false
-dalvik.vm.execution-mode=int:jit
-ro.ril.power_collapse=1
-power_supply.wakeup=enable
-ro.mot.eri.losalert.delay=1000
+profiler.hung.dumpdobugreport=false
+profiler.launch=false
+ring.delay=0
+ro.camcorder.videoModes=true
+ro.config.combined_signal=true
+ro.config.disable.hw_accel=false
+ro.config.htc.nocheckin=1
ro.config.hw_fast_dormancy=1
ro.config.hw_power_saving=1
-ro.camcorder.videoModes=true
-ime_extend_row_keyboard=true
-ime_onehand_keyboard=true
-ime_split_keyboard=true
-ime_vibration_pattern=0:60
-dalvik.vm.verify-bytecode=false
+ro.config.nocheckin=1
+ro.fb.mode=1
+ro.kernel.android.checkjni=0
+ro.kernel.checkjni=0
+ro.max.fling_velocity=15000
+ro.media.dec.jpeg.memcap=8000000
+ro.media.enc.hprof.vid.bps=8000000
+ro.media.enc.hprof.vid.fps=65
+ro.media.enc.jpeg.quality=100
+ro.media.panorama.defres=3264x1840
+ro.media.panorama.frameres=1280x720
+ro.min.fling_velocity=8000
+ro.min_pointer_dur=8
+ro.mot.eri.losalert.delay=1000
+ro.ril.def.agps.feature=1
+ro.ril.def.agps.mode=2
+ro.ril.disable.power.collapse=0
+ro.ril.enable.3g.prefix=1
+ro.ril.enable.a52=1
+ro.ril.enable.a53=1
+ro.ril.enable.amr.wideband=1
+ro.ril.enable.dtm=1
+ro.ril.enable.fd.plmn.prefix=23402,23410,23411
+ro.ril.enable.fd.plmn.prefix=23402,23410,23411
+ro.ril.enable.gea3=1
+ro.ril.gprsclass=10
+ro.ril.hep=1
+ro.ril.hsdpa.category=10
+ro.ril.hsdpa.category=12
+ro.ril.hsupa.category=7
+ro.ril.hsxpa=3
+ro.ril.htcmaskw1=14449
+ro.ril.htcmaskw1.bitmask=4294967295
+ro.ril.power_collapse=1
+ro.ril.set.mtu1472=1
+ro.sf.compbypass.enable=0
+ro.telephony.call_ring.delay=0
+ro.use_data_netmgrd=true
+ro.vold.umsdirtyratio=20
+touch.pressure.scale=0.01
+video.accelerate.hw=1
+wifi.supplicant_scan_interval=300
+windowsmgr.max_events_per_sec=90
\ No newline at end of file

View file

@ -0,0 +1,44 @@
From b9d117b8e2b4d38b31bf2d95561a5c3e11300cb6 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Tue, 3 Nov 2015 15:28:57 -0500
Subject: [PATCH] Dont add in Google Widevine DRM and Microsoft PlayReady DRM
---
Android.mk | 24 ------------------------
1 file changed, 24 deletions(-)
diff --git a/Android.mk b/Android.mk
index 4380569..a197677 100644
--- a/Android.mk
+++ b/Android.mk
@@ -124,30 +124,6 @@ $(MC_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
ALL_DEFAULT_INSTALLED_MODULES += $(MC_SYMLINKS)
-PLAYREADY_IMAGES := \
- playread.b00 playread.b01 playread.b02 playread.b03 playread.mdt
-
-PLAYREADY_SYMLINKS := $(addprefix $(TARGET_OUT_ETC)/firmware/,$(notdir $(PLAYREADY_IMAGES)))
-$(PLAYREADY_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
- @echo "Playready firmware link: $@"
- @mkdir -p $(dir $@)
- @rm -rf $@
- $(hide) ln -sf /firmware/image/$(notdir $@) $@
-
-ALL_DEFAULT_INSTALLED_MODULES += $(PLAYREADY_SYMLINKS)
-
-WV_IMAGES := \
- widevine.b00 widevine.b01 widevine.b02 widevine.b03 widevine.mdt
-
-WV_SYMLINKS := $(addprefix $(TARGET_OUT_ETC)/firmware/,$(notdir $(WV_IMAGES)))
-$(WV_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
- @echo "Widevine firmware link: $@"
- @mkdir -p $(dir $@)
- @rm -rf $@
- $(hide) ln -sf /firmware/image/$(notdir $@) $@
-
-ALL_DEFAULT_INSTALLED_MODULES += $(WV_SYMLINKS)
-
# Create links for audcal data files
$(shell mkdir -p $(TARGET_OUT)/etc/firmware/wcd9320; \
ln -sf /data/misc/audio/wcd9320_anc.bin \

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,244 @@
From d96337d6d658dfb72d9f9625d62dbf5eab135d24 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:52:02 -0400
Subject: [PATCH] Implement Quick Wakeup
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 2 +
include/linux/quickwakeup.h | 46 ++++++++++++
kernel/power/Kconfig | 20 ++++--
kernel/power/Makefile | 1 +
kernel/power/quickwakeup.c | 104 +++++++++++++++++++++++++++
5 files changed, 167 insertions(+), 6 deletions(-)
create mode 100644 include/linux/quickwakeup.h
create mode 100644 kernel/power/quickwakeup.c
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index f6a455b..a79f77b 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -3623,3 +3623,5 @@ CONFIG_NLATTR=y
# CONFIG_CORDIC is not set
CONFIG_QMI_ENCDEC=y
# CONFIG_QMI_ENCDEC_DEBUG is not set
+
+CONFIG_QUICK_WAKEUP=y
diff --git a/include/linux/quickwakeup.h b/include/linux/quickwakeup.h
new file mode 100644
index 0000000..000effa
--- /dev/null
+++ b/include/linux/quickwakeup.h
@@ -0,0 +1,46 @@
+/* include/linux/quickwakeup.h
+ *
+ * Copyright (C) 2014 Motorola Mobility LLC.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _QUICKWAKEUP_H_
+#define _QUICKWAKEUP_H_
+
+#ifdef __KERNEL__
+
+struct quickwakeup_ops {
+ struct list_head list;
+ char *name;
+ int (*qw_execute)(void *data);
+ int (*qw_check)(void *data);
+ int execute;
+ void *data; /* arbitrary data passed back to user */
+};
+
+#ifdef CONFIG_QUICK_WAKEUP
+
+int quickwakeup_register(struct quickwakeup_ops *ops);
+void quickwakeup_unregister(struct quickwakeup_ops *ops);
+bool quickwakeup_suspend_again(void);
+
+#else
+
+static inline int quickwakeup_register(struct quickwakeup_ops *ops) { return 0; };
+static inline void quickwakeup_unregister(struct quickwakeup_ops *ops) {};
+static inline bool quickwakeup_suspend_again(void) { return 0; };
+
+#endif /* CONFIG_QUICK_WAKEUP */
+
+#endif /* __KERNEL__ */
+
+#endif /* _QUICKWAKEUP_H_ */
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
index e536c8d..8006962 100644
--- a/kernel/power/Kconfig
+++ b/kernel/power/Kconfig
@@ -83,20 +83,20 @@ config PM_STD_PARTITION
default ""
---help---
The default resume partition is the partition that the suspend-
- to-disk implementation will look for a suspended disk image.
+ to-disk implementation will look for a suspended disk image.
- The partition specified here will be different for almost every user.
+ The partition specified here will be different for almost every user.
It should be a valid swap partition (at least for now) that is turned
- on before suspending.
+ on before suspending.
The partition specified can be overridden by specifying:
- resume=/dev/<other device>
+ resume=/dev/<other device>
- which will set the resume partition to the device specified.
+ which will set the resume partition to the device specified.
Note there is currently not a way to specify which device to save the
- suspended image to. It will simply pick the first available swap
+ suspended image to. It will simply pick the first available swap
device.
config PM_SLEEP
@@ -285,6 +285,14 @@ config SUSPEND_TIME
Prints the time spent in suspend in the kernel log, and
keeps statistics on the time spent in suspend in
/sys/kernel/debug/suspend_time
+
+config QUICK_WAKEUP
+ bool "Quick wakeup"
+ depends on SUSPEND
+ default n
+ ---help---
+ Allow kernel driver to do periodic jobs without resuming the full system
+ This option can increase battery life on android powered smartphone.
config DEDUCE_WAKEUP_REASONS
bool
diff --git a/kernel/power/Makefile b/kernel/power/Makefile
index 74c713b..e5bebbc 100644
--- a/kernel/power/Makefile
+++ b/kernel/power/Makefile
@@ -14,5 +14,6 @@ obj-$(CONFIG_PM_WAKELOCKS) += wakelock.o
obj-$(CONFIG_SUSPEND_TIME) += suspend_time.o
obj-$(CONFIG_MAGIC_SYSRQ) += poweroff.o
+obj-$(CONFIG_QUICK_WAKEUP) += quickwakeup.o
obj-$(CONFIG_SUSPEND) += wakeup_reason.o
diff --git a/kernel/power/quickwakeup.c b/kernel/power/quickwakeup.c
new file mode 100644
index 0000000..46f9dda
--- /dev/null
+++ b/kernel/power/quickwakeup.c
@@ -0,0 +1,104 @@
+/* kernel/power/quickwakeup.c
+ *
+ * Copyright (C) 2014 Motorola Mobility LLC.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/mutex.h>
+#include <linux/quickwakeup.h>
+
+static LIST_HEAD(qw_head);
+static DEFINE_MUTEX(list_lock);
+
+int quickwakeup_register(struct quickwakeup_ops *ops)
+{
+ mutex_lock(&list_lock);
+ list_add(&ops->list, &qw_head);
+ mutex_unlock(&list_lock);
+
+ return 0;
+}
+
+void quickwakeup_unregister(struct quickwakeup_ops *ops)
+{
+ mutex_lock(&list_lock);
+ list_del(&ops->list);
+ mutex_unlock(&list_lock);
+}
+
+static int quickwakeup_check(void)
+{
+ int check = 0;
+ struct quickwakeup_ops *index;
+
+ mutex_lock(&list_lock);
+
+ list_for_each_entry(index, &qw_head, list) {
+ int ret = index->qw_check(index->data);
+ index->execute = ret;
+ check |= ret;
+ pr_debug("%s: %s votes for %s\n", __func__, index->name,
+ ret ? "execute" : "dont care");
+ }
+
+ mutex_unlock(&list_lock);
+
+ return check;
+}
+
+/* return 1 => suspend again
+ return 0 => continue wakeup
+ */
+static int quickwakeup_execute(void)
+{
+ int suspend_again = 0;
+ int final_vote = 1;
+ struct quickwakeup_ops *index;
+
+ mutex_lock(&list_lock);
+
+ list_for_each_entry(index, &qw_head, list) {
+ if (index->execute) {
+ int ret = index->qw_execute(index->data);
+ index->execute = 0;
+ final_vote &= ret;
+ suspend_again = final_vote;
+ pr_debug("%s: %s votes for %s\n", __func__, index->name,
+ ret ? "suspend again" : "wakeup");
+ }
+ }
+
+ mutex_unlock(&list_lock);
+
+ pr_debug("%s: %s\n", __func__,
+ suspend_again ? "suspend again" : "wakeup");
+
+ return suspend_again;
+}
+
+/* return 1 => suspend again
+ return 0 => continue wakeup
+ */
+bool quickwakeup_suspend_again(void)
+{
+ int ret = 0;
+
+ if (quickwakeup_check())
+ ret = quickwakeup_execute();
+
+ pr_debug("%s- returning %d %s\n", __func__, ret,
+ ret ? "suspend again" : "wakeup");
+
+ return ret;
+}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,60 @@
From ff6e26507b64befbf5e2bde395374aef4d2736d8 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Tue, 26 May 2015 14:26:28 -0400
Subject: [PATCH] Fix build failure
---
kernel/time/alarmtimer.c | 23 ++++++++---------------
1 file changed, 8 insertions(+), 15 deletions(-)
diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
index f0239cc..c4f3fdd 100644
--- a/kernel/time/alarmtimer.c
+++ b/kernel/time/alarmtimer.c
@@ -731,9 +731,6 @@ static int alarm_timer_create(struct k_itimer *new_timer)
if (!alarmtimer_get_rtcdev())
return -ENOTSUPP;
- if (flags & ~TIMER_ABSTIME)
- return -EINVAL;
-
if (!capable(CAP_WAKE_ALARM))
return -EPERM;
@@ -748,22 +745,18 @@ static int alarm_timer_create(struct k_itimer *new_timer)
* @new_timer: k_itimer pointer
* @cur_setting: itimerspec data to fill
*
- * Copies out the current itimerspec data
+ * Copies the itimerspec data out from the k_itimer
*/
static void alarm_timer_get(struct k_itimer *timr,
struct itimerspec *cur_setting)
{
- ktime_t relative_expiry_time =
- alarm_expires_remaining(&(timr->it.alarm.alarmtimer));
+ memset(cur_setting, 0, sizeof(struct itimerspec));
- if (ktime_to_ns(relative_expiry_time) > 0) {
- cur_setting->it_value = ktime_to_timespec(relative_expiry_time);
- } else {
- cur_setting->it_value.tv_sec = 0;
- cur_setting->it_value.tv_nsec = 0;
- }
-
- cur_setting->it_interval = ktime_to_timespec(timr->it.alarm.interval);
+ cur_setting->it_interval =
+ ktime_to_timespec(timr->it.alarm.interval);
+ cur_setting->it_value =
+ ktime_to_timespec(timr->it.alarm.alarmtimer.node.expires);
+ return;
}
/**
@@ -1070,4 +1063,4 @@ static int __init alarmtimer_init(void)
alarmtimer_rtc_interface_remove();
return error;
}
-device_initcall(alarmtimer_init);
+device_initcall(alarmtimer_init);
\ No newline at end of file

View file

@ -0,0 +1,22 @@
From ac54ba51bc5bab561573b64d82f3ba2a066d5fde Mon Sep 17 00:00:00 2001
From: YoshiShaPow <yoshipga@gmail.com>
Date: Sat, 20 Dec 2014 12:05:19 -0800
Subject: [PATCH] gcc5: arm: enable cortex_a15 optimization
---
arch/arm/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index e620786..0dd6592 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -57,7 +57,7 @@ comma = ,
# Note that GCC does not numerically define an architecture version
# macro, but instead defines a whole series of macros which makes
# testing for a specific architecture or later rather impossible.
-arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
+arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a -mtune=cortex-a15 -Wa$(comma)-march=armv7-a)
arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
# Only override the compiler option if ARMv6. The ARMv6K extensions are
# always available in ARMv7

View file

@ -0,0 +1,22 @@
From 9e6be08fe83c1204f8076b86d1346f18f92b8e5d Mon Sep 17 00:00:00 2001
From: franciscofranco <franciscofranco.1990@gmail.com>
Date: Fri, 27 Feb 2015 15:59:50 +0000
Subject: [PATCH] arm: use -mtune=cortex-a15 for Krait targets
Signed-off-by: franciscofranco <franciscofranco.1990@gmail.com>
---
arch/arm/Makefile | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 0dd6592..37632ba 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -102,6 +102,7 @@ tune-$(CONFIG_CPU_XSC3) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -
tune-$(CONFIG_CPU_FEROCEON) :=$(call cc-option,-mtune=marvell-f,-mtune=xscale)
tune-$(CONFIG_CPU_V6) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
tune-$(CONFIG_CPU_V6K) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
+tune-$(CONFIG_ARCH_MSM_KRAIT) :=-mtune=cortex-a15
ifeq ($(CONFIG_AEABI),y)
CFLAGS_ABI :=-mabi=aapcs-linux -mno-thumb-interwork

View file

@ -0,0 +1,72 @@
From 01bf91ff2abb5a7cd698513aeae3a50bc1cc32a7 Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Mon, 17 Nov 2014 05:28:09 -0500
Subject: [PATCH] add MAC randomization
based on https://grsecurity.net/~spender/random_mac.diff
---
net/core/dev.c | 19 +++++++++++++++++++
net/core/sysctl_net_core.c | 10 ++++++++++
2 files changed, 29 insertions(+)
diff --git a/net/core/dev.c b/net/core/dev.c
index 06ea934..a1efb0c 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -178,6 +178,7 @@
static DEFINE_SPINLOCK(ptype_lock);
static struct list_head ptype_base[PTYPE_HASH_SIZE] __read_mostly;
static struct list_head ptype_all __read_mostly; /* Taps */
+int randomize_mac = 1;
/*
* The @dev_base_head list is protected by @dev_base_lock and the rtnl
@@ -4734,6 +4735,24 @@ int dev_change_flags(struct net_device *dev, unsigned int flags)
rtmsg_ifinfo(RTM_NEWLINK, dev, changes);
__dev_notify_flags(dev, old_flags);
+
+ if (randomize_mac && (changes & IFF_UP) && !(old_flags & IFF_UP)) {
+ /* randomize MAC whenever interface is brought up */
+ struct sockaddr sa;
+ unsigned int mac4;
+ unsigned short mac2;
+
+ mac4 = random32();
+ mac2 = random32();
+ memcpy(sa.sa_data, &mac4, sizeof(mac4));
+ memcpy((char *)sa.sa_data + sizeof(mac4), &mac2, sizeof(mac2));
+ if (!is_valid_ether_addr(sa.sa_data))
+ sa.sa_data[5] = 1;
+ sa.sa_data[0] &= 0xFC;
+ sa.sa_family = dev->type;
+ dev_set_mac_address(dev, &sa);
+ }
+
return ret;
}
EXPORT_SYMBOL(dev_change_flags);
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
index 69ba338..6095cfc 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
@@ -88,9 +88,19 @@ static int rps_sock_flow_sysctl(ctl_table *table, int write,
}
#endif /* CONFIG_RPS */
+extern int randomize_mac;
+
static struct ctl_table net_core_table[] = {
#ifdef CONFIG_NET
{
+ .procname = "randomize_mac",
+ .data = &randomize_mac,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = proc_dointvec
+ },
+
+ {
.procname = "wmem_max",
.data = &sysctl_wmem_max,
.maxlen = sizeof(int),

View file

@ -0,0 +1,29 @@
From 18ed733d195061e992adf5fa8ed060727aa801b9 Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Thu, 20 Nov 2014 22:02:18 -0500
Subject: [PATCH] harden configuration
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index a79f77b..35f1bb0 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -3432,13 +3432,13 @@ CONFIG_ARM_UNWIND=y
CONFIG_KEYS=y
# CONFIG_ENCRYPTED_KEYS is not set
# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY_DMESG_RESTRICT
CONFIG_SECURITY=y
# CONFIG_SECURITYFS is not set
CONFIG_SECURITY_NETWORK=y
# CONFIG_SECURITY_NETWORK_XFRM is not set
# CONFIG_SECURITY_PATH is not set
-CONFIG_LSM_MMAP_MIN_ADDR=4096
+CONFIG_LSM_MMAP_MIN_ADDR=32768
CONFIG_SECURITY_SELINUX=y
# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set
# CONFIG_SECURITY_SELINUX_DISABLE is not set

View file

@ -0,0 +1,42 @@
From b1d2525ea6d24f8c6fc494e3e3c926cd96b85b8a Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Sun, 5 Apr 2015 04:16:10 -0400
Subject: [PATCH] enable support for IP sets
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 35f1bb0..73d4fde 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -903,6 +903,7 @@ CONFIG_NETFILTER_XTABLES=y
#
CONFIG_NETFILTER_XT_MARK=y
CONFIG_NETFILTER_XT_CONNMARK=y
+CONFIG_NETFILTER_XT_SET=y
#
# Xtables targets
@@ -976,7 +977,19 @@ CONFIG_NETFILTER_XT_MATCH_STRING=y
CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_TIME=y
CONFIG_NETFILTER_XT_MATCH_U32=y
-# CONFIG_IP_SET is not set
+CONFIG_IP_SET=y
+CONFIG_IP_SET_MAX=256
+CONFIG_IP_SET_BITMAP_IP=y
+CONFIG_IP_SET_BITMAP_IPMAC=y
+CONFIG_IP_SET_BITMAP_PORT=y
+CONFIG_IP_SET_HASH_IP=y
+CONFIG_IP_SET_HASH_IPPORT=y
+CONFIG_IP_SET_HASH_IPPORTIP=y
+CONFIG_IP_SET_HASH_IPPORTNET=y
+CONFIG_IP_SET_HASH_NET=y
+CONFIG_IP_SET_HASH_NETPORT=y
+CONFIG_IP_SET_HASH_NETIFACE=y
+CONFIG_IP_SET_LIST_SET=y
# CONFIG_IP_VS is not set
#

View file

@ -0,0 +1,22 @@
From babecc6b0712e6ea64b5e1737433419431f2387c Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Sun, 12 Apr 2015 19:26:44 -0400
Subject: [PATCH] enable rpfilter support in netfilter
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 73d4fde..4b715c4 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -1002,7 +1002,7 @@ CONFIG_NF_CONNTRACK_PROC_COMPAT=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_AH=y
CONFIG_IP_NF_MATCH_ECN=y
-# CONFIG_IP_NF_MATCH_RPFILTER is not set
+CONFIG_IP_NF_MATCH_RPFILTER=y
CONFIG_IP_NF_MATCH_TTL=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y

View file

@ -0,0 +1,22 @@
From 175a88201b69bf802d0379075c13e1d457d5b92b Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Fri, 17 Apr 2015 23:10:00 -0400
Subject: [PATCH] switch LOCALVERSION from cyanogenmod -> copperhead
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 4b715c4..35bd0f0 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -42,7 +42,7 @@ CONFIG_IRQ_WORK=y
CONFIG_EXPERIMENTAL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
-CONFIG_LOCALVERSION="-cyanogenmod"
+CONFIG_LOCALVERSION="-copperhead"
CONFIG_LOCALVERSION_AUTO=y
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_LZMA=y

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,44 @@
From 2d79c0f689eb823053b8eb50337d80f0aad70793 Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Thu, 23 Jul 2015 02:36:09 -0400
Subject: [PATCH] fix PaX const issue with the msm camera driver
---
drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.c | 3 ++-
include/media/v4l2-dev.h | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.c b/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.c
index 93b8665..b8c432d 100755
--- a/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.c
+++ b/drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.c
@@ -32,6 +32,7 @@
#include <mach/iommu.h>
#include <mach/vreg.h>
#include <media/msm_isp.h>
+#include <media/v4l2-dev.h>
#include <media/v4l2-event.h>
#include <media/v4l2-ioctl.h>
#include <media/msmb_camera.h>
@@ -1884,7 +1885,7 @@ static const struct v4l2_subdev_ops msm_cpp_subdev_ops = {
.core = &msm_cpp_subdev_core_ops,
};
-static struct v4l2_file_operations msm_cpp_v4l2_subdev_fops;
+static v4l2_file_operations_no_const msm_cpp_v4l2_subdev_fops;
static long msm_cpp_subdev_do_ioctl(
struct file *file, unsigned int cmd, void *arg)
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
index 2292f89..1af15f4 100644
--- a/include/media/v4l2-dev.h
+++ b/include/media/v4l2-dev.h
@@ -56,7 +56,7 @@ int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local);
struct v4l2_file_operations {
- struct module * const owner;
+ struct module *owner;
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
unsigned int (*poll) (struct file *, struct poll_table_struct *);

View file

@ -0,0 +1,22 @@
From 7c6c27ed01f94b9daf7e73414d9f1b58e07bab21 Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Tue, 12 May 2015 20:03:43 -0400
Subject: [PATCH] fix PaX ACCESS_ONCE issue caused by TSYNC backport
---
kernel/seccomp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/seccomp.c b/kernel/seccomp.c
index 829a2ca..96b22b5 100644
--- a/kernel/seccomp.c
+++ b/kernel/seccomp.c
@@ -336,7 +336,7 @@ static inline void seccomp_sync_threads(void)
*/
put_seccomp_filter(thread);
smp_mb();
- ACCESS_ONCE(thread->seccomp.filter) = caller->seccomp.filter;
+ ACCESS_ONCE_RW(thread->seccomp.filter) = caller->seccomp.filter;
/*
* Opt the other thread into seccomp if needed.
* As threads are considered to be trust-realm

View file

@ -0,0 +1,36 @@
From b75f892f057aaee43bd147c5c62f2515d893b5e7 Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Thu, 23 Jul 2015 02:07:35 -0400
Subject: [PATCH] fix -Werror issues caused by unsigned cache size
---
mm/shmem.c | 2 +-
mm/slub.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/mm/shmem.c b/mm/shmem.c
index 8e92d3b..5614f74 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -2367,7 +2367,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent)
int err = -ENOMEM;
/* Round up to L1_CACHE_BYTES to resist false sharing */
- sbinfo = kzalloc(max(sizeof(struct shmem_sb_info), L1_CACHE_BYTES), GFP_KERNEL);
+ sbinfo = kzalloc(max(sizeof(struct shmem_sb_info), (size_t)L1_CACHE_BYTES), GFP_KERNEL);
if (!sbinfo)
return -ENOMEM;
diff --git a/mm/slub.c b/mm/slub.c
index 5657a81..bd49009 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -3931,7 +3931,7 @@ void __init kmem_cache_init(void)
#endif
printk(KERN_INFO
- "SLUB: Genslabs=%d, HWalign=%d, Order=%d-%d, MinObjects=%d,"
+ "SLUB: Genslabs=%d, HWalign=%lu, Order=%d-%d, MinObjects=%d,"
" CPUs=%d, Nodes=%d\n",
caches, cache_line_size(),
slub_min_order, slub_max_order, slub_min_objects,

View file

@ -0,0 +1,24 @@
From c6f91d613a8fe5bf02967c2d8445aa4fb2a55c86 Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Tue, 12 May 2015 20:13:49 -0400
Subject: [PATCH] disable errors on section mismatches with PaX
This is used by PaX to determine how many writeable function pointers
exist in the compiled code.
---
scripts/mod/modpost.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index cc11c0e..a6bb927 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -2173,7 +2173,7 @@ int main(int argc, char **argv)
warn_unresolved = 1;
break;
case 'E':
- section_error_on_mismatch = 1;
+ /* ignored due to PaX */
break;
default:
exit(1);

View file

@ -0,0 +1,46 @@
From 29fccb041a751054275e8d0b2035066ffd842722 Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Wed, 22 Jul 2015 21:08:21 -0400
Subject: [PATCH] adapt mach-msm assembly to PaX
---
arch/arm/mach-msm/memutils/copy_from_user.S | 4 ++--
arch/arm/mach-msm/memutils/copy_to_user.S | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm/mach-msm/memutils/copy_from_user.S b/arch/arm/mach-msm/memutils/copy_from_user.S
index b6ea5b4..c17e97c 100644
--- a/arch/arm/mach-msm/memutils/copy_from_user.S
+++ b/arch/arm/mach-msm/memutils/copy_from_user.S
@@ -103,11 +103,11 @@
.text
-ENTRY(__copy_from_user)
+ENTRY(___copy_from_user)
#include "copy_template.S"
-ENDPROC(__copy_from_user)
+ENDPROC(___copy_from_user)
.pushsection .fixup,"ax"
.align 0
diff --git a/arch/arm/mach-msm/memutils/copy_to_user.S b/arch/arm/mach-msm/memutils/copy_to_user.S
index ca54c28..3570918 100644
--- a/arch/arm/mach-msm/memutils/copy_to_user.S
+++ b/arch/arm/mach-msm/memutils/copy_to_user.S
@@ -107,11 +107,11 @@
.text
ENTRY(__copy_to_user_std)
-WEAK(__copy_to_user)
+WEAK(___copy_to_user)
#include "copy_template.S"
-ENDPROC(__copy_to_user)
+ENDPROC(___copy_to_user)
ENDPROC(__copy_to_user_std)
.pushsection .fixup,"ax"

View file

@ -0,0 +1,62 @@
From 255e9ab26b965fe004a0081e95f8d2a5550c5663 Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Wed, 22 Jul 2015 18:51:11 -0400
Subject: [PATCH] enable PaX features
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 42 ++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 35bd0f0..73ca036 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -3442,6 +3442,48 @@ CONFIG_ARM_UNWIND=y
#
# Security options
#
+
+#
+# PaX
+#
+CONFIG_PAX_USERCOPY_SLABS=y
+CONFIG_PAX=y
+
+#
+# PaX Control
+#
+CONFIG_PAX_SOFTMODE=y
+# CONFIG_PAX_EI_PAX is not set
+# CONFIG_PAX_PT_PAX_FLAGS is not set
+CONFIG_PAX_XATTR_PAX_FLAGS=y
+CONFIG_PAX_NO_ACL_FLAGS=y
+# CONFIG_PAX_HAVE_ACL_FLAGS is not set
+# CONFIG_PAX_HOOK_ACL_FLAGS is not set
+
+#
+# Non-executable pages
+#
+CONFIG_PAX_NOEXEC=y
+CONFIG_PAX_PAGEEXEC=y
+CONFIG_PAX_MPROTECT=y
+# CONFIG_PAX_ELFRELOCS is not set
+CONFIG_PAX_KERNEXEC_PLUGIN_METHOD=""
+
+#
+# Address Space Layout Randomization
+#
+CONFIG_PAX_ASLR=y
+CONFIG_PAX_RANDUSTACK=y
+CONFIG_PAX_RANDMMAP=y
+
+#
+# Miscellaneous hardening features
+#
+CONFIG_PAX_MEMORY_SANITIZE=y
+CONFIG_PAX_REFCOUNT=y
+CONFIG_PAX_USERCOPY=y
+# CONFIG_PAX_CONSTIFY_PLUGIN is not set
+# CONFIG_PAX_LATENT_ENTROPY is not set
CONFIG_KEYS=y
# CONFIG_ENCRYPTED_KEYS is not set
# CONFIG_KEYS_DEBUG_PROC_KEYS is not set

View file

@ -0,0 +1,97 @@
From 50bac308305b53747b4830b27c69883aa16cc338 Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Fri, 22 May 2015 18:17:24 -0400
Subject: [PATCH] implement PaX exception AIDs
---
fs/binfmt_elf.c | 34 ++++++++++++++++++++++++++++++++++
include/linux/android_aid.h | 4 ++++
include/linux/xattr.h | 2 ++
3 files changed, 40 insertions(+)
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index 3e624bc..d86a774 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -9,6 +9,7 @@
* Copyright 1993, 1994: Eric Youngdale (ericy@cais.com).
*/
+#include <linux/android_aid.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
@@ -879,6 +880,37 @@ static long pax_parse_pax_flags(const struct elfhdr * const elf_ex, const struct
}
#endif
+static bool pax_has_aids_xattr(struct dentry *dentry)
+{
+ struct inode *inode = dentry->d_inode;
+
+ if (inode_permission(inode, MAY_EXEC))
+ return false;
+
+ if (inode->i_op->getxattr)
+ return inode->i_op->getxattr(dentry, XATTR_NAME_PAX_AIDS, NULL, 0) >= 0;
+
+ return false;
+}
+
+static void pax_handle_aids(struct file * const file)
+{
+ if (!pax_has_aids_xattr(file->f_path.dentry))
+ return;
+#ifdef CONFIG_PAX_PAGEEXEC
+ if (in_group_p(AID_PAX_NO_PAGEEXEC))
+ current->mm->pax_flags &= ~MF_PAX_PAGEEXEC;
+#endif
+#ifdef CONFIG_PAX_MPROTECT
+ if (in_group_p(AID_PAX_NO_MPROTECT))
+ current->mm->pax_flags &= ~MF_PAX_MPROTECT;
+#endif
+#if defined(CONFIG_PAX_RANDMMAP) || defined(CONFIG_PAX_RANDUSTACK)
+ if (in_group_p(AID_PAX_NO_RANDMMAP))
+ current->mm->pax_flags &= ~MF_PAX_RANDMMAP;
+#endif
+}
+
/*
* These are the functions used to load ELF style executables and shared
* libraries. There is no binary dependent code anywhere else.
@@ -1095,6 +1127,8 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
}
#endif
+ pax_handle_aids(bprm->file);
+
#ifdef CONFIG_PAX_HAVE_ACL_FLAGS
pax_set_initial_flags(bprm);
#elif defined(CONFIG_PAX_HOOK_ACL_FLAGS)
diff --git a/include/linux/android_aid.h b/include/linux/android_aid.h
index 0f904b3..fa4e4db 100644
--- a/include/linux/android_aid.h
+++ b/include/linux/android_aid.h
@@ -25,4 +25,8 @@
#define AID_NET_BW_STATS 3006 /* read bandwidth statistics */
#define AID_NET_BW_ACCT 3007 /* change bandwidth statistics accounting */
+#define AID_PAX_NO_PAGEEXEC 3013 /* disable PaX's PAGEEXEC feature */
+#define AID_PAX_NO_MPROTECT 3014 /* disable PaX's MPROTECT feature */
+#define AID_PAX_NO_RANDMMAP 3015 /* disable PaX's RANDMMAP feature */
+
#endif
diff --git a/include/linux/xattr.h b/include/linux/xattr.h
index cf5f26c..9501bb8 100644
--- a/include/linux/xattr.h
+++ b/include/linux/xattr.h
@@ -60,7 +60,9 @@
/* User namespace */
#define XATTR_PAX_PREFIX XATTR_USER_PREFIX "pax."
#define XATTR_PAX_FLAGS_SUFFIX "flags"
+#define XATTR_PAX_AIDS_SUFFIX "aids"
#define XATTR_NAME_PAX_FLAGS XATTR_PAX_PREFIX XATTR_PAX_FLAGS_SUFFIX
+#define XATTR_NAME_PAX_AIDS XATTR_PAX_PREFIX XATTR_PAX_AIDS_SUFFIX
#ifdef __KERNEL__

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,36 @@
From 1199ff4cab87fe53ebdfbf9d886d879de683bfac Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Thu, 19 Nov 2015 07:55:42 -0500
Subject: [PATCH] Build fixes
---
include/net/inetpeer.h | 2 +-
kernel/power/wakeup_reason.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h
index e617e3e..1569625 100644
--- a/include/net/inetpeer.h
+++ b/include/net/inetpeer.h
@@ -116,7 +116,7 @@ static inline int inet_getid(struct inet_peer *p, int more)
{
more++;
inet_peer_refcheck(p);
- return atomic_add_return(more, &p->ip_id_count) - more;
+ return atomic_add_return_unchecked(more, &p->ip_id_count) - more;
}
#endif /* _NET_INETPEER_H */
diff --git a/kernel/power/wakeup_reason.c b/kernel/power/wakeup_reason.c
index fab0889..a086ccc 100644
--- a/kernel/power/wakeup_reason.c
+++ b/kernel/power/wakeup_reason.c
@@ -309,7 +309,7 @@ static struct attribute_group attr_group = {
static inline void stop_logging_wakeup_reasons(void)
{
- ACCESS_ONCE(log_wakeups) = false;
+ ACCESS_ONCE_RW(log_wakeups) = false;
smp_wmb();
}

View file

@ -0,0 +1,55 @@
From 7f3bc85d7d81c979fc0dd6127b9b5c2f4037d157 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Thu, 19 Nov 2015 08:31:10 -0500
Subject: [PATCH] Build fixes
---
arch/arm/include/asm/elf.h | 7 +++++++
drivers/base/power/wakeup.c | 2 +-
drivers/staging/prima/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c | 2 +-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h
index 5c9b3a1..1d9ca7e 100644
--- a/arch/arm/include/asm/elf.h
+++ b/arch/arm/include/asm/elf.h
@@ -118,6 +118,13 @@ int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs);
#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2)
+#ifdef CONFIG_PAX_ASLR
+#define PAX_ELF_ET_DYN_BASE 0x00008000UL
+
+#define PAX_DELTA_MMAP_LEN ((current->personality == PER_LINUX_32BIT) ? 16 : 10)
+#define PAX_DELTA_STACK_LEN ((current->personality == PER_LINUX_32BIT) ? 16 : 10)
+#endif
+
/* When the program starts, a1 contains a pointer to a function to be
registered with atexit, as per the SVR4 ABI. A value of 0 means we
have no such handler. */
diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
index cdfcdbc..4d3eaa7 100644
--- a/drivers/base/power/wakeup.c
+++ b/drivers/base/power/wakeup.c
@@ -390,7 +390,7 @@ static void wakeup_source_activate(struct wakeup_source *ws)
ws->start_prevent_time = ws->last_time;
/* Increment the counter of events in progress. */
- cec = atomic_inc_return(&combined_event_count);
+ cec = atomic_inc_return_unchecked(&combined_event_count);
trace_wakeup_source_activate(ws->name, cec);
}
diff --git a/drivers/staging/prima/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c b/drivers/staging/prima/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c
index 27953ac..8ff0ad3 100644
--- a/drivers/staging/prima/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c
+++ b/drivers/staging/prima/CORE/WDI/TRP/DTS/src/wlan_qct_wdi_dts.c
@@ -611,7 +611,7 @@ wpt_status WDTS_RxPacket (void *pContext, wpt_packet *pFrame, WDTS_ChannelType c
if(VPKT_SIZE_BUFFER_ALIGNED < (usMPDULen+ucMPDUHOffset)){
WPAL_TRACE(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_FATAL,
- "Invalid Frame size, might memory corrupted(%d+%d/%d)",
+ "Invalid Frame size, might memory corrupted(%d+%d/%lu)",
usMPDULen, ucMPDUHOffset, VPKT_SIZE_BUFFER_ALIGNED);
/* Size of the packet tranferred by the DMA engine is

View file

@ -0,0 +1,22 @@
From d9e72da7be825a68f9f3f718944b5b76825dff39 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Thu, 19 Nov 2015 13:22:59 -0500
Subject: [PATCH] Disable PAX_REFCOUNT for now
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 7fc8f2a..a38a7ab 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -3480,7 +3480,7 @@ CONFIG_PAX_RANDMMAP=y
# Miscellaneous hardening features
#
CONFIG_PAX_MEMORY_SANITIZE=y
-CONFIG_PAX_REFCOUNT=y
+CONFIG_PAX_REFCOUNT=n
CONFIG_PAX_USERCOPY=y
# CONFIG_PAX_CONSTIFY_PLUGIN is not set
# CONFIG_PAX_LATENT_ENTROPY is not set

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,577 @@
From 008b08d5d58744d8c1532dc9e48d54e1d34ae6a6 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:21 -0400
Subject: [PATCH] Implement KEXEC
---
arch/arm/Kconfig | 26 ++++++++++
arch/arm/boot/compressed/head.S | 64 ++++++++++++++++++++++++
arch/arm/configs/cyanogenmod_bacon_defconfig | 6 ++-
arch/arm/include/asm/kexec.h | 8 +++
arch/arm/kernel/machine_kexec.c | 58 +++++++++++++++++++--
arch/arm/kernel/relocate_kernel.S | 75 ++++++++++++++++++++++++++++
arch/arm/mach-msm/include/mach/memory.h | 16 ++++++
arch/arm/mach-msm/oppo/board-8974-oppo.c | 27 ++++++++++
arch/arm/mach-msm/restart.c | 28 +++++++++++
include/linux/kexec.h | 19 +++++--
kernel/kexec.c | 4 ++
11 files changed, 322 insertions(+), 9 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 37d3c6d..f801a19 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -2299,6 +2299,32 @@ config ATAGS_PROC
Should the atags used to boot the kernel be exported in an "atags"
file in procfs. Useful with kexec.
+config KEXEC_HARDBOOT
+ bool "Support hard booting to a kexec kernel"
+ depends on KEXEC
+ help
+ Allows hard booting (i.e., with a full hardware reboot) to a kernel
+ previously loaded in memory by kexec. This works around the problem of
+ soft-booted kernel hangs due to improper device shutdown and/or
+ reinitialization. Support is comprised of two components:
+
+ First, a "hardboot" flag is added to the kexec syscall to force a hard
+ reboot in relocate_new_kernel() (which requires machine-specific assembly
+ code). This also requires the kexec userspace tool to load the kexec'd
+ kernel in memory region left untouched by the bootloader (i.e., not
+ explicitly cleared and not overwritten by the boot kernel). Just prior
+ to reboot, the kexec kernel arguments are stashed in a machine-specific
+ memory page that must also be preserved. Note that this hardboot page
+ need not be reserved during regular kernel execution.
+
+ Second, the zImage decompresor of the boot (bootloader-loaded) kernel is
+ modified to check the hardboot page for fresh kexec arguments, and if
+ present, attempts to jump to the kexec'd kernel preserved in memory.
+
+ Note that hardboot support is only required in the boot kernel and any
+ kernel capable of performing a hardboot kexec. It is _not_ required by a
+ kexec'd kernel.
+
config CRASH_DUMP
bool "Build kdump crash kernel (EXPERIMENTAL)"
depends on EXPERIMENTAL
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index d3892ef..be05aa1 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -11,6 +11,12 @@
#include <linux/linkage.h>
.arch armv7-a
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #include <asm/kexec.h>
+ #include <asm/memory.h>
+#endif
+
/*
* Debugging stuff
*
@@ -136,6 +142,64 @@ start:
1: mov r7, r1 @ save architecture ID
mov r8, r2 @ save atags pointer
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Check hardboot page for a kexec kernel. */
+ ldr r3, =KEXEC_HB_PAGE_ADDR
+ ldr r0, [r3]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ teq r0, r1
+ bne not_booting_other
+
+ /* Clear hardboot page magic to avoid boot loop. */
+ mov r0, #0
+ str r0, [r3]
+
+ /*
+ * Copy dtb from location up high in memory to default location.
+ * Kernel freezes if this is not done.
+ */
+ ldr r1, [r3, #12] @ kexec_boot_atags
+ ldr r2, [r3, #16] @ kexec_boot_atags_len
+ mov r5, #0 @ iterator
+catags_cpy:
+ ldr r0, [r1, r5] @ from kexec_boot_atags
+ str r0, [r8, r5] @ to atags_pointer
+ add r5, r5, #4
+ cmp r5, r2
+ blo catags_cpy
+
+#ifdef KEXEC_HB_KERNEL_LOC
+ /*
+ * Copy kernel from location up high in memory to location in first 128MB.
+ * Bootloader on hammerhead erases first 128MB of ram on reboot, so it can't
+ * be in there before reboot, but decompressing in location above 128MB takes
+ * a long time. This memcpy is much quicker, for some reason.
+ */
+ ldr r2, [r3, #4] @ kexec_start_address
+ ldr r4, [r3, #20] @ kexec_kernel_len
+ ldr r6, =KEXEC_HB_KERNEL_LOC @ target
+ mov r5, #0 @ iterator
+kernel_cpy:
+ ldr r0, [r2, r5] @ from kexec_start_address
+ str r0, [r6, r5] @ to KEXEC_HB_KERNEL_LOC
+ add r5, r5, #4
+ cmp r5, r4
+ blo kernel_cpy
+#else
+ ldr r6, [r3, #4] @ kexec_start_address
+#endif
+
+ /* set registers and boot kexecd' kernel */
+ mov r0, #0
+ ldr r1, [r3, #8] @ kexec_mach_type
+ mov r2, r8 @ atags pointer
+ mov pc, r6
+
+ .ltorg
+
+not_booting_other:
+#endif
+
#ifndef __ARM_ARCH_2__
/*
* Booting from Angel - need to enter SVC mode and disable
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 6384191..ac68dba 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -693,7 +693,9 @@ CONFIG_ZBOOT_ROM_BSS=0
# CONFIG_ARM_APPENDED_DTB is not set
CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
+CONFIG_KEXEC_HARDBOOT=y
+CONFIG_ATAGS_PROC=n
# CONFIG_CRASH_DUMP is not set
# CONFIG_AUTO_ZRELADDR is not set
@@ -1283,7 +1285,7 @@ CONFIG_OF=y
#
# Device Tree and Open Firmware support
#
-# CONFIG_PROC_DEVICETREE is not set
+CONFIG_PROC_DEVICETREE=y
# CONFIG_OF_SELFTEST is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
diff --git a/arch/arm/include/asm/kexec.h b/arch/arm/include/asm/kexec.h
index c2b9b4b..564c55b 100644
--- a/arch/arm/include/asm/kexec.h
+++ b/arch/arm/include/asm/kexec.h
@@ -17,6 +17,10 @@
#define KEXEC_ARM_ATAGS_OFFSET 0x1000
#define KEXEC_ARM_ZIMAGE_OFFSET 0x8000
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #define KEXEC_HB_PAGE_MAGIC 0x4a5db007
+#endif
+
#ifndef __ASSEMBLY__
/**
@@ -53,6 +57,10 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
/* Function pointer to optional machine-specific reinitialization */
extern void (*kexec_reinit)(void);
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern void (*kexec_hardboot_hook)(void);
+#endif
+
#endif /* __ASSEMBLY__ */
#endif /* CONFIG_KEXEC */
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c
index 357b651..29cdd2f 100644
--- a/arch/arm/kernel/machine_kexec.c
+++ b/arch/arm/kernel/machine_kexec.c
@@ -14,6 +14,9 @@
#include <asm/cacheflush.h>
#include <asm/mach-types.h>
#include <asm/system_misc.h>
+#include <linux/memblock.h>
+#include <linux/of_fdt.h>
+#include <asm/mmu_writeable.h>
extern const unsigned char relocate_new_kernel[];
extern const unsigned int relocate_new_kernel_size;
@@ -22,6 +25,12 @@ extern unsigned long kexec_start_address;
extern unsigned long kexec_indirection_page;
extern unsigned long kexec_mach_type;
extern unsigned long kexec_boot_atags;
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern unsigned long kexec_hardboot;
+extern unsigned long kexec_boot_atags_len;
+extern unsigned long kexec_kernel_len;
+void (*kexec_hardboot_hook)(void);
+#endif
static atomic_t waiting_for_crash_ipi;
@@ -32,6 +41,37 @@ static atomic_t waiting_for_crash_ipi;
int machine_kexec_prepare(struct kimage *image)
{
+ struct kexec_segment *current_segment;
+ __be32 header;
+ int i, err;
+
+ /* No segment at default ATAGs address. try to locate
+ * a dtb using magic */
+ for (i = 0; i < image->nr_segments; i++) {
+ current_segment = &image->segment[i];
+
+ err = memblock_is_region_memory(current_segment->mem,
+ current_segment->memsz);
+ if (!err)
+ return - EINVAL;
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if(current_segment->mem == image->start)
+ mem_text_write_kernel_word(&kexec_kernel_len, current_segment->memsz);
+#endif
+
+ err = get_user(header, (__be32*)current_segment->buf);
+ if (err)
+ return err;
+
+ if (be32_to_cpu(header) == OF_DT_HEADER)
+ {
+ mem_text_write_kernel_word(&kexec_boot_atags, current_segment->mem);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_boot_atags_len, current_segment->memsz);
+#endif
+ }
+ }
return 0;
}
@@ -123,10 +163,14 @@ void machine_kexec(struct kimage *image)
reboot_code_buffer = page_address(image->control_code_page);
/* Prepare parameters for reboot_code_buffer*/
- kexec_start_address = image->start;
- kexec_indirection_page = page_list;
- kexec_mach_type = machine_arch_type;
- kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
+ mem_text_write_kernel_word(&kexec_start_address, image->start);
+ mem_text_write_kernel_word(&kexec_indirection_page, page_list);
+ mem_text_write_kernel_word(&kexec_mach_type, machine_arch_type);
+ if (!kexec_boot_atags)
+ mem_text_write_kernel_word(&kexec_boot_atags, image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_hardboot, image->hardboot);
+#endif
/* copy our kernel relocation code to the control code page */
memcpy(reboot_code_buffer,
@@ -140,6 +184,12 @@ void machine_kexec(struct kimage *image)
if (kexec_reinit)
kexec_reinit();
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Run any final machine-specific shutdown code. */
+ if (image->hardboot && kexec_hardboot_hook)
+ kexec_hardboot_hook();
+#endif
+
soft_restart(reboot_code_buffer_phys);
}
diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S
index d0cdedf..0e45ffc 100644
--- a/arch/arm/kernel/relocate_kernel.S
+++ b/arch/arm/kernel/relocate_kernel.S
@@ -4,6 +4,15 @@
#include <asm/kexec.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/memory.h>
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ #include <mach/iomap.h>
+#elif defined(CONFIG_ARCH_APQ8064) || defined(CONFIG_ARCH_MSM8974)
+ #include <mach/msm_iomap.h>
+#endif
+#endif
+
.globl relocate_new_kernel
relocate_new_kernel:
@@ -52,6 +61,12 @@ relocate_new_kernel:
b 0b
2:
+#ifdef CONFIG_KEXEC_HARDBOOT
+ ldr r0, kexec_hardboot
+ teq r0, #0
+ bne hardboot
+#endif
+
/* Jump to relocated kernel */
mov lr,r1
mov r0,#0
@@ -60,6 +75,52 @@ relocate_new_kernel:
ARM( mov pc, lr )
THUMB( bx lr )
+#ifdef CONFIG_KEXEC_HARDBOOT
+hardboot:
+ /* Stash boot arguments in hardboot page:
+ * 0: KEXEC_HB_PAGE_MAGIC
+ * 4: kexec_start_address
+ * 8: kexec_mach_type
+ * 12: kexec_boot_atags
+ * 16: kexec_boot_atags_len
+ * 20: kexec_kernel_len */
+ ldr r0, =KEXEC_HB_PAGE_ADDR
+ str r1, [r0, #4]
+ ldr r1, kexec_mach_type
+ str r1, [r0, #8]
+ ldr r1, kexec_boot_atags
+ str r1, [r0, #12]
+ ldr r1, kexec_boot_atags_len
+ str r1, [r0, #16]
+ ldr r1, kexec_kernel_len
+ str r1, [r0, #20]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ str r1, [r0]
+
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ ldr r0, =TEGRA_PMC_BASE
+ ldr r1, [r0]
+ orr r1, r1, #0x10
+ str r1, [r0]
+loop: b loop
+#elif defined(CONFIG_ARCH_APQ8064)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =APQ8064_TLMM_PHYS
+ mov r1, #0
+ str r1, [r0, #0x820] @ PSHOLD_CTL_SU
+loop: b loop
+#elif defined(CONFIG_ARCH_MSM8974)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =MSM8974_MPM2_PSHOLD_PHYS
+ mov r1, #0
+ str r1, [r0, #0]
+loop: b loop
+#else
+#error "No reboot method defined for hardboot."
+#endif
+
+ .ltorg
+#endif
.align
.globl kexec_start_address
@@ -79,6 +140,20 @@ kexec_mach_type:
kexec_boot_atags:
.long 0x0
+#ifdef CONFIG_KEXEC_HARDBOOT
+ .globl kexec_boot_atags_len
+kexec_boot_atags_len:
+ .long 0x0
+
+ .globl kexec_kernel_len
+kexec_kernel_len:
+ .long 0x0
+
+ .globl kexec_hardboot
+kexec_hardboot:
+ .long 0x0
+#endif
+
relocate_new_kernel_end:
.globl relocate_new_kernel_size
diff --git a/arch/arm/mach-msm/include/mach/memory.h b/arch/arm/mach-msm/include/mach/memory.h
index 9225230..1c87b96 100644
--- a/arch/arm/mach-msm/include/mach/memory.h
+++ b/arch/arm/mach-msm/include/mach/memory.h
@@ -20,6 +20,22 @@
/* physical offset of RAM */
#define PLAT_PHYS_OFFSET UL(CONFIG_PHYS_OFFSET)
+#if defined(CONFIG_KEXEC_HARDBOOT)
+#if defined(CONFIG_MACH_APQ8064_FLO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88C00000)
+#elif defined(CONFIG_MACH_APQ8064_MAKO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88600000)
+#elif defined(CONFIG_MACH_MSM8974_HAMMERHEAD)
+#define KEXEC_HB_PAGE_ADDR UL(0x10100000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#elif defined(CONFIG_MACH_OPPO_MSM8974)
+#define KEXEC_HB_PAGE_ADDR UL(0x2F600000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#else
+#error "Adress for kexec hardboot page not defined"
+#endif
+#endif
+
#ifndef __ASSEMBLY__
void clean_and_invalidate_caches(unsigned long, unsigned long, unsigned long);
void clean_caches(unsigned long, unsigned long, unsigned long);
diff --git a/arch/arm/mach-msm/oppo/board-8974-oppo.c b/arch/arm/mach-msm/oppo/board-8974-oppo.c
index eb24545..10bbbda 100644
--- a/arch/arm/mach-msm/oppo/board-8974-oppo.c
+++ b/arch/arm/mach-msm/oppo/board-8974-oppo.c
@@ -54,6 +54,13 @@
#include <linux/pcb_version.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/setup.h>
+#include <asm/memory.h>
+#include <linux/memblock.h>
+#define OPPO_PERSISTENT_RAM_SIZE (SZ_1M)
+#endif
+
static struct platform_device *ram_console_dev;
static struct persistent_ram_descriptor msm_prd[] __initdata = {
@@ -72,6 +79,26 @@ static struct persistent_ram msm_pr __initdata = {
void __init msm_8974_reserve(void)
{
+#ifdef CONFIG_KEXEC_HARDBOOT
+ // Reserve space for hardboot page - just after ram_console,
+ // at the start of second memory bank
+ int ret;
+ phys_addr_t start;
+ struct membank* bank;
+
+ if (meminfo.nr_banks < 2) {
+ pr_err("%s: not enough membank\n", __func__);
+ return;
+ }
+
+ bank = &meminfo.bank[1];
+ start = bank->start + SZ_1M + OPPO_PERSISTENT_RAM_SIZE;
+ ret = memblock_remove(start, SZ_1M);
+ if(!ret)
+ pr_info("Hardboot page reserved at 0x%X\n", start);
+ else
+ pr_err("Failed to reserve space for hardboot page at 0x%X!\n", start);
+#endif
persistent_ram_early_init(&msm_pr);
of_scan_flat_dt(dt_scan_for_memory_reserve, NULL);
}
diff --git a/arch/arm/mach-msm/restart.c b/arch/arm/mach-msm/restart.c
index a04ab8d..fe89976 100644
--- a/arch/arm/mach-msm/restart.c
+++ b/arch/arm/mach-msm/restart.c
@@ -38,6 +38,10 @@
#include "timer.h"
#include "wdog_debug.h"
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/kexec.h>
+#endif
+
#define WDT0_RST 0x38
#define WDT0_EN 0x40
#define WDT0_BARK_TIME 0x4C
@@ -373,6 +377,26 @@ static int __init msm_pmic_restart_init(void)
late_initcall(msm_pmic_restart_init);
+#ifdef CONFIG_KEXEC_HARDBOOT
+static void msm_kexec_hardboot_hook(void)
+{
+ set_dload_mode(0);
+
+ // Set PMIC to restart-on-poweroff
+ pm8xxx_reset_pwr_off(1);
+
+ // These are executed on normal reboot, but with kexec-hardboot,
+ // they reboot/panic the system immediately.
+#if 0
+ qpnp_pon_system_pwr_off(PON_POWER_OFF_WARM_RESET);
+
+ /* Needed to bypass debug image on some chips */
+ msm_disable_wdog_debug();
+ halt_spmi_pmic_arbiter();
+#endif
+}
+#endif
+
static int __init msm_restart_init(void)
{
#ifdef CONFIG_MSM_DLOAD_MODE
@@ -392,6 +416,10 @@ static int __init msm_restart_init(void)
if (scm_is_call_available(SCM_SVC_PWR, SCM_IO_DISABLE_PMIC_ARBITER) > 0)
scm_pmic_arbiter_disable_supported = true;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ kexec_hardboot_hook = msm_kexec_hardboot_hook;
+#endif
+
return 0;
}
early_initcall(msm_restart_init);
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index af84a25..a4509ad 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -111,6 +111,10 @@ struct kimage {
#define KEXEC_TYPE_CRASH 1
unsigned int preserve_context : 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ unsigned int hardboot : 1;
+#endif
+
#ifdef ARCH_HAS_KIMAGE_ARCH
struct kimage_arch arch;
#endif
@@ -178,6 +182,11 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ON_CRASH 0x00000001
#define KEXEC_PRESERVE_CONTEXT 0x00000002
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+#define KEXEC_HARDBOOT 0x00000004
+#endif
+
#define KEXEC_ARCH_MASK 0xffff0000
/* These values match the ELF architecture values.
@@ -196,10 +205,14 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ARCH_MIPS ( 8 << 16)
/* List of defined/legal kexec flags */
-#ifndef CONFIG_KEXEC_JUMP
-#define KEXEC_FLAGS KEXEC_ON_CRASH
-#else
+#if defined(CONFIG_KEXEC_JUMP) && defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT | KEXEC_HARDBOOT)
+#elif defined(CONFIG_KEXEC_JUMP)
#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT)
+#elif defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_HARDBOOT)
+#else
+#define KEXEC_FLAGS (KEXEC_ON_CRASH)
#endif
#define VMCOREINFO_BYTES (4096)
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 4e2e472..aef7893 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -1004,6 +1004,10 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
if (flags & KEXEC_PRESERVE_CONTEXT)
image->preserve_context = 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if (flags & KEXEC_HARDBOOT)
+ image->hardboot = 1;
+#endif
result = machine_kexec_prepare(image);
if (result)
goto out;

View file

@ -0,0 +1,706 @@
From 1f7530cfcad8e25223a2a9a9b70cdb0f3c4d1442 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:57 -0400
Subject: [PATCH] Overclocked to 2.8Ghz, underclocked to 268Mhz
---
arch/arm/boot/dts/msm8974-v2.dtsi | 2 +-
arch/arm/boot/dts/msm8974pro-pm8941.dtsi | 8 +-
.../arm/boot/dts/msm8974pro-pma8084-regulator.dtsi | 16 +-
arch/arm/boot/dts/msm8974pro.dtsi | 190 ++++++++++++++++++---
4 files changed, 179 insertions(+), 37 deletions(-)
diff --git a/arch/arm/boot/dts/msm8974-v2.dtsi b/arch/arm/boot/dts/msm8974-v2.dtsi
index 04769bd..8739175 100644
--- a/arch/arm/boot/dts/msm8974-v2.dtsi
+++ b/arch/arm/boot/dts/msm8974-v2.dtsi
@@ -135,7 +135,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,
diff --git a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
index 89939e6..d76e4bd 100644
--- a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
@@ -39,22 +39,22 @@
};
&krait0_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait1_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait2_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait3_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
diff --git a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
index 433d466..428a520 100644
--- a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
@@ -492,9 +492,9 @@
<0xf908a800 0x1000>; /* APCS_ALIAS0_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -508,9 +508,9 @@
<0xf909a800 0x1000>; /* APCS_ALIAS1_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -524,9 +524,9 @@
<0xf90aa800 0x1000>; /* APCS_ALIAS2_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -540,9 +540,9 @@
<0xf90ba800 0x1000>; /* APCS_ALIAS3_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
diff --git a/arch/arm/boot/dts/msm8974pro.dtsi b/arch/arm/boot/dts/msm8974pro.dtsi
index c50b379..ebb5112 100644
--- a/arch/arm/boot/dts/msm8974pro.dtsi
+++ b/arch/arm/boot/dts/msm8974pro.dtsi
@@ -90,6 +90,7 @@
qcom,clock-krait@f9016000 {
qcom,speed1-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -121,6 +122,7 @@
qcom,speed1-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -152,6 +154,7 @@
qcom,speed1-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -183,6 +186,7 @@
qcom,speed1-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -214,6 +218,7 @@
qcom,speed1-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -245,6 +250,7 @@
qcom,speed1-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -276,6 +282,7 @@
qcom,speed1-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -307,6 +314,7 @@
qcom,speed3-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -337,10 +345,14 @@
< 2265600000 1065000 700 >,
< 2342400000 1080000 734 >,
< 2419200000 1095000 769 >,
- < 2457600000 1100000 785 >;
+ < 2457600000 1100000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -371,10 +383,14 @@
< 2265600000 1040000 700 >,
< 2342400000 1055000 734 >,
< 2419200000 1070000 769 >,
- < 2457600000 1075000 785 >;
+ < 2457600000 1075000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -405,10 +421,14 @@
< 2265600000 1015000 700 >,
< 2342400000 1030000 734 >,
< 2419200000 1045000 769 >,
- < 2457600000 1050000 785 >;
+ < 2457600000 1050000 785 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1195000 900 >,
+ < 2880000000 1225000 937 >;
qcom,speed3-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -439,10 +459,14 @@
< 2265600000 990000 700 >,
< 2342400000 1005000 734 >,
< 2419200000 1020000 769 >,
- < 2457600000 1025000 785 >;
+ < 2457600000 1025000 785 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -473,10 +497,14 @@
< 2265600000 965000 700 >,
< 2342400000 980000 734 >,
< 2419200000 995000 769 >,
- < 2457600000 1000000 785 >;
+ < 2457600000 1000000 785 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -507,10 +535,14 @@
< 2265600000 940000 700 >,
< 2342400000 955000 734 >,
< 2419200000 970000 769 >,
- < 2457600000 975000 785 >;
+ < 2457600000 975000 785 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -541,10 +573,14 @@
< 2265600000 915000 700 >,
< 2342400000 930000 734 >,
< 2419200000 945000 769 >,
- < 2457600000 950000 785 >;
+ < 2457600000 950000 785 >,
+ < 2572800000 1010000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed1-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 810000 87 >,
< 422400000 820000 108 >,
@@ -576,6 +612,7 @@
qcom,speed1-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 810000 108 >,
@@ -607,6 +644,7 @@
qcom,speed1-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -638,6 +676,7 @@
qcom,speed1-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -669,6 +708,7 @@
qcom,speed1-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -700,6 +740,7 @@
qcom,speed1-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -731,6 +772,7 @@
qcom,speed1-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -762,6 +804,7 @@
qcom,speed1-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -793,6 +836,7 @@
qcom,speed1-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -824,6 +868,7 @@
qcom,speed1-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -855,6 +900,7 @@
qcom,speed1-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -886,6 +932,7 @@
qcom,speed1-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -917,6 +964,7 @@
qcom,speed1-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -948,6 +996,7 @@
qcom,speed1-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -979,6 +1028,7 @@
qcom,speed1-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1010,6 +1060,7 @@
qcom,speed1-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1041,6 +1092,7 @@
qcom,speed3-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1071,10 +1123,14 @@
< 2265600000 1085000 716 >,
< 2342400000 1100000 751 >,
< 2419200000 1115000 786 >,
- < 2457600000 1120000 802 >;
+ < 2457600000 1120000 802 >,
+ < 2572800000 1175000 827 >,
+ < 2726400000 1225000 900 >,
+ < 2880000000 1265000 937 >;
qcom,speed3-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1105,10 +1161,14 @@
< 2265600000 1075000 716 >,
< 2342400000 1090000 751 >,
< 2419200000 1105000 786 >,
- < 2457600000 1110000 802 >;
+ < 2457600000 1110000 802 >,
+ < 2572800000 1165000 827 >,
+ < 2726400000 1215000 900 >,
+ < 2880000000 1245000 937 >;
qcom,speed3-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1139,10 +1199,14 @@
< 2265600000 1065000 716 >,
< 2342400000 1080000 751 >,
< 2419200000 1095000 786 >,
- < 2457600000 1100000 802 >;
+ < 2457600000 1100000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1173,10 +1237,14 @@
< 2265600000 1055000 716 >,
< 2342400000 1070000 751 >,
< 2419200000 1085000 786 >,
- < 2457600000 1090000 802 >;
+ < 2457600000 1090000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1207,10 +1275,14 @@
< 2265600000 1045000 716 >,
< 2342400000 1060000 751 >,
< 2419200000 1075000 786 >,
- < 2457600000 1080000 802 >;
+ < 2457600000 1080000 802 >,
+ < 2572800000 1135000 827 >,
+ < 2726400000 1165000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1241,10 +1313,14 @@
< 2265600000 1035000 716 >,
< 2342400000 1050000 751 >,
< 2419200000 1065000 786 >,
- < 2457600000 1070000 802 >;
+ < 2457600000 1070000 802 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1185000 937 >;
qcom,speed3-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1275,10 +1351,14 @@
< 2265600000 1025000 716 >,
< 2342400000 1040000 751 >,
< 2419200000 1055000 786 >,
- < 2457600000 1060000 802 >;
+ < 2457600000 1060000 802 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1145000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed3-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1309,10 +1389,14 @@
< 2265600000 1015000 716 >,
< 2342400000 1030000 751 >,
< 2419200000 1045000 786 >,
- < 2457600000 1050000 802 >;
+ < 2457600000 1050000 802 >,
+ < 2572800000 1105000 827 >,
+ < 2726400000 1135000 900 >,
+ < 2880000000 1165000 937 >;
qcom,speed3-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1343,10 +1427,14 @@
< 2265600000 1005000 716 >,
< 2342400000 1020000 751 >,
< 2419200000 1035000 786 >,
- < 2457600000 1040000 802 >;
+ < 2457600000 1040000 802 >,
+ < 2572800000 1095000 827 >,
+ < 2726400000 1125000 900 >,
+ < 2880000000 1155000 937 >;
qcom,speed3-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1377,10 +1465,14 @@
< 2265600000 995000 716 >,
< 2342400000 1010000 751 >,
< 2419200000 1025000 786 >,
- < 2457600000 1030000 802 >;
+ < 2457600000 1030000 802 >,
+ < 2572800000 1085000 827 >,
+ < 2726400000 1115000 900 >,
+ < 2880000000 1145000 937 >;
qcom,speed3-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1411,10 +1503,14 @@
< 2265600000 985000 716 >,
< 2342400000 1000000 751 >,
< 2419200000 1015000 786 >,
- < 2457600000 1020000 802 >;
+ < 2457600000 1020000 802 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1105000 900 >,
+ < 2880000000 1135000 937 >;
qcom,speed3-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1445,10 +1541,14 @@
< 2265600000 975000 716 >,
< 2342400000 990000 751 >,
< 2419200000 1005000 786 >,
- < 2457600000 1010000 802 >;
+ < 2457600000 1010000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1095000 900 >,
+ < 2880000000 1125000 937 >;
qcom,speed3-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1479,10 +1579,14 @@
< 2265600000 965000 716 >,
< 2342400000 980000 751 >,
< 2419200000 995000 786 >,
- < 2457600000 1000000 802 >;
+ < 2457600000 1000000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1085000 900 >,
+ < 2880000000 1115000 937 >;
qcom,speed3-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1513,10 +1617,14 @@
< 2265600000 955000 716 >,
< 2342400000 970000 751 >,
< 2419200000 985000 786 >,
- < 2457600000 990000 802 >;
+ < 2457600000 990000 802 >,
+ < 2572800000 1045000 827 >,
+ < 2726400000 1065000 900 >,
+ < 2880000000 1095000 937 >;
qcom,speed3-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1547,10 +1655,14 @@
< 2265600000 945000 716 >,
< 2342400000 960000 751 >,
< 2419200000 975000 786 >,
- < 2457600000 980000 802 >;
+ < 2457600000 980000 802 >,
+ < 2572800000 1035000 827 >,
+ < 2726400000 1055000 900 >,
+ < 2880000000 1085000 937 >;
qcom,speed3-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1581,9 +1693,39 @@
< 2265600000 935000 716 >,
< 2342400000 950000 751 >,
< 2419200000 965000 786 >,
- < 2457600000 970000 802 >;
+ < 2457600000 970000 802 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1045000 900 >,
+ < 2880000000 1075000 937 >;
};
+ qcom,msm-cpufreq@0 {
+ reg = <0 4>;
+ compatible = "qcom,msm-cpufreq";
+ qcom,cpufreq-table =
+ < 268800 /* 75 MHz */ >,
+ < 300000 /* 75 MHz */ >,
+ < 422400 /* 150 MHz */ >,
+ < 652800 /* 200 MHz */ >,
+ < 729600 /* 307 MHz */ >,
+ < 883200 /* 307 MHz */ >,
+ < 960000 /* 460 MHz */ >,
+ < 1036800 /* 460 MHz */ >,
+ < 1190400 /* 460 MHz */ >,
+ < 1267200 /* 614 MHz */ >,
+ < 1497600 /* 614 MHz */ >,
+ < 1574400 /* 800 MHz */ >,
+ < 1728000 /* 800 MHz */ >,
+ < 1958400 /* 931 MHz */ >,
+ < 2265600 /* 931 MHz */ >,
+ < 2342400 /* 931 MHz */ >,
+ < 2419200 /* 931 MHz */ >,
+ < 2457600 /* 931 MHz */ >,
+ < 2572800 /* 931 MHz */ >,
+ < 2726400 /* 931 MHz */ >,
+ < 2880000 /* 931 MHz */ >;
+ };
+
i2c@f9928000 { /* BLSP-1 QUP-6 */
cell-index = <3>;
compatible = "qcom,i2c-qup";
@@ -1751,7 +1893,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,

View file

@ -0,0 +1,48 @@
From 2f72f326e6ccc660d8a3a5da787212828508f943 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:50:31 -0400
Subject: [PATCH] Update defconfig
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index ac68dba..f6a455b 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -125,8 +125,9 @@ CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
# CONFIG_RD_XZ is not set
# CONFIG_RD_LZO is not set
-# CONFIG_RD_LZ4 is not set
+CONFIG_RD_LZ4=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_CC_OPTIMIZE_MORE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_PANIC_TIMEOUT=5
@@ -190,7 +191,7 @@ CONFIG_SECCOMP_FILTER=y
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+CONFIG_MODULES=y
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
CONFIG_LBDAF=y
@@ -1775,12 +1776,12 @@ CONFIG_SERIAL_MSM_HS=y
#
# Diag Support
#
-# CONFIG_DIAG_CHAR is not set
+CONFIG_DIAG_CHAR=y
#
# DIAG traffic over USB
#
-# CONFIG_DIAG_OVER_USB is not set
+CONFIG_DIAG_OVER_USB=y
#
# SDIO support for DIAG

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,244 @@
From d96337d6d658dfb72d9f9625d62dbf5eab135d24 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:52:02 -0400
Subject: [PATCH] Implement Quick Wakeup
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 2 +
include/linux/quickwakeup.h | 46 ++++++++++++
kernel/power/Kconfig | 20 ++++--
kernel/power/Makefile | 1 +
kernel/power/quickwakeup.c | 104 +++++++++++++++++++++++++++
5 files changed, 167 insertions(+), 6 deletions(-)
create mode 100644 include/linux/quickwakeup.h
create mode 100644 kernel/power/quickwakeup.c
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index f6a455b..a79f77b 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -3623,3 +3623,5 @@ CONFIG_NLATTR=y
# CONFIG_CORDIC is not set
CONFIG_QMI_ENCDEC=y
# CONFIG_QMI_ENCDEC_DEBUG is not set
+
+CONFIG_QUICK_WAKEUP=y
diff --git a/include/linux/quickwakeup.h b/include/linux/quickwakeup.h
new file mode 100644
index 0000000..000effa
--- /dev/null
+++ b/include/linux/quickwakeup.h
@@ -0,0 +1,46 @@
+/* include/linux/quickwakeup.h
+ *
+ * Copyright (C) 2014 Motorola Mobility LLC.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _QUICKWAKEUP_H_
+#define _QUICKWAKEUP_H_
+
+#ifdef __KERNEL__
+
+struct quickwakeup_ops {
+ struct list_head list;
+ char *name;
+ int (*qw_execute)(void *data);
+ int (*qw_check)(void *data);
+ int execute;
+ void *data; /* arbitrary data passed back to user */
+};
+
+#ifdef CONFIG_QUICK_WAKEUP
+
+int quickwakeup_register(struct quickwakeup_ops *ops);
+void quickwakeup_unregister(struct quickwakeup_ops *ops);
+bool quickwakeup_suspend_again(void);
+
+#else
+
+static inline int quickwakeup_register(struct quickwakeup_ops *ops) { return 0; };
+static inline void quickwakeup_unregister(struct quickwakeup_ops *ops) {};
+static inline bool quickwakeup_suspend_again(void) { return 0; };
+
+#endif /* CONFIG_QUICK_WAKEUP */
+
+#endif /* __KERNEL__ */
+
+#endif /* _QUICKWAKEUP_H_ */
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
index e536c8d..8006962 100644
--- a/kernel/power/Kconfig
+++ b/kernel/power/Kconfig
@@ -83,20 +83,20 @@ config PM_STD_PARTITION
default ""
---help---
The default resume partition is the partition that the suspend-
- to-disk implementation will look for a suspended disk image.
+ to-disk implementation will look for a suspended disk image.
- The partition specified here will be different for almost every user.
+ The partition specified here will be different for almost every user.
It should be a valid swap partition (at least for now) that is turned
- on before suspending.
+ on before suspending.
The partition specified can be overridden by specifying:
- resume=/dev/<other device>
+ resume=/dev/<other device>
- which will set the resume partition to the device specified.
+ which will set the resume partition to the device specified.
Note there is currently not a way to specify which device to save the
- suspended image to. It will simply pick the first available swap
+ suspended image to. It will simply pick the first available swap
device.
config PM_SLEEP
@@ -285,6 +285,14 @@ config SUSPEND_TIME
Prints the time spent in suspend in the kernel log, and
keeps statistics on the time spent in suspend in
/sys/kernel/debug/suspend_time
+
+config QUICK_WAKEUP
+ bool "Quick wakeup"
+ depends on SUSPEND
+ default n
+ ---help---
+ Allow kernel driver to do periodic jobs without resuming the full system
+ This option can increase battery life on android powered smartphone.
config DEDUCE_WAKEUP_REASONS
bool
diff --git a/kernel/power/Makefile b/kernel/power/Makefile
index 74c713b..e5bebbc 100644
--- a/kernel/power/Makefile
+++ b/kernel/power/Makefile
@@ -14,5 +14,6 @@ obj-$(CONFIG_PM_WAKELOCKS) += wakelock.o
obj-$(CONFIG_SUSPEND_TIME) += suspend_time.o
obj-$(CONFIG_MAGIC_SYSRQ) += poweroff.o
+obj-$(CONFIG_QUICK_WAKEUP) += quickwakeup.o
obj-$(CONFIG_SUSPEND) += wakeup_reason.o
diff --git a/kernel/power/quickwakeup.c b/kernel/power/quickwakeup.c
new file mode 100644
index 0000000..46f9dda
--- /dev/null
+++ b/kernel/power/quickwakeup.c
@@ -0,0 +1,104 @@
+/* kernel/power/quickwakeup.c
+ *
+ * Copyright (C) 2014 Motorola Mobility LLC.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/mutex.h>
+#include <linux/quickwakeup.h>
+
+static LIST_HEAD(qw_head);
+static DEFINE_MUTEX(list_lock);
+
+int quickwakeup_register(struct quickwakeup_ops *ops)
+{
+ mutex_lock(&list_lock);
+ list_add(&ops->list, &qw_head);
+ mutex_unlock(&list_lock);
+
+ return 0;
+}
+
+void quickwakeup_unregister(struct quickwakeup_ops *ops)
+{
+ mutex_lock(&list_lock);
+ list_del(&ops->list);
+ mutex_unlock(&list_lock);
+}
+
+static int quickwakeup_check(void)
+{
+ int check = 0;
+ struct quickwakeup_ops *index;
+
+ mutex_lock(&list_lock);
+
+ list_for_each_entry(index, &qw_head, list) {
+ int ret = index->qw_check(index->data);
+ index->execute = ret;
+ check |= ret;
+ pr_debug("%s: %s votes for %s\n", __func__, index->name,
+ ret ? "execute" : "dont care");
+ }
+
+ mutex_unlock(&list_lock);
+
+ return check;
+}
+
+/* return 1 => suspend again
+ return 0 => continue wakeup
+ */
+static int quickwakeup_execute(void)
+{
+ int suspend_again = 0;
+ int final_vote = 1;
+ struct quickwakeup_ops *index;
+
+ mutex_lock(&list_lock);
+
+ list_for_each_entry(index, &qw_head, list) {
+ if (index->execute) {
+ int ret = index->qw_execute(index->data);
+ index->execute = 0;
+ final_vote &= ret;
+ suspend_again = final_vote;
+ pr_debug("%s: %s votes for %s\n", __func__, index->name,
+ ret ? "suspend again" : "wakeup");
+ }
+ }
+
+ mutex_unlock(&list_lock);
+
+ pr_debug("%s: %s\n", __func__,
+ suspend_again ? "suspend again" : "wakeup");
+
+ return suspend_again;
+}
+
+/* return 1 => suspend again
+ return 0 => continue wakeup
+ */
+bool quickwakeup_suspend_again(void)
+{
+ int ret = 0;
+
+ if (quickwakeup_check())
+ ret = quickwakeup_execute();
+
+ pr_debug("%s- returning %d %s\n", __func__, ret,
+ ret ? "suspend again" : "wakeup");
+
+ return ret;
+}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,60 @@
From ff6e26507b64befbf5e2bde395374aef4d2736d8 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Tue, 26 May 2015 14:26:28 -0400
Subject: [PATCH] Fix build failure
---
kernel/time/alarmtimer.c | 23 ++++++++---------------
1 file changed, 8 insertions(+), 15 deletions(-)
diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
index f0239cc..c4f3fdd 100644
--- a/kernel/time/alarmtimer.c
+++ b/kernel/time/alarmtimer.c
@@ -731,9 +731,6 @@ static int alarm_timer_create(struct k_itimer *new_timer)
if (!alarmtimer_get_rtcdev())
return -ENOTSUPP;
- if (flags & ~TIMER_ABSTIME)
- return -EINVAL;
-
if (!capable(CAP_WAKE_ALARM))
return -EPERM;
@@ -748,22 +745,18 @@ static int alarm_timer_create(struct k_itimer *new_timer)
* @new_timer: k_itimer pointer
* @cur_setting: itimerspec data to fill
*
- * Copies out the current itimerspec data
+ * Copies the itimerspec data out from the k_itimer
*/
static void alarm_timer_get(struct k_itimer *timr,
struct itimerspec *cur_setting)
{
- ktime_t relative_expiry_time =
- alarm_expires_remaining(&(timr->it.alarm.alarmtimer));
+ memset(cur_setting, 0, sizeof(struct itimerspec));
- if (ktime_to_ns(relative_expiry_time) > 0) {
- cur_setting->it_value = ktime_to_timespec(relative_expiry_time);
- } else {
- cur_setting->it_value.tv_sec = 0;
- cur_setting->it_value.tv_nsec = 0;
- }
-
- cur_setting->it_interval = ktime_to_timespec(timr->it.alarm.interval);
+ cur_setting->it_interval =
+ ktime_to_timespec(timr->it.alarm.interval);
+ cur_setting->it_value =
+ ktime_to_timespec(timr->it.alarm.alarmtimer.node.expires);
+ return;
}
/**
@@ -1070,4 +1063,4 @@ static int __init alarmtimer_init(void)
alarmtimer_rtc_interface_remove();
return error;
}
-device_initcall(alarmtimer_init);
+device_initcall(alarmtimer_init);
\ No newline at end of file

View file

@ -0,0 +1,22 @@
From ac54ba51bc5bab561573b64d82f3ba2a066d5fde Mon Sep 17 00:00:00 2001
From: YoshiShaPow <yoshipga@gmail.com>
Date: Sat, 20 Dec 2014 12:05:19 -0800
Subject: [PATCH] gcc5: arm: enable cortex_a15 optimization
---
arch/arm/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index e620786..0dd6592 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -57,7 +57,7 @@ comma = ,
# Note that GCC does not numerically define an architecture version
# macro, but instead defines a whole series of macros which makes
# testing for a specific architecture or later rather impossible.
-arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
+arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a -mtune=cortex-a15 -Wa$(comma)-march=armv7-a)
arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
# Only override the compiler option if ARMv6. The ARMv6K extensions are
# always available in ARMv7

View file

@ -0,0 +1,22 @@
From 9e6be08fe83c1204f8076b86d1346f18f92b8e5d Mon Sep 17 00:00:00 2001
From: franciscofranco <franciscofranco.1990@gmail.com>
Date: Fri, 27 Feb 2015 15:59:50 +0000
Subject: [PATCH] arm: use -mtune=cortex-a15 for Krait targets
Signed-off-by: franciscofranco <franciscofranco.1990@gmail.com>
---
arch/arm/Makefile | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 0dd6592..37632ba 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -102,6 +102,7 @@ tune-$(CONFIG_CPU_XSC3) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -
tune-$(CONFIG_CPU_FEROCEON) :=$(call cc-option,-mtune=marvell-f,-mtune=xscale)
tune-$(CONFIG_CPU_V6) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
tune-$(CONFIG_CPU_V6K) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
+tune-$(CONFIG_ARCH_MSM_KRAIT) :=-mtune=cortex-a15
ifeq ($(CONFIG_AEABI),y)
CFLAGS_ABI :=-mabi=aapcs-linux -mno-thumb-interwork

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,577 @@
From 008b08d5d58744d8c1532dc9e48d54e1d34ae6a6 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:21 -0400
Subject: [PATCH] Implement KEXEC
---
arch/arm/Kconfig | 26 ++++++++++
arch/arm/boot/compressed/head.S | 64 ++++++++++++++++++++++++
arch/arm/configs/cyanogenmod_bacon_defconfig | 6 ++-
arch/arm/include/asm/kexec.h | 8 +++
arch/arm/kernel/machine_kexec.c | 58 +++++++++++++++++++--
arch/arm/kernel/relocate_kernel.S | 75 ++++++++++++++++++++++++++++
arch/arm/mach-msm/include/mach/memory.h | 16 ++++++
arch/arm/mach-msm/oppo/board-8974-oppo.c | 27 ++++++++++
arch/arm/mach-msm/restart.c | 28 +++++++++++
include/linux/kexec.h | 19 +++++--
kernel/kexec.c | 4 ++
11 files changed, 322 insertions(+), 9 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 37d3c6d..f801a19 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -2299,6 +2299,32 @@ config ATAGS_PROC
Should the atags used to boot the kernel be exported in an "atags"
file in procfs. Useful with kexec.
+config KEXEC_HARDBOOT
+ bool "Support hard booting to a kexec kernel"
+ depends on KEXEC
+ help
+ Allows hard booting (i.e., with a full hardware reboot) to a kernel
+ previously loaded in memory by kexec. This works around the problem of
+ soft-booted kernel hangs due to improper device shutdown and/or
+ reinitialization. Support is comprised of two components:
+
+ First, a "hardboot" flag is added to the kexec syscall to force a hard
+ reboot in relocate_new_kernel() (which requires machine-specific assembly
+ code). This also requires the kexec userspace tool to load the kexec'd
+ kernel in memory region left untouched by the bootloader (i.e., not
+ explicitly cleared and not overwritten by the boot kernel). Just prior
+ to reboot, the kexec kernel arguments are stashed in a machine-specific
+ memory page that must also be preserved. Note that this hardboot page
+ need not be reserved during regular kernel execution.
+
+ Second, the zImage decompresor of the boot (bootloader-loaded) kernel is
+ modified to check the hardboot page for fresh kexec arguments, and if
+ present, attempts to jump to the kexec'd kernel preserved in memory.
+
+ Note that hardboot support is only required in the boot kernel and any
+ kernel capable of performing a hardboot kexec. It is _not_ required by a
+ kexec'd kernel.
+
config CRASH_DUMP
bool "Build kdump crash kernel (EXPERIMENTAL)"
depends on EXPERIMENTAL
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index d3892ef..be05aa1 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -11,6 +11,12 @@
#include <linux/linkage.h>
.arch armv7-a
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #include <asm/kexec.h>
+ #include <asm/memory.h>
+#endif
+
/*
* Debugging stuff
*
@@ -136,6 +142,64 @@ start:
1: mov r7, r1 @ save architecture ID
mov r8, r2 @ save atags pointer
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Check hardboot page for a kexec kernel. */
+ ldr r3, =KEXEC_HB_PAGE_ADDR
+ ldr r0, [r3]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ teq r0, r1
+ bne not_booting_other
+
+ /* Clear hardboot page magic to avoid boot loop. */
+ mov r0, #0
+ str r0, [r3]
+
+ /*
+ * Copy dtb from location up high in memory to default location.
+ * Kernel freezes if this is not done.
+ */
+ ldr r1, [r3, #12] @ kexec_boot_atags
+ ldr r2, [r3, #16] @ kexec_boot_atags_len
+ mov r5, #0 @ iterator
+catags_cpy:
+ ldr r0, [r1, r5] @ from kexec_boot_atags
+ str r0, [r8, r5] @ to atags_pointer
+ add r5, r5, #4
+ cmp r5, r2
+ blo catags_cpy
+
+#ifdef KEXEC_HB_KERNEL_LOC
+ /*
+ * Copy kernel from location up high in memory to location in first 128MB.
+ * Bootloader on hammerhead erases first 128MB of ram on reboot, so it can't
+ * be in there before reboot, but decompressing in location above 128MB takes
+ * a long time. This memcpy is much quicker, for some reason.
+ */
+ ldr r2, [r3, #4] @ kexec_start_address
+ ldr r4, [r3, #20] @ kexec_kernel_len
+ ldr r6, =KEXEC_HB_KERNEL_LOC @ target
+ mov r5, #0 @ iterator
+kernel_cpy:
+ ldr r0, [r2, r5] @ from kexec_start_address
+ str r0, [r6, r5] @ to KEXEC_HB_KERNEL_LOC
+ add r5, r5, #4
+ cmp r5, r4
+ blo kernel_cpy
+#else
+ ldr r6, [r3, #4] @ kexec_start_address
+#endif
+
+ /* set registers and boot kexecd' kernel */
+ mov r0, #0
+ ldr r1, [r3, #8] @ kexec_mach_type
+ mov r2, r8 @ atags pointer
+ mov pc, r6
+
+ .ltorg
+
+not_booting_other:
+#endif
+
#ifndef __ARM_ARCH_2__
/*
* Booting from Angel - need to enter SVC mode and disable
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 6384191..ac68dba 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -693,7 +693,9 @@ CONFIG_ZBOOT_ROM_BSS=0
# CONFIG_ARM_APPENDED_DTB is not set
CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
+CONFIG_KEXEC_HARDBOOT=y
+CONFIG_ATAGS_PROC=n
# CONFIG_CRASH_DUMP is not set
# CONFIG_AUTO_ZRELADDR is not set
@@ -1283,7 +1285,7 @@ CONFIG_OF=y
#
# Device Tree and Open Firmware support
#
-# CONFIG_PROC_DEVICETREE is not set
+CONFIG_PROC_DEVICETREE=y
# CONFIG_OF_SELFTEST is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
diff --git a/arch/arm/include/asm/kexec.h b/arch/arm/include/asm/kexec.h
index c2b9b4b..564c55b 100644
--- a/arch/arm/include/asm/kexec.h
+++ b/arch/arm/include/asm/kexec.h
@@ -17,6 +17,10 @@
#define KEXEC_ARM_ATAGS_OFFSET 0x1000
#define KEXEC_ARM_ZIMAGE_OFFSET 0x8000
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #define KEXEC_HB_PAGE_MAGIC 0x4a5db007
+#endif
+
#ifndef __ASSEMBLY__
/**
@@ -53,6 +57,10 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
/* Function pointer to optional machine-specific reinitialization */
extern void (*kexec_reinit)(void);
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern void (*kexec_hardboot_hook)(void);
+#endif
+
#endif /* __ASSEMBLY__ */
#endif /* CONFIG_KEXEC */
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c
index 357b651..29cdd2f 100644
--- a/arch/arm/kernel/machine_kexec.c
+++ b/arch/arm/kernel/machine_kexec.c
@@ -14,6 +14,9 @@
#include <asm/cacheflush.h>
#include <asm/mach-types.h>
#include <asm/system_misc.h>
+#include <linux/memblock.h>
+#include <linux/of_fdt.h>
+#include <asm/mmu_writeable.h>
extern const unsigned char relocate_new_kernel[];
extern const unsigned int relocate_new_kernel_size;
@@ -22,6 +25,12 @@ extern unsigned long kexec_start_address;
extern unsigned long kexec_indirection_page;
extern unsigned long kexec_mach_type;
extern unsigned long kexec_boot_atags;
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern unsigned long kexec_hardboot;
+extern unsigned long kexec_boot_atags_len;
+extern unsigned long kexec_kernel_len;
+void (*kexec_hardboot_hook)(void);
+#endif
static atomic_t waiting_for_crash_ipi;
@@ -32,6 +41,37 @@ static atomic_t waiting_for_crash_ipi;
int machine_kexec_prepare(struct kimage *image)
{
+ struct kexec_segment *current_segment;
+ __be32 header;
+ int i, err;
+
+ /* No segment at default ATAGs address. try to locate
+ * a dtb using magic */
+ for (i = 0; i < image->nr_segments; i++) {
+ current_segment = &image->segment[i];
+
+ err = memblock_is_region_memory(current_segment->mem,
+ current_segment->memsz);
+ if (!err)
+ return - EINVAL;
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if(current_segment->mem == image->start)
+ mem_text_write_kernel_word(&kexec_kernel_len, current_segment->memsz);
+#endif
+
+ err = get_user(header, (__be32*)current_segment->buf);
+ if (err)
+ return err;
+
+ if (be32_to_cpu(header) == OF_DT_HEADER)
+ {
+ mem_text_write_kernel_word(&kexec_boot_atags, current_segment->mem);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_boot_atags_len, current_segment->memsz);
+#endif
+ }
+ }
return 0;
}
@@ -123,10 +163,14 @@ void machine_kexec(struct kimage *image)
reboot_code_buffer = page_address(image->control_code_page);
/* Prepare parameters for reboot_code_buffer*/
- kexec_start_address = image->start;
- kexec_indirection_page = page_list;
- kexec_mach_type = machine_arch_type;
- kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
+ mem_text_write_kernel_word(&kexec_start_address, image->start);
+ mem_text_write_kernel_word(&kexec_indirection_page, page_list);
+ mem_text_write_kernel_word(&kexec_mach_type, machine_arch_type);
+ if (!kexec_boot_atags)
+ mem_text_write_kernel_word(&kexec_boot_atags, image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_hardboot, image->hardboot);
+#endif
/* copy our kernel relocation code to the control code page */
memcpy(reboot_code_buffer,
@@ -140,6 +184,12 @@ void machine_kexec(struct kimage *image)
if (kexec_reinit)
kexec_reinit();
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Run any final machine-specific shutdown code. */
+ if (image->hardboot && kexec_hardboot_hook)
+ kexec_hardboot_hook();
+#endif
+
soft_restart(reboot_code_buffer_phys);
}
diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S
index d0cdedf..0e45ffc 100644
--- a/arch/arm/kernel/relocate_kernel.S
+++ b/arch/arm/kernel/relocate_kernel.S
@@ -4,6 +4,15 @@
#include <asm/kexec.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/memory.h>
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ #include <mach/iomap.h>
+#elif defined(CONFIG_ARCH_APQ8064) || defined(CONFIG_ARCH_MSM8974)
+ #include <mach/msm_iomap.h>
+#endif
+#endif
+
.globl relocate_new_kernel
relocate_new_kernel:
@@ -52,6 +61,12 @@ relocate_new_kernel:
b 0b
2:
+#ifdef CONFIG_KEXEC_HARDBOOT
+ ldr r0, kexec_hardboot
+ teq r0, #0
+ bne hardboot
+#endif
+
/* Jump to relocated kernel */
mov lr,r1
mov r0,#0
@@ -60,6 +75,52 @@ relocate_new_kernel:
ARM( mov pc, lr )
THUMB( bx lr )
+#ifdef CONFIG_KEXEC_HARDBOOT
+hardboot:
+ /* Stash boot arguments in hardboot page:
+ * 0: KEXEC_HB_PAGE_MAGIC
+ * 4: kexec_start_address
+ * 8: kexec_mach_type
+ * 12: kexec_boot_atags
+ * 16: kexec_boot_atags_len
+ * 20: kexec_kernel_len */
+ ldr r0, =KEXEC_HB_PAGE_ADDR
+ str r1, [r0, #4]
+ ldr r1, kexec_mach_type
+ str r1, [r0, #8]
+ ldr r1, kexec_boot_atags
+ str r1, [r0, #12]
+ ldr r1, kexec_boot_atags_len
+ str r1, [r0, #16]
+ ldr r1, kexec_kernel_len
+ str r1, [r0, #20]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ str r1, [r0]
+
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ ldr r0, =TEGRA_PMC_BASE
+ ldr r1, [r0]
+ orr r1, r1, #0x10
+ str r1, [r0]
+loop: b loop
+#elif defined(CONFIG_ARCH_APQ8064)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =APQ8064_TLMM_PHYS
+ mov r1, #0
+ str r1, [r0, #0x820] @ PSHOLD_CTL_SU
+loop: b loop
+#elif defined(CONFIG_ARCH_MSM8974)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =MSM8974_MPM2_PSHOLD_PHYS
+ mov r1, #0
+ str r1, [r0, #0]
+loop: b loop
+#else
+#error "No reboot method defined for hardboot."
+#endif
+
+ .ltorg
+#endif
.align
.globl kexec_start_address
@@ -79,6 +140,20 @@ kexec_mach_type:
kexec_boot_atags:
.long 0x0
+#ifdef CONFIG_KEXEC_HARDBOOT
+ .globl kexec_boot_atags_len
+kexec_boot_atags_len:
+ .long 0x0
+
+ .globl kexec_kernel_len
+kexec_kernel_len:
+ .long 0x0
+
+ .globl kexec_hardboot
+kexec_hardboot:
+ .long 0x0
+#endif
+
relocate_new_kernel_end:
.globl relocate_new_kernel_size
diff --git a/arch/arm/mach-msm/include/mach/memory.h b/arch/arm/mach-msm/include/mach/memory.h
index 9225230..1c87b96 100644
--- a/arch/arm/mach-msm/include/mach/memory.h
+++ b/arch/arm/mach-msm/include/mach/memory.h
@@ -20,6 +20,22 @@
/* physical offset of RAM */
#define PLAT_PHYS_OFFSET UL(CONFIG_PHYS_OFFSET)
+#if defined(CONFIG_KEXEC_HARDBOOT)
+#if defined(CONFIG_MACH_APQ8064_FLO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88C00000)
+#elif defined(CONFIG_MACH_APQ8064_MAKO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88600000)
+#elif defined(CONFIG_MACH_MSM8974_HAMMERHEAD)
+#define KEXEC_HB_PAGE_ADDR UL(0x10100000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#elif defined(CONFIG_MACH_OPPO_MSM8974)
+#define KEXEC_HB_PAGE_ADDR UL(0x2F600000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#else
+#error "Adress for kexec hardboot page not defined"
+#endif
+#endif
+
#ifndef __ASSEMBLY__
void clean_and_invalidate_caches(unsigned long, unsigned long, unsigned long);
void clean_caches(unsigned long, unsigned long, unsigned long);
diff --git a/arch/arm/mach-msm/oppo/board-8974-oppo.c b/arch/arm/mach-msm/oppo/board-8974-oppo.c
index eb24545..10bbbda 100644
--- a/arch/arm/mach-msm/oppo/board-8974-oppo.c
+++ b/arch/arm/mach-msm/oppo/board-8974-oppo.c
@@ -54,6 +54,13 @@
#include <linux/pcb_version.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/setup.h>
+#include <asm/memory.h>
+#include <linux/memblock.h>
+#define OPPO_PERSISTENT_RAM_SIZE (SZ_1M)
+#endif
+
static struct platform_device *ram_console_dev;
static struct persistent_ram_descriptor msm_prd[] __initdata = {
@@ -72,6 +79,26 @@ static struct persistent_ram msm_pr __initdata = {
void __init msm_8974_reserve(void)
{
+#ifdef CONFIG_KEXEC_HARDBOOT
+ // Reserve space for hardboot page - just after ram_console,
+ // at the start of second memory bank
+ int ret;
+ phys_addr_t start;
+ struct membank* bank;
+
+ if (meminfo.nr_banks < 2) {
+ pr_err("%s: not enough membank\n", __func__);
+ return;
+ }
+
+ bank = &meminfo.bank[1];
+ start = bank->start + SZ_1M + OPPO_PERSISTENT_RAM_SIZE;
+ ret = memblock_remove(start, SZ_1M);
+ if(!ret)
+ pr_info("Hardboot page reserved at 0x%X\n", start);
+ else
+ pr_err("Failed to reserve space for hardboot page at 0x%X!\n", start);
+#endif
persistent_ram_early_init(&msm_pr);
of_scan_flat_dt(dt_scan_for_memory_reserve, NULL);
}
diff --git a/arch/arm/mach-msm/restart.c b/arch/arm/mach-msm/restart.c
index a04ab8d..fe89976 100644
--- a/arch/arm/mach-msm/restart.c
+++ b/arch/arm/mach-msm/restart.c
@@ -38,6 +38,10 @@
#include "timer.h"
#include "wdog_debug.h"
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/kexec.h>
+#endif
+
#define WDT0_RST 0x38
#define WDT0_EN 0x40
#define WDT0_BARK_TIME 0x4C
@@ -373,6 +377,26 @@ static int __init msm_pmic_restart_init(void)
late_initcall(msm_pmic_restart_init);
+#ifdef CONFIG_KEXEC_HARDBOOT
+static void msm_kexec_hardboot_hook(void)
+{
+ set_dload_mode(0);
+
+ // Set PMIC to restart-on-poweroff
+ pm8xxx_reset_pwr_off(1);
+
+ // These are executed on normal reboot, but with kexec-hardboot,
+ // they reboot/panic the system immediately.
+#if 0
+ qpnp_pon_system_pwr_off(PON_POWER_OFF_WARM_RESET);
+
+ /* Needed to bypass debug image on some chips */
+ msm_disable_wdog_debug();
+ halt_spmi_pmic_arbiter();
+#endif
+}
+#endif
+
static int __init msm_restart_init(void)
{
#ifdef CONFIG_MSM_DLOAD_MODE
@@ -392,6 +416,10 @@ static int __init msm_restart_init(void)
if (scm_is_call_available(SCM_SVC_PWR, SCM_IO_DISABLE_PMIC_ARBITER) > 0)
scm_pmic_arbiter_disable_supported = true;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ kexec_hardboot_hook = msm_kexec_hardboot_hook;
+#endif
+
return 0;
}
early_initcall(msm_restart_init);
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index af84a25..a4509ad 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -111,6 +111,10 @@ struct kimage {
#define KEXEC_TYPE_CRASH 1
unsigned int preserve_context : 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ unsigned int hardboot : 1;
+#endif
+
#ifdef ARCH_HAS_KIMAGE_ARCH
struct kimage_arch arch;
#endif
@@ -178,6 +182,11 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ON_CRASH 0x00000001
#define KEXEC_PRESERVE_CONTEXT 0x00000002
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+#define KEXEC_HARDBOOT 0x00000004
+#endif
+
#define KEXEC_ARCH_MASK 0xffff0000
/* These values match the ELF architecture values.
@@ -196,10 +205,14 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ARCH_MIPS ( 8 << 16)
/* List of defined/legal kexec flags */
-#ifndef CONFIG_KEXEC_JUMP
-#define KEXEC_FLAGS KEXEC_ON_CRASH
-#else
+#if defined(CONFIG_KEXEC_JUMP) && defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT | KEXEC_HARDBOOT)
+#elif defined(CONFIG_KEXEC_JUMP)
#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT)
+#elif defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_HARDBOOT)
+#else
+#define KEXEC_FLAGS (KEXEC_ON_CRASH)
#endif
#define VMCOREINFO_BYTES (4096)
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 4e2e472..aef7893 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -1004,6 +1004,10 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
if (flags & KEXEC_PRESERVE_CONTEXT)
image->preserve_context = 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if (flags & KEXEC_HARDBOOT)
+ image->hardboot = 1;
+#endif
result = machine_kexec_prepare(image);
if (result)
goto out;

View file

@ -0,0 +1,706 @@
From 1f7530cfcad8e25223a2a9a9b70cdb0f3c4d1442 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:57 -0400
Subject: [PATCH] Overclocked to 2.8Ghz, underclocked to 268Mhz
---
arch/arm/boot/dts/msm8974-v2.dtsi | 2 +-
arch/arm/boot/dts/msm8974pro-pm8941.dtsi | 8 +-
.../arm/boot/dts/msm8974pro-pma8084-regulator.dtsi | 16 +-
arch/arm/boot/dts/msm8974pro.dtsi | 190 ++++++++++++++++++---
4 files changed, 179 insertions(+), 37 deletions(-)
diff --git a/arch/arm/boot/dts/msm8974-v2.dtsi b/arch/arm/boot/dts/msm8974-v2.dtsi
index 04769bd..8739175 100644
--- a/arch/arm/boot/dts/msm8974-v2.dtsi
+++ b/arch/arm/boot/dts/msm8974-v2.dtsi
@@ -135,7 +135,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,
diff --git a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
index 89939e6..d76e4bd 100644
--- a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
@@ -39,22 +39,22 @@
};
&krait0_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait1_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait2_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait3_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
diff --git a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
index 433d466..428a520 100644
--- a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
@@ -492,9 +492,9 @@
<0xf908a800 0x1000>; /* APCS_ALIAS0_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -508,9 +508,9 @@
<0xf909a800 0x1000>; /* APCS_ALIAS1_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -524,9 +524,9 @@
<0xf90aa800 0x1000>; /* APCS_ALIAS2_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -540,9 +540,9 @@
<0xf90ba800 0x1000>; /* APCS_ALIAS3_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
diff --git a/arch/arm/boot/dts/msm8974pro.dtsi b/arch/arm/boot/dts/msm8974pro.dtsi
index c50b379..ebb5112 100644
--- a/arch/arm/boot/dts/msm8974pro.dtsi
+++ b/arch/arm/boot/dts/msm8974pro.dtsi
@@ -90,6 +90,7 @@
qcom,clock-krait@f9016000 {
qcom,speed1-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -121,6 +122,7 @@
qcom,speed1-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -152,6 +154,7 @@
qcom,speed1-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -183,6 +186,7 @@
qcom,speed1-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -214,6 +218,7 @@
qcom,speed1-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -245,6 +250,7 @@
qcom,speed1-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -276,6 +282,7 @@
qcom,speed1-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -307,6 +314,7 @@
qcom,speed3-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -337,10 +345,14 @@
< 2265600000 1065000 700 >,
< 2342400000 1080000 734 >,
< 2419200000 1095000 769 >,
- < 2457600000 1100000 785 >;
+ < 2457600000 1100000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -371,10 +383,14 @@
< 2265600000 1040000 700 >,
< 2342400000 1055000 734 >,
< 2419200000 1070000 769 >,
- < 2457600000 1075000 785 >;
+ < 2457600000 1075000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -405,10 +421,14 @@
< 2265600000 1015000 700 >,
< 2342400000 1030000 734 >,
< 2419200000 1045000 769 >,
- < 2457600000 1050000 785 >;
+ < 2457600000 1050000 785 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1195000 900 >,
+ < 2880000000 1225000 937 >;
qcom,speed3-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -439,10 +459,14 @@
< 2265600000 990000 700 >,
< 2342400000 1005000 734 >,
< 2419200000 1020000 769 >,
- < 2457600000 1025000 785 >;
+ < 2457600000 1025000 785 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -473,10 +497,14 @@
< 2265600000 965000 700 >,
< 2342400000 980000 734 >,
< 2419200000 995000 769 >,
- < 2457600000 1000000 785 >;
+ < 2457600000 1000000 785 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -507,10 +535,14 @@
< 2265600000 940000 700 >,
< 2342400000 955000 734 >,
< 2419200000 970000 769 >,
- < 2457600000 975000 785 >;
+ < 2457600000 975000 785 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -541,10 +573,14 @@
< 2265600000 915000 700 >,
< 2342400000 930000 734 >,
< 2419200000 945000 769 >,
- < 2457600000 950000 785 >;
+ < 2457600000 950000 785 >,
+ < 2572800000 1010000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed1-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 810000 87 >,
< 422400000 820000 108 >,
@@ -576,6 +612,7 @@
qcom,speed1-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 810000 108 >,
@@ -607,6 +644,7 @@
qcom,speed1-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -638,6 +676,7 @@
qcom,speed1-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -669,6 +708,7 @@
qcom,speed1-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -700,6 +740,7 @@
qcom,speed1-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -731,6 +772,7 @@
qcom,speed1-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -762,6 +804,7 @@
qcom,speed1-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -793,6 +836,7 @@
qcom,speed1-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -824,6 +868,7 @@
qcom,speed1-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -855,6 +900,7 @@
qcom,speed1-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -886,6 +932,7 @@
qcom,speed1-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -917,6 +964,7 @@
qcom,speed1-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -948,6 +996,7 @@
qcom,speed1-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -979,6 +1028,7 @@
qcom,speed1-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1010,6 +1060,7 @@
qcom,speed1-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1041,6 +1092,7 @@
qcom,speed3-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1071,10 +1123,14 @@
< 2265600000 1085000 716 >,
< 2342400000 1100000 751 >,
< 2419200000 1115000 786 >,
- < 2457600000 1120000 802 >;
+ < 2457600000 1120000 802 >,
+ < 2572800000 1175000 827 >,
+ < 2726400000 1225000 900 >,
+ < 2880000000 1265000 937 >;
qcom,speed3-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1105,10 +1161,14 @@
< 2265600000 1075000 716 >,
< 2342400000 1090000 751 >,
< 2419200000 1105000 786 >,
- < 2457600000 1110000 802 >;
+ < 2457600000 1110000 802 >,
+ < 2572800000 1165000 827 >,
+ < 2726400000 1215000 900 >,
+ < 2880000000 1245000 937 >;
qcom,speed3-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1139,10 +1199,14 @@
< 2265600000 1065000 716 >,
< 2342400000 1080000 751 >,
< 2419200000 1095000 786 >,
- < 2457600000 1100000 802 >;
+ < 2457600000 1100000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1173,10 +1237,14 @@
< 2265600000 1055000 716 >,
< 2342400000 1070000 751 >,
< 2419200000 1085000 786 >,
- < 2457600000 1090000 802 >;
+ < 2457600000 1090000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1207,10 +1275,14 @@
< 2265600000 1045000 716 >,
< 2342400000 1060000 751 >,
< 2419200000 1075000 786 >,
- < 2457600000 1080000 802 >;
+ < 2457600000 1080000 802 >,
+ < 2572800000 1135000 827 >,
+ < 2726400000 1165000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1241,10 +1313,14 @@
< 2265600000 1035000 716 >,
< 2342400000 1050000 751 >,
< 2419200000 1065000 786 >,
- < 2457600000 1070000 802 >;
+ < 2457600000 1070000 802 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1185000 937 >;
qcom,speed3-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1275,10 +1351,14 @@
< 2265600000 1025000 716 >,
< 2342400000 1040000 751 >,
< 2419200000 1055000 786 >,
- < 2457600000 1060000 802 >;
+ < 2457600000 1060000 802 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1145000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed3-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1309,10 +1389,14 @@
< 2265600000 1015000 716 >,
< 2342400000 1030000 751 >,
< 2419200000 1045000 786 >,
- < 2457600000 1050000 802 >;
+ < 2457600000 1050000 802 >,
+ < 2572800000 1105000 827 >,
+ < 2726400000 1135000 900 >,
+ < 2880000000 1165000 937 >;
qcom,speed3-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1343,10 +1427,14 @@
< 2265600000 1005000 716 >,
< 2342400000 1020000 751 >,
< 2419200000 1035000 786 >,
- < 2457600000 1040000 802 >;
+ < 2457600000 1040000 802 >,
+ < 2572800000 1095000 827 >,
+ < 2726400000 1125000 900 >,
+ < 2880000000 1155000 937 >;
qcom,speed3-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1377,10 +1465,14 @@
< 2265600000 995000 716 >,
< 2342400000 1010000 751 >,
< 2419200000 1025000 786 >,
- < 2457600000 1030000 802 >;
+ < 2457600000 1030000 802 >,
+ < 2572800000 1085000 827 >,
+ < 2726400000 1115000 900 >,
+ < 2880000000 1145000 937 >;
qcom,speed3-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1411,10 +1503,14 @@
< 2265600000 985000 716 >,
< 2342400000 1000000 751 >,
< 2419200000 1015000 786 >,
- < 2457600000 1020000 802 >;
+ < 2457600000 1020000 802 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1105000 900 >,
+ < 2880000000 1135000 937 >;
qcom,speed3-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1445,10 +1541,14 @@
< 2265600000 975000 716 >,
< 2342400000 990000 751 >,
< 2419200000 1005000 786 >,
- < 2457600000 1010000 802 >;
+ < 2457600000 1010000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1095000 900 >,
+ < 2880000000 1125000 937 >;
qcom,speed3-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1479,10 +1579,14 @@
< 2265600000 965000 716 >,
< 2342400000 980000 751 >,
< 2419200000 995000 786 >,
- < 2457600000 1000000 802 >;
+ < 2457600000 1000000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1085000 900 >,
+ < 2880000000 1115000 937 >;
qcom,speed3-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1513,10 +1617,14 @@
< 2265600000 955000 716 >,
< 2342400000 970000 751 >,
< 2419200000 985000 786 >,
- < 2457600000 990000 802 >;
+ < 2457600000 990000 802 >,
+ < 2572800000 1045000 827 >,
+ < 2726400000 1065000 900 >,
+ < 2880000000 1095000 937 >;
qcom,speed3-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1547,10 +1655,14 @@
< 2265600000 945000 716 >,
< 2342400000 960000 751 >,
< 2419200000 975000 786 >,
- < 2457600000 980000 802 >;
+ < 2457600000 980000 802 >,
+ < 2572800000 1035000 827 >,
+ < 2726400000 1055000 900 >,
+ < 2880000000 1085000 937 >;
qcom,speed3-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1581,9 +1693,39 @@
< 2265600000 935000 716 >,
< 2342400000 950000 751 >,
< 2419200000 965000 786 >,
- < 2457600000 970000 802 >;
+ < 2457600000 970000 802 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1045000 900 >,
+ < 2880000000 1075000 937 >;
};
+ qcom,msm-cpufreq@0 {
+ reg = <0 4>;
+ compatible = "qcom,msm-cpufreq";
+ qcom,cpufreq-table =
+ < 268800 /* 75 MHz */ >,
+ < 300000 /* 75 MHz */ >,
+ < 422400 /* 150 MHz */ >,
+ < 652800 /* 200 MHz */ >,
+ < 729600 /* 307 MHz */ >,
+ < 883200 /* 307 MHz */ >,
+ < 960000 /* 460 MHz */ >,
+ < 1036800 /* 460 MHz */ >,
+ < 1190400 /* 460 MHz */ >,
+ < 1267200 /* 614 MHz */ >,
+ < 1497600 /* 614 MHz */ >,
+ < 1574400 /* 800 MHz */ >,
+ < 1728000 /* 800 MHz */ >,
+ < 1958400 /* 931 MHz */ >,
+ < 2265600 /* 931 MHz */ >,
+ < 2342400 /* 931 MHz */ >,
+ < 2419200 /* 931 MHz */ >,
+ < 2457600 /* 931 MHz */ >,
+ < 2572800 /* 931 MHz */ >,
+ < 2726400 /* 931 MHz */ >,
+ < 2880000 /* 931 MHz */ >;
+ };
+
i2c@f9928000 { /* BLSP-1 QUP-6 */
cell-index = <3>;
compatible = "qcom,i2c-qup";
@@ -1751,7 +1893,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,

View file

@ -0,0 +1,48 @@
From 2f72f326e6ccc660d8a3a5da787212828508f943 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:50:31 -0400
Subject: [PATCH] Update defconfig
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index ac68dba..f6a455b 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -125,8 +125,9 @@ CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
# CONFIG_RD_XZ is not set
# CONFIG_RD_LZO is not set
-# CONFIG_RD_LZ4 is not set
+CONFIG_RD_LZ4=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_CC_OPTIMIZE_MORE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_PANIC_TIMEOUT=5
@@ -190,7 +191,7 @@ CONFIG_SECCOMP_FILTER=y
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+CONFIG_MODULES=y
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
CONFIG_LBDAF=y
@@ -1775,12 +1776,12 @@ CONFIG_SERIAL_MSM_HS=y
#
# Diag Support
#
-# CONFIG_DIAG_CHAR is not set
+CONFIG_DIAG_CHAR=y
#
# DIAG traffic over USB
#
-# CONFIG_DIAG_OVER_USB is not set
+CONFIG_DIAG_OVER_USB=y
#
# SDIO support for DIAG

View file

@ -0,0 +1,577 @@
From 89fdd93c6994b4d6e5cd7acaa207af7ea366bb27 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:21 -0400
Subject: [PATCH] Implement KEXEC
---
arch/arm/Kconfig | 26 ++++++++++
arch/arm/boot/compressed/head.S | 64 ++++++++++++++++++++++++
arch/arm/configs/cyanogenmod_bacon_defconfig | 6 ++-
arch/arm/include/asm/kexec.h | 8 +++
arch/arm/kernel/machine_kexec.c | 58 +++++++++++++++++++--
arch/arm/kernel/relocate_kernel.S | 75 ++++++++++++++++++++++++++++
arch/arm/mach-msm/include/mach/memory.h | 16 ++++++
arch/arm/mach-msm/oppo/board-8974-oppo.c | 27 ++++++++++
arch/arm/mach-msm/restart.c | 28 +++++++++++
include/linux/kexec.h | 19 +++++--
kernel/kexec.c | 4 ++
11 files changed, 322 insertions(+), 9 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 44e86c9..9edd8cf 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -2324,6 +2324,32 @@ config ATAGS_PROC
Should the atags used to boot the kernel be exported in an "atags"
file in procfs. Useful with kexec.
+config KEXEC_HARDBOOT
+ bool "Support hard booting to a kexec kernel"
+ depends on KEXEC
+ help
+ Allows hard booting (i.e., with a full hardware reboot) to a kernel
+ previously loaded in memory by kexec. This works around the problem of
+ soft-booted kernel hangs due to improper device shutdown and/or
+ reinitialization. Support is comprised of two components:
+
+ First, a "hardboot" flag is added to the kexec syscall to force a hard
+ reboot in relocate_new_kernel() (which requires machine-specific assembly
+ code). This also requires the kexec userspace tool to load the kexec'd
+ kernel in memory region left untouched by the bootloader (i.e., not
+ explicitly cleared and not overwritten by the boot kernel). Just prior
+ to reboot, the kexec kernel arguments are stashed in a machine-specific
+ memory page that must also be preserved. Note that this hardboot page
+ need not be reserved during regular kernel execution.
+
+ Second, the zImage decompresor of the boot (bootloader-loaded) kernel is
+ modified to check the hardboot page for fresh kexec arguments, and if
+ present, attempts to jump to the kexec'd kernel preserved in memory.
+
+ Note that hardboot support is only required in the boot kernel and any
+ kernel capable of performing a hardboot kexec. It is _not_ required by a
+ kexec'd kernel.
+
config CRASH_DUMP
bool "Build kdump crash kernel (EXPERIMENTAL)"
depends on EXPERIMENTAL
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index d3892ef..be05aa1 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -11,6 +11,12 @@
#include <linux/linkage.h>
.arch armv7-a
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #include <asm/kexec.h>
+ #include <asm/memory.h>
+#endif
+
/*
* Debugging stuff
*
@@ -136,6 +142,64 @@ start:
1: mov r7, r1 @ save architecture ID
mov r8, r2 @ save atags pointer
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Check hardboot page for a kexec kernel. */
+ ldr r3, =KEXEC_HB_PAGE_ADDR
+ ldr r0, [r3]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ teq r0, r1
+ bne not_booting_other
+
+ /* Clear hardboot page magic to avoid boot loop. */
+ mov r0, #0
+ str r0, [r3]
+
+ /*
+ * Copy dtb from location up high in memory to default location.
+ * Kernel freezes if this is not done.
+ */
+ ldr r1, [r3, #12] @ kexec_boot_atags
+ ldr r2, [r3, #16] @ kexec_boot_atags_len
+ mov r5, #0 @ iterator
+catags_cpy:
+ ldr r0, [r1, r5] @ from kexec_boot_atags
+ str r0, [r8, r5] @ to atags_pointer
+ add r5, r5, #4
+ cmp r5, r2
+ blo catags_cpy
+
+#ifdef KEXEC_HB_KERNEL_LOC
+ /*
+ * Copy kernel from location up high in memory to location in first 128MB.
+ * Bootloader on hammerhead erases first 128MB of ram on reboot, so it can't
+ * be in there before reboot, but decompressing in location above 128MB takes
+ * a long time. This memcpy is much quicker, for some reason.
+ */
+ ldr r2, [r3, #4] @ kexec_start_address
+ ldr r4, [r3, #20] @ kexec_kernel_len
+ ldr r6, =KEXEC_HB_KERNEL_LOC @ target
+ mov r5, #0 @ iterator
+kernel_cpy:
+ ldr r0, [r2, r5] @ from kexec_start_address
+ str r0, [r6, r5] @ to KEXEC_HB_KERNEL_LOC
+ add r5, r5, #4
+ cmp r5, r4
+ blo kernel_cpy
+#else
+ ldr r6, [r3, #4] @ kexec_start_address
+#endif
+
+ /* set registers and boot kexecd' kernel */
+ mov r0, #0
+ ldr r1, [r3, #8] @ kexec_mach_type
+ mov r2, r8 @ atags pointer
+ mov pc, r6
+
+ .ltorg
+
+not_booting_other:
+#endif
+
#ifndef __ARM_ARCH_2__
/*
* Booting from Angel - need to enter SVC mode and disable
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 1738c22..73f8fe7 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -695,7 +695,9 @@ CONFIG_ZBOOT_ROM_BSS=0
# CONFIG_ARM_APPENDED_DTB is not set
CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
+CONFIG_KEXEC_HARDBOOT=y
+CONFIG_ATAGS_PROC=n
# CONFIG_CRASH_DUMP is not set
# CONFIG_AUTO_ZRELADDR is not set
@@ -1300,7 +1302,7 @@ CONFIG_OF=y
#
# Device Tree and Open Firmware support
#
-# CONFIG_PROC_DEVICETREE is not set
+CONFIG_PROC_DEVICETREE=y
# CONFIG_OF_SELFTEST is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
diff --git a/arch/arm/include/asm/kexec.h b/arch/arm/include/asm/kexec.h
index c2b9b4b..564c55b 100644
--- a/arch/arm/include/asm/kexec.h
+++ b/arch/arm/include/asm/kexec.h
@@ -17,6 +17,10 @@
#define KEXEC_ARM_ATAGS_OFFSET 0x1000
#define KEXEC_ARM_ZIMAGE_OFFSET 0x8000
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #define KEXEC_HB_PAGE_MAGIC 0x4a5db007
+#endif
+
#ifndef __ASSEMBLY__
/**
@@ -53,6 +57,10 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
/* Function pointer to optional machine-specific reinitialization */
extern void (*kexec_reinit)(void);
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern void (*kexec_hardboot_hook)(void);
+#endif
+
#endif /* __ASSEMBLY__ */
#endif /* CONFIG_KEXEC */
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c
index 357b651..29cdd2f 100644
--- a/arch/arm/kernel/machine_kexec.c
+++ b/arch/arm/kernel/machine_kexec.c
@@ -14,6 +14,9 @@
#include <asm/cacheflush.h>
#include <asm/mach-types.h>
#include <asm/system_misc.h>
+#include <linux/memblock.h>
+#include <linux/of_fdt.h>
+#include <asm/mmu_writeable.h>
extern const unsigned char relocate_new_kernel[];
extern const unsigned int relocate_new_kernel_size;
@@ -22,6 +25,12 @@ extern unsigned long kexec_start_address;
extern unsigned long kexec_indirection_page;
extern unsigned long kexec_mach_type;
extern unsigned long kexec_boot_atags;
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern unsigned long kexec_hardboot;
+extern unsigned long kexec_boot_atags_len;
+extern unsigned long kexec_kernel_len;
+void (*kexec_hardboot_hook)(void);
+#endif
static atomic_t waiting_for_crash_ipi;
@@ -32,6 +41,37 @@ static atomic_t waiting_for_crash_ipi;
int machine_kexec_prepare(struct kimage *image)
{
+ struct kexec_segment *current_segment;
+ __be32 header;
+ int i, err;
+
+ /* No segment at default ATAGs address. try to locate
+ * a dtb using magic */
+ for (i = 0; i < image->nr_segments; i++) {
+ current_segment = &image->segment[i];
+
+ err = memblock_is_region_memory(current_segment->mem,
+ current_segment->memsz);
+ if (!err)
+ return - EINVAL;
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if(current_segment->mem == image->start)
+ mem_text_write_kernel_word(&kexec_kernel_len, current_segment->memsz);
+#endif
+
+ err = get_user(header, (__be32*)current_segment->buf);
+ if (err)
+ return err;
+
+ if (be32_to_cpu(header) == OF_DT_HEADER)
+ {
+ mem_text_write_kernel_word(&kexec_boot_atags, current_segment->mem);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_boot_atags_len, current_segment->memsz);
+#endif
+ }
+ }
return 0;
}
@@ -123,10 +163,14 @@ void machine_kexec(struct kimage *image)
reboot_code_buffer = page_address(image->control_code_page);
/* Prepare parameters for reboot_code_buffer*/
- kexec_start_address = image->start;
- kexec_indirection_page = page_list;
- kexec_mach_type = machine_arch_type;
- kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
+ mem_text_write_kernel_word(&kexec_start_address, image->start);
+ mem_text_write_kernel_word(&kexec_indirection_page, page_list);
+ mem_text_write_kernel_word(&kexec_mach_type, machine_arch_type);
+ if (!kexec_boot_atags)
+ mem_text_write_kernel_word(&kexec_boot_atags, image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_hardboot, image->hardboot);
+#endif
/* copy our kernel relocation code to the control code page */
memcpy(reboot_code_buffer,
@@ -140,6 +184,12 @@ void machine_kexec(struct kimage *image)
if (kexec_reinit)
kexec_reinit();
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Run any final machine-specific shutdown code. */
+ if (image->hardboot && kexec_hardboot_hook)
+ kexec_hardboot_hook();
+#endif
+
soft_restart(reboot_code_buffer_phys);
}
diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S
index d0cdedf..0e45ffc 100644
--- a/arch/arm/kernel/relocate_kernel.S
+++ b/arch/arm/kernel/relocate_kernel.S
@@ -4,6 +4,15 @@
#include <asm/kexec.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/memory.h>
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ #include <mach/iomap.h>
+#elif defined(CONFIG_ARCH_APQ8064) || defined(CONFIG_ARCH_MSM8974)
+ #include <mach/msm_iomap.h>
+#endif
+#endif
+
.globl relocate_new_kernel
relocate_new_kernel:
@@ -52,6 +61,12 @@ relocate_new_kernel:
b 0b
2:
+#ifdef CONFIG_KEXEC_HARDBOOT
+ ldr r0, kexec_hardboot
+ teq r0, #0
+ bne hardboot
+#endif
+
/* Jump to relocated kernel */
mov lr,r1
mov r0,#0
@@ -60,6 +75,52 @@ relocate_new_kernel:
ARM( mov pc, lr )
THUMB( bx lr )
+#ifdef CONFIG_KEXEC_HARDBOOT
+hardboot:
+ /* Stash boot arguments in hardboot page:
+ * 0: KEXEC_HB_PAGE_MAGIC
+ * 4: kexec_start_address
+ * 8: kexec_mach_type
+ * 12: kexec_boot_atags
+ * 16: kexec_boot_atags_len
+ * 20: kexec_kernel_len */
+ ldr r0, =KEXEC_HB_PAGE_ADDR
+ str r1, [r0, #4]
+ ldr r1, kexec_mach_type
+ str r1, [r0, #8]
+ ldr r1, kexec_boot_atags
+ str r1, [r0, #12]
+ ldr r1, kexec_boot_atags_len
+ str r1, [r0, #16]
+ ldr r1, kexec_kernel_len
+ str r1, [r0, #20]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ str r1, [r0]
+
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ ldr r0, =TEGRA_PMC_BASE
+ ldr r1, [r0]
+ orr r1, r1, #0x10
+ str r1, [r0]
+loop: b loop
+#elif defined(CONFIG_ARCH_APQ8064)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =APQ8064_TLMM_PHYS
+ mov r1, #0
+ str r1, [r0, #0x820] @ PSHOLD_CTL_SU
+loop: b loop
+#elif defined(CONFIG_ARCH_MSM8974)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =MSM8974_MPM2_PSHOLD_PHYS
+ mov r1, #0
+ str r1, [r0, #0]
+loop: b loop
+#else
+#error "No reboot method defined for hardboot."
+#endif
+
+ .ltorg
+#endif
.align
.globl kexec_start_address
@@ -79,6 +140,20 @@ kexec_mach_type:
kexec_boot_atags:
.long 0x0
+#ifdef CONFIG_KEXEC_HARDBOOT
+ .globl kexec_boot_atags_len
+kexec_boot_atags_len:
+ .long 0x0
+
+ .globl kexec_kernel_len
+kexec_kernel_len:
+ .long 0x0
+
+ .globl kexec_hardboot
+kexec_hardboot:
+ .long 0x0
+#endif
+
relocate_new_kernel_end:
.globl relocate_new_kernel_size
diff --git a/arch/arm/mach-msm/include/mach/memory.h b/arch/arm/mach-msm/include/mach/memory.h
index 9225230..1c87b96 100644
--- a/arch/arm/mach-msm/include/mach/memory.h
+++ b/arch/arm/mach-msm/include/mach/memory.h
@@ -20,6 +20,22 @@
/* physical offset of RAM */
#define PLAT_PHYS_OFFSET UL(CONFIG_PHYS_OFFSET)
+#if defined(CONFIG_KEXEC_HARDBOOT)
+#if defined(CONFIG_MACH_APQ8064_FLO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88C00000)
+#elif defined(CONFIG_MACH_APQ8064_MAKO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88600000)
+#elif defined(CONFIG_MACH_MSM8974_HAMMERHEAD)
+#define KEXEC_HB_PAGE_ADDR UL(0x10100000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#elif defined(CONFIG_MACH_OPPO_MSM8974)
+#define KEXEC_HB_PAGE_ADDR UL(0x2F600000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#else
+#error "Adress for kexec hardboot page not defined"
+#endif
+#endif
+
#ifndef __ASSEMBLY__
void clean_and_invalidate_caches(unsigned long, unsigned long, unsigned long);
void clean_caches(unsigned long, unsigned long, unsigned long);
diff --git a/arch/arm/mach-msm/oppo/board-8974-oppo.c b/arch/arm/mach-msm/oppo/board-8974-oppo.c
index eb24545..10bbbda 100644
--- a/arch/arm/mach-msm/oppo/board-8974-oppo.c
+++ b/arch/arm/mach-msm/oppo/board-8974-oppo.c
@@ -54,6 +54,13 @@
#include <linux/pcb_version.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/setup.h>
+#include <asm/memory.h>
+#include <linux/memblock.h>
+#define OPPO_PERSISTENT_RAM_SIZE (SZ_1M)
+#endif
+
static struct platform_device *ram_console_dev;
static struct persistent_ram_descriptor msm_prd[] __initdata = {
@@ -72,6 +79,26 @@ static struct persistent_ram msm_pr __initdata = {
void __init msm_8974_reserve(void)
{
+#ifdef CONFIG_KEXEC_HARDBOOT
+ // Reserve space for hardboot page - just after ram_console,
+ // at the start of second memory bank
+ int ret;
+ phys_addr_t start;
+ struct membank* bank;
+
+ if (meminfo.nr_banks < 2) {
+ pr_err("%s: not enough membank\n", __func__);
+ return;
+ }
+
+ bank = &meminfo.bank[1];
+ start = bank->start + SZ_1M + OPPO_PERSISTENT_RAM_SIZE;
+ ret = memblock_remove(start, SZ_1M);
+ if(!ret)
+ pr_info("Hardboot page reserved at 0x%X\n", start);
+ else
+ pr_err("Failed to reserve space for hardboot page at 0x%X!\n", start);
+#endif
persistent_ram_early_init(&msm_pr);
of_scan_flat_dt(dt_scan_for_memory_reserve, NULL);
}
diff --git a/arch/arm/mach-msm/restart.c b/arch/arm/mach-msm/restart.c
index a04ab8d..fe89976 100644
--- a/arch/arm/mach-msm/restart.c
+++ b/arch/arm/mach-msm/restart.c
@@ -38,6 +38,10 @@
#include "timer.h"
#include "wdog_debug.h"
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/kexec.h>
+#endif
+
#define WDT0_RST 0x38
#define WDT0_EN 0x40
#define WDT0_BARK_TIME 0x4C
@@ -373,6 +377,26 @@ static int __init msm_pmic_restart_init(void)
late_initcall(msm_pmic_restart_init);
+#ifdef CONFIG_KEXEC_HARDBOOT
+static void msm_kexec_hardboot_hook(void)
+{
+ set_dload_mode(0);
+
+ // Set PMIC to restart-on-poweroff
+ pm8xxx_reset_pwr_off(1);
+
+ // These are executed on normal reboot, but with kexec-hardboot,
+ // they reboot/panic the system immediately.
+#if 0
+ qpnp_pon_system_pwr_off(PON_POWER_OFF_WARM_RESET);
+
+ /* Needed to bypass debug image on some chips */
+ msm_disable_wdog_debug();
+ halt_spmi_pmic_arbiter();
+#endif
+}
+#endif
+
static int __init msm_restart_init(void)
{
#ifdef CONFIG_MSM_DLOAD_MODE
@@ -392,6 +416,10 @@ static int __init msm_restart_init(void)
if (scm_is_call_available(SCM_SVC_PWR, SCM_IO_DISABLE_PMIC_ARBITER) > 0)
scm_pmic_arbiter_disable_supported = true;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ kexec_hardboot_hook = msm_kexec_hardboot_hook;
+#endif
+
return 0;
}
early_initcall(msm_restart_init);
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index af84a25..a4509ad 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -111,6 +111,10 @@ struct kimage {
#define KEXEC_TYPE_CRASH 1
unsigned int preserve_context : 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ unsigned int hardboot : 1;
+#endif
+
#ifdef ARCH_HAS_KIMAGE_ARCH
struct kimage_arch arch;
#endif
@@ -178,6 +182,11 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ON_CRASH 0x00000001
#define KEXEC_PRESERVE_CONTEXT 0x00000002
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+#define KEXEC_HARDBOOT 0x00000004
+#endif
+
#define KEXEC_ARCH_MASK 0xffff0000
/* These values match the ELF architecture values.
@@ -196,10 +205,14 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ARCH_MIPS ( 8 << 16)
/* List of defined/legal kexec flags */
-#ifndef CONFIG_KEXEC_JUMP
-#define KEXEC_FLAGS KEXEC_ON_CRASH
-#else
+#if defined(CONFIG_KEXEC_JUMP) && defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT | KEXEC_HARDBOOT)
+#elif defined(CONFIG_KEXEC_JUMP)
#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT)
+#elif defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_HARDBOOT)
+#else
+#define KEXEC_FLAGS (KEXEC_ON_CRASH)
#endif
#define VMCOREINFO_BYTES (4096)
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 4e2e472..aef7893 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -1004,6 +1004,10 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
if (flags & KEXEC_PRESERVE_CONTEXT)
image->preserve_context = 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if (flags & KEXEC_HARDBOOT)
+ image->hardboot = 1;
+#endif
result = machine_kexec_prepare(image);
if (result)
goto out;

View file

@ -0,0 +1,706 @@
From 562e934629b73d35f6a790681ddb56db7683313e Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:57 -0400
Subject: [PATCH] Overclocked to 2.8Ghz, underclocked to 268Mhz
---
arch/arm/boot/dts/msm8974-v2.dtsi | 2 +-
arch/arm/boot/dts/msm8974pro-pm8941.dtsi | 8 +-
.../arm/boot/dts/msm8974pro-pma8084-regulator.dtsi | 16 +-
arch/arm/boot/dts/msm8974pro.dtsi | 190 ++++++++++++++++++---
4 files changed, 179 insertions(+), 37 deletions(-)
diff --git a/arch/arm/boot/dts/msm8974-v2.dtsi b/arch/arm/boot/dts/msm8974-v2.dtsi
index 04769bd..8739175 100644
--- a/arch/arm/boot/dts/msm8974-v2.dtsi
+++ b/arch/arm/boot/dts/msm8974-v2.dtsi
@@ -135,7 +135,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,
diff --git a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
index 89939e6..d76e4bd 100644
--- a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
@@ -39,22 +39,22 @@
};
&krait0_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait1_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait2_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait3_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
diff --git a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
index 433d466..428a520 100644
--- a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
@@ -492,9 +492,9 @@
<0xf908a800 0x1000>; /* APCS_ALIAS0_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -508,9 +508,9 @@
<0xf909a800 0x1000>; /* APCS_ALIAS1_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -524,9 +524,9 @@
<0xf90aa800 0x1000>; /* APCS_ALIAS2_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -540,9 +540,9 @@
<0xf90ba800 0x1000>; /* APCS_ALIAS3_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
diff --git a/arch/arm/boot/dts/msm8974pro.dtsi b/arch/arm/boot/dts/msm8974pro.dtsi
index c50b379..ebb5112 100644
--- a/arch/arm/boot/dts/msm8974pro.dtsi
+++ b/arch/arm/boot/dts/msm8974pro.dtsi
@@ -90,6 +90,7 @@
qcom,clock-krait@f9016000 {
qcom,speed1-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -121,6 +122,7 @@
qcom,speed1-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -152,6 +154,7 @@
qcom,speed1-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -183,6 +186,7 @@
qcom,speed1-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -214,6 +218,7 @@
qcom,speed1-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -245,6 +250,7 @@
qcom,speed1-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -276,6 +282,7 @@
qcom,speed1-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -307,6 +314,7 @@
qcom,speed3-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -337,10 +345,14 @@
< 2265600000 1065000 700 >,
< 2342400000 1080000 734 >,
< 2419200000 1095000 769 >,
- < 2457600000 1100000 785 >;
+ < 2457600000 1100000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -371,10 +383,14 @@
< 2265600000 1040000 700 >,
< 2342400000 1055000 734 >,
< 2419200000 1070000 769 >,
- < 2457600000 1075000 785 >;
+ < 2457600000 1075000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -405,10 +421,14 @@
< 2265600000 1015000 700 >,
< 2342400000 1030000 734 >,
< 2419200000 1045000 769 >,
- < 2457600000 1050000 785 >;
+ < 2457600000 1050000 785 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1195000 900 >,
+ < 2880000000 1225000 937 >;
qcom,speed3-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -439,10 +459,14 @@
< 2265600000 990000 700 >,
< 2342400000 1005000 734 >,
< 2419200000 1020000 769 >,
- < 2457600000 1025000 785 >;
+ < 2457600000 1025000 785 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -473,10 +497,14 @@
< 2265600000 965000 700 >,
< 2342400000 980000 734 >,
< 2419200000 995000 769 >,
- < 2457600000 1000000 785 >;
+ < 2457600000 1000000 785 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -507,10 +535,14 @@
< 2265600000 940000 700 >,
< 2342400000 955000 734 >,
< 2419200000 970000 769 >,
- < 2457600000 975000 785 >;
+ < 2457600000 975000 785 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -541,10 +573,14 @@
< 2265600000 915000 700 >,
< 2342400000 930000 734 >,
< 2419200000 945000 769 >,
- < 2457600000 950000 785 >;
+ < 2457600000 950000 785 >,
+ < 2572800000 1010000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed1-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 810000 87 >,
< 422400000 820000 108 >,
@@ -576,6 +612,7 @@
qcom,speed1-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 810000 108 >,
@@ -607,6 +644,7 @@
qcom,speed1-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -638,6 +676,7 @@
qcom,speed1-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -669,6 +708,7 @@
qcom,speed1-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -700,6 +740,7 @@
qcom,speed1-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -731,6 +772,7 @@
qcom,speed1-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -762,6 +804,7 @@
qcom,speed1-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -793,6 +836,7 @@
qcom,speed1-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -824,6 +868,7 @@
qcom,speed1-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -855,6 +900,7 @@
qcom,speed1-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -886,6 +932,7 @@
qcom,speed1-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -917,6 +964,7 @@
qcom,speed1-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -948,6 +996,7 @@
qcom,speed1-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -979,6 +1028,7 @@
qcom,speed1-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1010,6 +1060,7 @@
qcom,speed1-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1041,6 +1092,7 @@
qcom,speed3-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1071,10 +1123,14 @@
< 2265600000 1085000 716 >,
< 2342400000 1100000 751 >,
< 2419200000 1115000 786 >,
- < 2457600000 1120000 802 >;
+ < 2457600000 1120000 802 >,
+ < 2572800000 1175000 827 >,
+ < 2726400000 1225000 900 >,
+ < 2880000000 1265000 937 >;
qcom,speed3-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1105,10 +1161,14 @@
< 2265600000 1075000 716 >,
< 2342400000 1090000 751 >,
< 2419200000 1105000 786 >,
- < 2457600000 1110000 802 >;
+ < 2457600000 1110000 802 >,
+ < 2572800000 1165000 827 >,
+ < 2726400000 1215000 900 >,
+ < 2880000000 1245000 937 >;
qcom,speed3-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1139,10 +1199,14 @@
< 2265600000 1065000 716 >,
< 2342400000 1080000 751 >,
< 2419200000 1095000 786 >,
- < 2457600000 1100000 802 >;
+ < 2457600000 1100000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1173,10 +1237,14 @@
< 2265600000 1055000 716 >,
< 2342400000 1070000 751 >,
< 2419200000 1085000 786 >,
- < 2457600000 1090000 802 >;
+ < 2457600000 1090000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1207,10 +1275,14 @@
< 2265600000 1045000 716 >,
< 2342400000 1060000 751 >,
< 2419200000 1075000 786 >,
- < 2457600000 1080000 802 >;
+ < 2457600000 1080000 802 >,
+ < 2572800000 1135000 827 >,
+ < 2726400000 1165000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1241,10 +1313,14 @@
< 2265600000 1035000 716 >,
< 2342400000 1050000 751 >,
< 2419200000 1065000 786 >,
- < 2457600000 1070000 802 >;
+ < 2457600000 1070000 802 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1185000 937 >;
qcom,speed3-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1275,10 +1351,14 @@
< 2265600000 1025000 716 >,
< 2342400000 1040000 751 >,
< 2419200000 1055000 786 >,
- < 2457600000 1060000 802 >;
+ < 2457600000 1060000 802 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1145000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed3-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1309,10 +1389,14 @@
< 2265600000 1015000 716 >,
< 2342400000 1030000 751 >,
< 2419200000 1045000 786 >,
- < 2457600000 1050000 802 >;
+ < 2457600000 1050000 802 >,
+ < 2572800000 1105000 827 >,
+ < 2726400000 1135000 900 >,
+ < 2880000000 1165000 937 >;
qcom,speed3-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1343,10 +1427,14 @@
< 2265600000 1005000 716 >,
< 2342400000 1020000 751 >,
< 2419200000 1035000 786 >,
- < 2457600000 1040000 802 >;
+ < 2457600000 1040000 802 >,
+ < 2572800000 1095000 827 >,
+ < 2726400000 1125000 900 >,
+ < 2880000000 1155000 937 >;
qcom,speed3-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1377,10 +1465,14 @@
< 2265600000 995000 716 >,
< 2342400000 1010000 751 >,
< 2419200000 1025000 786 >,
- < 2457600000 1030000 802 >;
+ < 2457600000 1030000 802 >,
+ < 2572800000 1085000 827 >,
+ < 2726400000 1115000 900 >,
+ < 2880000000 1145000 937 >;
qcom,speed3-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1411,10 +1503,14 @@
< 2265600000 985000 716 >,
< 2342400000 1000000 751 >,
< 2419200000 1015000 786 >,
- < 2457600000 1020000 802 >;
+ < 2457600000 1020000 802 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1105000 900 >,
+ < 2880000000 1135000 937 >;
qcom,speed3-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1445,10 +1541,14 @@
< 2265600000 975000 716 >,
< 2342400000 990000 751 >,
< 2419200000 1005000 786 >,
- < 2457600000 1010000 802 >;
+ < 2457600000 1010000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1095000 900 >,
+ < 2880000000 1125000 937 >;
qcom,speed3-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1479,10 +1579,14 @@
< 2265600000 965000 716 >,
< 2342400000 980000 751 >,
< 2419200000 995000 786 >,
- < 2457600000 1000000 802 >;
+ < 2457600000 1000000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1085000 900 >,
+ < 2880000000 1115000 937 >;
qcom,speed3-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1513,10 +1617,14 @@
< 2265600000 955000 716 >,
< 2342400000 970000 751 >,
< 2419200000 985000 786 >,
- < 2457600000 990000 802 >;
+ < 2457600000 990000 802 >,
+ < 2572800000 1045000 827 >,
+ < 2726400000 1065000 900 >,
+ < 2880000000 1095000 937 >;
qcom,speed3-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1547,10 +1655,14 @@
< 2265600000 945000 716 >,
< 2342400000 960000 751 >,
< 2419200000 975000 786 >,
- < 2457600000 980000 802 >;
+ < 2457600000 980000 802 >,
+ < 2572800000 1035000 827 >,
+ < 2726400000 1055000 900 >,
+ < 2880000000 1085000 937 >;
qcom,speed3-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1581,9 +1693,39 @@
< 2265600000 935000 716 >,
< 2342400000 950000 751 >,
< 2419200000 965000 786 >,
- < 2457600000 970000 802 >;
+ < 2457600000 970000 802 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1045000 900 >,
+ < 2880000000 1075000 937 >;
};
+ qcom,msm-cpufreq@0 {
+ reg = <0 4>;
+ compatible = "qcom,msm-cpufreq";
+ qcom,cpufreq-table =
+ < 268800 /* 75 MHz */ >,
+ < 300000 /* 75 MHz */ >,
+ < 422400 /* 150 MHz */ >,
+ < 652800 /* 200 MHz */ >,
+ < 729600 /* 307 MHz */ >,
+ < 883200 /* 307 MHz */ >,
+ < 960000 /* 460 MHz */ >,
+ < 1036800 /* 460 MHz */ >,
+ < 1190400 /* 460 MHz */ >,
+ < 1267200 /* 614 MHz */ >,
+ < 1497600 /* 614 MHz */ >,
+ < 1574400 /* 800 MHz */ >,
+ < 1728000 /* 800 MHz */ >,
+ < 1958400 /* 931 MHz */ >,
+ < 2265600 /* 931 MHz */ >,
+ < 2342400 /* 931 MHz */ >,
+ < 2419200 /* 931 MHz */ >,
+ < 2457600 /* 931 MHz */ >,
+ < 2572800 /* 931 MHz */ >,
+ < 2726400 /* 931 MHz */ >,
+ < 2880000 /* 931 MHz */ >;
+ };
+
i2c@f9928000 { /* BLSP-1 QUP-6 */
cell-index = <3>;
compatible = "qcom,i2c-qup";
@@ -1751,7 +1893,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,

View file

@ -0,0 +1,33 @@
From 5bc51b0399c7a740537be766423f24936eac7788 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:50:31 -0400
Subject: [PATCH] Update defconfig
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 73f8fe7..f8ab8c2 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -123,8 +123,9 @@ CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
# CONFIG_RD_XZ is not set
# CONFIG_RD_LZO is not set
-# CONFIG_RD_LZ4 is not set
+CONFIG_RD_LZ4=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_CC_OPTIMIZE_MORE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_PANIC_TIMEOUT=5
@@ -188,7 +189,7 @@ CONFIG_SECCOMP_FILTER=y
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+CONFIG_MODULES=y
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
CONFIG_LBDAF=y

View file

@ -0,0 +1,244 @@
From 9cb94dbd3fb2ea3d335865c3a600af96f4c0611d Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:52:02 -0400
Subject: [PATCH] Implement Quick Wakeup
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 2 +
include/linux/quickwakeup.h | 46 ++++++++++++
kernel/power/Kconfig | 20 ++++--
kernel/power/Makefile | 1 +
kernel/power/quickwakeup.c | 104 +++++++++++++++++++++++++++
5 files changed, 167 insertions(+), 6 deletions(-)
create mode 100644 include/linux/quickwakeup.h
create mode 100644 kernel/power/quickwakeup.c
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index f8ab8c2..6698a71 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -3642,3 +3642,5 @@ CONFIG_NLATTR=y
# CONFIG_CORDIC is not set
CONFIG_QMI_ENCDEC=y
# CONFIG_QMI_ENCDEC_DEBUG is not set
+
+CONFIG_QUICK_WAKEUP=y
diff --git a/include/linux/quickwakeup.h b/include/linux/quickwakeup.h
new file mode 100644
index 0000000..000effa
--- /dev/null
+++ b/include/linux/quickwakeup.h
@@ -0,0 +1,46 @@
+/* include/linux/quickwakeup.h
+ *
+ * Copyright (C) 2014 Motorola Mobility LLC.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _QUICKWAKEUP_H_
+#define _QUICKWAKEUP_H_
+
+#ifdef __KERNEL__
+
+struct quickwakeup_ops {
+ struct list_head list;
+ char *name;
+ int (*qw_execute)(void *data);
+ int (*qw_check)(void *data);
+ int execute;
+ void *data; /* arbitrary data passed back to user */
+};
+
+#ifdef CONFIG_QUICK_WAKEUP
+
+int quickwakeup_register(struct quickwakeup_ops *ops);
+void quickwakeup_unregister(struct quickwakeup_ops *ops);
+bool quickwakeup_suspend_again(void);
+
+#else
+
+static inline int quickwakeup_register(struct quickwakeup_ops *ops) { return 0; };
+static inline void quickwakeup_unregister(struct quickwakeup_ops *ops) {};
+static inline bool quickwakeup_suspend_again(void) { return 0; };
+
+#endif /* CONFIG_QUICK_WAKEUP */
+
+#endif /* __KERNEL__ */
+
+#endif /* _QUICKWAKEUP_H_ */
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
index e536c8d..8006962 100644
--- a/kernel/power/Kconfig
+++ b/kernel/power/Kconfig
@@ -83,20 +83,20 @@ config PM_STD_PARTITION
default ""
---help---
The default resume partition is the partition that the suspend-
- to-disk implementation will look for a suspended disk image.
+ to-disk implementation will look for a suspended disk image.
- The partition specified here will be different for almost every user.
+ The partition specified here will be different for almost every user.
It should be a valid swap partition (at least for now) that is turned
- on before suspending.
+ on before suspending.
The partition specified can be overridden by specifying:
- resume=/dev/<other device>
+ resume=/dev/<other device>
- which will set the resume partition to the device specified.
+ which will set the resume partition to the device specified.
Note there is currently not a way to specify which device to save the
- suspended image to. It will simply pick the first available swap
+ suspended image to. It will simply pick the first available swap
device.
config PM_SLEEP
@@ -285,6 +285,14 @@ config SUSPEND_TIME
Prints the time spent in suspend in the kernel log, and
keeps statistics on the time spent in suspend in
/sys/kernel/debug/suspend_time
+
+config QUICK_WAKEUP
+ bool "Quick wakeup"
+ depends on SUSPEND
+ default n
+ ---help---
+ Allow kernel driver to do periodic jobs without resuming the full system
+ This option can increase battery life on android powered smartphone.
config DEDUCE_WAKEUP_REASONS
bool
diff --git a/kernel/power/Makefile b/kernel/power/Makefile
index 74c713b..e5bebbc 100644
--- a/kernel/power/Makefile
+++ b/kernel/power/Makefile
@@ -14,5 +14,6 @@ obj-$(CONFIG_PM_WAKELOCKS) += wakelock.o
obj-$(CONFIG_SUSPEND_TIME) += suspend_time.o
obj-$(CONFIG_MAGIC_SYSRQ) += poweroff.o
+obj-$(CONFIG_QUICK_WAKEUP) += quickwakeup.o
obj-$(CONFIG_SUSPEND) += wakeup_reason.o
diff --git a/kernel/power/quickwakeup.c b/kernel/power/quickwakeup.c
new file mode 100644
index 0000000..46f9dda
--- /dev/null
+++ b/kernel/power/quickwakeup.c
@@ -0,0 +1,104 @@
+/* kernel/power/quickwakeup.c
+ *
+ * Copyright (C) 2014 Motorola Mobility LLC.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/mutex.h>
+#include <linux/quickwakeup.h>
+
+static LIST_HEAD(qw_head);
+static DEFINE_MUTEX(list_lock);
+
+int quickwakeup_register(struct quickwakeup_ops *ops)
+{
+ mutex_lock(&list_lock);
+ list_add(&ops->list, &qw_head);
+ mutex_unlock(&list_lock);
+
+ return 0;
+}
+
+void quickwakeup_unregister(struct quickwakeup_ops *ops)
+{
+ mutex_lock(&list_lock);
+ list_del(&ops->list);
+ mutex_unlock(&list_lock);
+}
+
+static int quickwakeup_check(void)
+{
+ int check = 0;
+ struct quickwakeup_ops *index;
+
+ mutex_lock(&list_lock);
+
+ list_for_each_entry(index, &qw_head, list) {
+ int ret = index->qw_check(index->data);
+ index->execute = ret;
+ check |= ret;
+ pr_debug("%s: %s votes for %s\n", __func__, index->name,
+ ret ? "execute" : "dont care");
+ }
+
+ mutex_unlock(&list_lock);
+
+ return check;
+}
+
+/* return 1 => suspend again
+ return 0 => continue wakeup
+ */
+static int quickwakeup_execute(void)
+{
+ int suspend_again = 0;
+ int final_vote = 1;
+ struct quickwakeup_ops *index;
+
+ mutex_lock(&list_lock);
+
+ list_for_each_entry(index, &qw_head, list) {
+ if (index->execute) {
+ int ret = index->qw_execute(index->data);
+ index->execute = 0;
+ final_vote &= ret;
+ suspend_again = final_vote;
+ pr_debug("%s: %s votes for %s\n", __func__, index->name,
+ ret ? "suspend again" : "wakeup");
+ }
+ }
+
+ mutex_unlock(&list_lock);
+
+ pr_debug("%s: %s\n", __func__,
+ suspend_again ? "suspend again" : "wakeup");
+
+ return suspend_again;
+}
+
+/* return 1 => suspend again
+ return 0 => continue wakeup
+ */
+bool quickwakeup_suspend_again(void)
+{
+ int ret = 0;
+
+ if (quickwakeup_check())
+ ret = quickwakeup_execute();
+
+ pr_debug("%s- returning %d %s\n", __func__, ret,
+ ret ? "suspend again" : "wakeup");
+
+ return ret;
+}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,22 @@
From 9ef0d3d6018c1c20ed54bd92e2d6c61e7105f89f Mon Sep 17 00:00:00 2001
From: YoshiShaPow <yoshipga@gmail.com>
Date: Sat, 20 Dec 2014 12:05:19 -0800
Subject: [PATCH] gcc5: arm: enable cortex_a15 optimization
---
arch/arm/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index a9163ff..066853f 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -58,7 +58,7 @@ comma = ,
# Note that GCC does not numerically define an architecture version
# macro, but instead defines a whole series of macros which makes
# testing for a specific architecture or later rather impossible.
-arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
+arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a -mtune=cortex-a15 -Wa$(comma)-march=armv7-a)
arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
# Only override the compiler option if ARMv6. The ARMv6K extensions are
# always available in ARMv7

View file

@ -0,0 +1,22 @@
From b35817c3d0d629b0faa549837eec2a3fdd9d1c00 Mon Sep 17 00:00:00 2001
From: franciscofranco <franciscofranco.1990@gmail.com>
Date: Fri, 27 Feb 2015 15:59:50 +0000
Subject: [PATCH] arm: use -mtune=cortex-a15 for Krait targets
Signed-off-by: franciscofranco <franciscofranco.1990@gmail.com>
---
arch/arm/Makefile | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 066853f..ffb2719 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -103,6 +103,7 @@ tune-$(CONFIG_CPU_XSC3) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -
tune-$(CONFIG_CPU_FEROCEON) :=$(call cc-option,-mtune=marvell-f,-mtune=xscale)
tune-$(CONFIG_CPU_V6) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
tune-$(CONFIG_CPU_V6K) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
+tune-$(CONFIG_ARCH_MSM_KRAIT) :=-mtune=cortex-a15
ifeq ($(CONFIG_AEABI),y)
CFLAGS_ABI :=-mabi=aapcs-linux -mno-thumb-interwork

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,244 @@
From be4516645f228e02ae04eab6c1c3f564cff1e0ec Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:52:02 -0400
Subject: [PATCH] Implement Quick Wakeup
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 2 +
include/linux/quickwakeup.h | 46 ++++++++++++
kernel/power/Kconfig | 20 ++++--
kernel/power/Makefile | 1 +
kernel/power/quickwakeup.c | 104 +++++++++++++++++++++++++++
5 files changed, 167 insertions(+), 6 deletions(-)
create mode 100644 include/linux/quickwakeup.h
create mode 100644 kernel/power/quickwakeup.c
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 41a303a..0d2faaf 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -3622,3 +3622,5 @@ CONFIG_NLATTR=y
# CONFIG_CORDIC is not set
CONFIG_QMI_ENCDEC=y
# CONFIG_QMI_ENCDEC_DEBUG is not set
+
+CONFIG_QUICK_WAKEUP=y
diff --git a/include/linux/quickwakeup.h b/include/linux/quickwakeup.h
new file mode 100644
index 0000000..000effa
--- /dev/null
+++ b/include/linux/quickwakeup.h
@@ -0,0 +1,46 @@
+/* include/linux/quickwakeup.h
+ *
+ * Copyright (C) 2014 Motorola Mobility LLC.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _QUICKWAKEUP_H_
+#define _QUICKWAKEUP_H_
+
+#ifdef __KERNEL__
+
+struct quickwakeup_ops {
+ struct list_head list;
+ char *name;
+ int (*qw_execute)(void *data);
+ int (*qw_check)(void *data);
+ int execute;
+ void *data; /* arbitrary data passed back to user */
+};
+
+#ifdef CONFIG_QUICK_WAKEUP
+
+int quickwakeup_register(struct quickwakeup_ops *ops);
+void quickwakeup_unregister(struct quickwakeup_ops *ops);
+bool quickwakeup_suspend_again(void);
+
+#else
+
+static inline int quickwakeup_register(struct quickwakeup_ops *ops) { return 0; };
+static inline void quickwakeup_unregister(struct quickwakeup_ops *ops) {};
+static inline bool quickwakeup_suspend_again(void) { return 0; };
+
+#endif /* CONFIG_QUICK_WAKEUP */
+
+#endif /* __KERNEL__ */
+
+#endif /* _QUICKWAKEUP_H_ */
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
index e536c8d..8006962 100644
--- a/kernel/power/Kconfig
+++ b/kernel/power/Kconfig
@@ -83,20 +83,20 @@ config PM_STD_PARTITION
default ""
---help---
The default resume partition is the partition that the suspend-
- to-disk implementation will look for a suspended disk image.
+ to-disk implementation will look for a suspended disk image.
- The partition specified here will be different for almost every user.
+ The partition specified here will be different for almost every user.
It should be a valid swap partition (at least for now) that is turned
- on before suspending.
+ on before suspending.
The partition specified can be overridden by specifying:
- resume=/dev/<other device>
+ resume=/dev/<other device>
- which will set the resume partition to the device specified.
+ which will set the resume partition to the device specified.
Note there is currently not a way to specify which device to save the
- suspended image to. It will simply pick the first available swap
+ suspended image to. It will simply pick the first available swap
device.
config PM_SLEEP
@@ -285,6 +285,14 @@ config SUSPEND_TIME
Prints the time spent in suspend in the kernel log, and
keeps statistics on the time spent in suspend in
/sys/kernel/debug/suspend_time
+
+config QUICK_WAKEUP
+ bool "Quick wakeup"
+ depends on SUSPEND
+ default n
+ ---help---
+ Allow kernel driver to do periodic jobs without resuming the full system
+ This option can increase battery life on android powered smartphone.
config DEDUCE_WAKEUP_REASONS
bool
diff --git a/kernel/power/Makefile b/kernel/power/Makefile
index 74c713b..e5bebbc 100644
--- a/kernel/power/Makefile
+++ b/kernel/power/Makefile
@@ -14,5 +14,6 @@ obj-$(CONFIG_PM_WAKELOCKS) += wakelock.o
obj-$(CONFIG_SUSPEND_TIME) += suspend_time.o
obj-$(CONFIG_MAGIC_SYSRQ) += poweroff.o
+obj-$(CONFIG_QUICK_WAKEUP) += quickwakeup.o
obj-$(CONFIG_SUSPEND) += wakeup_reason.o
diff --git a/kernel/power/quickwakeup.c b/kernel/power/quickwakeup.c
new file mode 100644
index 0000000..46f9dda
--- /dev/null
+++ b/kernel/power/quickwakeup.c
@@ -0,0 +1,104 @@
+/* kernel/power/quickwakeup.c
+ *
+ * Copyright (C) 2014 Motorola Mobility LLC.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/mutex.h>
+#include <linux/quickwakeup.h>
+
+static LIST_HEAD(qw_head);
+static DEFINE_MUTEX(list_lock);
+
+int quickwakeup_register(struct quickwakeup_ops *ops)
+{
+ mutex_lock(&list_lock);
+ list_add(&ops->list, &qw_head);
+ mutex_unlock(&list_lock);
+
+ return 0;
+}
+
+void quickwakeup_unregister(struct quickwakeup_ops *ops)
+{
+ mutex_lock(&list_lock);
+ list_del(&ops->list);
+ mutex_unlock(&list_lock);
+}
+
+static int quickwakeup_check(void)
+{
+ int check = 0;
+ struct quickwakeup_ops *index;
+
+ mutex_lock(&list_lock);
+
+ list_for_each_entry(index, &qw_head, list) {
+ int ret = index->qw_check(index->data);
+ index->execute = ret;
+ check |= ret;
+ pr_debug("%s: %s votes for %s\n", __func__, index->name,
+ ret ? "execute" : "dont care");
+ }
+
+ mutex_unlock(&list_lock);
+
+ return check;
+}
+
+/* return 1 => suspend again
+ return 0 => continue wakeup
+ */
+static int quickwakeup_execute(void)
+{
+ int suspend_again = 0;
+ int final_vote = 1;
+ struct quickwakeup_ops *index;
+
+ mutex_lock(&list_lock);
+
+ list_for_each_entry(index, &qw_head, list) {
+ if (index->execute) {
+ int ret = index->qw_execute(index->data);
+ index->execute = 0;
+ final_vote &= ret;
+ suspend_again = final_vote;
+ pr_debug("%s: %s votes for %s\n", __func__, index->name,
+ ret ? "suspend again" : "wakeup");
+ }
+ }
+
+ mutex_unlock(&list_lock);
+
+ pr_debug("%s: %s\n", __func__,
+ suspend_again ? "suspend again" : "wakeup");
+
+ return suspend_again;
+}
+
+/* return 1 => suspend again
+ return 0 => continue wakeup
+ */
+bool quickwakeup_suspend_again(void)
+{
+ int ret = 0;
+
+ if (quickwakeup_check())
+ ret = quickwakeup_execute();
+
+ pr_debug("%s- returning %d %s\n", __func__, ret,
+ ret ? "suspend again" : "wakeup");
+
+ return ret;
+}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,60 @@
From 11812dfbd7b16cfff83389f3d017702bfb0320e9 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Tue, 26 May 2015 14:26:28 -0400
Subject: [PATCH] Fix build failure
---
kernel/time/alarmtimer.c | 23 ++++++++---------------
1 file changed, 8 insertions(+), 15 deletions(-)
diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
index f0239cc..c4f3fdd 100644
--- a/kernel/time/alarmtimer.c
+++ b/kernel/time/alarmtimer.c
@@ -731,9 +731,6 @@ static int alarm_timer_create(struct k_itimer *new_timer)
if (!alarmtimer_get_rtcdev())
return -ENOTSUPP;
- if (flags & ~TIMER_ABSTIME)
- return -EINVAL;
-
if (!capable(CAP_WAKE_ALARM))
return -EPERM;
@@ -748,22 +745,18 @@ static int alarm_timer_create(struct k_itimer *new_timer)
* @new_timer: k_itimer pointer
* @cur_setting: itimerspec data to fill
*
- * Copies out the current itimerspec data
+ * Copies the itimerspec data out from the k_itimer
*/
static void alarm_timer_get(struct k_itimer *timr,
struct itimerspec *cur_setting)
{
- ktime_t relative_expiry_time =
- alarm_expires_remaining(&(timr->it.alarm.alarmtimer));
+ memset(cur_setting, 0, sizeof(struct itimerspec));
- if (ktime_to_ns(relative_expiry_time) > 0) {
- cur_setting->it_value = ktime_to_timespec(relative_expiry_time);
- } else {
- cur_setting->it_value.tv_sec = 0;
- cur_setting->it_value.tv_nsec = 0;
- }
-
- cur_setting->it_interval = ktime_to_timespec(timr->it.alarm.interval);
+ cur_setting->it_interval =
+ ktime_to_timespec(timr->it.alarm.interval);
+ cur_setting->it_value =
+ ktime_to_timespec(timr->it.alarm.alarmtimer.node.expires);
+ return;
}
/**
@@ -1070,4 +1063,4 @@ static int __init alarmtimer_init(void)
alarmtimer_rtc_interface_remove();
return error;
}
-device_initcall(alarmtimer_init);
+device_initcall(alarmtimer_init);
\ No newline at end of file

View file

@ -0,0 +1,22 @@
From 6f9f37bf95c1d40db8802db1253cb1f57c33feb4 Mon Sep 17 00:00:00 2001
From: YoshiShaPow <yoshipga@gmail.com>
Date: Sat, 20 Dec 2014 12:05:19 -0800
Subject: [PATCH] gcc5: arm: enable cortex_a15 optimization
---
arch/arm/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index e620786..0dd6592 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -57,7 +57,7 @@ comma = ,
# Note that GCC does not numerically define an architecture version
# macro, but instead defines a whole series of macros which makes
# testing for a specific architecture or later rather impossible.
-arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
+arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a -mtune=cortex-a15 -Wa$(comma)-march=armv7-a)
arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
# Only override the compiler option if ARMv6. The ARMv6K extensions are
# always available in ARMv7

View file

@ -0,0 +1,22 @@
From 0d5c16ee7326dfb9edcffa7e3773bf3cc8cef296 Mon Sep 17 00:00:00 2001
From: franciscofranco <franciscofranco.1990@gmail.com>
Date: Fri, 27 Feb 2015 15:59:50 +0000
Subject: [PATCH] arm: use -mtune=cortex-a15 for Krait targets
Signed-off-by: franciscofranco <franciscofranco.1990@gmail.com>
---
arch/arm/Makefile | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 0dd6592..37632ba 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -102,6 +102,7 @@ tune-$(CONFIG_CPU_XSC3) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -
tune-$(CONFIG_CPU_FEROCEON) :=$(call cc-option,-mtune=marvell-f,-mtune=xscale)
tune-$(CONFIG_CPU_V6) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
tune-$(CONFIG_CPU_V6K) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
+tune-$(CONFIG_ARCH_MSM_KRAIT) :=-mtune=cortex-a15
ifeq ($(CONFIG_AEABI),y)
CFLAGS_ABI :=-mabi=aapcs-linux -mno-thumb-interwork

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,577 @@
From c0209d6b15d2fc752741fe0e04b227990e74377f Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:21 -0400
Subject: [PATCH] Implement KEXEC
---
arch/arm/Kconfig | 26 ++++++++++
arch/arm/boot/compressed/head.S | 64 ++++++++++++++++++++++++
arch/arm/configs/cyanogenmod_bacon_defconfig | 6 ++-
arch/arm/include/asm/kexec.h | 8 +++
arch/arm/kernel/machine_kexec.c | 58 +++++++++++++++++++--
arch/arm/kernel/relocate_kernel.S | 75 ++++++++++++++++++++++++++++
arch/arm/mach-msm/include/mach/memory.h | 16 ++++++
arch/arm/mach-msm/oppo/board-8974-oppo.c | 27 ++++++++++
arch/arm/mach-msm/restart.c | 28 +++++++++++
include/linux/kexec.h | 19 +++++--
kernel/kexec.c | 4 ++
11 files changed, 322 insertions(+), 9 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 37d3c6d..f801a19 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -2299,6 +2299,32 @@ config ATAGS_PROC
Should the atags used to boot the kernel be exported in an "atags"
file in procfs. Useful with kexec.
+config KEXEC_HARDBOOT
+ bool "Support hard booting to a kexec kernel"
+ depends on KEXEC
+ help
+ Allows hard booting (i.e., with a full hardware reboot) to a kernel
+ previously loaded in memory by kexec. This works around the problem of
+ soft-booted kernel hangs due to improper device shutdown and/or
+ reinitialization. Support is comprised of two components:
+
+ First, a "hardboot" flag is added to the kexec syscall to force a hard
+ reboot in relocate_new_kernel() (which requires machine-specific assembly
+ code). This also requires the kexec userspace tool to load the kexec'd
+ kernel in memory region left untouched by the bootloader (i.e., not
+ explicitly cleared and not overwritten by the boot kernel). Just prior
+ to reboot, the kexec kernel arguments are stashed in a machine-specific
+ memory page that must also be preserved. Note that this hardboot page
+ need not be reserved during regular kernel execution.
+
+ Second, the zImage decompresor of the boot (bootloader-loaded) kernel is
+ modified to check the hardboot page for fresh kexec arguments, and if
+ present, attempts to jump to the kexec'd kernel preserved in memory.
+
+ Note that hardboot support is only required in the boot kernel and any
+ kernel capable of performing a hardboot kexec. It is _not_ required by a
+ kexec'd kernel.
+
config CRASH_DUMP
bool "Build kdump crash kernel (EXPERIMENTAL)"
depends on EXPERIMENTAL
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index d3892ef..be05aa1 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -11,6 +11,12 @@
#include <linux/linkage.h>
.arch armv7-a
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #include <asm/kexec.h>
+ #include <asm/memory.h>
+#endif
+
/*
* Debugging stuff
*
@@ -136,6 +142,64 @@ start:
1: mov r7, r1 @ save architecture ID
mov r8, r2 @ save atags pointer
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Check hardboot page for a kexec kernel. */
+ ldr r3, =KEXEC_HB_PAGE_ADDR
+ ldr r0, [r3]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ teq r0, r1
+ bne not_booting_other
+
+ /* Clear hardboot page magic to avoid boot loop. */
+ mov r0, #0
+ str r0, [r3]
+
+ /*
+ * Copy dtb from location up high in memory to default location.
+ * Kernel freezes if this is not done.
+ */
+ ldr r1, [r3, #12] @ kexec_boot_atags
+ ldr r2, [r3, #16] @ kexec_boot_atags_len
+ mov r5, #0 @ iterator
+catags_cpy:
+ ldr r0, [r1, r5] @ from kexec_boot_atags
+ str r0, [r8, r5] @ to atags_pointer
+ add r5, r5, #4
+ cmp r5, r2
+ blo catags_cpy
+
+#ifdef KEXEC_HB_KERNEL_LOC
+ /*
+ * Copy kernel from location up high in memory to location in first 128MB.
+ * Bootloader on hammerhead erases first 128MB of ram on reboot, so it can't
+ * be in there before reboot, but decompressing in location above 128MB takes
+ * a long time. This memcpy is much quicker, for some reason.
+ */
+ ldr r2, [r3, #4] @ kexec_start_address
+ ldr r4, [r3, #20] @ kexec_kernel_len
+ ldr r6, =KEXEC_HB_KERNEL_LOC @ target
+ mov r5, #0 @ iterator
+kernel_cpy:
+ ldr r0, [r2, r5] @ from kexec_start_address
+ str r0, [r6, r5] @ to KEXEC_HB_KERNEL_LOC
+ add r5, r5, #4
+ cmp r5, r4
+ blo kernel_cpy
+#else
+ ldr r6, [r3, #4] @ kexec_start_address
+#endif
+
+ /* set registers and boot kexecd' kernel */
+ mov r0, #0
+ ldr r1, [r3, #8] @ kexec_mach_type
+ mov r2, r8 @ atags pointer
+ mov pc, r6
+
+ .ltorg
+
+not_booting_other:
+#endif
+
#ifndef __ARM_ARCH_2__
/*
* Booting from Angel - need to enter SVC mode and disable
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 1fd8a93..5f67061 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -693,7 +693,9 @@ CONFIG_ZBOOT_ROM_BSS=0
# CONFIG_ARM_APPENDED_DTB is not set
CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
+CONFIG_KEXEC_HARDBOOT=y
+CONFIG_ATAGS_PROC=n
# CONFIG_CRASH_DUMP is not set
# CONFIG_AUTO_ZRELADDR is not set
@@ -1283,7 +1285,7 @@ CONFIG_OF=y
#
# Device Tree and Open Firmware support
#
-# CONFIG_PROC_DEVICETREE is not set
+CONFIG_PROC_DEVICETREE=y
# CONFIG_OF_SELFTEST is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
diff --git a/arch/arm/include/asm/kexec.h b/arch/arm/include/asm/kexec.h
index c2b9b4b..564c55b 100644
--- a/arch/arm/include/asm/kexec.h
+++ b/arch/arm/include/asm/kexec.h
@@ -17,6 +17,10 @@
#define KEXEC_ARM_ATAGS_OFFSET 0x1000
#define KEXEC_ARM_ZIMAGE_OFFSET 0x8000
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #define KEXEC_HB_PAGE_MAGIC 0x4a5db007
+#endif
+
#ifndef __ASSEMBLY__
/**
@@ -53,6 +57,10 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
/* Function pointer to optional machine-specific reinitialization */
extern void (*kexec_reinit)(void);
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern void (*kexec_hardboot_hook)(void);
+#endif
+
#endif /* __ASSEMBLY__ */
#endif /* CONFIG_KEXEC */
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c
index 357b651..29cdd2f 100644
--- a/arch/arm/kernel/machine_kexec.c
+++ b/arch/arm/kernel/machine_kexec.c
@@ -14,6 +14,9 @@
#include <asm/cacheflush.h>
#include <asm/mach-types.h>
#include <asm/system_misc.h>
+#include <linux/memblock.h>
+#include <linux/of_fdt.h>
+#include <asm/mmu_writeable.h>
extern const unsigned char relocate_new_kernel[];
extern const unsigned int relocate_new_kernel_size;
@@ -22,6 +25,12 @@ extern unsigned long kexec_start_address;
extern unsigned long kexec_indirection_page;
extern unsigned long kexec_mach_type;
extern unsigned long kexec_boot_atags;
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern unsigned long kexec_hardboot;
+extern unsigned long kexec_boot_atags_len;
+extern unsigned long kexec_kernel_len;
+void (*kexec_hardboot_hook)(void);
+#endif
static atomic_t waiting_for_crash_ipi;
@@ -32,6 +41,37 @@ static atomic_t waiting_for_crash_ipi;
int machine_kexec_prepare(struct kimage *image)
{
+ struct kexec_segment *current_segment;
+ __be32 header;
+ int i, err;
+
+ /* No segment at default ATAGs address. try to locate
+ * a dtb using magic */
+ for (i = 0; i < image->nr_segments; i++) {
+ current_segment = &image->segment[i];
+
+ err = memblock_is_region_memory(current_segment->mem,
+ current_segment->memsz);
+ if (!err)
+ return - EINVAL;
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if(current_segment->mem == image->start)
+ mem_text_write_kernel_word(&kexec_kernel_len, current_segment->memsz);
+#endif
+
+ err = get_user(header, (__be32*)current_segment->buf);
+ if (err)
+ return err;
+
+ if (be32_to_cpu(header) == OF_DT_HEADER)
+ {
+ mem_text_write_kernel_word(&kexec_boot_atags, current_segment->mem);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_boot_atags_len, current_segment->memsz);
+#endif
+ }
+ }
return 0;
}
@@ -123,10 +163,14 @@ void machine_kexec(struct kimage *image)
reboot_code_buffer = page_address(image->control_code_page);
/* Prepare parameters for reboot_code_buffer*/
- kexec_start_address = image->start;
- kexec_indirection_page = page_list;
- kexec_mach_type = machine_arch_type;
- kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
+ mem_text_write_kernel_word(&kexec_start_address, image->start);
+ mem_text_write_kernel_word(&kexec_indirection_page, page_list);
+ mem_text_write_kernel_word(&kexec_mach_type, machine_arch_type);
+ if (!kexec_boot_atags)
+ mem_text_write_kernel_word(&kexec_boot_atags, image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_hardboot, image->hardboot);
+#endif
/* copy our kernel relocation code to the control code page */
memcpy(reboot_code_buffer,
@@ -140,6 +184,12 @@ void machine_kexec(struct kimage *image)
if (kexec_reinit)
kexec_reinit();
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Run any final machine-specific shutdown code. */
+ if (image->hardboot && kexec_hardboot_hook)
+ kexec_hardboot_hook();
+#endif
+
soft_restart(reboot_code_buffer_phys);
}
diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S
index d0cdedf..0e45ffc 100644
--- a/arch/arm/kernel/relocate_kernel.S
+++ b/arch/arm/kernel/relocate_kernel.S
@@ -4,6 +4,15 @@
#include <asm/kexec.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/memory.h>
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ #include <mach/iomap.h>
+#elif defined(CONFIG_ARCH_APQ8064) || defined(CONFIG_ARCH_MSM8974)
+ #include <mach/msm_iomap.h>
+#endif
+#endif
+
.globl relocate_new_kernel
relocate_new_kernel:
@@ -52,6 +61,12 @@ relocate_new_kernel:
b 0b
2:
+#ifdef CONFIG_KEXEC_HARDBOOT
+ ldr r0, kexec_hardboot
+ teq r0, #0
+ bne hardboot
+#endif
+
/* Jump to relocated kernel */
mov lr,r1
mov r0,#0
@@ -60,6 +75,52 @@ relocate_new_kernel:
ARM( mov pc, lr )
THUMB( bx lr )
+#ifdef CONFIG_KEXEC_HARDBOOT
+hardboot:
+ /* Stash boot arguments in hardboot page:
+ * 0: KEXEC_HB_PAGE_MAGIC
+ * 4: kexec_start_address
+ * 8: kexec_mach_type
+ * 12: kexec_boot_atags
+ * 16: kexec_boot_atags_len
+ * 20: kexec_kernel_len */
+ ldr r0, =KEXEC_HB_PAGE_ADDR
+ str r1, [r0, #4]
+ ldr r1, kexec_mach_type
+ str r1, [r0, #8]
+ ldr r1, kexec_boot_atags
+ str r1, [r0, #12]
+ ldr r1, kexec_boot_atags_len
+ str r1, [r0, #16]
+ ldr r1, kexec_kernel_len
+ str r1, [r0, #20]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ str r1, [r0]
+
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ ldr r0, =TEGRA_PMC_BASE
+ ldr r1, [r0]
+ orr r1, r1, #0x10
+ str r1, [r0]
+loop: b loop
+#elif defined(CONFIG_ARCH_APQ8064)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =APQ8064_TLMM_PHYS
+ mov r1, #0
+ str r1, [r0, #0x820] @ PSHOLD_CTL_SU
+loop: b loop
+#elif defined(CONFIG_ARCH_MSM8974)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =MSM8974_MPM2_PSHOLD_PHYS
+ mov r1, #0
+ str r1, [r0, #0]
+loop: b loop
+#else
+#error "No reboot method defined for hardboot."
+#endif
+
+ .ltorg
+#endif
.align
.globl kexec_start_address
@@ -79,6 +140,20 @@ kexec_mach_type:
kexec_boot_atags:
.long 0x0
+#ifdef CONFIG_KEXEC_HARDBOOT
+ .globl kexec_boot_atags_len
+kexec_boot_atags_len:
+ .long 0x0
+
+ .globl kexec_kernel_len
+kexec_kernel_len:
+ .long 0x0
+
+ .globl kexec_hardboot
+kexec_hardboot:
+ .long 0x0
+#endif
+
relocate_new_kernel_end:
.globl relocate_new_kernel_size
diff --git a/arch/arm/mach-msm/include/mach/memory.h b/arch/arm/mach-msm/include/mach/memory.h
index 9225230..1c87b96 100644
--- a/arch/arm/mach-msm/include/mach/memory.h
+++ b/arch/arm/mach-msm/include/mach/memory.h
@@ -20,6 +20,22 @@
/* physical offset of RAM */
#define PLAT_PHYS_OFFSET UL(CONFIG_PHYS_OFFSET)
+#if defined(CONFIG_KEXEC_HARDBOOT)
+#if defined(CONFIG_MACH_APQ8064_FLO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88C00000)
+#elif defined(CONFIG_MACH_APQ8064_MAKO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88600000)
+#elif defined(CONFIG_MACH_MSM8974_HAMMERHEAD)
+#define KEXEC_HB_PAGE_ADDR UL(0x10100000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#elif defined(CONFIG_MACH_OPPO_MSM8974)
+#define KEXEC_HB_PAGE_ADDR UL(0x2F600000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#else
+#error "Adress for kexec hardboot page not defined"
+#endif
+#endif
+
#ifndef __ASSEMBLY__
void clean_and_invalidate_caches(unsigned long, unsigned long, unsigned long);
void clean_caches(unsigned long, unsigned long, unsigned long);
diff --git a/arch/arm/mach-msm/oppo/board-8974-oppo.c b/arch/arm/mach-msm/oppo/board-8974-oppo.c
index eb24545..10bbbda 100644
--- a/arch/arm/mach-msm/oppo/board-8974-oppo.c
+++ b/arch/arm/mach-msm/oppo/board-8974-oppo.c
@@ -54,6 +54,13 @@
#include <linux/pcb_version.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/setup.h>
+#include <asm/memory.h>
+#include <linux/memblock.h>
+#define OPPO_PERSISTENT_RAM_SIZE (SZ_1M)
+#endif
+
static struct platform_device *ram_console_dev;
static struct persistent_ram_descriptor msm_prd[] __initdata = {
@@ -72,6 +79,26 @@ static struct persistent_ram msm_pr __initdata = {
void __init msm_8974_reserve(void)
{
+#ifdef CONFIG_KEXEC_HARDBOOT
+ // Reserve space for hardboot page - just after ram_console,
+ // at the start of second memory bank
+ int ret;
+ phys_addr_t start;
+ struct membank* bank;
+
+ if (meminfo.nr_banks < 2) {
+ pr_err("%s: not enough membank\n", __func__);
+ return;
+ }
+
+ bank = &meminfo.bank[1];
+ start = bank->start + SZ_1M + OPPO_PERSISTENT_RAM_SIZE;
+ ret = memblock_remove(start, SZ_1M);
+ if(!ret)
+ pr_info("Hardboot page reserved at 0x%X\n", start);
+ else
+ pr_err("Failed to reserve space for hardboot page at 0x%X!\n", start);
+#endif
persistent_ram_early_init(&msm_pr);
of_scan_flat_dt(dt_scan_for_memory_reserve, NULL);
}
diff --git a/arch/arm/mach-msm/restart.c b/arch/arm/mach-msm/restart.c
index a04ab8d..fe89976 100644
--- a/arch/arm/mach-msm/restart.c
+++ b/arch/arm/mach-msm/restart.c
@@ -38,6 +38,10 @@
#include "timer.h"
#include "wdog_debug.h"
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/kexec.h>
+#endif
+
#define WDT0_RST 0x38
#define WDT0_EN 0x40
#define WDT0_BARK_TIME 0x4C
@@ -373,6 +377,26 @@ static int __init msm_pmic_restart_init(void)
late_initcall(msm_pmic_restart_init);
+#ifdef CONFIG_KEXEC_HARDBOOT
+static void msm_kexec_hardboot_hook(void)
+{
+ set_dload_mode(0);
+
+ // Set PMIC to restart-on-poweroff
+ pm8xxx_reset_pwr_off(1);
+
+ // These are executed on normal reboot, but with kexec-hardboot,
+ // they reboot/panic the system immediately.
+#if 0
+ qpnp_pon_system_pwr_off(PON_POWER_OFF_WARM_RESET);
+
+ /* Needed to bypass debug image on some chips */
+ msm_disable_wdog_debug();
+ halt_spmi_pmic_arbiter();
+#endif
+}
+#endif
+
static int __init msm_restart_init(void)
{
#ifdef CONFIG_MSM_DLOAD_MODE
@@ -392,6 +416,10 @@ static int __init msm_restart_init(void)
if (scm_is_call_available(SCM_SVC_PWR, SCM_IO_DISABLE_PMIC_ARBITER) > 0)
scm_pmic_arbiter_disable_supported = true;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ kexec_hardboot_hook = msm_kexec_hardboot_hook;
+#endif
+
return 0;
}
early_initcall(msm_restart_init);
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index af84a25..a4509ad 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -111,6 +111,10 @@ struct kimage {
#define KEXEC_TYPE_CRASH 1
unsigned int preserve_context : 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ unsigned int hardboot : 1;
+#endif
+
#ifdef ARCH_HAS_KIMAGE_ARCH
struct kimage_arch arch;
#endif
@@ -178,6 +182,11 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ON_CRASH 0x00000001
#define KEXEC_PRESERVE_CONTEXT 0x00000002
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+#define KEXEC_HARDBOOT 0x00000004
+#endif
+
#define KEXEC_ARCH_MASK 0xffff0000
/* These values match the ELF architecture values.
@@ -196,10 +205,14 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ARCH_MIPS ( 8 << 16)
/* List of defined/legal kexec flags */
-#ifndef CONFIG_KEXEC_JUMP
-#define KEXEC_FLAGS KEXEC_ON_CRASH
-#else
+#if defined(CONFIG_KEXEC_JUMP) && defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT | KEXEC_HARDBOOT)
+#elif defined(CONFIG_KEXEC_JUMP)
#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT)
+#elif defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_HARDBOOT)
+#else
+#define KEXEC_FLAGS (KEXEC_ON_CRASH)
#endif
#define VMCOREINFO_BYTES (4096)
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 4e2e472..aef7893 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -1004,6 +1004,10 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
if (flags & KEXEC_PRESERVE_CONTEXT)
image->preserve_context = 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if (flags & KEXEC_HARDBOOT)
+ image->hardboot = 1;
+#endif
result = machine_kexec_prepare(image);
if (result)
goto out;

View file

@ -0,0 +1,706 @@
From e914463298097e12f8504fa8215246ac70e59831 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:57 -0400
Subject: [PATCH] Overclocked to 2.8Ghz, underclocked to 268Mhz
---
arch/arm/boot/dts/msm8974-v2.dtsi | 2 +-
arch/arm/boot/dts/msm8974pro-pm8941.dtsi | 8 +-
.../arm/boot/dts/msm8974pro-pma8084-regulator.dtsi | 16 +-
arch/arm/boot/dts/msm8974pro.dtsi | 190 ++++++++++++++++++---
4 files changed, 179 insertions(+), 37 deletions(-)
diff --git a/arch/arm/boot/dts/msm8974-v2.dtsi b/arch/arm/boot/dts/msm8974-v2.dtsi
index 04769bd..8739175 100644
--- a/arch/arm/boot/dts/msm8974-v2.dtsi
+++ b/arch/arm/boot/dts/msm8974-v2.dtsi
@@ -135,7 +135,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,
diff --git a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
index 89939e6..d76e4bd 100644
--- a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
@@ -39,22 +39,22 @@
};
&krait0_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait1_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait2_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait3_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
diff --git a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
index 433d466..428a520 100644
--- a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
@@ -492,9 +492,9 @@
<0xf908a800 0x1000>; /* APCS_ALIAS0_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -508,9 +508,9 @@
<0xf909a800 0x1000>; /* APCS_ALIAS1_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -524,9 +524,9 @@
<0xf90aa800 0x1000>; /* APCS_ALIAS2_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -540,9 +540,9 @@
<0xf90ba800 0x1000>; /* APCS_ALIAS3_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
diff --git a/arch/arm/boot/dts/msm8974pro.dtsi b/arch/arm/boot/dts/msm8974pro.dtsi
index c50b379..ebb5112 100644
--- a/arch/arm/boot/dts/msm8974pro.dtsi
+++ b/arch/arm/boot/dts/msm8974pro.dtsi
@@ -90,6 +90,7 @@
qcom,clock-krait@f9016000 {
qcom,speed1-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -121,6 +122,7 @@
qcom,speed1-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -152,6 +154,7 @@
qcom,speed1-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -183,6 +186,7 @@
qcom,speed1-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -214,6 +218,7 @@
qcom,speed1-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -245,6 +250,7 @@
qcom,speed1-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -276,6 +282,7 @@
qcom,speed1-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -307,6 +314,7 @@
qcom,speed3-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -337,10 +345,14 @@
< 2265600000 1065000 700 >,
< 2342400000 1080000 734 >,
< 2419200000 1095000 769 >,
- < 2457600000 1100000 785 >;
+ < 2457600000 1100000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -371,10 +383,14 @@
< 2265600000 1040000 700 >,
< 2342400000 1055000 734 >,
< 2419200000 1070000 769 >,
- < 2457600000 1075000 785 >;
+ < 2457600000 1075000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -405,10 +421,14 @@
< 2265600000 1015000 700 >,
< 2342400000 1030000 734 >,
< 2419200000 1045000 769 >,
- < 2457600000 1050000 785 >;
+ < 2457600000 1050000 785 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1195000 900 >,
+ < 2880000000 1225000 937 >;
qcom,speed3-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -439,10 +459,14 @@
< 2265600000 990000 700 >,
< 2342400000 1005000 734 >,
< 2419200000 1020000 769 >,
- < 2457600000 1025000 785 >;
+ < 2457600000 1025000 785 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -473,10 +497,14 @@
< 2265600000 965000 700 >,
< 2342400000 980000 734 >,
< 2419200000 995000 769 >,
- < 2457600000 1000000 785 >;
+ < 2457600000 1000000 785 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -507,10 +535,14 @@
< 2265600000 940000 700 >,
< 2342400000 955000 734 >,
< 2419200000 970000 769 >,
- < 2457600000 975000 785 >;
+ < 2457600000 975000 785 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -541,10 +573,14 @@
< 2265600000 915000 700 >,
< 2342400000 930000 734 >,
< 2419200000 945000 769 >,
- < 2457600000 950000 785 >;
+ < 2457600000 950000 785 >,
+ < 2572800000 1010000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed1-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 810000 87 >,
< 422400000 820000 108 >,
@@ -576,6 +612,7 @@
qcom,speed1-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 810000 108 >,
@@ -607,6 +644,7 @@
qcom,speed1-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -638,6 +676,7 @@
qcom,speed1-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -669,6 +708,7 @@
qcom,speed1-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -700,6 +740,7 @@
qcom,speed1-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -731,6 +772,7 @@
qcom,speed1-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -762,6 +804,7 @@
qcom,speed1-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -793,6 +836,7 @@
qcom,speed1-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -824,6 +868,7 @@
qcom,speed1-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -855,6 +900,7 @@
qcom,speed1-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -886,6 +932,7 @@
qcom,speed1-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -917,6 +964,7 @@
qcom,speed1-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -948,6 +996,7 @@
qcom,speed1-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -979,6 +1028,7 @@
qcom,speed1-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1010,6 +1060,7 @@
qcom,speed1-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1041,6 +1092,7 @@
qcom,speed3-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1071,10 +1123,14 @@
< 2265600000 1085000 716 >,
< 2342400000 1100000 751 >,
< 2419200000 1115000 786 >,
- < 2457600000 1120000 802 >;
+ < 2457600000 1120000 802 >,
+ < 2572800000 1175000 827 >,
+ < 2726400000 1225000 900 >,
+ < 2880000000 1265000 937 >;
qcom,speed3-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1105,10 +1161,14 @@
< 2265600000 1075000 716 >,
< 2342400000 1090000 751 >,
< 2419200000 1105000 786 >,
- < 2457600000 1110000 802 >;
+ < 2457600000 1110000 802 >,
+ < 2572800000 1165000 827 >,
+ < 2726400000 1215000 900 >,
+ < 2880000000 1245000 937 >;
qcom,speed3-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1139,10 +1199,14 @@
< 2265600000 1065000 716 >,
< 2342400000 1080000 751 >,
< 2419200000 1095000 786 >,
- < 2457600000 1100000 802 >;
+ < 2457600000 1100000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1173,10 +1237,14 @@
< 2265600000 1055000 716 >,
< 2342400000 1070000 751 >,
< 2419200000 1085000 786 >,
- < 2457600000 1090000 802 >;
+ < 2457600000 1090000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1207,10 +1275,14 @@
< 2265600000 1045000 716 >,
< 2342400000 1060000 751 >,
< 2419200000 1075000 786 >,
- < 2457600000 1080000 802 >;
+ < 2457600000 1080000 802 >,
+ < 2572800000 1135000 827 >,
+ < 2726400000 1165000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1241,10 +1313,14 @@
< 2265600000 1035000 716 >,
< 2342400000 1050000 751 >,
< 2419200000 1065000 786 >,
- < 2457600000 1070000 802 >;
+ < 2457600000 1070000 802 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1185000 937 >;
qcom,speed3-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1275,10 +1351,14 @@
< 2265600000 1025000 716 >,
< 2342400000 1040000 751 >,
< 2419200000 1055000 786 >,
- < 2457600000 1060000 802 >;
+ < 2457600000 1060000 802 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1145000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed3-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1309,10 +1389,14 @@
< 2265600000 1015000 716 >,
< 2342400000 1030000 751 >,
< 2419200000 1045000 786 >,
- < 2457600000 1050000 802 >;
+ < 2457600000 1050000 802 >,
+ < 2572800000 1105000 827 >,
+ < 2726400000 1135000 900 >,
+ < 2880000000 1165000 937 >;
qcom,speed3-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1343,10 +1427,14 @@
< 2265600000 1005000 716 >,
< 2342400000 1020000 751 >,
< 2419200000 1035000 786 >,
- < 2457600000 1040000 802 >;
+ < 2457600000 1040000 802 >,
+ < 2572800000 1095000 827 >,
+ < 2726400000 1125000 900 >,
+ < 2880000000 1155000 937 >;
qcom,speed3-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1377,10 +1465,14 @@
< 2265600000 995000 716 >,
< 2342400000 1010000 751 >,
< 2419200000 1025000 786 >,
- < 2457600000 1030000 802 >;
+ < 2457600000 1030000 802 >,
+ < 2572800000 1085000 827 >,
+ < 2726400000 1115000 900 >,
+ < 2880000000 1145000 937 >;
qcom,speed3-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1411,10 +1503,14 @@
< 2265600000 985000 716 >,
< 2342400000 1000000 751 >,
< 2419200000 1015000 786 >,
- < 2457600000 1020000 802 >;
+ < 2457600000 1020000 802 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1105000 900 >,
+ < 2880000000 1135000 937 >;
qcom,speed3-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1445,10 +1541,14 @@
< 2265600000 975000 716 >,
< 2342400000 990000 751 >,
< 2419200000 1005000 786 >,
- < 2457600000 1010000 802 >;
+ < 2457600000 1010000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1095000 900 >,
+ < 2880000000 1125000 937 >;
qcom,speed3-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1479,10 +1579,14 @@
< 2265600000 965000 716 >,
< 2342400000 980000 751 >,
< 2419200000 995000 786 >,
- < 2457600000 1000000 802 >;
+ < 2457600000 1000000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1085000 900 >,
+ < 2880000000 1115000 937 >;
qcom,speed3-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1513,10 +1617,14 @@
< 2265600000 955000 716 >,
< 2342400000 970000 751 >,
< 2419200000 985000 786 >,
- < 2457600000 990000 802 >;
+ < 2457600000 990000 802 >,
+ < 2572800000 1045000 827 >,
+ < 2726400000 1065000 900 >,
+ < 2880000000 1095000 937 >;
qcom,speed3-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1547,10 +1655,14 @@
< 2265600000 945000 716 >,
< 2342400000 960000 751 >,
< 2419200000 975000 786 >,
- < 2457600000 980000 802 >;
+ < 2457600000 980000 802 >,
+ < 2572800000 1035000 827 >,
+ < 2726400000 1055000 900 >,
+ < 2880000000 1085000 937 >;
qcom,speed3-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1581,9 +1693,39 @@
< 2265600000 935000 716 >,
< 2342400000 950000 751 >,
< 2419200000 965000 786 >,
- < 2457600000 970000 802 >;
+ < 2457600000 970000 802 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1045000 900 >,
+ < 2880000000 1075000 937 >;
};
+ qcom,msm-cpufreq@0 {
+ reg = <0 4>;
+ compatible = "qcom,msm-cpufreq";
+ qcom,cpufreq-table =
+ < 268800 /* 75 MHz */ >,
+ < 300000 /* 75 MHz */ >,
+ < 422400 /* 150 MHz */ >,
+ < 652800 /* 200 MHz */ >,
+ < 729600 /* 307 MHz */ >,
+ < 883200 /* 307 MHz */ >,
+ < 960000 /* 460 MHz */ >,
+ < 1036800 /* 460 MHz */ >,
+ < 1190400 /* 460 MHz */ >,
+ < 1267200 /* 614 MHz */ >,
+ < 1497600 /* 614 MHz */ >,
+ < 1574400 /* 800 MHz */ >,
+ < 1728000 /* 800 MHz */ >,
+ < 1958400 /* 931 MHz */ >,
+ < 2265600 /* 931 MHz */ >,
+ < 2342400 /* 931 MHz */ >,
+ < 2419200 /* 931 MHz */ >,
+ < 2457600 /* 931 MHz */ >,
+ < 2572800 /* 931 MHz */ >,
+ < 2726400 /* 931 MHz */ >,
+ < 2880000 /* 931 MHz */ >;
+ };
+
i2c@f9928000 { /* BLSP-1 QUP-6 */
cell-index = <3>;
compatible = "qcom,i2c-qup";
@@ -1751,7 +1893,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,

View file

@ -0,0 +1,48 @@
From ce1d0035c6d67f633444075f4a1cf9aef165d3f0 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:50:31 -0400
Subject: [PATCH] Update defconfig
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 5f67061..41a303a 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -125,8 +125,9 @@ CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
# CONFIG_RD_XZ is not set
# CONFIG_RD_LZO is not set
-# CONFIG_RD_LZ4 is not set
+CONFIG_RD_LZ4=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_CC_OPTIMIZE_MORE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_PANIC_TIMEOUT=5
@@ -190,7 +191,7 @@ CONFIG_SECCOMP_FILTER=y
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+CONFIG_MODULES=y
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
CONFIG_LBDAF=y
@@ -1775,12 +1776,12 @@ CONFIG_SERIAL_MSM_HS=y
#
# Diag Support
#
-# CONFIG_DIAG_CHAR is not set
+CONFIG_DIAG_CHAR=y
#
# DIAG traffic over USB
#
-# CONFIG_DIAG_OVER_USB is not set
+CONFIG_DIAG_OVER_USB=y
#
# SDIO support for DIAG

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,244 @@
From a12f5cc01dd4ed811e5edaca429dcbbb129e0e50 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:52:02 -0400
Subject: [PATCH] Implement Quick Wakeup
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 2 +
include/linux/quickwakeup.h | 46 ++++++++++++
kernel/power/Kconfig | 20 ++++--
kernel/power/Makefile | 1 +
kernel/power/quickwakeup.c | 104 +++++++++++++++++++++++++++
5 files changed, 167 insertions(+), 6 deletions(-)
create mode 100644 include/linux/quickwakeup.h
create mode 100644 kernel/power/quickwakeup.c
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index ed05004..86aed0e 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -3629,3 +3629,5 @@ CONFIG_NLATTR=y
# CONFIG_CORDIC is not set
CONFIG_QMI_ENCDEC=y
# CONFIG_QMI_ENCDEC_DEBUG is not set
+
+CONFIG_QUICK_WAKEUP=y
diff --git a/include/linux/quickwakeup.h b/include/linux/quickwakeup.h
new file mode 100644
index 0000000..000effa
--- /dev/null
+++ b/include/linux/quickwakeup.h
@@ -0,0 +1,46 @@
+/* include/linux/quickwakeup.h
+ *
+ * Copyright (C) 2014 Motorola Mobility LLC.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _QUICKWAKEUP_H_
+#define _QUICKWAKEUP_H_
+
+#ifdef __KERNEL__
+
+struct quickwakeup_ops {
+ struct list_head list;
+ char *name;
+ int (*qw_execute)(void *data);
+ int (*qw_check)(void *data);
+ int execute;
+ void *data; /* arbitrary data passed back to user */
+};
+
+#ifdef CONFIG_QUICK_WAKEUP
+
+int quickwakeup_register(struct quickwakeup_ops *ops);
+void quickwakeup_unregister(struct quickwakeup_ops *ops);
+bool quickwakeup_suspend_again(void);
+
+#else
+
+static inline int quickwakeup_register(struct quickwakeup_ops *ops) { return 0; };
+static inline void quickwakeup_unregister(struct quickwakeup_ops *ops) {};
+static inline bool quickwakeup_suspend_again(void) { return 0; };
+
+#endif /* CONFIG_QUICK_WAKEUP */
+
+#endif /* __KERNEL__ */
+
+#endif /* _QUICKWAKEUP_H_ */
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
index e536c8d..8006962 100644
--- a/kernel/power/Kconfig
+++ b/kernel/power/Kconfig
@@ -83,20 +83,20 @@ config PM_STD_PARTITION
default ""
---help---
The default resume partition is the partition that the suspend-
- to-disk implementation will look for a suspended disk image.
+ to-disk implementation will look for a suspended disk image.
- The partition specified here will be different for almost every user.
+ The partition specified here will be different for almost every user.
It should be a valid swap partition (at least for now) that is turned
- on before suspending.
+ on before suspending.
The partition specified can be overridden by specifying:
- resume=/dev/<other device>
+ resume=/dev/<other device>
- which will set the resume partition to the device specified.
+ which will set the resume partition to the device specified.
Note there is currently not a way to specify which device to save the
- suspended image to. It will simply pick the first available swap
+ suspended image to. It will simply pick the first available swap
device.
config PM_SLEEP
@@ -285,6 +285,14 @@ config SUSPEND_TIME
Prints the time spent in suspend in the kernel log, and
keeps statistics on the time spent in suspend in
/sys/kernel/debug/suspend_time
+
+config QUICK_WAKEUP
+ bool "Quick wakeup"
+ depends on SUSPEND
+ default n
+ ---help---
+ Allow kernel driver to do periodic jobs without resuming the full system
+ This option can increase battery life on android powered smartphone.
config DEDUCE_WAKEUP_REASONS
bool
diff --git a/kernel/power/Makefile b/kernel/power/Makefile
index 74c713b..e5bebbc 100644
--- a/kernel/power/Makefile
+++ b/kernel/power/Makefile
@@ -14,5 +14,6 @@ obj-$(CONFIG_PM_WAKELOCKS) += wakelock.o
obj-$(CONFIG_SUSPEND_TIME) += suspend_time.o
obj-$(CONFIG_MAGIC_SYSRQ) += poweroff.o
+obj-$(CONFIG_QUICK_WAKEUP) += quickwakeup.o
obj-$(CONFIG_SUSPEND) += wakeup_reason.o
diff --git a/kernel/power/quickwakeup.c b/kernel/power/quickwakeup.c
new file mode 100644
index 0000000..46f9dda
--- /dev/null
+++ b/kernel/power/quickwakeup.c
@@ -0,0 +1,104 @@
+/* kernel/power/quickwakeup.c
+ *
+ * Copyright (C) 2014 Motorola Mobility LLC.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/mutex.h>
+#include <linux/quickwakeup.h>
+
+static LIST_HEAD(qw_head);
+static DEFINE_MUTEX(list_lock);
+
+int quickwakeup_register(struct quickwakeup_ops *ops)
+{
+ mutex_lock(&list_lock);
+ list_add(&ops->list, &qw_head);
+ mutex_unlock(&list_lock);
+
+ return 0;
+}
+
+void quickwakeup_unregister(struct quickwakeup_ops *ops)
+{
+ mutex_lock(&list_lock);
+ list_del(&ops->list);
+ mutex_unlock(&list_lock);
+}
+
+static int quickwakeup_check(void)
+{
+ int check = 0;
+ struct quickwakeup_ops *index;
+
+ mutex_lock(&list_lock);
+
+ list_for_each_entry(index, &qw_head, list) {
+ int ret = index->qw_check(index->data);
+ index->execute = ret;
+ check |= ret;
+ pr_debug("%s: %s votes for %s\n", __func__, index->name,
+ ret ? "execute" : "dont care");
+ }
+
+ mutex_unlock(&list_lock);
+
+ return check;
+}
+
+/* return 1 => suspend again
+ return 0 => continue wakeup
+ */
+static int quickwakeup_execute(void)
+{
+ int suspend_again = 0;
+ int final_vote = 1;
+ struct quickwakeup_ops *index;
+
+ mutex_lock(&list_lock);
+
+ list_for_each_entry(index, &qw_head, list) {
+ if (index->execute) {
+ int ret = index->qw_execute(index->data);
+ index->execute = 0;
+ final_vote &= ret;
+ suspend_again = final_vote;
+ pr_debug("%s: %s votes for %s\n", __func__, index->name,
+ ret ? "suspend again" : "wakeup");
+ }
+ }
+
+ mutex_unlock(&list_lock);
+
+ pr_debug("%s: %s\n", __func__,
+ suspend_again ? "suspend again" : "wakeup");
+
+ return suspend_again;
+}
+
+/* return 1 => suspend again
+ return 0 => continue wakeup
+ */
+bool quickwakeup_suspend_again(void)
+{
+ int ret = 0;
+
+ if (quickwakeup_check())
+ ret = quickwakeup_execute();
+
+ pr_debug("%s- returning %d %s\n", __func__, ret,
+ ret ? "suspend again" : "wakeup");
+
+ return ret;
+}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,60 @@
From ea2cc0f11b89637cb0837ca381a5189af7fb03ab Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Tue, 26 May 2015 14:26:28 -0400
Subject: [PATCH] Fix build failure
---
kernel/time/alarmtimer.c | 23 ++++++++---------------
1 file changed, 8 insertions(+), 15 deletions(-)
diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
index f0239cc..c4f3fdd 100644
--- a/kernel/time/alarmtimer.c
+++ b/kernel/time/alarmtimer.c
@@ -731,9 +731,6 @@ static int alarm_timer_create(struct k_itimer *new_timer)
if (!alarmtimer_get_rtcdev())
return -ENOTSUPP;
- if (flags & ~TIMER_ABSTIME)
- return -EINVAL;
-
if (!capable(CAP_WAKE_ALARM))
return -EPERM;
@@ -748,22 +745,18 @@ static int alarm_timer_create(struct k_itimer *new_timer)
* @new_timer: k_itimer pointer
* @cur_setting: itimerspec data to fill
*
- * Copies out the current itimerspec data
+ * Copies the itimerspec data out from the k_itimer
*/
static void alarm_timer_get(struct k_itimer *timr,
struct itimerspec *cur_setting)
{
- ktime_t relative_expiry_time =
- alarm_expires_remaining(&(timr->it.alarm.alarmtimer));
+ memset(cur_setting, 0, sizeof(struct itimerspec));
- if (ktime_to_ns(relative_expiry_time) > 0) {
- cur_setting->it_value = ktime_to_timespec(relative_expiry_time);
- } else {
- cur_setting->it_value.tv_sec = 0;
- cur_setting->it_value.tv_nsec = 0;
- }
-
- cur_setting->it_interval = ktime_to_timespec(timr->it.alarm.interval);
+ cur_setting->it_interval =
+ ktime_to_timespec(timr->it.alarm.interval);
+ cur_setting->it_value =
+ ktime_to_timespec(timr->it.alarm.alarmtimer.node.expires);
+ return;
}
/**
@@ -1070,4 +1063,4 @@ static int __init alarmtimer_init(void)
alarmtimer_rtc_interface_remove();
return error;
}
-device_initcall(alarmtimer_init);
+device_initcall(alarmtimer_init);
\ No newline at end of file

View file

@ -0,0 +1,82 @@
From 1eb98914209cda9bab7b9fc18f4de0c61c586c7d Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Wed, 28 Oct 2015 12:27:28 -0400
Subject: [PATCH] Fix breakage by 8ca6f59430d96290d8140d77f1ff53f2564546b3
---
fs/dcache.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/fs/dcache.c b/fs/dcache.c
index 70921c9..c6a7aca 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -2595,11 +2595,11 @@ char *__d_path(const struct path *path,
int error;
prepend(&res, &buflen, "\0", 1);
- br_read_lock(vfsmount_lock);
+ br_read_lock(&vfsmount_lock);
write_seqlock(&rename_lock);
error = prepend_path(path, root, &res, &buflen);
write_sequnlock(&rename_lock);
- br_read_unlock(vfsmount_lock);
+ br_read_unlock(&vfsmount_lock);
if (error < 0)
return ERR_PTR(error);
@@ -2616,11 +2616,11 @@ char *d_absolute_path(const struct path *path,
int error;
prepend(&res, &buflen, "\0", 1);
- br_read_lock(vfsmount_lock);
+ br_read_lock(&vfsmount_lock);
write_seqlock(&rename_lock);
error = prepend_path(path, &root, &res, &buflen);
write_sequnlock(&rename_lock);
- br_read_unlock(vfsmount_lock);
+ br_read_unlock(&vfsmount_lock);
if (error > 1)
error = -EINVAL;
@@ -2684,11 +2684,11 @@ char *d_path(const struct path *path, char *buf, int buflen)
return path->dentry->d_op->d_dname(path->dentry, buf, buflen);
get_fs_root(current->fs, &root);
- br_read_lock(vfsmount_lock);
+ br_read_lock(&vfsmount_lock);
write_seqlock(&rename_lock);
error = path_with_deleted(path, &root, &res, &buflen);
write_sequnlock(&rename_lock);
- br_read_unlock(vfsmount_lock);
+ br_read_unlock(&vfsmount_lock);
if (error < 0)
res = ERR_PTR(error);
path_put(&root);
@@ -2845,7 +2845,7 @@ SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size)
get_fs_root_and_pwd(current->fs, &root, &pwd);
error = -ENOENT;
- br_read_lock(vfsmount_lock);
+ br_read_lock(&vfsmount_lock);
write_seqlock(&rename_lock);
if (!d_unlinked(pwd.dentry)) {
unsigned long len;
@@ -2855,7 +2855,7 @@ SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size)
prepend(&cwd, &buflen, "\0", 1);
error = prepend_path(&pwd, &root, &cwd, &buflen);
write_sequnlock(&rename_lock);
- br_read_unlock(vfsmount_lock);
+ br_read_unlock(&vfsmount_lock);
if (error < 0)
goto out;
@@ -2876,7 +2876,7 @@ SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size)
}
} else {
write_sequnlock(&rename_lock);
- br_read_unlock(vfsmount_lock);
+ br_read_unlock(&vfsmount_lock);
}
out:

View file

@ -0,0 +1,22 @@
From 6f9f37bf95c1d40db8802db1253cb1f57c33feb4 Mon Sep 17 00:00:00 2001
From: YoshiShaPow <yoshipga@gmail.com>
Date: Sat, 20 Dec 2014 12:05:19 -0800
Subject: [PATCH] gcc5: arm: enable cortex_a15 optimization
---
arch/arm/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index e620786..0dd6592 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -57,7 +57,7 @@ comma = ,
# Note that GCC does not numerically define an architecture version
# macro, but instead defines a whole series of macros which makes
# testing for a specific architecture or later rather impossible.
-arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
+arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a -mtune=cortex-a15 -Wa$(comma)-march=armv7-a)
arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
# Only override the compiler option if ARMv6. The ARMv6K extensions are
# always available in ARMv7

View file

@ -0,0 +1,22 @@
From 0d5c16ee7326dfb9edcffa7e3773bf3cc8cef296 Mon Sep 17 00:00:00 2001
From: franciscofranco <franciscofranco.1990@gmail.com>
Date: Fri, 27 Feb 2015 15:59:50 +0000
Subject: [PATCH] arm: use -mtune=cortex-a15 for Krait targets
Signed-off-by: franciscofranco <franciscofranco.1990@gmail.com>
---
arch/arm/Makefile | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 0dd6592..37632ba 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -102,6 +102,7 @@ tune-$(CONFIG_CPU_XSC3) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -
tune-$(CONFIG_CPU_FEROCEON) :=$(call cc-option,-mtune=marvell-f,-mtune=xscale)
tune-$(CONFIG_CPU_V6) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
tune-$(CONFIG_CPU_V6K) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
+tune-$(CONFIG_ARCH_MSM_KRAIT) :=-mtune=cortex-a15
ifeq ($(CONFIG_AEABI),y)
CFLAGS_ABI :=-mabi=aapcs-linux -mno-thumb-interwork

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,577 @@
From 7fd9acebf8d5973f3d345cac4713691cff517e5c Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:21 -0400
Subject: [PATCH] Implement KEXEC
---
arch/arm/Kconfig | 26 ++++++++++
arch/arm/boot/compressed/head.S | 64 ++++++++++++++++++++++++
arch/arm/configs/cyanogenmod_bacon_defconfig | 6 ++-
arch/arm/include/asm/kexec.h | 8 +++
arch/arm/kernel/machine_kexec.c | 58 +++++++++++++++++++--
arch/arm/kernel/relocate_kernel.S | 75 ++++++++++++++++++++++++++++
arch/arm/mach-msm/include/mach/memory.h | 16 ++++++
arch/arm/mach-msm/oppo/board-8974-oppo.c | 27 ++++++++++
arch/arm/mach-msm/restart.c | 28 +++++++++++
include/linux/kexec.h | 19 +++++--
kernel/kexec.c | 4 ++
11 files changed, 322 insertions(+), 9 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 37d3c6d..f801a19 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -2299,6 +2299,32 @@ config ATAGS_PROC
Should the atags used to boot the kernel be exported in an "atags"
file in procfs. Useful with kexec.
+config KEXEC_HARDBOOT
+ bool "Support hard booting to a kexec kernel"
+ depends on KEXEC
+ help
+ Allows hard booting (i.e., with a full hardware reboot) to a kernel
+ previously loaded in memory by kexec. This works around the problem of
+ soft-booted kernel hangs due to improper device shutdown and/or
+ reinitialization. Support is comprised of two components:
+
+ First, a "hardboot" flag is added to the kexec syscall to force a hard
+ reboot in relocate_new_kernel() (which requires machine-specific assembly
+ code). This also requires the kexec userspace tool to load the kexec'd
+ kernel in memory region left untouched by the bootloader (i.e., not
+ explicitly cleared and not overwritten by the boot kernel). Just prior
+ to reboot, the kexec kernel arguments are stashed in a machine-specific
+ memory page that must also be preserved. Note that this hardboot page
+ need not be reserved during regular kernel execution.
+
+ Second, the zImage decompresor of the boot (bootloader-loaded) kernel is
+ modified to check the hardboot page for fresh kexec arguments, and if
+ present, attempts to jump to the kexec'd kernel preserved in memory.
+
+ Note that hardboot support is only required in the boot kernel and any
+ kernel capable of performing a hardboot kexec. It is _not_ required by a
+ kexec'd kernel.
+
config CRASH_DUMP
bool "Build kdump crash kernel (EXPERIMENTAL)"
depends on EXPERIMENTAL
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index d3892ef..be05aa1 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -11,6 +11,12 @@
#include <linux/linkage.h>
.arch armv7-a
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #include <asm/kexec.h>
+ #include <asm/memory.h>
+#endif
+
/*
* Debugging stuff
*
@@ -136,6 +142,64 @@ start:
1: mov r7, r1 @ save architecture ID
mov r8, r2 @ save atags pointer
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Check hardboot page for a kexec kernel. */
+ ldr r3, =KEXEC_HB_PAGE_ADDR
+ ldr r0, [r3]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ teq r0, r1
+ bne not_booting_other
+
+ /* Clear hardboot page magic to avoid boot loop. */
+ mov r0, #0
+ str r0, [r3]
+
+ /*
+ * Copy dtb from location up high in memory to default location.
+ * Kernel freezes if this is not done.
+ */
+ ldr r1, [r3, #12] @ kexec_boot_atags
+ ldr r2, [r3, #16] @ kexec_boot_atags_len
+ mov r5, #0 @ iterator
+catags_cpy:
+ ldr r0, [r1, r5] @ from kexec_boot_atags
+ str r0, [r8, r5] @ to atags_pointer
+ add r5, r5, #4
+ cmp r5, r2
+ blo catags_cpy
+
+#ifdef KEXEC_HB_KERNEL_LOC
+ /*
+ * Copy kernel from location up high in memory to location in first 128MB.
+ * Bootloader on hammerhead erases first 128MB of ram on reboot, so it can't
+ * be in there before reboot, but decompressing in location above 128MB takes
+ * a long time. This memcpy is much quicker, for some reason.
+ */
+ ldr r2, [r3, #4] @ kexec_start_address
+ ldr r4, [r3, #20] @ kexec_kernel_len
+ ldr r6, =KEXEC_HB_KERNEL_LOC @ target
+ mov r5, #0 @ iterator
+kernel_cpy:
+ ldr r0, [r2, r5] @ from kexec_start_address
+ str r0, [r6, r5] @ to KEXEC_HB_KERNEL_LOC
+ add r5, r5, #4
+ cmp r5, r4
+ blo kernel_cpy
+#else
+ ldr r6, [r3, #4] @ kexec_start_address
+#endif
+
+ /* set registers and boot kexecd' kernel */
+ mov r0, #0
+ ldr r1, [r3, #8] @ kexec_mach_type
+ mov r2, r8 @ atags pointer
+ mov pc, r6
+
+ .ltorg
+
+not_booting_other:
+#endif
+
#ifndef __ARM_ARCH_2__
/*
* Booting from Angel - need to enter SVC mode and disable
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 0a8ac5f..009a34d 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -695,7 +695,9 @@ CONFIG_ZBOOT_ROM_BSS=0
# CONFIG_ARM_APPENDED_DTB is not set
CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
+CONFIG_KEXEC_HARDBOOT=y
+CONFIG_ATAGS_PROC=n
# CONFIG_CRASH_DUMP is not set
# CONFIG_AUTO_ZRELADDR is not set
@@ -1285,7 +1287,7 @@ CONFIG_OF=y
#
# Device Tree and Open Firmware support
#
-# CONFIG_PROC_DEVICETREE is not set
+CONFIG_PROC_DEVICETREE=y
# CONFIG_OF_SELFTEST is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
diff --git a/arch/arm/include/asm/kexec.h b/arch/arm/include/asm/kexec.h
index c2b9b4b..564c55b 100644
--- a/arch/arm/include/asm/kexec.h
+++ b/arch/arm/include/asm/kexec.h
@@ -17,6 +17,10 @@
#define KEXEC_ARM_ATAGS_OFFSET 0x1000
#define KEXEC_ARM_ZIMAGE_OFFSET 0x8000
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #define KEXEC_HB_PAGE_MAGIC 0x4a5db007
+#endif
+
#ifndef __ASSEMBLY__
/**
@@ -53,6 +57,10 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
/* Function pointer to optional machine-specific reinitialization */
extern void (*kexec_reinit)(void);
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern void (*kexec_hardboot_hook)(void);
+#endif
+
#endif /* __ASSEMBLY__ */
#endif /* CONFIG_KEXEC */
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c
index 357b651..29cdd2f 100644
--- a/arch/arm/kernel/machine_kexec.c
+++ b/arch/arm/kernel/machine_kexec.c
@@ -14,6 +14,9 @@
#include <asm/cacheflush.h>
#include <asm/mach-types.h>
#include <asm/system_misc.h>
+#include <linux/memblock.h>
+#include <linux/of_fdt.h>
+#include <asm/mmu_writeable.h>
extern const unsigned char relocate_new_kernel[];
extern const unsigned int relocate_new_kernel_size;
@@ -22,6 +25,12 @@ extern unsigned long kexec_start_address;
extern unsigned long kexec_indirection_page;
extern unsigned long kexec_mach_type;
extern unsigned long kexec_boot_atags;
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern unsigned long kexec_hardboot;
+extern unsigned long kexec_boot_atags_len;
+extern unsigned long kexec_kernel_len;
+void (*kexec_hardboot_hook)(void);
+#endif
static atomic_t waiting_for_crash_ipi;
@@ -32,6 +41,37 @@ static atomic_t waiting_for_crash_ipi;
int machine_kexec_prepare(struct kimage *image)
{
+ struct kexec_segment *current_segment;
+ __be32 header;
+ int i, err;
+
+ /* No segment at default ATAGs address. try to locate
+ * a dtb using magic */
+ for (i = 0; i < image->nr_segments; i++) {
+ current_segment = &image->segment[i];
+
+ err = memblock_is_region_memory(current_segment->mem,
+ current_segment->memsz);
+ if (!err)
+ return - EINVAL;
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if(current_segment->mem == image->start)
+ mem_text_write_kernel_word(&kexec_kernel_len, current_segment->memsz);
+#endif
+
+ err = get_user(header, (__be32*)current_segment->buf);
+ if (err)
+ return err;
+
+ if (be32_to_cpu(header) == OF_DT_HEADER)
+ {
+ mem_text_write_kernel_word(&kexec_boot_atags, current_segment->mem);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_boot_atags_len, current_segment->memsz);
+#endif
+ }
+ }
return 0;
}
@@ -123,10 +163,14 @@ void machine_kexec(struct kimage *image)
reboot_code_buffer = page_address(image->control_code_page);
/* Prepare parameters for reboot_code_buffer*/
- kexec_start_address = image->start;
- kexec_indirection_page = page_list;
- kexec_mach_type = machine_arch_type;
- kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
+ mem_text_write_kernel_word(&kexec_start_address, image->start);
+ mem_text_write_kernel_word(&kexec_indirection_page, page_list);
+ mem_text_write_kernel_word(&kexec_mach_type, machine_arch_type);
+ if (!kexec_boot_atags)
+ mem_text_write_kernel_word(&kexec_boot_atags, image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_hardboot, image->hardboot);
+#endif
/* copy our kernel relocation code to the control code page */
memcpy(reboot_code_buffer,
@@ -140,6 +184,12 @@ void machine_kexec(struct kimage *image)
if (kexec_reinit)
kexec_reinit();
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Run any final machine-specific shutdown code. */
+ if (image->hardboot && kexec_hardboot_hook)
+ kexec_hardboot_hook();
+#endif
+
soft_restart(reboot_code_buffer_phys);
}
diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S
index d0cdedf..0e45ffc 100644
--- a/arch/arm/kernel/relocate_kernel.S
+++ b/arch/arm/kernel/relocate_kernel.S
@@ -4,6 +4,15 @@
#include <asm/kexec.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/memory.h>
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ #include <mach/iomap.h>
+#elif defined(CONFIG_ARCH_APQ8064) || defined(CONFIG_ARCH_MSM8974)
+ #include <mach/msm_iomap.h>
+#endif
+#endif
+
.globl relocate_new_kernel
relocate_new_kernel:
@@ -52,6 +61,12 @@ relocate_new_kernel:
b 0b
2:
+#ifdef CONFIG_KEXEC_HARDBOOT
+ ldr r0, kexec_hardboot
+ teq r0, #0
+ bne hardboot
+#endif
+
/* Jump to relocated kernel */
mov lr,r1
mov r0,#0
@@ -60,6 +75,52 @@ relocate_new_kernel:
ARM( mov pc, lr )
THUMB( bx lr )
+#ifdef CONFIG_KEXEC_HARDBOOT
+hardboot:
+ /* Stash boot arguments in hardboot page:
+ * 0: KEXEC_HB_PAGE_MAGIC
+ * 4: kexec_start_address
+ * 8: kexec_mach_type
+ * 12: kexec_boot_atags
+ * 16: kexec_boot_atags_len
+ * 20: kexec_kernel_len */
+ ldr r0, =KEXEC_HB_PAGE_ADDR
+ str r1, [r0, #4]
+ ldr r1, kexec_mach_type
+ str r1, [r0, #8]
+ ldr r1, kexec_boot_atags
+ str r1, [r0, #12]
+ ldr r1, kexec_boot_atags_len
+ str r1, [r0, #16]
+ ldr r1, kexec_kernel_len
+ str r1, [r0, #20]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ str r1, [r0]
+
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ ldr r0, =TEGRA_PMC_BASE
+ ldr r1, [r0]
+ orr r1, r1, #0x10
+ str r1, [r0]
+loop: b loop
+#elif defined(CONFIG_ARCH_APQ8064)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =APQ8064_TLMM_PHYS
+ mov r1, #0
+ str r1, [r0, #0x820] @ PSHOLD_CTL_SU
+loop: b loop
+#elif defined(CONFIG_ARCH_MSM8974)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =MSM8974_MPM2_PSHOLD_PHYS
+ mov r1, #0
+ str r1, [r0, #0]
+loop: b loop
+#else
+#error "No reboot method defined for hardboot."
+#endif
+
+ .ltorg
+#endif
.align
.globl kexec_start_address
@@ -79,6 +140,20 @@ kexec_mach_type:
kexec_boot_atags:
.long 0x0
+#ifdef CONFIG_KEXEC_HARDBOOT
+ .globl kexec_boot_atags_len
+kexec_boot_atags_len:
+ .long 0x0
+
+ .globl kexec_kernel_len
+kexec_kernel_len:
+ .long 0x0
+
+ .globl kexec_hardboot
+kexec_hardboot:
+ .long 0x0
+#endif
+
relocate_new_kernel_end:
.globl relocate_new_kernel_size
diff --git a/arch/arm/mach-msm/include/mach/memory.h b/arch/arm/mach-msm/include/mach/memory.h
index 9225230..1c87b96 100644
--- a/arch/arm/mach-msm/include/mach/memory.h
+++ b/arch/arm/mach-msm/include/mach/memory.h
@@ -20,6 +20,22 @@
/* physical offset of RAM */
#define PLAT_PHYS_OFFSET UL(CONFIG_PHYS_OFFSET)
+#if defined(CONFIG_KEXEC_HARDBOOT)
+#if defined(CONFIG_MACH_APQ8064_FLO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88C00000)
+#elif defined(CONFIG_MACH_APQ8064_MAKO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88600000)
+#elif defined(CONFIG_MACH_MSM8974_HAMMERHEAD)
+#define KEXEC_HB_PAGE_ADDR UL(0x10100000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#elif defined(CONFIG_MACH_OPPO_MSM8974)
+#define KEXEC_HB_PAGE_ADDR UL(0x2F600000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#else
+#error "Adress for kexec hardboot page not defined"
+#endif
+#endif
+
#ifndef __ASSEMBLY__
void clean_and_invalidate_caches(unsigned long, unsigned long, unsigned long);
void clean_caches(unsigned long, unsigned long, unsigned long);
diff --git a/arch/arm/mach-msm/oppo/board-8974-oppo.c b/arch/arm/mach-msm/oppo/board-8974-oppo.c
index eb24545..10bbbda 100644
--- a/arch/arm/mach-msm/oppo/board-8974-oppo.c
+++ b/arch/arm/mach-msm/oppo/board-8974-oppo.c
@@ -54,6 +54,13 @@
#include <linux/pcb_version.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/setup.h>
+#include <asm/memory.h>
+#include <linux/memblock.h>
+#define OPPO_PERSISTENT_RAM_SIZE (SZ_1M)
+#endif
+
static struct platform_device *ram_console_dev;
static struct persistent_ram_descriptor msm_prd[] __initdata = {
@@ -72,6 +79,26 @@ static struct persistent_ram msm_pr __initdata = {
void __init msm_8974_reserve(void)
{
+#ifdef CONFIG_KEXEC_HARDBOOT
+ // Reserve space for hardboot page - just after ram_console,
+ // at the start of second memory bank
+ int ret;
+ phys_addr_t start;
+ struct membank* bank;
+
+ if (meminfo.nr_banks < 2) {
+ pr_err("%s: not enough membank\n", __func__);
+ return;
+ }
+
+ bank = &meminfo.bank[1];
+ start = bank->start + SZ_1M + OPPO_PERSISTENT_RAM_SIZE;
+ ret = memblock_remove(start, SZ_1M);
+ if(!ret)
+ pr_info("Hardboot page reserved at 0x%X\n", start);
+ else
+ pr_err("Failed to reserve space for hardboot page at 0x%X!\n", start);
+#endif
persistent_ram_early_init(&msm_pr);
of_scan_flat_dt(dt_scan_for_memory_reserve, NULL);
}
diff --git a/arch/arm/mach-msm/restart.c b/arch/arm/mach-msm/restart.c
index a04ab8d..fe89976 100644
--- a/arch/arm/mach-msm/restart.c
+++ b/arch/arm/mach-msm/restart.c
@@ -38,6 +38,10 @@
#include "timer.h"
#include "wdog_debug.h"
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/kexec.h>
+#endif
+
#define WDT0_RST 0x38
#define WDT0_EN 0x40
#define WDT0_BARK_TIME 0x4C
@@ -373,6 +377,26 @@ static int __init msm_pmic_restart_init(void)
late_initcall(msm_pmic_restart_init);
+#ifdef CONFIG_KEXEC_HARDBOOT
+static void msm_kexec_hardboot_hook(void)
+{
+ set_dload_mode(0);
+
+ // Set PMIC to restart-on-poweroff
+ pm8xxx_reset_pwr_off(1);
+
+ // These are executed on normal reboot, but with kexec-hardboot,
+ // they reboot/panic the system immediately.
+#if 0
+ qpnp_pon_system_pwr_off(PON_POWER_OFF_WARM_RESET);
+
+ /* Needed to bypass debug image on some chips */
+ msm_disable_wdog_debug();
+ halt_spmi_pmic_arbiter();
+#endif
+}
+#endif
+
static int __init msm_restart_init(void)
{
#ifdef CONFIG_MSM_DLOAD_MODE
@@ -392,6 +416,10 @@ static int __init msm_restart_init(void)
if (scm_is_call_available(SCM_SVC_PWR, SCM_IO_DISABLE_PMIC_ARBITER) > 0)
scm_pmic_arbiter_disable_supported = true;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ kexec_hardboot_hook = msm_kexec_hardboot_hook;
+#endif
+
return 0;
}
early_initcall(msm_restart_init);
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index af84a25..a4509ad 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -111,6 +111,10 @@ struct kimage {
#define KEXEC_TYPE_CRASH 1
unsigned int preserve_context : 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ unsigned int hardboot : 1;
+#endif
+
#ifdef ARCH_HAS_KIMAGE_ARCH
struct kimage_arch arch;
#endif
@@ -178,6 +182,11 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ON_CRASH 0x00000001
#define KEXEC_PRESERVE_CONTEXT 0x00000002
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+#define KEXEC_HARDBOOT 0x00000004
+#endif
+
#define KEXEC_ARCH_MASK 0xffff0000
/* These values match the ELF architecture values.
@@ -196,10 +205,14 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ARCH_MIPS ( 8 << 16)
/* List of defined/legal kexec flags */
-#ifndef CONFIG_KEXEC_JUMP
-#define KEXEC_FLAGS KEXEC_ON_CRASH
-#else
+#if defined(CONFIG_KEXEC_JUMP) && defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT | KEXEC_HARDBOOT)
+#elif defined(CONFIG_KEXEC_JUMP)
#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT)
+#elif defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_HARDBOOT)
+#else
+#define KEXEC_FLAGS (KEXEC_ON_CRASH)
#endif
#define VMCOREINFO_BYTES (4096)
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 4e2e472..aef7893 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -1004,6 +1004,10 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
if (flags & KEXEC_PRESERVE_CONTEXT)
image->preserve_context = 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if (flags & KEXEC_HARDBOOT)
+ image->hardboot = 1;
+#endif
result = machine_kexec_prepare(image);
if (result)
goto out;

View file

@ -0,0 +1,706 @@
From 99be1d1cfc831583d6ebb80c98cb7b97e7f26bfd Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:57 -0400
Subject: [PATCH] Overclocked to 2.8Ghz, underclocked to 268Mhz
---
arch/arm/boot/dts/msm8974-v2.dtsi | 2 +-
arch/arm/boot/dts/msm8974pro-pm8941.dtsi | 8 +-
.../arm/boot/dts/msm8974pro-pma8084-regulator.dtsi | 16 +-
arch/arm/boot/dts/msm8974pro.dtsi | 190 ++++++++++++++++++---
4 files changed, 179 insertions(+), 37 deletions(-)
diff --git a/arch/arm/boot/dts/msm8974-v2.dtsi b/arch/arm/boot/dts/msm8974-v2.dtsi
index 04769bd..8739175 100644
--- a/arch/arm/boot/dts/msm8974-v2.dtsi
+++ b/arch/arm/boot/dts/msm8974-v2.dtsi
@@ -135,7 +135,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,
diff --git a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
index 89939e6..d76e4bd 100644
--- a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
@@ -39,22 +39,22 @@
};
&krait0_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait1_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait2_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait3_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
diff --git a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
index 433d466..428a520 100644
--- a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
@@ -492,9 +492,9 @@
<0xf908a800 0x1000>; /* APCS_ALIAS0_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -508,9 +508,9 @@
<0xf909a800 0x1000>; /* APCS_ALIAS1_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -524,9 +524,9 @@
<0xf90aa800 0x1000>; /* APCS_ALIAS2_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -540,9 +540,9 @@
<0xf90ba800 0x1000>; /* APCS_ALIAS3_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
diff --git a/arch/arm/boot/dts/msm8974pro.dtsi b/arch/arm/boot/dts/msm8974pro.dtsi
index c50b379..ebb5112 100644
--- a/arch/arm/boot/dts/msm8974pro.dtsi
+++ b/arch/arm/boot/dts/msm8974pro.dtsi
@@ -90,6 +90,7 @@
qcom,clock-krait@f9016000 {
qcom,speed1-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -121,6 +122,7 @@
qcom,speed1-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -152,6 +154,7 @@
qcom,speed1-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -183,6 +186,7 @@
qcom,speed1-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -214,6 +218,7 @@
qcom,speed1-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -245,6 +250,7 @@
qcom,speed1-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -276,6 +282,7 @@
qcom,speed1-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -307,6 +314,7 @@
qcom,speed3-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -337,10 +345,14 @@
< 2265600000 1065000 700 >,
< 2342400000 1080000 734 >,
< 2419200000 1095000 769 >,
- < 2457600000 1100000 785 >;
+ < 2457600000 1100000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -371,10 +383,14 @@
< 2265600000 1040000 700 >,
< 2342400000 1055000 734 >,
< 2419200000 1070000 769 >,
- < 2457600000 1075000 785 >;
+ < 2457600000 1075000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -405,10 +421,14 @@
< 2265600000 1015000 700 >,
< 2342400000 1030000 734 >,
< 2419200000 1045000 769 >,
- < 2457600000 1050000 785 >;
+ < 2457600000 1050000 785 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1195000 900 >,
+ < 2880000000 1225000 937 >;
qcom,speed3-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -439,10 +459,14 @@
< 2265600000 990000 700 >,
< 2342400000 1005000 734 >,
< 2419200000 1020000 769 >,
- < 2457600000 1025000 785 >;
+ < 2457600000 1025000 785 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -473,10 +497,14 @@
< 2265600000 965000 700 >,
< 2342400000 980000 734 >,
< 2419200000 995000 769 >,
- < 2457600000 1000000 785 >;
+ < 2457600000 1000000 785 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -507,10 +535,14 @@
< 2265600000 940000 700 >,
< 2342400000 955000 734 >,
< 2419200000 970000 769 >,
- < 2457600000 975000 785 >;
+ < 2457600000 975000 785 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -541,10 +573,14 @@
< 2265600000 915000 700 >,
< 2342400000 930000 734 >,
< 2419200000 945000 769 >,
- < 2457600000 950000 785 >;
+ < 2457600000 950000 785 >,
+ < 2572800000 1010000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed1-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 810000 87 >,
< 422400000 820000 108 >,
@@ -576,6 +612,7 @@
qcom,speed1-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 810000 108 >,
@@ -607,6 +644,7 @@
qcom,speed1-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -638,6 +676,7 @@
qcom,speed1-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -669,6 +708,7 @@
qcom,speed1-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -700,6 +740,7 @@
qcom,speed1-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -731,6 +772,7 @@
qcom,speed1-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -762,6 +804,7 @@
qcom,speed1-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -793,6 +836,7 @@
qcom,speed1-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -824,6 +868,7 @@
qcom,speed1-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -855,6 +900,7 @@
qcom,speed1-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -886,6 +932,7 @@
qcom,speed1-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -917,6 +964,7 @@
qcom,speed1-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -948,6 +996,7 @@
qcom,speed1-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -979,6 +1028,7 @@
qcom,speed1-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1010,6 +1060,7 @@
qcom,speed1-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1041,6 +1092,7 @@
qcom,speed3-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1071,10 +1123,14 @@
< 2265600000 1085000 716 >,
< 2342400000 1100000 751 >,
< 2419200000 1115000 786 >,
- < 2457600000 1120000 802 >;
+ < 2457600000 1120000 802 >,
+ < 2572800000 1175000 827 >,
+ < 2726400000 1225000 900 >,
+ < 2880000000 1265000 937 >;
qcom,speed3-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1105,10 +1161,14 @@
< 2265600000 1075000 716 >,
< 2342400000 1090000 751 >,
< 2419200000 1105000 786 >,
- < 2457600000 1110000 802 >;
+ < 2457600000 1110000 802 >,
+ < 2572800000 1165000 827 >,
+ < 2726400000 1215000 900 >,
+ < 2880000000 1245000 937 >;
qcom,speed3-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1139,10 +1199,14 @@
< 2265600000 1065000 716 >,
< 2342400000 1080000 751 >,
< 2419200000 1095000 786 >,
- < 2457600000 1100000 802 >;
+ < 2457600000 1100000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1173,10 +1237,14 @@
< 2265600000 1055000 716 >,
< 2342400000 1070000 751 >,
< 2419200000 1085000 786 >,
- < 2457600000 1090000 802 >;
+ < 2457600000 1090000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1207,10 +1275,14 @@
< 2265600000 1045000 716 >,
< 2342400000 1060000 751 >,
< 2419200000 1075000 786 >,
- < 2457600000 1080000 802 >;
+ < 2457600000 1080000 802 >,
+ < 2572800000 1135000 827 >,
+ < 2726400000 1165000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1241,10 +1313,14 @@
< 2265600000 1035000 716 >,
< 2342400000 1050000 751 >,
< 2419200000 1065000 786 >,
- < 2457600000 1070000 802 >;
+ < 2457600000 1070000 802 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1185000 937 >;
qcom,speed3-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1275,10 +1351,14 @@
< 2265600000 1025000 716 >,
< 2342400000 1040000 751 >,
< 2419200000 1055000 786 >,
- < 2457600000 1060000 802 >;
+ < 2457600000 1060000 802 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1145000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed3-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1309,10 +1389,14 @@
< 2265600000 1015000 716 >,
< 2342400000 1030000 751 >,
< 2419200000 1045000 786 >,
- < 2457600000 1050000 802 >;
+ < 2457600000 1050000 802 >,
+ < 2572800000 1105000 827 >,
+ < 2726400000 1135000 900 >,
+ < 2880000000 1165000 937 >;
qcom,speed3-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1343,10 +1427,14 @@
< 2265600000 1005000 716 >,
< 2342400000 1020000 751 >,
< 2419200000 1035000 786 >,
- < 2457600000 1040000 802 >;
+ < 2457600000 1040000 802 >,
+ < 2572800000 1095000 827 >,
+ < 2726400000 1125000 900 >,
+ < 2880000000 1155000 937 >;
qcom,speed3-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1377,10 +1465,14 @@
< 2265600000 995000 716 >,
< 2342400000 1010000 751 >,
< 2419200000 1025000 786 >,
- < 2457600000 1030000 802 >;
+ < 2457600000 1030000 802 >,
+ < 2572800000 1085000 827 >,
+ < 2726400000 1115000 900 >,
+ < 2880000000 1145000 937 >;
qcom,speed3-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1411,10 +1503,14 @@
< 2265600000 985000 716 >,
< 2342400000 1000000 751 >,
< 2419200000 1015000 786 >,
- < 2457600000 1020000 802 >;
+ < 2457600000 1020000 802 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1105000 900 >,
+ < 2880000000 1135000 937 >;
qcom,speed3-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1445,10 +1541,14 @@
< 2265600000 975000 716 >,
< 2342400000 990000 751 >,
< 2419200000 1005000 786 >,
- < 2457600000 1010000 802 >;
+ < 2457600000 1010000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1095000 900 >,
+ < 2880000000 1125000 937 >;
qcom,speed3-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1479,10 +1579,14 @@
< 2265600000 965000 716 >,
< 2342400000 980000 751 >,
< 2419200000 995000 786 >,
- < 2457600000 1000000 802 >;
+ < 2457600000 1000000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1085000 900 >,
+ < 2880000000 1115000 937 >;
qcom,speed3-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1513,10 +1617,14 @@
< 2265600000 955000 716 >,
< 2342400000 970000 751 >,
< 2419200000 985000 786 >,
- < 2457600000 990000 802 >;
+ < 2457600000 990000 802 >,
+ < 2572800000 1045000 827 >,
+ < 2726400000 1065000 900 >,
+ < 2880000000 1095000 937 >;
qcom,speed3-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1547,10 +1655,14 @@
< 2265600000 945000 716 >,
< 2342400000 960000 751 >,
< 2419200000 975000 786 >,
- < 2457600000 980000 802 >;
+ < 2457600000 980000 802 >,
+ < 2572800000 1035000 827 >,
+ < 2726400000 1055000 900 >,
+ < 2880000000 1085000 937 >;
qcom,speed3-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1581,9 +1693,39 @@
< 2265600000 935000 716 >,
< 2342400000 950000 751 >,
< 2419200000 965000 786 >,
- < 2457600000 970000 802 >;
+ < 2457600000 970000 802 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1045000 900 >,
+ < 2880000000 1075000 937 >;
};
+ qcom,msm-cpufreq@0 {
+ reg = <0 4>;
+ compatible = "qcom,msm-cpufreq";
+ qcom,cpufreq-table =
+ < 268800 /* 75 MHz */ >,
+ < 300000 /* 75 MHz */ >,
+ < 422400 /* 150 MHz */ >,
+ < 652800 /* 200 MHz */ >,
+ < 729600 /* 307 MHz */ >,
+ < 883200 /* 307 MHz */ >,
+ < 960000 /* 460 MHz */ >,
+ < 1036800 /* 460 MHz */ >,
+ < 1190400 /* 460 MHz */ >,
+ < 1267200 /* 614 MHz */ >,
+ < 1497600 /* 614 MHz */ >,
+ < 1574400 /* 800 MHz */ >,
+ < 1728000 /* 800 MHz */ >,
+ < 1958400 /* 931 MHz */ >,
+ < 2265600 /* 931 MHz */ >,
+ < 2342400 /* 931 MHz */ >,
+ < 2419200 /* 931 MHz */ >,
+ < 2457600 /* 931 MHz */ >,
+ < 2572800 /* 931 MHz */ >,
+ < 2726400 /* 931 MHz */ >,
+ < 2880000 /* 931 MHz */ >;
+ };
+
i2c@f9928000 { /* BLSP-1 QUP-6 */
cell-index = <3>;
compatible = "qcom,i2c-qup";
@@ -1751,7 +1893,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,

View file

@ -0,0 +1,48 @@
From ce0b0419372d65cbe99a8a5a611c03c7f6abc4b2 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:50:31 -0400
Subject: [PATCH] Update defconfig
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 009a34d..ed05004 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -125,8 +125,9 @@ CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
# CONFIG_RD_XZ is not set
# CONFIG_RD_LZO is not set
-# CONFIG_RD_LZ4 is not set
+CONFIG_RD_LZ4=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_CC_OPTIMIZE_MORE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_PANIC_TIMEOUT=5
@@ -190,7 +191,7 @@ CONFIG_SECCOMP_FILTER=y
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+CONFIG_MODULES=y
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
CONFIG_LBDAF=y
@@ -1779,12 +1780,12 @@ CONFIG_SERIAL_MSM_HS=y
#
# Diag Support
#
-# CONFIG_DIAG_CHAR is not set
+CONFIG_DIAG_CHAR=y
#
# DIAG traffic over USB
#
-# CONFIG_DIAG_OVER_USB is not set
+CONFIG_DIAG_OVER_USB=y
#
# SDIO support for DIAG

View file

@ -0,0 +1,577 @@
From c0209d6b15d2fc752741fe0e04b227990e74377f Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:21 -0400
Subject: [PATCH] Implement KEXEC
---
arch/arm/Kconfig | 26 ++++++++++
arch/arm/boot/compressed/head.S | 64 ++++++++++++++++++++++++
arch/arm/configs/cyanogenmod_bacon_defconfig | 6 ++-
arch/arm/include/asm/kexec.h | 8 +++
arch/arm/kernel/machine_kexec.c | 58 +++++++++++++++++++--
arch/arm/kernel/relocate_kernel.S | 75 ++++++++++++++++++++++++++++
arch/arm/mach-msm/include/mach/memory.h | 16 ++++++
arch/arm/mach-msm/oppo/board-8974-oppo.c | 27 ++++++++++
arch/arm/mach-msm/restart.c | 28 +++++++++++
include/linux/kexec.h | 19 +++++--
kernel/kexec.c | 4 ++
11 files changed, 322 insertions(+), 9 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 37d3c6d..f801a19 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -2299,6 +2299,32 @@ config ATAGS_PROC
Should the atags used to boot the kernel be exported in an "atags"
file in procfs. Useful with kexec.
+config KEXEC_HARDBOOT
+ bool "Support hard booting to a kexec kernel"
+ depends on KEXEC
+ help
+ Allows hard booting (i.e., with a full hardware reboot) to a kernel
+ previously loaded in memory by kexec. This works around the problem of
+ soft-booted kernel hangs due to improper device shutdown and/or
+ reinitialization. Support is comprised of two components:
+
+ First, a "hardboot" flag is added to the kexec syscall to force a hard
+ reboot in relocate_new_kernel() (which requires machine-specific assembly
+ code). This also requires the kexec userspace tool to load the kexec'd
+ kernel in memory region left untouched by the bootloader (i.e., not
+ explicitly cleared and not overwritten by the boot kernel). Just prior
+ to reboot, the kexec kernel arguments are stashed in a machine-specific
+ memory page that must also be preserved. Note that this hardboot page
+ need not be reserved during regular kernel execution.
+
+ Second, the zImage decompresor of the boot (bootloader-loaded) kernel is
+ modified to check the hardboot page for fresh kexec arguments, and if
+ present, attempts to jump to the kexec'd kernel preserved in memory.
+
+ Note that hardboot support is only required in the boot kernel and any
+ kernel capable of performing a hardboot kexec. It is _not_ required by a
+ kexec'd kernel.
+
config CRASH_DUMP
bool "Build kdump crash kernel (EXPERIMENTAL)"
depends on EXPERIMENTAL
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index d3892ef..be05aa1 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -11,6 +11,12 @@
#include <linux/linkage.h>
.arch armv7-a
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #include <asm/kexec.h>
+ #include <asm/memory.h>
+#endif
+
/*
* Debugging stuff
*
@@ -136,6 +142,64 @@ start:
1: mov r7, r1 @ save architecture ID
mov r8, r2 @ save atags pointer
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Check hardboot page for a kexec kernel. */
+ ldr r3, =KEXEC_HB_PAGE_ADDR
+ ldr r0, [r3]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ teq r0, r1
+ bne not_booting_other
+
+ /* Clear hardboot page magic to avoid boot loop. */
+ mov r0, #0
+ str r0, [r3]
+
+ /*
+ * Copy dtb from location up high in memory to default location.
+ * Kernel freezes if this is not done.
+ */
+ ldr r1, [r3, #12] @ kexec_boot_atags
+ ldr r2, [r3, #16] @ kexec_boot_atags_len
+ mov r5, #0 @ iterator
+catags_cpy:
+ ldr r0, [r1, r5] @ from kexec_boot_atags
+ str r0, [r8, r5] @ to atags_pointer
+ add r5, r5, #4
+ cmp r5, r2
+ blo catags_cpy
+
+#ifdef KEXEC_HB_KERNEL_LOC
+ /*
+ * Copy kernel from location up high in memory to location in first 128MB.
+ * Bootloader on hammerhead erases first 128MB of ram on reboot, so it can't
+ * be in there before reboot, but decompressing in location above 128MB takes
+ * a long time. This memcpy is much quicker, for some reason.
+ */
+ ldr r2, [r3, #4] @ kexec_start_address
+ ldr r4, [r3, #20] @ kexec_kernel_len
+ ldr r6, =KEXEC_HB_KERNEL_LOC @ target
+ mov r5, #0 @ iterator
+kernel_cpy:
+ ldr r0, [r2, r5] @ from kexec_start_address
+ str r0, [r6, r5] @ to KEXEC_HB_KERNEL_LOC
+ add r5, r5, #4
+ cmp r5, r4
+ blo kernel_cpy
+#else
+ ldr r6, [r3, #4] @ kexec_start_address
+#endif
+
+ /* set registers and boot kexecd' kernel */
+ mov r0, #0
+ ldr r1, [r3, #8] @ kexec_mach_type
+ mov r2, r8 @ atags pointer
+ mov pc, r6
+
+ .ltorg
+
+not_booting_other:
+#endif
+
#ifndef __ARM_ARCH_2__
/*
* Booting from Angel - need to enter SVC mode and disable
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 1fd8a93..5f67061 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -693,7 +693,9 @@ CONFIG_ZBOOT_ROM_BSS=0
# CONFIG_ARM_APPENDED_DTB is not set
CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
+CONFIG_KEXEC_HARDBOOT=y
+CONFIG_ATAGS_PROC=n
# CONFIG_CRASH_DUMP is not set
# CONFIG_AUTO_ZRELADDR is not set
@@ -1283,7 +1285,7 @@ CONFIG_OF=y
#
# Device Tree and Open Firmware support
#
-# CONFIG_PROC_DEVICETREE is not set
+CONFIG_PROC_DEVICETREE=y
# CONFIG_OF_SELFTEST is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
diff --git a/arch/arm/include/asm/kexec.h b/arch/arm/include/asm/kexec.h
index c2b9b4b..564c55b 100644
--- a/arch/arm/include/asm/kexec.h
+++ b/arch/arm/include/asm/kexec.h
@@ -17,6 +17,10 @@
#define KEXEC_ARM_ATAGS_OFFSET 0x1000
#define KEXEC_ARM_ZIMAGE_OFFSET 0x8000
+#ifdef CONFIG_KEXEC_HARDBOOT
+ #define KEXEC_HB_PAGE_MAGIC 0x4a5db007
+#endif
+
#ifndef __ASSEMBLY__
/**
@@ -53,6 +57,10 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
/* Function pointer to optional machine-specific reinitialization */
extern void (*kexec_reinit)(void);
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern void (*kexec_hardboot_hook)(void);
+#endif
+
#endif /* __ASSEMBLY__ */
#endif /* CONFIG_KEXEC */
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c
index 357b651..29cdd2f 100644
--- a/arch/arm/kernel/machine_kexec.c
+++ b/arch/arm/kernel/machine_kexec.c
@@ -14,6 +14,9 @@
#include <asm/cacheflush.h>
#include <asm/mach-types.h>
#include <asm/system_misc.h>
+#include <linux/memblock.h>
+#include <linux/of_fdt.h>
+#include <asm/mmu_writeable.h>
extern const unsigned char relocate_new_kernel[];
extern const unsigned int relocate_new_kernel_size;
@@ -22,6 +25,12 @@ extern unsigned long kexec_start_address;
extern unsigned long kexec_indirection_page;
extern unsigned long kexec_mach_type;
extern unsigned long kexec_boot_atags;
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern unsigned long kexec_hardboot;
+extern unsigned long kexec_boot_atags_len;
+extern unsigned long kexec_kernel_len;
+void (*kexec_hardboot_hook)(void);
+#endif
static atomic_t waiting_for_crash_ipi;
@@ -32,6 +41,37 @@ static atomic_t waiting_for_crash_ipi;
int machine_kexec_prepare(struct kimage *image)
{
+ struct kexec_segment *current_segment;
+ __be32 header;
+ int i, err;
+
+ /* No segment at default ATAGs address. try to locate
+ * a dtb using magic */
+ for (i = 0; i < image->nr_segments; i++) {
+ current_segment = &image->segment[i];
+
+ err = memblock_is_region_memory(current_segment->mem,
+ current_segment->memsz);
+ if (!err)
+ return - EINVAL;
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if(current_segment->mem == image->start)
+ mem_text_write_kernel_word(&kexec_kernel_len, current_segment->memsz);
+#endif
+
+ err = get_user(header, (__be32*)current_segment->buf);
+ if (err)
+ return err;
+
+ if (be32_to_cpu(header) == OF_DT_HEADER)
+ {
+ mem_text_write_kernel_word(&kexec_boot_atags, current_segment->mem);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_boot_atags_len, current_segment->memsz);
+#endif
+ }
+ }
return 0;
}
@@ -123,10 +163,14 @@ void machine_kexec(struct kimage *image)
reboot_code_buffer = page_address(image->control_code_page);
/* Prepare parameters for reboot_code_buffer*/
- kexec_start_address = image->start;
- kexec_indirection_page = page_list;
- kexec_mach_type = machine_arch_type;
- kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
+ mem_text_write_kernel_word(&kexec_start_address, image->start);
+ mem_text_write_kernel_word(&kexec_indirection_page, page_list);
+ mem_text_write_kernel_word(&kexec_mach_type, machine_arch_type);
+ if (!kexec_boot_atags)
+ mem_text_write_kernel_word(&kexec_boot_atags, image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_hardboot, image->hardboot);
+#endif
/* copy our kernel relocation code to the control code page */
memcpy(reboot_code_buffer,
@@ -140,6 +184,12 @@ void machine_kexec(struct kimage *image)
if (kexec_reinit)
kexec_reinit();
+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Run any final machine-specific shutdown code. */
+ if (image->hardboot && kexec_hardboot_hook)
+ kexec_hardboot_hook();
+#endif
+
soft_restart(reboot_code_buffer_phys);
}
diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S
index d0cdedf..0e45ffc 100644
--- a/arch/arm/kernel/relocate_kernel.S
+++ b/arch/arm/kernel/relocate_kernel.S
@@ -4,6 +4,15 @@
#include <asm/kexec.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/memory.h>
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ #include <mach/iomap.h>
+#elif defined(CONFIG_ARCH_APQ8064) || defined(CONFIG_ARCH_MSM8974)
+ #include <mach/msm_iomap.h>
+#endif
+#endif
+
.globl relocate_new_kernel
relocate_new_kernel:
@@ -52,6 +61,12 @@ relocate_new_kernel:
b 0b
2:
+#ifdef CONFIG_KEXEC_HARDBOOT
+ ldr r0, kexec_hardboot
+ teq r0, #0
+ bne hardboot
+#endif
+
/* Jump to relocated kernel */
mov lr,r1
mov r0,#0
@@ -60,6 +75,52 @@ relocate_new_kernel:
ARM( mov pc, lr )
THUMB( bx lr )
+#ifdef CONFIG_KEXEC_HARDBOOT
+hardboot:
+ /* Stash boot arguments in hardboot page:
+ * 0: KEXEC_HB_PAGE_MAGIC
+ * 4: kexec_start_address
+ * 8: kexec_mach_type
+ * 12: kexec_boot_atags
+ * 16: kexec_boot_atags_len
+ * 20: kexec_kernel_len */
+ ldr r0, =KEXEC_HB_PAGE_ADDR
+ str r1, [r0, #4]
+ ldr r1, kexec_mach_type
+ str r1, [r0, #8]
+ ldr r1, kexec_boot_atags
+ str r1, [r0, #12]
+ ldr r1, kexec_boot_atags_len
+ str r1, [r0, #16]
+ ldr r1, kexec_kernel_len
+ str r1, [r0, #20]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ str r1, [r0]
+
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ ldr r0, =TEGRA_PMC_BASE
+ ldr r1, [r0]
+ orr r1, r1, #0x10
+ str r1, [r0]
+loop: b loop
+#elif defined(CONFIG_ARCH_APQ8064)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =APQ8064_TLMM_PHYS
+ mov r1, #0
+ str r1, [r0, #0x820] @ PSHOLD_CTL_SU
+loop: b loop
+#elif defined(CONFIG_ARCH_MSM8974)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =MSM8974_MPM2_PSHOLD_PHYS
+ mov r1, #0
+ str r1, [r0, #0]
+loop: b loop
+#else
+#error "No reboot method defined for hardboot."
+#endif
+
+ .ltorg
+#endif
.align
.globl kexec_start_address
@@ -79,6 +140,20 @@ kexec_mach_type:
kexec_boot_atags:
.long 0x0
+#ifdef CONFIG_KEXEC_HARDBOOT
+ .globl kexec_boot_atags_len
+kexec_boot_atags_len:
+ .long 0x0
+
+ .globl kexec_kernel_len
+kexec_kernel_len:
+ .long 0x0
+
+ .globl kexec_hardboot
+kexec_hardboot:
+ .long 0x0
+#endif
+
relocate_new_kernel_end:
.globl relocate_new_kernel_size
diff --git a/arch/arm/mach-msm/include/mach/memory.h b/arch/arm/mach-msm/include/mach/memory.h
index 9225230..1c87b96 100644
--- a/arch/arm/mach-msm/include/mach/memory.h
+++ b/arch/arm/mach-msm/include/mach/memory.h
@@ -20,6 +20,22 @@
/* physical offset of RAM */
#define PLAT_PHYS_OFFSET UL(CONFIG_PHYS_OFFSET)
+#if defined(CONFIG_KEXEC_HARDBOOT)
+#if defined(CONFIG_MACH_APQ8064_FLO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88C00000)
+#elif defined(CONFIG_MACH_APQ8064_MAKO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88600000)
+#elif defined(CONFIG_MACH_MSM8974_HAMMERHEAD)
+#define KEXEC_HB_PAGE_ADDR UL(0x10100000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#elif defined(CONFIG_MACH_OPPO_MSM8974)
+#define KEXEC_HB_PAGE_ADDR UL(0x2F600000)
+#define KEXEC_HB_KERNEL_LOC UL(0x3208000)
+#else
+#error "Adress for kexec hardboot page not defined"
+#endif
+#endif
+
#ifndef __ASSEMBLY__
void clean_and_invalidate_caches(unsigned long, unsigned long, unsigned long);
void clean_caches(unsigned long, unsigned long, unsigned long);
diff --git a/arch/arm/mach-msm/oppo/board-8974-oppo.c b/arch/arm/mach-msm/oppo/board-8974-oppo.c
index eb24545..10bbbda 100644
--- a/arch/arm/mach-msm/oppo/board-8974-oppo.c
+++ b/arch/arm/mach-msm/oppo/board-8974-oppo.c
@@ -54,6 +54,13 @@
#include <linux/pcb_version.h>
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/setup.h>
+#include <asm/memory.h>
+#include <linux/memblock.h>
+#define OPPO_PERSISTENT_RAM_SIZE (SZ_1M)
+#endif
+
static struct platform_device *ram_console_dev;
static struct persistent_ram_descriptor msm_prd[] __initdata = {
@@ -72,6 +79,26 @@ static struct persistent_ram msm_pr __initdata = {
void __init msm_8974_reserve(void)
{
+#ifdef CONFIG_KEXEC_HARDBOOT
+ // Reserve space for hardboot page - just after ram_console,
+ // at the start of second memory bank
+ int ret;
+ phys_addr_t start;
+ struct membank* bank;
+
+ if (meminfo.nr_banks < 2) {
+ pr_err("%s: not enough membank\n", __func__);
+ return;
+ }
+
+ bank = &meminfo.bank[1];
+ start = bank->start + SZ_1M + OPPO_PERSISTENT_RAM_SIZE;
+ ret = memblock_remove(start, SZ_1M);
+ if(!ret)
+ pr_info("Hardboot page reserved at 0x%X\n", start);
+ else
+ pr_err("Failed to reserve space for hardboot page at 0x%X!\n", start);
+#endif
persistent_ram_early_init(&msm_pr);
of_scan_flat_dt(dt_scan_for_memory_reserve, NULL);
}
diff --git a/arch/arm/mach-msm/restart.c b/arch/arm/mach-msm/restart.c
index a04ab8d..fe89976 100644
--- a/arch/arm/mach-msm/restart.c
+++ b/arch/arm/mach-msm/restart.c
@@ -38,6 +38,10 @@
#include "timer.h"
#include "wdog_debug.h"
+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/kexec.h>
+#endif
+
#define WDT0_RST 0x38
#define WDT0_EN 0x40
#define WDT0_BARK_TIME 0x4C
@@ -373,6 +377,26 @@ static int __init msm_pmic_restart_init(void)
late_initcall(msm_pmic_restart_init);
+#ifdef CONFIG_KEXEC_HARDBOOT
+static void msm_kexec_hardboot_hook(void)
+{
+ set_dload_mode(0);
+
+ // Set PMIC to restart-on-poweroff
+ pm8xxx_reset_pwr_off(1);
+
+ // These are executed on normal reboot, but with kexec-hardboot,
+ // they reboot/panic the system immediately.
+#if 0
+ qpnp_pon_system_pwr_off(PON_POWER_OFF_WARM_RESET);
+
+ /* Needed to bypass debug image on some chips */
+ msm_disable_wdog_debug();
+ halt_spmi_pmic_arbiter();
+#endif
+}
+#endif
+
static int __init msm_restart_init(void)
{
#ifdef CONFIG_MSM_DLOAD_MODE
@@ -392,6 +416,10 @@ static int __init msm_restart_init(void)
if (scm_is_call_available(SCM_SVC_PWR, SCM_IO_DISABLE_PMIC_ARBITER) > 0)
scm_pmic_arbiter_disable_supported = true;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ kexec_hardboot_hook = msm_kexec_hardboot_hook;
+#endif
+
return 0;
}
early_initcall(msm_restart_init);
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index af84a25..a4509ad 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -111,6 +111,10 @@ struct kimage {
#define KEXEC_TYPE_CRASH 1
unsigned int preserve_context : 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ unsigned int hardboot : 1;
+#endif
+
#ifdef ARCH_HAS_KIMAGE_ARCH
struct kimage_arch arch;
#endif
@@ -178,6 +182,11 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ON_CRASH 0x00000001
#define KEXEC_PRESERVE_CONTEXT 0x00000002
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+#define KEXEC_HARDBOOT 0x00000004
+#endif
+
#define KEXEC_ARCH_MASK 0xffff0000
/* These values match the ELF architecture values.
@@ -196,10 +205,14 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ARCH_MIPS ( 8 << 16)
/* List of defined/legal kexec flags */
-#ifndef CONFIG_KEXEC_JUMP
-#define KEXEC_FLAGS KEXEC_ON_CRASH
-#else
+#if defined(CONFIG_KEXEC_JUMP) && defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT | KEXEC_HARDBOOT)
+#elif defined(CONFIG_KEXEC_JUMP)
#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT)
+#elif defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_HARDBOOT)
+#else
+#define KEXEC_FLAGS (KEXEC_ON_CRASH)
#endif
#define VMCOREINFO_BYTES (4096)
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 4e2e472..aef7893 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -1004,6 +1004,10 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
if (flags & KEXEC_PRESERVE_CONTEXT)
image->preserve_context = 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if (flags & KEXEC_HARDBOOT)
+ image->hardboot = 1;
+#endif
result = machine_kexec_prepare(image);
if (result)
goto out;

View file

@ -0,0 +1,706 @@
From e914463298097e12f8504fa8215246ac70e59831 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:49:57 -0400
Subject: [PATCH] Overclocked to 2.8Ghz, underclocked to 268Mhz
---
arch/arm/boot/dts/msm8974-v2.dtsi | 2 +-
arch/arm/boot/dts/msm8974pro-pm8941.dtsi | 8 +-
.../arm/boot/dts/msm8974pro-pma8084-regulator.dtsi | 16 +-
arch/arm/boot/dts/msm8974pro.dtsi | 190 ++++++++++++++++++---
4 files changed, 179 insertions(+), 37 deletions(-)
diff --git a/arch/arm/boot/dts/msm8974-v2.dtsi b/arch/arm/boot/dts/msm8974-v2.dtsi
index 04769bd..8739175 100644
--- a/arch/arm/boot/dts/msm8974-v2.dtsi
+++ b/arch/arm/boot/dts/msm8974-v2.dtsi
@@ -135,7 +135,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,
diff --git a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
index 89939e6..d76e4bd 100644
--- a/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pm8941.dtsi
@@ -39,22 +39,22 @@
};
&krait0_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait1_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait2_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
&krait3_vreg {
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,ldo-delta-voltage = <12500>;
};
diff --git a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
index 433d466..428a520 100644
--- a/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
+++ b/arch/arm/boot/dts/msm8974pro-pma8084-regulator.dtsi
@@ -492,9 +492,9 @@
<0xf908a800 0x1000>; /* APCS_ALIAS0_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -508,9 +508,9 @@
<0xf909a800 0x1000>; /* APCS_ALIAS1_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -524,9 +524,9 @@
<0xf90aa800 0x1000>; /* APCS_ALIAS2_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
@@ -540,9 +540,9 @@
<0xf90ba800 0x1000>; /* APCS_ALIAS3_KPSS_MDD */
reg-names = "acs", "mdd";
regulator-min-microvolt = <500000>;
- regulator-max-microvolt = <1120000>;
+ regulator-max-microvolt = <1250000>;
qcom,headroom-voltage = <150000>;
- qcom,retention-voltage = <675000>;
+ qcom,retention-voltage = <600000>;
qcom,ldo-default-voltage = <750000>;
qcom,ldo-threshold-voltage = <850000>;
qcom,ldo-delta-voltage = <12500>;
diff --git a/arch/arm/boot/dts/msm8974pro.dtsi b/arch/arm/boot/dts/msm8974pro.dtsi
index c50b379..ebb5112 100644
--- a/arch/arm/boot/dts/msm8974pro.dtsi
+++ b/arch/arm/boot/dts/msm8974pro.dtsi
@@ -90,6 +90,7 @@
qcom,clock-krait@f9016000 {
qcom,speed1-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -121,6 +122,7 @@
qcom,speed1-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 74 >,
< 345600000 775000 85 >,
< 422400000 775000 104 >,
@@ -152,6 +154,7 @@
qcom,speed1-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -183,6 +186,7 @@
qcom,speed1-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -214,6 +218,7 @@
qcom,speed1-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 74 >,
< 345600000 750000 85 >,
< 422400000 750000 104 >,
@@ -245,6 +250,7 @@
qcom,speed1-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -276,6 +282,7 @@
qcom,speed1-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 720000 68 >,
< 300000000 725000 74 >,
< 345600000 725000 85 >,
< 422400000 725000 104 >,
@@ -307,6 +314,7 @@
qcom,speed3-pvs0-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -337,10 +345,14 @@
< 2265600000 1065000 700 >,
< 2342400000 1080000 734 >,
< 2419200000 1095000 769 >,
- < 2457600000 1100000 785 >;
+ < 2457600000 1100000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs1-bin-v0 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -371,10 +383,14 @@
< 2265600000 1040000 700 >,
< 2342400000 1055000 734 >,
< 2419200000 1070000 769 >,
- < 2457600000 1075000 785 >;
+ < 2457600000 1075000 785 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1205000 900 >,
+ < 2880000000 1235000 937 >;
qcom,speed3-pvs2-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -405,10 +421,14 @@
< 2265600000 1015000 700 >,
< 2342400000 1030000 734 >,
< 2419200000 1045000 769 >,
- < 2457600000 1050000 785 >;
+ < 2457600000 1050000 785 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1195000 900 >,
+ < 2880000000 1225000 937 >;
qcom,speed3-pvs3-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -439,10 +459,14 @@
< 2265600000 990000 700 >,
< 2342400000 1005000 734 >,
< 2419200000 1020000 769 >,
- < 2457600000 1025000 785 >;
+ < 2457600000 1025000 785 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs4-bin-v0 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -473,10 +497,14 @@
< 2265600000 965000 700 >,
< 2342400000 980000 734 >,
< 2419200000 995000 769 >,
- < 2457600000 1000000 785 >;
+ < 2457600000 1000000 785 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs5-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -507,10 +535,14 @@
< 2265600000 940000 700 >,
< 2342400000 955000 734 >,
< 2419200000 970000 769 >,
- < 2457600000 975000 785 >;
+ < 2457600000 975000 785 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs6-bin-v0 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -541,10 +573,14 @@
< 2265600000 915000 700 >,
< 2342400000 930000 734 >,
< 2419200000 945000 769 >,
- < 2457600000 950000 785 >;
+ < 2457600000 950000 785 >,
+ < 2572800000 1010000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed1-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 810000 87 >,
< 422400000 820000 108 >,
@@ -576,6 +612,7 @@
qcom,speed1-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 810000 108 >,
@@ -607,6 +644,7 @@
qcom,speed1-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -638,6 +676,7 @@
qcom,speed1-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -669,6 +708,7 @@
qcom,speed1-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -700,6 +740,7 @@
qcom,speed1-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 108 >,
@@ -731,6 +772,7 @@
qcom,speed1-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -762,6 +804,7 @@
qcom,speed1-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -793,6 +836,7 @@
qcom,speed1-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -824,6 +868,7 @@
qcom,speed1-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -855,6 +900,7 @@
qcom,speed1-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -886,6 +932,7 @@
qcom,speed1-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -917,6 +964,7 @@
qcom,speed1-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -948,6 +996,7 @@
qcom,speed1-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 108 >,
@@ -979,6 +1028,7 @@
qcom,speed1-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1010,6 +1060,7 @@
qcom,speed1-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 108 >,
@@ -1041,6 +1092,7 @@
qcom,speed3-pvs0-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1071,10 +1123,14 @@
< 2265600000 1085000 716 >,
< 2342400000 1100000 751 >,
< 2419200000 1115000 786 >,
- < 2457600000 1120000 802 >;
+ < 2457600000 1120000 802 >,
+ < 2572800000 1175000 827 >,
+ < 2726400000 1225000 900 >,
+ < 2880000000 1265000 937 >;
qcom,speed3-pvs1-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1105,10 +1161,14 @@
< 2265600000 1075000 716 >,
< 2342400000 1090000 751 >,
< 2419200000 1105000 786 >,
- < 2457600000 1110000 802 >;
+ < 2457600000 1110000 802 >,
+ < 2572800000 1165000 827 >,
+ < 2726400000 1215000 900 >,
+ < 2880000000 1245000 937 >;
qcom,speed3-pvs2-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1139,10 +1199,14 @@
< 2265600000 1065000 716 >,
< 2342400000 1080000 751 >,
< 2419200000 1095000 786 >,
- < 2457600000 1100000 802 >;
+ < 2457600000 1100000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1185000 900 >,
+ < 2880000000 1215000 937 >;
qcom,speed3-pvs3-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1173,10 +1237,14 @@
< 2265600000 1055000 716 >,
< 2342400000 1070000 751 >,
< 2419200000 1085000 786 >,
- < 2457600000 1090000 802 >;
+ < 2457600000 1090000 802 >,
+ < 2572800000 1145000 827 >,
+ < 2726400000 1175000 900 >,
+ < 2880000000 1205000 937 >;
qcom,speed3-pvs4-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1207,10 +1275,14 @@
< 2265600000 1045000 716 >,
< 2342400000 1060000 751 >,
< 2419200000 1075000 786 >,
- < 2457600000 1080000 802 >;
+ < 2457600000 1080000 802 >,
+ < 2572800000 1135000 827 >,
+ < 2726400000 1165000 900 >,
+ < 2880000000 1195000 937 >;
qcom,speed3-pvs5-bin-v1 =
< 0 0 0 >,
+ < 268800000 795000 68 >,
< 300000000 800000 76 >,
< 345600000 800000 87 >,
< 422400000 800000 106 >,
@@ -1241,10 +1313,14 @@
< 2265600000 1035000 716 >,
< 2342400000 1050000 751 >,
< 2419200000 1065000 786 >,
- < 2457600000 1070000 802 >;
+ < 2457600000 1070000 802 >,
+ < 2572800000 1125000 827 >,
+ < 2726400000 1155000 900 >,
+ < 2880000000 1185000 937 >;
qcom,speed3-pvs6-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1275,10 +1351,14 @@
< 2265600000 1025000 716 >,
< 2342400000 1040000 751 >,
< 2419200000 1055000 786 >,
- < 2457600000 1060000 802 >;
+ < 2457600000 1060000 802 >,
+ < 2572800000 1115000 827 >,
+ < 2726400000 1145000 900 >,
+ < 2880000000 1175000 937 >;
qcom,speed3-pvs7-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1309,10 +1389,14 @@
< 2265600000 1015000 716 >,
< 2342400000 1030000 751 >,
< 2419200000 1045000 786 >,
- < 2457600000 1050000 802 >;
+ < 2457600000 1050000 802 >,
+ < 2572800000 1105000 827 >,
+ < 2726400000 1135000 900 >,
+ < 2880000000 1165000 937 >;
qcom,speed3-pvs8-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1343,10 +1427,14 @@
< 2265600000 1005000 716 >,
< 2342400000 1020000 751 >,
< 2419200000 1035000 786 >,
- < 2457600000 1040000 802 >;
+ < 2457600000 1040000 802 >,
+ < 2572800000 1095000 827 >,
+ < 2726400000 1125000 900 >,
+ < 2880000000 1155000 937 >;
qcom,speed3-pvs9-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1377,10 +1465,14 @@
< 2265600000 995000 716 >,
< 2342400000 1010000 751 >,
< 2419200000 1025000 786 >,
- < 2457600000 1030000 802 >;
+ < 2457600000 1030000 802 >,
+ < 2572800000 1085000 827 >,
+ < 2726400000 1115000 900 >,
+ < 2880000000 1145000 937 >;
qcom,speed3-pvs10-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1411,10 +1503,14 @@
< 2265600000 985000 716 >,
< 2342400000 1000000 751 >,
< 2419200000 1015000 786 >,
- < 2457600000 1020000 802 >;
+ < 2457600000 1020000 802 >,
+ < 2572800000 1075000 827 >,
+ < 2726400000 1105000 900 >,
+ < 2880000000 1135000 937 >;
qcom,speed3-pvs11-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1445,10 +1541,14 @@
< 2265600000 975000 716 >,
< 2342400000 990000 751 >,
< 2419200000 1005000 786 >,
- < 2457600000 1010000 802 >;
+ < 2457600000 1010000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1095000 900 >,
+ < 2880000000 1125000 937 >;
qcom,speed3-pvs12-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1479,10 +1579,14 @@
< 2265600000 965000 716 >,
< 2342400000 980000 751 >,
< 2419200000 995000 786 >,
- < 2457600000 1000000 802 >;
+ < 2457600000 1000000 802 >,
+ < 2572800000 1065000 827 >,
+ < 2726400000 1085000 900 >,
+ < 2880000000 1115000 937 >;
qcom,speed3-pvs13-bin-v1 =
< 0 0 0 >,
+ < 268800000 770000 68 >,
< 300000000 775000 76 >,
< 345600000 775000 87 >,
< 422400000 775000 106 >,
@@ -1513,10 +1617,14 @@
< 2265600000 955000 716 >,
< 2342400000 970000 751 >,
< 2419200000 985000 786 >,
- < 2457600000 990000 802 >;
+ < 2457600000 990000 802 >,
+ < 2572800000 1045000 827 >,
+ < 2726400000 1065000 900 >,
+ < 2880000000 1095000 937 >;
qcom,speed3-pvs14-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1547,10 +1655,14 @@
< 2265600000 945000 716 >,
< 2342400000 960000 751 >,
< 2419200000 975000 786 >,
- < 2457600000 980000 802 >;
+ < 2457600000 980000 802 >,
+ < 2572800000 1035000 827 >,
+ < 2726400000 1055000 900 >,
+ < 2880000000 1085000 937 >;
qcom,speed3-pvs15-bin-v1 =
< 0 0 0 >,
+ < 268800000 745000 68 >,
< 300000000 750000 76 >,
< 345600000 750000 87 >,
< 422400000 750000 106 >,
@@ -1581,9 +1693,39 @@
< 2265600000 935000 716 >,
< 2342400000 950000 751 >,
< 2419200000 965000 786 >,
- < 2457600000 970000 802 >;
+ < 2457600000 970000 802 >,
+ < 2572800000 1025000 827 >,
+ < 2726400000 1045000 900 >,
+ < 2880000000 1075000 937 >;
};
+ qcom,msm-cpufreq@0 {
+ reg = <0 4>;
+ compatible = "qcom,msm-cpufreq";
+ qcom,cpufreq-table =
+ < 268800 /* 75 MHz */ >,
+ < 300000 /* 75 MHz */ >,
+ < 422400 /* 150 MHz */ >,
+ < 652800 /* 200 MHz */ >,
+ < 729600 /* 307 MHz */ >,
+ < 883200 /* 307 MHz */ >,
+ < 960000 /* 460 MHz */ >,
+ < 1036800 /* 460 MHz */ >,
+ < 1190400 /* 460 MHz */ >,
+ < 1267200 /* 614 MHz */ >,
+ < 1497600 /* 614 MHz */ >,
+ < 1574400 /* 800 MHz */ >,
+ < 1728000 /* 800 MHz */ >,
+ < 1958400 /* 931 MHz */ >,
+ < 2265600 /* 931 MHz */ >,
+ < 2342400 /* 931 MHz */ >,
+ < 2419200 /* 931 MHz */ >,
+ < 2457600 /* 931 MHz */ >,
+ < 2572800 /* 931 MHz */ >,
+ < 2726400 /* 931 MHz */ >,
+ < 2880000 /* 931 MHz */ >;
+ };
+
i2c@f9928000 { /* BLSP-1 QUP-6 */
cell-index = <3>;
compatible = "qcom,i2c-qup";
@@ -1751,7 +1893,7 @@
<1880000 2068000>,
<3008000 3309000>,
<3760000 4136000>,
- <4468000 2457000>;
+ <4468000 2457600>;
qcom,dec-ocmem-ab-ib = <0 0>,
<176000 519000>,
<456000 519000>,

View file

@ -0,0 +1,48 @@
From ce1d0035c6d67f633444075f4a1cf9aef165d3f0 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 17 Oct 2015 20:50:31 -0400
Subject: [PATCH] Update defconfig
---
arch/arm/configs/cyanogenmod_bacon_defconfig | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/arch/arm/configs/cyanogenmod_bacon_defconfig b/arch/arm/configs/cyanogenmod_bacon_defconfig
index 5f67061..41a303a 100644
--- a/arch/arm/configs/cyanogenmod_bacon_defconfig
+++ b/arch/arm/configs/cyanogenmod_bacon_defconfig
@@ -125,8 +125,9 @@ CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
# CONFIG_RD_XZ is not set
# CONFIG_RD_LZO is not set
-# CONFIG_RD_LZ4 is not set
+CONFIG_RD_LZ4=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_CC_OPTIMIZE_MORE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_PANIC_TIMEOUT=5
@@ -190,7 +191,7 @@ CONFIG_SECCOMP_FILTER=y
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
-# CONFIG_MODULES is not set
+CONFIG_MODULES=y
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
CONFIG_LBDAF=y
@@ -1775,12 +1776,12 @@ CONFIG_SERIAL_MSM_HS=y
#
# Diag Support
#
-# CONFIG_DIAG_CHAR is not set
+CONFIG_DIAG_CHAR=y
#
# DIAG traffic over USB
#
-# CONFIG_DIAG_OVER_USB is not set
+CONFIG_DIAG_OVER_USB=y
#
# SDIO support for DIAG

Some files were not shown because too many files have changed in this diff Show more