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...@samsung.com> --- 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@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 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); + 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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot