diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2013-02-19 20:54:15 +0100 | 
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2013-02-19 20:54:25 +0100 | 
| commit | 6e7f7cfce26cabea2965a43b69b4a0c285a7e4c5 (patch) | |
| tree | db7c3d908e8b308c7c559ed4bd561c7ff86da753 /arch | |
| parent | 001c5c4aaaffda840184700b8f488ced3c9dd0a1 (diff) | |
| parent | 64ff1673332a1109780d731ca08dcd4f8ad33097 (diff) | |
| download | olio-linux-3.10-6e7f7cfce26cabea2965a43b69b4a0c285a7e4c5.tar.xz olio-linux-3.10-6e7f7cfce26cabea2965a43b69b4a0c285a7e4c5.zip  | |
Merge tag 'omap-for-v3.9/usb-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/soc
These changes contain the OMAP USB related platform data changes
that were dropped from linux next because of the merge conflicts
as requested by me and Olof. The reason was that at this point
we really should be able to do the arch/arm related changes
separately from driver changes to avoid dependencies between
branches.
These patches were initially part of the USB related MFD patches.
Based on our comments, Roger Quadros quickly reworked these
patches into a shared branch between ARM SoC tree and the MFD
tree, then separate patches for the OMAP platform data and
MFD driver.
Note that this branch will conflict with c1d1cd597fc7
("ARM: OMAP2+: omap_device: remove obsolete pm_lats and
early_device code"). Please see http://lkml.org/lkml/2013/2/11/16
for the merge resolution.
[arnd - resolved the merge conflict]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch')
37 files changed, 196 insertions, 101 deletions
diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h index 73cf03aa981..1c4df27f933 100644 --- a/arch/arm/include/asm/memory.h +++ b/arch/arm/include/asm/memory.h @@ -37,7 +37,7 @@   */  #define PAGE_OFFSET		UL(CONFIG_PAGE_OFFSET)  #define TASK_SIZE		(UL(CONFIG_PAGE_OFFSET) - UL(0x01000000)) -#define TASK_UNMAPPED_BASE	(UL(CONFIG_PAGE_OFFSET) / 3) +#define TASK_UNMAPPED_BASE	ALIGN(TASK_SIZE / 3, SZ_16M)  /*   * The maximum size of a 26-bit user space task. diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig index e103c290bc9..85afb031b67 100644 --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig @@ -414,7 +414,7 @@ config MACH_EXYNOS4_DT  	select CPU_EXYNOS4210  	select HAVE_SAMSUNG_KEYPAD if INPUT_KEYBOARD  	select PINCTRL -	select PINCTRL_EXYNOS4 +	select PINCTRL_EXYNOS  	select USE_OF  	help  	  Machine support for Samsung Exynos4 machine with device tree enabled. diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index 8e2513f6a28..c22a981086f 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c @@ -424,7 +424,7 @@ static void enable_board_wakeup_source(void)  		OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);  } -static const struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, diff --git a/arch/arm/mach-omap2/board-3630sdp.c b/arch/arm/mach-omap2/board-3630sdp.c index 33846274bb8..67447bd4564 100644 --- a/arch/arm/mach-omap2/board-3630sdp.c +++ b/arch/arm/mach-omap2/board-3630sdp.c @@ -53,7 +53,7 @@ static void enable_board_wakeup_source(void)  		OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);  } -static const struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c index 07f0be24a5d..52cc2c59731 100644 --- a/arch/arm/mach-omap2/board-am3517crane.c +++ b/arch/arm/mach-omap2/board-am3517crane.c @@ -40,7 +40,7 @@ static struct omap_board_mux board_mux[] __initdata = {  };  #endif -static struct usbhs_omap_board_data usbhs_bdata __initdata = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c index 6f5b2a05f4b..9fb85908a61 100644 --- a/arch/arm/mach-omap2/board-am3517evm.c +++ b/arch/arm/mach-omap2/board-am3517evm.c @@ -274,7 +274,7 @@ static __init void am3517_evm_mcbsp1_init(void)  	omap_ctrl_writel(devconf0, OMAP2_CONTROL_DEVCONF0);  } -static const struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,  #if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \  		defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE) diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index 68647c38919..343130c02bb 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c @@ -418,7 +418,7 @@ static struct omap2_hsmmc_info mmc[] = {  	{}	/* Terminator */  }; -static struct usbhs_omap_board_data usbhs_bdata __initdata = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c index 6a9529ab95c..5e54f565a29 100644 --- a/arch/arm/mach-omap2/board-cm-t3517.c +++ b/arch/arm/mach-omap2/board-cm-t3517.c @@ -166,7 +166,7 @@ static inline void cm_t3517_init_rtc(void) {}  #define HSUSB2_RESET_GPIO	(147)  #define USB_HUB_RESET_GPIO	(152) -static struct usbhs_omap_board_data cm_t3517_ehci_pdata __initdata = { +static struct usbhs_omap_platform_data cm_t3517_ehci_pdata __initdata = {  	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 0b1d8f75808..f3a59c79cae 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c @@ -435,7 +435,7 @@ static struct platform_device *devkit8000_devices[] __initdata = {  	&omap_dm9000_dev,  }; -static const struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index 5b447649f5a..8022f563074 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c @@ -526,7 +526,7 @@ static void __init igep_i2c_init(void)  	omap3_pmic_init("twl4030", &igep_twldata);  } -static const struct usbhs_omap_board_data igep2_usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data igep2_usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, @@ -537,7 +537,7 @@ static const struct usbhs_omap_board_data igep2_usbhs_bdata __initconst = {  	.reset_gpio_port[2] = -EINVAL,  }; -static const struct usbhs_omap_board_data igep3_usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data igep3_usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index b81b4585f46..67769ef6d18 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -430,7 +430,7 @@ static struct platform_device *omap3_beagle_devices[] __initdata = {  	&madc_hwmon,  }; -static const struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index f2f636b1976..b13459bee8c 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c @@ -538,7 +538,7 @@ static int __init omap3_evm_i2c_init(void)  	return 0;  } -static struct usbhs_omap_board_data usbhs_bdata __initdata = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c index 12e18168934..39806754c87 100644 --- a/arch/arm/mach-omap2/board-omap3pandora.c +++ b/arch/arm/mach-omap2/board-omap3pandora.c @@ -567,7 +567,7 @@ static struct platform_device *omap3pandora_devices[] __initdata = {  	&pandora_backlight,  }; -static const struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index 13ee4054560..73417474b08 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c @@ -361,7 +361,7 @@ static struct platform_device *omap3_stalker_devices[] __initdata = {  	&keys_gpio,  }; -static struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c index 36c455c85ed..fc83c963ba9 100644 --- a/arch/arm/mach-omap2/board-omap3touchbook.c +++ b/arch/arm/mach-omap2/board-omap3touchbook.c @@ -309,7 +309,7 @@ static struct platform_device *omap3_touchbook_devices[] __initdata = {  	&keys_gpio,  }; -static const struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index b62317906b3..824cdffb129 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c @@ -139,7 +139,7 @@ static struct platform_device *panda_devices[] __initdata = {  	&btwilink_device,  }; -static const struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index 233a37d541c..e425d53212c 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c @@ -457,7 +457,7 @@ static int __init overo_spi_init(void)  	return 0;  } -static const struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, diff --git a/arch/arm/mach-omap2/board-zoom.c b/arch/arm/mach-omap2/board-zoom.c index d257cf1e0ab..5e4d4c9fe61 100644 --- a/arch/arm/mach-omap2/board-zoom.c +++ b/arch/arm/mach-omap2/board-zoom.c @@ -92,7 +92,7 @@ static struct mtd_partition zoom_nand_partitions[] = {  	},  }; -static const struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0]		= OMAP_USBHS_PORT_MODE_UNUSED,  	.port_mode[1]		= OMAP_EHCI_PORT_MODE_PHY,  	.port_mode[2]		= OMAP_USBHS_PORT_MODE_UNUSED, diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c index 99f04deb4c7..5706bdccf45 100644 --- a/arch/arm/mach-omap2/usb-host.c +++ b/arch/arm/mach-omap2/usb-host.c @@ -37,11 +37,6 @@  #define	USBHS_UHH_HWMODNAME	"usb_host_hs"  #define USBHS_TLL_HWMODNAME	"usb_tll_hs" -static struct usbhs_omap_platform_data		usbhs_data; -static struct usbtll_omap_platform_data		usbtll_data; -static struct ehci_hcd_omap_platform_data	ehci_data; -static struct ohci_hcd_omap_platform_data	ohci_data; -  /* MUX settings for EHCI pins */  /*   * setup_ehci_io_mux - initialize IO pad mux for USBHOST @@ -477,32 +472,18 @@ void __init setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)  	}  } -void __init usbhs_init(const struct usbhs_omap_board_data *pdata) +void __init usbhs_init(struct usbhs_omap_platform_data *pdata)  {  	struct omap_hwmod	*uhh_hwm, *tll_hwm;  	struct platform_device	*pdev;  	int			bus_id = -1; -	int			i; - -	for (i = 0; i < OMAP3_HS_USB_PORTS; i++) { -		usbhs_data.port_mode[i] = pdata->port_mode[i]; -		usbtll_data.port_mode[i] = pdata->port_mode[i]; -		ohci_data.port_mode[i] = pdata->port_mode[i]; -		ehci_data.port_mode[i] = pdata->port_mode[i]; -		ehci_data.reset_gpio_port[i] = pdata->reset_gpio_port[i]; -		ehci_data.regulator[i] = pdata->regulator[i]; -	} -	ehci_data.phy_reset = pdata->phy_reset; -	ohci_data.es2_compatibility = pdata->es2_compatibility; -	usbhs_data.ehci_data = &ehci_data; -	usbhs_data.ohci_data = &ohci_data;  	if (cpu_is_omap34xx()) {  		setup_ehci_io_mux(pdata->port_mode);  		setup_ohci_io_mux(pdata->port_mode);  		if (omap_rev() <= OMAP3430_REV_ES2_1) -			usbhs_data.single_ulpi_bypass = true; +			pdata->single_ulpi_bypass = true;  	} else if (cpu_is_omap44xx()) {  		setup_4430ehci_io_mux(pdata->port_mode); @@ -522,7 +503,7 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)  	}  	pdev = omap_device_build(OMAP_USBTLL_DEVICE, bus_id, tll_hwm, -				 &usbtll_data, sizeof(usbtll_data)); +				pdata, sizeof(*pdata));  	if (IS_ERR(pdev)) {  		pr_err("Could not build hwmod device %s\n",  		       USBHS_TLL_HWMODNAME); @@ -530,7 +511,7 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)  	}  	pdev = omap_device_build(OMAP_USBHS_DEVICE, bus_id, uhh_hwm, -				&usbhs_data, sizeof(usbhs_data)); +				pdata, sizeof(*pdata));  	if (IS_ERR(pdev)) {  		pr_err("Could not build hwmod devices %s\n",  		       USBHS_UHH_HWMODNAME); @@ -540,7 +521,7 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)  #else -void __init usbhs_init(const struct usbhs_omap_board_data *pdata) +void __init usbhs_init(struct usbhs_omap_platform_data *pdata)  {  } diff --git a/arch/arm/mach-omap2/usb.h b/arch/arm/mach-omap2/usb.h index 9b986ead7c4..3319f5cf47a 100644 --- a/arch/arm/mach-omap2/usb.h +++ b/arch/arm/mach-omap2/usb.h @@ -53,26 +53,8 @@  #define USBPHY_OTGSESSEND_EN	(1 << 20)  #define USBPHY_DATA_POLARITY	(1 << 23) -struct usbhs_omap_board_data { -	enum usbhs_omap_port_mode	port_mode[OMAP3_HS_USB_PORTS]; - -	/* have to be valid if phy_reset is true and portx is in phy mode */ -	int	reset_gpio_port[OMAP3_HS_USB_PORTS]; - -	/* Set this to true for ES2.x silicon */ -	unsigned			es2_compatibility:1; - -	unsigned			phy_reset:1; - -	/* -	 * Regulators for USB PHYs. -	 * Each PHY can have a separate regulator. -	 */ -	struct regulator		*regulator[OMAP3_HS_USB_PORTS]; -}; -  extern void usb_musb_init(struct omap_musb_board_data *board_data); -extern void usbhs_init(const struct usbhs_omap_board_data *pdata); +extern void usbhs_init(struct usbhs_omap_platform_data *pdata);  extern void am35x_musb_reset(void);  extern void am35x_musb_phy_power(u8 on); diff --git a/arch/arm/mach-realview/include/mach/irqs-eb.h b/arch/arm/mach-realview/include/mach/irqs-eb.h index d6b5073692d..44754230fdc 100644 --- a/arch/arm/mach-realview/include/mach/irqs-eb.h +++ b/arch/arm/mach-realview/include/mach/irqs-eb.h @@ -115,7 +115,7 @@  /*   * Only define NR_IRQS if less than NR_IRQS_EB   */ -#define NR_IRQS_EB		(IRQ_EB_GIC_START + 96) +#define NR_IRQS_EB		(IRQ_EB_GIC_START + 128)  #if defined(CONFIG_MACH_REALVIEW_EB) \  	&& (!defined(NR_IRQS) || (NR_IRQS < NR_IRQS_EB)) diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 076c26d4386..dda3904dc64 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -640,7 +640,7 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,  	if (is_coherent || nommu())  		addr = __alloc_simple_buffer(dev, size, gfp, &page); -	else if (gfp & GFP_ATOMIC) +	else if (!(gfp & __GFP_WAIT))  		addr = __alloc_from_pool(size, &page);  	else if (!IS_ENABLED(CONFIG_CMA))  		addr = __alloc_remap_buffer(dev, size, gfp, prot, &page, caller); diff --git a/arch/avr32/include/asm/dma-mapping.h b/arch/avr32/include/asm/dma-mapping.h index aaf5199d8fc..b3d18f9f3e8 100644 --- a/arch/avr32/include/asm/dma-mapping.h +++ b/arch/avr32/include/asm/dma-mapping.h @@ -336,4 +336,14 @@ dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,  #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)  #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) +/* drivers/base/dma-mapping.c */ +extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, +			   void *cpu_addr, dma_addr_t dma_addr, size_t size); +extern int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt, +				  void *cpu_addr, dma_addr_t dma_addr, +				  size_t size); + +#define dma_mmap_coherent(d, v, c, h, s) dma_common_mmap(d, v, c, h, s) +#define dma_get_sgtable(d, t, v, h, s) dma_common_get_sgtable(d, t, v, h, s) +  #endif /* __ASM_AVR32_DMA_MAPPING_H */ diff --git a/arch/blackfin/include/asm/dma-mapping.h b/arch/blackfin/include/asm/dma-mapping.h index bbf461076a0..054d9ec57d9 100644 --- a/arch/blackfin/include/asm/dma-mapping.h +++ b/arch/blackfin/include/asm/dma-mapping.h @@ -154,4 +154,14 @@ dma_cache_sync(struct device *dev, void *vaddr, size_t size,  	_dma_sync((dma_addr_t)vaddr, size, dir);  } +/* drivers/base/dma-mapping.c */ +extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, +			   void *cpu_addr, dma_addr_t dma_addr, size_t size); +extern int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt, +				  void *cpu_addr, dma_addr_t dma_addr, +				  size_t size); + +#define dma_mmap_coherent(d, v, c, h, s) dma_common_mmap(d, v, c, h, s) +#define dma_get_sgtable(d, t, v, h, s) dma_common_get_sgtable(d, t, v, h, s) +  #endif				/* _BLACKFIN_DMA_MAPPING_H */ diff --git a/arch/c6x/include/asm/dma-mapping.h b/arch/c6x/include/asm/dma-mapping.h index 3c694065030..88bd0d899bd 100644 --- a/arch/c6x/include/asm/dma-mapping.h +++ b/arch/c6x/include/asm/dma-mapping.h @@ -89,4 +89,19 @@ extern void dma_free_coherent(struct device *, size_t, void *, dma_addr_t);  #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent((d), (s), (h), (f))  #define dma_free_noncoherent(d, s, v, h)  dma_free_coherent((d), (s), (v), (h)) +/* Not supported for now */ +static inline int dma_mmap_coherent(struct device *dev, +				    struct vm_area_struct *vma, void *cpu_addr, +				    dma_addr_t dma_addr, size_t size) +{ +	return -EINVAL; +} + +static inline int dma_get_sgtable(struct device *dev, struct sg_table *sgt, +				  void *cpu_addr, dma_addr_t dma_addr, +				  size_t size) +{ +	return -EINVAL; +} +  #endif	/* _ASM_C6X_DMA_MAPPING_H */ diff --git a/arch/cris/include/asm/dma-mapping.h b/arch/cris/include/asm/dma-mapping.h index 8588b2ccf85..2f0f654f1b4 100644 --- a/arch/cris/include/asm/dma-mapping.h +++ b/arch/cris/include/asm/dma-mapping.h @@ -158,5 +158,15 @@ dma_cache_sync(struct device *dev, void *vaddr, size_t size,  {  } +/* drivers/base/dma-mapping.c */ +extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, +			   void *cpu_addr, dma_addr_t dma_addr, size_t size); +extern int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt, +				  void *cpu_addr, dma_addr_t dma_addr, +				  size_t size); + +#define dma_mmap_coherent(d, v, c, h, s) dma_common_mmap(d, v, c, h, s) +#define dma_get_sgtable(d, t, v, h, s) dma_common_get_sgtable(d, t, v, h, s) +  #endif diff --git a/arch/frv/include/asm/dma-mapping.h b/arch/frv/include/asm/dma-mapping.h index dfb811002c6..1746a2b8e6e 100644 --- a/arch/frv/include/asm/dma-mapping.h +++ b/arch/frv/include/asm/dma-mapping.h @@ -132,4 +132,19 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size,  	flush_write_buffers();  } +/* Not supported for now */ +static inline int dma_mmap_coherent(struct device *dev, +				    struct vm_area_struct *vma, void *cpu_addr, +				    dma_addr_t dma_addr, size_t size) +{ +	return -EINVAL; +} + +static inline int dma_get_sgtable(struct device *dev, struct sg_table *sgt, +				  void *cpu_addr, dma_addr_t dma_addr, +				  size_t size) +{ +	return -EINVAL; +} +  #endif  /* _ASM_DMA_MAPPING_H */ diff --git a/arch/m68k/include/asm/dma-mapping.h b/arch/m68k/include/asm/dma-mapping.h index 3e6b8445af6..292805f0762 100644 --- a/arch/m68k/include/asm/dma-mapping.h +++ b/arch/m68k/include/asm/dma-mapping.h @@ -115,4 +115,14 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t handle)  #include <asm-generic/dma-mapping-broken.h>  #endif +/* drivers/base/dma-mapping.c */ +extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, +			   void *cpu_addr, dma_addr_t dma_addr, size_t size); +extern int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt, +				  void *cpu_addr, dma_addr_t dma_addr, +				  size_t size); + +#define dma_mmap_coherent(d, v, c, h, s) dma_common_mmap(d, v, c, h, s) +#define dma_get_sgtable(d, t, v, h, s) dma_common_get_sgtable(d, t, v, h, s) +  #endif  /* _M68K_DMA_MAPPING_H */ diff --git a/arch/mn10300/include/asm/dma-mapping.h b/arch/mn10300/include/asm/dma-mapping.h index c1be4397b1e..a18abfc558e 100644 --- a/arch/mn10300/include/asm/dma-mapping.h +++ b/arch/mn10300/include/asm/dma-mapping.h @@ -168,4 +168,19 @@ void dma_cache_sync(void *vaddr, size_t size,  	mn10300_dcache_flush_inv();  } +/* Not supported for now */ +static inline int dma_mmap_coherent(struct device *dev, +				    struct vm_area_struct *vma, void *cpu_addr, +				    dma_addr_t dma_addr, size_t size) +{ +	return -EINVAL; +} + +static inline int dma_get_sgtable(struct device *dev, struct sg_table *sgt, +				  void *cpu_addr, dma_addr_t dma_addr, +				  size_t size) +{ +	return -EINVAL; +} +  #endif diff --git a/arch/parisc/include/asm/dma-mapping.h b/arch/parisc/include/asm/dma-mapping.h index 467bbd510ea..106b395688e 100644 --- a/arch/parisc/include/asm/dma-mapping.h +++ b/arch/parisc/include/asm/dma-mapping.h @@ -238,4 +238,19 @@ void * sba_get_iommu(struct parisc_device *dev);  /* At the moment, we panic on error for IOMMU resource exaustion */  #define dma_mapping_error(dev, x)	0 +/* This API cannot be supported on PA-RISC */ +static inline int dma_mmap_coherent(struct device *dev, +				    struct vm_area_struct *vma, void *cpu_addr, +				    dma_addr_t dma_addr, size_t size) +{ +	return -EINVAL; +} + +static inline int dma_get_sgtable(struct device *dev, struct sg_table *sgt, +				  void *cpu_addr, dma_addr_t dma_addr, +				  size_t size) +{ +	return -EINVAL; +} +  #endif diff --git a/arch/powerpc/mm/hash_low_64.S b/arch/powerpc/mm/hash_low_64.S index 56585086413..7443481a315 100644 --- a/arch/powerpc/mm/hash_low_64.S +++ b/arch/powerpc/mm/hash_low_64.S @@ -115,11 +115,13 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)  	sldi	r29,r5,SID_SHIFT - VPN_SHIFT  	rldicl  r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT)  	or	r29,r28,r29 - -	/* Calculate hash value for primary slot and store it in r28 */ -	rldicl	r5,r5,0,25		/* vsid & 0x0000007fffffffff */ -	rldicl	r0,r3,64-12,48		/* (ea >> 12) & 0xffff */ -	xor	r28,r5,r0 +	/* +	 * Calculate hash value for primary slot and store it in r28 +	 * r3 = va, r5 = vsid +	 * r0 = (va >> 12) & ((1ul << (28 - 12)) -1) +	 */ +	rldicl	r0,r3,64-12,48 +	xor	r28,r5,r0		/* hash */  	b	4f  3:	/* Calc vpn and put it in r29 */ @@ -130,11 +132,12 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)  	/*  	 * calculate hash value for primary slot and  	 * store it in r28 for 1T segment +	 * r3 = va, r5 = vsid  	 */ -	rldic	r28,r5,25,25		/* (vsid << 25) & 0x7fffffffff */ -	clrldi	r5,r5,40		/* vsid & 0xffffff */ -	rldicl	r0,r3,64-12,36		/* (ea >> 12) & 0xfffffff */ -	xor	r28,r28,r5 +	sldi	r28,r5,25		/* vsid << 25 */ +	/* r0 =  (va >> 12) & ((1ul << (40 - 12)) -1) */ +	rldicl	r0,r3,64-12,36 +	xor	r28,r28,r5		/* vsid ^ ( vsid << 25) */  	xor	r28,r28,r0		/* hash */  	/* Convert linux PTE bits into HW equivalents */ @@ -407,11 +410,13 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)  	 */  	rldicl  r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT)  	or	r29,r28,r29 - -	/* Calculate hash value for primary slot and store it in r28 */ -	rldicl	r5,r5,0,25		/* vsid & 0x0000007fffffffff */ -	rldicl	r0,r3,64-12,48		/* (ea >> 12) & 0xffff */ -	xor	r28,r5,r0 +	/* +	 * Calculate hash value for primary slot and store it in r28 +	 * r3 = va, r5 = vsid +	 * r0 = (va >> 12) & ((1ul << (28 - 12)) -1) +	 */ +	rldicl	r0,r3,64-12,48 +	xor	r28,r5,r0		/* hash */  	b	4f  3:	/* Calc vpn and put it in r29 */ @@ -426,11 +431,12 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)  	/*  	 * Calculate hash value for primary slot and  	 * store it in r28  for 1T segment +	 * r3 = va, r5 = vsid  	 */ -	rldic	r28,r5,25,25		/* (vsid << 25) & 0x7fffffffff */ -	clrldi	r5,r5,40		/* vsid & 0xffffff */ -	rldicl	r0,r3,64-12,36		/* (ea >> 12) & 0xfffffff */ -	xor	r28,r28,r5 +	sldi	r28,r5,25		/* vsid << 25 */ +	/* r0 = (va >> 12) & ((1ul << (40 - 12)) -1) */ +	rldicl	r0,r3,64-12,36 +	xor	r28,r28,r5		/* vsid ^ ( vsid << 25) */  	xor	r28,r28,r0		/* hash */  	/* Convert linux PTE bits into HW equivalents */ @@ -752,25 +758,27 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)  	rldicl  r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT)  	or	r29,r28,r29 -	/* Calculate hash value for primary slot and store it in r28 */ -	rldicl	r5,r5,0,25		/* vsid & 0x0000007fffffffff */ -	rldicl	r0,r3,64-16,52		/* (ea >> 16) & 0xfff */ -	xor	r28,r5,r0 +	/* Calculate hash value for primary slot and store it in r28 +	 * r3 = va, r5 = vsid +	 * r0 = (va >> 16) & ((1ul << (28 - 16)) -1) +	 */ +	rldicl	r0,r3,64-16,52 +	xor	r28,r5,r0		/* hash */  	b	4f  3:	/* Calc vpn and put it in r29 */  	sldi	r29,r5,SID_SHIFT_1T - VPN_SHIFT  	rldicl  r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT_1T - VPN_SHIFT)  	or	r29,r28,r29 -  	/*  	 * calculate hash value for primary slot and  	 * store it in r28 for 1T segment +	 * r3 = va, r5 = vsid  	 */ -	rldic	r28,r5,25,25		/* (vsid << 25) & 0x7fffffffff */ -	clrldi	r5,r5,40		/* vsid & 0xffffff */ -	rldicl	r0,r3,64-16,40		/* (ea >> 16) & 0xffffff */ -	xor	r28,r28,r5 +	sldi	r28,r5,25		/* vsid << 25 */ +	/* r0 = (va >> 16) & ((1ul << (40 - 16)) -1) */ +	rldicl	r0,r3,64-16,40 +	xor	r28,r28,r5		/* vsid ^ ( vsid << 25) */  	xor	r28,r28,r0		/* hash */  	/* Convert linux PTE bits into HW equivalents */ diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S index 102ff7cb3e4..142c4ceff11 100644 --- a/arch/x86/ia32/ia32entry.S +++ b/arch/x86/ia32/ia32entry.S @@ -207,7 +207,7 @@ sysexit_from_sys_call:  	testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)  	jnz ia32_ret_from_sys_call  	TRACE_IRQS_ON -	sti +	ENABLE_INTERRUPTS(CLBR_NONE)  	movl %eax,%esi		/* second arg, syscall return value */  	cmpl $-MAX_ERRNO,%eax	/* is it an error ? */  	jbe 1f @@ -217,7 +217,7 @@ sysexit_from_sys_call:  	call __audit_syscall_exit  	movq RAX-ARGOFFSET(%rsp),%rax	/* reload syscall return value */  	movl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),%edi -	cli +	DISABLE_INTERRUPTS(CLBR_NONE)  	TRACE_IRQS_OFF  	testl %edi,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)  	jz \exit diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c index fe9edec6698..84c1309c4c0 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c @@ -298,8 +298,7 @@ struct _cache_attr {  			 unsigned int);  }; -#ifdef CONFIG_AMD_NB - +#if defined(CONFIG_AMD_NB) && defined(CONFIG_SYSFS)  /*   * L3 cache descriptors   */ @@ -524,9 +523,9 @@ store_subcaches(struct _cpuid4_info *this_leaf, const char *buf, size_t count,  static struct _cache_attr subcaches =  	__ATTR(subcaches, 0644, show_subcaches, store_subcaches); -#else	/* CONFIG_AMD_NB */ +#else  #define amd_init_l3_cache(x, y) -#endif /* CONFIG_AMD_NB */ +#endif  /* CONFIG_AMD_NB && CONFIG_SYSFS */  static int  __cpuinit cpuid4_cache_lookup_regs(int index, diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index 93b9e1181f8..4914e94ad6e 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c @@ -2019,7 +2019,10 @@ __init int intel_pmu_init(void)  		break;  	case 28: /* Atom */ -	case 54: /* Cedariew */ +	case 38: /* Lincroft */ +	case 39: /* Penwell */ +	case 53: /* Cloverview */ +	case 54: /* Cedarview */  		memcpy(hw_cache_event_ids, atom_hw_cache_event_ids,  		       sizeof(hw_cache_event_ids)); @@ -2084,6 +2087,7 @@ __init int intel_pmu_init(void)  		pr_cont("SandyBridge events, ");  		break;  	case 58: /* IvyBridge */ +	case 62: /* IvyBridge EP */  		memcpy(hw_cache_event_ids, snb_hw_cache_event_ids,  		       sizeof(hw_cache_event_ids));  		memcpy(hw_cache_extra_regs, snb_hw_cache_extra_regs, diff --git a/arch/x86/kernel/cpu/perf_event_p6.c b/arch/x86/kernel/cpu/perf_event_p6.c index f2af39f5dc3..4820c232a0b 100644 --- a/arch/x86/kernel/cpu/perf_event_p6.c +++ b/arch/x86/kernel/cpu/perf_event_p6.c @@ -19,7 +19,7 @@ static const u64 p6_perfmon_event_map[] =  }; -static __initconst u64 p6_hw_cache_event_ids +static u64 p6_hw_cache_event_ids  				[PERF_COUNT_HW_CACHE_MAX]  				[PERF_COUNT_HW_CACHE_OP_MAX]  				[PERF_COUNT_HW_CACHE_RESULT_MAX] = diff --git a/arch/x86/tools/insn_sanity.c b/arch/x86/tools/insn_sanity.c index cc2f8c13128..872eb60e780 100644 --- a/arch/x86/tools/insn_sanity.c +++ b/arch/x86/tools/insn_sanity.c @@ -55,7 +55,7 @@ static FILE		*input_file;	/* Input file name */  static void usage(const char *err)  {  	if (err) -		fprintf(stderr, "Error: %s\n\n", err); +		fprintf(stderr, "%s: Error: %s\n\n", prog, err);  	fprintf(stderr, "Usage: %s [-y|-n|-v] [-s seed[,no]] [-m max] [-i input]\n", prog);  	fprintf(stderr, "\t-y	64bit mode\n");  	fprintf(stderr, "\t-n	32bit mode\n"); @@ -269,7 +269,13 @@ int main(int argc, char **argv)  		insns++;  	} -	fprintf(stdout, "%s: decoded and checked %d %s instructions with %d errors (seed:0x%x)\n", (errors) ? "Failure" : "Success", insns, (input_file) ? "given" : "random", errors, seed); +	fprintf(stdout, "%s: %s: decoded and checked %d %s instructions with %d errors (seed:0x%x)\n", +		prog, +		(errors) ? "Failure" : "Success", +		insns, +		(input_file) ? "given" : "random", +		errors, +		seed);  	return errors ? 1 : 0;  } diff --git a/arch/xtensa/include/asm/dma-mapping.h b/arch/xtensa/include/asm/dma-mapping.h index 4acb5feba1f..172a02a6ad1 100644 --- a/arch/xtensa/include/asm/dma-mapping.h +++ b/arch/xtensa/include/asm/dma-mapping.h @@ -170,4 +170,19 @@ dma_cache_sync(struct device *dev, void *vaddr, size_t size,  	consistent_sync(vaddr, size, direction);  } +/* Not supported for now */ +static inline int dma_mmap_coherent(struct device *dev, +				    struct vm_area_struct *vma, void *cpu_addr, +				    dma_addr_t dma_addr, size_t size) +{ +	return -EINVAL; +} + +static inline int dma_get_sgtable(struct device *dev, struct sg_table *sgt, +				  void *cpu_addr, dma_addr_t dma_addr, +				  size_t size) +{ +	return -EINVAL; +} +  #endif	/* _XTENSA_DMA_MAPPING_H */  |