Initial commit, long overdue

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

View file

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

View file

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

View file

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

View file

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

File diff suppressed because it is too large Load diff

View file

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

View file

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