diff options
author | Simon Glass <sjg@chromium.org> | 2020-09-23 06:16:40 +0300 |
---|---|---|
committer | Bin Meng <bmeng.cn@gmail.com> | 2020-09-25 06:27:27 +0300 |
commit | 308b1a960e3173148a313dfab29a00349168eced (patch) | |
tree | f99aa32d1fff9dd39babbbf5e754cd605cc2dd7f | |
parent | 29d2d64ed55f2dfaff6d298b0f589ea0f8edef8d (diff) | |
download | u-boot-308b1a960e3173148a313dfab29a00349168eced.tar.xz |
x86: video: Show information about each video device
At present the 'bdinfo' command shows the framebuffer address, but not the
address of the copy framebuffer, if present. Add support for this.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
-rw-r--r-- | cmd/bdinfo.c | 32 | ||||
-rw-r--r-- | include/video.h | 6 |
2 files changed, 33 insertions, 5 deletions
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 0229846d3e..8d8daa6336 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -8,9 +8,11 @@ #include <common.h> #include <command.h> +#include <dm.h> #include <env.h> #include <lmb.h> #include <net.h> +#include <video.h> #include <vsprintf.h> #include <asm/cache.h> @@ -34,6 +36,12 @@ static void print_eth(int idx) printf("%-12s= %s\n", name, val); } +static void print_phys_addr(const char *name, phys_addr_t value) +{ + printf("%-12s= 0x%.*llx\n", name, 2 * (int)sizeof(ulong), + (unsigned long long)value); +} + void bdinfo_print_mhz(const char *name, unsigned long hz) { char buf[32]; @@ -58,6 +66,26 @@ __weak void arch_print_bdinfo(void) { } +static void show_video_info(void) +{ + const struct udevice *dev; + struct uclass *uc; + + uclass_id_foreach_dev(UCLASS_VIDEO, dev, uc) { + printf("%-12s= %s %sactive\n", "Video", dev->name, + device_active(dev) ? "" : "in"); + if (device_active(dev)) { + struct video_priv *upriv = dev_get_uclass_priv(dev); + + print_phys_addr("FB base", (ulong)upriv->fb); + if (upriv->copy_fb) + print_phys_addr("FB copy", (ulong)upriv->copy_fb); + printf("%-12s= %dx%dx%d\n", "FB size", upriv->xsize, + upriv->ysize, 1 << upriv->bpix); + } + } +} + int do_bdinfo(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { struct bd_info *bd = gd->bd; @@ -86,7 +114,9 @@ int do_bdinfo(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) bdinfo_print_num("fdt_blob", (ulong)gd->fdt_blob); bdinfo_print_num("new_fdt", (ulong)gd->new_fdt); bdinfo_print_num("fdt_size", (ulong)gd->fdt_size); -#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) || defined(CONFIG_DM_VIDEO) + if (IS_ENABLED(CONFIG_DM_VIDEO)) + show_video_info(); +#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) bdinfo_print_num("FB base ", gd->fb_base); #endif #if CONFIG_IS_ENABLED(MULTI_DTB_FIT) diff --git a/include/video.h b/include/video.h index 1a0ffd8037..9d09d2409a 100644 --- a/include/video.h +++ b/include/video.h @@ -13,8 +13,6 @@ #ifndef _VIDEO_H_ #define _VIDEO_H_ -#ifdef CONFIG_DM_VIDEO - #include <stdio_dev.h> struct udevice; @@ -140,6 +138,7 @@ struct video_ops { */ int video_reserve(ulong *addrp); +#ifdef CONFIG_DM_VIDEO /** * video_clear() - Clear a device's frame buffer to background color. * @@ -147,6 +146,7 @@ int video_reserve(ulong *addrp); * @return 0 */ int video_clear(struct udevice *dev); +#endif /* CONFIG_DM_VIDEO */ /** * video_sync() - Sync a device's frame buffer with its hardware @@ -243,8 +243,6 @@ static inline int video_sync_copy(struct udevice *dev, void *from, void *to) } #endif -#endif /* CONFIG_DM_VIDEO */ - #ifndef CONFIG_DM_VIDEO /* Video functions */ |