arm: tegra: display: provide framebuffer clear function
Jong Kim [Thu, 13 Dec 2012 00:01:39 +0000 (16:01 -0800)]
Add tegra_clear_framebuffer function.

bug 1175957

Change-Id: I12c249e011ecd839bbe9c5371b8be6e8a4b27bba
Signed-off-by: Jong Kim <jongk@nvidia.com>
Reviewed-on: http://git-master/r/170661
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Jon Mayo <jmayo@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Winnie Hsu <whsu@nvidia.com>

arch/arm/mach-tegra/board.h
arch/arm/mach-tegra/common.c

index 85d02d5..b02adb2 100644 (file)
@@ -102,6 +102,7 @@ void __init tegra_protected_aperture_init(unsigned long aperture);
 int  __init tegra_init_board_info(void);
 void tegra_move_framebuffer(unsigned long to, unsigned long from,
        unsigned long size);
+void tegra_clear_framebuffer(unsigned long to, unsigned long size);
 bool is_tegra_debug_uartport_hs(void);
 int get_tegra_uart_debug_port_id(void);
 int arb_lost_recovery(int scl_gpio, int sda_gpio);
index 8364589..4c5838b 100644 (file)
@@ -838,6 +838,30 @@ out:
        iounmap(to_io);
 }
 
+void tegra_clear_framebuffer(unsigned long to, unsigned long size)
+{
+       void __iomem *to_io;
+       unsigned long i;
+
+       BUG_ON(PAGE_ALIGN((unsigned long)to) != (unsigned long)to);
+       BUG_ON(PAGE_ALIGN(size) != size);
+
+       to_io = ioremap(to, size);
+       if (!to_io) {
+               pr_err("%s: Failed to map target framebuffer\n", __func__);
+               return;
+       }
+
+       if (pfn_valid(page_to_pfn(phys_to_page(to)))) {
+               for (i = 0 ; i < size; i += PAGE_SIZE)
+                       memset(to_io + i, 0, PAGE_SIZE);
+       } else {
+               for (i = 0; i < size; i += 4)
+                       writel(0, to_io + i);
+       }
+       iounmap(to_io);
+}
+
 void __init tegra_reserve(unsigned long carveout_size, unsigned long fb_size,
        unsigned long fb2_size)
 {