mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 02:34:01 +08:00
ARM: EXYNOS: Add MFC device tree support
This patch adds device tree entry for MFC v6 in the Exynos5 SoC. Makes the required changes in the clock files and adds MFC to the DT device list. Signed-off-by: Naveen Krishna Chatradhi <ch.naveen@samsung.com> Signed-off-by: Arun Kumar K <arun.kk@samsung.com> [kgene.kim@samsung.com: fixed section mismatches Seung-Woo Kim reported] Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
This commit is contained in:
parent
70191db930
commit
2eae613b95
23
Documentation/devicetree/bindings/media/s5p-mfc.txt
Normal file
23
Documentation/devicetree/bindings/media/s5p-mfc.txt
Normal file
@ -0,0 +1,23 @@
|
||||
* Samsung Multi Format Codec (MFC)
|
||||
|
||||
Multi Format Codec (MFC) is the IP present in Samsung SoCs which
|
||||
supports high resolution decoding and encoding functionalities.
|
||||
The MFC device driver is a v4l2 driver which can encode/decode
|
||||
video raw/elementary streams and has support for all popular
|
||||
video codecs.
|
||||
|
||||
Required properties:
|
||||
- compatible : value should be either one among the following
|
||||
(a) "samsung,mfc-v5" for MFC v5 present in Exynos4 SoCs
|
||||
(b) "samsung,mfc-v6" for MFC v6 present in Exynos5 SoCs
|
||||
|
||||
- reg : Physical base address of the IP registers and length of memory
|
||||
mapped region.
|
||||
|
||||
- interrupts : MFC interrupt number to the CPU.
|
||||
|
||||
- samsung,mfc-r : Base address of the first memory bank used by MFC
|
||||
for DMA contiguous memory allocation and its size.
|
||||
|
||||
- samsung,mfc-l : Base address of the second memory bank used by MFC
|
||||
for DMA contiguous memory allocation and its size.
|
@ -166,4 +166,9 @@
|
||||
spi_2: spi@12d40000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
codec@11000000 {
|
||||
samsung,mfc-r = <0x43000000 0x800000>;
|
||||
samsung,mfc-l = <0x51000000 0x800000>;
|
||||
};
|
||||
};
|
||||
|
@ -62,6 +62,12 @@
|
||||
interrupts = <0 42 0>;
|
||||
};
|
||||
|
||||
codec@11000000 {
|
||||
compatible = "samsung,mfc-v6";
|
||||
reg = <0x11000000 0x10000>;
|
||||
interrupts = <0 96 0>;
|
||||
};
|
||||
|
||||
rtc {
|
||||
compatible = "samsung,s3c6410-rtc";
|
||||
reg = <0x101E0000 0x100>;
|
||||
|
@ -63,6 +63,7 @@ config SOC_EXYNOS5250
|
||||
depends on ARCH_EXYNOS5
|
||||
select S5P_PM if PM
|
||||
select S5P_SLEEP if PM
|
||||
select S5P_DEV_MFC
|
||||
select SAMSUNG_DMADEV
|
||||
help
|
||||
Enable EXYNOS5250 SoC support
|
||||
|
@ -664,7 +664,7 @@ static struct clk exynos5_init_clocks_off[] = {
|
||||
.ctrlbit = (1 << 25),
|
||||
}, {
|
||||
.name = "mfc",
|
||||
.devname = "s5p-mfc",
|
||||
.devname = "s5p-mfc-v6",
|
||||
.enable = exynos5_clk_ip_mfc_ctrl,
|
||||
.ctrlbit = (1 << 0),
|
||||
}, {
|
||||
|
@ -11,6 +11,8 @@
|
||||
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/of_fdt.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/hardware/gic.h>
|
||||
@ -18,6 +20,7 @@
|
||||
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/regs-serial.h>
|
||||
#include <plat/mfc.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
@ -72,6 +75,7 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
|
||||
"exynos-gsc.2", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos5-gsc", EXYNOS5_PA_GSC3,
|
||||
"exynos-gsc.3", NULL),
|
||||
OF_DEV_AUXDATA("samsung,mfc-v6", 0x11000000, "s5p-mfc-v6", NULL),
|
||||
{},
|
||||
};
|
||||
|
||||
@ -92,6 +96,17 @@ static char const *exynos5250_dt_compat[] __initdata = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static void __init exynos5_reserve(void)
|
||||
{
|
||||
struct s5p_mfc_dt_meminfo mfc_mem;
|
||||
|
||||
/* Reserve memory for MFC only if it's available */
|
||||
mfc_mem.compatible = "samsung,mfc-v6";
|
||||
if (of_scan_flat_dt(s5p_fdt_find_mfc_mem, &mfc_mem))
|
||||
s5p_mfc_reserve_mem(mfc_mem.roff, mfc_mem.rsize, mfc_mem.loff,
|
||||
mfc_mem.lsize);
|
||||
}
|
||||
|
||||
DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)")
|
||||
/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
|
||||
.init_irq = exynos5_init_irq,
|
||||
@ -103,4 +118,5 @@ DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)")
|
||||
.timer = &exynos4_timer,
|
||||
.dt_compat = exynos5250_dt_compat,
|
||||
.restart = exynos5_restart,
|
||||
.reserve = exynos5_reserve,
|
||||
MACHINE_END
|
||||
|
@ -933,6 +933,7 @@ struct platform_device s5p_device_mfc_r = {
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
},
|
||||
};
|
||||
|
||||
#endif /* CONFIG_S5P_DEV_MFC */
|
||||
|
||||
/* MIPI CSIS */
|
||||
|
@ -10,6 +10,14 @@
|
||||
#ifndef __PLAT_SAMSUNG_MFC_H
|
||||
#define __PLAT_SAMSUNG_MFC_H __FILE__
|
||||
|
||||
struct s5p_mfc_dt_meminfo {
|
||||
unsigned long loff;
|
||||
unsigned long lsize;
|
||||
unsigned long roff;
|
||||
unsigned long rsize;
|
||||
char *compatible;
|
||||
};
|
||||
|
||||
/**
|
||||
* s5p_mfc_reserve_mem - function to early reserve memory for MFC driver
|
||||
* @rbase: base address for MFC 'right' memory interface
|
||||
@ -24,4 +32,7 @@
|
||||
void __init s5p_mfc_reserve_mem(phys_addr_t rbase, unsigned int rsize,
|
||||
phys_addr_t lbase, unsigned int lsize);
|
||||
|
||||
int __init s5p_fdt_find_mfc_mem(unsigned long node, const char *uname,
|
||||
int depth, void *data);
|
||||
|
||||
#endif /* __PLAT_SAMSUNG_MFC_H */
|
||||
|
@ -14,6 +14,8 @@
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/of_fdt.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#include <mach/map.h>
|
||||
#include <plat/devs.h>
|
||||
@ -69,3 +71,35 @@ static int __init s5p_mfc_memory_init(void)
|
||||
return 0;
|
||||
}
|
||||
device_initcall(s5p_mfc_memory_init);
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
int __init s5p_fdt_find_mfc_mem(unsigned long node, const char *uname,
|
||||
int depth, void *data)
|
||||
{
|
||||
__be32 *prop;
|
||||
unsigned long len;
|
||||
struct s5p_mfc_dt_meminfo *mfc_mem = data;
|
||||
|
||||
if (!data)
|
||||
return 0;
|
||||
|
||||
if (!of_flat_dt_is_compatible(node, mfc_mem->compatible))
|
||||
return 0;
|
||||
|
||||
prop = of_get_flat_dt_prop(node, "samsung,mfc-l", &len);
|
||||
if (!prop || (len != 2 * sizeof(unsigned long)))
|
||||
return 0;
|
||||
|
||||
mfc_mem->loff = be32_to_cpu(prop[0]);
|
||||
mfc_mem->lsize = be32_to_cpu(prop[1]);
|
||||
|
||||
prop = of_get_flat_dt_prop(node, "samsung,mfc-r", &len);
|
||||
if (!prop || (len != 2 * sizeof(unsigned long)))
|
||||
return 0;
|
||||
|
||||
mfc_mem->roff = be32_to_cpu(prop[0]);
|
||||
mfc_mem->rsize = be32_to_cpu(prop[1]);
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user