From c9bab638d49fbae9991cf7fbf86357d8a285a1db Mon Sep 17 00:00:00 2001 From: Alexey Minnekhanov Date: Mon, 3 Jun 2024 22:17:46 +0300 Subject: [PATCH] main/lk2nd: upgrade to 0.16.0 (MR 5197) Latest release of "old" lk2nd. Release notes: - msm8974 improvements - New variants for few Samsung devices, some renames - Added Lenovo Vibe K5 variants New devices: - Vivo Y21L - Motorola Moto G 4G - Huawei G7 Plus - Samsung Galaxy On7 2015 (SM-G600FY) - HTC One M8 - Samsung G360T Added big patch to fix compile errors with gcc-14. Signed-off-by: Alexey Minnekhanov [ci:skip-build]: already built successfully in CI --- main/lk2nd/0001-build-fixes.patch | 1815 +++++++++++++++++++++++++++++ main/lk2nd/APKBUILD | 12 +- 2 files changed, 1823 insertions(+), 4 deletions(-) create mode 100644 main/lk2nd/0001-build-fixes.patch diff --git a/main/lk2nd/0001-build-fixes.patch b/main/lk2nd/0001-build-fixes.patch new file mode 100644 index 000000000..aae4aa2a0 --- /dev/null +++ b/main/lk2nd/0001-build-fixes.patch @@ -0,0 +1,1815 @@ +From 9fca5483818a457e11a5eeabfb487ebb71847d0d Mon Sep 17 00:00:00 2001 +From: Alexey Minnekhanov +Date: Mon, 3 Jun 2024 11:05:41 +0300 +Subject: [PATCH] build fixes + +--- + app/aboot/aboot.c | 24 ++- + app/aboot/fastboot.c | 6 +- + arch/arm/mmu.c | 4 + + dev/gcdb/display/gcdb_display.c | 32 +-- + dev/gcdb/display/panel_display.c | 6 + + dev/pmic/pm8x41/pm8x41_vib.c | 1 + + dev/vib/vibrator.c | 3 +- + include/string.h | 5 + + kernel/main.c | 2 + + lib/debug/debug.c | 7 +- + lib/fs/ext2/dir.c | 4 +- + lib/libc/string/rules.mk | 1 + + lib/libc/string/strtol.c | 242 ++++++++++++++++++++++ + lib/libfdt/fdt_overlay.c | 2 +- + platform/init.c | 2 +- + platform/msm8226/include/platform/iomap.h | 3 + + platform/msm8226/msm8226-clock.c | 4 +- + platform/msm8226/platform.c | 1 + + platform/msm8916/acpuclock.c | 3 + + platform/msm8916/include/platform/iomap.h | 8 + + platform/msm8916/msm8916-clock.c | 8 +- + platform/msm8916/platform.c | 1 + + platform/msm8974/acpuclock.c | 4 + + platform/msm8974/include/platform/iomap.h | 3 + + platform/msm8974/msm8974-clock.c | 16 +- + platform/msm8974/platform.c | 1 + + platform/msm_shared/board.c | 2 + + platform/msm_shared/boot_stats.c | 4 + + platform/msm_shared/clock_lib2.c | 3 +- + platform/msm_shared/dev_tree.c | 11 +- + platform/msm_shared/display.c | 12 ++ + platform/msm_shared/edp.c | 3 + + platform/msm_shared/edp_aux.c | 2 + + platform/msm_shared/edp_phy.c | 1 + + platform/msm_shared/hsusb.c | 16 +- + platform/msm_shared/i2c_qup.c | 4 + + platform/msm_shared/interrupts.c | 5 + + platform/msm_shared/mdp5.c | 7 +- + platform/msm_shared/mipi_dsi.c | 18 +- + platform/msm_shared/mipi_dsi_autopll.c | 3 + + platform/msm_shared/mipi_dsi_phy.c | 4 + + platform/msm_shared/mmc_sdhci.c | 4 + + platform/msm_shared/mmc_wrapper.c | 1 + + platform/msm_shared/partition_parser.c | 12 +- + platform/msm_shared/qpic_nand.c | 2 +- + platform/msm_shared/reboot.c | 2 + + platform/msm_shared/scm.c | 21 +- + platform/msm_shared/sdhci_msm.c | 3 +- + platform/msm_shared/shutdown_detect.c | 6 +- + platform/msm_shared/smem.c | 6 +- + platform/msm_shared/spmi.c | 10 +- + platform/msm_shared/usb30_dwc_hw.h | 1 + + platform/msm_shared/usb30_udc.c | 2 + + target/msm8226/init.c | 4 + + target/msm8916/init.c | 4 + + target/msm8974/init.c | 8 + + 56 files changed, 484 insertions(+), 90 deletions(-) + create mode 100644 lib/libc/string/strtol.c + +diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c +index 0ad935bba..70f35de67 100644 +--- a/app/aboot/aboot.c ++++ b/app/aboot/aboot.c +@@ -86,12 +86,16 @@ + #include "secapp_loader.h" + #include + #include ++#include ++#include + + extern bool target_use_signed_kernel(void); + extern void platform_uninit(void); + extern void target_uninit(void); + extern int get_target_boot_params(const char *cmdline, const char *part, + char *buf, int buflen); ++extern void hash_find(unsigned char *addr, unsigned int size, unsigned char *digest, unsigned char auth_alg); ++extern void save_kernel_hash_cmd(void *digest); + + void *info_buf; + void write_device_info_mmc(device_info *dev); +@@ -100,6 +104,10 @@ static int aboot_save_boot_hash_mmc(uint32_t image_addr, uint32_t image_size); + extern void display_fbcon_message(char *str); + static int aboot_frp_unlock(char *pname, void *data, unsigned sz); + static inline uint64_t validate_partition_size(); ++ ++extern uint32_t read_der_message_length(unsigned char* input, unsigned sz); ++extern int image_verify(unsigned char *image_ptr, unsigned char *signature_ptr, unsigned int image_size, unsigned hash_type); ++ + bool pwr_key_is_pressed = false; + unsigned boot_into_recovery = 0; + unsigned bytes_to_round_page = 0; +@@ -320,7 +328,7 @@ static unsigned char *update_cmdline0(const char * cmdline) + { + int cmdline_len = 0; + int have_cmdline = 0; +- unsigned char *cmdline_final = NULL; ++ char *cmdline_final = NULL; + int pause_at_bootup = 0; + bool warm_boot = false; + bool gpt_exists = partition_gpt_exists(); +@@ -452,7 +460,7 @@ static unsigned char *update_cmdline0(const char * cmdline) + const char *src; + unsigned char *dst; + +- cmdline_final = (unsigned char*) malloc((cmdline_len + 4) & (~3)); ++ cmdline_final = (char*) malloc((cmdline_len + 4) & (~3)); + ASSERT(cmdline_final != NULL); + memset((void *)cmdline_final, 0, sizeof(*cmdline_final)); + dst = cmdline_final; +@@ -622,8 +630,9 @@ static unsigned char *update_cmdline0(const char * cmdline) + free(boot_dev_buf); + + dprintf(INFO, "cmdline: %s\n", cmdline_final ? cmdline_final : ""); +- return cmdline_final; ++ return (unsigned char *)cmdline_final; + } ++ + static char *concat_args(const char *a, const char *b) + { + int lenA = strlen(a), lenB = strlen(b); +@@ -633,6 +642,7 @@ static char *concat_args(const char *a, const char *b) + memcpy(r + lenA + 1, b, lenB + 1); + return r; + } ++ + unsigned char *update_cmdline(const char *cmdline) + { + #if WITH_LK2ND +@@ -817,7 +827,7 @@ void boot_linux(void *kernel, unsigned *tags, + uint32_t tags_phys = PA((addr_t)tags); + struct kernel64_hdr *kptr = (struct kernel64_hdr*)kernel; + +- ramdisk = PA(ramdisk); ++ ramdisk = (void *)PA((addr_t)ramdisk); + + final_cmdline = update_cmdline((const char*)cmdline); + +@@ -1934,7 +1944,7 @@ static int read_allow_oem_unlock(device_info *dev) + ptn_size = partition_get_size(index); + offset = ptn_size - blocksize; + +- if (mmc_read(ptn + offset, buf, sizeof(buf))) ++ if (mmc_read(ptn + offset, (uint32_t *)buf, sizeof(buf))) + { + dprintf(CRITICAL, "Reading MMC failed\n"); + return -1; +@@ -1969,7 +1979,7 @@ static int write_allow_oem_unlock(bool allow_unlock) + ptn_size = partition_get_size(index); + offset = ptn_size - blocksize; + +- if (mmc_read(ptn + offset, buf, sizeof(buf))) ++ if (mmc_read(ptn + offset, (uint32_t *)buf, sizeof(buf))) + { + dprintf(CRITICAL, "Reading MMC failed\n"); + return -1; +@@ -4139,7 +4149,7 @@ static int aboot_save_boot_hash_mmc(uint32_t image_addr, uint32_t image_size) + #endif + + target_crypto_init_params(); +- hash_find(image_addr, image_size, (unsigned char *)&digest, auth_algo); ++ hash_find((unsigned char *)image_addr, image_size, (unsigned char *)&digest, auth_algo); + + save_kernel_hash_cmd(digest); + dprintf(INFO, "aboot_save_boot_hash_mmc: imagesize_actual size %d bytes.\n", (int) image_size); +diff --git a/app/aboot/fastboot.c b/app/aboot/fastboot.c +index 36e6dedac..bcf72fbf8 100644 +--- a/app/aboot/fastboot.c ++++ b/app/aboot/fastboot.c +@@ -288,7 +288,7 @@ static int hsusb_usb_read(void *_buf, unsigned len) + + while (len > 0) { + xfer = (len > MAX_USBFS_BULK_SIZE) ? MAX_USBFS_BULK_SIZE : len; +- req->buf = PA((addr_t)buf); ++ req->buf = (void *)PA((addr_t)buf); + req->length = xfer; + req->complete = req_complete; + r = udc_request_queue(out, req); +@@ -314,7 +314,7 @@ static int hsusb_usb_read(void *_buf, unsigned len) + * Force reload of buffer from memory + * since transaction is complete now. + */ +- arch_invalidate_cache_range(_buf, count); ++ arch_invalidate_cache_range((addr_t)_buf, count); + return count; + + oops: +@@ -334,7 +334,7 @@ static int hsusb_usb_write(void *buf, unsigned len) + + while (len > 0) { + xfer = (len > MAX_USBFS_BULK_SIZE) ? MAX_USBFS_BULK_SIZE : len; +- req->buf = PA((addr_t)_buf); ++ req->buf = (void *)PA((addr_t)_buf); + req->length = xfer; + req->complete = req_complete; + r = udc_request_queue(in, req); +diff --git a/arch/arm/mmu.c b/arch/arm/mmu.c +index 3e086270d..5ee424986 100644 +--- a/arch/arm/mmu.c ++++ b/arch/arm/mmu.c +@@ -26,8 +26,12 @@ + #include + #include + #include ++#include + #include + ++extern int platform_use_identity_mmu_mappings(void); ++extern void platform_init_mmu_mappings(void); ++ + #if ARM_WITH_MMU + + #define MB (1024*1024) +diff --git a/dev/gcdb/display/gcdb_display.c b/dev/gcdb/display/gcdb_display.c +index e263a5e81..505e9f967 100644 +--- a/dev/gcdb/display/gcdb_display.c ++++ b/dev/gcdb/display/gcdb_display.c +@@ -36,7 +36,9 @@ + #include + #include + #include ++#include + #include ++#include + + #include "include/display_resource.h" + #include "include/panel.h" +@@ -45,6 +47,14 @@ + #include "target/display.h" + #include "gcdb_autopll.h" + ++extern uint8_t target_is_edp(); ++extern void target_edp_panel_init(struct msm_panel_info *pinfo); ++extern int target_edp_panel_clock(uint8_t enable, struct msm_panel_info *pinfo); ++extern int target_edp_panel_enable(void); ++extern int target_edp_panel_disable(void); ++extern int target_edp_bl_ctrl(int enable); ++extern int oem_panel_select(const char *panel_name, struct panel_struct *panel, struct msm_panel_info *pinfo, struct mdss_dsi_phy_ctrl *phy_db); ++ + /*---------------------------------------------------------------------------*/ + /* static */ + /*---------------------------------------------------------------------------*/ +@@ -76,10 +86,9 @@ static uint32_t mdss_dsi_panel_reset(uint8_t enable) + return ret; + } + +-static uint32_t mdss_dsi_panel_clock(uint8_t enable, +- struct msm_panel_info *pinfo) ++static int mdss_dsi_panel_clock(int enable, struct msm_panel_info *pinfo) + { +- uint32_t ret = NO_ERROR; ++ int ret = NO_ERROR; + + ret = calculate_clock_config(pinfo); + if (ret) { +@@ -92,8 +101,7 @@ static uint32_t mdss_dsi_panel_clock(uint8_t enable, + return ret; + } + +-static int mdss_dsi_panel_power(uint8_t enable, +- struct msm_panel_info *pinfo) ++static int mdss_dsi_panel_power(int enable, struct msm_panel_info *pinfo) + { + int ret = NO_ERROR; + +@@ -151,7 +159,7 @@ static int mdss_dsi_panel_pre_init(void) + return ret; + } + +-static int mdss_dsi_bl_enable(uint8_t enable) ++static int mdss_dsi_bl_enable(int enable) + { + int ret = NO_ERROR; + +@@ -302,13 +310,12 @@ static void init_platform_data() + + static void mdss_edp_panel_init(struct msm_panel_info *pinfo) + { +- return target_edp_panel_init(pinfo); ++ target_edp_panel_init(pinfo); + } + +-static uint32_t mdss_edp_panel_clock(uint8_t enable, +- struct msm_panel_info *pinfo) ++static int mdss_edp_panel_clock(int enable) + { +- return target_edp_panel_clock(enable, pinfo); ++ return target_edp_panel_clock(enable, NULL); + } + + static uint32_t mdss_edp_panel_enable(void) +@@ -321,8 +328,7 @@ static uint32_t mdss_edp_panel_disable(void) + return target_edp_panel_disable(); + } + +-static int mdss_edp_panel_power(uint8_t enable, +- struct msm_panel_info *pinfo) ++static int mdss_edp_panel_power(int enable, struct msm_panel_info *pinfo) + { + int ret = NO_ERROR; + +@@ -358,7 +364,7 @@ static int mdss_edp_panel_power(uint8_t enable, + return ret; + } + +-static int mdss_edp_bl_enable(uint8_t enable) ++static int mdss_edp_bl_enable(int enable) + { + int ret = NO_ERROR; + +diff --git a/dev/gcdb/display/panel_display.c b/dev/gcdb/display/panel_display.c +index c4291a58e..d3fefa1ad 100755 +--- a/dev/gcdb/display/panel_display.c ++++ b/dev/gcdb/display/panel_display.c +@@ -47,6 +47,12 @@ + #include "panel_display.h" + #include "include/panel.h" + ++extern int target_display_pre_on(); ++extern int target_display_pre_off(); ++extern int target_display_post_on(); ++extern int target_display_post_off(); ++extern int mdss_dsi_cmd_mode_config(uint16_t disp_width, uint16_t disp_height, uint16_t img_width, uint16_t img_height, uint16_t dst_format, uint8_t ystride, uint8_t lane_en, uint8_t interleav, uint32_t ctl_base); ++ + /*---------------------------------------------------------------------------*/ + /* Panel Init */ + /*---------------------------------------------------------------------------*/ +diff --git a/dev/pmic/pm8x41/pm8x41_vib.c b/dev/pmic/pm8x41/pm8x41_vib.c +index 7dbba773f..42dc3d3e4 100644 +--- a/dev/pmic/pm8x41/pm8x41_vib.c ++++ b/dev/pmic/pm8x41/pm8x41_vib.c +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + #include + + #define QPNP_VIB_EN BIT(7) +diff --git a/dev/vib/vibrator.c b/dev/vib/vibrator.c +index e8cb8c7c3..2ea9bcf87 100644 +--- a/dev/vib/vibrator.c ++++ b/dev/vib/vibrator.c +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -52,7 +53,7 @@ void vib_turn_off() + } + + /* Function to turn off vibrator when the vib_timer is expired. */ +-static enum handler_return vib_timer_func(struct timer *v_timer, void *arg) ++static enum handler_return vib_timer_func(struct timer *v_timer, long unsigned int arg0, void *arg1) + { + timer_cancel(&vib_timer); + vib_turn_off(); +diff --git a/include/string.h b/include/string.h +index f81562f8b..0d8607c09 100644 +--- a/include/string.h ++++ b/include/string.h +@@ -59,6 +59,11 @@ size_t strxfrm(char *dest, const char *src, size_t n) __PURE; + char *strdup(const char *str) __MALLOC; + void strrev(unsigned char *str); + ++unsigned long long strtoull(const char *restrict s, char **restrict p, int base); ++long long strtoll(const char *restrict s, char **restrict p, int base); ++unsigned long strtoul(const char *restrict s, char **restrict p, int base); ++long strtol(const char *restrict s, char **restrict p, int base); ++ + #ifdef __cplusplus + } /* extern "C" */ + #endif +diff --git a/kernel/main.c b/kernel/main.c +index 95a433951..0e5a87b3b 100644 +--- a/kernel/main.c ++++ b/kernel/main.c +@@ -34,6 +34,8 @@ + #include + #include + #include ++#include ++#include + + extern void *__ctor_list; + extern void *__ctor_end; +diff --git a/lib/debug/debug.c b/lib/debug/debug.c +index c6611835a..36c195ff9 100644 +--- a/lib/debug/debug.c ++++ b/lib/debug/debug.c +@@ -36,8 +36,7 @@ + #include + #include + +-void __attribute__ ((noreturn)) +-__stack_chk_fail (void) ++void __attribute__ ((noreturn)) __stack_chk_fail (void) + { + panic("stack smashing detected."); + } +@@ -50,13 +49,13 @@ void spin(uint32_t usecs) + ; + } + +-void halt(void) ++void __attribute__ ((noreturn)) halt(void) + { + enter_critical_section(); // disable ints + platform_halt(); + } + +-void _panic(void *caller, const char *fmt, ...) ++void __attribute__ ((noreturn)) _panic(void *caller, const char *fmt, ...) + { + dprintf(ALWAYS, "panic (caller %p): ", caller); + +diff --git a/lib/fs/ext2/dir.c b/lib/fs/ext2/dir.c +index 90dc42584..1ecc53413 100644 +--- a/lib/fs/ext2/dir.c ++++ b/lib/fs/ext2/dir.c +@@ -225,7 +225,7 @@ status_t ext2_open_directory(fscookie *cookie, const char *path, dircookie **dir + dir->offset = 0; + dir->length = entry_len; + +- *dircookie = dir; ++ *dircookie = (struct dircookie *)dir; + + return 0; + } +@@ -254,7 +254,7 @@ status_t ext2_read_directory(dircookie *dircookie, struct dirent *ent) { + status_t ext2_close_directory(dircookie *dircookie) { + ext2_dir_t *dir = (ext2_dir_t *)dircookie; + +- ext2_close_file(dir->file); ++ ext2_close_file((filecookie *)dir->file); + free(dir); + return 0; + } +diff --git a/lib/libc/string/rules.mk b/lib/libc/string/rules.mk +index dd594d5fa..25a66e7f1 100644 +--- a/lib/libc/string/rules.mk ++++ b/lib/libc/string/rules.mk +@@ -30,6 +30,7 @@ C_STRING_OPS := \ + strspn \ + strstr \ + strtok \ ++ strtol \ + strxfrm + + LIBC_STRING_C_DIR := $(LOCAL_DIR) +diff --git a/lib/libc/string/strtol.c b/lib/libc/string/strtol.c +new file mode 100644 +index 000000000..5e984401b +--- /dev/null ++++ b/lib/libc/string/strtol.c +@@ -0,0 +1,242 @@ ++#include ++ ++/* The shcnt field stores the number of bytes read so far, offset by ++ * the value of buf-rpos at the last function call (__shlim or __shgetc), ++ * so that between calls the inline shcnt macro can add rpos-buf to get ++ * the actual count. */ ++ ++/* This function assumes it will never be called if there is already ++ * data buffered for reading. */ ++ ++#define EOF (-1) ++ ++#define FFINALLOCK(f) ((f)->lock>=0 ? __lockfile((f)) : 0) ++#define FLOCK(f) int __need_unlock = ((f)->lock>=0 ? __lockfile((f)) : 0) ++#define FUNLOCK(f) do { if (__need_unlock) __unlockfile((f)); } while (0) ++ ++#define F_PERM 1 ++#define F_NORD 4 ++#define F_NOWR 8 ++#define F_EOF 16 ++#define F_ERR 32 ++#define F_SVB 64 ++#define F_APP 128 ++ ++typedef struct _IO_FILE FILE; ++ ++struct _IO_FILE { ++ unsigned flags; ++ unsigned char *rpos, *rend; ++ int (*close)(FILE *); ++ unsigned char *wend, *wpos; ++ unsigned char *mustbezero_1; ++ unsigned char *wbase; ++ size_t (*read)(FILE *, unsigned char *, size_t); ++ size_t (*write)(FILE *, const unsigned char *, size_t); ++ off_t (*seek)(FILE *, off_t, int); ++ unsigned char *buf; ++ size_t buf_size; ++ FILE *prev, *next; ++ int fd; ++ int pipe_pid; ++ long lockcount; ++ int mode; ++ volatile int lock; ++ int lbf; ++ void *cookie; ++ off_t off; ++ char *getln_buf; ++ void *mustbezero_2; ++ unsigned char *shend; ++ off_t shlim, shcnt; ++ FILE *prev_locked, *next_locked; ++ struct __locale_struct *locale; ++}; ++ ++static int __toread(FILE *f) ++{ ++ f->mode |= f->mode-1; ++ if (f->wpos != f->wbase) f->write(f, 0, 0); ++ f->wpos = f->wbase = f->wend = 0; ++ if (f->flags & F_NORD) { ++ f->flags |= F_ERR; ++ return EOF; ++ } ++ f->rpos = f->rend = f->buf + f->buf_size; ++ return (f->flags & F_EOF) ? EOF : 0; ++} ++ ++static int __uflow(FILE *f) ++{ ++ unsigned char c; ++ if (!__toread(f) && f->read(f, &c, 1)==1) return c; ++ return EOF; ++} ++ ++#define shcnt(f) ((f)->shcnt + ((f)->rpos - (f)->buf)) ++#define shlim(f, lim) __shlim((f), (lim)) ++#define shgetc(f) (((f)->rpos != (f)->shend) ? *(f)->rpos++ : __shgetc(f)) ++#define shunget(f) ((f)->shlim>=0 ? (void)(f)->rpos-- : (void)0) ++ ++#define sh_fromstring(f, s) \ ++ ((f)->buf = (f)->rpos = (void *)(s), (f)->rend = (void*)-1) ++ ++static void __shlim(FILE *f, off_t lim) ++{ ++ f->shlim = lim; ++ f->shcnt = f->buf - f->rpos; ++ /* If lim is nonzero, rend must be a valid pointer. */ ++ if (lim && f->rend - f->rpos > lim) ++ f->shend = f->rpos + lim; ++ else ++ f->shend = f->rend; ++} ++ ++static int __shgetc(FILE *f) ++{ ++ int c; ++ off_t cnt = shcnt(f); ++ if (f->shlim && cnt >= f->shlim || (c=__uflow(f)) < 0) { ++ f->shcnt = f->buf - f->rpos + cnt; ++ f->shend = f->rpos; ++ f->shlim = -1; ++ return EOF; ++ } ++ cnt++; ++ if (f->shlim && f->rend - f->rpos > f->shlim - cnt) ++ f->shend = f->rpos + (f->shlim - cnt); ++ else ++ f->shend = f->rend; ++ f->shcnt = f->buf - f->rpos + cnt; ++ if (f->rpos <= f->buf) f->rpos[-1] = c; ++ return c; ++} ++ ++static int isspace(int c) ++{ ++ return c == ' ' || (unsigned)c-'\t' < 5; ++} ++ ++/* Lookup table for digit values. -1==255>=36 -> invalid */ ++static const unsigned char table[] = { -1, ++-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, ++-1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, ++25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1, ++-1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, ++25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1, ++-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++}; ++ ++static unsigned long long __intscan(FILE *f, unsigned base, int pok, unsigned long long lim) ++{ ++ const unsigned char *val = table+1; ++ int c, neg=0; ++ unsigned x; ++ unsigned long long y; ++ if (base > 36 || base == 1) { ++ return 0; ++ } ++ while (isspace((c=shgetc(f)))); ++ if (c=='+' || c=='-') { ++ neg = -(c=='-'); ++ c = shgetc(f); ++ } ++ if ((base == 0 || base == 16) && c=='0') { ++ c = shgetc(f); ++ if ((c|32)=='x') { ++ c = shgetc(f); ++ if (val[c]>=16) { ++ shunget(f); ++ if (pok) shunget(f); ++ else shlim(f, 0); ++ return 0; ++ } ++ base = 16; ++ } else if (base == 0) { ++ base = 8; ++ } ++ } else { ++ if (base == 0) base = 10; ++ if (val[c] >= base) { ++ shunget(f); ++ shlim(f, 0); ++ return 0; ++ } ++ } ++ if (base == 10) { ++ for (x=0; c-'0'<10U && x<=UINT_MAX/10-1; c=shgetc(f)) ++ x = x*10 + (c-'0'); ++ for (y=x; c-'0'<10U && y<=ULLONG_MAX/10 && 10*y<=ULLONG_MAX-(c-'0'); c=shgetc(f)) ++ y = y*10 + (c-'0'); ++ if (c-'0'>=10U) goto done; ++ } else if (!(base & base-1)) { ++ int bs = "\0\1\2\4\7\3\6\5"[(0x17*base)>>5&7]; ++ for (x=0; val[c]>bs; c=shgetc(f)) ++ y = y<=lim) { ++ if (!(lim&1) && !neg) { ++ return lim-1; ++ } else if (y>lim) { ++ return lim; ++ } ++ } ++ return (y^neg)-neg; ++} ++ ++static unsigned long long strtox(const char *s, char **p, int base, unsigned long long lim) ++{ ++ FILE f; ++ sh_fromstring(&f, s); ++ shlim(&f, 0); ++ unsigned long long y = __intscan(&f, base, 1, lim); ++ if (p) { ++ size_t cnt = shcnt(&f); ++ *p = (char *)s + cnt; ++ } ++ return y; ++} ++ ++unsigned long long strtoull(const char *restrict s, char **restrict p, int base) ++{ ++ return strtox(s, p, base, ULLONG_MAX); ++} ++ ++long long strtoll(const char *restrict s, char **restrict p, int base) ++{ ++ return strtox(s, p, base, LLONG_MIN); ++} ++ ++unsigned long strtoul(const char *restrict s, char **restrict p, int base) ++{ ++ return strtox(s, p, base, ULONG_MAX); ++} ++ ++long strtol(const char *restrict s, char **restrict p, int base) ++{ ++ return strtox(s, p, base, 0UL+LONG_MIN); ++} +diff --git a/lib/libfdt/fdt_overlay.c b/lib/libfdt/fdt_overlay.c +index d217e79b6..e05365a54 100644 +--- a/lib/libfdt/fdt_overlay.c ++++ b/lib/libfdt/fdt_overlay.c +@@ -476,7 +476,7 @@ static int overlay_fixup_phandle(void *fdt, void *fdto, int symbols_off, + if (!name_len) + return -FDT_ERR_BADOVERLAY; + +- poffset = strtoul(sep + 1, &endptr, 10); ++ poffset = strtol(sep + 1, &endptr, 10); + if ((*endptr != '\0') || (endptr <= (sep + 1))) + return -FDT_ERR_BADOVERLAY; + +diff --git a/platform/init.c b/platform/init.c +index 78a5c02d3..0b7bace61 100644 +--- a/platform/init.c ++++ b/platform/init.c +@@ -103,7 +103,7 @@ __WEAK void ce_clock_init(void) + + __WEAK addr_t get_bs_info_addr() + { +- return NULL; ++ return 0; + } + + __WEAK uint32_t platform_get_sclk_count(void) +diff --git a/platform/msm8226/include/platform/iomap.h b/platform/msm8226/include/platform/iomap.h +index 289a2cceb..ff54dc5f0 100644 +--- a/platform/msm8226/include/platform/iomap.h ++++ b/platform/msm8226/include/platform/iomap.h +@@ -191,6 +191,9 @@ + #define MDP_VP_0_MIXER_0_BASE REG_MDP(0x3200) + #define MDP_VP_0_MIXER_1_BASE REG_MDP(0x3600) + ++#define DSIPHY_PLL_BASE (0x200) ++#define DSIPHY_PLL_CTRL(x) REG_DSI(DSIPHY_PLL_BASE + (x) * 4) ++ + #define SOFT_RESET 0x118 + #define CLK_CTRL 0x11C + #define TRIG_CTRL 0x084 +diff --git a/platform/msm8226/msm8226-clock.c b/platform/msm8226/msm8226-clock.c +index d79b8953d..0ef1c5cd9 100644 +--- a/platform/msm8226/msm8226-clock.c ++++ b/platform/msm8226/msm8226-clock.c +@@ -501,7 +501,7 @@ static struct branch_clk mdss_mdp_clk = { + }; + + static struct branch_clk mdss_mdp_lut_clk = { +- .cbcr_reg = MDP_LUT_CBCR, ++ .cbcr_reg = (uint32_t *) MDP_LUT_CBCR, + .parent = &mdss_mdp_clk_src.c, + .has_sibling = 1, + +@@ -512,7 +512,7 @@ static struct branch_clk mdss_mdp_lut_clk = { + }; + + static struct branch_clk mdss_vsync_clk = { +- .cbcr_reg = MDSS_VSYNC_CBCR, ++ .cbcr_reg = (uint32_t *) MDSS_VSYNC_CBCR, + .parent = &vsync_clk_src.c, + .has_sibling = 0, + +diff --git a/platform/msm8226/platform.c b/platform/msm8226/platform.c +index 1d15a626d..887e3b075 100644 +--- a/platform/msm8226/platform.c ++++ b/platform/msm8226/platform.c +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + + #define MB (1024*1024) + +diff --git a/platform/msm8916/acpuclock.c b/platform/msm8916/acpuclock.c +index 73d18a351..0317d5cc4 100644 +--- a/platform/msm8916/acpuclock.c ++++ b/platform/msm8916/acpuclock.c +@@ -193,6 +193,9 @@ void mdp_gdsc_ctrl(uint8_t enable) + } + } + ++int platform_is_msm8939(); ++int platform_is_msm8929(); ++ + /* Enable all the MDP branch clocks */ + void mdp_clock_enable(void) + { +diff --git a/platform/msm8916/include/platform/iomap.h b/platform/msm8916/include/platform/iomap.h +index 5e23a2528..25149188c 100644 +--- a/platform/msm8916/include/platform/iomap.h ++++ b/platform/msm8916/include/platform/iomap.h +@@ -91,6 +91,11 @@ + #define TLMM_BASE_ADDR 0x1000000 + #define GPIO_CONFIG_ADDR(x) (TLMM_BASE_ADDR + (x)*0x1000) + #define GPIO_IN_OUT_ADDR(x) (TLMM_BASE_ADDR + 0x00000004 + (x)*0x1000) ++#define GPIO_OUT_SET_ADDR(x) (TLMM_BASE_ADDR + 0x3040 + (x/32)*0x04) ++#define GPIO_OUT_CLR_ADDR(x) (TLMM_BASE_ADDR + 0x3020 + (x/32)*0x04) ++#define GPIO_OUT_OE_SET_ADDR(x) (TLMM_BASE_ADDR + 0x3120 + (x/32)*0x04) ++#define GPIO_OUT_VAL(x) (1 << (x - (x/32)*32)) ++#define GPIO_OUT_OE_VAL(x) (1 << (x - (x/32)*32)) + + #define MPM2_MPM_CTRL_BASE 0x004A0000 + #define MPM2_MPM_PS_HOLD 0x004AB000 +@@ -206,6 +211,9 @@ + #define REG_DSI(off) (MIPI_DSI_BASE + 0x04 + (off)) + #define MDP_BASE (0x1A00000) + #define REG_MDP(off) (MDP_BASE + (off)) ++#define DSIPHY_PLL_BASE (0x200) ++#define DSIPHY_PLL_CTRL(x) REG_DSI(DSIPHY_PLL_BASE + (x) * 4) ++ + #define MDP_HW_REV REG_MDP(0x1000) + #define MDP_VP_0_VIG_0_BASE REG_MDP(0x5000) + #define MDP_VP_0_VIG_1_BASE REG_MDP(0x7000) +diff --git a/platform/msm8916/msm8916-clock.c b/platform/msm8916/msm8916-clock.c +index 86df72211..f70cb4ecb 100644 +--- a/platform/msm8916/msm8916-clock.c ++++ b/platform/msm8916/msm8916-clock.c +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + + + /* Mux source select values */ +@@ -506,7 +507,7 @@ static struct branch_clk mdss_mdp_clk = { + }; + + static struct branch_clk mdss_vsync_clk = { +- .cbcr_reg = MDSS_VSYNC_CBCR, ++ .cbcr_reg = (uint32_t *)MDSS_VSYNC_CBCR, + .parent = &vsync_clk_src.c, + .has_sibling = 0, + +@@ -606,7 +607,7 @@ static struct rcg_clk gcc_blsp1_qup2_i2c_apps_clk_src = + }; + + static struct branch_clk gcc_blsp1_qup2_i2c_apps_clk = { +- .cbcr_reg = GCC_BLSP1_QUP2_APPS_CBCR, ++ .cbcr_reg = (uint32_t *)GCC_BLSP1_QUP2_APPS_CBCR, + .parent = &gcc_blsp1_qup2_i2c_apps_clk_src.c, + + .c = { +@@ -807,6 +808,9 @@ void msm8939_clock_override() + mdss_mdp_clk_src.freq_tbl = ftbl_mdss_mdp_clk_src; + } + ++int platform_is_msm8939(); ++int platform_is_msm8929(); ++ + void platform_clock_init(void) + { + if (platform_is_msm8939() || platform_is_msm8929()) { +diff --git a/platform/msm8916/platform.c b/platform/msm8916/platform.c +index 103d099f4..621369b79 100644 +--- a/platform/msm8916/platform.c ++++ b/platform/msm8916/platform.c +@@ -76,6 +76,7 @@ static mmu_section_t mmu_section_table[] = { + + int platform_is_msm8939(); + int platform_is_msm8929(); ++void platform_clock_init(); + + void platform_early_init(void) + { +diff --git a/platform/msm8974/acpuclock.c b/platform/msm8974/acpuclock.c +index 730147d8c..55b253048 100644 +--- a/platform/msm8974/acpuclock.c ++++ b/platform/msm8974/acpuclock.c +@@ -38,6 +38,10 @@ + #include + #include + ++extern int platform_is_8974(); ++extern int platform_is_8974ac(); ++extern int platform_is_8974Pro(); ++ + void hsusb_clock_init(void) + { + int ret; +diff --git a/platform/msm8974/include/platform/iomap.h b/platform/msm8974/include/platform/iomap.h +index 7490cabd8..4821d82b5 100644 +--- a/platform/msm8974/include/platform/iomap.h ++++ b/platform/msm8974/include/platform/iomap.h +@@ -238,6 +238,9 @@ + #define MDP_VP_0_MIXER_0_BASE REG_MDP(0x3200) + #define MDP_VP_0_MIXER_1_BASE REG_MDP(0x3600) + ++#define DSIPHY_PLL_BASE (0x200) ++#define DSIPHY_PLL_CTRL(x) REG_DSI(DSIPHY_PLL_BASE + (x) * 4) ++ + #define SOFT_RESET 0x118 + #define CLK_CTRL 0x11C + #define TRIG_CTRL 0x084 +diff --git a/platform/msm8974/msm8974-clock.c b/platform/msm8974/msm8974-clock.c +index 8f3dadf7e..e1c69a831 100644 +--- a/platform/msm8974/msm8974-clock.c ++++ b/platform/msm8974/msm8974-clock.c +@@ -35,6 +35,10 @@ + #include + #include + ++extern int platform_is_8974(); ++extern int platform_is_8974ac(); ++extern int platform_is_8974Pro(); ++ + + /* Mux source select values */ + #define cxo_source_val 0 +@@ -204,7 +208,7 @@ static struct branch_clk gcc_sdcc1_ahb_clk = + + static struct branch_clk gcc_sdcc1_cdccal_sleep_clk = + { +- .cbcr_reg = SDCC1_CDCCAL_SLEEP_CBCR, ++ .cbcr_reg = (uint32_t *) SDCC1_CDCCAL_SLEEP_CBCR, + .has_sibling = 1, + + .c = { +@@ -215,7 +219,7 @@ static struct branch_clk gcc_sdcc1_cdccal_sleep_clk = + + static struct branch_clk gcc_sdcc1_cdccal_ff_clk = + { +- .cbcr_reg = SDCC1_CDCCAL_FF_CBCR, ++ .cbcr_reg = (uint32_t *) SDCC1_CDCCAL_FF_CBCR, + .has_sibling = 1, + + .c = { +@@ -486,7 +490,7 @@ static struct vote_clk gcc_ce1_axi_clk = { + + + struct branch_clk gcc_blsp2_qup5_i2c_apps_clk = { +- .cbcr_reg = BLSP2_QUP5_I2C_APPS_CBCR, ++ .cbcr_reg = (uint32_t *) BLSP2_QUP5_I2C_APPS_CBCR, + .parent = &cxo_clk_src.c, + + .c = { +@@ -661,7 +665,7 @@ static struct branch_clk mdss_mdp_clk = { + }; + + static struct branch_clk mdss_mdp_lut_clk = { +- .cbcr_reg = MDP_LUT_CBCR, ++ .cbcr_reg = (uint32_t *) MDP_LUT_CBCR, + .parent = &mdss_mdp_clk_src.c, + .has_sibling = 1, + +@@ -672,7 +676,7 @@ static struct branch_clk mdss_mdp_lut_clk = { + }; + + static struct branch_clk mdss_vsync_clk = { +- .cbcr_reg = MDSS_VSYNC_CBCR, ++ .cbcr_reg = (uint32_t *) MDSS_VSYNC_CBCR, + .parent = &vsync_clk_src.c, + .has_sibling = 0, + +@@ -699,7 +703,7 @@ static struct rcg_clk edpaux_clk_src = { + }; + + static struct branch_clk mdss_edpaux_clk = { +- .cbcr_reg = MDSS_EDPAUX_CBCR, ++ .cbcr_reg = (uint32_t *) MDSS_EDPAUX_CBCR, + .parent = &edpaux_clk_src.c, + .has_sibling = 0, + +diff --git a/platform/msm8974/platform.c b/platform/msm8974/platform.c +index a8d4ea4d9..8bdf5be6d 100644 +--- a/platform/msm8974/platform.c ++++ b/platform/msm8974/platform.c +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + + #define MB (1024*1024) + +diff --git a/platform/msm_shared/board.c b/platform/msm_shared/board.c +index 2d94750b4..cb06e3ce2 100644 +--- a/platform/msm_shared/board.c ++++ b/platform/msm_shared/board.c +@@ -31,6 +31,8 @@ + #include + #include + #include ++#include ++#include + + struct board_data board = {UNKNOWN, + 0, +diff --git a/platform/msm_shared/boot_stats.c b/platform/msm_shared/boot_stats.c +index 551000e95..be66a94b2 100644 +--- a/platform/msm_shared/boot_stats.c ++++ b/platform/msm_shared/boot_stats.c +@@ -31,7 +31,11 @@ + #include + #include + ++extern addr_t get_bs_info_addr(); ++extern uint32_t platform_get_sclk_count(); ++ + static uint32_t kernel_load_start; ++ + void bs_set_timestamp(enum bs_entry bs_id) + { + addr_t bs_imem = get_bs_info_addr(); +diff --git a/platform/msm_shared/clock_lib2.c b/platform/msm_shared/clock_lib2.c +index f5e321a4b..7d7fbce5a 100644 +--- a/platform/msm_shared/clock_lib2.c ++++ b/platform/msm_shared/clock_lib2.c +@@ -25,6 +25,7 @@ + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ ++#include "stdint.h" + #include + #include + #include +@@ -270,5 +271,5 @@ int clock_lib2_branch_clk_reset(struct clk *c, enum clk_reset_action action) + if (!bclk) + return 0; + +- return __clock_lib2_branch_clk_reset(bclk->bcr_reg, action); ++ return __clock_lib2_branch_clk_reset((uint32_t)bclk->bcr_reg, action); + } +diff --git a/platform/msm_shared/dev_tree.c b/platform/msm_shared/dev_tree.c +index 2d2174b98..e996e9665 100755 +--- a/platform/msm_shared/dev_tree.c ++++ b/platform/msm_shared/dev_tree.c +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + #include + + struct dt_entry_v1 +@@ -555,7 +556,7 @@ void *dev_tree_appended(void *kernel, uint32_t kernel_size, uint32_t dtb_offset, + } + /* free queue's memory */ + list_for_every_entry(&dt_entry_queue->node, dt_node_tmp1, dt_node, node) { +- dt_node_tmp2 = dt_node_tmp1->node.prev; ++ dt_node_tmp2 = (struct dt_entry_node *)dt_node_tmp1->node.prev; + dt_entry_list_delete(dt_node_tmp1); + dt_node_tmp1 = dt_node_tmp2; + } +@@ -806,7 +807,7 @@ static int platform_dt_absolute_compat_match(struct dt_entry_node *dt_list, uint + dt_node_tmp1->dt_entry_m->pmic_rev[2], dt_node_tmp1->dt_entry_m->pmic_rev[3], + dt_node_tmp1->dt_entry_m->offset, dt_node_tmp1->dt_entry_m->size); + +- dt_node_tmp2 = dt_node_tmp1->node.prev; ++ dt_node_tmp2 = (struct dt_entry_node *)dt_node_tmp1->node.prev; + dt_entry_list_delete(dt_node_tmp1); + dt_node_tmp1 = dt_node_tmp2; + delete_current_dt = 0; +@@ -880,7 +881,7 @@ static int update_dtb_entry_node(struct dt_entry_node *dt_list, uint32_t dtb_inf + dt_node_tmp1->dt_entry_m->pmic_rev[2], dt_node_tmp1->dt_entry_m->pmic_rev[3], + dt_node_tmp1->dt_entry_m->offset, dt_node_tmp1->dt_entry_m->size); + +- dt_node_tmp2 = dt_node_tmp1->node.prev; ++ dt_node_tmp2 = (struct dt_entry_node *)dt_node_tmp1->node.prev; + dt_entry_list_delete(dt_node_tmp1); + dt_node_tmp1 = dt_node_tmp2; + } +@@ -924,7 +925,7 @@ static int update_dtb_entry_node(struct dt_entry_node *dt_list, uint32_t dtb_inf + dt_node_tmp1->dt_entry_m->pmic_rev[2], dt_node_tmp1->dt_entry_m->pmic_rev[3], + dt_node_tmp1->dt_entry_m->offset, dt_node_tmp1->dt_entry_m->size); + +- dt_node_tmp2 = dt_node_tmp1->node.prev; ++ dt_node_tmp2 = (struct dt_entry_node *)dt_node_tmp1->node.prev; + dt_entry_list_delete(dt_node_tmp1); + dt_node_tmp1 = dt_node_tmp2; + } +@@ -1149,7 +1150,7 @@ int dev_tree_get_entry_info(struct dt_table *table, struct dt_entry *dt_entry_in + + list_for_every_entry(&dt_entry_queue->node, dt_node_tmp1, dt_node, node) { + /* free node memory */ +- dt_node_tmp2 = dt_node_tmp1->node.prev; ++ dt_node_tmp2 = (struct dt_entry_node *)dt_node_tmp1->node.prev; + dt_entry_list_delete(dt_node_tmp1); + dt_node_tmp1 = dt_node_tmp2; + } +diff --git a/platform/msm_shared/display.c b/platform/msm_shared/display.c +index 91d8ba19a..d43725372 100644 +--- a/platform/msm_shared/display.c ++++ b/platform/msm_shared/display.c +@@ -30,12 +30,24 @@ + #include + #include + #include ++#include + #include + #include ++#include ++#include ++#include + + static struct msm_fb_panel_data *panel; + + extern int lvds_on(struct msm_fb_panel_data *pdata); ++extern int mdp_dsi_cmd_config(struct msm_panel_info *pinfo, struct fbcon_config *fb); ++extern int mdss_hdmi_config(struct msm_panel_info *pinfo, struct fbcon_config *fb); ++extern int mdss_dsi_post_on(struct msm_fb_panel_data *panel); ++extern int mdp_dma_on(struct msm_panel_info *pinfo); ++extern int mipi_cmd_trigger(); ++extern int mdss_hdmi_on(); ++extern int mdss_hdmi_init(); ++extern int mdp_dsi_cmd_off(); + + static int msm_fb_alloc(struct fbcon_config *fb) + { +diff --git a/platform/msm_shared/edp.c b/platform/msm_shared/edp.c +index 017326291..8a5ba0e39 100644 +--- a/platform/msm_shared/edp.c ++++ b/platform/msm_shared/edp.c +@@ -30,6 +30,9 @@ + #include "edp.h" + #include "mdp5.h" + ++extern void edp_phy_vm_pe_init(void); ++extern void edp_aux_enable(void); ++ + #define RGB_COMPONENTS 3 + #define MAX_NUMBER_EDP_LANES 4 + +diff --git a/platform/msm_shared/edp_aux.c b/platform/msm_shared/edp_aux.c +index 3cda4bb3f..9702f28f1 100644 +--- a/platform/msm_shared/edp_aux.c ++++ b/platform/msm_shared/edp_aux.c +@@ -29,6 +29,8 @@ + + #include "edp.h" + ++extern void edp_isr_poll(void); ++ + struct edp_aux_ctrl edpctrl; + + int edp_hpd_done = 0; +diff --git a/platform/msm_shared/edp_phy.c b/platform/msm_shared/edp_phy.c +index b36c4522a..6d68757f5 100644 +--- a/platform/msm_shared/edp_phy.c ++++ b/platform/msm_shared/edp_phy.c +@@ -27,6 +27,7 @@ + * SUCH DAMAGE. + */ + #include "edp.h" ++#include + + /* EDP phy configuration settings */ + +diff --git a/platform/msm_shared/hsusb.c b/platform/msm_shared/hsusb.c +index faf57d996..abcef3ffa 100644 +--- a/platform/msm_shared/hsusb.c ++++ b/platform/msm_shared/hsusb.c +@@ -321,12 +321,12 @@ int udc_request_queue(struct udc_endpoint *ept, struct udc_request *_req) + return -1; + } else { + count ++; +- curr_item->next = PA(item); ++ curr_item->next = (unsigned)PA((unsigned)item); + item->next = TERMINATE; + } + } else + /* Since next TD in chain already exists */ +- item = VA(curr_item->next); ++ item = (struct ept_queue_item *)VA(curr_item->next); + + /* Update TD with transfer information */ + item->info = INFO_BYTES(xfer) | INFO_ACTIVE; +@@ -345,7 +345,7 @@ int udc_request_queue(struct udc_endpoint *ept, struct udc_request *_req) + curr_item->next = TERMINATE; + curr_item->info |= INFO_IOC; + enter_critical_section(); +- ept->head->next = PA(req->item); ++ ept->head->next = (unsigned)PA((unsigned)req->item); + ept->head->info = 0; + ept->req = req; + arch_clean_invalidate_cache_range((addr_t) ept, +@@ -354,7 +354,7 @@ int udc_request_queue(struct udc_endpoint *ept, struct udc_request *_req) + sizeof(struct ept_queue_head)); + arch_clean_invalidate_cache_range((addr_t) ept->req, + sizeof(struct usb_request)); +- arch_clean_invalidate_cache_range((addr_t) VA(req->req.buf), ++ arch_clean_invalidate_cache_range((addr_t) VA((unsigned)req->req.buf), + req->req.length); + + item = req->item; +@@ -364,7 +364,7 @@ int udc_request_queue(struct udc_endpoint *ept, struct udc_request *_req) + if (curr_item->next == TERMINATE) + item = NULL; + else +- item = curr_item->next; ++ item = (struct ept_queue_item *)curr_item->next; + arch_clean_invalidate_cache_range((addr_t) curr_item, + sizeof(struct ept_queue_item)); + } +@@ -391,13 +391,13 @@ static void handle_ept_complete(struct udc_endpoint *ept) + + if(ept->req) + { +- req = VA(ept->req); ++ req = (struct usb_request *)VA((addr_t)ept->req); + arch_invalidate_cache_range((addr_t) ept->req, + sizeof(struct usb_request)); + } + + if (req) { +- item = VA(req->item); ++ item = (struct ept_queue_item *)VA((addr_t)req->item); + /* total transfer length for transacation */ + total_len = req->req.length; + ept->req = 0; +@@ -445,7 +445,7 @@ static void handle_ept_complete(struct udc_endpoint *ept) + actual += MAX_TD_XFER_SIZE - (item->info >> 16) & 0x7FFF; + total_len -= MAX_TD_XFER_SIZE - (item->info >> 16) & 0x7FFF; + /*Move to next item in chain*/ +- item = VA(item->next); ++ item = (struct ept_queue_item *)VA(item->next); + } + } + status = 0; +diff --git a/platform/msm_shared/i2c_qup.c b/platform/msm_shared/i2c_qup.c +index 15b4bac04..0fe45092b 100644 +--- a/platform/msm_shared/i2c_qup.c ++++ b/platform/msm_shared/i2c_qup.c +@@ -48,6 +48,8 @@ + #include + #include + ++extern void clock_config_blsp_i2c(uint8_t blsp_id, uint8_t qup_id); ++ + #if DEBUGLEVEL > INFO + #undef DEBUGLEVEL + #define DEBUGLEVEL INFO +@@ -707,6 +709,7 @@ void qup_i2c_sec_init(struct qup_i2c_dev *dev, uint32_t clk_freq, + mask_interrupt(dev->qup_irq); + } + ++#ifdef GSBI_QUP_IRQ /* qup_i2c_init is used only for msm8x60 */ + struct qup_i2c_dev *qup_i2c_init(uint8_t gsbi_id, unsigned clk_freq, + unsigned src_clk_freq) + { +@@ -744,6 +747,7 @@ struct qup_i2c_dev *qup_i2c_init(uint8_t gsbi_id, unsigned clk_freq, + + return dev; + } ++#endif + + struct qup_i2c_dev *qup_blsp_i2c_init(uint8_t blsp_id, uint8_t qup_id, + uint32_t clk_freq, uint32_t src_clk_freq) +diff --git a/platform/msm_shared/interrupts.c b/platform/msm_shared/interrupts.c +index 9d84bb264..15b0a604b 100644 +--- a/platform/msm_shared/interrupts.c ++++ b/platform/msm_shared/interrupts.c +@@ -33,6 +33,11 @@ + #include + + extern int target_supports_qgic(); ++extern enum handler_return gic_platform_irq(struct arm_iframe *frame); ++extern void gic_platform_fiq(struct arm_iframe *frame); ++extern status_t gic_mask_interrupt(unsigned int vector); ++extern status_t gic_unmask_interrupt(unsigned int vector); ++extern void gic_register_int_handler(unsigned int vector, int_handler func, void *arg); + + enum handler_return platform_irq(struct arm_iframe *frame) + { +diff --git a/platform/msm_shared/mdp5.c b/platform/msm_shared/mdp5.c +index e13afd87c..81c366cc7 100755 +--- a/platform/msm_shared/mdp5.c ++++ b/platform/msm_shared/mdp5.c +@@ -39,6 +39,7 @@ + #include + #include + #include ++#include + + #define MDP_MIN_FETCH 9 + #define MDSS_MDP_MAX_FETCH 12 +@@ -172,7 +173,7 @@ static void mdss_source_pipe_config(struct fbcon_config *fb, struct msm_panel_in + dprintf(SPEW,"%s: src=%x fb_off=%x src_xy=%x dst_xy=%x\n", + __func__, out_size, fb_off, src_xy, dst_xy); + +- writel(fb->base, pipe_base + PIPE_SSPP_SRC0_ADDR); ++ writel((uint32_t)fb->base, pipe_base + PIPE_SSPP_SRC0_ADDR); + writel(stride, pipe_base + PIPE_SSPP_SRC_YSTRIDE); + writel(src_size, pipe_base + PIPE_SSPP_SRC_IMG_SIZE); + writel(out_size, pipe_base + PIPE_SSPP_SRC_SIZE); +@@ -387,11 +388,11 @@ void mdss_intf_tg_setup(struct msm_panel_info *pinfo, uint32_t intf_base) + struct intf_timing_params itp = {0}; + + if (pinfo == NULL) +- return ERR_INVALID_ARGS; ++ return; + + lcdc = &(pinfo->lcdc); + if (lcdc == NULL) +- return ERR_INVALID_ARGS; ++ return; + + adjust_xres = pinfo->xres; + if (pinfo->lcdc.split_display) { +diff --git a/platform/msm_shared/mipi_dsi.c b/platform/msm_shared/mipi_dsi.c +index e44dcd321..7296cefea 100644 +--- a/platform/msm_shared/mipi_dsi.c ++++ b/platform/msm_shared/mipi_dsi.c +@@ -41,12 +41,20 @@ + #include + #include + #include ++#include + + extern void mdp_disable(void); + extern int mipi_dsi_cmd_config(struct fbcon_config mipi_fb_cfg, + unsigned short num_of_lanes); + extern void mdp_shutdown(void); + extern void mdp_start_dma(void); ++extern int mdp_get_revision(); ++ ++extern uint8_t target_panel_auto_detect_enabled(); ++ ++extern int mipi_dsi_phy_init(struct mipi_dsi_panel_config *); ++ ++int mdss_dsi_cmds_rx(uint32_t **rp, int rp_len, int rdbk_len); + + #if (DISPLAY_TYPE_MDSS == 0) + #define MIPI_DSI0_BASE MIPI_DSI_BASE +@@ -198,11 +206,11 @@ int mdss_dual_dsi_cmds_tx(struct mipi_dsi_cmd *cmds, int count) + + #if (DISPLAY_TYPE_MDSS == 1) + /* Align pload at 8 byte boundry */ +- off = pload; ++ off = (uint32_t)pload; + off &= 0x07; + if (off) + off = 8 - off; +- off += pload; ++ off += (uint32_t)pload; + + cm = cmds; + for (i = 0; i < count; i++) { +@@ -280,7 +288,7 @@ int mdss_dsi_cmds_rx(uint32_t **rp, int rp_len, int rdbk_len) + if (rdbk_len > 2) { + /*First 4 bytes + paded bytes will be header next len bytes would be payload */ + for (i = 0; i < rdbk_len; i++) { +- dp = *rp; ++ dp = (char *)*rp; + dp[i] = dp[(res + i) >> 2]; + } + } +@@ -296,11 +304,11 @@ int mipi_dsi_cmds_tx(struct mipi_dsi_cmd *cmds, int count) + uint32_t off; + + /* Align pload at 8 byte boundry */ +- off = pload; ++ off = (uint32_t)pload; + off &= 0x07; + if (off) + off = 8 - off; +- off += pload; ++ off += (uint32_t)pload; + + cm = cmds; + for (i = 0; i < count; i++) { +diff --git a/platform/msm_shared/mipi_dsi_autopll.c b/platform/msm_shared/mipi_dsi_autopll.c +index 4527e339d..96a17dbf8 100755 +--- a/platform/msm_shared/mipi_dsi_autopll.c ++++ b/platform/msm_shared/mipi_dsi_autopll.c +@@ -32,6 +32,9 @@ + #include + #include + #include ++#include ++ ++extern void mdss_dsi_phy_sw_reset(uint32_t ctl_base); + + #define LPFR_LUT_SIZE 10 + +diff --git a/platform/msm_shared/mipi_dsi_phy.c b/platform/msm_shared/mipi_dsi_phy.c +index 9fd69a4aa..e0a8e7aaa 100644 +--- a/platform/msm_shared/mipi_dsi_phy.c ++++ b/platform/msm_shared/mipi_dsi_phy.c +@@ -30,6 +30,10 @@ + #include + #include + #include ++#include ++#include ++ ++extern int mdp_get_revision(); + + #if (DISPLAY_TYPE_MDSS == 0) + #define MIPI_DSI0_BASE MIPI_DSI_BASE +diff --git a/platform/msm_shared/mmc_sdhci.c b/platform/msm_shared/mmc_sdhci.c +index 80919dd94..a5206a515 100644 +--- a/platform/msm_shared/mmc_sdhci.c ++++ b/platform/msm_shared/mmc_sdhci.c +@@ -849,6 +849,8 @@ static uint8_t mmc_card_supports_ddr_mode(struct mmc_card *card) + return 0; + } + ++extern void sdhci_msm_set_mci_clk(struct sdhci_host *host); ++ + /* + * Function : Enable HS200 mode + * Arg : Host, card structure and bus width +@@ -1076,6 +1078,8 @@ uint32_t mmc_set_hs400_mode(struct sdhci_host *host, + return mmc_ret; + } + ++void clock_config_cdc(uint8_t slot); ++ + /* + * Function: mmc_host_init + * Arg : mmc device structure +diff --git a/platform/msm_shared/mmc_wrapper.c b/platform/msm_shared/mmc_wrapper.c +index 9b808b510..a5bf60d2e 100755 +--- a/platform/msm_shared/mmc_wrapper.c ++++ b/platform/msm_shared/mmc_wrapper.c +@@ -35,6 +35,7 @@ + #include + #include + #include ++#include + + /* + * Weak function for UFS. +diff --git a/platform/msm_shared/partition_parser.c b/platform/msm_shared/partition_parser.c +index 0dc62970b..b40e3ed1b 100644 +--- a/platform/msm_shared/partition_parser.c ++++ b/platform/msm_shared/partition_parser.c +@@ -684,12 +684,12 @@ patch_gpt(uint8_t *gptImage, uint64_t density, uint32_t array_size, + array_size, (long long)(card_size_sec - 34)); + + /* Updating CRC of the Partition entry array in both headers */ +- partition_entry_array_start = primary_gpt_header + block_size; +- crc_value = calculate_crc32(partition_entry_array_start, ++ partition_entry_array_start = (unsigned)(primary_gpt_header + block_size); ++ crc_value = calculate_crc32((unsigned char *)partition_entry_array_start, + max_part_count * part_entry_size); + PUT_LONG(primary_gpt_header + PARTITION_CRC_OFFSET, crc_value); + +- crc_value = calculate_crc32(partition_entry_array_start + array_size, ++ crc_value = calculate_crc32((unsigned char *)(partition_entry_array_start + array_size), + max_part_count * part_entry_size); + PUT_LONG(secondary_gpt_header + PARTITION_CRC_OFFSET, crc_value); + +@@ -796,7 +796,7 @@ static unsigned int write_gpt(uint32_t size, uint8_t *gptImage, uint32_t block_s + } + + /* Writing the partition entries array for the primary header */ +- partition_entry_array_start = primary_gpt_header + block_size; ++ partition_entry_array_start = (unsigned)(primary_gpt_header + block_size); + ret = write_gpt_partition_array(primary_gpt_header, + partition_entry_array_start, + partition_entry_array_size, block_size); +@@ -807,8 +807,8 @@ static unsigned int write_gpt(uint32_t size, uint8_t *gptImage, uint32_t block_s + } + + /*Writing the partition entries array for the backup header */ +- partition_entry_array_start = primary_gpt_header + block_size + +- partition_entry_array_size; ++ partition_entry_array_start = (unsigned)(primary_gpt_header + block_size + ++ partition_entry_array_size); + ret = write_gpt_partition_array(secondary_gpt_header, + partition_entry_array_start, + partition_entry_array_size, block_size); +diff --git a/platform/msm_shared/qpic_nand.c b/platform/msm_shared/qpic_nand.c +index 3dc759d95..b3dda9ad2 100644 +--- a/platform/msm_shared/qpic_nand.c ++++ b/platform/msm_shared/qpic_nand.c +@@ -1494,7 +1494,7 @@ qpic_nand_read_page(uint32_t page, unsigned char* buffer, unsigned char* sparead + + bam_add_cmd_element(cmd_list_ptr, NAND_FLASH_STATUS, (uint32_t)PA((addr_t)&(flash_sts[i])), CE_READ_TYPE); + +- cmd_list_temp = cmd_list_ptr; ++ cmd_list_temp = (uint32_t *)cmd_list_ptr; + + cmd_list_ptr++; + +diff --git a/platform/msm_shared/reboot.c b/platform/msm_shared/reboot.c +index 4c21d1179..1bdca346c 100644 +--- a/platform/msm_shared/reboot.c ++++ b/platform/msm_shared/reboot.c +@@ -38,6 +38,8 @@ + #include + #include + ++extern void pmic_reset_configure(uint8_t reset_type); ++ + #if USER_FORCE_RESET_SUPPORT + /* Return 1 if it is a force resin triggered by user. */ + uint32_t is_user_force_reset(void) +diff --git a/platform/msm_shared/scm.c b/platform/msm_shared/scm.c +index 334bca485..d96ab0e2a 100644 +--- a/platform/msm_shared/scm.c ++++ b/platform/msm_shared/scm.c +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + #include "scm.h" + + #pragma GCC optimize ("O0") +@@ -192,7 +193,7 @@ static int scm_call_atomic(uint32_t svc, uint32_t cmd, uint32_t arg1) + { + uint32_t context_id; + register uint32_t r0 __asm__("r0") = SCM_ATOMIC(svc, cmd, 1); +- register uint32_t r1 __asm__("r1") = &context_id; ++ register uint32_t r1 __asm__("r1") = (uint32_t)&context_id; + register uint32_t r2 __asm__("r2") = arg1; + + __asm__ volatile( +@@ -221,7 +222,7 @@ int scm_call_atomic2(uint32_t svc, uint32_t cmd, uint32_t arg1, uint32_t arg2) + { + int context_id; + register uint32_t r0 __asm__("r0") = SCM_ATOMIC(svc, cmd, 2); +- register uint32_t r1 __asm__("r1") = &context_id; ++ register uint32_t r1 __asm__("r1") = (uint32_t)&context_id; + register uint32_t r2 __asm__("r2") = arg1; + register uint32_t r3 __asm__("r3") = arg2; + +@@ -443,7 +444,7 @@ static int ssd_image_is_encrypted(uint32_t ** img_ptr, uint32_t * img_len_ptr, u + scm_arg.x0 = MAKE_SIP_SCM_CMD(SCM_SVC_SSD, SSD_PARSE_MD_ID); + scm_arg.x1 = MAKE_SCM_ARGS(0x2,SMC_PARAM_TYPE_VALUE,SMC_PARAM_TYPE_BUFFER_READWRITE); + scm_arg.x2 = parse_req.md_len; +- scm_arg.x3 = parse_req.md; ++ scm_arg.x3 = (uint32_t)parse_req.md; + scm_arg.atomic = true; + + ret = scm_call2(&scm_arg, &scm_ret); +@@ -529,7 +530,7 @@ int decrypt_scm_v2(uint32_t ** img_ptr, uint32_t * img_len_ptr) + scm_arg.x2 = decrypt_req.md_ctx_id; + scm_arg.x3 = decrypt_req.last_frag; + scm_arg.x4 = decrypt_req.frag_len; +- scm_arg.x5[0] = decrypt_req.frag; ++ scm_arg.x5[0] = (uint32_t)decrypt_req.frag; + + ret = scm_call2(&scm_arg, &scm_ret); + decrypt_rsp.status = scm_ret.x1; +@@ -672,7 +673,7 @@ int scm_protect_keystore(uint32_t * img_ptr, uint32_t img_len) + { + scm_arg.x0 = MAKE_SIP_SCM_CMD(SCM_SVC_SSD, SSD_PROTECT_KEYSTORE_ID); + scm_arg.x1 = MAKE_SCM_ARGS(0x2,SMC_PARAM_TYPE_BUFFER_READWRITE,SMC_PARAM_TYPE_VALUE); +- scm_arg.x2 = protect_req.keystore_ptr; ++ scm_arg.x2 = (uint32_t)protect_req.keystore_ptr; + scm_arg.x3 = protect_req.keystore_len; + + ret = scm_call2(&scm_arg, &scm_ret); +@@ -723,7 +724,7 @@ void set_tamper_fuse_cmd() + { + scm_arg.x0 = MAKE_SIP_SCM_CMD(SCM_SVC_FUSE, SCM_BLOW_SW_FUSE_ID); + scm_arg.x1 = MAKE_SCM_ARGS(0x2,SMC_PARAM_TYPE_BUFFER_READWRITE,SMC_PARAM_TYPE_VALUE); +- scm_arg.x2 = cmd_buf; ++ scm_arg.x2 = (uint32_t)cmd_buf; + scm_arg.x3 = cmd_len; + + scm_call2(&scm_arg, NULL); +@@ -763,7 +764,7 @@ uint8_t get_tamper_fuse_cmd() + { + scm_arg.x0 = MAKE_SIP_SCM_CMD(SCM_SVC_FUSE, SCM_IS_SW_FUSE_BLOWN_ID); + scm_arg.x1 = MAKE_SCM_ARGS(0x2,SMC_PARAM_TYPE_BUFFER_READWRITE,SMC_PARAM_TYPE_VALUE); +- scm_arg.x2 = cmd_buf; ++ scm_arg.x2 = (uint32_t)cmd_buf; + scm_arg.x3 = cmd_len; + + scm_call2(&scm_arg, &scm_ret); +@@ -815,7 +816,7 @@ void save_kernel_hash_cmd(void *digest) + scm_arg.x0 = MAKE_SIP_SCM_CMD(SCM_SVC_ES, SCM_SAVE_PARTITION_HASH_ID); + scm_arg.x1 = MAKE_SCM_ARGS(0x3, 0, SMC_PARAM_TYPE_BUFFER_READWRITE); + scm_arg.x2 = req.partition_id; +- scm_arg.x3 = (uint8_t *)&req.digest; ++ scm_arg.x3 = (uint32_t)(uint8_t *)&req.digest; + scm_arg.x4 = sizeof(req.digest); + + if (scm_call2(&scm_arg, NULL)) +@@ -1046,7 +1047,7 @@ void scm_elexec_call(paddr_t kernel_entry, paddr_t dtb_offset) + { + scm_arg.x0 = MAKE_SIP_SCM_CMD(SCM_SVC_MILESTONE_32_64_ID, SCM_SVC_MILESTONE_CMD_ID); + scm_arg.x1 = MAKE_SCM_ARGS(0x2, SMC_PARAM_TYPE_BUFFER_READ); +- scm_arg.x2 = (void *)¶m; ++ scm_arg.x2 = (uint32_t)¶m; + scm_arg.x3 = sizeof(el1_system_param); + + /* First try a hypervisor call to jump to EL2 if supported */ +@@ -1279,7 +1280,7 @@ uint32_t is_secure_boot_enable() + resp = memalign(CACHE_LINE,(2 *sizeof(uint32_t))); + ASSERT(resp); + if (!scm_arm_support) { +- ret = scm_call_atomic2(TZBSP_SVC_INFO, IS_SECURE_BOOT_ENABLED, resp, (2 * sizeof(uint32_t))); ++ ret = scm_call_atomic2(TZBSP_SVC_INFO, IS_SECURE_BOOT_ENABLED, (uint32_t)resp, (2 * sizeof(uint32_t))); + } else { + scm_arg.x0 = MAKE_SIP_SCM_CMD(TZBSP_SVC_INFO, IS_SECURE_BOOT_ENABLED); + ret = scm_call2(&scm_arg, &scm_ret); +diff --git a/platform/msm_shared/sdhci_msm.c b/platform/msm_shared/sdhci_msm.c +index d72d90df6..0e053bf3d 100644 +--- a/platform/msm_shared/sdhci_msm.c ++++ b/platform/msm_shared/sdhci_msm.c +@@ -77,10 +77,11 @@ static const uint32_t tuning_block_128[] = { + * Once we receive the interrupt, we will ack the power control + * register that we have successfully completed pmic transactions + */ +-static enum handler_return sdhci_int_handler(struct sdhci_msm_data *data) ++static enum handler_return sdhci_int_handler(void *vdata) + { + uint32_t ack; + uint32_t status; ++ struct sdhci_msm_data *data = (struct sdhci_msm_data *)vdata; + + /* + * Read the mask register to check if BUS & IO level +diff --git a/platform/msm_shared/shutdown_detect.c b/platform/msm_shared/shutdown_detect.c +index a51c9ae99..0f0e3a9e8 100644 +--- a/platform/msm_shared/shutdown_detect.c ++++ b/platform/msm_shared/shutdown_detect.c +@@ -33,8 +33,11 @@ + #include + #include + #include ++#include + #include + ++extern uint32_t platform_get_sclk_count(void); ++ + /* sleep clock is 32.768 khz, 0x8000 count per second */ + #define MPM_SLEEP_TIMETICK_COUNT 0x8000 + #define PWRKEY_LONG_PRESS_COUNT 0xC000 +@@ -82,8 +85,7 @@ static uint32_t is_pwrkey_pon_reason() + * Shutdown the device if power key is release before + * (PWRKEY_LONG_PRESS_COUNT/MPM_SLEEP_TIMETICK_COUNT) seconds. + */ +-static enum handler_return long_press_pwrkey_timer_func(struct timer *p_timer, +- void *arg) ++static enum handler_return long_press_pwrkey_timer_func(struct timer *p_timer, unsigned long arg0, void *arg1) + { + uint32_t sclk_count = platform_get_sclk_count(); + +diff --git a/platform/msm_shared/smem.c b/platform/msm_shared/smem.c +index 04a801802..1bdea1d26 100644 +--- a/platform/msm_shared/smem.c ++++ b/platform/msm_shared/smem.c +@@ -136,11 +136,11 @@ void* smem_get_alloc_entry(smem_mem_type_t type, uint32_t* size) + smem = (struct smem *)smem_addr; + + if (type < SMEM_FIRST_VALID_TYPE || type > SMEM_LAST_VALID_TYPE) +- return 1; ++ return ret; + + ainfo = &smem->alloc_info[type]; + if (readl(&ainfo->allocated) == 0) +- return 1; ++ return ret; + + *size = readl(&ainfo->size); + base_ext = readl(&ainfo->base_ext); +@@ -148,7 +148,7 @@ void* smem_get_alloc_entry(smem_mem_type_t type, uint32_t* size) + + if(base_ext) + { +- ret = base_ext + offset; ++ ret = (void *)base_ext + offset; + } + else + { +diff --git a/platform/msm_shared/spmi.c b/platform/msm_shared/spmi.c +index 6d486b729..6089ed0d3 100644 +--- a/platform/msm_shared/spmi.c ++++ b/platform/msm_shared/spmi.c +@@ -26,10 +26,12 @@ + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + ++#include "sys/types.h" + #include + #include + #include + #include ++#include + #include + #include + #include +@@ -127,7 +129,7 @@ static void write_wdata_from_array(uint8_t *array, + unsigned int pmic_arb_write_cmd(struct pmic_arb_cmd *cmd, + struct pmic_arb_param *param) + { +- uint32_t bytes_written = 0; ++ uint8_t bytes_written = 0; + uint32_t error; + uint32_t val = 0; + +@@ -358,7 +360,7 @@ int spmi_acc_irq(uint32_t periph_acc_irq, uint32_t status) + return 0; + } + +-void spmi_irq() ++enum handler_return spmi_irq(void *) + { + int i; + uint32_t status; +@@ -372,9 +374,11 @@ void spmi_irq() + if (status) + if (!spmi_acc_irq(i, status)) + /* Not the correct interrupt, continue to wait */ +- return; ++ return INT_NO_RESCHEDULE; + } + mask_interrupt(EE0_KRAIT_HLOS_SPMI_PERIPH_IRQ); ++ ++ return INT_NO_RESCHEDULE; + } + + /* Enable interrupts on a particular peripheral: periph_id */ +diff --git a/platform/msm_shared/usb30_dwc_hw.h b/platform/msm_shared/usb30_dwc_hw.h +index 56b32bac1..428f3fc4c 100644 +--- a/platform/msm_shared/usb30_dwc_hw.h ++++ b/platform/msm_shared/usb30_dwc_hw.h +@@ -36,6 +36,7 @@ void dwc_ep_cmd_stall(dwc_dev_t *dev, uint8_t ep_phy_num); + void dwc_ep_cmd_start_new_config(dwc_dev_t *dev, + uint8_t ep_phy_num, + uint8_t resource_idx); ++void dwc_ep_cmd_clear_stall(dwc_dev_t *dev, uint8_t ep_phy_num); + + void dwc_ep_enable(dwc_dev_t *dev, uint8_t ep_phy_num); + void dwc_ep_disable(dwc_dev_t *dev, uint8_t ep_phy_num); +diff --git a/platform/msm_shared/usb30_udc.c b/platform/msm_shared/usb30_udc.c +index 619289917..0bd548263 100644 +--- a/platform/msm_shared/usb30_udc.c ++++ b/platform/msm_shared/usb30_udc.c +@@ -47,6 +47,8 @@ + #include + #include + ++#include "usb30_dwc_hw.h" ++ + //#define DEBUG_USB + + #ifdef DEBUG_USB +diff --git a/target/msm8226/init.c b/target/msm8226/init.c +index 320a1bd13..684633dcd 100644 +--- a/target/msm8226/init.c ++++ b/target/msm8226/init.c +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -49,6 +50,9 @@ + #include + #include + #include ++#include ++ ++extern void crypto_eng_cleanup(); + + #if LONG_PRESS_POWER_ON + #include +diff --git a/target/msm8916/init.c b/target/msm8916/init.c +index e0943d546..3de479b0e 100644 +--- a/target/msm8916/init.c ++++ b/target/msm8916/init.c +@@ -46,12 +46,15 @@ + #include + #include + #include ++#include + #include + #include + #include + #include + #include + #include ++#include ++#include + #include + + #if LONG_PRESS_POWER_ON +@@ -96,6 +99,7 @@ static uint32_t mmc_sdc_pwrctl_irq[] = + { SDCC1_PWRCTL_IRQ, SDCC2_PWRCTL_IRQ }; + + extern void target_try_load_qhypstub(); ++extern void crypto_eng_cleanup(); + + void target_early_init(void) + { +diff --git a/target/msm8974/init.c b/target/msm8974/init.c +index 41ea1976b..beac1ffdf 100644 +--- a/target/msm8974/init.c ++++ b/target/msm8974/init.c +@@ -49,7 +49,15 @@ + #include + #include + #include ++#include + #include ++#include ++#include ++ ++extern int platform_is_8974(); ++extern int platform_is_8974ac(); ++extern int platform_is_8974Pro(); ++extern void crypto_eng_cleanup(); + + #define HW_PLATFORM_8994_INTERPOSER 0x3 + +-- +2.43.2 + diff --git a/main/lk2nd/APKBUILD b/main/lk2nd/APKBUILD index 93e5e55be..f5e768bb2 100644 --- a/main/lk2nd/APKBUILD +++ b/main/lk2nd/APKBUILD @@ -1,13 +1,16 @@ # Maintainer: Alexey Minnekhanov pkgname=lk2nd -pkgver=0.15.0 -pkgrel=1 +pkgver=0.16.0 +pkgrel=0 pkgdesc="Secondary little kernel (lk) bootloader for several Qualcomm devices" arch="armv7 aarch64" url="https://github.com/msm8916-mainline/lk2nd" license="MIT AND BSD-3-Clause AND GPL-2.0-only" makedepends="dtc dtc-dev gcc-arm-none-eabi python3 py3-libfdt" -source="$pkgname-$pkgver.tar.gz::https://github.com/msm8916-mainline/lk2nd/archive/refs/tags/$pkgver.tar.gz" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/msm8916-mainline/lk2nd/archive/refs/tags/$pkgver.tar.gz + 0001-build-fixes.patch + " options="!check !archcheck !tracedeps !strip pmb:cross-native" # This APKBUILD builds bare metal executable; options are very specific! # * there are no tests (how do you even test the bootloader?); @@ -103,5 +106,6 @@ msm8226_htc_memul() { } sha512sums=" -60551065ea072257b459629ea2c555933fae97eef08e6bee5904aa3751cb67fa38125f89f8d7e06c6d9438b3783d81da428b3b428e46cf6bd8dae0ee9163c1b5 lk2nd-0.15.0.tar.gz +e3708b02f7bf677c60b9f09e75d70c05438466c62378294b31109c9085bfaf5e25598c91a841dc2756367b5cb069e10d9df56c1d1b174ba07b8fd2017487c5c2 lk2nd-0.16.0.tar.gz +e0ff876f69950cd3026d0168edc7e32d1f671a448153ee3c1dcf8906aed3c67b91bdd3e1ea73e789c7d85fbf2bebd42054dd89ae486d1921df456f606a7e82d2 0001-build-fixes.patch "