[U-Boot] [PATCH v4 2/2] sunxi: video: Add simplefb support

Simon Glass sjg at chromium.org
Mon Nov 17 19:39:39 CET 2014


Hi Hans,

On 17 November 2014 15:48, Hans de Goede <hdegoede at redhat.com> wrote:
> From: Luc Verhaegen <libv at skynet.be>
>
> Add simplefb support, note this depends on the kernel having support for
> the clocks property which has recently been added to the simplefb devicetree
> binding.
>
> Signed-off-by: Luc Verhaegen <libv at skynet.be>
> [hdegoede at redhat.com: Use pre-populated simplefb node under /chosen as
>  disussed on the devicetree list]
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
>  arch/arm/include/asm/arch-sunxi/display.h |  4 ++++
>  board/sunxi/board.c                       | 11 +++++++++
>  drivers/video/sunxi_display.c             | 39 +++++++++++++++++++++++++++++++
>  include/configs/sunxi-common.h            |  8 +++++++
>  4 files changed, 62 insertions(+)
>
> diff --git a/arch/arm/include/asm/arch-sunxi/display.h b/arch/arm/include/asm/arch-sunxi/display.h
> index 8d80ceb..4c694f8 100644
> --- a/arch/arm/include/asm/arch-sunxi/display.h
> +++ b/arch/arm/include/asm/arch-sunxi/display.h
> @@ -195,4 +195,8 @@ struct sunxi_hdmi_reg {
>  #define SUNXI_HDMI_PLL_DBG0_PLL3               (0 << 21)
>  #define SUNXI_HDMI_PLL_DBG0_PLL7               (1 << 21)
>
> +#ifdef CONFIG_VIDEO_DT_SIMPLEFB
> +void sunxi_simplefb_setup(void *blob);
> +#endif
> +
>  #endif /* _SUNXI_DISPLAY_H */
> diff --git a/board/sunxi/board.c b/board/sunxi/board.c
> index e6ec5b8..d4530e8 100644
> --- a/board/sunxi/board.c
> +++ b/board/sunxi/board.c
> @@ -24,6 +24,7 @@
>  #endif
>  #include <asm/arch/clock.h>
>  #include <asm/arch/cpu.h>
> +#include <asm/arch/display.h>
>  #include <asm/arch/dram.h>
>  #include <asm/arch/gpio.h>
>  #include <asm/arch/mmc.h>
> @@ -237,3 +238,13 @@ int misc_init_r(void)
>         return 0;
>  }
>  #endif
> +
> +#ifdef CONFIG_OF_BOARD_SETUP
> +void
> +ft_board_setup(void *blob, bd_t *bd)
> +{
> +#ifdef CONFIG_VIDEO_DT_SIMPLEFB
> +       sunxi_simplefb_setup(blob);
> +#endif
> +}
> +#endif /* CONFIG_OF_BOARD_SETUP */
> diff --git a/drivers/video/sunxi_display.c b/drivers/video/sunxi_display.c
> index 3f46c31..74c4bd3 100644
> --- a/drivers/video/sunxi_display.c
> +++ b/drivers/video/sunxi_display.c
> @@ -13,6 +13,8 @@
>  #include <asm/arch/display.h>
>  #include <asm/global_data.h>
>  #include <asm/io.h>
> +#include <fdtdec.h>
> +#include <fdt_support.h>
>  #include <linux/fb.h>
>  #include <video_fb.h>
>
> @@ -416,3 +418,40 @@ video_hw_init(void)
>
>         return graphic_device;
>  }
> +
> +/*
> + * Simplefb support.
> + */
> +#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_VIDEO_DT_SIMPLEFB)
> +void
> +sunxi_simplefb_setup(void *blob)
> +{
> +       static GraphicDevice *graphic_device = &sunxi_display.graphic_device;
> +       int offset, ret;
> +
> +       if (!sunxi_display.enabled)
> +               return;

return -ENOENT?

> +
> +       /* Find a framebuffer node, with pipeline == "de_be0-lcd0-hdmi" */
> +       offset = fdt_node_offset_by_compatible(blob, -1, "sunxi,framebuffer");

These should convert to DM at some point. To make sure we don't forget
any, you should add this compatible string to fdtdec.c and use the
enum from fdtdec.h and also fdtdec_next_compatible().

> +       while (offset >= 0) {
> +               ret = fdt_find_string(blob, offset, "sunxi,pipeline",
> +                                     "de_be0-lcd0-hdmi");
> +               if (ret == 0)
> +                       break;
> +               offset = fdt_node_offset_by_compatible(blob, offset,
> +                                                      "sunxi,framebuffer");
> +       }
> +       if (offset < 0) {
> +               eprintf("Cannot setup simplefb: node not found\n");
> +               return;

return -ENODEV?

> +       }
> +
> +       ret = fdt_setup_simplefb_node(blob, offset, gd->fb_base,
> +                       graphic_device->winSizeX, graphic_device->winSizeY,
> +                       graphic_device->winSizeX * graphic_device->gdfBytesPP,
> +                       "x8r8g8b8");
> +       if (ret < 0)
> +               eprintf("Cannot setup simplefb: Error setting properties\n");

Can we return the error here? Maybe -EPERM or something like that.

> +}
> +#endif /* CONFIG_OF_BOARD_SETUP && CONFIG_VIDEO_DT_SIMPLEFB */
> diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h
> index 900ef52..d5d907b 100644
> --- a/include/configs/sunxi-common.h
> +++ b/include/configs/sunxi-common.h
> @@ -204,6 +204,9 @@
>   */
>  #define CONFIG_SUNXI_FB_SIZE (8 << 20)
>
> +/* Do we want to initialize a simple FB? */
> +#define CONFIG_VIDEO_DT_SIMPLEFB
> +
>  #define CONFIG_VIDEO_SUNXI
>
>  #define CONFIG_CFB_CONSOLE
> @@ -217,6 +220,11 @@
>
>  #define CONFIG_SYS_MEM_TOP_HIDE ((CONFIG_SUNXI_FB_SIZE + 0xFFF) & ~0xFFF)
>
> +/* To be able to hook simplefb into dt */
> +#ifdef CONFIG_VIDEO_DT_SIMPLEFB
> +#define CONFIG_OF_BOARD_SETUP
> +#endif
> +
>  #endif /* CONFIG_VIDEO */
>
>  /* Ethernet support */
> --
> 2.1.0
>

Regards,
Simon


More information about the U-Boot mailing list