[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