Skip to contentSkip to conversation

Allow framebuffer in SRAM and do not touch framebuffer SRAM on boot.

PATCH In review Vivien Chappelier 1 participant 1 message Jun 9, 2007

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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 +12 -0
index 05a3849..6e83f85 100644
@@ -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 +2 -0
index 1f23f04..2e0b267 100644
@@ -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