[U-Boot] [PATCH V2 4/7] video: exynos_fimd: Add framework to disable FIMD sysmmu

Simon Glass sjg at chromium.org
Fri Dec 20 17:27:46 CET 2013


Hi Ajay,

On 20 December 2013 02:04, Ajay kumar <ajaynumb at gmail.com> wrote:
>
>
>> Hi Simon,
>>
>>
>> On Fri, Dec 20, 2013 at 2:09 AM, Simon Glass <sjg at chromium.org> wrote:
>>>
>>> Hi Ajay,
>>>
>>> On 12 November 2013 05:27, Ajay Kumar <ajaykumar.rs at samsung.com> wrote:
>>> > On Exynos5420 and newer versions, the FIMD sysmmus are in
>>> > "on state" by default.
>>> > We have to disable them in order to make FIMD DMA work.
>>> > This patch adds the required framework to exynos_fimd driver,
>>> > and disables FIMD sysmmu on Exynos5420.
>>> >
>>> > Signed-off-by: Ajay Kumar <ajaykumar.rs at samsung.com>
>>>
>>> Acked-by: Simon Glass <sjg at chromium.org>
>>>
>>> See a nit below if you re-issue this series.
>>>
>>> > ---
>>> >  arch/arm/dts/exynos5420.dtsi                 |  7 +++++++
>>> >  doc/device-tree-bindings/video/exynos-fb.txt |  4 ++++
>>> >  drivers/video/exynos_fimd.c                  | 24
>>> > ++++++++++++++++++++++++
>>> >  3 files changed, 35 insertions(+)
>>> >
>>> > diff --git a/arch/arm/dts/exynos5420.dtsi
>>> > b/arch/arm/dts/exynos5420.dtsi
>>> > index ca6c605..7443953 100644
>>> > --- a/arch/arm/dts/exynos5420.dtsi
>>> > +++ b/arch/arm/dts/exynos5420.dtsi
>>> > @@ -71,4 +71,11 @@
>>> >                 reg = <0x12E20000 0x100>;
>>> >                 interrupts = <0 203 0>;
>>> >         };
>>> > +
>>> > +       fimd at 14400000 {
>>> > +               /* sysmmu is not used in U-Boot */
>>> > +               samsung,disable-sysmmu;
>>> > +               samsung,sysmmu-fimdm0 = <0x14640000>;
>>> > +               samsung,sysmmu-fimdm1 = <0x14680000>;
>>> > +       };
>>> >  };
>>> > diff --git a/doc/device-tree-bindings/video/exynos-fb.txt
>>> > b/doc/device-tree-bindings/video/exynos-fb.txt
>>> > index bb7441c..9ba2c47 100644
>>> > --- a/doc/device-tree-bindings/video/exynos-fb.txt
>>> > +++ b/doc/device-tree-bindings/video/exynos-fb.txt
>>> > @@ -55,6 +55,10 @@ Board(panel specific):
>>> >         samsung,pclk-name: parent clock identifier: 1(MPLL), 2(EPLL),
>>> > 3(VPLL)
>>> >         samsung,sclk-div: parent_clock/source_clock ratio
>>> >         samsung,dual-lcd-enabled: 1 if you support two LCD, else 0
>>> > +       samsung,disable-sysmmu: present if you want to disable the
>>> > sysmmu
>>> > +                       (needed for Exynos5420 and newer versions)
>>> > +       samsung,sysmmu-fimdm0: Address of sysmmufimdm0 MMU_CTRL
>>> > +       samsung,sysmmu-fimdm1: Address of sysmmufimdm1 MMU_CTRL
>>>
>>> Is this a kernel binding?
>>>
>> No. In kernel, we have DT nodes for FIMD symmus as well.
>> How about creating FIMD sysmmu nodes in u-boot as well and use them inside
>> exynos_fimd.c, rather than giving the sysmmu base addresses as a FIMD DT
>> property?

That does seem better. We should be careful about creating new
bindings that don't exist in the kernel.

>>>
>>> >
>>> >  Example:
>>> >  SOC specific part:
>>> > diff --git a/drivers/video/exynos_fimd.c b/drivers/video/exynos_fimd.c
>>> > index f962c4f..bffc8fa 100644
>>> > --- a/drivers/video/exynos_fimd.c
>>> > +++ b/drivers/video/exynos_fimd.c
>>> > @@ -257,6 +257,7 @@ void exynos_fimd_lcd_init(vidinfo_t *vid)
>>> >         unsigned int offset;
>>> >  #ifdef CONFIG_OF_CONTROL
>>> >         unsigned int node;
>>> > +       u32 *sysmmufimdm0, *sysmmufimdm1;
>>> >
>>> >         node = fdtdec_next_compatible(gd->fdt_blob,
>>> >                                         0, COMPAT_SAMSUNG_EXYNOS_FIMD);
>>> > @@ -267,6 +268,29 @@ void exynos_fimd_lcd_init(vidinfo_t *vid)
>>> >                                                                 node,
>>> > "reg");
>>> >         if (fimd_ctrl == NULL)
>>> >                 debug("Can't get the FIMD base address\n");
>>> > +
>>> > +       if (fdtdec_get_bool(gd->fdt_blob, node,
>>> > "samsung,disable-sysmmu")) {
>>> > +               /*
>>> > +               * The reset value for FIMD SYSMMU register MMU_CTRL is
>>> > 3
>>> > +               * on Exynos5420 and newer versions.
>>> > +               * This means FIMD SYSMMU is on by default on Exynos5420
>>> > +               * and newer versions.
>>> > +               * Since in u-boot we don't use SYSMMU, we should
>>> > disable
>>> > +               * those FIMD SYSMMU.
>>> > +               */
>>> > +               sysmmufimdm0 = (u32 *)fdtdec_get_int(gd->fdt_blob,
>>> > node,
>>> > +
>>> > "samsung,sysmmu-fimdm0", 0);
>>>
>>> fdtdec_get_addr() might be better.
>>>
>>>
>>> > +               if (!sysmmufimdm0)
>>> > +                       debug("Can't get sysmmufimdm0");
>>> > +
>>> > +               sysmmufimdm1 = (u32 *)fdtdec_get_int(gd->fdt_blob,
>>> > node,
>>> > +
>>> > "samsung,sysmmu-fimdm1", 0);
>>> > +               if (!sysmmufimdm1)
>>> > +                       debug("Can't get sysmmufimdm1");
>>> > +
>>> > +               writel(0x0, sysmmufimdm0);
>>> > +               writel(0x0, sysmmufimdm1);
>>> > +       }
>>> >  #else
>>> >         fimd_ctrl = (struct exynos_fb *)samsung_get_base_fimd();
>>> >  #endif
>>> > --
>>> > 1.7.12.4
>>> >
>>>
>>> Regards,
>>> Simon
>>> _______________________________________________
>>> U-Boot mailing list
>>> U-Boot at lists.denx.de
>>> http://lists.denx.de/mailman/listinfo/u-boot
>>
>>
>>
>> Thanks and Regards,
>> Ajay
>>
>

Regards,
Simon


More information about the U-Boot mailing list