Merge changes If2a10ad3,Ia086a5a4
* changes:
msm: Initialize mach_id before use in ssbi_keypad_init.
smem.h : Change array size to avoid buffer overflow
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index 10aac46..e3946ef 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -1249,6 +1249,10 @@
else
{
recovery_init();
+#if USE_PCOM_SECBOOT
+ if((device.is_unlocked) || (device.is_tampered))
+ set_tamper_flag(device.is_tampered);
+#endif
boot_linux_from_flash();
}
dprintf(CRITICAL, "ERROR: Could not do normal boot. Reverting "
diff --git a/dev/fbcon/fbcon.c b/dev/fbcon/fbcon.c
index 7aa8c62..9538e3a 100644
--- a/dev/fbcon/fbcon.c
+++ b/dev/fbcon/fbcon.c
@@ -211,13 +211,24 @@
void display_image_on_screen(void)
{
unsigned i = 0;
- unsigned total_x = config->width;
- unsigned total_y = config->height;
- unsigned bytes_per_bpp = ((config->bpp) / 8);
- unsigned image_base = ((((total_y/2) - (SPLASH_IMAGE_WIDTH / 2) - 1) *
- (config->width)) + (total_x/2 - (SPLASH_IMAGE_HEIGHT / 2)));
+ unsigned total_x;
+ unsigned total_y;
+ unsigned bytes_per_bpp;
+ unsigned image_base;
+
+ if (!config) {
+ dprintf(CRITICAL,"NULL configuration, image cannot be displayed\n");
+ return;
+ }
+
fbcon_clear();
+ total_x = config->width;
+ total_y = config->height;
+ bytes_per_bpp = ((config->bpp) / 8);
+ image_base = ((((total_y/2) - (SPLASH_IMAGE_WIDTH / 2) - 1) *
+ (config->width)) + (total_x/2 - (SPLASH_IMAGE_HEIGHT / 2)));
+
#if DISPLAY_TYPE_MIPI
if (bytes_per_bpp == 3)
{
diff --git a/platform/msm7x30/platform.c b/platform/msm7x30/platform.c
index 1b39264..527fc58 100755
--- a/platform/msm7x30/platform.c
+++ b/platform/msm7x30/platform.c
@@ -131,12 +131,14 @@
#endif
#if DISPLAY_TYPE_LCDC
- struct lcdc_timing_parameters *lcd_timing;
- mdp_lcdc_clock_init();
- lcd_timing = get_lcd_timing();
- fb_cfg = lcdc_init_set(lcd_timing);
- panel_poweron();
- fbcon_setup(fb_cfg);
+ if(!machine_is_ffa()) {
+ struct lcdc_timing_parameters *lcd_timing;
+ mdp_lcdc_clock_init();
+ lcd_timing = get_lcd_timing();
+ fb_cfg = lcdc_init_set(lcd_timing);
+ panel_poweron();
+ fbcon_setup(fb_cfg);
+ }
#endif
}
@@ -144,7 +146,9 @@
{
#if DISPLAY_TYPE_LCDC
/* Turning off LCDC */
- lcdc_shutdown();
+ if(!machine_is_ffa()) {
+ lcdc_shutdown();
+ }
#endif
}
diff --git a/platform/msm8960/gpio.c b/platform/msm8960/gpio.c
index 9403be0..783d4c1 100644
--- a/platform/msm8960/gpio.c
+++ b/platform/msm8960/gpio.c
@@ -156,10 +156,10 @@
/* Initial pm8038 GPIO configurations */
static struct pm8xxx_gpio_init pm8038_keypad_gpios[] = {
/* keys GPIOs */
- PM8XXX_GPIO_INPUT(PM_GPIO(3), PM_GPIO_PULL_UP_1_5),
- PM8XXX_GPIO_INPUT(PM_GPIO(8), PM_GPIO_PULL_UP_1_5),
- PM8XXX_GPIO_INPUT(PM_GPIO(10), PM_GPIO_PULL_UP_1_5),
- PM8XXX_GPIO_INPUT(PM_GPIO(11), PM_GPIO_PULL_UP_1_5),
+ PM8XXX_GPIO_INPUT(PM_GPIO(3), PM_GPIO_PULL_UP_30),
+ PM8XXX_GPIO_INPUT(PM_GPIO(8), PM_GPIO_PULL_UP_30),
+ PM8XXX_GPIO_INPUT(PM_GPIO(10), PM_GPIO_PULL_UP_30),
+ PM8XXX_GPIO_INPUT(PM_GPIO(11), PM_GPIO_PULL_UP_30),
};
static struct pm8xxx_gpio_init pm8921_keypad_gpios[] = {
diff --git a/platform/msm_shared/mipi_dsi.c b/platform/msm_shared/mipi_dsi.c
index 1ffc144..3b09510 100644
--- a/platform/msm_shared/mipi_dsi.c
+++ b/platform/msm_shared/mipi_dsi.c
@@ -683,6 +683,7 @@
void mipi_dsi_shutdown(void)
{
+#if (!CONT_SPLASH_SCREEN)
mdp_shutdown();
writel(0x01010101, DSI_INT_CTRL);
writel(0x13FF3BFF, DSI_ERR_INT_MASK0);
@@ -700,6 +701,13 @@
writel(0, DSI_CLK_CTRL);
writel(0, DSI_CTRL);
writel(0, DSIPHY_PLL_CTRL(0));
+#else
+ /* To keep the splash screen displayed till kernel driver takes
+ control, do not turn off the video mode engine and clocks.
+ Only disabling the MIPI DSI IRQs */
+ writel(0x01010101, DSI_INT_CTRL);
+ writel(0x13FF3BFF, DSI_ERR_INT_MASK0);
+#endif
}
struct fbcon_config *mipi_init(void)
diff --git a/platform/msm_shared/partition_parser.c b/platform/msm_shared/partition_parser.c
index 45f5413..0b1bf46 100644
--- a/platform/msm_shared/partition_parser.c
+++ b/platform/msm_shared/partition_parser.c
@@ -290,7 +290,7 @@
LAST_LBA_OFFSET]);
partition_entries[partition_count].size =
partition_entries[partition_count].last_lba -
- partition_entries[partition_count].first_lba;
+ partition_entries[partition_count].first_lba + 1;
partition_entries[partition_count].attribute_flag =
GET_LLWORD_FROM_BYTE(&data
[(j * partition_entry_size) +
diff --git a/target/msm7627a/init.c b/target/msm7627a/init.c
index 6c8f212..e40542b 100644
--- a/target/msm7627a/init.c
+++ b/target/msm7627a/init.c
@@ -54,6 +54,7 @@
#define MSM8X25_SURF 4037
#define MSM8X25_EVB 4042
+#define MSM8X25_QRD7 4095
#define LINUX_MACHTYPE MSM7X27A_SURF
@@ -264,6 +265,9 @@
case 0xC:
hw_platform = MSM8X25_EVB;
break;
+ case 0xF:
+ hw_platform = MSM8X25_QRD7;
+ break;
default:
hw_platform = MSM8X25_SURF;
}
@@ -299,6 +303,9 @@
case 0xC:
hw_platform = MSM7X27A_EVB;
break;
+ case 0xF:
+ hw_platform = MSM7X27A_QRD3;
+ break;
default:
if (target_msm_id == MSM7225A
|| target_msm_id == MSM7625A
@@ -465,21 +472,21 @@
}
return ret;
}
-
-int machine_is_7x27a_qrd3()
+int machine_is_qrd()
{
- if (board_machtype() == MSM7X27A_QRD3)
- return 1;
- else
- return 0;
-}
+ int ret = 0;
+ unsigned mach_type = board_machtype();
-int machine_is_7x27a_qrd1()
-{
- if (board_machtype() == MSM7X27A_QRD1)
- return 1;
- else
- return 0;
+ switch(mach_type) {
+ case MSM7X27A_QRD1:
+ case MSM7X27A_QRD3:
+ case MSM8X25_QRD7:
+ ret = 1;
+ break;
+ default:
+ ret = 0;
+ }
+ return ret;
}
int machine_is_8x25()
{
@@ -489,6 +496,7 @@
switch(mach_type) {
case MSM8X25_SURF:
case MSM8X25_EVB:
+ case MSM8X25_QRD7:
ret = 1;
break;
default:
diff --git a/target/msm7627a/keypad.c b/target/msm7627a/keypad.c
index 28776a6..134ee2c 100644
--- a/target/msm7627a/keypad.c
+++ b/target/msm7627a/keypad.c
@@ -136,7 +136,7 @@
void keypad_init(void)
{
- if (machine_is_7x27a_qrd1() || machine_is_7x27a_qrd3())
+ if (machine_is_qrd())
gpio_keypad_init(&halibut_keypad_info_qrd);
else if (machine_is_evb())
gpio_keypad_init(&halibut_keypad_info_evb);
diff --git a/target/msm7630_surf/init.c b/target/msm7630_surf/init.c
index 6f06e18..eb0c525 100644
--- a/target/msm7630_surf/init.c
+++ b/target/msm7630_surf/init.c
@@ -427,3 +427,20 @@
{
return platform_ce_type;
}
+
+int machine_is_ffa()
+{
+ unsigned mach_type;
+ int ret = 0;
+
+ mach_type = board_machtype();
+ switch(mach_type) {
+ case LINUX_MACHTYPE_8x55_FFA:
+ case LINUX_MACHTYPE_7x30_FFA:
+ ret = 1;
+ break;
+ default:
+ ret = 0;
+ }
+ return ret;
+}
diff --git a/target/msm8960/atags.c b/target/msm8960/atags.c
index c21634b..f7854b2 100644
--- a/target/msm8960/atags.c
+++ b/target/msm8960/atags.c
@@ -33,7 +33,7 @@
#define SIZE_1M (1024 * 1024)
#define SIZE_2M (2 * SIZE_1M)
-#define SIZE_141M (141 * SIZE_1M)
+#define SIZE_140M (140 * SIZE_1M)
#define SIZE_256M (256 * SIZE_1M)
#define SIZE_512M (512 * SIZE_1M)
@@ -44,7 +44,7 @@
if (smem_ram_ptable_init(&ram_ptable)) {
for (i = 0; i < ram_ptable.len; i++) {
- /* Use only 141M from memory bank starting at 0x80000000 */
+ /* Use only 140M from memory bank starting at 0x80000000 */
if (ram_ptable.parts[i].category == SDRAM &&
ram_ptable.parts[i].type == SYS_MEMORY &&
ram_ptable.parts[i].start == 0x80000000) {
@@ -52,7 +52,7 @@
*ptr++ = 4;
*ptr++ = 0x54410002;
- *ptr++ = SIZE_141M;
+ *ptr++ = SIZE_140M;
*ptr++ = ram_ptable.parts[i].start + SIZE_2M;
if (ram_ptable.parts[i].size > SIZE_256M) {
diff --git a/target/msm8960/include/target/display.h b/target/msm8960/include/target/display.h
index 5600baa..0f80546 100644
--- a/target/msm8960/include/target/display.h
+++ b/target/msm8960/include/target/display.h
@@ -29,7 +29,7 @@
#ifndef _TARGET_MSM8960_DISPLAY_H
#define _TARGET_MSM8960_DISPLAY_H
-#define MIPI_FB_ADDR 0x80B00000
+#define MIPI_FB_ADDR 0x89000000
/* Toshiba MDT61 Mipi Panel */
/* Unique to this panel, display width is 800, image is 600 */
diff --git a/target/msm8960/rules.mk b/target/msm8960/rules.mk
index 7a28bb4..7a51236 100644
--- a/target/msm8960/rules.mk
+++ b/target/msm8960/rules.mk
@@ -19,6 +19,7 @@
DEFINES += DISPLAY_SPLASH_SCREEN=1
DEFINES += DISPLAY_TYPE_MIPI=1
DEFINES += DISPLAY_MIPI_PANEL_TOSHIBA_MDT61=1
+DEFINES += CONT_SPLASH_SCREEN=1
MODULES += \
dev/keys \