Allow framebuffer in SRAM and do not touch framebuffer SRAM on boot.
Subsystems (2)
PATCH 6/12 Allow framebuffer in SRAM and do not touch framebuffer SRAM on boot.
On HTC smartphones, the LCD controller is already running in SRAM at boot time. Therefore, clearing the SRAM before the controller is turned off will hang it, and attemps to reset it later during the initialization of the LCD will not work. This patch reserves the SRAM part where the framebuffer 'palette' is located so that it is not cleared at boot time on HTC phones. It also fixes support for LCD DMA in the SRAM region.
---arch/arm/plat-omap/dma.c | 12 ++++++++++++arch/arm/plat-omap/sram.c | 2 ++
2 files changed, 14 insertions(+), 0 deletions(-)
arch/arm/plat-omap/dma.c +0 -0
@@ -47,6 +47,8 @@
#define OMAP_FUNC_MUX_ARM_BASE (0xfffe1000 + 0xec)
+#define OMAP_SRAM_BASE 0x20000000
+
static int enable_1510_mode = 0;
struct omap_dma_lch {
@@ -1176,6 +1178,16 @@ static void set_b1_regs(void)
}
if (omap_dma_in_1510_mode()) {+
+ if(top >= OMAP_SRAM_BASE && bottom >= OMAP_SRAM_BASE) {
+ omap_writew(1 << 6, OMAP1510_DMA_LCD_CTRL); /* SRAM */
+ } else if(top < OMAP_SRAM_BASE && bottom < OMAP_SRAM_BASE) {
+ omap_writew(0, OMAP1510_DMA_LCD_CTRL); /* SDRAM */
+ } else {
+ printk(KERN_ERR "LCD DMA across SDRAM and SRAM\n");
+ BUG();
+ }
+
omap_writew(top >> 16, OMAP1510_DMA_LCD_TOP_F1_U);
omap_writew(top, OMAP1510_DMA_LCD_TOP_F1_L);
omap_writew(bottom >> 16, OMAP1510_DMA_LCD_BOT_F1_U);arch/arm/plat-omap/sram.c +0 -0
@@ -33,6 +33,8 @@
#if defined(CONFIG_ARCH_OMAP24XX)
#define SRAM_BOOTLOADER_SZ 0x00
+#elif defined(CONFIG_MACH_TYPHOON) /* don't touch framebuffer until DMA off */
+#define SRAM_BOOTLOADER_SZ 0x1020
#else
#define SRAM_BOOTLOADER_SZ 0x80
#endif
Signature · 1 line
1.5.1.3
Quoted 32 lines · Vivien Chappelier
On HTC smartphones, the LCD controller is already running in SRAM at boot time.
Therefore, clearing the SRAM before the controller is turned off will hang it,
and attemps to reset it later during the initialization of the LCD will not work. This patch reserves the SRAM part where the framebuffer 'palette' is located so that it is not cleared at boot time on HTC phones. It also fixes support for LCD DMA in the SRAM region.Signed-off-by Vivien Chappelier <[email protected]>---
arch/arm/plat-omap/dma.c| 12 ++++++++++++arch/arm/plat-omap/sram.c| 2 ++2 files changed, 14 insertions(+), 0 deletions(-)arch/arm/plat-omap/dma.c +5
-0@@ -47,6 +47,8 @@#define OMAP_FUNC_MUX_ARM_BASE (0xfffe1000 + 0xec) +#define OMAP_SRAM_BASE 0x20000000 +static int enable_1510_mode =0 ;struct omap_dma_lch {@@ -1176,6 +1178,16 @@ static void set_b1_regs(void) }if (omap_dma_in_1510_mode ()) { + +if (top >=OMAP_SRAM_BASE && bottom >=OMAP_SRAM_BASE ) { +omap_writew (1 <<6 ,OMAP1510_DMA_LCD_CTRL );/* SRAM */
arch/arm/plat-omap/dma.c static void set_b1_regs(void) · line 1192
Quoted 10 lines
arch/arm/plat-omap/dma.c +7
-0+ }else if (top <OMAP_SRAM_BASE && bottom <OMAP_SRAM_BASE ) { +omap_writew (0 ,OMAP1510_DMA_LCD_CTRL );/* SDRAM */ + }else { +printk (KERN_ERR "LCD DMA across SDRAM and SRAM\n" ); +BUG (); + } +omap_writew (top >>16 ,OMAP1510_DMA_LCD_TOP_F1_U );omap_writew (top,OMAP1510_DMA_LCD_TOP_F1_L );omap_writew (bottom >>16 ,OMAP1510_DMA_LCD_BOT_F1_U );
Please tabify above, and add a space after if( to be if (.
Tony