diff options
Diffstat (limited to 'arch/arm/mach-imx/mach-imx6q.c')
-rw-r--r-- | arch/arm/mach-imx/mach-imx6q.c | 111 |
1 files changed, 110 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 240fad03927..940a91e9bb6 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c @@ -17,27 +17,136 @@ #include <linux/of_irq.h> #include <linux/of_platform.h> #include <linux/dma-mapping.h> +#include <linux/iram_alloc.h> #include <asm/hardware/cache-l2x0.h> #include <asm/hardware/gic.h> #include <asm/mach/arch.h> #include <asm/mach/time.h> #include <mach/common.h> #include <mach/hardware.h> +#include <mach/ipu-v3.h> +#include <mach/mxc_vpu.h> +#include <mach/iomux-mx6q.h> + +static iomux_v3_cfg_t mx6q_sabr_pads[] = { + /* DISPLAY */ + MX6Q_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK, + MX6Q_PAD_DI0_PIN15__IPU1_DI0_PIN15, + MX6Q_PAD_DI0_PIN2__IPU1_DI0_PIN2, + MX6Q_PAD_DI0_PIN3__IPU1_DI0_PIN3, + MX6Q_PAD_DISP0_DAT0__IPU1_DISP0_DAT_0, + MX6Q_PAD_DISP0_DAT1__IPU1_DISP0_DAT_1, + MX6Q_PAD_DISP0_DAT2__IPU1_DISP0_DAT_2, + MX6Q_PAD_DISP0_DAT3__IPU1_DISP0_DAT_3, + MX6Q_PAD_DISP0_DAT4__IPU1_DISP0_DAT_4, + MX6Q_PAD_DISP0_DAT5__IPU1_DISP0_DAT_5, + MX6Q_PAD_DISP0_DAT6__IPU1_DISP0_DAT_6, + MX6Q_PAD_DISP0_DAT7__IPU1_DISP0_DAT_7, + MX6Q_PAD_DISP0_DAT8__IPU1_DISP0_DAT_8, + MX6Q_PAD_DISP0_DAT9__IPU1_DISP0_DAT_9, + MX6Q_PAD_DISP0_DAT10__IPU1_DISP0_DAT_10, + MX6Q_PAD_DISP0_DAT11__IPU1_DISP0_DAT_11, + MX6Q_PAD_DISP0_DAT12__IPU1_DISP0_DAT_12, + MX6Q_PAD_DISP0_DAT13__IPU1_DISP0_DAT_13, + MX6Q_PAD_DISP0_DAT14__IPU1_DISP0_DAT_14, + MX6Q_PAD_DISP0_DAT15__IPU1_DISP0_DAT_15, + MX6Q_PAD_DISP0_DAT16__IPU1_DISP0_DAT_16, + MX6Q_PAD_DISP0_DAT17__IPU1_DISP0_DAT_17, + MX6Q_PAD_DISP0_DAT18__IPU1_DISP0_DAT_18, + MX6Q_PAD_DISP0_DAT19__IPU1_DISP0_DAT_19, + MX6Q_PAD_DISP0_DAT20__IPU1_DISP0_DAT_20, + MX6Q_PAD_DISP0_DAT21__IPU1_DISP0_DAT_21, + MX6Q_PAD_DISP0_DAT22__IPU1_DISP0_DAT_22, + MX6Q_PAD_DISP0_DAT23__IPU1_DISP0_DAT_23, + /* PWM1 */ + MX6Q_PAD_SD1_CMD__PWM4_PWMO, + /* I2C2 */ + MX6Q_PAD_KEY_COL3__I2C2_SCL, + MX6Q_PAD_KEY_ROW3__I2C2_SDA, + /* GPIO */ + MX6Q_PAD_NANDF_D0__GPIO_2_0, + MX6Q_PAD_EIM_D23__GPIO_3_23, +}; + +static int mx6q_ipuv3_init(int id) +{ + imx_reset_ipu(id); + return 0; +} + +static void mx6q_ipuv3_pg(int enable) +{ + /*TODO*/ +} + +static struct imx_ipuv3_platform_data ipuv3_pdata = { + .rev = 4, + .init = mx6q_ipuv3_init, + .pg = mx6q_ipuv3_pg, +}; + +static void mx6q_vpu_reset(void) +{ + imx_reset_vpu(); +} + +static struct mxc_vpu_platform_data vpu_pdata = { + .iram_enable = true, + .iram_size = 0x21000, + .reset = mx6q_vpu_reset, +}; + +static const struct of_dev_auxdata imx6q_auxdata_lookup[] __initconst = { + OF_DEV_AUXDATA("fsl,ipuv3", MX6Q_IPU1_BASE_ADDR, "imx-ipuv3.0", &ipuv3_pdata), + OF_DEV_AUXDATA("fsl,ipuv3", MX6Q_IPU2_BASE_ADDR, "imx-ipuv3.1", &ipuv3_pdata), + OF_DEV_AUXDATA("fsl,vpu", MX6Q_VPU_BASE_ADDR, "mxc_vpu.0", &vpu_pdata), +}; static void __init imx6q_init_machine(void) { - of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); + mxc_iomux_v3_setup_multiple_pads(mx6q_sabr_pads, + ARRAY_SIZE(mx6q_sabr_pads)); + + iram_init(MX6Q_IRAM_BASE_ADDR, MX6Q_IRAM_SIZE); + + of_platform_populate(NULL, of_default_bus_match_table, imx6q_auxdata_lookup, NULL); imx6q_pm_init(); } +#include <linux/init.h> +#include <asm/page.h> +#include <asm/sizes.h> +#include <asm/mach/map.h> +#include <mach/hardware.h> +void __iomem *iomux_base; +static struct map_desc imx_mx6q_fix_desc[] = { + { + .virtual = MX6Q_IO_P2V(MX6Q_IOMUXC_BASE_ADDR), + .pfn = __phys_to_pfn(MX6Q_IOMUXC_BASE_ADDR), + .length = MX6Q_IOMUXC_SIZE, + .type = MT_DEVICE, + }, +}; + +void __init mx6q_fix_map_io(void) +{ + iotable_init(imx_mx6q_fix_desc, ARRAY_SIZE(imx_mx6q_fix_desc)); + iomux_base = (void __iomem *)MX6Q_IO_P2V(MX6Q_IOMUXC_BASE_ADDR); + mxc_iomux_v3_init(iomux_base); +} + static void __init imx6q_map_io(void) { + mx6q_fix_map_io(); imx_lluart_map_io(); imx_scu_map_io(); imx6q_clock_map_io(); init_consistent_dma_size(SZ_64M); + + if (!system_rev) + system_rev = 0x63000; } static void __init imx6q_gpio_add_irq_domain(struct device_node *np, |