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

Hi Simon,
On Fri, Dec 20, 2013 at 2:09 AM, Simon Glass sjg@chromium.org wrote:
Hi Ajay,
On 12 November 2013 05:27, Ajay Kumar ajaykumar.rs@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@samsung.com
Acked-by: Simon Glass sjg@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@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?
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@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Thanks and Regards, Ajay

Hi Ajay,
On 20 December 2013 02:04, Ajay kumar ajaynumb@gmail.com wrote:
Hi Simon,
On Fri, Dec 20, 2013 at 2:09 AM, Simon Glass sjg@chromium.org wrote:
Hi Ajay,
On 12 November 2013 05:27, Ajay Kumar ajaykumar.rs@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@samsung.com
Acked-by: Simon Glass sjg@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@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@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Thanks and Regards, Ajay
Regards, Simon
participants (2)
-
Ajay kumar
-
Simon Glass