
On Exynos5420, 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 to disable FIMD sysmmu on Exynos5420.
Signed-off-by: Ajay Kumar ajaykumar.rs@samsung.com --- arch/arm/dts/exynos5420.dtsi | 5 +++++ doc/device-tree-bindings/video/exynos-fb.txt | 2 ++ drivers/video/exynos_fimd.c | 12 ++++++++++++ 3 files changed, 19 insertions(+)
diff --git a/arch/arm/dts/exynos5420.dtsi b/arch/arm/dts/exynos5420.dtsi index ca6c605..2d64df8 100644 --- a/arch/arm/dts/exynos5420.dtsi +++ b/arch/arm/dts/exynos5420.dtsi @@ -71,4 +71,9 @@ reg = <0x12E20000 0x100>; interrupts = <0 203 0>; }; + + fimd@14400000 { + /* sysmmu is not used in U-Boot */ + samsung,disable-sysmmu; + }; }; diff --git a/doc/device-tree-bindings/video/exynos-fb.txt b/doc/device-tree-bindings/video/exynos-fb.txt index bb7441c..cddb505 100644 --- a/doc/device-tree-bindings/video/exynos-fb.txt +++ b/doc/device-tree-bindings/video/exynos-fb.txt @@ -55,6 +55,8 @@ 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)
Example: SOC specific part: diff --git a/drivers/video/exynos_fimd.c b/drivers/video/exynos_fimd.c index 8c2de4e..410fff1 100644 --- a/drivers/video/exynos_fimd.c +++ b/drivers/video/exynos_fimd.c @@ -267,6 +267,18 @@ 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 registers + * MMU_CTRL:0x14640000 and MMU_CTRL:0x14680000 is 3. + * This means FIMD SYSMMU is on by default on Exynos5420. + * Since in u-boot we don't use SYSMMU, we are disabling + * FIMD SYSMMU. + */ + writel(0x0, 0x14640000); + writel(0x0, 0x14680000); + } #else fimd_ctrl = (struct exynos_fb *)samsung_get_base_fimd(); #endif