aboutsummaryrefslogtreecommitdiff
path: root/init/init_msm8996.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'init/init_msm8996.cpp')
-rw-r--r--init/init_msm8996.cpp107
1 files changed, 107 insertions, 0 deletions
diff --git a/init/init_msm8996.cpp b/init/init_msm8996.cpp
new file mode 100644
index 0000000..04f02a7
--- /dev/null
+++ b/init/init_msm8996.cpp
@@ -0,0 +1,107 @@
+/*
+ Copyright (C) 2013-2016, The CyanogenMod Project
+ Copyright (C) 2017, The LineageOS Project
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/sysinfo.h>
+#include <cutils/properties.h>
+#include <android-base/properties.h>
+#include "property_service.h"
+#include "vendor_init.h"
+
+using android::base::GetProperty;
+using android::base::SetProperty;
+
+std::string heapminfree;
+std::string heapmaxfree;
+
+static void init_alarm_boot_properties()
+{
+ int boot_reason;
+ FILE *fp;
+
+ fp = fopen("/proc/sys/kernel/boot_reason", "r");
+ fscanf(fp, "%d", &boot_reason);
+ fclose(fp);
+
+ /*
+ * Setup ro.alarm_boot value to true when it is RTC triggered boot up
+ * For existing PMIC chips, the following mapping applies
+ * for the value of boot_reason:
+ *
+ * 0 -> unknown
+ * 1 -> hard reset
+ * 2 -> sudden momentary power loss (SMPL)
+ * 3 -> real time clock (RTC)
+ * 4 -> DC charger inserted
+ * 5 -> USB charger inserted
+ * 6 -> PON1 pin toggled (for secondary PMICs)
+ * 7 -> CBLPWR_N pin toggled (for external power supply)
+ * 8 -> KPDPWR_N pin toggled (power key pressed)
+ */
+ SetProperty("ro.alarm_boot", boot_reason == 3 ? "true" : "false");
+}
+
+void check_ram()
+{
+ struct sysinfo sys;
+
+ sysinfo(&sys);
+
+ if (sys.totalram > 3072ull * 1024 * 1024) {
+ // from - phone-xxxhdpi-4096-dalvik-heap.mk
+ heapminfree = "4m";
+ heapmaxfree = "16m";
+ } else {
+ // from - phone-xxhdpi-3072-dalvik-heap.mk
+ heapminfree = "512k";
+ heapmaxfree = "8m";
+ }
+}
+
+void vendor_load_properties() {
+ std::string platform;
+
+ platform = GetProperty("ro.board.platform", "");
+ if (platform != ANDROID_TARGET)
+ return;
+
+ check_ram();
+
+ SetProperty("dalvik.vm.heapstartsize", "8m");
+ SetProperty("dalvik.vm.heapgrowthlimit", "256m");
+ SetProperty("dalvik.vm.heapsize", "512m");
+ SetProperty("dalvik.vm.heaptargetutilization", "0.75");
+ SetProperty("dalvik.vm.heapminfree", heapminfree);
+ SetProperty("dalvik.vm.heapmaxfree", heapmaxfree);
+
+ init_alarm_boot_properties();
+}
+