[coreboot-gerrit] New patch to review for coreboot: 92a81b2 exynos5420: Simplify the graphics code by eliminating the unused color map

Gabe Black (gabeblack@chromium.org) gerrit at coreboot.org
Tue Jul 9 05:29:12 CEST 2013


Gabe Black (gabeblack at chromium.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3666

-gerrit

commit 92a81b2fc88235862519e2b245a62881af56b390
Author: Stefan Reinauer <reinauer at chromium.org>
Date:   Mon May 20 15:17:44 2013 -0700

    exynos5420: Simplify the graphics code by eliminating the unused color map
    
    The code that allocated space for the framebuffer was adding space for a
    vestigial color map which was never used. It was also passing around a
    structure which was used to calculate a single value which was already
    known when that structure was put together. Eliminate the extra space,
    and pass the single value instead of the structure.
    
    Change-Id: I29bc17488539dbe695908e47f0b80c07e102e17d
    Signed-off-by: Gabe Black <gabeblack at chromium.org>
    Signed-off-by: Stefan Reinauer <reinauer at chromium.org>
---
 src/cpu/samsung/exynos5420/cpu.c     | 21 +++++----------------
 src/cpu/samsung/exynos5420/dp-core.h | 16 ++++------------
 src/cpu/samsung/exynos5420/fb.c      | 29 ++++++++---------------------
 src/mainboard/google/pit/mainboard.c |  2 +-
 4 files changed, 18 insertions(+), 50 deletions(-)

diff --git a/src/cpu/samsung/exynos5420/cpu.c b/src/cpu/samsung/exynos5420/cpu.c
index 0abc0a3..e83c16a 100644
--- a/src/cpu/samsung/exynos5420/cpu.c
+++ b/src/cpu/samsung/exynos5420/cpu.c
@@ -68,12 +68,10 @@ static void exynos_displayport_init(device_t dev)
 	/* put these on the stack. If, at some point, we want to move
 	 * this code to a pre-ram stage, it will be much easier.
 	 */
-	vidinfo_t vi;
 	struct exynos5_fimd_panel panel;
 	unsigned long int fb_size;
 	u32 lcdbase;
 
-	memset(&vi, 0, sizeof(vi));
 	memset(&panel, 0, sizeof(panel));
 
 	panel.is_dp = 1; /* Display I/F is eDP */
@@ -94,18 +92,10 @@ static void exynos_displayport_init(device_t dev)
 	panel.xres = conf->xres;
 	panel.yres = conf->yres;
 
-	vi.vl_col = conf->xres;
-	vi.vl_row = conf->yres;
-	vi.vl_bpix = conf->bpp;
-	/*
-	 * The size is a magic number from hardware. Allocate enough for the
-	 * frame buffer and color map.
-	 */
+	/* The size is a magic number from hardware. */
 	fb_size = conf->xres * conf->yres * (conf->bpp / 8);
-	lcdbase = (uintptr_t)cbmem_add(CBMEM_ID_CONSOLE, fb_size + 64*KiB);
-	printk(BIOS_SPEW, "LCD colormap base is %p\n", (void *)(lcdbase));
-	mmio_resource(dev, 0, lcdbase/KiB, 64);
-	vi.cmap = (void *)lcdbase;
+	lcdbase = (uintptr_t)cbmem_add(CBMEM_ID_CONSOLE, fb_size);
+	printk(BIOS_SPEW, "LCD framebuffer base is %p\n", (void *)(lcdbase));
 
 	/*
 	 * We need to clean and invalidate the framebuffer region and disable
@@ -119,18 +109,17 @@ static void exynos_displayport_init(device_t dev)
 	 * FIXME: Is disabling/re-enabling the MMU entirely necessary?
 	 */
 	uint32_t lower = ALIGN_DOWN(lcdbase, MiB);
-	uint32_t upper = ALIGN_UP(lcdbase + fb_size + 64*KiB, MiB);
+	uint32_t upper = ALIGN_UP(lcdbase + fb_size, MiB);
 	dcache_clean_invalidate_by_mva(lower, upper - lower);
 	dcache_mmu_disable();
 	mmu_config_range(lower/MiB, (upper - lower)/MiB, DCACHE_OFF);
 	dcache_mmu_enable();
 
-	lcdbase += 64*KiB;
 	mmio_resource(dev, 1, lcdbase/KiB, (fb_size + KiB - 1)/KiB);
 	printk(BIOS_DEBUG,
 	       "Initializing Exynos VGA, base %p\n", (void *)lcdbase);
 	memset((void *)lcdbase, 0, fb_size);	/* clear the framebuffer */
-	ret = lcd_ctrl_init(&vi, &panel, (void *)lcdbase);
+	ret = lcd_ctrl_init(fb_size, &panel, (void *)lcdbase);
 }
 
 static void cpu_init(device_t dev)
diff --git a/src/cpu/samsung/exynos5420/dp-core.h b/src/cpu/samsung/exynos5420/dp-core.h
index 7b81037..62144e3 100644
--- a/src/cpu/samsung/exynos5420/dp-core.h
+++ b/src/cpu/samsung/exynos5420/dp-core.h
@@ -117,14 +117,6 @@ struct s5p_dp_device {
 	struct link_train	link_train;
 };
 
