diff --git a/rootdir/bin/init.class_main.sh b/rootdir/bin/init.class_main.sh
new file mode 100644
index 0000000..deeabda
--- /dev/null
+++ b/rootdir/bin/init.class_main.sh
@@ -0,0 +1,117 @@
+#! /vendor/bin/sh
+
+# Copyright (c) 2013-2014, 2019 The Linux Foundation. All rights reserved.
+#
+# 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#
+
+#
+# start ril-daemon only for targets on which radio is present
+#
+baseband=`getprop ro.baseband`
+sgltecsfb=`getprop persist.vendor.radio.sglte_csfb`
+datamode=`getprop persist.vendor.data.mode`
+low_ram=`getprop ro.config.low_ram`
+
+case "$baseband" in
+    "apq" | "sda" | "qcs" )
+    setprop ro.vendor.radio.noril yes
+    stop vendor.qcrild
+    stop vendor.qcrild2
+    stop vendor.qcrild3
+esac
+
+case "$baseband" in
+    "msm" | "csfb" | "svlte2a" | "mdm" | "mdm2" | "sglte" | "sglte2" | "dsda2" | "unknown" | "dsda3" | "sdm" | "sdx" | "sm6")
+
+    # start qcrild only for targets on which modem is present
+    # modemvalue 0x0 indicates Modem online
+    # modemvalue 0x1 indicates Modem IP is not functional or disabled
+    # modemvalue 0x2 indicates Modem offline
+    modemvalue="0x0"
+    if [ -f /sys/devices/soc0/modem ]; then
+        modemvalue=`cat /sys/devices/soc0/modem`
+    fi
+
+    if [ $modemvalue != "0x1" ] && [ $modemvalue != "0x2" ]; then
+        start vendor.qcrild
+
+        case "$baseband" in
+            "svlte2a" | "csfb")
+              start qmiproxy
+            ;;
+            "sglte" | "sglte2" )
+              if [ "x$sgltecsfb" != "xtrue" ]; then
+                  start qmiproxy
+              else
+                  setprop persist.vendor.radio.voice.modem.index 0
+              fi
+            ;;
+        esac
+
+        multisim=`getprop persist.radio.multisim.config`
+
+        if [ "$multisim" = "dsds" ] || [ "$multisim" = "dsda" ]; then
+            start vendor.qcrild2
+        elif [ "$multisim" = "tsts" ]; then
+            start vendor.qcrild2
+            start vendor.qcrild3
+        fi
+
+        case "$datamode" in
+            "tethered")
+                start vendor.dataqti
+                if [ "$low_ram" != "true" ]; then
+                  start vendor.dataadpl
+                fi
+                ;;
+            "concurrent")
+                start vendor.dataqti
+                if [ "$low_ram" != "true" ]; then
+                  start vendor.dataadpl
+                fi
+                ;;
+            *)
+                ;;
+        esac
+    else
+        setprop ro.vendor.radio.noril yes
+        stop vendor.qcrild
+        stop vendor.qcrild2
+        stop vendor.qcrild3
+    fi
+esac
+
+#
+# Allow persistent faking of bms
+# User needs to set fake bms charge in persist.vendor.bms.fake_batt_capacity
+#
+fake_batt_capacity=`getprop persist.vendor.bms.fake_batt_capacity`
+case "$fake_batt_capacity" in
+    "") ;; #Do nothing here
+    * )
+    echo "$fake_batt_capacity" > /sys/class/power_supply/battery/capacity
+    ;;
+esac
diff --git a/rootdir/bin/init.kernel.post_boot-bengal-iot.sh b/rootdir/bin/init.kernel.post_boot-bengal-iot.sh
new file mode 100755
index 0000000..de538ae
--- /dev/null
+++ b/rootdir/bin/init.kernel.post_boot-bengal-iot.sh
@@ -0,0 +1,403 @@
+# Copyright (c) 2020-2023 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# Copyright (c) 2009-2012, 2014-2019, The Linux Foundation. All rights reserved.
+#
+# 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#
+
+KernelVersionStr=`cat /proc/sys/kernel/osrelease`
+KernelVersionS=${KernelVersionStr:2:2}
+KernelVersionA=${KernelVersionStr:0:1}
+KernelVersionB=${KernelVersionS%.*}
+
+function configure_zram_parameters() {
+    MemTotalStr=`cat /proc/meminfo | grep MemTotal`
+    MemTotal=${MemTotalStr:16:8}
+
+    low_ram=`getprop ro.config.low_ram`
+
+    # Zram disk - 75% for Go devices.
+    # For 512MB Go device, size = 384MB, set same for Non-Go.
+    # For 1GB Go device, size = 768MB, set same for Non-Go.
+    # For 2GB Go device, size = 1536MB, set same for Non-Go.
+    # For >2GB Non-Go devices, size = 50% of RAM size. Limit the size to 4GB.
+    # And enable lz4 zram compression for Go targets.
+
+    let RamSizeGB="( $MemTotal / 1048576 ) + 1"
+    diskSizeUnit=M
+    if [ $RamSizeGB -le 2 ]; then
+        let zRamSizeMB="( $RamSizeGB * 1024 ) * 3 / 4"
+    else
+        let zRamSizeMB="( $RamSizeGB * 1024 ) / 2"
+    fi
+
+    # use MB avoid 32 bit overflow
+    if [ $zRamSizeMB -gt 4096 ]; then
+        let zRamSizeMB=4096
+    fi
+
+    if [ "$low_ram" == "true" ]; then
+        echo lz4 > /sys/block/zram0/comp_algorithm
+    fi
+
+    if [ -f /sys/block/zram0/disksize ]; then
+        if [ -f /sys/block/zram0/use_dedup ]; then
+            echo 1 > /sys/block/zram0/use_dedup
+        fi
+        echo "$zRamSizeMB""$diskSizeUnit" > /sys/block/zram0/disksize
+
+        # ZRAM may use more memory than it saves if SLAB_STORE_USER
+        # debug option is enabled.
+        if [ -e /sys/kernel/slab/zs_handle ]; then
+            echo 0 > /sys/kernel/slab/zs_handle/store_user
+        fi
+        if [ -e /sys/kernel/slab/zspage ]; then
+            echo 0 > /sys/kernel/slab/zspage/store_user
+        fi
+
+        mkswap /dev/block/zram0
+        swapon /dev/block/zram0 -p 32758
+    fi
+}
+
+function configure_read_ahead_kb_values() {
+    MemTotalStr=`cat /proc/meminfo | grep MemTotal`
+    MemTotal=${MemTotalStr:16:8}
+
+    dmpts=$(ls /sys/block/*/queue/read_ahead_kb | grep -e dm -e mmc -e sd)
+    # dmpts holds below read_ahead_kb nodes if exists:
+    # /sys/block/dm-0/queue/read_ahead_kb to /sys/block/dm-10/queue/read_ahead_kb
+    # /sys/block/sda/queue/read_ahead_kb to /sys/block/sdh/queue/read_ahead_kb
+
+    # Set 128 for <= 3GB &
+    # set 512 for >= 4GB targets.
+    if [ $MemTotal -le 3145728 ]; then
+	ra_kb=128
+    else
+	ra_kb=512
+    fi
+    if [ -f /sys/block/mmcblk0/bdi/read_ahead_kb ]; then
+        echo $ra_kb > /sys/block/mmcblk0/bdi/read_ahead_kb
+    fi
+    if [ -f /sys/block/mmcblk0rpmb/bdi/read_ahead_kb ]; then
+	echo $ra_kb > /sys/block/mmcblk0rpmb/bdi/read_ahead_kb
+    fi
+    for dm in $dmpts; do
+	echo $ra_kb > $dm
+    done
+}
+
+function disable_core_ctl() {
+    if [ -f /sys/devices/system/cpu/cpu0/core_ctl/enable ]; then
+        echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/enable
+    else
+        echo 1 > /sys/devices/system/cpu/cpu0/core_ctl/disable
+    fi
+}
+
+function configure_memory_parameters() {
+    # Set Memory parameters.
+    #
+    # Set per_process_reclaim tuning parameters
+    # All targets will use vmpressure range 50-70,
+    # All targets will use 512 pages swap size.
+    #
+    # Set Low memory killer minfree parameters
+    # 32 bit Non-Go, all memory configurations will use 15K series
+    # 32 bit Go, all memory configurations will use uLMK + Memcg
+    # 64 bit will use Google default LMK series.
+    #
+    # Set ALMK parameters (usually above the highest minfree values)
+    # vmpressure_file_min threshold is always set slightly higher
+    # than LMK minfree's last bin value for all targets. It is calculated as
+    # vmpressure_file_min = (last bin - second last bin ) + last bin
+    #
+    # Set allocstall_threshold to 0 for all targets.
+    #
+
+    # Set swappiness to 100 for all targets
+    echo 100 > /proc/sys/vm/swappiness
+
+    # Disable wsf for all targets beacause we are using efk.
+    # wsf Range : 1..1000 So set to bare minimum value 1.
+    echo 1 > /proc/sys/vm/watermark_scale_factor
+
+    configure_zram_parameters
+
+    configure_read_ahead_kb_values
+
+    # Disable periodic kcompactd wakeups. We do not use THP, so having many
+    # huge pages is not as necessary.
+    echo 0 > /proc/sys/vm/compaction_proactiveness
+
+    # With THP enabled, the kernel greatly increases min_free_kbytes over its
+    # default value. Disable THP to prevent resetting of min_free_kbytes
+    # value during online/offline pages.
+
+    if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]; then
+		echo never > /sys/kernel/mm/transparent_hugepage/enabled
+    fi
+
+    MemTotalStr=`cat /proc/meminfo | grep MemTotal`
+    MemTotal=${MemTotalStr:16:8}
+    let RamSizeGB="( $MemTotal / 1048576 ) + 1"
+
+    # Set the min_free_kbytes to standard kernel value
+    if [ $RamSizeGB -ge 8 ]; then
+		echo 11584 > /proc/sys/vm/min_free_kbytes
+    elif [ $RamSizeGB -ge 4 ]; then
+		echo 8192 > /proc/sys/vm/min_free_kbytes
+    elif [ $RamSizeGB -ge 2 ]; then
+		echo 5792 > /proc/sys/vm/min_free_kbytes
+    else
+		echo 4096 > /proc/sys/vm/min_free_kbytes
+    fi
+}
+
+function start_hbtp()
+{
+        # Start the Host based Touch processing but not in the power off mode.
+        bootmode=`getprop ro.bootmode`
+        if [ "charger" != $bootmode ]; then
+                start vendor.hbtp
+        fi
+}
+
+if [ -f /sys/devices/soc0/soc_id ]; then
+		soc_id=`cat /sys/devices/soc0/soc_id`
+else
+		soc_id=`cat /sys/devices/system/soc/soc0/id`
+fi
+
+configure_memory_parameters
+
+# Configure RT parameters:
+# Long running RT task detection is confined to consolidated builds.
+# Set RT throttle runtime to 50ms more than long running RT
+# task detection time.
+# Set RT throttle period to 100ms more than RT throttle runtime.
+long_running_rt_task_ms=1200
+sched_rt_runtime_ms=`expr $long_running_rt_task_ms + 50`
+sched_rt_runtime_us=`expr $sched_rt_runtime_ms \* 1000`
+sched_rt_period_ms=`expr $sched_rt_runtime_ms + 100`
+sched_rt_period_us=`expr $sched_rt_period_ms \* 1000`
+if [ -d /sys/module/sched_walt_debug ]; then
+	echo $long_running_rt_task_ms > /proc/sys/walt/sched_long_running_rt_task_ms
+fi
+echo $sched_rt_period_us > /proc/sys/kernel/sched_rt_period_us
+echo $sched_rt_runtime_us > /proc/sys/kernel/sched_rt_runtime_us
+
+# Disable Core control on silver
+echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/enable
+
+# Core control parameters for gold
+if [ -d "/sys/devices/system/cpu/cpu4/" ]; then
+echo 60 > /sys/devices/system/cpu/cpu4/core_ctl/busy_up_thres
+echo 40 > /sys/devices/system/cpu/cpu4/core_ctl/busy_down_thres
+echo 100 > /sys/devices/system/cpu/cpu4/core_ctl/offline_delay_ms
+echo 4 > /sys/devices/system/cpu/cpu4/core_ctl/task_thres
+if [ -d "/sys/devices/system/cpu/cpu7/" ]; then
+echo 2 > /sys/devices/system/cpu/cpu4/core_ctl/min_cpus
+echo 1 0 0 0 > /sys/devices/system/cpu/cpu4/core_ctl/not_preferred
+else
+echo 1 > /sys/devices/system/cpu/cpu4/core_ctl/min_cpus
+echo 1 0 > /sys/devices/system/cpu/cpu4/core_ctl/not_preferred
+fi
+
+elif [ -d "/sys/devices/system/cpu/cpu5/" ]; then
+echo 1 > /sys/devices/system/cpu/cpu5/core_ctl/min_cpus
+echo 60 > /sys/devices/system/cpu/cpu5/core_ctl/busy_up_thres
+echo 40 > /sys/devices/system/cpu/cpu5/core_ctl/busy_down_thres
+echo 100 > /sys/devices/system/cpu/cpu5/core_ctl/offline_delay_ms
+echo 4 > /sys/devices/system/cpu/cpu5/core_ctl/task_thres
+echo 1 0 > /sys/devices/system/cpu/cpu5/core_ctl/not_preferred
+
+elif [ -d "/sys/devices/system/cpu/cpu6/" ]; then
+echo 1 > /sys/devices/system/cpu/cpu6/core_ctl/min_cpus
+echo 60 > /sys/devices/system/cpu/cpu6/core_ctl/busy_up_thres
+echo 40 > /sys/devices/system/cpu/cpu6/core_ctl/busy_down_thres
+echo 100 > /sys/devices/system/cpu/cpu6/core_ctl/offline_delay_ms
+echo 4 > /sys/devices/system/cpu/cpu6/core_ctl/task_thres
+echo 1 0 > /sys/devices/system/cpu/cpu6/core_ctl/not_preferred
+fi
+
+# Controls how many more tasks should be eligible to run on gold CPUs
+# w.r.t number of gold CPUs available to trigger assist (max number of
+# tasks eligible to run on previous cluster minus number of CPUs in
+# the previous cluster).
+#
+# Setting to 1 by default which means there should be at least
+# 5 tasks eligible to run on gold cluster (tasks running on gold cores
+# plus misfit tasks on silver cores) to trigger assitance from gold+.
+#echo 1 > /sys/devices/system/cpu/cpu7/core_ctl/nr_prev_assist_thresh
+
+# Setting b.L scheduler parameters
+echo 65 > /proc/sys/walt/sched_downmigrate
+echo 71 > /proc/sys/walt/sched_upmigrate
+echo 100 > /proc/sys/walt/sched_group_upmigrate
+echo 85 > /proc/sys/walt/sched_group_downmigrate
+echo 1 > /proc/sys/walt/sched_walt_rotate_big_tasks
+echo 400000000 > /proc/sys/walt/sched_coloc_downmigrate_ns
+echo 39000000 39000000 39000000 39000000 39000000 39000000 39000000 39000000 > /proc/sys/walt/sched_coloc_busy_hyst_cpu_ns
+echo 248 > /proc/sys/walt/sched_coloc_busy_hysteresis_enable_cpus
+echo 10 10 10 10 10 10 10 10 > /proc/sys/walt/sched_coloc_busy_hyst_cpu_busy_pct
+echo 8500000 8500000 8500000 8500000 8500000 8500000 8500000 8500000 > /proc/sys/walt/sched_util_busy_hyst_cpu_ns
+echo 255 > /proc/sys/walt/sched_util_busy_hysteresis_enable_cpus
+echo 1 1 1 1 1 1 1 1 > /proc/sys/walt/sched_util_busy_hyst_cpu_util
+echo 40 > /proc/sys/walt/sched_cluster_util_thres_pct
+echo 0 > /proc/sys/walt/sched_idle_enough
+
+#Set early upmigrate tunables
+nr_cpus=`grep -c processor /proc/cpuinfo`
+if [ $nr_cpus -gt 4 ]; then
+freq_to_migrate=1228800
+silver_fmax=`cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq`
+silver_early_upmigrate="$((1024 * $silver_fmax / $freq_to_migrate))"
+silver_early_downmigrate="$((((1024 * $silver_fmax) / (((10*$freq_to_migrate) - $silver_fmax) / 10))))"
+sched_upmigrate=`cat /proc/sys/walt/sched_upmigrate`
+sched_downmigrate=`cat /proc/sys/walt/sched_downmigrate`
+sched_upmigrate=${sched_upmigrate:0:2}
+sched_downmigrate=${sched_downmigrate:0:2}
+gold_early_upmigrate="$((1024 * 100 / $sched_upmigrate))"
+gold_early_downmigrate="$((1024 * 100 / $sched_downmigrate))"
+echo $silver_early_downmigrate $gold_early_downmigrate > /proc/sys/walt/sched_early_downmigrate
+echo $silver_early_upmigrate $gold_early_upmigrate > /proc/sys/walt/sched_early_upmigrate
+fi
+
+# set the threshold for low latency task boost feature which prioritize
+# binder activity tasks
+echo 325 > /proc/sys/walt/walt_low_latency_task_threshold
+
+# cpuset parameters
+echo 0-3 > /dev/cpuset/background/cpus
+echo 0-3 > /dev/cpuset/system-background/cpus
+
+# Turn off scheduler boost at the end
+echo 0 > /proc/sys/walt/sched_boost
+
+# Reset the RT boost, which is 1024 (max) by default.
+echo 0 > /proc/sys/kernel/sched_util_clamp_min_rt_default
+
+# configure governor settings for silver cluster
+echo "walt" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
+echo 0 > /sys/devices/system/cpu/cpufreq/policy0/walt/down_rate_limit_us
+echo 0 > /sys/devices/system/cpu/cpufreq/policy0/walt/up_rate_limit_us
+echo 1516800 > /sys/devices/system/cpu/cpufreq/policy0/walt/hispeed_freq
+echo 691200 > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq
+echo 1 > /sys/devices/system/cpu/cpufreq/policy0/walt/pl
+echo 0 > /sys/devices/system/cpu/cpufreq/policy0/walt/rtg_boost_freq
+
+# configure input boost settings
+echo 1190000 0 0 0 0 0 0 0 > /proc/sys/walt/input_boost/input_boost_freq
+echo 80 > /proc/sys/walt/input_boost/input_boost_ms
+
+# configure governor settings for gold cluster
+if [ -d "/sys/devices/system/cpu/cpufreq/policy4/" ]; then
+echo "walt" > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor
+echo 0 > /sys/devices/system/cpu/cpufreq/policy4/walt/down_rate_limit_us
+echo 0 > /sys/devices/system/cpu/cpufreq/policy4/walt/up_rate_limit_us
+echo 1344000 > /sys/devices/system/cpu/cpufreq/policy4/walt/hispeed_freq
+echo 1056000 > /sys/devices/system/cpu/cpufreq/policy4/scaling_min_freq
+echo 1 > /sys/devices/system/cpu/cpufreq/policy4/walt/pl
+echo 0 > /sys/devices/system/cpu/cpufreq/policy4/walt/rtg_boost_freq
+
+elif [ -d "/sys/devices/system/cpu/cpufreq/policy5/" ]; then
+echo "walt" > /sys/devices/system/cpu/cpufreq/policy5/scaling_governor
+echo 0 > /sys/devices/system/cpu/cpufreq/policy5/walt/down_rate_limit_us
+echo 0 > /sys/devices/system/cpu/cpufreq/policy5/walt/up_rate_limit_us
+echo 1344000 > /sys/devices/system/cpu/cpufreq/policy5/walt/hispeed_freq
+echo 1056000 > /sys/devices/system/cpu/cpufreq/policy5/scaling_min_freq
+echo 1 > /sys/devices/system/cpu/cpufreq/policy5/walt/pl
+echo 0 > /sys/devices/system/cpu/cpufreq/policy5/walt/rtg_boost_freq
+
+elif [ -d "/sys/devices/system/cpu/cpufreq/policy6/" ]; then
+echo "walt" > /sys/devices/system/cpu/cpufreq/policy6/scaling_governor
+echo 0 > /sys/devices/system/cpu/cpufreq/policy6/walt/down_rate_limit_us
+echo 0 > /sys/devices/system/cpu/cpufreq/policy6/walt/up_rate_limit_us
+echo 1344000 > /sys/devices/system/cpu/cpufreq/policy6/walt/hispeed_freq
+echo 1056000 > /sys/devices/system/cpu/cpufreq/policy6/scaling_min_freq
+echo 1 > /sys/devices/system/cpu/cpufreq/policy6/walt/pl
+echo 0 > /sys/devices/system/cpu/cpufreq/policy6/walt/rtg_boost_freq
+fi
+
+# configure bus-dcvs
+bus_dcvs="/sys/devices/system/cpu/bus_dcvs"
+
+for device in $bus_dcvs/*
+do
+	cat $device/hw_min_freq > $device/boost_freq
+done
+
+for ddrbw in $bus_dcvs/DDR/*bwmon-ddr
+do
+	echo "762 2086 2929 3879 5931 6881 7980" > $ddrbw/mbps_zones
+	echo 4 > $ddrbw/sample_ms
+	echo 85 > $ddrbw/io_percent
+	echo 20 > $ddrbw/hist_memory
+	echo 0 > $ddrbw/hyst_length
+	echo 80 > $ddrbw/down_thres
+	echo 0 > $ddrbw/guard_band_mbps
+	echo 250 > $ddrbw/up_scale
+	echo 1600 > $ddrbw/idle_mbps
+	echo 2092000 > $ddrbw/max_freq
+done
+
+echo s2idle > /sys/power/mem_sleep
+echo N > /sys/devices/system/cpu/qcom_lpm/parameters/sleep_disabled
+
+# Let kernel know our image version/variant/crm_version
+if [ -f /sys/devices/soc0/select_image ]; then
+	image_version="10:"
+	image_version+=`getprop ro.build.id`
+	image_version+=":"
+	image_version+=`getprop ro.build.version.incremental`
+	image_variant=`getprop ro.product.name`
+	image_variant+="-"
+	image_variant+=`getprop ro.build.type`
+	oem_version=`getprop ro.build.version.codename`
+	echo 10 > /sys/devices/soc0/select_image
+	echo $image_version > /sys/devices/soc0/image_version
+	echo $image_variant > /sys/devices/soc0/image_variant
+	echo $oem_version > /sys/devices/soc0/image_crm_version
+fi
+
+echo 4 > /proc/sys/kernel/printk
+
+# Change console log level as per console config property
+console_config=`getprop persist.vendor.console.silent.config`
+case "$console_config" in
+	"1")
+		echo "Enable console config to $console_config"
+		echo 0 > /proc/sys/kernel/printk
+	;;
+	*)
+		echo "Enable console config to $console_config"
+	;;
+esac
+
+# Post-setup services
+setprop vendor.post_boot.parsed 1
diff --git a/rootdir/bin/init.kernel.post_boot-bengal.sh b/rootdir/bin/init.kernel.post_boot-bengal.sh
new file mode 100755
index 0000000..890c71a
--- /dev/null
+++ b/rootdir/bin/init.kernel.post_boot-bengal.sh
@@ -0,0 +1,388 @@
+# Copyright (c) 2020-2022 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# Copyright (c) 2009-2012, 2014-2019, The Linux Foundation. All rights reserved.
+#
+# 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#
+
+KernelVersionStr=`cat /proc/sys/kernel/osrelease`
+KernelVersionS=${KernelVersionStr:2:2}
+KernelVersionA=${KernelVersionStr:0:1}
+KernelVersionB=${KernelVersionS%.*}
+
+function configure_zram_parameters() {
+    MemTotalStr=`cat /proc/meminfo | grep MemTotal`
+    MemTotal=${MemTotalStr:16:8}
+
+    low_ram=`getprop ro.config.low_ram`
+
+    # Zram disk - 75% for Go devices.
+    # For 512MB Go device, size = 384MB, set same for Non-Go.
+    # For 1GB Go device, size = 768MB, set same for Non-Go.
+    # For 2GB Go device, size = 1536MB, set same for Non-Go.
+    # For >2GB Non-Go devices, size = 50% of RAM size. Limit the size to 4GB.
+    # And enable lz4 zram compression for Go targets.
+
+    let RamSizeGB="( $MemTotal / 1048576 ) + 1"
+    diskSizeUnit=M
+    if [ $RamSizeGB -le 2 ]; then
+        let zRamSizeMB="( $RamSizeGB * 1024 ) * 3 / 4"
+    else
+        let zRamSizeMB="( $RamSizeGB * 1024 ) / 2"
+    fi
+
+    # use MB avoid 32 bit overflow
+    if [ $zRamSizeMB -gt 4096 ]; then
+        let zRamSizeMB=4096
+    fi
+
+    if [ "$low_ram" == "true" ]; then
+        echo lz4 > /sys/block/zram0/comp_algorithm
+    fi
+
+    if [ -f /sys/block/zram0/disksize ]; then
+        if [ -f /sys/block/zram0/use_dedup ]; then
+            echo 1 > /sys/block/zram0/use_dedup
+        fi
+        echo "$zRamSizeMB""$diskSizeUnit" > /sys/block/zram0/disksize
+
+        # ZRAM may use more memory than it saves if SLAB_STORE_USER
+        # debug option is enabled.
+        if [ -e /sys/kernel/slab/zs_handle ]; then
+            echo 0 > /sys/kernel/slab/zs_handle/store_user
+        fi
+        if [ -e /sys/kernel/slab/zspage ]; then
+            echo 0 > /sys/kernel/slab/zspage/store_user
+        fi
+
+        mkswap /dev/block/zram0
+        swapon /dev/block/zram0 -p 32758
+    fi
+}
+
+function configure_read_ahead_kb_values() {
+    MemTotalStr=`cat /proc/meminfo | grep MemTotal`
+    MemTotal=${MemTotalStr:16:8}
+
+    dmpts=$(ls /sys/block/*/queue/read_ahead_kb | grep -e dm -e mmc -e sd)
+    # dmpts holds below read_ahead_kb nodes if exists:
+    # /sys/block/dm-0/queue/read_ahead_kb to /sys/block/dm-10/queue/read_ahead_kb
+    # /sys/block/sda/queue/read_ahead_kb to /sys/block/sdh/queue/read_ahead_kb
+
+    # Set 128 for <= 3GB &
+    # set 512 for >= 4GB targets.
+    if [ $MemTotal -le 3145728 ]; then
+	ra_kb=128
+    else
+	ra_kb=512
+    fi
+    if [ -f /sys/block/mmcblk0/bdi/read_ahead_kb ]; then
+        echo $ra_kb > /sys/block/mmcblk0/bdi/read_ahead_kb
+    fi
+    if [ -f /sys/block/mmcblk0rpmb/bdi/read_ahead_kb ]; then
+	echo $ra_kb > /sys/block/mmcblk0rpmb/bdi/read_ahead_kb
+    fi
+    for dm in $dmpts; do
+	echo $ra_kb > $dm
+    done
+}
+
+function disable_core_ctl() {
+    if [ -f /sys/devices/system/cpu/cpu0/core_ctl/enable ]; then
+        echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/enable
+    else
+        echo 1 > /sys/devices/system/cpu/cpu0/core_ctl/disable
+    fi
+}
+
+function configure_memory_parameters() {
+    # Set Memory parameters.
+    #
+    # Set per_process_reclaim tuning parameters
+    # All targets will use vmpressure range 50-70,
+    # All targets will use 512 pages swap size.
+    #
+    # Set Low memory killer minfree parameters
+    # 32 bit Non-Go, all memory configurations will use 15K series
+    # 32 bit Go, all memory configurations will use uLMK + Memcg
+    # 64 bit will use Google default LMK series.
+    #
+    # Set ALMK parameters (usually above the highest minfree values)
+    # vmpressure_file_min threshold is always set slightly higher
+    # than LMK minfree's last bin value for all targets. It is calculated as
+    # vmpressure_file_min = (last bin - second last bin ) + last bin
+    #
+    # Set allocstall_threshold to 0 for all targets.
+    #
+
+    # Set swappiness to 100 for all targets
+    echo 100 > /proc/sys/vm/swappiness
+
+    # Disable wsf for all targets beacause we are using efk.
+    # wsf Range : 1..1000 So set to bare minimum value 1.
+
+    #Set per-app max kgsl reclaim limit and per shrinker call limit
+    if [ -f /sys/class/kgsl/kgsl/page_reclaim_per_call ]; then
+       echo 38400 > /sys/class/kgsl/kgsl/page_reclaim_per_call
+    fi
+
+    if [ -f /sys/class/kgsl/kgsl/max_reclaim_limit ]; then
+       echo 25600 > /sys/class/kgsl/kgsl/max_reclaim_limit
+    fi
+
+    configure_zram_parameters
+
+    configure_read_ahead_kb_values
+
+    # Disable periodic kcompactd wakeups. We do not use THP, so having many
+    # huge pages is not as necessary.
+    echo 0 > /proc/sys/vm/compaction_proactiveness
+
+    # With THP enabled, the kernel greatly increases min_free_kbytes over its
+    # default value. Disable THP to prevent resetting of min_free_kbytes
+    # value during online/offline pages.
+
+    if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]; then
+		echo never > /sys/kernel/mm/transparent_hugepage/enabled
+    fi
+
+    MemTotalStr=`cat /proc/meminfo | grep MemTotal`
+    MemTotal=${MemTotalStr:16:8}
+    let RamSizeGB="( $MemTotal / 1048576 ) + 1"
+
+    # Set the min_free_kbytes to standard kernel value
+    if [ $RamSizeGB -ge 8 ]; then
+		echo 11584 > /proc/sys/vm/min_free_kbytes
+    elif [ $RamSizeGB -ge 4 ]; then
+		echo 8192 > /proc/sys/vm/min_free_kbytes
+    elif [ $RamSizeGB -ge 2 ]; then
+		echo 5792 > /proc/sys/vm/min_free_kbytes
+    else
+		echo 4096 > /proc/sys/vm/min_free_kbytes
+    fi
+  extra_free_kbytes_backup_enable=`getprop persist.vendor.spc.mi_extra_free_enable`
+  MIN_PERCPU_PAGELIST_HIGH_FRACTION=8
+
+  if [ "true" = ${extra_free_kbytes_backup_enable} ]; then
+          echo `cat /proc/sys/vm/min_free_kbytes` " " `cat /proc/sys/vm/watermark_scale_factor` " -1" > /sys/kernel/mi_wmark/extra_free_kbytes
+          cat /proc/sys/vm/lowmem_reserve_ratio > /proc/sys/vm/lowmem_reserve_ratio
+
+          percpu_pagelist_high_fraction=`cat /proc/sys/vm/percpu_pagelist_high_fraction`
+          new_percpu_pagelist_high_fraction=${percpu_pagelist_high_fraction}
+          [ ${percpu_pagelist_high_fraction} -lt ${MIN_PERCPU_PAGELIST_HIGH_FRACTION} ] && new_percpu_pagelist_high_fraction=${MIN_PERCPU_PAGELIST_HIGH_FRACTION}
+          let new_percpu_pagelist_high_fraction++
+          echo ${new_percpu_pagelist_high_fraction} > /proc/sys/vm/percpu_pagelist_high_fraction
+          echo ${percpu_pagelist_high_fraction} > /proc/sys/vm/percpu_pagelist_high_fraction
+
+  fi
+}
+
+function start_hbtp()
+{
+        # Start the Host based Touch processing but not in the power off mode.
+        bootmode=`getprop ro.bootmode`
+        if [ "charger" != $bootmode ]; then
+                start vendor.hbtp
+        fi
+}
+
+if [ -f /sys/devices/soc0/soc_id ]; then
+		soc_id=`cat /sys/devices/soc0/soc_id`
+else
+		soc_id=`cat /sys/devices/system/soc/soc0/id`
+fi
+
+configure_memory_parameters
+
+# Configure RT parameters:
+# Long running RT task detection is confined to consolidated builds.
+# Set RT throttle runtime to 50ms more than long running RT
+# task detection time.
+# Set RT throttle period to 100ms more than RT throttle runtime.
+long_running_rt_task_ms=1200
+sched_rt_runtime_ms=`expr $long_running_rt_task_ms + 50`
+sched_rt_runtime_us=`expr $sched_rt_runtime_ms \* 1000`
+sched_rt_period_ms=`expr $sched_rt_runtime_ms + 100`
+sched_rt_period_us=`expr $sched_rt_period_ms \* 1000`
+if [ -d /sys/module/sched_walt_debug ]; then
+	echo $long_running_rt_task_ms > /proc/sys/walt/sched_long_running_rt_task_ms
+fi
+echo $sched_rt_period_us > /proc/sys/kernel/sched_rt_period_us
+echo $sched_rt_runtime_us > /proc/sys/kernel/sched_rt_runtime_us
+
+# Disable Core control on silver
+echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/enable
+# Core control parameters for gold
+echo 2 > /sys/devices/system/cpu/cpu4/core_ctl/min_cpus
+echo 60 > /sys/devices/system/cpu/cpu4/core_ctl/busy_up_thres
+echo 40 > /sys/devices/system/cpu/cpu4/core_ctl/busy_down_thres
+echo 100 > /sys/devices/system/cpu/cpu4/core_ctl/offline_delay_ms
+echo 4 > /sys/devices/system/cpu/cpu4/core_ctl/task_thres
+
+# Controls how many more tasks should be eligible to run on gold CPUs
+# w.r.t number of gold CPUs available to trigger assist (max number of
+# tasks eligible to run on previous cluster minus number of CPUs in
+# the previous cluster).
+#
+# Setting to 1 by default which means there should be at least
+# 5 tasks eligible to run on gold cluster (tasks running on gold cores
+# plus misfit tasks on silver cores) to trigger assitance from gold+.
+#echo 1 > /sys/devices/system/cpu/cpu7/core_ctl/nr_prev_assist_thresh
+
+# Setting b.L scheduler parameters
+echo 65 > /proc/sys/walt/sched_downmigrate
+echo 71 > /proc/sys/walt/sched_upmigrate
+echo 100 > /proc/sys/walt/sched_group_upmigrate
+echo 85 > /proc/sys/walt/sched_group_downmigrate
+echo 1 > /proc/sys/walt/sched_walt_rotate_big_tasks
+echo 400000000 > /proc/sys/walt/sched_coloc_downmigrate_ns
+echo 39000000 39000000 39000000 39000000 39000000 39000000 39000000 39000000 > /proc/sys/walt/sched_coloc_busy_hyst_cpu_ns
+echo 248 > /proc/sys/walt/sched_coloc_busy_hysteresis_enable_cpus
+echo 10 10 10 10 10 10 10 10 > /proc/sys/walt/sched_coloc_busy_hyst_cpu_busy_pct
+echo 8500000 8500000 8500000 8500000 8500000 8500000 8500000 8500000 > /proc/sys/walt/sched_util_busy_hyst_cpu_ns
+echo 255 > /proc/sys/walt/sched_util_busy_hysteresis_enable_cpus
+echo 1 1 1 1 1 1 1 1 > /proc/sys/walt/sched_util_busy_hyst_cpu_util
+echo 40 > /proc/sys/walt/sched_cluster_util_thres_pct
+echo 0 > /proc/sys/walt/sched_idle_enough
+
+#Set early upmigrate tunables
+freq_to_migrate=1228800
+silver_fmax=`cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq`
+silver_early_upmigrate="$((1024 * $silver_fmax / $freq_to_migrate))"
+silver_early_downmigrate="$((((1024 * $silver_fmax) / (((10*$freq_to_migrate) - $silver_fmax) / 10))))"
+sched_upmigrate=`cat /proc/sys/walt/sched_upmigrate`
+sched_downmigrate=`cat /proc/sys/walt/sched_downmigrate`
+sched_upmigrate=${sched_upmigrate:0:2}
+sched_downmigrate=${sched_downmigrate:0:2}
+gold_early_upmigrate="$((1024 * 100 / $sched_upmigrate))"
+gold_early_downmigrate="$((1024 * 100 / $sched_downmigrate))"
+echo $silver_early_downmigrate $gold_early_downmigrate > /proc/sys/walt/sched_early_downmigrate
+echo $silver_early_upmigrate $gold_early_upmigrate > /proc/sys/walt/sched_early_upmigrate
+
+# set the threshold for low latency task boost feature which prioritize
+# binder activity tasks
+echo 325 > /proc/sys/walt/walt_low_latency_task_threshold
+
+# cpuset parameters
+echo 0-3 > /dev/cpuset/background/cpus
+echo 0-3 > /dev/cpuset/system-background/cpus
+
+# Turn off scheduler boost at the end
+echo 0 > /proc/sys/walt/sched_boost
+
+# Reset the RT boost, which is 1024 (max) by default.
+echo 0 > /proc/sys/kernel/sched_util_clamp_min_rt_default
+
+# configure governor settings for silver cluster
+echo "walt" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
+echo 0 > /sys/devices/system/cpu/cpufreq/policy0/walt/down_rate_limit_us
+echo 0 > /sys/devices/system/cpu/cpufreq/policy0/walt/up_rate_limit_us
+echo 1516800 > /sys/devices/system/cpu/cpufreq/policy0/walt/hispeed_freq
+echo 691200 > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq
+echo 1 > /sys/devices/system/cpu/cpufreq/policy0/walt/pl
+echo 0 > /sys/devices/system/cpu/cpufreq/policy0/walt/rtg_boost_freq
+
+# configure input boost settings
+echo 1190000 0 0 0 0 0 0 0 > /proc/sys/walt/input_boost/input_boost_freq
+echo 120 > /proc/sys/walt/input_boost/input_boost_ms
+
+echo 1516800 0 0 0 2208000 0 0 0 > /proc/sys/walt/input_boost/powerkey_input_boost_freq
+echo 400 > /proc/sys/walt/input_boost/powerkey_input_boost_ms
+
+# configure governor settings for gold cluster
+echo "walt" > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor
+echo 0 > /sys/devices/system/cpu/cpufreq/policy4/walt/down_rate_limit_us
+echo 0 > /sys/devices/system/cpu/cpufreq/policy4/walt/up_rate_limit_us
+echo 1344000 > /sys/devices/system/cpu/cpufreq/policy4/walt/hispeed_freq
+echo 1056000 > /sys/devices/system/cpu/cpufreq/policy4/scaling_min_freq
+echo 1 > /sys/devices/system/cpu/cpufreq/policy4/walt/pl
+echo 0 > /sys/devices/system/cpu/cpufreq/policy4/walt/rtg_boost_freq
+
+# cpuset parameters
+echo 0-2 > /dev/cpuset/background/cpus
+echo 0-3 > /dev/cpuset/system-background/cpus
+echo 4-7 > /dev/cpuset/foreground/boost/cpus
+echo 0-2,4-7 > /dev/cpuset/foreground/cpus
+echo 0-7 > /dev/cpuset/top-app/cpus
+
+# configure bus-dcvs
+bus_dcvs="/sys/devices/system/cpu/bus_dcvs"
+
+for device in $bus_dcvs/*
+do
+	cat $device/hw_min_freq > $device/boost_freq
+done
+
+for ddrbw in $bus_dcvs/DDR/*bwmon-ddr
+do
+	echo "762 2086 2929 3879 5931 6881 7980" > $ddrbw/mbps_zones
+	echo 4 > $ddrbw/sample_ms
+	echo 85 > $ddrbw/io_percent
+	echo 20 > $ddrbw/hist_memory
+	echo 0 > $ddrbw/hyst_length
+	echo 80 > $ddrbw/down_thres
+	echo 0 > $ddrbw/guard_band_mbps
+	echo 250 > $ddrbw/up_scale
+	echo 1600 > $ddrbw/idle_mbps
+	echo 2092000 > $ddrbw/max_freq
+done
+
+echo s2idle > /sys/power/mem_sleep
+echo N > /sys/devices/system/cpu/qcom_lpm/parameters/sleep_disabled
+
+# Let kernel know our image version/variant/crm_version
+if [ -f /sys/devices/soc0/select_image ]; then
+	image_version="10:"
+	image_version+=`getprop ro.build.id`
+	image_version+=":"
+	image_version+=`getprop ro.build.version.incremental`
+	image_variant=`getprop ro.product.name`
+	image_variant+="-"
+	image_variant+=`getprop ro.build.type`
+	oem_version=`getprop ro.build.version.codename`
+	echo 10 > /sys/devices/soc0/select_image
+	echo $image_version > /sys/devices/soc0/image_version
+	echo $image_variant > /sys/devices/soc0/image_variant
+	echo $oem_version > /sys/devices/soc0/image_crm_version
+fi
+
+echo 4 > /proc/sys/kernel/printk
+
+# Change console log level as per console config property
+console_config=`getprop persist.vendor.console.silent.config`
+case "$console_config" in
+	"1")
+		echo "Enable console config to $console_config"
+		echo 0 > /proc/sys/kernel/printk
+	;;
+	*)
+		echo "Enable console config to $console_config"
+	;;
+esac
+
+# Post-setup services
+setprop vendor.post_boot.parsed 1
diff --git a/rootdir/bin/init.kernel.post_boot.sh b/rootdir/bin/init.kernel.post_boot.sh
new file mode 100755
index 0000000..ce56429
--- /dev/null
+++ b/rootdir/bin/init.kernel.post_boot.sh
@@ -0,0 +1,48 @@
+#=============================================================================
+# Copyright (c) 2020-2022 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# Copyright (c) 2009-2012, 2014-2019, The Linux Foundation. All rights reserved.
+#
+# 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#=============================================================================
+
+if [ -f /sys/devices/soc0/soc_id ]; then
+	platformid=`cat /sys/devices/soc0/soc_id`
+fi
+
+case "$platformid" in
+	"518" | "561" | "585")
+		/vendor/bin/sh /vendor/bin/init.kernel.post_boot-bengal.sh
+		;;
+	"586")
+		/vendor/bin/sh /vendor/bin/init.kernel.post_boot-bengal-iot.sh
+		;;
+	*)
+		echo "***WARNING***: Invalid SoC ID\n\t No postboot settings applied!!\n"
+		;;
+esac
+
diff --git a/rootdir/bin/init.qcom.class_core.sh b/rootdir/bin/init.qcom.class_core.sh
new file mode 100644
index 0000000..8f8265d
--- /dev/null
+++ b/rootdir/bin/init.qcom.class_core.sh
@@ -0,0 +1,216 @@
+#!/vendor/bin/sh
+
+# Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+#
+# 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#
+
+# Set platform variables
+target=`getprop ro.board.platform`
+if [ -f /sys/devices/soc0/hw_platform ]; then
+    soc_hwplatform=`cat /sys/devices/soc0/hw_platform` 2> /dev/null
+else
+    soc_hwplatform=`cat /sys/devices/system/soc/soc0/hw_platform` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/soc_id ]; then
+    soc_hwid=`cat /sys/devices/soc0/soc_id` 2> /dev/null
+else
+    soc_hwid=`cat /sys/devices/system/soc/soc0/id` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/platform_version ]; then
+    soc_hwver=`cat /sys/devices/soc0/platform_version` 2> /dev/null
+else
+    soc_hwver=`cat /sys/devices/system/soc/soc0/platform_version` 2> /dev/null
+fi
+
+
+# Dynamic Memory Managment (DMM) provides a sys file system to the userspace
+# that can be used to plug in/out memory that has been configured as unstable.
+# This unstable memory can be in Active or In-Active State.
+# Each of which the userspace can request by writing to a sys file.
+#
+# ro.dev.dmm = 1; Indicates that DMM is enabled in the Android User Space. This
+# property is set in the Android system properties file.
+#
+# If ro.dev.dmm.dpd.start_address is set here then the target has a memory
+# configuration that supports DynamicMemoryManagement.
+init_DMM()
+{
+    block=-1
+
+    case "$target" in
+    "msm7630_surf" | "msm7630_1x" | "msm7630_fusion" | "msm8960")
+        ;;
+    *)
+        return
+        ;;
+    esac
+
+    mem="/sys/devices/system/memory"
+    op=`cat $mem/movable_start_bytes`
+    case "$op" in
+    "0")
+        log -p i -t DMM DMM Disabled. movable_start_bytes not set: $op
+        ;;
+
+    "$mem/movable_start_bytes: No such file or directory ")
+        log -p i -t DMM DMM Disabled. movable_start_bytes does not exist: $op
+        ;;
+
+    *)
+        log -p i -t DMM DMM available. movable_start_bytes at $op
+        movable_start_bytes=0x`cat $mem/movable_start_bytes`
+        block_size_bytes=0x`cat $mem/block_size_bytes`
+        block=$((#${movable_start_bytes}/${block_size_bytes}))
+
+        chown -h system.system $mem/memory$block/state
+        chown -h system.system $mem/probe
+        chown -h system.system $mem/active
+        chown -h system.system $mem/remove
+
+        case "$target" in
+        "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+            echo $movable_start_bytes > $mem/probe
+            case "$?" in
+            "0")
+                log -p i -t DMM $movable_start_bytes to physical hotplug succeeded.
+                ;;
+            *)
+                log -p e -t DMM $movable_start_bytes to physical hotplug failed.
+                return
+                ;;
+            esac
+
+            echo online > $mem/memory$block/state
+            case "$?" in
+            "0")
+                log -p i -t DMM \'echo online\' to logical hotplug succeeded.
+                ;;
+            *)
+                log -p e -t DMM \'echo online\' to logical hotplug failed.
+                return
+                ;;
+            esac
+            ;;
+        esac
+
+        setprop ro.dev.dmm.dpd.start_address $movable_start_bytes
+        setprop ro.dev.dmm.dpd.block $block
+        ;;
+    esac
+
+    case "$target" in
+    "msm8960")
+        return
+        ;;
+    esac
+
+    # For 7X30 targets:
+    # ro.dev.dmm.dpd.start_address is set when the target has a 2x256Mb memory
+    # configuration. This is also used to indicate that the target is capable of
+    # setting EBI-1 to Deep Power Down or Self Refresh.
+    op=`cat $mem/low_power_memory_start_bytes`
+    case "$op" in
+    "0")
+        log -p i -t DMM Self-Refresh-Only Disabled. low_power_memory_start_bytes not set:$op
+        ;;
+    "$mem/low_power_memory_start_bytes No such file or directory ")
+        log -p i -t DMM Self-Refresh-Only Disabled. low_power_memory_start_bytes does not exist:$op
+        ;;
+    *)
+        log -p i -t DMM Self-Refresh-Only available. low_power_memory_start_bytes at $op
+        ;;
+    esac
+}
+
+#
+# For controlling console and shell on console on 8960 - perist.serial.enable 8960
+# On other target use default ro.debuggable property.
+#
+serial=`getprop persist.serial.enable`
+dserial=`getprop ro.debuggable`
+case "$target" in
+    "msm8960")
+        case "$serial" in
+            "0")
+                echo 0 > /sys/devices/platform/msm_serial_hsl.0/console
+                ;;
+            "1")
+                echo 1 > /sys/devices/platform/msm_serial_hsl.0/console
+                start console
+                ;;
+            *)
+                case "$dserial" in
+                     "1")
+                         start console
+                         ;;
+                esac
+                ;;
+        esac
+        ;;
+
+    "msm8610" | "msm8974" | "msm8226")
+	case "$serial" in
+	     "0")
+		echo 0 > /sys/devices/f991f000.serial/console
+		;;
+	     "1")
+		echo 1 > /sys/devices/f991f000.serial/console
+		start console
+		;;
+            *)
+		case "$dserial" in
+                     "1")
+			start console
+			;;
+		esac
+		;;
+	esac
+	;;
+    *)
+        case "$dserial" in
+            "1")
+                start console
+                ;;
+        esac
+        ;;
+esac
+
+case "$target" in
+    "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+        insmod /system/lib/modules/ss_mfcinit.ko
+        insmod /system/lib/modules/ss_vencoder.ko
+        insmod /system/lib/modules/ss_vdecoder.ko
+        chmod -h 0666 /dev/ss_mfc_reg
+        chmod -h 0666 /dev/ss_vdec
+        chmod -h 0666 /dev/ss_venc
+
+        init_DMM
+        ;;
+
+    "msm8960")
+        init_DMM
+        ;;
+esac
diff --git a/rootdir/bin/init.qcom.early_boot.sh b/rootdir/bin/init.qcom.early_boot.sh
new file mode 100644
index 0000000..f74dcce
--- /dev/null
+++ b/rootdir/bin/init.qcom.early_boot.sh
@@ -0,0 +1,504 @@
+#! /vendor/bin/sh
+
+# Copyright (c) 2012-2013,2016,2018-2020 The Linux Foundation. All rights reserved.
+#
+# 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#
+
+export PATH=/vendor/bin
+
+# Set platform variables
+if [ -f /sys/devices/soc0/hw_platform ]; then
+    soc_hwplatform=`cat /sys/devices/soc0/hw_platform` 2> /dev/null
+else
+    soc_hwplatform=`cat /sys/devices/system/soc/soc0/hw_platform` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/soc_id ]; then
+    soc_hwid=`cat /sys/devices/soc0/soc_id` 2> /dev/null
+else
+    soc_hwid=`cat /sys/devices/system/soc/soc0/id` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/platform_version ]; then
+    soc_hwver=`cat /sys/devices/soc0/platform_version` 2> /dev/null
+else
+    soc_hwver=`cat /sys/devices/system/soc/soc0/platform_version` 2> /dev/null
+fi
+
+if [ -f /sys/class/drm/card0-DSI-1/modes ]; then
+    echo "detect" > /sys/class/drm/card0-DSI-1/status
+    mode_file=/sys/class/drm/card0-DSI-1/modes
+    while read line; do
+        fb_width=${line%%x*};
+        break;
+    done < $mode_file
+elif [ -f /sys/class/graphics/fb0/virtual_size ]; then
+    res=`cat /sys/class/graphics/fb0/virtual_size` 2> /dev/null
+    fb_width=${res%,*}
+fi
+
+log -t BOOT -p i "MSM target '$1', SoC '$soc_hwplatform', HwID '$soc_hwid', SoC ver '$soc_hwver'"
+
+#For drm based display driver
+vbfile=/sys/module/drm/parameters/vblankoffdelay
+if [ -w $vbfile ]; then
+    echo -1 >  $vbfile
+else
+    log -t DRM_BOOT -p w "file: '$vbfile' or perms doesn't exist"
+fi
+
+function set_density_by_fb() {
+    #put default density based on width
+    if [ -z $fb_width ]; then
+        setprop vendor.display.lcd_density 320
+    else
+        if [ $fb_width -ge 1600 ]; then
+           setprop vendor.display.lcd_density 640
+        elif [ $fb_width -ge 1440 ]; then
+           setprop vendor.display.lcd_density 560
+        elif [ $fb_width -ge 1080 ]; then
+           setprop vendor.display.lcd_density 480
+        elif [ $fb_width -ge 720 ]; then
+           setprop vendor.display.lcd_density 320 #for 720X1280 resolution
+        elif [ $fb_width -ge 480 ]; then
+            setprop vendor.display.lcd_density 240 #for 480X854 QRD resolution
+        else
+            setprop vendor.display.lcd_density 160
+        fi
+    fi
+}
+
+target=`getprop ro.board.platform`
+case "$target" in
+    "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+        case "$soc_hwplatform" in
+            "FFA" | "SVLTE_FFA")
+                # linking to surf_keypad_qwerty.kcm.bin instead of surf_keypad_numeric.kcm.bin so that
+                # the UI keyboard works fine.
+                ln -s  /system/usr/keychars/surf_keypad_qwerty.kcm.bin /system/usr/keychars/surf_keypad.kcm.bin
+                ;;
+            "Fluid")
+                setprop vendor.display.lcd_density 240
+                setprop qcom.bt.dev_power_class 2
+                ;;
+            *)
+                ln -s  /system/usr/keychars/surf_keypad_qwerty.kcm.bin /system/usr/keychars/surf_keypad.kcm.bin
+                ;;
+        esac
+        ;;
+     "sm6150")
+         case "$soc_hwplatform" in
+             "ADP")
+                 setprop vendor.display.lcd_density 160
+                 ;;
+         esac
+         case "$soc_hwid" in
+             365|366)
+                 sku_ver=`cat /sys/devices/platform/soc/aa00000.qcom,vidc1/sku_version` 2> /dev/null
+                 setprop vendor.media.target.version 1
+                 if [ $sku_ver -eq 1 ]; then
+                     setprop vendor.media.target.version 2
+                 fi
+                 ;;
+             355|369|377|384)
+                 setprop vendor.chre.enabled 0
+                 ;;
+             *)
+         esac
+         ;;
+    "msm8660")
+        case "$soc_hwplatform" in
+            "Fluid")
+                setprop vendor.display.lcd_density 240
+                ;;
+            "Dragon")
+                setprop ro.sound.alsa "WM8903"
+                ;;
+        esac
+        ;;
+
+    "msm8960")
+        # lcd density is write-once. Hence the separate switch case
+        case "$soc_hwplatform" in
+            "Liquid")
+                if [ "$soc_hwver" == "196608" ]; then # version 0x30000 is 3D sku
+                    setprop ro.sf.hwrotation 90
+                fi
+
+                setprop vendor.display.lcd_density 160
+                ;;
+            "MTP")
+                setprop vendor.display.lcd_density 240
+                ;;
+            *)
+                case "$soc_hwid" in
+                    "109")
+                        setprop vendor.display.lcd_density 160
+                        ;;
+                    *)
+                        setprop vendor.display.lcd_density 240
+                        ;;
+                esac
+            ;;
+        esac
+
+        #Set up composition type based on the target
+        case "$soc_hwid" in
+            87)
+                #8960
+                setprop debug.composition.type dyn
+                ;;
+            153|154|155|156|157|138)
+                #8064 V2 PRIME | 8930AB | 8630AB | 8230AB | 8030AB | 8960AB
+                setprop debug.composition.type c2d
+                ;;
+            *)
+        esac
+        ;;
+
+    "msm8974")
+        case "$soc_hwplatform" in
+            "Liquid")
+                setprop vendor.display.lcd_density 160
+                # Liquid do not have hardware navigation keys, so enable
+                # Android sw navigation bar
+                setprop ro.hw.nav_keys 0
+                ;;
+            "Dragon")
+                setprop vendor.display.lcd_density 240
+                ;;
+            *)
+                setprop vendor.display.lcd_density 320
+                ;;
+        esac
+        ;;
+
+    "msm8226")
+        case "$soc_hwplatform" in
+            *)
+                setprop vendor.display.lcd_density 320
+                ;;
+        esac
+        ;;
+
+    "msm8610" | "apq8084" | "mpq8092")
+        case "$soc_hwplatform" in
+            *)
+                setprop vendor.display.lcd_density 240
+                ;;
+        esac
+        ;;
+    "apq8084")
+        case "$soc_hwplatform" in
+            "Liquid")
+                setprop vendor.display.lcd_density 320
+                # Liquid do not have hardware navigation keys, so enable
+                # Android sw navigation bar
+                setprop ro.hw.nav_keys 0
+                ;;
+            "SBC")
+                setprop vendor.display.lcd_density 200
+                # SBC do not have hardware navigation keys, so enable
+                # Android sw navigation bar
+                setprop qemu.hw.mainkeys 0
+                ;;
+            *)
+                setprop vendor.display.lcd_density 480
+                ;;
+        esac
+        ;;
+    "msm8996")
+        case "$soc_hwplatform" in
+            "Dragon")
+                setprop vendor.display.lcd_density 240
+                setprop qemu.hw.mainkeys 0
+                ;;
+            "ADP")
+                setprop vendor.display.lcd_density 160
+                setprop qemu.hw.mainkeys 0
+                ;;
+            "SBC")
+                setprop vendor.display.lcd_density 240
+                setprop qemu.hw.mainkeys 0
+                ;;
+            *)
+                setprop vendor.display.lcd_density 560
+                ;;
+        esac
+        ;;
+    "msm8937" | "msm8940")
+        # Set vendor.opengles.version based on chip id.
+        # MSM8937 and MSM8940  variants supports OpenGLES 3.1
+        # 196608 is decimal for 0x30000 to report version 3.0
+        # 196609 is decimal for 0x30001 to report version 3.1
+        # 196610 is decimal for 0x30002 to report version 3.2
+        case "$soc_hwid" in
+            294|295|296|297|298|313|353|354|363|364)
+                setprop vendor.opengles.version 196610
+                if [ $soc_hwid = 354 ]
+                then
+                    setprop vendor.media.target.version 1
+                    log -t BOOT -p i "SDM429 early_boot prop set for: HwID '$soc_hwid'"
+                fi
+                ;;
+            303|307|308|309|320)
+                # Vulkan is not supported for 8917 variants
+                setprop vendor.opengles.version 196608
+                setprop persist.graphics.vulkan.disable true
+                ;;
+            *)
+                setprop vendor.opengles.version 196608
+                ;;
+        esac
+        ;;
+    "msm8909")
+        case "$soc_hwplatform" in
+            *)
+                setprop persist.graphics.vulkan.disable true
+                ;;
+        esac
+        ;;
+    "msm8998" | "apq8098_latv")
+        case "$soc_hwplatform" in
+            *)
+                setprop vendor.display.lcd_density 560
+                ;;
+        esac
+        ;;
+    "sdm845")
+        case "$soc_hwplatform" in
+            *)
+                if [ $fb_width -le 1600 ]; then
+                    setprop vendor.display.lcd_density 560
+                else
+                    setprop vendor.display.lcd_density 640
+                fi
+                ;;
+        esac
+        ;;
+    "msmnile")
+        case "$soc_hwplatform" in
+            *)
+                if [ $fb_width -le 1600 ]; then
+                    setprop vendor.display.lcd_density 560
+                else
+                    setprop vendor.display.lcd_density 640
+                fi
+                ;;
+        esac
+        ;;
+    "kona")
+        case "$soc_hwplatform" in
+            *)
+                if [ $fb_width -le 1600 ]; then
+                    setprop vendor.display.lcd_density 560
+                else
+                    setprop vendor.display.lcd_density 640
+                fi
+                ;;
+        esac
+        ;;
+    "lito")
+        case "$soc_hwid" in
+            400|440)
+                sku_ver=`cat /sys/devices/platform/soc/aa00000.qcom,vidc1/sku_version` 2> /dev/null
+                if [ $sku_ver -eq 1 ]; then
+                    setprop vendor.media.target.version 1
+                fi
+                ;;
+            434|459)
+                sku_ver=`cat /sys/devices/platform/soc/aa00000.qcom,vidc1/sku_version` 2> /dev/null
+                setprop vendor.media.target.version 2
+                if [ $sku_ver -eq 1 ]; then
+                    setprop vendor.media.target.version 3
+                fi
+                ;;
+        esac
+        ;;
+    "bengal")
+        case "$soc_hwid" in
+            441)
+                setprop vendor.fastrpc.disable.cdsprpcd.daemon 1
+                setprop vendor.gralloc.disable_ubwc 1
+
+                # 196609 is decimal for 0x30001 to report version 3.1
+                setprop vendor.opengles.version 196609
+                ;;
+            471)
+                #scuba APQ
+                setprop vendor.gralloc.disable_ubwc 1
+                ;;
+        esac
+        ;;
+    "sdm710" | "msmpeafowl")
+        case "$soc_hwplatform" in
+            *)
+                if [ $fb_width -le 1600 ]; then
+                    setprop vendor.display.lcd_density 560
+                else
+                    setprop vendor.display.lcd_density 640
+                fi
+
+                sku_ver=`cat /sys/devices/platform/soc/aa00000.qcom,vidc1/sku_version` 2> /dev/null
+                if [ $sku_ver -eq 1 ]; then
+                    setprop vendor.media.target.version 1
+                fi
+                ;;
+        esac
+        ;;
+    "msm8953")
+        cap_ver = 1
+                if [ -e "/sys/devices/platform/soc/1d00000.qcom,vidc/capability_version" ]; then
+                    cap_ver=`cat /sys/devices/platform/soc/1d00000.qcom,vidc/capability_version` 2> /dev/null
+                else
+                    cap_ver=`cat /sys/devices/soc/1d00000.qcom,vidc/capability_version` 2> /dev/null
+                fi
+
+                if [ $cap_ver -eq 1 ]; then
+                    setprop vendor.media.target.version 1
+                fi
+                ;;
+    #Set property to differentiate SDM660 & SDM455
+    #SOC ID for SDM455 is 385
+    "sdm660")
+        case "$soc_hwplatform" in
+            *)
+                if [ $fb_width -le 1600 ]; then
+                    setprop vendor.display.lcd_density 560
+                else
+                    setprop vendor.display.lcd_density 640
+                fi
+
+                if [ $soc_hwid -eq 385 ]; then
+                    setprop vendor.media.target.version 1
+                fi
+                ;;
+        esac
+        ;;
+    "holi")
+        setprop vendor.media.target_variant "_holi"
+        ;;
+esac
+
+baseband=`getprop ro.baseband`
+#enable atfwd daemon all targets except sda, apq, qcs
+case "$baseband" in
+    "apq" | "sda" | "qcs" )
+        setprop persist.vendor.radio.atfwd.start false;;
+    *)
+        setprop persist.vendor.radio.atfwd.start true;;
+esac
+
+#set default lcd density
+#Since lcd density has read only
+#property, it will not overwrite previous set
+#property if any target is setting forcefully.
+set_density_by_fb
+
+
+# set Lilliput LCD density for ADP
+product=`getprop ro.board.platform`
+
+case "$product" in
+        "msmnile_au")
+         setprop vendor.display.lcd_density 160
+         echo 902400000 > /sys/class/devfreq/soc:qcom,cpu0-cpu-l3-lat/min_freq
+         echo 1612800000 > /sys/class/devfreq/soc:qcom,cpu0-cpu-l3-lat/max_freq
+         echo 902400000 > /sys/class/devfreq/soc:qcom,cpu4-cpu-l3-lat/min_freq
+         echo 1612800000 > /sys/class/devfreq/soc:qcom,cpu4-cpu-l3-lat/max_freq
+         ;;
+        *)
+        ;;
+esac
+case "$product" in
+        "sm6150_au")
+         setprop vendor.display.lcd_density 160
+         ;;
+        *)
+        ;;
+esac
+case "$product" in
+        "sdmshrike_au")
+         setprop vendor.display.lcd_density 160
+         ;;
+        *)
+        ;;
+esac
+
+case "$product" in
+        "msmnile_gvmq")
+         setprop vendor.display.lcd_density 160
+         ;;
+        *)
+        ;;
+esac
+# Setup display nodes & permissions
+# HDMI can be fb1 or fb2
+# Loop through the sysfs nodes and determine
+# the HDMI(dtv panel)
+
+function set_perms() {
+    #Usage set_perms <filename> <ownership> <permission>
+    chown -h $2 $1
+    chmod $3 $1
+}
+
+# check for the type of driver FB or DRM
+fb_driver=/sys/class/graphics/fb0
+if [ -e "$fb_driver" ]
+then
+    # check for mdp caps
+    file=/sys/class/graphics/fb0/mdp/caps
+    if [ -f "$file" ]
+    then
+        setprop vendor.gralloc.disable_ubwc 1
+        cat $file | while read line; do
+          case "$line" in
+                    *"ubwc"*)
+                    setprop vendor.gralloc.enable_fb_ubwc 1
+                    setprop vendor.gralloc.disable_ubwc 0
+                esac
+        done
+    fi
+else
+    set_perms /sys/devices/virtual/hdcp/msm_hdcp/min_level_change system.graphics 0660
+fi
+
+# allow system_graphics group to access pmic secure_mode node
+set_perms /sys/class/lcd_bias/secure_mode system.graphics 0660
+set_perms /sys/class/leds/wled/secure_mode system.graphics 0660
+
+boot_reason=`cat /proc/sys/kernel/boot_reason`
+reboot_reason=`getprop ro.boot.alarmboot`
+if [ "$boot_reason" = "3" ] || [ "$reboot_reason" = "true" ]; then
+    setprop ro.vendor.alarm_boot true
+else
+    setprop ro.vendor.alarm_boot false
+fi
+
+# copy GPU frequencies to vendor property
+if [ -f /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies ]; then
+    gpu_freq=`cat /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies` 2> /dev/null
+    setprop vendor.gpu.available_frequencies "$gpu_freq"
+fi
diff --git a/rootdir/bin/init.qcom.sh b/rootdir/bin/init.qcom.sh
new file mode 100644
index 0000000..02c0394
--- /dev/null
+++ b/rootdir/bin/init.qcom.sh
@@ -0,0 +1,465 @@
+#! /vendor/bin/sh
+
+# Copyright (c) 2009-2016, The Linux Foundation. All rights reserved.
+#
+# 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#
+
+target=`getprop ro.board.platform`
+low_ram=`getprop ro.config.low_ram`
+if [ -f /sys/devices/soc0/soc_id ]; then
+    platformid=`cat /sys/devices/soc0/soc_id`
+else
+    platformid=`cat /sys/devices/system/soc/soc0/id`
+fi
+
+start_battery_monitor()
+{
+	if ls /sys/bus/spmi/devices/qpnp-bms-*/fcc_data ; then
+		chown -h root.system /sys/module/pm8921_bms/parameters/*
+		chown -h root.system /sys/module/qpnp_bms/parameters/*
+		chown -h root.system /sys/bus/spmi/devices/qpnp-bms-*/fcc_data
+		chown -h root.system /sys/bus/spmi/devices/qpnp-bms-*/fcc_temp
+		chown -h root.system /sys/bus/spmi/devices/qpnp-bms-*/fcc_chgcyl
+		chmod 0660 /sys/module/qpnp_bms/parameters/*
+		chmod 0660 /sys/module/pm8921_bms/parameters/*
+		mkdir -p /data/bms
+		chown -h root.system /data/bms
+		chmod 0770 /data/bms
+		start battery_monitor
+	fi
+}
+
+start_charger_monitor()
+{
+	if ls /sys/module/qpnp_charger/parameters/charger_monitor; then
+		chown -h root.system /sys/module/qpnp_charger/parameters/*
+		chown -h root.system /sys/class/power_supply/battery/input_current_max
+		chown -h root.system /sys/class/power_supply/battery/input_current_trim
+		chown -h root.system /sys/class/power_supply/battery/input_current_settled
+		chown -h root.system /sys/class/power_supply/battery/voltage_min
+		chmod 0664 /sys/class/power_supply/battery/input_current_max
+		chmod 0664 /sys/class/power_supply/battery/input_current_trim
+		chmod 0664 /sys/class/power_supply/battery/input_current_settled
+		chmod 0664 /sys/class/power_supply/battery/voltage_min
+		chmod 0664 /sys/module/qpnp_charger/parameters/charger_monitor
+		start charger_monitor
+	fi
+}
+
+start_vm_bms()
+{
+	if [ -e /dev/vm_bms ]; then
+		chown -h root.system /sys/class/power_supply/bms/current_now
+		chown -h root.system /sys/class/power_supply/bms/voltage_ocv
+		chmod 0664 /sys/class/power_supply/bms/current_now
+		chmod 0664 /sys/class/power_supply/bms/voltage_ocv
+		start vm_bms
+	fi
+}
+
+start_msm_irqbalance_8939()
+{
+	if [ -f /vendor/bin/msm_irqbalance ]; then
+		case "$platformid" in
+		    "239" | "293" | "294" | "295" | "304" | "338" | "313" | "353" | "354")
+			start vendor.msm_irqbalance;;
+		    "349" | "350" )
+			start vendor.msm_irqbal_lb;;
+		esac
+	fi
+}
+
+start_msm_irqbalance_msmnile()
+{
+         if [ -f /vendor/bin/msm_irqbalance ]; then
+                start vendor.msm_irqbalance
+         fi
+}
+
+start_msm_irqbalance_kona()
+{
+         if [ -f /vendor/bin/msm_irqbalance ]; then
+                start vendor.msm_irqbalance
+         fi
+}
+
+start_msm_irqbalance_lito()
+{
+         if [ -f /vendor/bin/msm_irqbalance ]; then
+                start vendor.msm_irqbalance
+         fi
+}
+
+start_msm_irqbalance_atoll()
+{
+         if [ -f /vendor/bin/msm_irqbalance ]; then
+                start vendor.msm_irqbalance
+         fi
+}
+
+start_msm_irqbalance660()
+{
+	if [ -f /vendor/bin/msm_irqbalance ]; then
+		case "$platformid" in
+		    "317" | "321" | "324" | "325" | "326" | "336" | "345" | "346" | "360" | "393")
+			start vendor.msm_irqbalance;;
+		    "318" | "327" | "385")
+			start vendor.msm_irqbl_sdm630;;
+		esac
+	fi
+}
+
+start_msm_irqbalance()
+{
+	if [ -f /vendor/bin/msm_irqbalance ]; then
+			start vendor.msm_irqbalance
+	fi
+}
+
+baseband=`getprop ro.baseband`
+echo 1 > /proc/sys/net/ipv6/conf/default/accept_ra_defrtr
+
+case "$baseband" in
+        "svlte2a")
+        start bridgemgrd
+        ;;
+esac
+
+case "$target" in
+    "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+        if [ -f /sys/devices/soc0/hw_platform ]; then
+            value=`cat /sys/devices/soc0/hw_platform`
+        else
+            value=`cat /sys/devices/system/soc/soc0/hw_platform`
+        fi
+        case "$value" in
+            "Fluid")
+             start profiler_daemon;;
+        esac
+        ;;
+    "msm8660" )
+        if [ -f /sys/devices/soc0/hw_platform ]; then
+            platformvalue=`cat /sys/devices/soc0/hw_platform`
+        else
+            platformvalue=`cat /sys/devices/system/soc/soc0/hw_platform`
+        fi
+        case "$platformvalue" in
+            "Fluid")
+                start profiler_daemon;;
+        esac
+        ;;
+    "msm8960")
+        case "$baseband" in
+            "msm")
+                start_battery_monitor;;
+        esac
+
+        if [ -f /sys/devices/soc0/hw_platform ]; then
+            platformvalue=`cat /sys/devices/soc0/hw_platform`
+        else
+            platformvalue=`cat /sys/devices/system/soc/soc0/hw_platform`
+        fi
+        case "$platformvalue" in
+             "Fluid")
+                 start profiler_daemon;;
+             "Liquid")
+                 start profiler_daemon;;
+        esac
+        ;;
+    "msm8974")
+        platformvalue=`cat /sys/devices/soc0/hw_platform`
+        case "$platformvalue" in
+             "Fluid")
+                 start profiler_daemon;;
+             "Liquid")
+                 start profiler_daemon;;
+        esac
+        case "$baseband" in
+            "msm")
+                start_battery_monitor
+                ;;
+        esac
+        start_charger_monitor
+        ;;
+    "sdm660")
+        if [ -f /sys/devices/soc0/soc_id ]; then
+             soc_id=`cat /sys/devices/soc0/soc_id`
+        else
+             soc_id=`cat /sys/devices/system/soc/soc0/id`
+        fi
+
+        if [ -f /sys/devices/soc0/hw_platform ]; then
+             hw_platform=`cat /sys/devices/soc0/hw_platform`
+        else
+             hw_platform=`cat /sys/devices/system/soc/soc0/hw_platform`
+        fi
+
+        case "$soc_id" in
+             "317" | "324" | "325" | "326" | "318" | "327" )
+                  case "$hw_platform" in
+                       "Surf")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                       "MTP")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                       "RCM")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                       "QRD")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                  esac
+                  ;;
+       esac
+        start_msm_irqbalance660
+        ;;
+    "apq8084")
+        platformvalue=`cat /sys/devices/soc0/hw_platform`
+        case "$platformvalue" in
+             "Fluid")
+                 start profiler_daemon;;
+             "Liquid")
+                 start profiler_daemon;;
+        esac
+        ;;
+    "msm8226")
+        start_charger_monitor
+        ;;
+    "msm8610")
+        start_charger_monitor
+        ;;
+    "msm8916")
+        start_vm_bms
+        start_msm_irqbalance_8939
+        if [ -f /sys/devices/soc0/soc_id ]; then
+            soc_id=`cat /sys/devices/soc0/soc_id`
+        else
+            soc_id=`cat /sys/devices/system/soc/soc0/id`
+        fi
+
+        if [ -f /sys/devices/soc0/platform_subtype_id ]; then
+             platform_subtype_id=`cat /sys/devices/soc0/platform_subtype_id`
+        fi
+        if [ -f /sys/devices/soc0/hw_platform ]; then
+             hw_platform=`cat /sys/devices/soc0/hw_platform`
+        fi
+        case "$soc_id" in
+             "239")
+                  case "$hw_platform" in
+                       "Surf")
+                            case "$platform_subtype_id" in
+                                 "1")
+                                      setprop qemu.hw.mainkeys 0
+                                      ;;
+                            esac
+                            ;;
+                       "MTP")
+                          case "$platform_subtype_id" in
+                               "3")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                          esac
+                          ;;
+                  esac
+                  ;;
+        esac
+        ;;
+    "msm8994" | "msm8992" | "msm8998" | "apq8098_latv" | "sdm845" | "sdm710" | "qcs605" | "sm6150" | "trinket" | "bengal")
+        start_msm_irqbalance
+        ;;
+    "msm8996")
+        if [ -f /sys/devices/soc0/hw_platform ]; then
+             hw_platform=`cat /sys/devices/soc0/hw_platform`
+        fi
+        case "$hw_platform" in
+                "MTP" | "CDP")
+                #Loop through the sysfs nodes and determine the correct sysfs to change the permission and ownership.
+                        for count in 0 1 2 3 4 5 6 7 8 9 10
+                        do
+                                dir="/sys/devices/soc/75ba000.i2c/i2c-12/12-0020/input/input"$count
+                                if [ -d "$dir" ]; then
+                                     chmod 0660 $dir/secure_touch_enable
+                                     chmod 0440 $dir/secure_touch
+                                     chown system.drmrpc $dir/secure_touch_enable
+                                     chown system.drmrpc $dir/secure_touch
+                                     break
+                                fi
+                        done
+                        ;;
+        esac
+        ;;
+    "msm8909")
+        start_vm_bms
+        ;;
+    "msmnile")
+        start_msm_irqbalance_msmnile
+        ;;
+    "kona")
+        start_msm_irqbalance_kona
+        ;;
+    "lito")
+        start_msm_irqbalance_lito
+        ;;
+    "atoll")
+        start_msm_irqbalance_atoll
+        ;;
+    "msm8937")
+        start_msm_irqbalance_8939
+        if [ -f /sys/devices/soc0/soc_id ]; then
+            soc_id=`cat /sys/devices/soc0/soc_id`
+        else
+            soc_id=`cat /sys/devices/system/soc/soc0/id`
+        fi
+
+        if [ -f /sys/devices/soc0/hw_platform ]; then
+             hw_platform=`cat /sys/devices/soc0/hw_platform`
+        else
+             hw_platform=`cat /sys/devices/system/soc/soc0/hw_platform`
+        fi
+	if [ "$low_ram" != "true" ]; then
+             case "$soc_id" in
+                  "294" | "295" | "303" | "307" | "308" | "309" | "313" | "320" | "353" | "354" | "363" | "364")
+                       case "$hw_platform" in
+                            "Surf")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                            "MTP")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                            "RCM")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                            "QRD")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                       esac
+                       ;;
+             esac
+        fi
+        ;;
+    "msm8953")
+	start_msm_irqbalance_8939
+        if [ -f /sys/devices/soc0/soc_id ]; then
+            soc_id=`cat /sys/devices/soc0/soc_id`
+        else
+            soc_id=`cat /sys/devices/system/soc/soc0/id`
+        fi
+
+        if [ -f /sys/devices/soc0/hw_platform ]; then
+             hw_platform=`cat /sys/devices/soc0/hw_platform`
+        else
+             hw_platform=`cat /sys/devices/system/soc/soc0/hw_platform`
+        fi
+        case "$soc_id" in
+             "293" | "304" | "338" | "351" | "349" | "350" )
+                  case "$hw_platform" in
+                       "Surf")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                       "MTP")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                       "RCM")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                       "QRD")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                  esac
+                  ;;
+       esac
+        ;;
+    "sdm710")
+        if [ -f /sys/devices/soc0/soc_id ]; then
+            soc_id=`cat /sys/devices/soc0/soc_id`
+        else
+            soc_id=`cat /sys/devices/system/soc/soc0/id`
+        fi
+
+        if [ -f /sys/devices/soc0/hw_platform ]; then
+             hw_platform=`cat /sys/devices/soc0/hw_platform`
+        else
+             hw_platform=`cat /sys/devices/system/soc/soc0/hw_platform`
+        fi
+        case "$soc_id" in
+             "336" | "337" | "347" | "360" | "393" )
+                  case "$hw_platform" in
+                       "Surf")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                       "MTP")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                       "RCM")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                       "QRD")
+                                    setprop qemu.hw.mainkeys 0
+                                    ;;
+                  esac
+                  ;;
+       esac
+        ;;
+esac
+
+#
+# Make modem config folder and copy firmware config to that folder for RIL
+#
+if [ -f /data/vendor/modem_config/ver_info.txt ]; then
+    prev_version_info=`cat /data/vendor/modem_config/ver_info.txt`
+else
+    prev_version_info=""
+fi
+
+cur_version_info=`cat /vendor/firmware_mnt/verinfo/ver_info.txt`
+if [ ! -f /vendor/firmware_mnt/verinfo/ver_info.txt -o "$prev_version_info" != "$cur_version_info" ]; then
+    # add W for group recursively before delete
+    chmod g+w -R /data/vendor/modem_config/*
+    rm -rf /data/vendor/modem_config/*
+    # preserve the read only mode for all subdir and files
+    cp --preserve=m -dr /vendor/firmware_mnt/image/modem_pr/mcfg/configs/* /data/vendor/modem_config
+    cp --preserve=m -d /vendor/firmware_mnt/verinfo/ver_info.txt /data/vendor/modem_config/
+    cp --preserve=m -d /vendor/firmware_mnt/image/modem_pr/mbn_ota.txt /data/vendor/modem_config/
+    # the group must be root, otherwise this script could not add "W" for group recursively
+    chown -hR radio.root /data/vendor/modem_config/*
+fi
+chmod g-w /data/vendor/modem_config
+setprop ro.vendor.ril.mbn_copy_completed 1
+
+#check build variant for printk logging
+#current default minimum boot-time-default
+buildvariant=`getprop ro.build.type`
+case "$buildvariant" in
+    "userdebug" | "eng")
+        #set default loglevel to KERN_INFO
+        echo "6 6 1 7" > /proc/sys/kernel/printk
+        ;;
+    *)
+        #set default loglevel to KERN_WARNING
+        echo "4 4 1 4" > /proc/sys/kernel/printk
+        ;;
+esac
diff --git a/rootdir/bin/init.qti.dcvs.sh b/rootdir/bin/init.qti.dcvs.sh
new file mode 100644
index 0000000..f2ff0d1
--- /dev/null
+++ b/rootdir/bin/init.qti.dcvs.sh
@@ -0,0 +1,44 @@
+#! /vendor/bin/sh
+#
+# Copyright (c) 2020, The Linux Foundation. All rights reserved.
+#
+# 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.
+#
+    for device in /sys/devices/platform/soc
+    do
+        for memlat in $device/*cpu*-lat/devfreq/*cpu*-lat
+        do
+            echo "mem_latency" > $memlat/governor
+            echo 10 > $memlat/polling_interval
+            echo 400 > $memlat/mem_latency/ratio_ceil
+        done
+
+        for latfloor in $device/*cpu*-ddr-latfloor*/devfreq/*cpu-ddr-latfloor*
+        do
+            echo "compute" > $latfloor/governor
+            echo 10 > $latfloor/polling_interval
+        done
+    done;
diff --git a/rootdir/bin/init.qti.early_init.sh b/rootdir/bin/init.qti.early_init.sh
new file mode 100644
index 0000000..b7b0c4b
--- /dev/null
+++ b/rootdir/bin/init.qti.early_init.sh
@@ -0,0 +1,68 @@
+#! /vendor/bin/sh
+#
+# Copyright (c) 2021 The Linux Foundation. All rights reserved.
+#
+# 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.
+#
+# Changes from Qualcomm Innovation Center are provided under the following license:
+# Copyright (c) 2022-2023, 2025 Qualcomm Innovation Center, Inc. All rights reserved.
+# SPDX-License-Identifier: BSD-3-Clause-Clear
+
+soc_id=`cat /sys/devices/soc0/soc_id` 2> /dev/null
+
+# Store soc_id in ro.vendor.qti.soc_id
+setprop ro.vendor.qti.soc_id $soc_id
+
+if [ "$soc_id" -eq 444 ]; then
+    setprop ro.vendor.qti.soc_model SM6115
+elif [ "$soc_id" -eq 417 ]; then
+    setprop ro.vendor.qti.soc_model SM4250
+elif [ "$soc_id" -eq 441 ]; then
+    setprop ro.vendor.qti.soc_model SM4125
+elif [ "$soc_id" -eq 518 ]; then
+    setprop ro.vendor.qti.soc_model SM6225
+elif [ "$soc_id" -eq 469 ]; then
+    setprop ro.vendor.qti.soc_model QCM4290
+elif [ "$soc_id" -eq 470 ]; then
+    setprop ro.vendor.qti.soc_model QCS4290
+elif [ "$soc_id" -eq 473 ]; then
+    setprop ro.vendor.qti.soc_model QCM2290
+    setprop vendor.audio.feature.dmabuf.cma.memory.enable true
+    setprop vendor.audio.feature.use_spkr_hs_combo.enable true
+elif [ "$soc_id" -eq 474 ]; then
+    setprop ro.vendor.qti.soc_model QCS2290
+    setprop vendor.audio.feature.dmabuf.cma.memory.enable true
+    setprop vendor.audio.feature.use_spkr_hs_combo.enable true
+elif [ "$soc_id" -eq 497 ]; then
+    setprop ro.vendor.qti.soc_model QCM6490
+elif [ "$soc_id" -eq 498 ]; then
+    setprop ro.vendor.qti.soc_model QCS6490
+elif [ "$soc_id" -eq 585 ]; then
+    setprop ro.vendor.qti.soc_model SG4150P
+    setprop vendor.audio.feature.dmabuf.cma.memory.enable true
+elif [ "$soc_id" -eq 586 ]; then
+    setprop ro.vendor.qti.soc_model QCM4325
+fi
diff --git a/rootdir/bin/init.qti.kernel.sh b/rootdir/bin/init.qti.kernel.sh
new file mode 100755
index 0000000..404e27b
--- /dev/null
+++ b/rootdir/bin/init.qti.kernel.sh
@@ -0,0 +1,56 @@
+#! /vendor/bin/sh
+#=============================================================================
+# Copyright (c) 2019-2020 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# Copyright (c) 2009-2012, 2014-2019, The Linux Foundation. All rights reserved.
+#
+# 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
+#=============================================================================
+
+verify_pasr_support()
+{
+	ddr_type=`od -An -tx /proc/device-tree/memory/ddr_device_type`
+	ddr_type5="08"
+
+         if [ -d /sys/kernel/mem-offline ]; then
+		#only LPDDR5 supports PAAR
+		if [ ${ddr_type:4:2} != $ddr_type5 ]; then
+			setprop vendor.pasr.activemode.enabled false
+		fi
+
+                setprop vendor.pasr.enabled true
+         fi
+}
+
+start_msm_irqbalance()
+{
+         if [ -f /vendor/bin/msm_irqbalance ]; then
+                start vendor.msm_irqbalance
+         fi
+}
+start_msm_irqbalance
+verify_pasr_support
diff --git a/rootdir/bin/init.qti.write.sh b/rootdir/bin/init.qti.write.sh
new file mode 100755
index 0000000..a243551
--- /dev/null
+++ b/rootdir/bin/init.qti.write.sh
@@ -0,0 +1,27 @@
+#!/vendor/bin/sh
+#=============================================================================
+# Copyright (c) 2021 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#=============================================================================
+
+write_with_check() {
+	local i=60
+	while [ $i -gt 0 ]
+	do
+		if [ -f "$1" ]; then
+			break
+		fi
+
+		sleep 1
+		i=$(($i-1))
+	done
+
+	if [ ! -f "$1" ]; then
+		exit 1
+	fi
+
+	echo $2 > $1
+}
+
+write_with_check "$1" "$2"
diff --git a/rootdir/bin/system_dlkm_modprobe.sh b/rootdir/bin/system_dlkm_modprobe.sh
new file mode 100755
index 0000000..2ed5390
--- /dev/null
+++ b/rootdir/bin/system_dlkm_modprobe.sh
@@ -0,0 +1,41 @@
+#! /vendor/bin/sh
+#=============================================================================
+# Copyright (c) 2022 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#=============================================================================
+
+SYSTEM_DLKM_DIR="/system_dlkm/lib/modules"
+VENDOR_DLKM_DIR="/vendor_dlkm/lib/modules"
+
+MODPROBE="/vendor/bin/modprobe"
+
+for dir in ${SYSTEM_DLKM_DIR} ;
+do
+	if [ ! -e ${dir}/*/modules.load ]; then
+		continue
+	fi
+	if [ -e ${VENDOR_DLKM_DIR}/system_dlkm.modules.blocklist ] && grep -q blocklist ${VENDOR_DLKM_DIR}/system_dlkm.modules.blocklist; then
+		blocklist_expr="$(sed -n -e 's/blocklist \(.*\)/\1/p' ${VENDOR_DLKM_DIR}/system_dlkm.modules.blocklist | sed -e 's/-/_/g' -e 's/^/-e /')"
+	else
+		# Use pattern that won't be found in modules list so that all modules pass through grep below
+		blocklist_expr="-e %"
+	fi
+	# Filter out modules in blocklist - we would see unnecessary errors otherwise
+	load_modules=$(cat ${dir}/*/modules.load | grep -w -v ${blocklist_expr})
+	first_module=$(echo ${load_modules} | cut -d " " -f1)
+	other_modules=$(echo ${load_modules} | cut -d " " -f2-)
+	if ! ${MODPROBE} -b -s -d ${dir}/*/ -a ${first_module} > /dev/null ; then
+		continue
+	fi
+	# load modules individually in case one of them fails to init
+	for module in ${other_modules}; do
+		( ${MODPROBE} -b -s -d ${dir}/*/ -a ${module} > /dev/null ) &
+	done
+
+	wait
+
+	exit 0
+done
+
+exit 1
diff --git a/rootdir/bin/vendor_modprobe.sh b/rootdir/bin/vendor_modprobe.sh
new file mode 100755
index 0000000..6c0098b
--- /dev/null
+++ b/rootdir/bin/vendor_modprobe.sh
@@ -0,0 +1,61 @@
+#! /vendor/bin/sh
+#=============================================================================
+# Copyright (c) 2019-2022 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#=============================================================================
+
+VENDOR_DIR="/vendor/lib/modules"
+VENDOR_DLKM_DIR="/vendor_dlkm/lib/modules"
+
+MODPROBE="/vendor/bin/modprobe"
+
+# vendor modules partition could be /vendor/lib/modules or /vendor_dlkm/lib/modules
+POSSIBLE_DIRS="${VENDOR_DLKM_DIR} ${VENDOR_DIR}"
+audio_arch=`getprop ro.boot.audio`
+
+for dir in ${POSSIBLE_DIRS} ;
+do
+	if [ ! -e ${dir}/modules.load ]; then
+		continue
+	fi
+
+	if [ "$audio_arch" == "audioreach" ]; then
+		if [ -e ${dir}/modules.audio.ar.blocklist ]; then
+			audio_blocklist_expr="$(sed -n -e 's/blocklist \(.*\)/\1/p' ${dir}/modules.audio.ar.blocklist | sed -e 's/-/_/g' -e 's/^/-e /')"
+		else
+			audio_blocklist_expr="-e %"
+		fi
+	else
+		if [ -e ${dir}/modules.audio.legacy.blocklist ]; then
+			audio_blocklist_expr="$(sed -n -e 's/blocklist \(.*\)/\1/p' ${dir}/modules.audio.legacy.blocklist | sed -e 's/-/_/g' -e 's/^/-e /')"
+		else
+			audio_blocklist_expr="-e %"
+		fi
+	fi
+
+	if [ -e ${dir}/modules.blocklist ]; then
+		blocklist_expr="$(sed -n -e 's/blocklist \(.*\)/\1/p' ${dir}/modules.blocklist | sed -e 's/-/_/g' -e 's/^/-e /')"
+	else
+		# Use pattern that won't be found in modules list so that all modules pass through grep below
+		blocklist_expr="-e %"
+	fi
+	# Filter out modules in blocklist - we would see unnecessary errors otherwise
+	load_modules=$(cat ${dir}/modules.load | grep -w -v ${blocklist_expr} | grep -w -v ${audio_blocklist_expr})
+	first_module=$(echo ${load_modules} | cut -d " " -f1)
+	other_modules=$(echo ${load_modules} | cut -d " " -f2-)
+	if ! ${MODPROBE} -b -s -d ${dir} -a ${first_module} > /dev/null ; then
+		continue
+	fi
+	# load modules individually in case one of them fails to init
+	for module in ${other_modules}; do
+		( ${MODPROBE} -b -d ${dir} -a ${module} > /dev/null ) &
+	done
+
+	wait
+
+	setprop vendor.all.modules.ready 1
+	exit 0
+done
+
+exit 1
