diff options
Diffstat (limited to 'arch/arm/include')
27 files changed, 1330 insertions, 40 deletions
| diff --git a/arch/arm/include/asm/arch-exynos/clk.h b/arch/arm/include/asm/arch-exynos/clk.h index 552902573..cd1232350 100644 --- a/arch/arm/include/asm/arch-exynos/clk.h +++ b/arch/arm/include/asm/arch-exynos/clk.h @@ -38,5 +38,9 @@ void set_mmc_clk(int dev_index, unsigned int div);  unsigned long get_lcd_clk(void);  void set_lcd_clk(void);  void set_mipi_clk(void); +void set_i2s_clk_source(void); +int set_i2s_clk_prescaler(unsigned int src_frq, unsigned int dst_frq); +int set_epll_clk(unsigned long rate); +int set_spi_clk(int periph_id, unsigned int rate);  #endif diff --git a/arch/arm/include/asm/arch-exynos/clock.h b/arch/arm/include/asm/arch-exynos/clock.h index fce38efbb..ff6781aae 100644 --- a/arch/arm/include/asm/arch-exynos/clock.h +++ b/arch/arm/include/asm/arch-exynos/clock.h @@ -595,9 +595,38 @@ struct exynos5_clock {  	unsigned int	pll_div2_sel;  	unsigned char	res123[0xf5d8];  }; + +/* structure for epll configuration used in audio clock configuration */ +struct set_epll_con_val { +	unsigned int freq_out;		/* frequency out */ +	unsigned int en_lock_det;	/* enable lock detect */ +	unsigned int m_div;		/* m divider value */ +	unsigned int p_div;		/* p divider value */ +	unsigned int s_div;		/* s divider value */ +	unsigned int k_dsm;		/* k value of delta signal modulator */ +};  #endif  #define MPLL_FOUT_SEL_SHIFT	4 +#define EXYNOS5_EPLLCON0_LOCKED_SHIFT	29  /* EPLL Locked bit position*/ +#define TIMEOUT_EPLL_LOCK		1000 + +#define AUDIO_0_RATIO_MASK		0x0f +#define AUDIO_1_RATIO_MASK		0x0f + +#define AUDIO1_SEL_MASK			0xf +#define CLK_SRC_SCLK_EPLL		0x7 + +/* CON0 bit-fields */ +#define EPLL_CON0_MDIV_MASK		0x1ff +#define EPLL_CON0_PDIV_MASK		0x3f +#define EPLL_CON0_SDIV_MASK		0x7 +#define EPLL_CON0_MDIV_SHIFT		16 +#define EPLL_CON0_PDIV_SHIFT		8 +#define EPLL_CON0_SDIV_SHIFT		0 +#define EPLL_CON0_LOCK_DET_EN_SHIFT	28 +#define EPLL_CON0_LOCK_DET_EN_MASK	1 +  #define MPLL_FOUT_SEL_MASK	0x1  #define BPLL_FOUT_SEL_SHIFT	0  #define BPLL_FOUT_SEL_MASK	0x1 diff --git a/arch/arm/include/asm/arch-exynos/cpu.h b/arch/arm/include/asm/arch-exynos/cpu.h index 2cd4ae152..d1b2ea802 100644 --- a/arch/arm/include/asm/arch-exynos/cpu.h +++ b/arch/arm/include/asm/arch-exynos/cpu.h @@ -51,12 +51,15 @@  #define EXYNOS4_UART_BASE		0x13800000  #define EXYNOS4_I2C_BASE		0x13860000  #define EXYNOS4_ADC_BASE		0x13910000 +#define EXYNOS4_SPI_BASE		0x13920000  #define EXYNOS4_PWMTIMER_BASE		0x139D0000  #define EXYNOS4_MODEM_BASE		0x13A00000  #define EXYNOS4_USBPHY_CONTROL		0x10020704 +#define EXYNOS4_I2S_BASE		0xE2100000  #define EXYNOS4_GPIO_PART4_BASE		DEVICE_NOT_AVAILABLE  #define EXYNOS4_DP_BASE			DEVICE_NOT_AVAILABLE +#define EXYNOS4_SPI_ISP_BASE		DEVICE_NOT_AVAILABLE  /* EXYNOS5 */  #define EXYNOS5_I2C_SPACING		0x10000 @@ -81,7 +84,10 @@  #define EXYNOS5_SROMC_BASE		0x12250000  #define EXYNOS5_UART_BASE		0x12C00000  #define EXYNOS5_I2C_BASE		0x12C60000 +#define EXYNOS5_SPI_BASE		0x12D20000 +#define EXYNOS5_I2S_BASE		0x12D60000  #define EXYNOS5_PWMTIMER_BASE		0x12DD0000 +#define EXYNOS5_SPI_ISP_BASE		0x131A0000  #define EXYNOS5_GPIO_PART2_BASE		0x13400000  #define EXYNOS5_FIMD_BASE		0x14400000  #define EXYNOS5_DP_BASE			0x145B0000 @@ -139,6 +145,15 @@ static inline int cpu_is_##type(void)			\  IS_SAMSUNG_TYPE(exynos4, 0x4)  IS_SAMSUNG_TYPE(exynos5, 0x5) +#define IS_EXYNOS_TYPE(type, id)			\ +static inline int proid_is_##type(void)			\ +{							\ +	return s5p_cpu_id == id;			\ +} + +IS_EXYNOS_TYPE(exynos4210, 0x4210) +IS_EXYNOS_TYPE(exynos5250, 0x5250) +  #define SAMSUNG_BASE(device, base)				\  static inline unsigned int samsung_get_base_##device(void)	\  {								\ @@ -156,6 +171,7 @@ SAMSUNG_BASE(dp, DP_BASE)  SAMSUNG_BASE(sysreg, SYSREG_BASE)  SAMSUNG_BASE(fimd, FIMD_BASE)  SAMSUNG_BASE(i2c, I2C_BASE) +SAMSUNG_BASE(i2s, I2S_BASE)  SAMSUNG_BASE(mipi_dsim, MIPI_DSIM_BASE)  SAMSUNG_BASE(gpio_part1, GPIO_PART1_BASE)  SAMSUNG_BASE(gpio_part2, GPIO_PART2_BASE) @@ -173,6 +189,8 @@ SAMSUNG_BASE(usb_ehci, USB_HOST_EHCI_BASE)  SAMSUNG_BASE(usb_otg, USBOTG_BASE)  SAMSUNG_BASE(watchdog, WATCHDOG_BASE)  SAMSUNG_BASE(power, POWER_BASE) +SAMSUNG_BASE(spi, SPI_BASE) +SAMSUNG_BASE(spi_isp, SPI_ISP_BASE)  #endif  #endif	/* _EXYNOS4_CPU_H */ diff --git a/arch/arm/include/asm/arch-exynos/gpio.h b/arch/arm/include/asm/arch-exynos/gpio.h index 97be4eac0..4db8fd640 100644 --- a/arch/arm/include/asm/arch-exynos/gpio.h +++ b/arch/arm/include/asm/arch-exynos/gpio.h @@ -207,6 +207,25 @@ static inline unsigned int s5p_gpio_base(int nr)  	return 0;  } +static inline unsigned int s5p_gpio_part_max(int nr) +{ +	if (cpu_is_exynos5()) { +		if (nr < EXYNOS5_GPIO_PART1_MAX) +			return 0; +		else if (nr < EXYNOS5_GPIO_PART2_MAX) +			return EXYNOS5_GPIO_PART1_MAX; +		else +			return EXYNOS5_GPIO_PART2_MAX; + +	} else if (cpu_is_exynos4()) { +		if (nr < EXYNOS4_GPIO_PART1_MAX) +			return 0; +		else +			return EXYNOS4_GPIO_PART1_MAX; +	} + +	return 0; +}  #endif  /* Pin configurations */ diff --git a/arch/arm/include/asm/arch-exynos/i2s-regs.h b/arch/arm/include/asm/arch-exynos/i2s-regs.h new file mode 100644 index 000000000..2326ca036 --- /dev/null +++ b/arch/arm/include/asm/arch-exynos/i2s-regs.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2012 Samsung Electronics + * R. Chandrasekar <rcsekar@samsung.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef __I2S_REGS_H__ +#define __I2S_REGS_H__ + +#define CON_TXFIFO_FULL		(1 << 8) +#define CON_TXCH_PAUSE		(1 << 4) +#define CON_ACTIVE		(1 << 0) + +#define MOD_BLCP_SHIFT		24 +#define MOD_BLCP_16BIT		(0 << MOD_BLCP_SHIFT) +#define MOD_BLCP_8BIT		(1 << MOD_BLCP_SHIFT) +#define MOD_BLCP_24BIT		(2 << MOD_BLCP_SHIFT) +#define MOD_BLCP_MASK		(3 << MOD_BLCP_SHIFT) + +#define MOD_BLC_16BIT		(0 << 13) +#define MOD_BLC_8BIT		(1 << 13) +#define MOD_BLC_24BIT		(2 << 13) +#define MOD_BLC_MASK		(3 << 13) + +#define MOD_SLAVE		(1 << 11) +#define MOD_MASK		(3 << 8) +#define MOD_LR_LLOW		(0 << 7) +#define MOD_LR_RLOW		(1 << 7) +#define MOD_SDF_IIS		(0 << 5) +#define MOD_SDF_MSB		(1 << 5) +#define MOD_SDF_LSB		(2 << 5) +#define MOD_SDF_MASK		(3 << 5) +#define MOD_RCLK_256FS		(0 << 3) +#define MOD_RCLK_512FS		(1 << 3) +#define MOD_RCLK_384FS		(2 << 3) +#define MOD_RCLK_768FS		(3 << 3) +#define MOD_RCLK_MASK		(3 << 3) +#define MOD_BCLK_32FS		(0 << 1) +#define MOD_BCLK_48FS		(1 << 1) +#define MOD_BCLK_16FS		(2 << 1) +#define MOD_BCLK_24FS		(3 << 1) +#define MOD_BCLK_MASK		(3 << 1) + +#define MOD_CDCLKCON		(1 << 12) + +#define FIC_TXFLUSH		(1 << 15) +#define FIC_RXFLUSH		(1 << 7) + +#endif /* __I2S_REGS_H__ */ diff --git a/arch/arm/include/asm/arch-exynos/periph.h b/arch/arm/include/asm/arch-exynos/periph.h index b861d7d58..13abd2d70 100644 --- a/arch/arm/include/asm/arch-exynos/periph.h +++ b/arch/arm/include/asm/arch-exynos/periph.h @@ -38,11 +38,18 @@ enum periph_id {  	PERIPH_ID_I2C5,  	PERIPH_ID_I2C6,  	PERIPH_ID_I2C7, +	PERIPH_ID_I2S1,  	PERIPH_ID_SDMMC0,  	PERIPH_ID_SDMMC1,  	PERIPH_ID_SDMMC2,  	PERIPH_ID_SDMMC3, +	PERIPH_ID_SDMMC4,  	PERIPH_ID_SROMC, +	PERIPH_ID_SPI0, +	PERIPH_ID_SPI1, +	PERIPH_ID_SPI2, +	PERIPH_ID_SPI3, +	PERIPH_ID_SPI4,  	PERIPH_ID_UART0,  	PERIPH_ID_UART1,  	PERIPH_ID_UART2, diff --git a/arch/arm/include/asm/arch-exynos/sound.h b/arch/arm/include/asm/arch-exynos/sound.h new file mode 100644 index 000000000..d1bd2f696 --- /dev/null +++ b/arch/arm/include/asm/arch-exynos/sound.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2012 Samsung Electronics + * Rajeshwari Shinde <rajeshwari.s@samsung.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + + +#ifndef __SOUND_ARCH_H__ +#define __SOUND_ARCH_H__ + +/* I2S values */ +#define I2S_PLL_CLK		192000000 +#define I2S_SAMPLING_RATE	48000 +#define I2S_BITS_PER_SAMPLE	16 +#define I2S_CHANNELS		2 +#define I2S_RFS			256 +#define I2S_BFS			32 + +/* I2C values */ +#define AUDIO_I2C_BUS		1 +#define AUDIO_I2C_REG		0x1a + +/* Audio Codec */ +#define AUDIO_CODEC		"wm8994" + +#define AUDIO_COMPAT		1 +#endif diff --git a/arch/arm/include/asm/arch-exynos/spi.h b/arch/arm/include/asm/arch-exynos/spi.h new file mode 100644 index 000000000..7cab1e991 --- /dev/null +++ b/arch/arm/include/asm/arch-exynos/spi.h @@ -0,0 +1,78 @@ +/* + * (C) Copyright 2012 SAMSUNG Electronics + * Padmavathi Venna <padma.v@samsung.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + +#ifndef __ASM_ARCH_EXYNOS_COMMON_SPI_H_ +#define __ASM_ARCH_EXYNOS_COMMON_SPI_H_ + +#ifndef __ASSEMBLY__ + +/* SPI peripheral register map; padded to 64KB */ +struct exynos_spi { +	unsigned int		ch_cfg;		/* 0x00 */ +	unsigned char		reserved0[4]; +	unsigned int		mode_cfg;	/* 0x08 */ +	unsigned int		cs_reg;		/* 0x0c */ +	unsigned char		reserved1[4]; +	unsigned int		spi_sts;	/* 0x14 */ +	unsigned int		tx_data;	/* 0x18 */ +	unsigned int		rx_data;	/* 0x1c */ +	unsigned int		pkt_cnt;	/* 0x20 */ +	unsigned char		reserved2[4]; +	unsigned char		reserved3[4]; +	unsigned int		fb_clk;		/* 0x2c */ +	unsigned char		padding[0xffd0]; +}; + +#define EXYNOS_SPI_MAX_FREQ	50000000 + +#define SPI_TIMEOUT_MS		10 + +/* SPI_CHCFG */ +#define SPI_CH_HS_EN		(1 << 6) +#define SPI_CH_RST		(1 << 5) +#define SPI_SLAVE_MODE		(1 << 4) +#define SPI_CH_CPOL_L		(1 << 3) +#define SPI_CH_CPHA_B		(1 << 2) +#define SPI_RX_CH_ON		(1 << 1) +#define SPI_TX_CH_ON		(1 << 0) + +/* SPI_MODECFG */ +#define SPI_MODE_CH_WIDTH_WORD	(0x2 << 29) +#define SPI_MODE_BUS_WIDTH_WORD	(0x2 << 17) + +/* SPI_CSREG */ +#define SPI_SLAVE_SIG_INACT	(1 << 0) + +/* SPI_STS */ +#define SPI_ST_TX_DONE		(1 << 25) +#define SPI_FIFO_LVL_MASK	0x1ff +#define SPI_TX_LVL_OFFSET	6 +#define SPI_RX_LVL_OFFSET	15 + +/* Feedback Delay */ +#define SPI_CLK_BYPASS		(0 << 0) +#define SPI_FB_DELAY_90		(1 << 0) +#define SPI_FB_DELAY_180	(2 << 0) +#define SPI_FB_DELAY_270	(3 << 0) + +/* Packet Count */ +#define SPI_PACKET_CNT_EN	(1 << 16) + +#endif /* __ASSEMBLY__ */ +#endif diff --git a/arch/arm/include/asm/arch-mx25/imx-regs.h b/arch/arm/include/asm/arch-mx25/imx-regs.h index 53aafe307..5f4b54382 100644 --- a/arch/arm/include/asm/arch-mx25/imx-regs.h +++ b/arch/arm/include/asm/arch-mx25/imx-regs.h @@ -36,10 +36,6 @@  #if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))  #include <asm/types.h> -#ifdef CONFIG_FEC_MXC -extern void mx25_fec_init_pins(void); -#endif -  /* Clock Control Module (CCM) registers */  struct ccm_regs {  	u32 mpctl;	/* Core PLL Control */ @@ -245,6 +241,7 @@ struct aips_regs {  #define IMX_RTIC_BASE		(0x53FEC000)  #define IMX_IIM_BASE		(0x53FF0000)  #define IMX_USB_BASE		(0x53FF4000) +#define IMX_USB_PORT_OFFSET	0x200  #define IMX_CSI_BASE		(0x53FF8000)  #define IMX_DRYICE_BASE		(0x53FFC000) diff --git a/arch/arm/include/asm/arch-mx25/sys_proto.h b/arch/arm/include/asm/arch-mx25/sys_proto.h index 6a01a7b04..46db341e8 100644 --- a/arch/arm/include/asm/arch-mx25/sys_proto.h +++ b/arch/arm/include/asm/arch-mx25/sys_proto.h @@ -25,5 +25,8 @@  #define _SYS_PROTO_H_  void mx25_uart1_init_pins(void); +#if defined CONFIG_FEC_MXC +extern void mx25_fec_init_pins(void); +#endif  #endif diff --git a/arch/arm/include/asm/arch-mx31/imx-regs.h b/arch/arm/include/asm/arch-mx31/imx-regs.h index 8fd3d0806..ae3658b63 100644 --- a/arch/arm/include/asm/arch-mx31/imx-regs.h +++ b/arch/arm/include/asm/arch-mx31/imx-regs.h @@ -895,32 +895,7 @@ struct esdc_regs {  #define MX31_AIPS1_BASE_ADDR	0x43f00000  #define IMX_USB_BASE		(MX31_AIPS1_BASE_ADDR + 0x88000) - -/* USB portsc */ -/* values for portsc field */ -#define MXC_EHCI_PHY_LOW_POWER_SUSPEND	(1 << 23) -#define MXC_EHCI_FORCE_FS		(1 << 24) -#define MXC_EHCI_UTMI_8BIT		(0 << 28) -#define MXC_EHCI_UTMI_16BIT		(1 << 28) -#define MXC_EHCI_SERIAL			(1 << 29) -#define MXC_EHCI_MODE_UTMI		(0 << 30) -#define MXC_EHCI_MODE_PHILIPS		(1 << 30) -#define MXC_EHCI_MODE_ULPI		(2 << 30) -#define MXC_EHCI_MODE_SERIAL		(3 << 30) - -/* values for flags field */ -#define MXC_EHCI_INTERFACE_DIFF_UNI	(0 << 0) -#define MXC_EHCI_INTERFACE_DIFF_BI	(1 << 0) -#define MXC_EHCI_INTERFACE_SINGLE_UNI	(2 << 0) -#define MXC_EHCI_INTERFACE_SINGLE_BI	(3 << 0) -#define MXC_EHCI_INTERFACE_MASK		(0xf) - -#define MXC_EHCI_POWER_PINS_ENABLED	(1 << 5) -#define MXC_EHCI_TTL_ENABLED		(1 << 6) - -#define MXC_EHCI_INTERNAL_PHY		(1 << 7) -#define MXC_EHCI_IPPUE_DOWN		(1 << 8) -#define MXC_EHCI_IPPUE_UP		(1 << 9) +#define IMX_USB_PORT_OFFSET	0x200  /*   * CSPI register definitions diff --git a/arch/arm/include/asm/arch-mx35/imx-regs.h b/arch/arm/include/asm/arch-mx35/imx-regs.h index 7b098094f..18c6816e4 100644 --- a/arch/arm/include/asm/arch-mx35/imx-regs.h +++ b/arch/arm/include/asm/arch-mx35/imx-regs.h @@ -33,6 +33,8 @@  #define IRAM_BASE_ADDR		0x10000000	/* internal ram */  #define IRAM_SIZE		0x00020000	/* 128 KB */ +#define LOW_LEVEL_SRAM_STACK	0x1001E000 +  /*   * AIPS 1   */ @@ -82,6 +84,8 @@  #define PWM_BASE_ADDR		0x53FE0000  #define RTIC_BASE_ADDR		0x53FEC000  #define IIM_BASE_ADDR		0x53FF0000 +#define IMX_USB_BASE		0x53FF4000 +#define IMX_USB_PORT_OFFSET	0x400  #define IMX_CCM_BASE		CCM_BASE_ADDR diff --git a/arch/arm/include/asm/arch-mx35/mmc_host_def.h b/arch/arm/include/asm/arch-mx35/mmc_host_def.h new file mode 100644 index 000000000..775b9552c --- /dev/null +++ b/arch/arm/include/asm/arch-mx35/mmc_host_def.h @@ -0,0 +1,31 @@ +/* + * (C) Copyright 2008 + * Texas Instruments, <www.ti.com> + * Syed Mohammed Khasim <khasim@ti.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation's version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef MMC_HOST_DEF_H +#define MMC_HOST_DEF_H + +/* Driver definitions */ +#define MMCSD_SECTOR_SIZE		512 + +#endif /* MMC_HOST_DEF_H */ diff --git a/arch/arm/include/asm/arch-mx35/spl.h b/arch/arm/include/asm/arch-mx35/spl.h new file mode 100644 index 000000000..91d11ae84 --- /dev/null +++ b/arch/arm/include/asm/arch-mx35/spl.h @@ -0,0 +1,38 @@ +/* + * (C) Copyright 2012 + * Texas Instruments, <www.ti.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ +#ifndef	_ASM_ARCH_SPL_H_ +#define	_ASM_SPL_H_ + +#define BOOT_DEVICE_NONE	0 +#define BOOT_DEVICE_XIP		1 +#define BOOT_DEVICE_XIPWAIT	2 +#define BOOT_DEVICE_NAND	3 +#define BOOT_DEVICE_ONE_NAND	4 +#define BOOT_DEVICE_MMC1	5 +#define BOOT_DEVICE_MMC2	6 +#define BOOT_DEVICE_MMC2_2	7 +#define BOOT_DEVICE_NOR		8 +#define BOOT_DEVICE_I2C		9 +#define BOOT_DEVICE_SPI		10 + +#endif diff --git a/arch/arm/include/asm/arch-mx35/sys_proto.h b/arch/arm/include/asm/arch-mx35/sys_proto.h index 9c0d51321..aa3549cb0 100644 --- a/arch/arm/include/asm/arch-mx35/sys_proto.h +++ b/arch/arm/include/asm/arch-mx35/sys_proto.h @@ -25,6 +25,8 @@  #define _SYS_PROTO_H_  u32 get_cpu_rev(void); +void mx3_setup_sdram_bank(u32 start_address, u32 ddr2_config, +	u32 row, u32 col, u32 dsize, u32 refresh);  #define is_soc_rev(rev)	((get_cpu_rev() & 0xFF) - rev)  #endif diff --git a/arch/arm/include/asm/arch-mx5/mx5x_pins.h b/arch/arm/include/asm/arch-mx5/mx5x_pins.h index 122fbeef6..3457f6a63 100644 --- a/arch/arm/include/asm/arch-mx5/mx5x_pins.h +++ b/arch/arm/include/asm/arch-mx5/mx5x_pins.h @@ -802,22 +802,22 @@ typedef enum iomux_input_select {  	MX53_CSPI_IPP_CSPI_CLK_IN_SELECT_INPUT,  	MX53_CSPI_IPP_IND_MISO_SELECT_INPUT,  	MX53_CSPI_IPP_IND_MOSI_SELECT_INPUT, +	MX53_CSPI_IPP_IND_SS_B_0_SELECT_INPUT,  	MX53_CSPI_IPP_IND_SS_B_1_SELECT_INPUT,  	MX53_CSPI_IPP_IND_SS_B_2_SELECT_INPUT,  	MX53_CSPI_IPP_IND_SS_B_3_SELECT_INPUT, -	MX53_CSPI_IPP_IND_SS_B_4_SELECT_INPUT,  	MX53_ECSPI1_IPP_CSPI_CLK_IN_SELECT_INPUT,  	MX53_ECSPI1_IPP_IND_MISO_SELECT_INPUT,  	MX53_ECSPI1_IPP_IND_MOSI_SELECT_INPUT, +	MX53_ECSPI1_IPP_IND_SS_B_0_SELECT_INPUT,  	MX53_ECSPI1_IPP_IND_SS_B_1_SELECT_INPUT,  	MX53_ECSPI1_IPP_IND_SS_B_2_SELECT_INPUT,  	MX53_ECSPI1_IPP_IND_SS_B_3_SELECT_INPUT, -	MX53_ECSPI1_IPP_IND_SS_B_4_SELECT_INPUT,  	MX53_ECSPI2_IPP_CSPI_CLK_IN_SELECT_INPUT,  	MX53_ECSPI2_IPP_IND_MISO_SELECT_INPUT,  	MX53_ECSPI2_IPP_IND_MOSI_SELECT_INPUT, +	MX53_ECSPI2_IPP_IND_SS_B_0_SELECT_INPUT,  	MX53_ECSPI2_IPP_IND_SS_B_1_SELECT_INPUT, -	MX53_ECSPI2_IPP_IND_SS_B_2_SELECT_INPUT,  	MX53_ESAI1_IPP_IND_FSR_SELECT_INPUT,  	MX53_ESAI1_IPP_IND_FST_SELECT_INPUT,  	MX53_ESAI1_IPP_IND_HCKR_SELECT_INPUT, diff --git a/arch/arm/include/asm/arch-mx5/sys_proto.h b/arch/arm/include/asm/arch-mx5/sys_proto.h index 7b5246eea..93ad1c6b3 100644 --- a/arch/arm/include/asm/arch-mx5/sys_proto.h +++ b/arch/arm/include/asm/arch-mx5/sys_proto.h @@ -24,8 +24,16 @@  #ifndef _SYS_PROTO_H_  #define _SYS_PROTO_H_ -u32 get_cpu_rev(void); +#define MXC_CPU_MX51		0x51 +#define MXC_CPU_MX53		0x53 +#define MXC_CPU_MX6SL		0x60 +#define MXC_CPU_MX6DL		0x61 +#define MXC_CPU_MX6SOLO		0x62 +#define MXC_CPU_MX6Q		0x63 +  #define is_soc_rev(rev)	((get_cpu_rev() & 0xFF) - rev) +u32 get_cpu_rev(void); +unsigned imx_ddr_size(void);  void sdelay(unsigned long);  void set_chipselect_size(int const); diff --git a/arch/arm/include/asm/arch-mx6/imx-regs.h b/arch/arm/include/asm/arch-mx6/imx-regs.h index 09ab01013..3eb0081ca 100644 --- a/arch/arm/include/asm/arch-mx6/imx-regs.h +++ b/arch/arm/include/asm/arch-mx6/imx-regs.h @@ -564,6 +564,8 @@ struct anatop_regs {  	u32	usb2_misc_clr;		/* 0x258 */  	u32	usb2_misc_tog;		/* 0x25c */  	u32	digprog;		/* 0x260 */ +	u32	reserved1[7]; +	u32	digprog_sololite;	/* 0x280 */  };  #define ANATOP_PFD_480_PFD0_FRAC_SHIFT		0 diff --git a/arch/arm/include/asm/arch-mx6/mx6dl_pins.h b/arch/arm/include/asm/arch-mx6/mx6dl_pins.h new file mode 100644 index 000000000..79e2c4f5a --- /dev/null +++ b/arch/arm/include/asm/arch-mx6/mx6dl_pins.h @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2012 Freescale Semiconductor, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#ifndef __ASM_ARCH_MX6_MX6DL_PINS_H__ +#define __ASM_ARCH_MX6_MX6DL_PINS_H__ + +#include <asm/imx-common/iomux-v3.h> + +/* Use to set PAD control */ +#define PAD_CTL_HYS		(1 << 16) +#define PAD_CTL_PUS_100K_DOWN	(0 << 14) +#define PAD_CTL_PUS_47K_UP	(1 << 14) +#define PAD_CTL_PUS_100K_UP	(2 << 14) +#define PAD_CTL_PUS_22K_UP	(3 << 14) + +#define PAD_CTL_PUE		(1 << 13) +#define PAD_CTL_PKE		(1 << 12) +#define PAD_CTL_ODE		(1 << 11) +#define PAD_CTL_SPEED_LOW	(1 << 6) +#define PAD_CTL_SPEED_MED	(2 << 6) +#define PAD_CTL_SPEED_HIGH	(3 << 6) +#define PAD_CTL_DSE_DISABLE	(0 << 3) +#define PAD_CTL_DSE_240ohm	(1 << 3) +#define PAD_CTL_DSE_120ohm	(2 << 3) +#define PAD_CTL_DSE_80ohm	(3 << 3) +#define PAD_CTL_DSE_60ohm	(4 << 3) +#define PAD_CTL_DSE_48ohm	(5 << 3) +#define PAD_CTL_DSE_40ohm	(6 << 3) +#define PAD_CTL_DSE_34ohm	(7 << 3) +#define PAD_CTL_SRE_FAST	(1 << 0) +#define PAD_CTL_SRE_SLOW	(0 << 0) + +#define IOMUX_CONFIG_SION 0x10 +#define NO_MUX_I                0 +#define NO_PAD_I                0 +enum { +	MX6DL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK = IOMUX_PAD(0x03B0, 0x009C, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DI0_PIN15__IPU1_DI0_PIN15	= IOMUX_PAD(0x03B4, 0x00A0, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DI0_PIN2__IPU1_DI0_PIN2	= IOMUX_PAD(0x03B8, 0x00A4, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DI0_PIN3__IPU1_DI0_PIN3	= IOMUX_PAD(0x03BC, 0x00A8, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DI0_PIN4__GPIO_4_20		= IOMUX_PAD(0x03C0, 0x00AC, 5, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT0__IPU1_DISP0_DAT_0	= IOMUX_PAD(0x03C4, 0x00B0, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT1__IPU1_DISP0_DAT_1	= IOMUX_PAD(0x03C8, 0x00B4, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT10__IPU1_DISP0_DAT_10 = IOMUX_PAD(0x03CC, 0x00B8, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT11__IPU1_DISP0_DAT_11 = IOMUX_PAD(0x03D0, 0x00BC, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT12__IPU1_DISP0_DAT_12 = IOMUX_PAD(0x03D4, 0x00C0, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT13__IPU1_DISP0_DAT_13 = IOMUX_PAD(0x03D8, 0x00C4, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT14__IPU1_DISP0_DAT_14 = IOMUX_PAD(0x03DC, 0x00C8, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT15__IPU1_DISP0_DAT_15 = IOMUX_PAD(0x03E0, 0x00CC, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT16__IPU1_DISP0_DAT_16 = IOMUX_PAD(0x03E4, 0x00D0, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT17__IPU1_DISP0_DAT_17 = IOMUX_PAD(0x03E8, 0x00D4, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT18__IPU1_DISP0_DAT_18 = IOMUX_PAD(0x03EC, 0x00D8, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT19__IPU1_DISP0_DAT_19 = IOMUX_PAD(0x03F0, 0x00DC, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT2__IPU1_DISP0_DAT_2	 = IOMUX_PAD(0x03F4, 0x00E0, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT20__IPU1_DISP0_DAT_20 = IOMUX_PAD(0x03F8, 0x00E4, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT21__IPU1_DISP0_DAT_21 = IOMUX_PAD(0x03FC, 0x00E8, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT22__IPU1_DISP0_DAT_22 = IOMUX_PAD(0x0400, 0x00EC, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT23__IPU1_DISP0_DAT_23 = IOMUX_PAD(0x0404, 0x00F0, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT3__IPU1_DISP0_DAT_3	= IOMUX_PAD(0x0408, 0x00F4, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT4__IPU1_DISP0_DAT_4	= IOMUX_PAD(0x040C, 0x00F8, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT5__IPU1_DISP0_DAT_5	= IOMUX_PAD(0x0410, 0x00FC, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT6__IPU1_DISP0_DAT_6	= IOMUX_PAD(0x0414, 0x0100, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT7__IPU1_DISP0_DAT_7	= IOMUX_PAD(0x0418, 0x0104, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT8__IPU1_DISP0_DAT_8	= IOMUX_PAD(0x041C, 0x0108, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_DISP0_DAT9__IPU1_DISP0_DAT_9	= IOMUX_PAD(0x0420, 0x010C, 0, 0x0000, 0, PAD_CTL_DSE_120ohm), +	MX6DL_PAD_EIM_D16__ECSPI1_SCLK		= IOMUX_PAD(0x0514, 0x0144, 1, 0x07D8, 2, 0), +	MX6DL_PAD_EIM_D17__ECSPI1_MISO		= IOMUX_PAD(0x0518, 0x0148, 1, 0x07DC, 2, 0), +	MX6DL_PAD_EIM_D18__ECSPI1_MOSI		= IOMUX_PAD(0x051C, 0x014C, 1, 0x07E0, 2, 0), +	MX6DL_PAD_EIM_D19__GPIO_3_19		= IOMUX_PAD(0x0520, 0x0150, 5, 0x0000, 0, 0), +	MX6DL_PAD_EIM_D21__GPIO_3_21		= IOMUX_PAD(0x0528, 0x0158, 5, 0x0000, 0, 0), +	MX6DL_PAD_EIM_D21__I2C1_SCL		= IOMUX_PAD(0x0528, 0x0158, 6 | IOMUX_CONFIG_SION, 0x0868, 1, 0), +	MX6DL_PAD_EIM_D23__GPIO_3_23		= IOMUX_PAD(0x0530, 0x0160, 5, 0x0000, 0, 0), +	MX6DL_PAD_EIM_D26__UART2_TXD		= IOMUX_PAD(0x053C, 0x016C, 4, 0x0000, 0, 0), +	MX6DL_PAD_EIM_D27__UART2_RXD		= IOMUX_PAD(0x0540, 0x0170, 4, 0x0904, 1, 0), +	MX6DL_PAD_EIM_D28__I2C1_SDA		= IOMUX_PAD(0x0544, 0x0174, 1 | IOMUX_CONFIG_SION, 0x086C, 1, 0), +	MX6DL_PAD_EIM_D28__GPIO_3_28		= IOMUX_PAD(0x0544, 0x0174, 5, 0x0000, 0, 0), +	MX6DL_PAD_ENET_MDC__ENET_MDC		= IOMUX_PAD(0x05B8, 0x01E8, 1, 0x0000, 0,  0), +	MX6DL_PAD_ENET_MDIO__ENET_MDIO		= IOMUX_PAD(0x05BC, 0x01EC, 1, 0x0810, 0, 0), +	MX6DL_PAD_ENET_REF_CLK__ENET_TX_CLK	= IOMUX_PAD(0x05C0, 0x01F0, 1, 0x0000, 0, 0), +	MX6DL_PAD_ENET_RXD0__GPIO_1_27		= IOMUX_PAD(0x05C8, 0x01F8, 5, 0x0000, 0, 0), +	MX6DL_PAD_GPIO_16__GPIO_7_11		= IOMUX_PAD(0x05E4, 0x0214, 5, 0x0000, 0, 0), +	MX6DL_PAD_GPIO_16__I2C3_SDA		= IOMUX_PAD(0x05E4, 0x0214, 6 | IOMUX_CONFIG_SION, 0x087C, 1, 0), +	MX6DL_PAD_GPIO_17__GPIO_7_12		= IOMUX_PAD(0x05E8, 0x0218, 5, 0x0000, 0, 0), +	MX6DL_PAD_GPIO_18__GPIO_7_13		= IOMUX_PAD(0x05EC, 0x021C, 5, 0x0000, 0, 0), +	MX6DL_PAD_GPIO_19__GPIO_4_5		= IOMUX_PAD(0x05F0, 0x0220, 5, 0x0000, 0, 0), +	MX6DL_PAD_GPIO_5__GPIO_1_5		= IOMUX_PAD(0x0600, 0x0230, 5, 0x0000, 0, 0), +	MX6DL_PAD_GPIO_5__I2C3_SCL		= IOMUX_PAD(0x0600, 0x0230, 6 | IOMUX_CONFIG_SION, 0x0878, 2, 0), +	MX6DL_PAD_KEY_COL3__I2C2_SCL		= IOMUX_PAD(0x0638, 0x0250, 4 | IOMUX_CONFIG_SION, 0x0870, 1, 0), +	MX6DL_PAD_KEY_COL3__GPIO_4_12		= IOMUX_PAD(0x0638, 0x0250, 5, 0x0000, 0, 0), +	MX6DL_PAD_KEY_ROW3__I2C2_SDA		= IOMUX_PAD(0x064C, 0x0264, 4 | IOMUX_CONFIG_SION, 0x0874, 1, 0), +	MX6DL_PAD_KEY_ROW3__GPIO_4_13		= IOMUX_PAD(0x064C, 0x0264, 5, 0x0000, 0, 0), +	MX6DL_PAD_NANDF_D1__GPIO_2_1		= IOMUX_PAD(0x0670, 0x0288, 5, 0x0000, 0, 0), +	MX6DL_PAD_NANDF_D2__GPIO_2_2		= IOMUX_PAD(0x0674, 0x028C, 5, 0x0000, 0, 0), +	MX6DL_PAD_NANDF_D3__GPIO_2_3		= IOMUX_PAD(0x0678, 0x0290, 5, 0x0000, 0, 0), +	MX6DL_PAD_NANDF_D4__GPIO_2_4		= IOMUX_PAD(0x067C, 0x0294, 5, 0x0000, 0, 0), +	MX6DL_PAD_NANDF_D6__GPIO_2_6		= IOMUX_PAD(0x0684, 0x029C, 5, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_RD0__ENET_RGMII_RD0     = IOMUX_PAD(0x0694, 0x02AC, 1, 0x0818, 1, 0), +	MX6DL_PAD_RGMII_RD0__GPIO_6_25		= IOMUX_PAD(0x0694, 0x02AC, 5, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_RD1__ENET_RGMII_RD1	= IOMUX_PAD(0x0698, 0x02B0, 1, 0x081C, 1, 0), +	MX6DL_PAD_RGMII_RD1__GPIO_6_27		= IOMUX_PAD(0x0698, 0x02B0, 5, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_RD2__ENET_RGMII_RD2	= IOMUX_PAD(0x069C, 0x02B4, 1, 0x0820, 1, 0), +	MX6DL_PAD_RGMII_RD2__GPIO_6_28		= IOMUX_PAD(0x069C, 0x02B4, 5, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_RD3__ENET_RGMII_RD3	= IOMUX_PAD(0x06A0, 0x02B8, 1, 0x0824, 1, 0), +	MX6DL_PAD_RGMII_RD3__GPIO_6_29		= IOMUX_PAD(0x06A0, 0x02B8, 5, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_RX_CTL__RGMII_RX_CTL	= IOMUX_PAD(0x06A4, 0x02BC, 1, 0x0828, 1, 0), +	MX6DL_PAD_RGMII_RX_CTL__GPIO_6_24	= IOMUX_PAD(0x06A4, 0x02BC, 5, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_RXC__ENET_RGMII_RXC	= IOMUX_PAD(0x06A8, 0x02C0, 1, 0x0814, 1, 0), +	MX6DL_PAD_RGMII_RXC__GPIO_6_30		= IOMUX_PAD(0x06A8, 0x02C0, 5, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_TD0__ENET_RGMII_TD0	= IOMUX_PAD(0x06AC, 0x02C4, 1, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_TD1__ENET_RGMII_TD1	= IOMUX_PAD(0x06B0, 0x02C8, 1, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_TD2__ENET_RGMII_TD2	= IOMUX_PAD(0x06B4, 0x02CC, 1, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_TD3__ENET_RGMII_TD3	= IOMUX_PAD(0x06B8, 0x02D0, 1, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_TX_CTL__RGMII_TX_CTL	= IOMUX_PAD(0x06BC, 0x02D4, 1, 0x0000, 0, 0), +	MX6DL_PAD_RGMII_TXC__ENET_RGMII_TXC	= IOMUX_PAD(0x06C0, 0x02D8, 1, 0x0000, 0, 0), +	MX6DL_PAD_SD1_CMD__GPIO_1_18		= IOMUX_PAD(0x06C8, 0x02E0, 5, 0x0000, 0, 0), +	MX6DL_PAD_SD1_DAT3__GPIO_1_21		= IOMUX_PAD(0x06D8, 0x02F0, 5, 0x0000, 0, 0), +	MX6DL_PAD_SD3_CLK__USDHC3_CLK		= IOMUX_PAD(0x06F4, 0x030C, 0, 0x0934, 1, 0), +	MX6DL_PAD_SD3_CMD__USDHC3_CMD		= IOMUX_PAD(0x06F8, 0x0310, 0 | IOMUX_CONFIG_SION, 0x0000, 0, 0), +	MX6DL_PAD_SD3_DAT0__USDHC3_DAT0		= IOMUX_PAD(0x06FC, 0x0314, 0, 0x0000, 0, 0), +	MX6DL_PAD_SD3_DAT1__USDHC3_DAT1		= IOMUX_PAD(0x0700, 0x0318, 0, 0x0000, 0, 0), +	MX6DL_PAD_SD3_DAT2__USDHC3_DAT2		= IOMUX_PAD(0x0704, 0x031C, 0, 0x0000, 0, 0), +	MX6DL_PAD_SD3_DAT3__USDHC3_DAT3		= IOMUX_PAD(0x0708, 0x0320, 0, 0x0000, 0, 0), +	MX6DL_PAD_SD3_DAT5__GPIO_7_0		= IOMUX_PAD(0x0710, 0x0328, 5, 0x0000, 0, 0), +	MX6DL_PAD_SD3_DAT6__UART1_RXD		= IOMUX_PAD(0x0714, 0x032C, 1, 0x08FC, 2, 0), +	MX6DL_PAD_SD3_DAT7__UART1_TXD		= IOMUX_PAD(0x0718, 0x0330, 1, 0x0000, 0, 0), +	MX6DL_PAD_SD4_CLK__USDHC4_CLK		= IOMUX_PAD(0x0720, 0x0338, 0, 0x0938, 1, 0), +	MX6DL_PAD_SD4_CMD__USDHC4_CMD		= IOMUX_PAD(0x0724, 0x033C, 0 | IOMUX_CONFIG_SION, 0x0000, 0, 0), +	MX6DL_PAD_SD4_DAT0__USDHC4_DAT0		= IOMUX_PAD(0x0728, 0x0340, 1, 0x0000, 0, 0), +	MX6DL_PAD_SD4_DAT1__USDHC4_DAT1		= IOMUX_PAD(0x072C, 0x0344, 1, 0x0000, 0, 0), +	MX6DL_PAD_SD4_DAT2__USDHC4_DAT2		= IOMUX_PAD(0x0730, 0x0348, 1, 0x0000, 0, 0), +	MX6DL_PAD_SD4_DAT3__USDHC4_DAT3		= IOMUX_PAD(0x0734, 0x034C, 1, 0x0000, 0, 0), +}; +#endif	/* __ASM_ARCH_MX6_MX6DL_PINS_H__ */ diff --git a/arch/arm/include/asm/arch-mx6/sys_proto.h b/arch/arm/include/asm/arch-mx6/sys_proto.h index 711b30dfe..319329761 100644 --- a/arch/arm/include/asm/arch-mx6/sys_proto.h +++ b/arch/arm/include/asm/arch-mx6/sys_proto.h @@ -24,9 +24,17 @@  #ifndef _SYS_PROTO_H_  #define _SYS_PROTO_H_ -#define is_soc_rev(rev)	((get_cpu_rev() & 0xFF) - rev) +#define MXC_CPU_MX51		0x51 +#define MXC_CPU_MX53		0x53 +#define MXC_CPU_MX6SL		0x60 +#define MXC_CPU_MX6DL		0x61 +#define MXC_CPU_MX6SOLO		0x62 +#define MXC_CPU_MX6Q		0x63 +#define is_soc_rev(rev)	((get_cpu_rev() & 0xFF) - rev)  u32 get_cpu_rev(void); +const char *get_imx_type(u32 imxtype); +unsigned imx_ddr_size(void);  void set_vddsoc(u32 mv); diff --git a/arch/arm/include/asm/arch-mxs/regs-power.h b/arch/arm/include/asm/arch-mxs/regs-power.h index a46a37268..257ee88e8 100644 --- a/arch/arm/include/asm/arch-mxs/regs-power.h +++ b/arch/arm/include/asm/arch-mxs/regs-power.h @@ -128,7 +128,7 @@ struct mxs_power_regs {  #define	POWER_MINPWR_PWD_ANA_CMPS			(1 << 10)  #define	POWER_MINPWR_ENABLE_OSC				(1 << 9)  #define	POWER_MINPWR_SELECT_OSC				(1 << 8) -#define	POWER_MINPWR_FBG_OFF				(1 << 7) +#define	POWER_MINPWR_VBG_OFF				(1 << 7)  #define	POWER_MINPWR_DOUBLE_FETS			(1 << 6)  #define	POWER_MINPWR_HALFFETS				(1 << 5)  #define	POWER_MINPWR_LESSANA_I				(1 << 4) @@ -268,7 +268,7 @@ struct mxs_power_regs {  #define	POWER_DCLIMITS_POSLIMIT_BUCK_MASK		(0x7f << 8)  #define	POWER_DCLIMITS_POSLIMIT_BUCK_OFFSET		8  #define	POWER_DCLIMITS_NEGLIMIT_MASK			0x7f -#define	POWER_DCLIMITS_NETLIMIT_OFFSET			0 +#define	POWER_DCLIMITS_NEGLIMIT_OFFSET			0  #define	POWER_LOOPCTRL_TOGGLE_DIF			(1 << 20)  #define	POWER_LOOPCTRL_HYST_SIGN			(1 << 19) diff --git a/arch/arm/include/asm/arch-s5pc1xx/gpio.h b/arch/arm/include/asm/arch-s5pc1xx/gpio.h index 76b901b39..00e498d83 100644 --- a/arch/arm/include/asm/arch-s5pc1xx/gpio.h +++ b/arch/arm/include/asm/arch-s5pc1xx/gpio.h @@ -143,7 +143,12 @@ static inline unsigned int s5p_gpio_base(int nr)  	return S5PC110_GPIO_BASE;  } -#define s5pc110_gpio_get_nr(bank, pin) \ +static inline unsigned int s5p_gpio_part_max(int nr) +{ +	return 0; +} + +#define s5pc110_gpio_get_nr(bank, pin)	  \  	((((((unsigned int)&(((struct s5pc110_gpio *)S5PC110_GPIO_BASE)->bank))\  	    - S5PC110_GPIO_BASE) / sizeof(struct s5p_gpio_bank)) \  	  * GPIO_PER_BANK) + pin) diff --git a/arch/arm/include/asm/arch-tegra20/dc.h b/arch/arm/include/asm/arch-tegra20/dc.h new file mode 100644 index 000000000..37934e1c6 --- /dev/null +++ b/arch/arm/include/asm/arch-tegra20/dc.h @@ -0,0 +1,545 @@ +/* + *  (C) Copyright 2010 + *  NVIDIA Corporation <www.nvidia.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef __ASM_ARCH_TEGRA_DC_H +#define __ASM_ARCH_TEGRA_DC_H + +/* Register definitions for the Tegra display controller */ + +/* CMD register 0x000 ~ 0x43 */ +struct dc_cmd_reg { +	/* Address 0x000 ~ 0x002 */ +	uint gen_incr_syncpt;		/* _CMD_GENERAL_INCR_SYNCPT_0 */ +	uint gen_incr_syncpt_ctrl;	/* _CMD_GENERAL_INCR_SYNCPT_CNTRL_0 */ +	uint gen_incr_syncpt_err;	/* _CMD_GENERAL_INCR_SYNCPT_ERROR_0 */ + +	uint reserved0[5];		/* reserved_0[5] */ + +	/* Address 0x008 ~ 0x00a */ +	uint win_a_incr_syncpt;		/* _CMD_WIN_A_INCR_SYNCPT_0 */ +	uint win_a_incr_syncpt_ctrl;	/* _CMD_WIN_A_INCR_SYNCPT_CNTRL_0 */ +	uint win_a_incr_syncpt_err;	/* _CMD_WIN_A_INCR_SYNCPT_ERROR_0 */ + +	uint reserved1[5];		/* reserved_1[5] */ + +	/* Address 0x010 ~ 0x012 */ +	uint win_b_incr_syncpt;		/* _CMD_WIN_B_INCR_SYNCPT_0 */ +	uint win_b_incr_syncpt_ctrl;	/* _CMD_WIN_B_INCR_SYNCPT_CNTRL_0 */ +	uint win_b_incr_syncpt_err;	/* _CMD_WIN_B_INCR_SYNCPT_ERROR_0 */ + +	uint reserved2[5];		/* reserved_2[5] */ + +	/* Address 0x018 ~ 0x01a */ +	uint win_c_incr_syncpt;		/* _CMD_WIN_C_INCR_SYNCPT_0 */ +	uint win_c_incr_syncpt_ctrl;	/* _CMD_WIN_C_INCR_SYNCPT_CNTRL_0 */ +	uint win_c_incr_syncpt_err;	/* _CMD_WIN_C_INCR_SYNCPT_ERROR_0 */ + +	uint reserved3[13];		/* reserved_3[13] */ + +	/* Address 0x028 */ +	uint cont_syncpt_vsync;		/* _CMD_CONT_SYNCPT_VSYNC_0 */ + +	uint reserved4[7];		/* reserved_4[7] */ + +	/* Address 0x030 ~ 0x033 */ +	uint ctxsw;			/* _CMD_CTXSW_0 */ +	uint disp_cmd_opt0;		/* _CMD_DISPLAY_COMMAND_OPTION0_0 */ +	uint disp_cmd;			/* _CMD_DISPLAY_COMMAND_0 */ +	uint sig_raise;			/* _CMD_SIGNAL_RAISE_0 */ + +	uint reserved5[2];		/* reserved_0[2] */ + +	/* Address 0x036 ~ 0x03e */ +	uint disp_pow_ctrl;		/* _CMD_DISPLAY_POWER_CONTROL_0 */ +	uint int_stat;			/* _CMD_INT_STATUS_0 */ +	uint int_mask;			/* _CMD_INT_MASK_0 */ +	uint int_enb;			/* _CMD_INT_ENABLE_0 */ +	uint int_type;			/* _CMD_INT_TYPE_0 */ +	uint int_polarity;		/* _CMD_INT_POLARITY_0 */ +	uint sig_raise1;		/* _CMD_SIGNAL_RAISE1_0 */ +	uint sig_raise2;		/* _CMD_SIGNAL_RAISE2_0 */ +	uint sig_raise3;		/* _CMD_SIGNAL_RAISE3_0 */ + +	uint reserved6;			/* reserved_6 */ + +	/* Address 0x040 ~ 0x043 */ +	uint state_access;		/* _CMD_STATE_ACCESS_0 */ +	uint state_ctrl;		/* _CMD_STATE_CONTROL_0 */ +	uint disp_win_header;		/* _CMD_DISPLAY_WINDOW_HEADER_0 */ +	uint reg_act_ctrl;		/* _CMD_REG_ACT_CONTROL_0 */ +}; + +enum { +	PIN_REG_COUNT		= 4, +	PIN_OUTPUT_SEL_COUNT	= 7, +}; + +/* COM register 0x300 ~ 0x329 */ +struct dc_com_reg { +	/* Address 0x300 ~ 0x301 */ +	uint crc_ctrl;			/* _COM_CRC_CONTROL_0 */ +	uint crc_checksum;		/* _COM_CRC_CHECKSUM_0 */ + +	/* _COM_PIN_OUTPUT_ENABLE0/1/2/3_0: Address 0x302 ~ 0x305 */ +	uint pin_output_enb[PIN_REG_COUNT]; + +	/* _COM_PIN_OUTPUT_POLARITY0/1/2/3_0: Address 0x306 ~ 0x309 */ +	uint pin_output_polarity[PIN_REG_COUNT]; + +	/* _COM_PIN_OUTPUT_DATA0/1/2/3_0: Address 0x30a ~ 0x30d */ +	uint pin_output_data[PIN_REG_COUNT]; + +	/* _COM_PIN_INPUT_ENABLE0_0: Address 0x30e ~ 0x311 */ +	uint pin_input_enb[PIN_REG_COUNT]; + +	/* Address 0x312 ~ 0x313 */ +	uint pin_input_data0;		/* _COM_PIN_INPUT_DATA0_0 */ +	uint pin_input_data1;		/* _COM_PIN_INPUT_DATA1_0 */ + +	/* _COM_PIN_OUTPUT_SELECT0/1/2/3/4/5/6_0: Address 0x314 ~ 0x31a */ +	uint pin_output_sel[PIN_OUTPUT_SEL_COUNT]; + +	/* Address 0x31b ~ 0x329 */ +	uint pin_misc_ctrl;		/* _COM_PIN_MISC_CONTROL_0 */ +	uint pm0_ctrl;			/* _COM_PM0_CONTROL_0 */ +	uint pm0_duty_cycle;		/* _COM_PM0_DUTY_CYCLE_0 */ +	uint pm1_ctrl;			/* _COM_PM1_CONTROL_0 */ +	uint pm1_duty_cycle;		/* _COM_PM1_DUTY_CYCLE_0 */ +	uint spi_ctrl;			/* _COM_SPI_CONTROL_0 */ +	uint spi_start_byte;		/* _COM_SPI_START_BYTE_0 */ +	uint hspi_wr_data_ab;		/* _COM_HSPI_WRITE_DATA_AB_0 */ +	uint hspi_wr_data_cd;		/* _COM_HSPI_WRITE_DATA_CD */ +	uint hspi_cs_dc;		/* _COM_HSPI_CS_DC_0 */ +	uint scratch_reg_a;		/* _COM_SCRATCH_REGISTER_A_0 */ +	uint scratch_reg_b;		/* _COM_SCRATCH_REGISTER_B_0 */ +	uint gpio_ctrl;			/* _COM_GPIO_CTRL_0 */ +	uint gpio_debounce_cnt;		/* _COM_GPIO_DEBOUNCE_COUNTER_0 */ +	uint crc_checksum_latched;	/* _COM_CRC_CHECKSUM_LATCHED_0 */ +}; + +enum dc_disp_h_pulse_pos { +	H_PULSE0_POSITION_A, +	H_PULSE0_POSITION_B, +	H_PULSE0_POSITION_C, +	H_PULSE0_POSITION_D, +	H_PULSE0_POSITION_COUNT, +}; + +struct _disp_h_pulse { +	/* _DISP_H_PULSE0/1/2_CONTROL_0 */ +	uint h_pulse_ctrl; +	/* _DISP_H_PULSE0/1/2_POSITION_A/B/C/D_0 */ +	uint h_pulse_pos[H_PULSE0_POSITION_COUNT]; +}; + +enum dc_disp_v_pulse_pos { +	V_PULSE0_POSITION_A, +	V_PULSE0_POSITION_B, +	V_PULSE0_POSITION_C, +	V_PULSE0_POSITION_COUNT, +}; + +struct _disp_v_pulse0 { +	/* _DISP_H_PULSE0/1_CONTROL_0 */ +	uint v_pulse_ctrl; +	/* _DISP_H_PULSE0/1_POSITION_A/B/C_0 */ +	uint v_pulse_pos[V_PULSE0_POSITION_COUNT]; +}; + +struct _disp_v_pulse2 { +	/* _DISP_H_PULSE2/3_CONTROL_0 */ +	uint v_pulse_ctrl; +	/* _DISP_H_PULSE2/3_POSITION_A_0 */ +	uint v_pulse_pos_a; +}; + +enum dc_disp_h_pulse_reg { +	H_PULSE0, +	H_PULSE1, +	H_PULSE2, +	H_PULSE_COUNT, +}; + +enum dc_disp_pp_select { +	PP_SELECT_A, +	PP_SELECT_B, +	PP_SELECT_C, +	PP_SELECT_D, +	PP_SELECT_COUNT, +}; + +/* DISP register 0x400 ~ 0x4c1 */ +struct dc_disp_reg { +	/* Address 0x400 ~ 0x40a */ +	uint disp_signal_opt0;		/* _DISP_DISP_SIGNAL_OPTIONS0_0 */ +	uint disp_signal_opt1;		/* _DISP_DISP_SIGNAL_OPTIONS1_0 */ +	uint disp_win_opt;		/* _DISP_DISP_WIN_OPTIONS_0 */ +	uint mem_high_pri;		/* _DISP_MEM_HIGH_PRIORITY_0 */ +	uint mem_high_pri_timer;	/* _DISP_MEM_HIGH_PRIORITY_TIMER_0 */ +	uint disp_timing_opt;		/* _DISP_DISP_TIMING_OPTIONS_0 */ +	uint ref_to_sync;		/* _DISP_REF_TO_SYNC_0 */ +	uint sync_width;		/* _DISP_SYNC_WIDTH_0 */ +	uint back_porch;		/* _DISP_BACK_PORCH_0 */ +	uint disp_active;		/* _DISP_DISP_ACTIVE_0 */ +	uint front_porch;		/* _DISP_FRONT_PORCH_0 */ + +	/* Address 0x40b ~ 0x419: _DISP_H_PULSE0/1/2_  */ +	struct _disp_h_pulse h_pulse[H_PULSE_COUNT]; + +	/* Address 0x41a ~ 0x421 */ +	struct _disp_v_pulse0 v_pulse0;	/* _DISP_V_PULSE0_ */ +	struct _disp_v_pulse0 v_pulse1;	/* _DISP_V_PULSE1_ */ + +	/* Address 0x422 ~ 0x425 */ +	struct _disp_v_pulse2 v_pulse3;	/* _DISP_V_PULSE2_ */ +	struct _disp_v_pulse2 v_pulse4;	/* _DISP_V_PULSE3_ */ + +	/* Address 0x426 ~ 0x429 */ +	uint m0_ctrl;			/* _DISP_M0_CONTROL_0 */ +	uint m1_ctrl;			/* _DISP_M1_CONTROL_0 */ +	uint di_ctrl;			/* _DISP_DI_CONTROL_0 */ +	uint pp_ctrl;			/* _DISP_PP_CONTROL_0 */ + +	/* Address 0x42a ~ 0x42d: _DISP_PP_SELECT_A/B/C/D_0 */ +	uint pp_select[PP_SELECT_COUNT]; + +	/* Address 0x42e ~ 0x435 */ +	uint disp_clk_ctrl;		/* _DISP_DISP_CLOCK_CONTROL_0 */ +	uint disp_interface_ctrl;	/* _DISP_DISP_INTERFACE_CONTROL_0 */ +	uint disp_color_ctrl;		/* _DISP_DISP_COLOR_CONTROL_0 */ +	uint shift_clk_opt;		/* _DISP_SHIFT_CLOCK_OPTIONS_0 */ +	uint data_enable_opt;		/* _DISP_DATA_ENABLE_OPTIONS_0 */ +	uint serial_interface_opt;	/* _DISP_SERIAL_INTERFACE_OPTIONS_0 */ +	uint lcd_spi_opt;		/* _DISP_LCD_SPI_OPTIONS_0 */ +	uint border_color;		/* _DISP_BORDER_COLOR_0 */ + +	/* Address 0x436 ~ 0x439 */ +	uint color_key0_lower;		/* _DISP_COLOR_KEY0_LOWER_0 */ +	uint color_key0_upper;		/* _DISP_COLOR_KEY0_UPPER_0 */ +	uint color_key1_lower;		/* _DISP_COLOR_KEY1_LOWER_0 */ +	uint color_key1_upper;		/* _DISP_COLOR_KEY1_UPPER_0 */ + +	uint reserved0[2];		/* reserved_0[2] */ + +	/* Address 0x43c ~ 0x442 */ +	uint cursor_foreground;		/* _DISP_CURSOR_FOREGROUND_0 */ +	uint cursor_background;		/* _DISP_CURSOR_BACKGROUND_0 */ +	uint cursor_start_addr;		/* _DISP_CURSOR_START_ADDR_0 */ +	uint cursor_start_addr_ns;	/* _DISP_CURSOR_START_ADDR_NS_0 */ +	uint cursor_pos;		/* _DISP_CURSOR_POSITION_0 */ +	uint cursor_pos_ns;		/* _DISP_CURSOR_POSITION_NS_0 */ +	uint seq_ctrl;			/* _DISP_INIT_SEQ_CONTROL_0 */ + +	/* Address 0x442 ~ 0x446 */ +	uint spi_init_seq_data_a;	/* _DISP_SPI_INIT_SEQ_DATA_A_0 */ +	uint spi_init_seq_data_b;	/* _DISP_SPI_INIT_SEQ_DATA_B_0 */ +	uint spi_init_seq_data_c;	/* _DISP_SPI_INIT_SEQ_DATA_C_0 */ +	uint spi_init_seq_data_d;	/* _DISP_SPI_INIT_SEQ_DATA_D_0 */ + +	uint reserved1[0x39];		/* reserved1[0x39], */ + +	/* Address 0x480 ~ 0x484 */ +	uint dc_mccif_fifoctrl;		/* _DISP_DC_MCCIF_FIFOCTRL_0 */ +	uint mccif_disp0a_hyst;		/* _DISP_MCCIF_DISPLAY0A_HYST_0 */ +	uint mccif_disp0b_hyst;		/* _DISP_MCCIF_DISPLAY0B_HYST_0 */ +	uint mccif_disp0c_hyst;		/* _DISP_MCCIF_DISPLAY0C_HYST_0 */ +	uint mccif_disp1b_hyst;		/* _DISP_MCCIF_DISPLAY1B_HYST_0 */ + +	uint reserved2[0x3b];		/* reserved2[0x3b] */ + +	/* Address 0x4c0 ~ 0x4c1 */ +	uint dac_crt_ctrl;		/* _DISP_DAC_CRT_CTRL_0 */ +	uint disp_misc_ctrl;		/* _DISP_DISP_MISC_CONTROL_0 */ +}; + +enum dc_winc_filter_p { +	WINC_FILTER_COUNT	= 0x10, +}; + +/* Window A/B/C register 0x500 ~ 0x628 */ +struct dc_winc_reg { + +	/* Address 0x500 */ +	uint color_palette;		/* _WINC_COLOR_PALETTE_0 */ + +	uint reserved0[0xff];		/* reserved_0[0xff] */ + +	/* Address 0x600 */ +	uint palette_color_ext;		/* _WINC_PALETTE_COLOR_EXT_0 */ + +	/* _WINC_H_FILTER_P00~0F_0 */ +	/* Address 0x601 ~ 0x610 */ +	uint h_filter_p[WINC_FILTER_COUNT]; + +	/* Address 0x611 ~ 0x618 */ +	uint csc_yof;			/* _WINC_CSC_YOF_0 */ +	uint csc_kyrgb;			/* _WINC_CSC_KYRGB_0 */ +	uint csc_kur;			/* _WINC_CSC_KUR_0 */ +	uint csc_kvr;			/* _WINC_CSC_KVR_0 */ +	uint csc_kug;			/* _WINC_CSC_KUG_0 */ +	uint csc_kvg;			/* _WINC_CSC_KVG_0 */ +	uint csc_kub;			/* _WINC_CSC_KUB_0 */ +	uint csc_kvb;			/* _WINC_CSC_KVB_0 */ + +	/* Address 0x619 ~ 0x628: _WINC_V_FILTER_P00~0F_0 */ +	uint v_filter_p[WINC_FILTER_COUNT]; +}; + +/* WIN A/B/C Register 0x700 ~ 0x714*/ +struct dc_win_reg { +	/* Address 0x700 ~ 0x714 */ +	uint win_opt;			/* _WIN_WIN_OPTIONS_0 */ +	uint byte_swap;			/* _WIN_BYTE_SWAP_0 */ +	uint buffer_ctrl;		/* _WIN_BUFFER_CONTROL_0 */ +	uint color_depth;		/* _WIN_COLOR_DEPTH_0 */ +	uint pos;			/* _WIN_POSITION_0 */ +	uint size;			/* _WIN_SIZE_0 */ +	uint prescaled_size;		/* _WIN_PRESCALED_SIZE_0 */ +	uint h_initial_dda;		/* _WIN_H_INITIAL_DDA_0 */ +	uint v_initial_dda;		/* _WIN_V_INITIAL_DDA_0 */ +	uint dda_increment;		/* _WIN_DDA_INCREMENT_0 */ +	uint line_stride;		/* _WIN_LINE_STRIDE_0 */ +	uint buf_stride;		/* _WIN_BUF_STRIDE_0 */ +	uint uv_buf_stride;		/* _WIN_UV_BUF_STRIDE_0 */ +	uint buffer_addr_mode;		/* _WIN_BUFFER_ADDR_MODE_0 */ +	uint dv_ctrl;			/* _WIN_DV_CONTROL_0 */ +	uint blend_nokey;		/* _WIN_BLEND_NOKEY_0 */ +	uint blend_1win;		/* _WIN_BLEND_1WIN_0 */ +	uint blend_2win_x;		/* _WIN_BLEND_2WIN_X_0 */ +	uint blend_2win_y;		/* _WIN_BLEND_2WIN_Y_0 */ +	uint blend_3win_xy;		/* _WIN_BLEND_3WIN_XY_0 */ +	uint hp_fetch_ctrl;		/* _WIN_HP_FETCH_CONTROL_0 */ +}; + +/* WINBUF A/B/C Register 0x800 ~ 0x80a */ +struct dc_winbuf_reg { +	/* Address 0x800 ~ 0x80a */ +	uint start_addr;		/* _WINBUF_START_ADDR_0 */ +	uint start_addr_ns;		/* _WINBUF_START_ADDR_NS_0 */ +	uint start_addr_u;		/* _WINBUF_START_ADDR_U_0 */ +	uint start_addr_u_ns;		/* _WINBUF_START_ADDR_U_NS_0 */ +	uint start_addr_v;		/* _WINBUF_START_ADDR_V_0 */ +	uint start_addr_v_ns;		/* _WINBUF_START_ADDR_V_NS_0 */ +	uint addr_h_offset;		/* _WINBUF_ADDR_H_OFFSET_0 */ +	uint addr_h_offset_ns;		/* _WINBUF_ADDR_H_OFFSET_NS_0 */ +	uint addr_v_offset;		/* _WINBUF_ADDR_V_OFFSET_0 */ +	uint addr_v_offset_ns;		/* _WINBUF_ADDR_V_OFFSET_NS_0 */ +	uint uflow_status;		/* _WINBUF_UFLOW_STATUS_0 */ +}; + +/* Display Controller (DC_) regs */ +struct dc_ctlr { +	struct dc_cmd_reg cmd;		/* CMD register 0x000 ~ 0x43 */ +	uint reserved0[0x2bc]; + +	struct dc_com_reg com;		/* COM register 0x300 ~ 0x329 */ +	uint reserved1[0xd6]; + +	struct dc_disp_reg disp;	/* DISP register 0x400 ~ 0x4c1 */ +	uint reserved2[0x3e]; + +	struct dc_winc_reg winc;	/* Window A/B/C 0x500 ~ 0x628 */ +	uint reserved3[0xd7]; + +	struct dc_win_reg win;		/* WIN A/B/C 0x700 ~ 0x714*/ +	uint reserved4[0xeb]; + +	struct dc_winbuf_reg winbuf;	/* WINBUF A/B/C 0x800 ~ 0x80a */ +}; + +#define BIT(pos)	(1U << pos) + +/* DC_CMD_DISPLAY_COMMAND 0x032 */ +#define CTRL_MODE_SHIFT		5 +#define CTRL_MODE_MASK		(0x3 << CTRL_MODE_SHIFT) +enum { +	CTRL_MODE_STOP, +	CTRL_MODE_C_DISPLAY, +	CTRL_MODE_NC_DISPLAY, +}; + +/* _WIN_COLOR_DEPTH_0 */ +enum win_color_depth_id { +	COLOR_DEPTH_P1, +	COLOR_DEPTH_P2, +	COLOR_DEPTH_P4, +	COLOR_DEPTH_P8, +	COLOR_DEPTH_B4G4R4A4, +	COLOR_DEPTH_B5G5R5A, +	COLOR_DEPTH_B5G6R5, +	COLOR_DEPTH_AB5G5R5, +	COLOR_DEPTH_B8G8R8A8 = 12, +	COLOR_DEPTH_R8G8B8A8, +	COLOR_DEPTH_B6x2G6x2R6x2A8, +	COLOR_DEPTH_R6x2G6x2B6x2A8, +	COLOR_DEPTH_YCbCr422, +	COLOR_DEPTH_YUV422, +	COLOR_DEPTH_YCbCr420P, +	COLOR_DEPTH_YUV420P, +	COLOR_DEPTH_YCbCr422P, +	COLOR_DEPTH_YUV422P, +	COLOR_DEPTH_YCbCr422R, +	COLOR_DEPTH_YUV422R, +	COLOR_DEPTH_YCbCr422RA, +	COLOR_DEPTH_YUV422RA, +}; + +/* DC_CMD_DISPLAY_POWER_CONTROL 0x036 */ +#define PW0_ENABLE		BIT(0) +#define PW1_ENABLE		BIT(2) +#define PW2_ENABLE		BIT(4) +#define PW3_ENABLE		BIT(6) +#define PW4_ENABLE		BIT(8) +#define PM0_ENABLE		BIT(16) +#define PM1_ENABLE		BIT(18) +#define SPI_ENABLE		BIT(24) +#define HSPI_ENABLE		BIT(25) + +/* DC_CMD_STATE_CONTROL 0x041 */ +#define GENERAL_ACT_REQ		BIT(0) +#define WIN_A_ACT_REQ		BIT(1) +#define WIN_B_ACT_REQ		BIT(2) +#define WIN_C_ACT_REQ		BIT(3) +#define GENERAL_UPDATE		BIT(8) +#define WIN_A_UPDATE		BIT(9) +#define WIN_B_UPDATE		BIT(10) +#define WIN_C_UPDATE		BIT(11) + +/* DC_CMD_DISPLAY_WINDOW_HEADER 0x042 */ +#define WINDOW_A_SELECT		BIT(4) +#define WINDOW_B_SELECT		BIT(5) +#define WINDOW_C_SELECT		BIT(6) + +/* DC_DISP_DISP_CLOCK_CONTROL 0x42e */ +#define SHIFT_CLK_DIVIDER_SHIFT	0 +#define SHIFT_CLK_DIVIDER_MASK	(0xff << SHIFT_CLK_DIVIDER_SHIFT) +#define	PIXEL_CLK_DIVIDER_SHIFT	8 +#define	PIXEL_CLK_DIVIDER_MSK	(0xf << PIXEL_CLK_DIVIDER_SHIFT) +enum { +	PIXEL_CLK_DIVIDER_PCD1, +	PIXEL_CLK_DIVIDER_PCD1H, +	PIXEL_CLK_DIVIDER_PCD2, +	PIXEL_CLK_DIVIDER_PCD3, +	PIXEL_CLK_DIVIDER_PCD4, +	PIXEL_CLK_DIVIDER_PCD6, +	PIXEL_CLK_DIVIDER_PCD8, +	PIXEL_CLK_DIVIDER_PCD9, +	PIXEL_CLK_DIVIDER_PCD12, +	PIXEL_CLK_DIVIDER_PCD16, +	PIXEL_CLK_DIVIDER_PCD18, +	PIXEL_CLK_DIVIDER_PCD24, +	PIXEL_CLK_DIVIDER_PCD13, +}; + +/* DC_DISP_DISP_INTERFACE_CONTROL 0x42f */ +#define DATA_FORMAT_SHIFT	0 +#define DATA_FORMAT_MASK	(0xf << DATA_FORMAT_SHIFT) +enum { +	DATA_FORMAT_DF1P1C, +	DATA_FORMAT_DF1P2C24B, +	DATA_FORMAT_DF1P2C18B, +	DATA_FORMAT_DF1P2C16B, +	DATA_FORMAT_DF2S, +	DATA_FORMAT_DF3S, +	DATA_FORMAT_DFSPI, +	DATA_FORMAT_DF1P3C24B, +	DATA_FORMAT_DF1P3C18B, +}; +#define DATA_ALIGNMENT_SHIFT	8 +enum { +	DATA_ALIGNMENT_MSB, +	DATA_ALIGNMENT_LSB, +}; +#define DATA_ORDER_SHIFT	9 +enum { +	DATA_ORDER_RED_BLUE, +	DATA_ORDER_BLUE_RED, +}; + +/* DC_DISP_DATA_ENABLE_OPTIONS 0x432 */ +#define DE_SELECT_SHIFT		0 +#define DE_SELECT_MASK		(0x3 << DE_SELECT_SHIFT) +#define DE_SELECT_ACTIVE_BLANK	0x0 +#define DE_SELECT_ACTIVE	0x1 +#define DE_SELECT_ACTIVE_IS	0x2 +#define DE_CONTROL_SHIFT	2 +#define DE_CONTROL_MASK		(0x7 << DE_CONTROL_SHIFT) +enum { +	DE_CONTROL_ONECLK, +	DE_CONTROL_NORMAL, +	DE_CONTROL_EARLY_EXT, +	DE_CONTROL_EARLY, +	DE_CONTROL_ACTIVE_BLANK, +}; + +/* DC_WIN_WIN_OPTIONS 0x700 */ +#define H_DIRECTION		BIT(0) +enum { +	H_DIRECTION_INCREMENT, +	H_DIRECTION_DECREMENT, +}; +#define V_DIRECTION		BIT(2) +enum { +	V_DIRECTION_INCREMENT, +	V_DIRECTION_DECREMENT, +}; +#define COLOR_EXPAND		BIT(6) +#define CP_ENABLE		BIT(16) +#define DV_ENABLE		BIT(20) +#define WIN_ENABLE		BIT(30) + +/* DC_WIN_BYTE_SWAP 0x701 */ +#define BYTE_SWAP_SHIFT		0 +#define BYTE_SWAP_MASK		(3 << BYTE_SWAP_SHIFT) +enum { +	BYTE_SWAP_NOSWAP, +	BYTE_SWAP_SWAP2, +	BYTE_SWAP_SWAP4, +	BYTE_SWAP_SWAP4HW +}; + +/* DC_WIN_POSITION 0x704 */ +#define H_POSITION_SHIFT	0 +#define H_POSITION_MASK		(0x1FFF << H_POSITION_SHIFT) +#define V_POSITION_SHIFT	16 +#define V_POSITION_MASK		(0x1FFF << V_POSITION_SHIFT) + +/* DC_WIN_SIZE 0x705 */ +#define H_SIZE_SHIFT		0 +#define H_SIZE_MASK		(0x1FFF << H_SIZE_SHIFT) +#define V_SIZE_SHIFT		16 +#define V_SIZE_MASK		(0x1FFF << V_SIZE_SHIFT) + +/* DC_WIN_PRESCALED_SIZE 0x706 */ +#define H_PRESCALED_SIZE_SHIFT	0 +#define H_PRESCALED_SIZE_MASK	(0x7FFF << H_PRESCALED_SIZE) +#define V_PRESCALED_SIZE_SHIFT	16 +#define V_PRESCALED_SIZE_MASK	(0x1FFF << V_PRESCALED_SIZE) + +/* DC_WIN_DDA_INCREMENT 0x709 */ +#define H_DDA_INC_SHIFT		0 +#define H_DDA_INC_MASK		(0xFFFF << H_DDA_INC_SHIFT) +#define V_DDA_INC_SHIFT		16 +#define V_DDA_INC_MASK		(0xFFFF << V_DDA_INC_SHIFT) + +#endif /* __ASM_ARCH_TEGRA_DC_H */ diff --git a/arch/arm/include/asm/arch-tegra20/display.h b/arch/arm/include/asm/arch-tegra20/display.h new file mode 100644 index 000000000..c8709590c --- /dev/null +++ b/arch/arm/include/asm/arch-tegra20/display.h @@ -0,0 +1,152 @@ +/* + *  (C) Copyright 2010 + *  NVIDIA Corporation <www.nvidia.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef __ASM_ARCH_TEGRA_DISPLAY_H +#define __ASM_ARCH_TEGRA_DISPLAY_H + +#include <asm/arch/dc.h> +#include <fdtdec.h> + +/* This holds information about a window which can be displayed */ +struct disp_ctl_win { +	enum win_color_depth_id fmt;	/* Color depth/format */ +	unsigned	bpp;		/* Bits per pixel */ +	phys_addr_t	phys_addr;	/* Physical address in memory */ +	unsigned	x;		/* Horizontal address offset (bytes) */ +	unsigned	y;		/* Veritical address offset (bytes) */ +	unsigned	w;		/* Width of source window */ +	unsigned	h;		/* Height of source window */ +	unsigned	stride;		/* Number of bytes per line */ +	unsigned	out_x;		/* Left edge of output window (col) */ +	unsigned	out_y;		/* Top edge of output window (row) */ +	unsigned	out_w;		/* Width of output window in pixels */ +	unsigned	out_h;		/* Height of output window in pixels */ +}; + +#define FDT_LCD_TIMINGS	4 + +enum { +	FDT_LCD_TIMING_REF_TO_SYNC, +	FDT_LCD_TIMING_SYNC_WIDTH, +	FDT_LCD_TIMING_BACK_PORCH, +	FDT_LCD_TIMING_FRONT_PORCH, + +	FDT_LCD_TIMING_COUNT, +}; + +enum lcd_cache_t { +	FDT_LCD_CACHE_OFF		= 0, +	FDT_LCD_CACHE_WRITE_THROUGH	= 1 << 0, +	FDT_LCD_CACHE_WRITE_BACK	= 1 << 1, +	FDT_LCD_CACHE_FLUSH		= 1 << 2, +	FDT_LCD_CACHE_WRITE_BACK_FLUSH	= FDT_LCD_CACHE_WRITE_BACK | +						FDT_LCD_CACHE_FLUSH, +}; + +/* Information about the display controller */ +struct fdt_disp_config { +	int valid;			/* config is valid */ +	int width;			/* width in pixels */ +	int height;			/* height in pixels */ +	int bpp;			/* number of bits per pixel */ + +	/* +	 * log2 of number of bpp, in general, unless it bpp is 24 in which +	 * case this field holds 24 also! This is a U-Boot thing. +	 */ +	int log2_bpp; +	struct disp_ctlr *disp;		/* Display controller to use */ +	fdt_addr_t frame_buffer;	/* Address of frame buffer */ +	unsigned pixel_clock;		/* Pixel clock in Hz */ +	uint horiz_timing[FDT_LCD_TIMING_COUNT];	/* Horizontal timing */ +	uint vert_timing[FDT_LCD_TIMING_COUNT];		/* Vertical timing */ +	int panel_node;			/* node offset of panel information */ +}; + +/* Information about the LCD panel */ +struct fdt_panel_config { +	int pwm_channel;		/* PWM channel to use for backlight */ +	enum lcd_cache_t cache_type; + +	struct fdt_gpio_state backlight_en;	/* GPIO for backlight enable */ +	struct fdt_gpio_state lvds_shutdown;	/* GPIO for lvds shutdown */ +	struct fdt_gpio_state backlight_vdd;	/* GPIO for backlight vdd */ +	struct fdt_gpio_state panel_vdd;	/* GPIO for panel vdd */ +	/* +	 * Panel required timings +	 * Timing 1: delay between panel_vdd-rise and data-rise +	 * Timing 2: delay between data-rise and backlight_vdd-rise +	 * Timing 3: delay between backlight_vdd and pwm-rise +	 * Timing 4: delay between pwm-rise and backlight_en-rise +	 */ +	uint panel_timings[FDT_LCD_TIMINGS]; +}; + +/** + * Register a new display based on device tree configuration. + * + * The frame buffer can be positioned by U-Boot or overriden by the fdt. + * You should pass in the U-Boot address here, and check the contents of + * struct fdt_disp_config to see what was actually chosen. + * + * @param blob			Device tree blob + * @param default_lcd_base	Default address of LCD frame buffer + * @return 0 if ok, -1 on error (unsupported bits per pixel) + */ +int tegra_display_probe(const void *blob, void *default_lcd_base); + +/** + * Return the current display configuration + * + * @return pointer to display configuration, or NULL if there is no valid + * config + */ +struct fdt_disp_config *tegra_display_get_config(void); + +/** + * Perform the next stage of the LCD init if it is time to do so. + * + * LCD init can be time-consuming because of the number of delays we need + * while waiting for the backlight power supply, etc. This function can + * be called at various times during U-Boot operation to advance the + * initialization of the LCD to the next stage if sufficient time has + * passed since the last stage. It keeps track of what stage it is up to + * and the time that it is permitted to move to the next stage. + * + * The final call should have wait=1 to complete the init. + * + * @param blob	fdt blob containing LCD information + * @param wait	1 to wait until all init is complete, and then return + *		0 to return immediately, potentially doing nothing if it is + *		not yet time for the next init. + */ +int tegra_lcd_check_next_stage(const void *blob, int wait); + +/** + * Set up the maximum LCD size so we can size the frame buffer. + * + * @param blob	fdt blob containing LCD information + */ +void tegra_lcd_early_init(const void *blob); + +#endif /*__ASM_ARCH_TEGRA_DISPLAY_H*/ diff --git a/arch/arm/include/asm/arch-tegra20/pinmux.h b/arch/arm/include/asm/arch-tegra20/pinmux.h index 03fa7ca64..797e158e6 100644 --- a/arch/arm/include/asm/arch-tegra20/pinmux.h +++ b/arch/arm/include/asm/arch-tegra20/pinmux.h @@ -339,7 +339,7 @@ void pinmux_set_pullupdown(enum pmux_pingrp pin, enum pmux_pull pupd);  void pinmux_set_func(enum pmux_pingrp pin, enum pmux_func func);  /* Set the complete configuration for a pin group */ -void pinmux_config_pingroup(struct pingroup_config *config); +void pinmux_config_pingroup(const struct pingroup_config *config);  void pinmux_set_tristate(enum pmux_pingrp pin, int enable); @@ -349,6 +349,6 @@ void pinmux_set_tristate(enum pmux_pingrp pin, int enable);   * @param config	List of config items   * @param len		Number of config items in list   */ -void pinmux_config_table(struct pingroup_config *config, int len); +void pinmux_config_table(const struct pingroup_config *config, int len);  #endif	/* PINMUX_H */ diff --git a/arch/arm/include/asm/arch-tegra20/pwm.h b/arch/arm/include/asm/arch-tegra20/pwm.h new file mode 100644 index 000000000..9e03837cc --- /dev/null +++ b/arch/arm/include/asm/arch-tegra20/pwm.h @@ -0,0 +1,75 @@ +/* + * Tegra pulse width frequency modulator definitions + * + * Copyright (c) 2011 The Chromium OS Authors. + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef __ASM_ARCH_TEGRA_PWM_H +#define __ASM_ARCH_TEGRA_PWM_H + +/* This is a single PWM channel */ +struct pwm_ctlr { +	uint control;		/* Control register */ +	uint reserved[3];	/* Space space */ +}; + +#define PWM_NUM_CHANNELS	4 + +/* PWM_CONTROLLER_PWM_CSR_0/1/2/3_0 */ +#define PWM_ENABLE_SHIFT	31 +#define PWM_ENABLE_MASK	(0x1 << PWM_ENABLE_SHIFT) + +#define PWM_WIDTH_SHIFT	16 +#define PWM_WIDTH_MASK		(0x7FFF << PWM_WIDTH_SHIFT) + +#define PWM_DIVIDER_SHIFT	0 +#define PWM_DIVIDER_MASK	(0x1FFF << PWM_DIVIDER_SHIFT) + +/** + * Program the PWM with the given parameters. + * + * @param channel	PWM channel to update + * @param rate		Clock rate to use for PWM + * @param pulse_width	high pulse width: 0=always low, 1=1/256 pulse high, + *			n = n/256 pulse high + * @param freq_divider	frequency divider value (1 to use rate as is) + */ +void pwm_enable(unsigned channel, int rate, int pulse_width, int freq_divider); + +/** + * Request a pwm channel as referenced by a device tree node. + * + * This channel can then be passed to pwm_enable(). + * + * @param blob		Device tree blob + * @param node		Node containing reference to pwm + * @param prop_name	Property name of pwm reference + * @return channel number, if ok, else -1 + */ +int pwm_request(const void *blob, int node, const char *prop_name); + +/** + * Set up the pwm controller, by looking it up in the fdt. + * + * @return 0 if ok, -1 if the device tree node was not found or invalid. + */ +int pwm_init(const void *blob); + +#endif	/* __ASM_ARCH_TEGRA_PWM_H */ diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index 2b28a261b..78ca8e0a6 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h @@ -75,6 +75,37 @@ static inline void set_cr(unsigned int val)  	isb();  } +/* options available for data cache on each page */ +enum dcache_option { +	DCACHE_OFF = 0x12, +	DCACHE_WRITETHROUGH = 0x1a, +	DCACHE_WRITEBACK = 0x1e, +}; + +/* Size of an MMU section */ +enum { +	MMU_SECTION_SHIFT	= 20, +	MMU_SECTION_SIZE	= 1 << MMU_SECTION_SHIFT, +}; + +/** + * Change the cache settings for a region. + * + * \param start		start address of memory region to change + * \param size		size of memory region to change + * \param option	dcache option to select + */ +void mmu_set_region_dcache_behaviour(u32 start, int size, +				     enum dcache_option option); + +/** + * Register an update to the page tables, and flush the TLB + * + * \param start		start address of update in page table + * \param stop		stop address of update in page table + */ +void mmu_page_table_flush(unsigned long start, unsigned long stop); +  #endif /* __ASSEMBLY__ */  #define arch_align_stack(x) (x) |