Merge "target: msm8974: set proper ovp and max duty cycle for DragonBoard8074"
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index 50e1425..13b5800 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -69,8 +69,6 @@
#include "scm.h"
extern bool target_use_signed_kernel(void);
-extern void dsb();
-extern void isb();
extern void platform_uninit(void);
extern void target_uninit(void);
diff --git a/arch/arm/include/arch/defines.h b/arch/arm/include/arch/defines.h
index 2041f39..d08988e 100644
--- a/arch/arm/include/arch/defines.h
+++ b/arch/arm/include/arch/defines.h
@@ -41,5 +41,12 @@
#endif
#define IS_CACHE_LINE_ALIGNED(addr) !((uint32_t) (addr) & (CACHE_LINE - 1))
+
+#if ARM_ISA_ARMV7
+#define dsb() __asm__ volatile ("dsb" : : : "memory");
+#elif ARM_ISA_ARMV6
+#define dsb() __asm__ volatile ("mcr p15, 0, %0, c7, c10, 4" : : "r" (0): "memory");
+#endif
+
#endif
diff --git a/arch/arm/mmu.c b/arch/arm/mmu.c
index 3fc61bf..2027b41 100644
--- a/arch/arm/mmu.c
+++ b/arch/arm/mmu.c
@@ -25,6 +25,7 @@
#include <compiler.h>
#include <arch.h>
#include <arch/arm.h>
+#include <arch/defines.h>
#include <arch/arm/mmu.h>
#if ARM_WITH_MMU
@@ -94,6 +95,10 @@
void arch_disable_mmu(void)
{
+ /* Ensure all memory access are complete
+ * before disabling MMU
+ */
+ dsb();
arm_write_cr1(arm_read_cr1() & ~(1<<0));
arm_invalidate_tlb();
}
diff --git a/arch/arm/ops.S b/arch/arm/ops.S
index 2581273..6b9d966 100644
--- a/arch/arm/ops.S
+++ b/arch/arm/ops.S
@@ -209,6 +209,12 @@
/* void arm_write_cr1(uint32_t val) */
FUNCTION(arm_write_cr1)
mcr p15, 0, r0, c1, c0, 0
+#if ARM_CPU_CORTEX_A8
+ isb sy
+#elif ARM_CPU_ARM1136
+ mov r0, #0
+ mcr p15, 0, r0, c7, c5, 4
+#endif
bx lr
/* uint32_t arm_read_cr1_aux(void) */
@@ -235,6 +241,18 @@
FUNCTION(arm_invalidate_tlb)
mov r0, #0
mcr p15, 0, r0, c8, c7, 0
+#if ARM_CPU_CORTEX_A8
+ dsb sy
+#elif ARM_CPU_ARM1136
+ mov r0, #0
+ mcr p15, 0, r0, c7, c10, 4
+#endif
+#if ARM_CPU_CORTEX_A8
+ isb sy
+#elif ARM_CPU_ARM1136
+ mov r0, #0
+ mcr p15, 0, r0, c7, c5, 4
+#endif
bx lr
/* void arch_switch_stacks_and_call(addr_t call, addr_t stack) */
@@ -252,26 +270,6 @@
#endif
bx lr
-/*void isb(void) */
-FUNCTION(isb)
-#if ARM_CPU_CORTEX_A8
- isb sy
-#elif ARM_CPU_ARM1136
- mov r0, #0
- mcr p15, 0, r0, c7, c5, 4
-#endif
- bx lr
-
-/*void dsb(void) */
-FUNCTION(dsb)
-#if ARM_CPU_CORTEX_A8
- dsb sy
-#elif ARM_CPU_ARM1136
- mov r0, #0
- mcr p15, 0, r0, c7, c10, 4
-#endif
- bx lr
-
/* uint32_t arm_read_cycle_count(void); */
FUNCTION(arm_read_cycle_count)
diff --git a/dev/gcdb/display/include/panel_nt35521_720p_video.h b/dev/gcdb/display/include/panel_nt35521_720p_video.h
index e9e4104..ae70a50 100644
--- a/dev/gcdb/display/include/panel_nt35521_720p_video.h
+++ b/dev/gcdb/display/include/panel_nt35521_720p_video.h
@@ -1185,6 +1185,9 @@
0x53, 0x2C, 0xFF, 0xFF, };
+static char nt35521_720p_video_on_cmd205[] = {
+0x02, 0x00, 0x29, 0xC0,
+0x51, 0xFF, 0xFF, 0xFF, };
static struct mipi_dsi_cmd nt35521_720p_video_on_command[] = {
@@ -1392,9 +1395,10 @@
{ 0x4 , nt35521_720p_video_on_cmd201},
{ 0xc , nt35521_720p_video_on_cmd202},
{ 0xc , nt35521_720p_video_on_cmd203},
-{ 0x8 , nt35521_720p_video_on_cmd204}
+{ 0x8 , nt35521_720p_video_on_cmd204},
+{ 0x8 , nt35521_720p_video_on_cmd205}
};
-#define NT35521_720P_VIDEO_ON_COMMAND 205
+#define NT35521_720P_VIDEO_ON_COMMAND 206
static char nt35521_720p_videooff_cmd0[] = {
diff --git a/platform/msm8974/acpuclock.c b/platform/msm8974/acpuclock.c
index e162feb..be8ce58 100644
--- a/platform/msm8974/acpuclock.c
+++ b/platform/msm8974/acpuclock.c
@@ -524,3 +524,21 @@
ASSERT(0);
}
}
+
+void edp_clk_enable(void)
+{
+ int ret;
+
+ ret = clk_get_set_enable("edp_pixel_clk", 138500000, 1);
+ if (ret) {
+ dprintf(CRITICAL, "failed to set edp_pixel_clk ret = %d\n",
+ ret);
+ ASSERT(0);
+ }
+
+ ret = clk_get_set_enable("edp_link_clk", 270000000, 1);
+ if (ret) {
+ dprintf(CRITICAL, "failed to set edp_link_clk ret = %d\n", ret);
+ ASSERT(0);
+ }
+}
diff --git a/platform/msm_shared/crypto4_eng.c b/platform/msm_shared/crypto4_eng.c
index 84fbc9f..a19c224 100644
--- a/platform/msm_shared/crypto4_eng.c
+++ b/platform/msm_shared/crypto4_eng.c
@@ -26,6 +26,7 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <arch/defines.h>
#include <string.h>
#include <endian.h>
#include <debug.h>
@@ -37,7 +38,6 @@
#include <scm.h>
#include <smem.h>
-extern void dsb(void);
extern void ce_async_reset();
void wr_ce(uint32_t val,uint32_t reg)
diff --git a/platform/msm_shared/display.c b/platform/msm_shared/display.c
index 3768ca8..3bf9278 100644
--- a/platform/msm_shared/display.c
+++ b/platform/msm_shared/display.c
@@ -136,6 +136,12 @@
if (ret)
goto msm_display_config_out;
break;
+ case EDP_PANEL:
+ dprintf(INFO, "Config EDP PANEL.\n");
+ ret = mdp_edp_config(pinfo, &(panel->fb));
+ if (ret)
+ goto msm_display_config_out;
+ break;
default:
return ERR_INVALID_ARGS;
};
@@ -207,7 +213,12 @@
if (ret)
goto msm_display_on_out;
break;
-
+ case EDP_PANEL:
+ dprintf(INFO, "Turn on EDP PANEL.\n");
+ ret = mdp_edp_on();
+ if (ret)
+ goto msm_display_on_out;
+ break;
default:
return ERR_INVALID_ARGS;
};
@@ -302,6 +313,12 @@
dprintf(INFO, "Turn off LCDC PANEL.\n");
mdp_lcdc_off();
break;
+ case EDP_PANEL:
+ dprintf(INFO, "Turn off EDP PANEL.\n");
+ ret = mdp_edp_off();
+ if (ret)
+ goto msm_display_off_out;
+ break;
default:
return ERR_INVALID_ARGS;
};
diff --git a/platform/msm_shared/dload_util.c b/platform/msm_shared/dload_util.c
index 06140f2..7455a19 100644
--- a/platform/msm_shared/dload_util.c
+++ b/platform/msm_shared/dload_util.c
@@ -37,8 +37,6 @@
#define EMERGENCY_DLOAD_COOKIE_1 0xC67E4350
#define EMERGENCY_DLOAD_COOKIE_2 0x77777777
-extern void dsb();
-
void dload_util_write_cookie(uint32_t target_dload_mode_addr,
enum dload_mode mode)
{
diff --git a/platform/msm_shared/include/mipi_dsi.h b/platform/msm_shared/include/mipi_dsi.h
index 4f90f96..2a6d067 100755
--- a/platform/msm_shared/include/mipi_dsi.h
+++ b/platform/msm_shared/include/mipi_dsi.h
@@ -659,6 +659,7 @@
struct mipi_dsi_cmd {
int size;
char *payload;
+ int wait;
};
struct mipi_dsi_panel_config {
diff --git a/platform/msm_shared/lvds.c b/platform/msm_shared/lvds.c
index 85ab7fb..0a16c34 100644
--- a/platform/msm_shared/lvds.c
+++ b/platform/msm_shared/lvds.c
@@ -31,6 +31,7 @@
#include <reg.h>
#include <err.h>
#include <bits.h>
+#include <arch/defines.h>
#include <platform/iomap.h>
#include <platform/clock.h>
#include <dev/fbcon.h>
diff --git a/platform/msm_shared/mipi_dsi.c b/platform/msm_shared/mipi_dsi.c
index 6b6e6c6..92d575e 100644
--- a/platform/msm_shared/mipi_dsi.c
+++ b/platform/msm_shared/mipi_dsi.c
@@ -46,7 +46,6 @@
unsigned short num_of_lanes);
extern void mdp_shutdown(void);
extern void mdp_start_dma(void);
-extern void dsb(void);
#if (DISPLAY_TYPE_MDSS == 0)
#define MIPI_DSI0_BASE MIPI_DSI_BASE
@@ -229,7 +228,11 @@
writel(cm->size, DSI_DMA_CMD_LENGTH); // reg 0x48 for this build
dsb();
ret += dsi_cmd_dma_trigger_for_panel();
- udelay(80);
+ dsb();
+ if (cm->wait)
+ mdelay(cm->wait);
+ else
+ udelay(80);
cm++;
}
return ret;
diff --git a/platform/msm_shared/qtimer_mmap.c b/platform/msm_shared/qtimer_mmap.c
index ef76075..bcd9a9a 100644
--- a/platform/msm_shared/qtimer_mmap.c
+++ b/platform/msm_shared/qtimer_mmap.c
@@ -30,6 +30,7 @@
#include <reg.h>
#include <compiler.h>
#include <qtimer.h>
+#include <arch/defines.h>
#include <platform/irqs.h>
#include <platform/iomap.h>
#include <platform/interrupts.h>
@@ -42,7 +43,6 @@
static volatile uint32_t current_time;
static uint32_t tick_count;
-extern void dsb();
static void qtimer_enable();
static enum handler_return qtimer_irq(void *arg)
diff --git a/platform/msm_shared/rules.mk b/platform/msm_shared/rules.mk
index 0ffa27c..063d1f9 100755
--- a/platform/msm_shared/rules.mk
+++ b/platform/msm_shared/rules.mk
@@ -235,3 +235,28 @@
$(LOCAL_DIR)/clock_pll.o \
$(LOCAL_DIR)/clock_lib2.o
endif
+
+ifeq ($(PLATFORM),fsm9900)
+ OBJS += $(LOCAL_DIR)/qgic.o \
+ $(LOCAL_DIR)/qtimer.o \
+ $(LOCAL_DIR)/qtimer_mmap.o \
+ $(LOCAL_DIR)/interrupts.o \
+ $(LOCAL_DIR)/clock.o \
+ $(LOCAL_DIR)/clock_pll.o \
+ $(LOCAL_DIR)/clock_lib2.o \
+ $(LOCAL_DIR)/uart_dm.o \
+ $(LOCAL_DIR)/board.o \
+ $(LOCAL_DIR)/scm.o \
+ $(LOCAL_DIR)/spmi.o \
+ $(LOCAL_DIR)/bam.o \
+ $(LOCAL_DIR)/qpic_nand.o \
+ $(LOCAL_DIR)/dev_tree.o \
+ $(LOCAL_DIR)/certificate.o \
+ $(LOCAL_DIR)/image_verify.o \
+ $(LOCAL_DIR)/crypto_hash.o \
+ $(LOCAL_DIR)/crypto5_eng.o \
+ $(LOCAL_DIR)/crypto5_wrapper.o \
+ $(LOCAL_DIR)/i2c_qup.o \
+ $(LOCAL_DIR)/gpio.o \
+ $(LOCAL_DIR)/dload_util.o
+endif
diff --git a/platform/msm_shared/uart_dm.c b/platform/msm_shared/uart_dm.c
index 01bcbb6..f551a7a 100644
--- a/platform/msm_shared/uart_dm.c
+++ b/platform/msm_shared/uart_dm.c
@@ -43,7 +43,6 @@
#define NULL 0
#endif
-extern void dsb(void);
static int uart_init_flag = 0;
diff --git a/target/msm8226/init.c b/target/msm8226/init.c
index 0b6e75b..6def2a6 100644
--- a/target/msm8226/init.c
+++ b/target/msm8226/init.c
@@ -72,6 +72,7 @@
HW_PLATFORM_SUBTYPE_SKUAA = 1,
HW_PLATFORM_SUBTYPE_SKUF = 2,
HW_PLATFORM_SUBTYPE_SKUAB = 3,
+ HW_PLATFORM_SUBTYPE_SKUG = 5,
};
static uint32_t mmc_pwrctl_base[] =
@@ -301,6 +302,8 @@
break;
case HW_PLATFORM_SUBTYPE_SKUAB:
break;
+ case HW_PLATFORM_SUBTYPE_SKUG:
+ break;
default:
dprintf(CRITICAL, "Platform Subtype : %u is not supported\n", platform_subtype);
ASSERT(0);
diff --git a/target/msm8226/target_display.c b/target/msm8226/target_display.c
index a30b568..5b719cc 100755
--- a/target/msm8226/target_display.c
+++ b/target/msm8226/target_display.c
@@ -42,6 +42,8 @@
#include "include/display_resource.h"
+#define HFPLL_LDO_ID 8
+
static struct pm8x41_wled_data wled_ctrl = {
.mod_scheme = 0x00,
.led1_brightness = (0x0F << 8) | 0xEF,
@@ -129,11 +131,16 @@
ldo_entry_array[ldocounter].ldo_id);
/* Set voltage during power on */
- if (enable == 1) {
+ if (enable) {
pm8x41_ldo_set_voltage(&ldo_entry,
ldo_entry_array[ldocounter].ldo_voltage);
+
+ pm8x41_ldo_control(&ldo_entry, enable);
+
+ } else if(!target_cont_splash_screen() &&
+ ldo_entry_array[ldocounter].ldo_id != HFPLL_LDO_ID) {
+ pm8x41_ldo_control(&ldo_entry, enable);
}
- pm8x41_ldo_control(&ldo_entry, enable);
ldocounter++;
}
diff --git a/target/msm8974/include/target/display.h b/target/msm8974/include/target/display.h
index 818011c..468b6d5 100644
--- a/target/msm8974/include/target/display.h
+++ b/target/msm8974/include/target/display.h
@@ -30,6 +30,7 @@
#define _TARGET_COPPER_DISPLAY_H
#define MIPI_FB_ADDR 0x0D200000
+#define EDP_FB_ADDR 0x7EF00000
#define MIPI_HSYNC_PULSE_WIDTH 12
#define MIPI_HSYNC_BACK_PORCH_DCLK 32
diff --git a/target/msm8974/target_display.c b/target/msm8974/target_display.c
index 9c6d937..fcefcfe 100644
--- a/target/msm8974/target_display.c
+++ b/target/msm8974/target_display.c
@@ -46,6 +46,7 @@
extern int msm_display_off();
extern int mdss_dsi_uniphy_pll_config(uint32_t ctl_base);
extern int mdss_sharp_dsi_uniphy_pll_config(uint32_t ctl_base);
+extern void edp_auo_1080p_init(struct edp_panel_data *edp_panel);
static struct pm8x41_wled_data wled_ctrl = {
.mod_scheme = 0x00,
@@ -200,8 +201,60 @@
return 0;
}
+static int msm8974_mdss_edp_panel_clock(int enable)
+{
+ if (enable) {
+ mdp_gdsc_ctrl(enable);
+ mdp_clock_init();
+ edp_clk_enable();
+ mmss_clock_init();
+ } else if (!target_cont_splash_screen()) {
+ /* Add here for continuous splash */
+ }
+
+ return 0;
+}
+
+static int msm8974_edp_panel_power(int enable)
+{
+ struct pm8x41_gpio gpio36_param = {
+ .direction = PM_GPIO_DIR_OUT,
+ .output_buffer = PM_GPIO_OUT_CMOS,
+ .out_strength = PM_GPIO_OUT_DRIVE_MED,
+ };
+
+ struct pm8x41_ldo ldo12 = LDO(PM8x41_LDO12, PLDO_TYPE);
+
+ if (enable) {
+ /* Enable backlight */
+ dprintf(SPEW, "Enable Backlight\n");
+ pm8x41_gpio_config(36, &gpio36_param);
+ pm8x41_gpio_set(36, PM_GPIO_FUNC_HIGH);
+ dprintf(SPEW, "Enable Backlight Done\n");
+
+ /* Turn on LDO12 for edp vdda */
+ dprintf(SPEW, "Setting LDO12 n");
+ pm8x41_ldo_set_voltage(&ldo12, 1800000);
+ pm8x41_ldo_control(&ldo12, enable);
+ dprintf(SPEW, "Setting LDO12 Done\n");
+
+ /* Panel Enable */
+ dprintf(SPEW, "Panel Enable\n");
+ gpio_tlmm_config(58, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_8MA,
+ GPIO_DISABLE);
+ gpio_set(58, 2);
+ dprintf(SPEW, "Panel Enable Done\n");
+ } else {
+ /* Keep LDO12 on, otherwise kernel will not boot */
+ pm8x41_gpio_set(36, PM_GPIO_FUNC_LOW);
+ }
+
+ return 0;
+}
+
void display_init(void)
{
+ struct edp_panel_data edp_panel;
uint32_t hw_id = board_hardware_id();
uint32_t soc_ver = board_soc_version();
@@ -237,6 +290,19 @@
panel.fb.format = FB_FORMAT_RGB888;
panel.mdp_rev = MDP_REV_50;
break;
+ case HW_PLATFORM_LIQUID:
+ edp_panel.panel_data = &panel;
+ edp_auo_1080p_init(&edp_panel);
+ panel.clk_func = msm8974_mdss_edp_panel_clock;
+ panel.power_func = msm8974_edp_panel_power;
+ panel.fb.base = (void *)EDP_FB_ADDR;
+ panel.fb.width = panel.panel_info.xres;
+ panel.fb.height = panel.panel_info.yres;
+ panel.fb.stride = panel.panel_info.xres;
+ panel.fb.bpp = panel.panel_info.bpp;
+ panel.fb.format = FB_FORMAT_RGB888;
+ panel.mdp_rev = MDP_REV_50;
+ break;
default:
return;
};