From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Fri, 20 Jan 2017 07:07:51 -0700 Subject: [U-Boot] [PATCH v4 16/17] dm: video: arm: rpi: Convert to use driver model for video In-Reply-To: <20170120140752.16296-1-sjg@chromium.org> References: <20170120140752.16296-1-sjg@chromium.org> Message-ID: <20170120140752.16296-17-sjg@chromium.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Adjust the video driver to work with driver model and move over existing baords. There is no need to keep the old code. We can also drop setting of CONFIG_FB_ADDR since driver model doesn't have this problem. Signed-off-by: Simon Glass --- Changes in v4: None Changes in v3: None configs/rpi_2_defconfig | 2 +- configs/rpi_3_32b_defconfig | 2 +- configs/rpi_3_defconfig | 2 +- configs/rpi_defconfig | 2 +- drivers/video/bcm2835.c | 62 ++++++++++++++++++++------------------------- include/configs/rpi.h | 11 ++------ 6 files changed, 34 insertions(+), 47 deletions(-) diff --git a/configs/rpi_2_defconfig b/configs/rpi_2_defconfig index f8f123c4a62..e492468a840 100644 --- a/configs/rpi_2_defconfig +++ b/configs/rpi_2_defconfig @@ -21,6 +21,6 @@ CONFIG_USB=y CONFIG_DM_USB=y CONFIG_USB_STORAGE=y CONFIG_USB_KEYBOARD=y +CONFIG_DM_VIDEO=y CONFIG_CONSOLE_SCROLL_LINES=10 -CONFIG_LCD=y CONFIG_PHYS_TO_BUS=y diff --git a/configs/rpi_3_32b_defconfig b/configs/rpi_3_32b_defconfig index 3ff932c3617..efcc23e5f4b 100644 --- a/configs/rpi_3_32b_defconfig +++ b/configs/rpi_3_32b_defconfig @@ -23,6 +23,6 @@ CONFIG_USB=y CONFIG_DM_USB=y CONFIG_USB_STORAGE=y CONFIG_USB_KEYBOARD=y +CONFIG_DM_VIDEO=y CONFIG_CONSOLE_SCROLL_LINES=10 -CONFIG_LCD=y CONFIG_PHYS_TO_BUS=y diff --git a/configs/rpi_3_defconfig b/configs/rpi_3_defconfig index 98d7bd2c500..8f39d32cd61 100644 --- a/configs/rpi_3_defconfig +++ b/configs/rpi_3_defconfig @@ -23,6 +23,6 @@ CONFIG_USB=y CONFIG_DM_USB=y CONFIG_USB_STORAGE=y CONFIG_USB_KEYBOARD=y +CONFIG_DM_VIDEO=y CONFIG_CONSOLE_SCROLL_LINES=10 -CONFIG_LCD=y CONFIG_PHYS_TO_BUS=y diff --git a/configs/rpi_defconfig b/configs/rpi_defconfig index 23d540d1298..62a1d981e99 100644 --- a/configs/rpi_defconfig +++ b/configs/rpi_defconfig @@ -21,6 +21,6 @@ CONFIG_USB=y CONFIG_DM_USB=y CONFIG_USB_STORAGE=y CONFIG_USB_KEYBOARD=y +CONFIG_DM_VIDEO=y CONFIG_CONSOLE_SCROLL_LINES=10 -CONFIG_LCD=y CONFIG_PHYS_TO_BUS=y diff --git a/drivers/video/bcm2835.c b/drivers/video/bcm2835.c index cd15f7f32ae..952ef596611 100644 --- a/drivers/video/bcm2835.c +++ b/drivers/video/bcm2835.c @@ -5,62 +5,56 @@ */ #include -#include -#include -#include +#include +#include #include #include -#include -DECLARE_GLOBAL_DATA_PTR; - -/* Global variables that lcd.c expects to exist */ -vidinfo_t panel_info; - -static int bcm2835_pitch; - -void lcd_ctrl_init(void *lcdbase) +static int bcm2835_video_probe(struct udevice *dev) { + struct video_uc_platdata *plat = dev_get_uclass_platdata(dev); + struct video_priv *uc_priv = dev_get_uclass_priv(dev); int ret; - int w, h; + int w, h, pitch; ulong fb_base, fb_size, fb_start, fb_end; debug("bcm2835: Query resolution...\n"); ret = bcm2835_get_video_size(&w, &h); - if (ret) { - /* FIXME: How to disable the LCD to prevent errors? hang()? */ - return; - } + if (ret) + return -EIO; debug("bcm2835: Setting up display for %d x %d\n", w, h); ret = bcm2835_set_video_params(&w, &h, 32, BCM2835_MBOX_PIXEL_ORDER_RGB, BCM2835_MBOX_ALPHA_MODE_IGNORED, - &fb_base, &fb_size, &bcm2835_pitch); + &fb_base, &fb_size, &pitch); debug("bcm2835: Final resolution is %d x %d\n", w, h); - panel_info.vl_col = w; - panel_info.vl_row = h; - panel_info.vl_bpix = LCD_COLOR32; - - gd->fb_base = fb_base; - /* Enable dcache for the frame buffer */ fb_start = fb_base & ~(MMU_SECTION_SIZE - 1); fb_end = fb_base + fb_size; fb_end = ALIGN(fb_end, 1 << MMU_SECTION_SHIFT); mmu_set_region_dcache_behaviour(fb_start, fb_end - fb_start, DCACHE_WRITEBACK); - lcd_set_flush_dcache(1); -} + video_set_flush_dcache(dev, true); -void lcd_enable(void) -{ -} + uc_priv->xsize = w; + uc_priv->ysize = h; + uc_priv->bpix = VIDEO_BPP32; + plat->base = fb_base; + plat->size = fb_size; -int lcd_get_size(int *line_length) -{ - *line_length = bcm2835_pitch; - - return *line_length * panel_info.vl_row; + return 0; } + +static const struct udevice_id bcm2835_video_ids[] = { + { .compatible = "brcm,bcm2835-hdmi" }, + { } +}; + +U_BOOT_DRIVER(bcm2835_video) = { + .name = "bcm2835_video", + .id = UCLASS_VIDEO, + .of_match = bcm2835_video_ids, + .probe = bcm2835_video_probe, +}; diff --git a/include/configs/rpi.h b/include/configs/rpi.h index a0afeadcaa2..960b19345cc 100644 --- a/include/configs/rpi.h +++ b/include/configs/rpi.h @@ -56,13 +56,6 @@ #define CONFIG_BCM2835_GPIO /* LCD */ #define CONFIG_LCD_DT_SIMPLEFB -#define LCD_BPP LCD_COLOR32 -/* - * Prevent allocation of RAM for FB; the real FB address is queried - * dynamically from the VideoCore co-processor, and comes from RAM - * not owned by the ARM CPU. - */ -#define CONFIG_FB_ADDR 0 #define CONFIG_VIDEO_BCM2835 #define CONFIG_SYS_WHITE_ON_BLACK @@ -121,8 +114,8 @@ #define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG #define ENV_DEVICE_SETTINGS \ "stdin=serial,usbkbd\0" \ - "stdout=serial,lcd\0" \ - "stderr=serial,lcd\0" + "stdout=serial,vidconsole\0" \ + "stderr=serial,vidconsole\0" /* * Memory layout for where various images get loaded by boot scripts: -- 2.11.0.483.g087da7b7c-goog