-/* this struct is used by mainboards to pass mode info to the driver */
-typedef struct vidinfo {
-	u16 vl_col;
-	u16 vl_row;
-	u8 vl_bpix;
-	u16 *cmap;
-} vidinfo_t;
-
 /* s5p_dp_reg.c */
 
 /*
@@ -260,9 +252,9 @@ void s5p_dp_wait_hw_link_training_done(struct s5p_dp_device *dp);
 
 /* startup and init */
 struct exynos5_fimd_panel;
-void fb_init(vidinfo_t *panel_info, void *lcdbase,
-				struct exynos5_fimd_panel *pd);
+void fb_init(unsigned long int fb_size, void *lcdbase,
+	     struct exynos5_fimd_panel *pd);
 int dp_controller_init(struct s5p_dp_device *dp_device);
-int lcd_ctrl_init(vidinfo_t *panel_info,
-			struct exynos5_fimd_panel *panel_data, void *lcdbase);
+int lcd_ctrl_init(unsigned long int fb_size,
+		  struct exynos5_fimd_panel *panel_data, void *lcdbase);
 #endif /* CPU_SAMSUNG_EXYNOS5420_DP_CORE_H */
diff --git a/src/cpu/samsung/exynos5420/fb.c b/src/cpu/samsung/exynos5420/fb.c
index d4c3d44..760f5ee 100644
--- a/src/cpu/samsung/exynos5420/fb.c
+++ b/src/cpu/samsung/exynos5420/fb.c
@@ -116,32 +116,21 @@ static void fimd_bypass(void)
 	sysreg->disp1blk_cfg &= ~FIMDBYPASS_DISP1;
 }
 
-/* Calculate the size of Framebuffer from the resolution */
-static u32 calc_fbsize(vidinfo_t *panel_info)
-{
-	/* They had PAGE_SIZE here instead of 4096.
-	 * but that's a totally arbitrary number -- everything nowadays
-	 * has lots of page sizes.
-	 * So keep it obvious.
-	 */
-	return ALIGN((panel_info->vl_col * panel_info->vl_row *
-		      ((1<<panel_info->vl_bpix) / 8)), 4096);
-}
-
 /*
  * Initialize display controller.
  *
  * @param lcdbase	pointer to the base address of framebuffer.
  * @pd			pointer to the main panel_data structure
  */
-void fb_init(vidinfo_t *panel_info, void *lcdbase,
-	struct exynos5_fimd_panel *pd)
+void fb_init(unsigned long int fb_size, void *lcdbase,
+	     struct exynos5_fimd_panel *pd)
 {
 	unsigned int val;
-	u32 fbsize;
 	struct exynos5_fimd *fimd = samsung_get_base_fimd();
 	struct exynos5_disp_ctrl *disp_ctrl = samsung_get_base_disp_ctrl();
 
+	fb_size = ALIGN(fb_size, 4096);
+
 	writel(pd->ivclk | pd->fixvclk, &disp_ctrl->vidcon1);
 	val = ENVID_ON | ENVID_F_ON | (pd->clkval_f << CLKVAL_F_OFFSET);
 	writel(val, &fimd->vidcon0);
@@ -161,9 +150,7 @@ void fb_init(vidinfo_t *panel_info, void *lcdbase,
 	writel(val, &disp_ctrl->vidtcon2);
 
 	writel((unsigned int)lcdbase, &fimd->vidw00add0b0);
-
-	fbsize = calc_fbsize(panel_info);
-	writel((unsigned int)lcdbase + fbsize, &fimd->vidw00add1b0);
+	writel((unsigned int)lcdbase + fb_size, &fimd->vidw00add1b0);
 
 	writel(pd->xres * 2, &fimd->vidw00add2);
 
@@ -586,12 +573,12 @@ int dp_controller_init(struct s5p_dp_device *dp_device)
  * @param lcdbase	Base address of LCD frame buffer
  * @return 0 if ok, -ve error code on error
  */
-int lcd_ctrl_init(vidinfo_t *panel_info,
-		struct exynos5_fimd_panel *panel_data, void *lcdbase)
+int lcd_ctrl_init(unsigned long int fb_size,
+		  struct exynos5_fimd_panel *panel_data, void *lcdbase)
 {
 	int ret = 0;
 
 	fimd_bypass();
-	fb_init(panel_info, lcdbase, panel_data);
+	fb_init(fb_size, lcdbase, panel_data);
 	return ret;
 }
diff --git a/src/mainboard/google/pit/mainboard.c b/src/mainboard/google/pit/mainboard.c
index 11b72c5..77d48f9 100644
--- a/src/mainboard/google/pit/mainboard.c
+++ b/src/mainboard/google/pit/mainboard.c
@@ -198,7 +198,7 @@ static void mainboard_init(device_t dev)
 	disable_usb30_pll();
 
 	fb_addr = cbmem_find(CBMEM_ID_CONSOLE);
-	set_vbe_mode_info_valid(&edid, (uintptr_t)(fb_addr) + 64*KiB);
+	set_vbe_mode_info_valid(&edid, (uintptr_t)fb_addr);
 
 	lcd_vdd();
 	do {



More information about the coreboot-gerrit mailing list