[U-Boot] [PATCH] sunxi: setup simplefb for Allwinner DE2
Maxime Ripard
maxime.ripard at free-electrons.com
Tue May 9 20:29:20 UTC 2017
Hi Icenowy,
On Tue, May 09, 2017 at 03:23:58PM +0800, Icenowy Zheng wrote:
> As the support of EFI boot on Allwinner H3 is broken, we still need to
> use simplefb to pass the framebuffer to Linux.
>
> Add code to setup simplefb for Allwinner DE2 driver.
>
> Signed-off-by: Icenowy Zheng <icenowy at aosc.io>
> ---
> drivers/video/sunxi/sunxi_de2.c | 81 +++++++++++++++++++++++++++++++++++++++++
> include/configs/sunxi-common.h | 4 ++
> 2 files changed, 85 insertions(+)
>
> diff --git a/drivers/video/sunxi/sunxi_de2.c b/drivers/video/sunxi/sunxi_de2.c
> index 9a32c3a020..97e0513f04 100644
> --- a/drivers/video/sunxi/sunxi_de2.c
> +++ b/drivers/video/sunxi/sunxi_de2.c
> @@ -10,6 +10,8 @@
> #include <display.h>
> #include <dm.h>
> #include <edid.h>
> +#include <fdtdec.h>
> +#include <fdt_support.h>
> #include <video.h>
> #include <asm/global_data.h>
> #include <asm/io.h>
> @@ -256,3 +258,82 @@ U_BOOT_DRIVER(sunxi_de2) = {
> U_BOOT_DEVICE(sunxi_de2) = {
> .name = "sunxi_de2"
> };
> +
> +/*
> + * Simplefb support.
> + */
> +#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_VIDEO_DT_SIMPLEFB)
> +int sunxi_simplefb_setup(void *blob)
> +{
> + struct udevice *de2, *hdmi;
> + struct video_priv *de2_priv;
> + struct video_uc_platdata *de2_plat;
> + int mux;
> + int offset, ret;
> + u64 start, size;
> + const char *pipeline = NULL;
> +
> + debug("Setting up simplefb\n");
> +
> + if (IS_ENABLED(CONFIG_MACH_SUNXI_H3_H5))
> + mux = 0;
> + else
> + mux = 1;
> +
> + /* Skip simplefb setting if DE2 / HDMI is not present */
> + ret = uclass_find_device_by_name(UCLASS_VIDEO,
> + "sunxi_de2", &de2);
> + if (ret) {
> + debug("DE2 not present\n");
> + return 0;
> + }
> +
> + ret = uclass_find_device_by_name(UCLASS_DISPLAY,
> + "sunxi_dw_hdmi", &hdmi);
> + if (ret) {
> + debug("HDMI not present\n");
> + return 0;
> + }
> +
> + if (mux == 0)
> + pipeline = "mixer0-lcd0-hdmi";
> + else
> + pipeline = "mixer1-lcd1-hdmi";
> +
> + de2_priv = dev_get_uclass_priv(de2);
> + de2_plat = dev_get_uclass_platdata(de2);
> +
> + /* Find a prefilled simpefb node, matching out pipeline config */
> + offset = fdt_node_offset_by_compatible(blob, -1,
> + "allwinner,simple-framebuffer");
> + while (offset >= 0) {
> + ret = fdt_stringlist_search(blob, offset, "allwinner,pipeline",
> + pipeline);
> + if (ret == 0)
> + break;
> + offset = fdt_node_offset_by_compatible(blob, offset,
> + "allwinner,simple-framebuffer");
> + }
> + if (offset < 0) {
> + eprintf("Cannot setup simplefb: node not found\n");
> + return 0; /* Keep older kernels working */
> + }
> +
> + start = gd->bd->bi_dram[0].start;
> + size = de2_plat->base - start;
> + ret = fdt_fixup_memory_banks(blob, &start, &size, 1);
> + if (ret) {
> + eprintf("Cannot setup simplefb: Error reserving memory\n");
> + return ret;
> + }
> +
> + ret = fdt_setup_simplefb_node(blob, offset, de2_plat->base,
> + de2_priv->xsize, de2_priv->ysize,
> + (1 << de2_priv->bpix) / 8 * de2_priv->xsize,
> + "x8r8g8b8");
> + if (ret)
> + eprintf("Cannot setup simplefb: Error setting properties\n");
> +
> + return ret;
This looks very similar to sun4i's simplefb setup code. Can't it be
shared?
What is changing between the two, the compatible to check for?
Thanks!
Maxime
--
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170509/0ccec67f/attachment.sig>
More information about the U-Boot
mailing list