mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-15 16:53:54 +08:00
Merge tag 'imx25-iomux-ds' of git://git.pengutronix.de/git/imx/linux-2.6 into next/fixes-non-critical
* tag 'imx25-iomux-ds' of git://git.pengutronix.de/git/imx/linux-2.6: iomux-mx25.h slew rate adjusted for LCD __LD pins (update to v3.3-rc6) Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
695d82fae9
@ -3780,7 +3780,7 @@ F: Documentation/kdump/
|
|||||||
|
|
||||||
KERNEL AUTOMOUNTER v4 (AUTOFS4)
|
KERNEL AUTOMOUNTER v4 (AUTOFS4)
|
||||||
M: Ian Kent <raven@themaw.net>
|
M: Ian Kent <raven@themaw.net>
|
||||||
L: autofs@linux.kernel.org
|
L: autofs@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: fs/autofs4/
|
F: fs/autofs4/
|
||||||
|
|
||||||
@ -4685,7 +4685,7 @@ NTFS FILESYSTEM
|
|||||||
M: Anton Altaparmakov <anton@tuxera.com>
|
M: Anton Altaparmakov <anton@tuxera.com>
|
||||||
L: linux-ntfs-dev@lists.sourceforge.net
|
L: linux-ntfs-dev@lists.sourceforge.net
|
||||||
W: http://www.tuxera.com/
|
W: http://www.tuxera.com/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs.git
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/filesystems/ntfs.txt
|
F: Documentation/filesystems/ntfs.txt
|
||||||
F: fs/ntfs/
|
F: fs/ntfs/
|
||||||
@ -7271,7 +7271,7 @@ WATCHDOG DEVICE DRIVERS
|
|||||||
M: Wim Van Sebroeck <wim@iguana.be>
|
M: Wim Van Sebroeck <wim@iguana.be>
|
||||||
L: linux-watchdog@vger.kernel.org
|
L: linux-watchdog@vger.kernel.org
|
||||||
W: http://www.linux-watchdog.org/
|
W: http://www.linux-watchdog.org/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog.git
|
T: git git://www.linux-watchdog.org/linux-watchdog.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/watchdog/
|
F: Documentation/watchdog/
|
||||||
F: drivers/watchdog/
|
F: drivers/watchdog/
|
||||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 3
|
PATCHLEVEL = 3
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc5
|
EXTRAVERSION = -rc6
|
||||||
NAME = Saber-toothed Squirrel
|
NAME = Saber-toothed Squirrel
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -61,7 +61,7 @@
|
|||||||
*/
|
*/
|
||||||
#define IRQ_LPC32XX_JTAG_COMM_TX LPC32XX_SIC1_IRQ(1)
|
#define IRQ_LPC32XX_JTAG_COMM_TX LPC32XX_SIC1_IRQ(1)
|
||||||
#define IRQ_LPC32XX_JTAG_COMM_RX LPC32XX_SIC1_IRQ(2)
|
#define IRQ_LPC32XX_JTAG_COMM_RX LPC32XX_SIC1_IRQ(2)
|
||||||
#define IRQ_LPC32XX_GPI_11 LPC32XX_SIC1_IRQ(4)
|
#define IRQ_LPC32XX_GPI_28 LPC32XX_SIC1_IRQ(4)
|
||||||
#define IRQ_LPC32XX_TS_P LPC32XX_SIC1_IRQ(6)
|
#define IRQ_LPC32XX_TS_P LPC32XX_SIC1_IRQ(6)
|
||||||
#define IRQ_LPC32XX_TS_IRQ LPC32XX_SIC1_IRQ(7)
|
#define IRQ_LPC32XX_TS_IRQ LPC32XX_SIC1_IRQ(7)
|
||||||
#define IRQ_LPC32XX_TS_AUX LPC32XX_SIC1_IRQ(8)
|
#define IRQ_LPC32XX_TS_AUX LPC32XX_SIC1_IRQ(8)
|
||||||
|
@ -118,6 +118,10 @@ static const struct lpc32xx_event_info lpc32xx_events[NR_IRQS] = {
|
|||||||
.event_group = &lpc32xx_event_pin_regs,
|
.event_group = &lpc32xx_event_pin_regs,
|
||||||
.mask = LPC32XX_CLKPWR_EXTSRC_GPI_06_BIT,
|
.mask = LPC32XX_CLKPWR_EXTSRC_GPI_06_BIT,
|
||||||
},
|
},
|
||||||
|
[IRQ_LPC32XX_GPI_28] = {
|
||||||
|
.event_group = &lpc32xx_event_pin_regs,
|
||||||
|
.mask = LPC32XX_CLKPWR_EXTSRC_GPI_28_BIT,
|
||||||
|
},
|
||||||
[IRQ_LPC32XX_GPIO_00] = {
|
[IRQ_LPC32XX_GPIO_00] = {
|
||||||
.event_group = &lpc32xx_event_int_regs,
|
.event_group = &lpc32xx_event_int_regs,
|
||||||
.mask = LPC32XX_CLKPWR_INTSRC_GPIO_00_BIT,
|
.mask = LPC32XX_CLKPWR_INTSRC_GPIO_00_BIT,
|
||||||
@ -305,9 +309,18 @@ static int lpc32xx_irq_wake(struct irq_data *d, unsigned int state)
|
|||||||
|
|
||||||
if (state)
|
if (state)
|
||||||
eventreg |= lpc32xx_events[d->irq].mask;
|
eventreg |= lpc32xx_events[d->irq].mask;
|
||||||
else
|
else {
|
||||||
eventreg &= ~lpc32xx_events[d->irq].mask;
|
eventreg &= ~lpc32xx_events[d->irq].mask;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When disabling the wakeup, clear the latched
|
||||||
|
* event
|
||||||
|
*/
|
||||||
|
__raw_writel(lpc32xx_events[d->irq].mask,
|
||||||
|
lpc32xx_events[d->irq].
|
||||||
|
event_group->rawstat_reg);
|
||||||
|
}
|
||||||
|
|
||||||
__raw_writel(eventreg,
|
__raw_writel(eventreg,
|
||||||
lpc32xx_events[d->irq].event_group->enab_reg);
|
lpc32xx_events[d->irq].event_group->enab_reg);
|
||||||
|
|
||||||
@ -380,13 +393,15 @@ void __init lpc32xx_init_irq(void)
|
|||||||
|
|
||||||
/* Setup SIC1 */
|
/* Setup SIC1 */
|
||||||
__raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC1_BASE));
|
__raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC1_BASE));
|
||||||
__raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE));
|
__raw_writel(SIC1_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE));
|
||||||
__raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE));
|
__raw_writel(SIC1_ATR_DEFAULT,
|
||||||
|
LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE));
|
||||||
|
|
||||||
/* Setup SIC2 */
|
/* Setup SIC2 */
|
||||||
__raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC2_BASE));
|
__raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC2_BASE));
|
||||||
__raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE));
|
__raw_writel(SIC2_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE));
|
||||||
__raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE));
|
__raw_writel(SIC2_ATR_DEFAULT,
|
||||||
|
LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE));
|
||||||
|
|
||||||
/* Configure supported IRQ's */
|
/* Configure supported IRQ's */
|
||||||
for (i = 0; i < NR_IRQS; i++) {
|
for (i = 0; i < NR_IRQS; i++) {
|
||||||
|
@ -88,6 +88,7 @@ struct uartinit {
|
|||||||
char *uart_ck_name;
|
char *uart_ck_name;
|
||||||
u32 ck_mode_mask;
|
u32 ck_mode_mask;
|
||||||
void __iomem *pdiv_clk_reg;
|
void __iomem *pdiv_clk_reg;
|
||||||
|
resource_size_t mapbase;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct uartinit uartinit_data[] __initdata = {
|
static struct uartinit uartinit_data[] __initdata = {
|
||||||
@ -97,6 +98,7 @@ static struct uartinit uartinit_data[] __initdata = {
|
|||||||
.ck_mode_mask =
|
.ck_mode_mask =
|
||||||
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 5),
|
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 5),
|
||||||
.pdiv_clk_reg = LPC32XX_CLKPWR_UART5_CLK_CTRL,
|
.pdiv_clk_reg = LPC32XX_CLKPWR_UART5_CLK_CTRL,
|
||||||
|
.mapbase = LPC32XX_UART5_BASE,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARCH_LPC32XX_UART3_SELECT
|
#ifdef CONFIG_ARCH_LPC32XX_UART3_SELECT
|
||||||
@ -105,6 +107,7 @@ static struct uartinit uartinit_data[] __initdata = {
|
|||||||
.ck_mode_mask =
|
.ck_mode_mask =
|
||||||
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 3),
|
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 3),
|
||||||
.pdiv_clk_reg = LPC32XX_CLKPWR_UART3_CLK_CTRL,
|
.pdiv_clk_reg = LPC32XX_CLKPWR_UART3_CLK_CTRL,
|
||||||
|
.mapbase = LPC32XX_UART3_BASE,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARCH_LPC32XX_UART4_SELECT
|
#ifdef CONFIG_ARCH_LPC32XX_UART4_SELECT
|
||||||
@ -113,6 +116,7 @@ static struct uartinit uartinit_data[] __initdata = {
|
|||||||
.ck_mode_mask =
|
.ck_mode_mask =
|
||||||
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 4),
|
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 4),
|
||||||
.pdiv_clk_reg = LPC32XX_CLKPWR_UART4_CLK_CTRL,
|
.pdiv_clk_reg = LPC32XX_CLKPWR_UART4_CLK_CTRL,
|
||||||
|
.mapbase = LPC32XX_UART4_BASE,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARCH_LPC32XX_UART6_SELECT
|
#ifdef CONFIG_ARCH_LPC32XX_UART6_SELECT
|
||||||
@ -121,6 +125,7 @@ static struct uartinit uartinit_data[] __initdata = {
|
|||||||
.ck_mode_mask =
|
.ck_mode_mask =
|
||||||
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 6),
|
LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 6),
|
||||||
.pdiv_clk_reg = LPC32XX_CLKPWR_UART6_CLK_CTRL,
|
.pdiv_clk_reg = LPC32XX_CLKPWR_UART6_CLK_CTRL,
|
||||||
|
.mapbase = LPC32XX_UART6_BASE,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
@ -165,11 +170,24 @@ void __init lpc32xx_serial_init(void)
|
|||||||
|
|
||||||
/* pre-UART clock divider set to 1 */
|
/* pre-UART clock divider set to 1 */
|
||||||
__raw_writel(0x0101, uartinit_data[i].pdiv_clk_reg);
|
__raw_writel(0x0101, uartinit_data[i].pdiv_clk_reg);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force a flush of the RX FIFOs to work around a
|
||||||
|
* HW bug
|
||||||
|
*/
|
||||||
|
puart = uartinit_data[i].mapbase;
|
||||||
|
__raw_writel(0xC1, LPC32XX_UART_IIR_FCR(puart));
|
||||||
|
__raw_writel(0x00, LPC32XX_UART_DLL_FIFO(puart));
|
||||||
|
j = LPC32XX_SUART_FIFO_SIZE;
|
||||||
|
while (j--)
|
||||||
|
tmp = __raw_readl(
|
||||||
|
LPC32XX_UART_DLL_FIFO(puart));
|
||||||
|
__raw_writel(0, LPC32XX_UART_IIR_FCR(puart));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This needs to be done after all UART clocks are setup */
|
/* This needs to be done after all UART clocks are setup */
|
||||||
__raw_writel(clkmodes, LPC32XX_UARTCTL_CLKMODE);
|
__raw_writel(clkmodes, LPC32XX_UARTCTL_CLKMODE);
|
||||||
for (i = 0; i < ARRAY_SIZE(uartinit_data) - 1; i++) {
|
for (i = 0; i < ARRAY_SIZE(uartinit_data); i++) {
|
||||||
/* Force a flush of the RX FIFOs to work around a HW bug */
|
/* Force a flush of the RX FIFOs to work around a HW bug */
|
||||||
puart = serial_std_platform_data[i].mapbase;
|
puart = serial_std_platform_data[i].mapbase;
|
||||||
__raw_writel(0xC1, LPC32XX_UART_IIR_FCR(puart));
|
__raw_writel(0xC1, LPC32XX_UART_IIR_FCR(puart));
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/nand.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
#include <mach/dma.h>
|
#include <mach/dma.h>
|
||||||
#include <mach/devices.h>
|
#include <mach/devices.h>
|
||||||
#include <mach/mfp.h>
|
#include <mach/mfp.h>
|
||||||
#include <linux/platform_device.h>
|
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <mach/pxa168.h>
|
#include <mach/pxa168.h>
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/smc91x.h>
|
#include <linux/smc91x.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
@ -416,13 +416,13 @@ static void __init innovator_init(void)
|
|||||||
#ifdef CONFIG_ARCH_OMAP15XX
|
#ifdef CONFIG_ARCH_OMAP15XX
|
||||||
if (cpu_is_omap1510()) {
|
if (cpu_is_omap1510()) {
|
||||||
omap1_usb_init(&innovator1510_usb_config);
|
omap1_usb_init(&innovator1510_usb_config);
|
||||||
innovator_config[1].data = &innovator1510_lcd_config;
|
innovator_config[0].data = &innovator1510_lcd_config;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARCH_OMAP16XX
|
#ifdef CONFIG_ARCH_OMAP16XX
|
||||||
if (cpu_is_omap1610()) {
|
if (cpu_is_omap1610()) {
|
||||||
omap1_usb_init(&h2_usb_config);
|
omap1_usb_init(&h2_usb_config);
|
||||||
innovator_config[1].data = &innovator1610_lcd_config;
|
innovator_config[0].data = &innovator1610_lcd_config;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
omap_board_config = innovator_config;
|
omap_board_config = innovator_config;
|
||||||
|
@ -364,8 +364,8 @@ config OMAP3_SDRC_AC_TIMING
|
|||||||
going on could result in system crashes;
|
going on could result in system crashes;
|
||||||
|
|
||||||
config OMAP4_ERRATA_I688
|
config OMAP4_ERRATA_I688
|
||||||
bool "OMAP4 errata: Async Bridge Corruption (BROKEN)"
|
bool "OMAP4 errata: Async Bridge Corruption"
|
||||||
depends on ARCH_OMAP4 && BROKEN
|
depends on ARCH_OMAP4
|
||||||
select ARCH_HAS_BARRIERS
|
select ARCH_HAS_BARRIERS
|
||||||
help
|
help
|
||||||
If a data is stalled inside asynchronous bridge because of back
|
If a data is stalled inside asynchronous bridge because of back
|
||||||
|
@ -381,7 +381,7 @@ static int omap3evm_twl_gpio_setup(struct device *dev,
|
|||||||
gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
|
gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
|
||||||
|
|
||||||
/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
|
/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
|
||||||
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
gpio_leds[0].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
||||||
|
|
||||||
platform_device_register(&leds_gpio);
|
platform_device_register(&leds_gpio);
|
||||||
|
|
||||||
|
@ -132,6 +132,7 @@ void omap3_map_io(void);
|
|||||||
void am33xx_map_io(void);
|
void am33xx_map_io(void);
|
||||||
void omap4_map_io(void);
|
void omap4_map_io(void);
|
||||||
void ti81xx_map_io(void);
|
void ti81xx_map_io(void);
|
||||||
|
void omap_barriers_init(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* omap_test_timeout - busy-loop, testing a condition
|
* omap_test_timeout - busy-loop, testing a condition
|
||||||
|
@ -65,7 +65,6 @@ static int omap4_enter_idle(struct cpuidle_device *dev,
|
|||||||
struct timespec ts_preidle, ts_postidle, ts_idle;
|
struct timespec ts_preidle, ts_postidle, ts_idle;
|
||||||
u32 cpu1_state;
|
u32 cpu1_state;
|
||||||
int idle_time;
|
int idle_time;
|
||||||
int new_state_idx;
|
|
||||||
int cpu_id = smp_processor_id();
|
int cpu_id = smp_processor_id();
|
||||||
|
|
||||||
/* Used to keep track of the total time in idle */
|
/* Used to keep track of the total time in idle */
|
||||||
@ -84,8 +83,8 @@ static int omap4_enter_idle(struct cpuidle_device *dev,
|
|||||||
*/
|
*/
|
||||||
cpu1_state = pwrdm_read_pwrst(cpu1_pd);
|
cpu1_state = pwrdm_read_pwrst(cpu1_pd);
|
||||||
if (cpu1_state != PWRDM_POWER_OFF) {
|
if (cpu1_state != PWRDM_POWER_OFF) {
|
||||||
new_state_idx = drv->safe_state_index;
|
index = drv->safe_state_index;
|
||||||
cx = cpuidle_get_statedata(&dev->states_usage[new_state_idx]);
|
cx = cpuidle_get_statedata(&dev->states_usage[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
|
|
||||||
#include <plat/board.h>
|
#include <plat/board.h>
|
||||||
#include <plat/gpmc.h>
|
#include <plat/gpmc.h>
|
||||||
@ -42,6 +44,50 @@ static struct smsc911x_platform_config gpmc_smsc911x_config = {
|
|||||||
.flags = SMSC911X_USE_16BIT,
|
.flags = SMSC911X_USE_16BIT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply gpmc_smsc911x_supply[] = {
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Generic regulator definition to satisfy smsc911x */
|
||||||
|
static struct regulator_init_data gpmc_smsc911x_reg_init_data = {
|
||||||
|
.constraints = {
|
||||||
|
.min_uV = 3300000,
|
||||||
|
.max_uV = 3300000,
|
||||||
|
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||||
|
| REGULATOR_MODE_STANDBY,
|
||||||
|
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||||
|
| REGULATOR_CHANGE_STATUS,
|
||||||
|
},
|
||||||
|
.num_consumer_supplies = ARRAY_SIZE(gpmc_smsc911x_supply),
|
||||||
|
.consumer_supplies = gpmc_smsc911x_supply,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct fixed_voltage_config gpmc_smsc911x_fixed_reg_data = {
|
||||||
|
.supply_name = "gpmc_smsc911x",
|
||||||
|
.microvolts = 3300000,
|
||||||
|
.gpio = -EINVAL,
|
||||||
|
.startup_delay = 0,
|
||||||
|
.enable_high = 0,
|
||||||
|
.enabled_at_boot = 1,
|
||||||
|
.init_data = &gpmc_smsc911x_reg_init_data,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Platform device id of 42 is a temporary fix to avoid conflicts
|
||||||
|
* with other reg-fixed-voltage devices. The real fix should
|
||||||
|
* involve the driver core providing a way of dynamically
|
||||||
|
* assigning a unique id on registration for platform devices
|
||||||
|
* in the same name space.
|
||||||
|
*/
|
||||||
|
static struct platform_device gpmc_smsc911x_regulator = {
|
||||||
|
.name = "reg-fixed-voltage",
|
||||||
|
.id = 42,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &gpmc_smsc911x_fixed_reg_data,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize smsc911x device connected to the GPMC. Note that we
|
* Initialize smsc911x device connected to the GPMC. Note that we
|
||||||
* assume that pin multiplexing is done in the board-*.c file,
|
* assume that pin multiplexing is done in the board-*.c file,
|
||||||
@ -55,6 +101,12 @@ void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *board_data)
|
|||||||
|
|
||||||
gpmc_cfg = board_data;
|
gpmc_cfg = board_data;
|
||||||
|
|
||||||
|
ret = platform_device_register(&gpmc_smsc911x_regulator);
|
||||||
|
if (ret < 0) {
|
||||||
|
pr_err("Unable to register smsc911x regulators: %d\n", ret);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) {
|
if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) {
|
||||||
pr_err("Failed to request GPMC mem region\n");
|
pr_err("Failed to request GPMC mem region\n");
|
||||||
return;
|
return;
|
||||||
|
@ -306,6 +306,7 @@ void __init omapam33xx_map_common_io(void)
|
|||||||
void __init omap44xx_map_common_io(void)
|
void __init omap44xx_map_common_io(void)
|
||||||
{
|
{
|
||||||
iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc));
|
iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc));
|
||||||
|
omap_barriers_init();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -281,8 +281,16 @@ static struct omap_mbox mbox_iva_info = {
|
|||||||
.ops = &omap2_mbox_ops,
|
.ops = &omap2_mbox_ops,
|
||||||
.priv = &omap2_mbox_iva_priv,
|
.priv = &omap2_mbox_iva_priv,
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
struct omap_mbox *omap2_mboxes[] = { &mbox_dsp_info, &mbox_iva_info, NULL };
|
#ifdef CONFIG_ARCH_OMAP2
|
||||||
|
struct omap_mbox *omap2_mboxes[] = {
|
||||||
|
&mbox_dsp_info,
|
||||||
|
#ifdef CONFIG_SOC_OMAP2420
|
||||||
|
&mbox_iva_info,
|
||||||
|
#endif
|
||||||
|
NULL
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_ARCH_OMAP4)
|
#if defined(CONFIG_ARCH_OMAP4)
|
||||||
@ -412,7 +420,8 @@ static void __exit omap2_mbox_exit(void)
|
|||||||
platform_driver_unregister(&omap2_mbox_driver);
|
platform_driver_unregister(&omap2_mbox_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(omap2_mbox_init);
|
/* must be ready before omap3isp is probed */
|
||||||
|
subsys_initcall(omap2_mbox_init);
|
||||||
module_exit(omap2_mbox_exit);
|
module_exit(omap2_mbox_exit);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
MODULE_LICENSE("GPL v2");
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include <plat/irqs.h>
|
#include <plat/irqs.h>
|
||||||
#include <plat/sram.h>
|
#include <plat/sram.h>
|
||||||
|
#include <plat/omap-secure.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/omap-wakeupgen.h>
|
#include <mach/omap-wakeupgen.h>
|
||||||
@ -43,6 +44,9 @@ static void __iomem *sar_ram_base;
|
|||||||
|
|
||||||
void __iomem *dram_sync, *sram_sync;
|
void __iomem *dram_sync, *sram_sync;
|
||||||
|
|
||||||
|
static phys_addr_t paddr;
|
||||||
|
static u32 size;
|
||||||
|
|
||||||
void omap_bus_sync(void)
|
void omap_bus_sync(void)
|
||||||
{
|
{
|
||||||
if (dram_sync && sram_sync) {
|
if (dram_sync && sram_sync) {
|
||||||
@ -52,18 +56,20 @@ void omap_bus_sync(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init omap_barriers_init(void)
|
/* Steal one page physical memory for barrier implementation */
|
||||||
|
int __init omap_barrier_reserve_memblock(void)
|
||||||
{
|
{
|
||||||
struct map_desc dram_io_desc[1];
|
|
||||||
phys_addr_t paddr;
|
|
||||||
u32 size;
|
|
||||||
|
|
||||||
if (!cpu_is_omap44xx())
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
size = ALIGN(PAGE_SIZE, SZ_1M);
|
size = ALIGN(PAGE_SIZE, SZ_1M);
|
||||||
paddr = arm_memblock_steal(size, SZ_1M);
|
paddr = arm_memblock_steal(size, SZ_1M);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init omap_barriers_init(void)
|
||||||
|
{
|
||||||
|
struct map_desc dram_io_desc[1];
|
||||||
|
|
||||||
dram_io_desc[0].virtual = OMAP4_DRAM_BARRIER_VA;
|
dram_io_desc[0].virtual = OMAP4_DRAM_BARRIER_VA;
|
||||||
dram_io_desc[0].pfn = __phys_to_pfn(paddr);
|
dram_io_desc[0].pfn = __phys_to_pfn(paddr);
|
||||||
dram_io_desc[0].length = size;
|
dram_io_desc[0].length = size;
|
||||||
@ -75,9 +81,10 @@ static int __init omap_barriers_init(void)
|
|||||||
pr_info("OMAP4: Map 0x%08llx to 0x%08lx for dram barrier\n",
|
pr_info("OMAP4: Map 0x%08llx to 0x%08lx for dram barrier\n",
|
||||||
(long long) paddr, dram_io_desc[0].virtual);
|
(long long) paddr, dram_io_desc[0].virtual);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
core_initcall(omap_barriers_init);
|
#else
|
||||||
|
void __init omap_barriers_init(void)
|
||||||
|
{}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void __init gic_init_irq(void)
|
void __init gic_init_irq(void)
|
||||||
|
@ -174,14 +174,17 @@ static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name,
|
|||||||
freq = clk->rate;
|
freq = clk->rate;
|
||||||
clk_put(clk);
|
clk_put(clk);
|
||||||
|
|
||||||
|
rcu_read_lock();
|
||||||
opp = opp_find_freq_ceil(dev, &freq);
|
opp = opp_find_freq_ceil(dev, &freq);
|
||||||
if (IS_ERR(opp)) {
|
if (IS_ERR(opp)) {
|
||||||
|
rcu_read_unlock();
|
||||||
pr_err("%s: unable to find boot up OPP for vdd_%s\n",
|
pr_err("%s: unable to find boot up OPP for vdd_%s\n",
|
||||||
__func__, vdd_name);
|
__func__, vdd_name);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
bootup_volt = opp_get_voltage(opp);
|
bootup_volt = opp_get_voltage(opp);
|
||||||
|
rcu_read_unlock();
|
||||||
if (!bootup_volt) {
|
if (!bootup_volt) {
|
||||||
pr_err("%s: unable to find voltage corresponding "
|
pr_err("%s: unable to find voltage corresponding "
|
||||||
"to the bootup OPP for vdd_%s\n", __func__, vdd_name);
|
"to the bootup OPP for vdd_%s\n", __func__, vdd_name);
|
||||||
|
@ -486,7 +486,7 @@ static void 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(const struct usbhs_omap_board_data *pdata)
|
||||||
{
|
{
|
||||||
struct omap_hwmod *oh[2];
|
struct omap_hwmod *oh[2];
|
||||||
struct omap_device *od;
|
struct platform_device *pdev;
|
||||||
int bus_id = -1;
|
int bus_id = -1;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -522,11 +522,11 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2,
|
pdev = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2,
|
||||||
(void *)&usbhs_data, sizeof(usbhs_data),
|
(void *)&usbhs_data, sizeof(usbhs_data),
|
||||||
omap_uhhtll_latency,
|
omap_uhhtll_latency,
|
||||||
ARRAY_SIZE(omap_uhhtll_latency), false);
|
ARRAY_SIZE(omap_uhhtll_latency), false);
|
||||||
if (IS_ERR(od)) {
|
if (IS_ERR(pdev)) {
|
||||||
pr_err("Could not build hwmod devices %s,%s\n",
|
pr_err("Could not build hwmod devices %s,%s\n",
|
||||||
USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME);
|
USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME);
|
||||||
return;
|
return;
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#include <mach/hx4700.h>
|
#include <mach/hx4700.h>
|
||||||
#include <mach/irda.h>
|
#include <mach/irda.h>
|
||||||
|
|
||||||
|
#include <sound/ak4641.h>
|
||||||
#include <video/platform_lcd.h>
|
#include <video/platform_lcd.h>
|
||||||
#include <video/w100fb.h>
|
#include <video/w100fb.h>
|
||||||
|
|
||||||
@ -764,6 +765,28 @@ static struct i2c_board_info __initdata pi2c_board_info[] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Asahi Kasei AK4641 on I2C
|
||||||
|
*/
|
||||||
|
|
||||||
|
static struct ak4641_platform_data ak4641_info = {
|
||||||
|
.gpio_power = GPIO27_HX4700_CODEC_ON,
|
||||||
|
.gpio_npdn = GPIO109_HX4700_CODEC_nPDN,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct i2c_board_info i2c_board_info[] __initdata = {
|
||||||
|
{
|
||||||
|
I2C_BOARD_INFO("ak4641", 0x12),
|
||||||
|
.platform_data = &ak4641_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device audio = {
|
||||||
|
.name = "hx4700-audio",
|
||||||
|
.id = -1,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PCMCIA
|
* PCMCIA
|
||||||
*/
|
*/
|
||||||
@ -790,6 +813,7 @@ static struct platform_device *devices[] __initdata = {
|
|||||||
&gpio_vbus,
|
&gpio_vbus,
|
||||||
&power_supply,
|
&power_supply,
|
||||||
&strataflash,
|
&strataflash,
|
||||||
|
&audio,
|
||||||
&pcmcia,
|
&pcmcia,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -827,6 +851,7 @@ static void __init hx4700_init(void)
|
|||||||
pxa_set_ficp_info(&ficp_info);
|
pxa_set_ficp_info(&ficp_info);
|
||||||
pxa27x_set_i2c_power_info(NULL);
|
pxa27x_set_i2c_power_info(NULL);
|
||||||
pxa_set_i2c_info(NULL);
|
pxa_set_i2c_info(NULL);
|
||||||
|
i2c_register_board_info(0, ARRAY_AND_SIZE(i2c_board_info));
|
||||||
i2c_register_board_info(1, ARRAY_AND_SIZE(pi2c_board_info));
|
i2c_register_board_info(1, ARRAY_AND_SIZE(pi2c_board_info));
|
||||||
pxa2xx_set_spi_info(2, &pxa_ssp2_master_info);
|
pxa2xx_set_spi_info(2, &pxa_ssp2_master_info);
|
||||||
spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info));
|
spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info));
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
#include <linux/suspend.h>
|
#include <linux/suspend.h>
|
||||||
#include <linux/syscore_ops.h>
|
#include <linux/syscore_ops.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
#include <asm/suspend.h>
|
#include <asm/suspend.h>
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/i2c/pxa-i2c.h>
|
#include <linux/i2c/pxa-i2c.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/i2c/pxa-i2c.h>
|
#include <linux/i2c/pxa-i2c.h>
|
||||||
#include <linux/mfd/88pm860x.h>
|
#include <linux/mfd/88pm860x.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
@ -168,6 +168,7 @@ struct battery_thresh sharpsl_battery_levels_noac[] = {
|
|||||||
#define MAXCTRL_SEL_SH 4
|
#define MAXCTRL_SEL_SH 4
|
||||||
#define MAXCTRL_STR (1u << 7)
|
#define MAXCTRL_STR (1u << 7)
|
||||||
|
|
||||||
|
extern int max1111_read_channel(int);
|
||||||
/*
|
/*
|
||||||
* Read MAX1111 ADC
|
* Read MAX1111 ADC
|
||||||
*/
|
*/
|
||||||
@ -177,8 +178,6 @@ int sharpsl_pm_pxa_read_max1111(int channel)
|
|||||||
if (machine_is_tosa())
|
if (machine_is_tosa())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
extern int max1111_read_channel(int);
|
|
||||||
|
|
||||||
/* max1111 accepts channels from 0-3, however,
|
/* max1111 accepts channels from 0-3, however,
|
||||||
* it is encoded from 0-7 here in the code.
|
* it is encoded from 0-7 here in the code.
|
||||||
*/
|
*/
|
||||||
|
@ -172,10 +172,9 @@ static int spitz_should_wakeup(unsigned int resume_on_alarm)
|
|||||||
static unsigned long spitz_charger_wakeup(void)
|
static unsigned long spitz_charger_wakeup(void)
|
||||||
{
|
{
|
||||||
unsigned long ret;
|
unsigned long ret;
|
||||||
ret = (!gpio_get_value(SPITZ_GPIO_KEY_INT)
|
ret = ((!gpio_get_value(SPITZ_GPIO_KEY_INT)
|
||||||
<< GPIO_bit(SPITZ_GPIO_KEY_INT))
|
<< GPIO_bit(SPITZ_GPIO_KEY_INT))
|
||||||
| (!gpio_get_value(SPITZ_GPIO_SYNC)
|
| gpio_get_value(SPITZ_GPIO_SYNC));
|
||||||
<< GPIO_bit(SPITZ_GPIO_SYNC));
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,15 +139,15 @@
|
|||||||
#define MX25_PAD_NFRB__GPIO_3_31 IOMUX_PAD(0x27c, 0x084, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_NFRB__GPIO_3_31 IOMUX_PAD(0x27c, 0x084, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_D15__D15 IOMUX_PAD(0x280, 0x088, 0x00, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D15__D15 IOMUX_PAD(0x280, 0x088, 0x00, 0, 0, NO_PAD_CTRL)
|
||||||
#define MX25_PAD_D15__LD16 IOMUX_PAD(0x280, 0x088, 0x01, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D15__LD16 IOMUX_PAD(0x280, 0x088, 0x01, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_D15__GPIO_4_5 IOMUX_PAD(0x280, 0x088, 0x05, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D15__GPIO_4_5 IOMUX_PAD(0x280, 0x088, 0x05, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_D14__D14 IOMUX_PAD(0x284, 0x08c, 0x00, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D14__D14 IOMUX_PAD(0x284, 0x08c, 0x00, 0, 0, NO_PAD_CTRL)
|
||||||
#define MX25_PAD_D14__LD17 IOMUX_PAD(0x284, 0x08c, 0x01, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D14__LD17 IOMUX_PAD(0x284, 0x08c, 0x01, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_D14__GPIO_4_6 IOMUX_PAD(0x284, 0x08c, 0x05, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D14__GPIO_4_6 IOMUX_PAD(0x284, 0x08c, 0x05, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_D13__D13 IOMUX_PAD(0x288, 0x090, 0x00, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D13__D13 IOMUX_PAD(0x288, 0x090, 0x00, 0, 0, NO_PAD_CTRL)
|
||||||
#define MX25_PAD_D13__LD18 IOMUX_PAD(0x288, 0x090, 0x01, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D13__LD18 IOMUX_PAD(0x288, 0x090, 0x01, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_D13__GPIO_4_7 IOMUX_PAD(0x288, 0x090, 0x05, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D13__GPIO_4_7 IOMUX_PAD(0x288, 0x090, 0x05, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_D12__D12 IOMUX_PAD(0x28c, 0x094, 0x00, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D12__D12 IOMUX_PAD(0x28c, 0x094, 0x00, 0, 0, NO_PAD_CTRL)
|
||||||
@ -192,54 +192,54 @@
|
|||||||
#define MX25_PAD_D0__D0 IOMUX_PAD(0x2bc, 0x0c4, 0x00, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D0__D0 IOMUX_PAD(0x2bc, 0x0c4, 0x00, 0, 0, NO_PAD_CTRL)
|
||||||
#define MX25_PAD_D0__GPIO_4_20 IOMUX_PAD(0x2bc, 0x0c4, 0x05, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_D0__GPIO_4_20 IOMUX_PAD(0x2bc, 0x0c4, 0x05, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD0__LD0 IOMUX_PAD(0x2c0, 0x0c8, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD0__LD0 IOMUX_PAD(0x2c0, 0x0c8, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD0__CSI_D0 IOMUX_PAD(0x2c0, 0x0c8, 0x12, 0x488, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD0__CSI_D0 IOMUX_PAD(0x2c0, 0x0c8, 0x12, 0x488, 0, NO_PAD_CTRL)
|
||||||
#define MX25_PAD_LD0__GPIO_2_15 IOMUX_PAD(0x2c0, 0x0c8, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD0__GPIO_2_15 IOMUX_PAD(0x2c0, 0x0c8, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD1__LD1 IOMUX_PAD(0x2c4, 0x0cc, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD1__LD1 IOMUX_PAD(0x2c4, 0x0cc, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD1__CSI_D1 IOMUX_PAD(0x2c4, 0x0cc, 0x12, 0x48c, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD1__CSI_D1 IOMUX_PAD(0x2c4, 0x0cc, 0x12, 0x48c, 0, NO_PAD_CTRL)
|
||||||
#define MX25_PAD_LD1__GPIO_2_16 IOMUX_PAD(0x2c4, 0x0cc, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD1__GPIO_2_16 IOMUX_PAD(0x2c4, 0x0cc, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD2__LD2 IOMUX_PAD(0x2c8, 0x0d0, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD2__LD2 IOMUX_PAD(0x2c8, 0x0d0, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD2__GPIO_2_17 IOMUX_PAD(0x2c8, 0x0d0, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD2__GPIO_2_17 IOMUX_PAD(0x2c8, 0x0d0, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD3__LD3 IOMUX_PAD(0x2cc, 0x0d4, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD3__LD3 IOMUX_PAD(0x2cc, 0x0d4, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD3__GPIO_2_18 IOMUX_PAD(0x2cc, 0x0d4, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD3__GPIO_2_18 IOMUX_PAD(0x2cc, 0x0d4, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD4__LD4 IOMUX_PAD(0x2d0, 0x0d8, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD4__LD4 IOMUX_PAD(0x2d0, 0x0d8, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD4__GPIO_2_19 IOMUX_PAD(0x2d0, 0x0d8, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD4__GPIO_2_19 IOMUX_PAD(0x2d0, 0x0d8, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD5__LD5 IOMUX_PAD(0x2d4, 0x0dc, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD5__LD5 IOMUX_PAD(0x2d4, 0x0dc, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD5__GPIO_1_19 IOMUX_PAD(0x2d4, 0x0dc, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD5__GPIO_1_19 IOMUX_PAD(0x2d4, 0x0dc, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD6__LD6 IOMUX_PAD(0x2d8, 0x0e0, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD6__LD6 IOMUX_PAD(0x2d8, 0x0e0, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD6__GPIO_1_20 IOMUX_PAD(0x2d8, 0x0e0, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD6__GPIO_1_20 IOMUX_PAD(0x2d8, 0x0e0, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD7__LD7 IOMUX_PAD(0x2dc, 0x0e4, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD7__LD7 IOMUX_PAD(0x2dc, 0x0e4, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD7__GPIO_1_21 IOMUX_PAD(0x2dc, 0x0e4, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD7__GPIO_1_21 IOMUX_PAD(0x2dc, 0x0e4, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD8__LD8 IOMUX_PAD(0x2e0, 0x0e8, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD8__LD8 IOMUX_PAD(0x2e0, 0x0e8, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD8__FEC_TX_ERR IOMUX_PAD(0x2e0, 0x0e8, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD8__FEC_TX_ERR IOMUX_PAD(0x2e0, 0x0e8, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD9__LD9 IOMUX_PAD(0x2e4, 0x0ec, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD9__LD9 IOMUX_PAD(0x2e4, 0x0ec, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD9__FEC_COL IOMUX_PAD(0x2e4, 0x0ec, 0x15, 0x504, 1, NO_PAD_CTRL)
|
#define MX25_PAD_LD9__FEC_COL IOMUX_PAD(0x2e4, 0x0ec, 0x15, 0x504, 1, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD10__LD10 IOMUX_PAD(0x2e8, 0x0f0, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD10__LD10 IOMUX_PAD(0x2e8, 0x0f0, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD10__FEC_RX_ER IOMUX_PAD(0x2e8, 0x0f0, 0x15, 0x518, 1, NO_PAD_CTRL)
|
#define MX25_PAD_LD10__FEC_RX_ER IOMUX_PAD(0x2e8, 0x0f0, 0x15, 0x518, 1, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD11__LD11 IOMUX_PAD(0x2ec, 0x0f4, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD11__LD11 IOMUX_PAD(0x2ec, 0x0f4, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD11__FEC_RDATA2 IOMUX_PAD(0x2ec, 0x0f4, 0x15, 0x50c, 1, NO_PAD_CTRL)
|
#define MX25_PAD_LD11__FEC_RDATA2 IOMUX_PAD(0x2ec, 0x0f4, 0x15, 0x50c, 1, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD12__LD12 IOMUX_PAD(0x2f0, 0x0f8, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD12__LD12 IOMUX_PAD(0x2f0, 0x0f8, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD12__FEC_RDATA3 IOMUX_PAD(0x2f0, 0x0f8, 0x15, 0x510, 1, NO_PAD_CTRL)
|
#define MX25_PAD_LD12__FEC_RDATA3 IOMUX_PAD(0x2f0, 0x0f8, 0x15, 0x510, 1, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD13__LD13 IOMUX_PAD(0x2f4, 0x0fc, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD13__LD13 IOMUX_PAD(0x2f4, 0x0fc, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD13__FEC_TDATA2 IOMUX_PAD(0x2f4, 0x0fc, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD13__FEC_TDATA2 IOMUX_PAD(0x2f4, 0x0fc, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD14__LD14 IOMUX_PAD(0x2f8, 0x100, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD14__LD14 IOMUX_PAD(0x2f8, 0x100, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD14__FEC_TDATA3 IOMUX_PAD(0x2f8, 0x100, 0x15, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD14__FEC_TDATA3 IOMUX_PAD(0x2f8, 0x100, 0x15, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_LD15__LD15 IOMUX_PAD(0x2fc, 0x104, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_LD15__LD15 IOMUX_PAD(0x2fc, 0x104, 0x10, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_LD15__FEC_RX_CLK IOMUX_PAD(0x2fc, 0x104, 0x15, 0x514, 1, NO_PAD_CTRL)
|
#define MX25_PAD_LD15__FEC_RX_CLK IOMUX_PAD(0x2fc, 0x104, 0x15, 0x514, 1, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_HSYNC__HSYNC IOMUX_PAD(0x300, 0x108, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_HSYNC__HSYNC IOMUX_PAD(0x300, 0x108, 0x10, 0, 0, NO_PAD_CTRL)
|
||||||
@ -468,11 +468,11 @@
|
|||||||
#define MX25_PAD_GPIO_C__CAN2_TX IOMUX_PAD(0x3f8, 0x1fc, 0x16, 0, 0, PAD_CTL_PUS_22K_UP)
|
#define MX25_PAD_GPIO_C__CAN2_TX IOMUX_PAD(0x3f8, 0x1fc, 0x16, 0, 0, PAD_CTL_PUS_22K_UP)
|
||||||
|
|
||||||
#define MX25_PAD_GPIO_D__GPIO_D IOMUX_PAD(0x3fc, 0x200, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_GPIO_D__GPIO_D IOMUX_PAD(0x3fc, 0x200, 0x10, 0, 0, NO_PAD_CTRL)
|
||||||
#define MX25_PAD_GPIO_E__LD16 IOMUX_PAD(0x400, 0x204, 0x02, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_GPIO_E__LD16 IOMUX_PAD(0x400, 0x204, 0x02, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_GPIO_D__CAN2_RX IOMUX_PAD(0x3fc, 0x200, 0x16, 0x484, 1, PAD_CTL_PUS_22K_UP)
|
#define MX25_PAD_GPIO_D__CAN2_RX IOMUX_PAD(0x3fc, 0x200, 0x16, 0x484, 1, PAD_CTL_PUS_22K_UP)
|
||||||
|
|
||||||
#define MX25_PAD_GPIO_E__GPIO_E IOMUX_PAD(0x400, 0x204, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_GPIO_E__GPIO_E IOMUX_PAD(0x400, 0x204, 0x10, 0, 0, NO_PAD_CTRL)
|
||||||
#define MX25_PAD_GPIO_F__LD17 IOMUX_PAD(0x404, 0x208, 0x02, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_GPIO_F__LD17 IOMUX_PAD(0x404, 0x208, 0x02, 0, 0, PAD_CTL_SRE_FAST)
|
||||||
#define MX25_PAD_GPIO_E__AUD7_TXD IOMUX_PAD(0x400, 0x204, 0x14, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_GPIO_E__AUD7_TXD IOMUX_PAD(0x400, 0x204, 0x14, 0, 0, NO_PAD_CTRL)
|
||||||
|
|
||||||
#define MX25_PAD_GPIO_F__GPIO_F IOMUX_PAD(0x404, 0x208, 0x10, 0, 0, NO_PAD_CTRL)
|
#define MX25_PAD_GPIO_F__GPIO_F IOMUX_PAD(0x404, 0x208, 0x10, 0, 0, NO_PAD_CTRL)
|
||||||
|
@ -69,6 +69,7 @@ void __init omap_reserve(void)
|
|||||||
omap_vram_reserve_sdram_memblock();
|
omap_vram_reserve_sdram_memblock();
|
||||||
omap_dsp_reserve_sdram_memblock();
|
omap_dsp_reserve_sdram_memblock();
|
||||||
omap_secure_ram_reserve_memblock();
|
omap_secure_ram_reserve_memblock();
|
||||||
|
omap_barrier_reserve_memblock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init omap_init_consistent_dma_size(void)
|
void __init omap_init_consistent_dma_size(void)
|
||||||
|
@ -10,4 +10,10 @@ static inline void omap_secure_ram_reserve_memblock(void)
|
|||||||
{ }
|
{ }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_OMAP4_ERRATA_I688
|
||||||
|
extern int omap_barrier_reserve_memblock(void);
|
||||||
|
#else
|
||||||
|
static inline void omap_barrier_reserve_memblock(void)
|
||||||
|
{ }
|
||||||
|
#endif
|
||||||
#endif /* __OMAP_SECURE_H__ */
|
#endif /* __OMAP_SECURE_H__ */
|
||||||
|
@ -77,7 +77,6 @@ struct pt_regs {
|
|||||||
long syscallno; /* Syscall number (used by strace) */
|
long syscallno; /* Syscall number (used by strace) */
|
||||||
long dummy; /* Cheap alignment fix */
|
long dummy; /* Cheap alignment fix */
|
||||||
};
|
};
|
||||||
#endif /* __ASSEMBLY__ */
|
|
||||||
|
|
||||||
/* TODO: Rename this to REDZONE because that's what it is */
|
/* TODO: Rename this to REDZONE because that's what it is */
|
||||||
#define STACK_FRAME_OVERHEAD 128 /* size of minimum stack frame */
|
#define STACK_FRAME_OVERHEAD 128 /* size of minimum stack frame */
|
||||||
@ -87,6 +86,13 @@ struct pt_regs {
|
|||||||
#define user_stack_pointer(regs) ((unsigned long)(regs)->sp)
|
#define user_stack_pointer(regs) ((unsigned long)(regs)->sp)
|
||||||
#define profile_pc(regs) instruction_pointer(regs)
|
#define profile_pc(regs) instruction_pointer(regs)
|
||||||
|
|
||||||
|
static inline long regs_return_value(struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
return regs->gpr[11];
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Offsets used by 'ptrace' system call interface.
|
* Offsets used by 'ptrace' system call interface.
|
||||||
*/
|
*/
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include <linux/init_task.h>
|
#include <linux/init_task.h>
|
||||||
#include <linux/mqueue.h>
|
#include <linux/mqueue.h>
|
||||||
|
#include <linux/export.h>
|
||||||
|
|
||||||
static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
|
static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
|
||||||
static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
|
static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
#include <linux/kernel_stat.h>
|
#include <linux/kernel_stat.h>
|
||||||
|
#include <linux/export.h>
|
||||||
|
|
||||||
#include <linux/irqflags.h>
|
#include <linux/irqflags.h>
|
||||||
|
|
||||||
|
@ -188,11 +188,9 @@ asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)
|
|||||||
*/
|
*/
|
||||||
ret = -1L;
|
ret = -1L;
|
||||||
|
|
||||||
/* Are these regs right??? */
|
audit_syscall_entry(audit_arch(), regs->syscallno,
|
||||||
if (unlikely(current->audit_context))
|
regs->gpr[3], regs->gpr[4],
|
||||||
audit_syscall_entry(audit_arch(), regs->syscallno,
|
regs->gpr[5], regs->gpr[6]);
|
||||||
regs->gpr[3], regs->gpr[4],
|
|
||||||
regs->gpr[5], regs->gpr[6]);
|
|
||||||
|
|
||||||
return ret ? : regs->syscallno;
|
return ret ? : regs->syscallno;
|
||||||
}
|
}
|
||||||
@ -201,9 +199,7 @@ asmlinkage void do_syscall_trace_leave(struct pt_regs *regs)
|
|||||||
{
|
{
|
||||||
int step;
|
int step;
|
||||||
|
|
||||||
if (unlikely(current->audit_context))
|
audit_syscall_exit(regs);
|
||||||
audit_syscall_exit(AUDITSC_RESULT(regs->gpr[11]),
|
|
||||||
regs->gpr[11]);
|
|
||||||
|
|
||||||
step = test_thread_flag(TIF_SINGLESTEP);
|
step = test_thread_flag(TIF_SINGLESTEP);
|
||||||
if (step || test_thread_flag(TIF_SYSCALL_TRACE))
|
if (step || test_thread_flag(TIF_SYSCALL_TRACE))
|
||||||
|
@ -31,7 +31,11 @@ ifdef CONFIG_64BIT
|
|||||||
UTS_MACHINE := parisc64
|
UTS_MACHINE := parisc64
|
||||||
CHECKFLAGS += -D__LP64__=1 -m64
|
CHECKFLAGS += -D__LP64__=1 -m64
|
||||||
WIDTH := 64
|
WIDTH := 64
|
||||||
|
|
||||||
|
# FIXME: if no default set, should really try to locate dynamically
|
||||||
|
ifeq ($(CROSS_COMPILE),)
|
||||||
CROSS_COMPILE := hppa64-linux-gnu-
|
CROSS_COMPILE := hppa64-linux-gnu-
|
||||||
|
endif
|
||||||
else # 32-bit
|
else # 32-bit
|
||||||
WIDTH :=
|
WIDTH :=
|
||||||
endif
|
endif
|
||||||
|
@ -227,6 +227,9 @@ config COMPAT
|
|||||||
config SYSVIPC_COMPAT
|
config SYSVIPC_COMPAT
|
||||||
def_bool y if COMPAT && SYSVIPC
|
def_bool y if COMPAT && SYSVIPC
|
||||||
|
|
||||||
|
config KEYS_COMPAT
|
||||||
|
def_bool y if COMPAT && KEYS
|
||||||
|
|
||||||
config AUDIT_ARCH
|
config AUDIT_ARCH
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
|
@ -172,13 +172,6 @@ static inline int is_compat_task(void)
|
|||||||
return is_32bit_task();
|
return is_32bit_task();
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static inline int is_compat_task(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline void __user *arch_compat_alloc_user_space(long len)
|
static inline void __user *arch_compat_alloc_user_space(long len)
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/gfp.h>
|
#include <linux/gfp.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/crash_dump.h>
|
|
||||||
#include <linux/bootmem.h>
|
#include <linux/bootmem.h>
|
||||||
#include <linux/elf.h>
|
#include <linux/elf.h>
|
||||||
#include <asm/ipl.h>
|
#include <asm/ipl.h>
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/timer.h>
|
#include <asm/timer.h>
|
||||||
#include <asm/nmi.h>
|
#include <asm/nmi.h>
|
||||||
#include <asm/compat.h>
|
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
#include "entry.h"
|
#include "entry.h"
|
||||||
|
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
#include <linux/regset.h>
|
#include <linux/regset.h>
|
||||||
#include <linux/tracehook.h>
|
#include <linux/tracehook.h>
|
||||||
#include <linux/seccomp.h>
|
#include <linux/seccomp.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
#include <trace/syscall.h>
|
#include <trace/syscall.h>
|
||||||
#include <asm/compat.h>
|
|
||||||
#include <asm/segment.h>
|
#include <asm/segment.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#include <linux/kexec.h>
|
#include <linux/kexec.h>
|
||||||
#include <linux/crash_dump.h>
|
#include <linux/crash_dump.h>
|
||||||
#include <linux/memory.h>
|
#include <linux/memory.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
|
|
||||||
#include <asm/ipl.h>
|
#include <asm/ipl.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
@ -59,7 +60,6 @@
|
|||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/ebcdic.h>
|
#include <asm/ebcdic.h>
|
||||||
#include <asm/compat.h>
|
|
||||||
#include <asm/kvm_virtio.h>
|
#include <asm/kvm_virtio.h>
|
||||||
#include <asm/diag.h>
|
#include <asm/diag.h>
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@
|
|||||||
#include <asm/ucontext.h>
|
#include <asm/ucontext.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/lowcore.h>
|
#include <asm/lowcore.h>
|
||||||
#include <asm/compat.h>
|
|
||||||
#include "entry.h"
|
#include "entry.h"
|
||||||
|
|
||||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
|
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
|
||||||
|
@ -36,7 +36,6 @@
|
|||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/compat.h>
|
|
||||||
#include "../kernel/entry.h"
|
#include "../kernel/entry.h"
|
||||||
|
|
||||||
#ifndef CONFIG_64BIT
|
#ifndef CONFIG_64BIT
|
||||||
|
@ -223,16 +223,38 @@ void free_initrd_mem(unsigned long start, unsigned long end)
|
|||||||
#ifdef CONFIG_MEMORY_HOTPLUG
|
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||||
int arch_add_memory(int nid, u64 start, u64 size)
|
int arch_add_memory(int nid, u64 start, u64 size)
|
||||||
{
|
{
|
||||||
struct pglist_data *pgdat;
|
unsigned long zone_start_pfn, zone_end_pfn, nr_pages;
|
||||||
|
unsigned long start_pfn = PFN_DOWN(start);
|
||||||
|
unsigned long size_pages = PFN_DOWN(size);
|
||||||
struct zone *zone;
|
struct zone *zone;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
pgdat = NODE_DATA(nid);
|
|
||||||
zone = pgdat->node_zones + ZONE_MOVABLE;
|
|
||||||
rc = vmem_add_mapping(start, size);
|
rc = vmem_add_mapping(start, size);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
rc = __add_pages(nid, zone, PFN_DOWN(start), PFN_DOWN(size));
|
for_each_zone(zone) {
|
||||||
|
if (zone_idx(zone) != ZONE_MOVABLE) {
|
||||||
|
/* Add range within existing zone limits */
|
||||||
|
zone_start_pfn = zone->zone_start_pfn;
|
||||||
|
zone_end_pfn = zone->zone_start_pfn +
|
||||||
|
zone->spanned_pages;
|
||||||
|
} else {
|
||||||
|
/* Add remaining range to ZONE_MOVABLE */
|
||||||
|
zone_start_pfn = start_pfn;
|
||||||
|
zone_end_pfn = start_pfn + size_pages;
|
||||||
|
}
|
||||||
|
if (start_pfn < zone_start_pfn || start_pfn >= zone_end_pfn)
|
||||||
|
continue;
|
||||||
|
nr_pages = (start_pfn + size_pages > zone_end_pfn) ?
|
||||||
|
zone_end_pfn - start_pfn : size_pages;
|
||||||
|
rc = __add_pages(nid, zone, start_pfn, nr_pages);
|
||||||
|
if (rc)
|
||||||
|
break;
|
||||||
|
start_pfn += nr_pages;
|
||||||
|
size_pages -= nr_pages;
|
||||||
|
if (!size_pages)
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (rc)
|
if (rc)
|
||||||
vmem_remove_mapping(start, size);
|
vmem_remove_mapping(start, size);
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -29,8 +29,8 @@
|
|||||||
#include <linux/mman.h>
|
#include <linux/mman.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/random.h>
|
#include <linux/random.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
#include <asm/compat.h>
|
|
||||||
|
|
||||||
static unsigned long stack_maxrandom_size(void)
|
static unsigned long stack_maxrandom_size(void)
|
||||||
{
|
{
|
||||||
|
@ -242,4 +242,12 @@ static inline void perf_get_x86_pmu_capability(struct x86_pmu_capability *cap)
|
|||||||
static inline void perf_events_lapic_init(void) { }
|
static inline void perf_events_lapic_init(void) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_AMD)
|
||||||
|
extern void amd_pmu_enable_virt(void);
|
||||||
|
extern void amd_pmu_disable_virt(void);
|
||||||
|
#else
|
||||||
|
static inline void amd_pmu_enable_virt(void) { }
|
||||||
|
static inline void amd_pmu_disable_virt(void) { }
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _ASM_X86_PERF_EVENT_H */
|
#endif /* _ASM_X86_PERF_EVENT_H */
|
||||||
|
@ -326,8 +326,7 @@ static void __cpuinit amd_calc_l3_indices(struct amd_northbridge *nb)
|
|||||||
l3->indices = (max(max3(sc0, sc1, sc2), sc3) << 10) - 1;
|
l3->indices = (max(max3(sc0, sc1, sc2), sc3) << 10) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __cpuinit amd_init_l3_cache(struct _cpuid4_info_regs *this_leaf,
|
static void __cpuinit amd_init_l3_cache(struct _cpuid4_info_regs *this_leaf, int index)
|
||||||
int index)
|
|
||||||
{
|
{
|
||||||
int node;
|
int node;
|
||||||
|
|
||||||
@ -725,14 +724,16 @@ static DEFINE_PER_CPU(struct _cpuid4_info *, ici_cpuid4_info);
|
|||||||
#define CPUID4_INFO_IDX(x, y) (&((per_cpu(ici_cpuid4_info, x))[y]))
|
#define CPUID4_INFO_IDX(x, y) (&((per_cpu(ici_cpuid4_info, x))[y]))
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
|
|
||||||
|
static int __cpuinit cache_shared_amd_cpu_map_setup(unsigned int cpu, int index)
|
||||||
{
|
{
|
||||||
struct _cpuid4_info *this_leaf, *sibling_leaf;
|
struct _cpuid4_info *this_leaf;
|
||||||
unsigned long num_threads_sharing;
|
int ret, i, sibling;
|
||||||
int index_msb, i, sibling;
|
|
||||||
struct cpuinfo_x86 *c = &cpu_data(cpu);
|
struct cpuinfo_x86 *c = &cpu_data(cpu);
|
||||||
|
|
||||||
if ((index == 3) && (c->x86_vendor == X86_VENDOR_AMD)) {
|
ret = 0;
|
||||||
|
if (index == 3) {
|
||||||
|
ret = 1;
|
||||||
for_each_cpu(i, cpu_llc_shared_mask(cpu)) {
|
for_each_cpu(i, cpu_llc_shared_mask(cpu)) {
|
||||||
if (!per_cpu(ici_cpuid4_info, i))
|
if (!per_cpu(ici_cpuid4_info, i))
|
||||||
continue;
|
continue;
|
||||||
@ -743,8 +744,35 @@ static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
|
|||||||
set_bit(sibling, this_leaf->shared_cpu_map);
|
set_bit(sibling, this_leaf->shared_cpu_map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
} else if ((c->x86 == 0x15) && ((index == 1) || (index == 2))) {
|
||||||
|
ret = 1;
|
||||||
|
for_each_cpu(i, cpu_sibling_mask(cpu)) {
|
||||||
|
if (!per_cpu(ici_cpuid4_info, i))
|
||||||
|
continue;
|
||||||
|
this_leaf = CPUID4_INFO_IDX(i, index);
|
||||||
|
for_each_cpu(sibling, cpu_sibling_mask(cpu)) {
|
||||||
|
if (!cpu_online(sibling))
|
||||||
|
continue;
|
||||||
|
set_bit(sibling, this_leaf->shared_cpu_map);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
|
||||||
|
{
|
||||||
|
struct _cpuid4_info *this_leaf, *sibling_leaf;
|
||||||
|
unsigned long num_threads_sharing;
|
||||||
|
int index_msb, i;
|
||||||
|
struct cpuinfo_x86 *c = &cpu_data(cpu);
|
||||||
|
|
||||||
|
if (c->x86_vendor == X86_VENDOR_AMD) {
|
||||||
|
if (cache_shared_amd_cpu_map_setup(cpu, index))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this_leaf = CPUID4_INFO_IDX(cpu, index);
|
this_leaf = CPUID4_INFO_IDX(cpu, index);
|
||||||
num_threads_sharing = 1 + this_leaf->base.eax.split.num_threads_sharing;
|
num_threads_sharing = 1 + this_leaf->base.eax.split.num_threads_sharing;
|
||||||
|
|
||||||
|
@ -528,6 +528,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank)
|
|||||||
|
|
||||||
sprintf(name, "threshold_bank%i", bank);
|
sprintf(name, "threshold_bank%i", bank);
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
if (cpu_data(cpu).cpu_core_id && shared_bank[bank]) { /* symlink */
|
if (cpu_data(cpu).cpu_core_id && shared_bank[bank]) { /* symlink */
|
||||||
i = cpumask_first(cpu_llc_shared_mask(cpu));
|
i = cpumask_first(cpu_llc_shared_mask(cpu));
|
||||||
|
|
||||||
@ -553,6 +554,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank)
|
|||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
b = kzalloc(sizeof(struct threshold_bank), GFP_KERNEL);
|
b = kzalloc(sizeof(struct threshold_bank), GFP_KERNEL);
|
||||||
if (!b) {
|
if (!b) {
|
||||||
|
@ -147,7 +147,9 @@ struct cpu_hw_events {
|
|||||||
/*
|
/*
|
||||||
* AMD specific bits
|
* AMD specific bits
|
||||||
*/
|
*/
|
||||||
struct amd_nb *amd_nb;
|
struct amd_nb *amd_nb;
|
||||||
|
/* Inverted mask of bits to clear in the perf_ctr ctrl registers */
|
||||||
|
u64 perf_ctr_virt_mask;
|
||||||
|
|
||||||
void *kfree_on_online;
|
void *kfree_on_online;
|
||||||
};
|
};
|
||||||
@ -417,9 +419,11 @@ void x86_pmu_disable_all(void);
|
|||||||
static inline void __x86_pmu_enable_event(struct hw_perf_event *hwc,
|
static inline void __x86_pmu_enable_event(struct hw_perf_event *hwc,
|
||||||
u64 enable_mask)
|
u64 enable_mask)
|
||||||
{
|
{
|
||||||
|
u64 disable_mask = __this_cpu_read(cpu_hw_events.perf_ctr_virt_mask);
|
||||||
|
|
||||||
if (hwc->extra_reg.reg)
|
if (hwc->extra_reg.reg)
|
||||||
wrmsrl(hwc->extra_reg.reg, hwc->extra_reg.config);
|
wrmsrl(hwc->extra_reg.reg, hwc->extra_reg.config);
|
||||||
wrmsrl(hwc->config_base, hwc->config | enable_mask);
|
wrmsrl(hwc->config_base, (hwc->config | enable_mask) & ~disable_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void x86_pmu_enable_all(int added);
|
void x86_pmu_enable_all(int added);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include <linux/perf_event.h>
|
#include <linux/perf_event.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
@ -357,7 +358,9 @@ static void amd_pmu_cpu_starting(int cpu)
|
|||||||
struct amd_nb *nb;
|
struct amd_nb *nb;
|
||||||
int i, nb_id;
|
int i, nb_id;
|
||||||
|
|
||||||
if (boot_cpu_data.x86_max_cores < 2)
|
cpuc->perf_ctr_virt_mask = AMD_PERFMON_EVENTSEL_HOSTONLY;
|
||||||
|
|
||||||
|
if (boot_cpu_data.x86_max_cores < 2 || boot_cpu_data.x86 == 0x15)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
nb_id = amd_get_nb_id(cpu);
|
nb_id = amd_get_nb_id(cpu);
|
||||||
@ -587,9 +590,9 @@ static __initconst const struct x86_pmu amd_pmu_f15h = {
|
|||||||
.put_event_constraints = amd_put_event_constraints,
|
.put_event_constraints = amd_put_event_constraints,
|
||||||
|
|
||||||
.cpu_prepare = amd_pmu_cpu_prepare,
|
.cpu_prepare = amd_pmu_cpu_prepare,
|
||||||
.cpu_starting = amd_pmu_cpu_starting,
|
|
||||||
.cpu_dead = amd_pmu_cpu_dead,
|
.cpu_dead = amd_pmu_cpu_dead,
|
||||||
#endif
|
#endif
|
||||||
|
.cpu_starting = amd_pmu_cpu_starting,
|
||||||
};
|
};
|
||||||
|
|
||||||
__init int amd_pmu_init(void)
|
__init int amd_pmu_init(void)
|
||||||
@ -621,3 +624,33 @@ __init int amd_pmu_init(void)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void amd_pmu_enable_virt(void)
|
||||||
|
{
|
||||||
|
struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
|
||||||
|
|
||||||
|
cpuc->perf_ctr_virt_mask = 0;
|
||||||
|
|
||||||
|
/* Reload all events */
|
||||||
|
x86_pmu_disable_all();
|
||||||
|
x86_pmu_enable_all(0);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(amd_pmu_enable_virt);
|
||||||
|
|
||||||
|
void amd_pmu_disable_virt(void)
|
||||||
|
{
|
||||||
|
struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We only mask out the Host-only bit so that host-only counting works
|
||||||
|
* when SVM is disabled. If someone sets up a guest-only counter when
|
||||||
|
* SVM is disabled the Guest-only bits still gets set and the counter
|
||||||
|
* will not count anything.
|
||||||
|
*/
|
||||||
|
cpuc->perf_ctr_virt_mask = AMD_PERFMON_EVENTSEL_HOSTONLY;
|
||||||
|
|
||||||
|
/* Reload all events */
|
||||||
|
x86_pmu_disable_all();
|
||||||
|
x86_pmu_enable_all(0);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(amd_pmu_disable_virt);
|
||||||
|
@ -1531,11 +1531,18 @@ ENTRY(nmi)
|
|||||||
/* Use %rdx as out temp variable throughout */
|
/* Use %rdx as out temp variable throughout */
|
||||||
pushq_cfi %rdx
|
pushq_cfi %rdx
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If %cs was not the kernel segment, then the NMI triggered in user
|
||||||
|
* space, which means it is definitely not nested.
|
||||||
|
*/
|
||||||
|
cmpl $__KERNEL_CS, 16(%rsp)
|
||||||
|
jne first_nmi
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check the special variable on the stack to see if NMIs are
|
* Check the special variable on the stack to see if NMIs are
|
||||||
* executing.
|
* executing.
|
||||||
*/
|
*/
|
||||||
cmp $1, -8(%rsp)
|
cmpl $1, -8(%rsp)
|
||||||
je nested_nmi
|
je nested_nmi
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -360,7 +360,6 @@ out:
|
|||||||
static enum ucode_state
|
static enum ucode_state
|
||||||
request_microcode_user(int cpu, const void __user *buf, size_t size)
|
request_microcode_user(int cpu, const void __user *buf, size_t size)
|
||||||
{
|
{
|
||||||
pr_info("AMD microcode update via /dev/cpu/microcode not supported\n");
|
|
||||||
return UCODE_ERROR;
|
return UCODE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include <linux/ftrace_event.h>
|
#include <linux/ftrace_event.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
|
||||||
|
#include <asm/perf_event.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/desc.h>
|
#include <asm/desc.h>
|
||||||
#include <asm/kvm_para.h>
|
#include <asm/kvm_para.h>
|
||||||
@ -575,6 +576,8 @@ static void svm_hardware_disable(void *garbage)
|
|||||||
wrmsrl(MSR_AMD64_TSC_RATIO, TSC_RATIO_DEFAULT);
|
wrmsrl(MSR_AMD64_TSC_RATIO, TSC_RATIO_DEFAULT);
|
||||||
|
|
||||||
cpu_svm_disable();
|
cpu_svm_disable();
|
||||||
|
|
||||||
|
amd_pmu_disable_virt();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int svm_hardware_enable(void *garbage)
|
static int svm_hardware_enable(void *garbage)
|
||||||
@ -622,6 +625,8 @@ static int svm_hardware_enable(void *garbage)
|
|||||||
|
|
||||||
svm_init_erratum_383();
|
svm_init_erratum_383();
|
||||||
|
|
||||||
|
amd_pmu_enable_virt();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1141,7 +1141,9 @@ asmlinkage void __init xen_start_kernel(void)
|
|||||||
|
|
||||||
/* Prevent unwanted bits from being set in PTEs. */
|
/* Prevent unwanted bits from being set in PTEs. */
|
||||||
__supported_pte_mask &= ~_PAGE_GLOBAL;
|
__supported_pte_mask &= ~_PAGE_GLOBAL;
|
||||||
|
#if 0
|
||||||
if (!xen_initial_domain())
|
if (!xen_initial_domain())
|
||||||
|
#endif
|
||||||
__supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
|
__supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
|
||||||
|
|
||||||
__supported_pte_mask |= _PAGE_IOMAP;
|
__supported_pte_mask |= _PAGE_IOMAP;
|
||||||
@ -1204,10 +1206,6 @@ asmlinkage void __init xen_start_kernel(void)
|
|||||||
|
|
||||||
pgd = (pgd_t *)xen_start_info->pt_base;
|
pgd = (pgd_t *)xen_start_info->pt_base;
|
||||||
|
|
||||||
if (!xen_initial_domain())
|
|
||||||
__supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
|
|
||||||
|
|
||||||
__supported_pte_mask |= _PAGE_IOMAP;
|
|
||||||
/* Don't do the full vcpu_info placement stuff until we have a
|
/* Don't do the full vcpu_info placement stuff until we have a
|
||||||
possible map and a non-dummy shared_info. */
|
possible map and a non-dummy shared_info. */
|
||||||
per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0];
|
per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0];
|
||||||
|
@ -415,13 +415,13 @@ static pteval_t iomap_pte(pteval_t val)
|
|||||||
static pteval_t xen_pte_val(pte_t pte)
|
static pteval_t xen_pte_val(pte_t pte)
|
||||||
{
|
{
|
||||||
pteval_t pteval = pte.pte;
|
pteval_t pteval = pte.pte;
|
||||||
|
#if 0
|
||||||
/* If this is a WC pte, convert back from Xen WC to Linux WC */
|
/* If this is a WC pte, convert back from Xen WC to Linux WC */
|
||||||
if ((pteval & (_PAGE_PAT | _PAGE_PCD | _PAGE_PWT)) == _PAGE_PAT) {
|
if ((pteval & (_PAGE_PAT | _PAGE_PCD | _PAGE_PWT)) == _PAGE_PAT) {
|
||||||
WARN_ON(!pat_enabled);
|
WARN_ON(!pat_enabled);
|
||||||
pteval = (pteval & ~_PAGE_PAT) | _PAGE_PWT;
|
pteval = (pteval & ~_PAGE_PAT) | _PAGE_PWT;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (xen_initial_domain() && (pteval & _PAGE_IOMAP))
|
if (xen_initial_domain() && (pteval & _PAGE_IOMAP))
|
||||||
return pteval;
|
return pteval;
|
||||||
|
|
||||||
@ -463,7 +463,7 @@ void xen_set_pat(u64 pat)
|
|||||||
static pte_t xen_make_pte(pteval_t pte)
|
static pte_t xen_make_pte(pteval_t pte)
|
||||||
{
|
{
|
||||||
phys_addr_t addr = (pte & PTE_PFN_MASK);
|
phys_addr_t addr = (pte & PTE_PFN_MASK);
|
||||||
|
#if 0
|
||||||
/* If Linux is trying to set a WC pte, then map to the Xen WC.
|
/* If Linux is trying to set a WC pte, then map to the Xen WC.
|
||||||
* If _PAGE_PAT is set, then it probably means it is really
|
* If _PAGE_PAT is set, then it probably means it is really
|
||||||
* _PAGE_PSE, so avoid fiddling with the PAT mapping and hope
|
* _PAGE_PSE, so avoid fiddling with the PAT mapping and hope
|
||||||
@ -476,7 +476,7 @@ static pte_t xen_make_pte(pteval_t pte)
|
|||||||
if ((pte & (_PAGE_PCD | _PAGE_PWT)) == _PAGE_PWT)
|
if ((pte & (_PAGE_PCD | _PAGE_PWT)) == _PAGE_PWT)
|
||||||
pte = (pte & ~(_PAGE_PCD | _PAGE_PWT)) | _PAGE_PAT;
|
pte = (pte & ~(_PAGE_PCD | _PAGE_PWT)) | _PAGE_PAT;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
* Unprivileged domains are allowed to do IOMAPpings for
|
* Unprivileged domains are allowed to do IOMAPpings for
|
||||||
* PCI passthrough, but not map ISA space. The ISA
|
* PCI passthrough, but not map ISA space. The ISA
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* ldm - Support for Windows Logical Disk Manager (Dynamic Disks)
|
* ldm - Support for Windows Logical Disk Manager (Dynamic Disks)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2001,2002 Richard Russon <ldm@flatcap.org>
|
* Copyright (C) 2001,2002 Richard Russon <ldm@flatcap.org>
|
||||||
* Copyright (c) 2001-2007 Anton Altaparmakov
|
* Copyright (c) 2001-2012 Anton Altaparmakov
|
||||||
* Copyright (C) 2001,2002 Jakob Kemi <jakob.kemi@telia.com>
|
* Copyright (C) 2001,2002 Jakob Kemi <jakob.kemi@telia.com>
|
||||||
*
|
*
|
||||||
* Documentation is available at http://www.linux-ntfs.org/doku.php?id=downloads
|
* Documentation is available at http://www.linux-ntfs.org/doku.php?id=downloads
|
||||||
@ -1341,20 +1341,17 @@ found:
|
|||||||
ldm_error("REC value (%d) exceeds NUM value (%d)", rec, f->num);
|
ldm_error("REC value (%d) exceeds NUM value (%d)", rec, f->num);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (f->map & (1 << rec)) {
|
if (f->map & (1 << rec)) {
|
||||||
ldm_error ("Duplicate VBLK, part %d.", rec);
|
ldm_error ("Duplicate VBLK, part %d.", rec);
|
||||||
f->map &= 0x7F; /* Mark the group as broken */
|
f->map &= 0x7F; /* Mark the group as broken */
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
f->map |= (1 << rec);
|
f->map |= (1 << rec);
|
||||||
|
if (!rec)
|
||||||
|
memcpy(f->data, data, VBLK_SIZE_HEAD);
|
||||||
data += VBLK_SIZE_HEAD;
|
data += VBLK_SIZE_HEAD;
|
||||||
size -= VBLK_SIZE_HEAD;
|
size -= VBLK_SIZE_HEAD;
|
||||||
|
memcpy(f->data + VBLK_SIZE_HEAD + rec * size, data, size);
|
||||||
memcpy (f->data+rec*(size-VBLK_SIZE_HEAD)+VBLK_SIZE_HEAD, data, size);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1206,9 +1206,9 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|||||||
|
|
||||||
out_unmap_both:
|
out_unmap_both:
|
||||||
pci_set_drvdata(dev, NULL);
|
pci_set_drvdata(dev, NULL);
|
||||||
pci_iounmap(dev, card->config_regs);
|
|
||||||
out_unmap_config:
|
|
||||||
pci_iounmap(dev, card->buffers);
|
pci_iounmap(dev, card->buffers);
|
||||||
|
out_unmap_config:
|
||||||
|
pci_iounmap(dev, card->config_regs);
|
||||||
out_release_regions:
|
out_release_regions:
|
||||||
pci_release_regions(dev);
|
pci_release_regions(dev);
|
||||||
out:
|
out:
|
||||||
|
@ -102,6 +102,7 @@ static struct usb_device_id btusb_table[] = {
|
|||||||
|
|
||||||
/* Broadcom BCM20702A0 */
|
/* Broadcom BCM20702A0 */
|
||||||
{ USB_DEVICE(0x0a5c, 0x21e3) },
|
{ USB_DEVICE(0x0a5c, 0x21e3) },
|
||||||
|
{ USB_DEVICE(0x0a5c, 0x21f3) },
|
||||||
{ USB_DEVICE(0x413c, 0x8197) },
|
{ USB_DEVICE(0x413c, 0x8197) },
|
||||||
|
|
||||||
{ } /* Terminating entry */
|
{ } /* Terminating entry */
|
||||||
@ -726,9 +727,6 @@ static int btusb_send_frame(struct sk_buff *skb)
|
|||||||
usb_fill_bulk_urb(urb, data->udev, pipe,
|
usb_fill_bulk_urb(urb, data->udev, pipe,
|
||||||
skb->data, skb->len, btusb_tx_complete, skb);
|
skb->data, skb->len, btusb_tx_complete, skb);
|
||||||
|
|
||||||
if (skb->priority >= HCI_PRIO_MAX - 1)
|
|
||||||
urb->transfer_flags = URB_ISO_ASAP;
|
|
||||||
|
|
||||||
hdev->stat.acl_tx++;
|
hdev->stat.acl_tx++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -714,6 +714,7 @@ static int mv_hash_final(struct ahash_request *req)
|
|||||||
{
|
{
|
||||||
struct mv_req_hash_ctx *ctx = ahash_request_ctx(req);
|
struct mv_req_hash_ctx *ctx = ahash_request_ctx(req);
|
||||||
|
|
||||||
|
ahash_request_set_crypt(req, NULL, req->result, 0);
|
||||||
mv_update_hash_req_ctx(ctx, 1, 0);
|
mv_update_hash_req_ctx(ctx, 1, 0);
|
||||||
return mv_handle_req(&req->base);
|
return mv_handle_req(&req->base);
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "drmP.h"
|
#include "drmP.h"
|
||||||
#include "drm_crtc_helper.h"
|
#include "drm_crtc_helper.h"
|
||||||
|
|
||||||
|
#include <drm/exynos_drm.h>
|
||||||
#include "exynos_drm_drv.h"
|
#include "exynos_drm_drv.h"
|
||||||
#include "exynos_drm_encoder.h"
|
#include "exynos_drm_encoder.h"
|
||||||
|
|
||||||
@ -44,8 +45,9 @@ struct exynos_drm_connector {
|
|||||||
/* convert exynos_video_timings to drm_display_mode */
|
/* convert exynos_video_timings to drm_display_mode */
|
||||||
static inline void
|
static inline void
|
||||||
convert_to_display_mode(struct drm_display_mode *mode,
|
convert_to_display_mode(struct drm_display_mode *mode,
|
||||||
struct fb_videomode *timing)
|
struct exynos_drm_panel_info *panel)
|
||||||
{
|
{
|
||||||
|
struct fb_videomode *timing = &panel->timing;
|
||||||
DRM_DEBUG_KMS("%s\n", __FILE__);
|
DRM_DEBUG_KMS("%s\n", __FILE__);
|
||||||
|
|
||||||
mode->clock = timing->pixclock / 1000;
|
mode->clock = timing->pixclock / 1000;
|
||||||
@ -60,6 +62,8 @@ convert_to_display_mode(struct drm_display_mode *mode,
|
|||||||
mode->vsync_start = mode->vdisplay + timing->upper_margin;
|
mode->vsync_start = mode->vdisplay + timing->upper_margin;
|
||||||
mode->vsync_end = mode->vsync_start + timing->vsync_len;
|
mode->vsync_end = mode->vsync_start + timing->vsync_len;
|
||||||
mode->vtotal = mode->vsync_end + timing->lower_margin;
|
mode->vtotal = mode->vsync_end + timing->lower_margin;
|
||||||
|
mode->width_mm = panel->width_mm;
|
||||||
|
mode->height_mm = panel->height_mm;
|
||||||
|
|
||||||
if (timing->vmode & FB_VMODE_INTERLACED)
|
if (timing->vmode & FB_VMODE_INTERLACED)
|
||||||
mode->flags |= DRM_MODE_FLAG_INTERLACE;
|
mode->flags |= DRM_MODE_FLAG_INTERLACE;
|
||||||
@ -148,16 +152,18 @@ static int exynos_drm_connector_get_modes(struct drm_connector *connector)
|
|||||||
connector->display_info.raw_edid = edid;
|
connector->display_info.raw_edid = edid;
|
||||||
} else {
|
} else {
|
||||||
struct drm_display_mode *mode = drm_mode_create(connector->dev);
|
struct drm_display_mode *mode = drm_mode_create(connector->dev);
|
||||||
struct fb_videomode *timing;
|
struct exynos_drm_panel_info *panel;
|
||||||
|
|
||||||
if (display_ops->get_timing)
|
if (display_ops->get_panel)
|
||||||
timing = display_ops->get_timing(manager->dev);
|
panel = display_ops->get_panel(manager->dev);
|
||||||
else {
|
else {
|
||||||
drm_mode_destroy(connector->dev, mode);
|
drm_mode_destroy(connector->dev, mode);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
convert_to_display_mode(mode, timing);
|
convert_to_display_mode(mode, panel);
|
||||||
|
connector->display_info.width_mm = mode->width_mm;
|
||||||
|
connector->display_info.height_mm = mode->height_mm;
|
||||||
|
|
||||||
mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
|
mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
|
||||||
drm_mode_set_name(mode);
|
drm_mode_set_name(mode);
|
||||||
|
@ -136,7 +136,7 @@ struct exynos_drm_overlay {
|
|||||||
* @type: one of EXYNOS_DISPLAY_TYPE_LCD and HDMI.
|
* @type: one of EXYNOS_DISPLAY_TYPE_LCD and HDMI.
|
||||||
* @is_connected: check for that display is connected or not.
|
* @is_connected: check for that display is connected or not.
|
||||||
* @get_edid: get edid modes from display driver.
|
* @get_edid: get edid modes from display driver.
|
||||||
* @get_timing: get timing object from display driver.
|
* @get_panel: get panel object from display driver.
|
||||||
* @check_timing: check if timing is valid or not.
|
* @check_timing: check if timing is valid or not.
|
||||||
* @power_on: display device on or off.
|
* @power_on: display device on or off.
|
||||||
*/
|
*/
|
||||||
@ -145,7 +145,7 @@ struct exynos_drm_display_ops {
|
|||||||
bool (*is_connected)(struct device *dev);
|
bool (*is_connected)(struct device *dev);
|
||||||
int (*get_edid)(struct device *dev, struct drm_connector *connector,
|
int (*get_edid)(struct device *dev, struct drm_connector *connector,
|
||||||
u8 *edid, int len);
|
u8 *edid, int len);
|
||||||
void *(*get_timing)(struct device *dev);
|
void *(*get_panel)(struct device *dev);
|
||||||
int (*check_timing)(struct device *dev, void *timing);
|
int (*check_timing)(struct device *dev, void *timing);
|
||||||
int (*power_on)(struct device *dev, int mode);
|
int (*power_on)(struct device *dev, int mode);
|
||||||
};
|
};
|
||||||
|
@ -89,7 +89,7 @@ struct fimd_context {
|
|||||||
bool suspended;
|
bool suspended;
|
||||||
struct mutex lock;
|
struct mutex lock;
|
||||||
|
|
||||||
struct fb_videomode *timing;
|
struct exynos_drm_panel_info *panel;
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool fimd_display_is_connected(struct device *dev)
|
static bool fimd_display_is_connected(struct device *dev)
|
||||||
@ -101,13 +101,13 @@ static bool fimd_display_is_connected(struct device *dev)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *fimd_get_timing(struct device *dev)
|
static void *fimd_get_panel(struct device *dev)
|
||||||
{
|
{
|
||||||
struct fimd_context *ctx = get_fimd_context(dev);
|
struct fimd_context *ctx = get_fimd_context(dev);
|
||||||
|
|
||||||
DRM_DEBUG_KMS("%s\n", __FILE__);
|
DRM_DEBUG_KMS("%s\n", __FILE__);
|
||||||
|
|
||||||
return ctx->timing;
|
return ctx->panel;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fimd_check_timing(struct device *dev, void *timing)
|
static int fimd_check_timing(struct device *dev, void *timing)
|
||||||
@ -131,7 +131,7 @@ static int fimd_display_power_on(struct device *dev, int mode)
|
|||||||
static struct exynos_drm_display_ops fimd_display_ops = {
|
static struct exynos_drm_display_ops fimd_display_ops = {
|
||||||
.type = EXYNOS_DISPLAY_TYPE_LCD,
|
.type = EXYNOS_DISPLAY_TYPE_LCD,
|
||||||
.is_connected = fimd_display_is_connected,
|
.is_connected = fimd_display_is_connected,
|
||||||
.get_timing = fimd_get_timing,
|
.get_panel = fimd_get_panel,
|
||||||
.check_timing = fimd_check_timing,
|
.check_timing = fimd_check_timing,
|
||||||
.power_on = fimd_display_power_on,
|
.power_on = fimd_display_power_on,
|
||||||
};
|
};
|
||||||
@ -193,7 +193,8 @@ static void fimd_apply(struct device *subdrv_dev)
|
|||||||
static void fimd_commit(struct device *dev)
|
static void fimd_commit(struct device *dev)
|
||||||
{
|
{
|
||||||
struct fimd_context *ctx = get_fimd_context(dev);
|
struct fimd_context *ctx = get_fimd_context(dev);
|
||||||
struct fb_videomode *timing = ctx->timing;
|
struct exynos_drm_panel_info *panel = ctx->panel;
|
||||||
|
struct fb_videomode *timing = &panel->timing;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
if (ctx->suspended)
|
if (ctx->suspended)
|
||||||
@ -786,7 +787,7 @@ static int __devinit fimd_probe(struct platform_device *pdev)
|
|||||||
struct fimd_context *ctx;
|
struct fimd_context *ctx;
|
||||||
struct exynos_drm_subdrv *subdrv;
|
struct exynos_drm_subdrv *subdrv;
|
||||||
struct exynos_drm_fimd_pdata *pdata;
|
struct exynos_drm_fimd_pdata *pdata;
|
||||||
struct fb_videomode *timing;
|
struct exynos_drm_panel_info *panel;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
int win;
|
int win;
|
||||||
int ret = -EINVAL;
|
int ret = -EINVAL;
|
||||||
@ -799,9 +800,9 @@ static int __devinit fimd_probe(struct platform_device *pdev)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
timing = &pdata->timing;
|
panel = &pdata->panel;
|
||||||
if (!timing) {
|
if (!panel) {
|
||||||
dev_err(dev, "timing is null.\n");
|
dev_err(dev, "panel is null.\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -863,16 +864,16 @@ static int __devinit fimd_probe(struct platform_device *pdev)
|
|||||||
goto err_req_irq;
|
goto err_req_irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->clkdiv = fimd_calc_clkdiv(ctx, timing);
|
ctx->clkdiv = fimd_calc_clkdiv(ctx, &panel->timing);
|
||||||
ctx->vidcon0 = pdata->vidcon0;
|
ctx->vidcon0 = pdata->vidcon0;
|
||||||
ctx->vidcon1 = pdata->vidcon1;
|
ctx->vidcon1 = pdata->vidcon1;
|
||||||
ctx->default_win = pdata->default_win;
|
ctx->default_win = pdata->default_win;
|
||||||
ctx->timing = timing;
|
ctx->panel = panel;
|
||||||
|
|
||||||
timing->pixclock = clk_get_rate(ctx->lcd_clk) / ctx->clkdiv;
|
panel->timing.pixclock = clk_get_rate(ctx->lcd_clk) / ctx->clkdiv;
|
||||||
|
|
||||||
DRM_DEBUG_KMS("pixel clock = %d, clkdiv = %d\n",
|
DRM_DEBUG_KMS("pixel clock = %d, clkdiv = %d\n",
|
||||||
timing->pixclock, ctx->clkdiv);
|
panel->timing.pixclock, ctx->clkdiv);
|
||||||
|
|
||||||
subdrv = &ctx->subdrv;
|
subdrv = &ctx->subdrv;
|
||||||
|
|
||||||
|
@ -4680,8 +4680,17 @@ sandybridge_compute_sprite_srwm(struct drm_device *dev, int plane,
|
|||||||
|
|
||||||
crtc = intel_get_crtc_for_plane(dev, plane);
|
crtc = intel_get_crtc_for_plane(dev, plane);
|
||||||
clock = crtc->mode.clock;
|
clock = crtc->mode.clock;
|
||||||
|
if (!clock) {
|
||||||
|
*sprite_wm = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
line_time_us = (sprite_width * 1000) / clock;
|
line_time_us = (sprite_width * 1000) / clock;
|
||||||
|
if (!line_time_us) {
|
||||||
|
*sprite_wm = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
line_count = (latency_ns / line_time_us + 1000) / 1000;
|
line_count = (latency_ns / line_time_us + 1000) / 1000;
|
||||||
line_size = sprite_width * pixel_size;
|
line_size = sprite_width * pixel_size;
|
||||||
|
|
||||||
@ -6175,7 +6184,7 @@ void intel_crtc_load_lut(struct drm_crtc *crtc)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* The clocks have to be on to load the palette. */
|
/* The clocks have to be on to load the palette. */
|
||||||
if (!crtc->enabled)
|
if (!crtc->enabled || !intel_crtc->active)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* use legacy palette for Ironlake */
|
/* use legacy palette for Ironlake */
|
||||||
@ -6561,7 +6570,7 @@ intel_framebuffer_create_for_mode(struct drm_device *dev,
|
|||||||
mode_cmd.height = mode->vdisplay;
|
mode_cmd.height = mode->vdisplay;
|
||||||
mode_cmd.pitches[0] = intel_framebuffer_pitch_for_width(mode_cmd.width,
|
mode_cmd.pitches[0] = intel_framebuffer_pitch_for_width(mode_cmd.width,
|
||||||
bpp);
|
bpp);
|
||||||
mode_cmd.pixel_format = 0;
|
mode_cmd.pixel_format = drm_mode_legacy_fb_format(bpp, depth);
|
||||||
|
|
||||||
return intel_framebuffer_create(dev, &mode_cmd, obj);
|
return intel_framebuffer_create(dev, &mode_cmd, obj);
|
||||||
}
|
}
|
||||||
@ -8185,7 +8194,7 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv)
|
|||||||
|
|
||||||
if (intel_enable_rc6(dev_priv->dev))
|
if (intel_enable_rc6(dev_priv->dev))
|
||||||
rc6_mask = GEN6_RC_CTL_RC6_ENABLE |
|
rc6_mask = GEN6_RC_CTL_RC6_ENABLE |
|
||||||
(IS_GEN7(dev_priv->dev)) ? GEN6_RC_CTL_RC6p_ENABLE : 0;
|
((IS_GEN7(dev_priv->dev)) ? GEN6_RC_CTL_RC6p_ENABLE : 0);
|
||||||
|
|
||||||
I915_WRITE(GEN6_RC_CONTROL,
|
I915_WRITE(GEN6_RC_CONTROL,
|
||||||
rc6_mask |
|
rc6_mask |
|
||||||
|
@ -301,7 +301,7 @@ static int init_ring_common(struct intel_ring_buffer *ring)
|
|||||||
|
|
||||||
I915_WRITE_CTL(ring,
|
I915_WRITE_CTL(ring,
|
||||||
((ring->size - PAGE_SIZE) & RING_NR_PAGES)
|
((ring->size - PAGE_SIZE) & RING_NR_PAGES)
|
||||||
| RING_REPORT_64K | RING_VALID);
|
| RING_VALID);
|
||||||
|
|
||||||
/* If the head is still not zero, the ring is dead */
|
/* If the head is still not zero, the ring is dead */
|
||||||
if ((I915_READ_CTL(ring) & RING_VALID) == 0 ||
|
if ((I915_READ_CTL(ring) & RING_VALID) == 0 ||
|
||||||
@ -1132,18 +1132,6 @@ int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n)
|
|||||||
struct drm_device *dev = ring->dev;
|
struct drm_device *dev = ring->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
unsigned long end;
|
unsigned long end;
|
||||||
u32 head;
|
|
||||||
|
|
||||||
/* If the reported head position has wrapped or hasn't advanced,
|
|
||||||
* fallback to the slow and accurate path.
|
|
||||||
*/
|
|
||||||
head = intel_read_status_page(ring, 4);
|
|
||||||
if (head > ring->head) {
|
|
||||||
ring->head = head;
|
|
||||||
ring->space = ring_space(ring);
|
|
||||||
if (ring->space >= n)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
trace_i915_ring_wait_begin(ring);
|
trace_i915_ring_wait_begin(ring);
|
||||||
if (drm_core_check_feature(dev, DRIVER_GEM))
|
if (drm_core_check_feature(dev, DRIVER_GEM))
|
||||||
|
@ -1304,6 +1304,7 @@ static int r600_check_texture_resource(struct radeon_cs_parser *p, u32 idx,
|
|||||||
h0 = G_038004_TEX_HEIGHT(word1) + 1;
|
h0 = G_038004_TEX_HEIGHT(word1) + 1;
|
||||||
d0 = G_038004_TEX_DEPTH(word1);
|
d0 = G_038004_TEX_DEPTH(word1);
|
||||||
nfaces = 1;
|
nfaces = 1;
|
||||||
|
array = 0;
|
||||||
switch (G_038000_DIM(word0)) {
|
switch (G_038000_DIM(word0)) {
|
||||||
case V_038000_SQ_TEX_DIM_1D:
|
case V_038000_SQ_TEX_DIM_1D:
|
||||||
case V_038000_SQ_TEX_DIM_2D:
|
case V_038000_SQ_TEX_DIM_2D:
|
||||||
|
@ -1117,13 +1117,23 @@ static int radeon_dp_get_modes(struct drm_connector *connector)
|
|||||||
(connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
|
(connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
|
||||||
struct drm_display_mode *mode;
|
struct drm_display_mode *mode;
|
||||||
|
|
||||||
if (!radeon_dig_connector->edp_on)
|
if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
|
||||||
atombios_set_edp_panel_power(connector,
|
if (!radeon_dig_connector->edp_on)
|
||||||
ATOM_TRANSMITTER_ACTION_POWER_ON);
|
atombios_set_edp_panel_power(connector,
|
||||||
ret = radeon_ddc_get_modes(radeon_connector);
|
ATOM_TRANSMITTER_ACTION_POWER_ON);
|
||||||
if (!radeon_dig_connector->edp_on)
|
ret = radeon_ddc_get_modes(radeon_connector);
|
||||||
atombios_set_edp_panel_power(connector,
|
if (!radeon_dig_connector->edp_on)
|
||||||
ATOM_TRANSMITTER_ACTION_POWER_OFF);
|
atombios_set_edp_panel_power(connector,
|
||||||
|
ATOM_TRANSMITTER_ACTION_POWER_OFF);
|
||||||
|
} else {
|
||||||
|
/* need to setup ddc on the bridge */
|
||||||
|
if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
|
||||||
|
ENCODER_OBJECT_ID_NONE) {
|
||||||
|
if (encoder)
|
||||||
|
radeon_atom_ext_encoder_setup_ddc(encoder);
|
||||||
|
}
|
||||||
|
ret = radeon_ddc_get_modes(radeon_connector);
|
||||||
|
}
|
||||||
|
|
||||||
if (ret > 0) {
|
if (ret > 0) {
|
||||||
if (encoder) {
|
if (encoder) {
|
||||||
@ -1134,7 +1144,6 @@ static int radeon_dp_get_modes(struct drm_connector *connector)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
encoder = radeon_best_single_encoder(connector);
|
|
||||||
if (!encoder)
|
if (!encoder)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -597,13 +597,13 @@ int radeon_vm_bo_rmv(struct radeon_device *rdev,
|
|||||||
if (bo_va == NULL)
|
if (bo_va == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
list_del(&bo_va->bo_list);
|
|
||||||
mutex_lock(&vm->mutex);
|
mutex_lock(&vm->mutex);
|
||||||
radeon_mutex_lock(&rdev->cs_mutex);
|
radeon_mutex_lock(&rdev->cs_mutex);
|
||||||
radeon_vm_bo_update_pte(rdev, vm, bo, NULL);
|
radeon_vm_bo_update_pte(rdev, vm, bo, NULL);
|
||||||
radeon_mutex_unlock(&rdev->cs_mutex);
|
radeon_mutex_unlock(&rdev->cs_mutex);
|
||||||
list_del(&bo_va->vm_list);
|
list_del(&bo_va->vm_list);
|
||||||
mutex_unlock(&vm->mutex);
|
mutex_unlock(&vm->mutex);
|
||||||
|
list_del(&bo_va->bo_list);
|
||||||
|
|
||||||
kfree(bo_va);
|
kfree(bo_va);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -178,6 +178,16 @@ static inline void f75375_write16(struct i2c_client *client, u8 reg,
|
|||||||
i2c_smbus_write_byte_data(client, reg + 1, (value & 0xFF));
|
i2c_smbus_write_byte_data(client, reg + 1, (value & 0xFF));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void f75375_write_pwm(struct i2c_client *client, int nr)
|
||||||
|
{
|
||||||
|
struct f75375_data *data = i2c_get_clientdata(client);
|
||||||
|
if (data->kind == f75387)
|
||||||
|
f75375_write16(client, F75375_REG_FAN_EXP(nr), data->pwm[nr]);
|
||||||
|
else
|
||||||
|
f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr),
|
||||||
|
data->pwm[nr]);
|
||||||
|
}
|
||||||
|
|
||||||
static struct f75375_data *f75375_update_device(struct device *dev)
|
static struct f75375_data *f75375_update_device(struct device *dev)
|
||||||
{
|
{
|
||||||
struct i2c_client *client = to_i2c_client(dev);
|
struct i2c_client *client = to_i2c_client(dev);
|
||||||
@ -254,6 +264,36 @@ static inline u16 rpm_to_reg(int rpm)
|
|||||||
return 1500000 / rpm;
|
return 1500000 / rpm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool duty_mode_enabled(u8 pwm_enable)
|
||||||
|
{
|
||||||
|
switch (pwm_enable) {
|
||||||
|
case 0: /* Manual, duty mode (full speed) */
|
||||||
|
case 1: /* Manual, duty mode */
|
||||||
|
case 4: /* Auto, duty mode */
|
||||||
|
return true;
|
||||||
|
case 2: /* Auto, speed mode */
|
||||||
|
case 3: /* Manual, speed mode */
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
BUG();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool auto_mode_enabled(u8 pwm_enable)
|
||||||
|
{
|
||||||
|
switch (pwm_enable) {
|
||||||
|
case 0: /* Manual, duty mode (full speed) */
|
||||||
|
case 1: /* Manual, duty mode */
|
||||||
|
case 3: /* Manual, speed mode */
|
||||||
|
return false;
|
||||||
|
case 2: /* Auto, speed mode */
|
||||||
|
case 4: /* Auto, duty mode */
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
BUG();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
|
static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
|
||||||
const char *buf, size_t count)
|
const char *buf, size_t count)
|
||||||
{
|
{
|
||||||
@ -287,6 +327,11 @@ static ssize_t set_fan_target(struct device *dev, struct device_attribute *attr,
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
if (auto_mode_enabled(data->pwm_enable[nr]))
|
||||||
|
return -EINVAL;
|
||||||
|
if (data->kind == f75387 && duty_mode_enabled(data->pwm_enable[nr]))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
mutex_lock(&data->update_lock);
|
mutex_lock(&data->update_lock);
|
||||||
data->fan_target[nr] = rpm_to_reg(val);
|
data->fan_target[nr] = rpm_to_reg(val);
|
||||||
f75375_write16(client, F75375_REG_FAN_EXP(nr), data->fan_target[nr]);
|
f75375_write16(client, F75375_REG_FAN_EXP(nr), data->fan_target[nr]);
|
||||||
@ -307,9 +352,13 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
if (auto_mode_enabled(data->pwm_enable[nr]) ||
|
||||||
|
!duty_mode_enabled(data->pwm_enable[nr]))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
mutex_lock(&data->update_lock);
|
mutex_lock(&data->update_lock);
|
||||||
data->pwm[nr] = SENSORS_LIMIT(val, 0, 255);
|
data->pwm[nr] = SENSORS_LIMIT(val, 0, 255);
|
||||||
f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr), data->pwm[nr]);
|
f75375_write_pwm(client, nr);
|
||||||
mutex_unlock(&data->update_lock);
|
mutex_unlock(&data->update_lock);
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
@ -327,11 +376,15 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val)
|
|||||||
struct f75375_data *data = i2c_get_clientdata(client);
|
struct f75375_data *data = i2c_get_clientdata(client);
|
||||||
u8 fanmode;
|
u8 fanmode;
|
||||||
|
|
||||||
if (val < 0 || val > 3)
|
if (val < 0 || val > 4)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
fanmode = f75375_read8(client, F75375_REG_FAN_TIMER);
|
fanmode = f75375_read8(client, F75375_REG_FAN_TIMER);
|
||||||
if (data->kind == f75387) {
|
if (data->kind == f75387) {
|
||||||
|
/* For now, deny dangerous toggling of duty mode */
|
||||||
|
if (duty_mode_enabled(data->pwm_enable[nr]) !=
|
||||||
|
duty_mode_enabled(val))
|
||||||
|
return -EOPNOTSUPP;
|
||||||
/* clear each fanX_mode bit before setting them properly */
|
/* clear each fanX_mode bit before setting them properly */
|
||||||
fanmode &= ~(1 << F75387_FAN_DUTY_MODE(nr));
|
fanmode &= ~(1 << F75387_FAN_DUTY_MODE(nr));
|
||||||
fanmode &= ~(1 << F75387_FAN_MANU_MODE(nr));
|
fanmode &= ~(1 << F75387_FAN_MANU_MODE(nr));
|
||||||
@ -345,12 +398,14 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val)
|
|||||||
fanmode |= (1 << F75387_FAN_MANU_MODE(nr));
|
fanmode |= (1 << F75387_FAN_MANU_MODE(nr));
|
||||||
fanmode |= (1 << F75387_FAN_DUTY_MODE(nr));
|
fanmode |= (1 << F75387_FAN_DUTY_MODE(nr));
|
||||||
break;
|
break;
|
||||||
case 2: /* AUTOMATIC*/
|
case 2: /* Automatic, speed mode */
|
||||||
fanmode |= (1 << F75387_FAN_DUTY_MODE(nr));
|
|
||||||
break;
|
break;
|
||||||
case 3: /* fan speed */
|
case 3: /* fan speed */
|
||||||
fanmode |= (1 << F75387_FAN_MANU_MODE(nr));
|
fanmode |= (1 << F75387_FAN_MANU_MODE(nr));
|
||||||
break;
|
break;
|
||||||
|
case 4: /* Automatic, pwm */
|
||||||
|
fanmode |= (1 << F75387_FAN_DUTY_MODE(nr));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* clear each fanX_mode bit before setting them properly */
|
/* clear each fanX_mode bit before setting them properly */
|
||||||
@ -368,14 +423,15 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val)
|
|||||||
break;
|
break;
|
||||||
case 3: /* fan speed */
|
case 3: /* fan speed */
|
||||||
break;
|
break;
|
||||||
|
case 4: /* Automatic pwm */
|
||||||
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
f75375_write8(client, F75375_REG_FAN_TIMER, fanmode);
|
f75375_write8(client, F75375_REG_FAN_TIMER, fanmode);
|
||||||
data->pwm_enable[nr] = val;
|
data->pwm_enable[nr] = val;
|
||||||
if (val == 0)
|
if (val == 0)
|
||||||
f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr),
|
f75375_write_pwm(client, nr);
|
||||||
data->pwm[nr]);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -726,14 +782,17 @@ static void f75375_init(struct i2c_client *client, struct f75375_data *data,
|
|||||||
|
|
||||||
manu = ((mode >> F75387_FAN_MANU_MODE(nr)) & 1);
|
manu = ((mode >> F75387_FAN_MANU_MODE(nr)) & 1);
|
||||||
duty = ((mode >> F75387_FAN_DUTY_MODE(nr)) & 1);
|
duty = ((mode >> F75387_FAN_DUTY_MODE(nr)) & 1);
|
||||||
if (manu && duty)
|
if (!manu && duty)
|
||||||
/* speed */
|
/* auto, pwm */
|
||||||
|
data->pwm_enable[nr] = 4;
|
||||||
|
else if (manu && !duty)
|
||||||
|
/* manual, speed */
|
||||||
data->pwm_enable[nr] = 3;
|
data->pwm_enable[nr] = 3;
|
||||||
else if (!manu && duty)
|
else if (!manu && !duty)
|
||||||
/* automatic */
|
/* automatic, speed */
|
||||||
data->pwm_enable[nr] = 2;
|
data->pwm_enable[nr] = 2;
|
||||||
else
|
else
|
||||||
/* manual */
|
/* manual, pwm */
|
||||||
data->pwm_enable[nr] = 1;
|
data->pwm_enable[nr] = 1;
|
||||||
} else {
|
} else {
|
||||||
if (!(conf & (1 << F75375_FAN_CTRL_LINEAR(nr))))
|
if (!(conf & (1 << F75375_FAN_CTRL_LINEAR(nr))))
|
||||||
@ -758,9 +817,11 @@ static void f75375_init(struct i2c_client *client, struct f75375_data *data,
|
|||||||
set_pwm_enable_direct(client, 0, f75375s_pdata->pwm_enable[0]);
|
set_pwm_enable_direct(client, 0, f75375s_pdata->pwm_enable[0]);
|
||||||
set_pwm_enable_direct(client, 1, f75375s_pdata->pwm_enable[1]);
|
set_pwm_enable_direct(client, 1, f75375s_pdata->pwm_enable[1]);
|
||||||
for (nr = 0; nr < 2; nr++) {
|
for (nr = 0; nr < 2; nr++) {
|
||||||
|
if (auto_mode_enabled(f75375s_pdata->pwm_enable[nr]) ||
|
||||||
|
!duty_mode_enabled(f75375s_pdata->pwm_enable[nr]))
|
||||||
|
continue;
|
||||||
data->pwm[nr] = SENSORS_LIMIT(f75375s_pdata->pwm[nr], 0, 255);
|
data->pwm[nr] = SENSORS_LIMIT(f75375s_pdata->pwm[nr], 0, 255);
|
||||||
f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr),
|
f75375_write_pwm(client, nr);
|
||||||
data->pwm[nr]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -787,7 +848,7 @@ static int f75375_probe(struct i2c_client *client,
|
|||||||
if (err)
|
if (err)
|
||||||
goto exit_free;
|
goto exit_free;
|
||||||
|
|
||||||
if (data->kind == f75375) {
|
if (data->kind != f75373) {
|
||||||
err = sysfs_chmod_file(&client->dev.kobj,
|
err = sysfs_chmod_file(&client->dev.kobj,
|
||||||
&sensor_dev_attr_pwm1_mode.dev_attr.attr,
|
&sensor_dev_attr_pwm1_mode.dev_attr.attr,
|
||||||
S_IRUGO | S_IWUSR);
|
S_IRUGO | S_IWUSR);
|
||||||
|
@ -72,6 +72,7 @@
|
|||||||
|
|
||||||
#define MXS_I2C_QUEUESTAT (0x70)
|
#define MXS_I2C_QUEUESTAT (0x70)
|
||||||
#define MXS_I2C_QUEUESTAT_RD_QUEUE_EMPTY 0x00002000
|
#define MXS_I2C_QUEUESTAT_RD_QUEUE_EMPTY 0x00002000
|
||||||
|
#define MXS_I2C_QUEUESTAT_WRITE_QUEUE_CNT_MASK 0x0000001F
|
||||||
|
|
||||||
#define MXS_I2C_QUEUECMD (0x80)
|
#define MXS_I2C_QUEUECMD (0x80)
|
||||||
|
|
||||||
@ -219,14 +220,14 @@ static int mxs_i2c_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg,
|
|||||||
int ret;
|
int ret;
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
init_completion(&i2c->cmd_complete);
|
|
||||||
|
|
||||||
dev_dbg(i2c->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n",
|
dev_dbg(i2c->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n",
|
||||||
msg->addr, msg->len, msg->flags, stop);
|
msg->addr, msg->len, msg->flags, stop);
|
||||||
|
|
||||||
if (msg->len == 0)
|
if (msg->len == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
init_completion(&i2c->cmd_complete);
|
||||||
|
|
||||||
flags = stop ? MXS_I2C_CTRL0_POST_SEND_STOP : 0;
|
flags = stop ? MXS_I2C_CTRL0_POST_SEND_STOP : 0;
|
||||||
|
|
||||||
if (msg->flags & I2C_M_RD)
|
if (msg->flags & I2C_M_RD)
|
||||||
@ -286,6 +287,7 @@ static irqreturn_t mxs_i2c_isr(int this_irq, void *dev_id)
|
|||||||
{
|
{
|
||||||
struct mxs_i2c_dev *i2c = dev_id;
|
struct mxs_i2c_dev *i2c = dev_id;
|
||||||
u32 stat = readl(i2c->regs + MXS_I2C_CTRL1) & MXS_I2C_IRQ_MASK;
|
u32 stat = readl(i2c->regs + MXS_I2C_CTRL1) & MXS_I2C_IRQ_MASK;
|
||||||
|
bool is_last_cmd;
|
||||||
|
|
||||||
if (!stat)
|
if (!stat)
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
@ -300,9 +302,14 @@ static irqreturn_t mxs_i2c_isr(int this_irq, void *dev_id)
|
|||||||
else
|
else
|
||||||
i2c->cmd_err = 0;
|
i2c->cmd_err = 0;
|
||||||
|
|
||||||
complete(&i2c->cmd_complete);
|
is_last_cmd = (readl(i2c->regs + MXS_I2C_QUEUESTAT) &
|
||||||
|
MXS_I2C_QUEUESTAT_WRITE_QUEUE_CNT_MASK) == 0;
|
||||||
|
|
||||||
|
if (is_last_cmd || i2c->cmd_err)
|
||||||
|
complete(&i2c->cmd_complete);
|
||||||
|
|
||||||
writel(stat, i2c->regs + MXS_I2C_CTRL1_CLR);
|
writel(stat, i2c->regs + MXS_I2C_CTRL1_CLR);
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,8 @@ static ssize_t debug_read_ver(struct file *file, char __user *userbuf,
|
|||||||
static ssize_t debug_read_regs(struct file *file, char __user *userbuf,
|
static ssize_t debug_read_regs(struct file *file, char __user *userbuf,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct omap_iommu *obj = file->private_data;
|
struct device *dev = file->private_data;
|
||||||
|
struct omap_iommu *obj = dev_to_omap_iommu(dev);
|
||||||
char *p, *buf;
|
char *p, *buf;
|
||||||
ssize_t bytes;
|
ssize_t bytes;
|
||||||
|
|
||||||
@ -67,7 +68,8 @@ static ssize_t debug_read_regs(struct file *file, char __user *userbuf,
|
|||||||
static ssize_t debug_read_tlb(struct file *file, char __user *userbuf,
|
static ssize_t debug_read_tlb(struct file *file, char __user *userbuf,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct omap_iommu *obj = file->private_data;
|
struct device *dev = file->private_data;
|
||||||
|
struct omap_iommu *obj = dev_to_omap_iommu(dev);
|
||||||
char *p, *buf;
|
char *p, *buf;
|
||||||
ssize_t bytes, rest;
|
ssize_t bytes, rest;
|
||||||
|
|
||||||
@ -97,7 +99,8 @@ static ssize_t debug_write_pagetable(struct file *file,
|
|||||||
struct iotlb_entry e;
|
struct iotlb_entry e;
|
||||||
struct cr_regs cr;
|
struct cr_regs cr;
|
||||||
int err;
|
int err;
|
||||||
struct omap_iommu *obj = file->private_data;
|
struct device *dev = file->private_data;
|
||||||
|
struct omap_iommu *obj = dev_to_omap_iommu(dev);
|
||||||
char buf[MAXCOLUMN], *p = buf;
|
char buf[MAXCOLUMN], *p = buf;
|
||||||
|
|
||||||
count = min(count, sizeof(buf));
|
count = min(count, sizeof(buf));
|
||||||
@ -184,7 +187,8 @@ out:
|
|||||||
static ssize_t debug_read_pagetable(struct file *file, char __user *userbuf,
|
static ssize_t debug_read_pagetable(struct file *file, char __user *userbuf,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct omap_iommu *obj = file->private_data;
|
struct device *dev = file->private_data;
|
||||||
|
struct omap_iommu *obj = dev_to_omap_iommu(dev);
|
||||||
char *p, *buf;
|
char *p, *buf;
|
||||||
size_t bytes;
|
size_t bytes;
|
||||||
|
|
||||||
@ -212,7 +216,8 @@ static ssize_t debug_read_pagetable(struct file *file, char __user *userbuf,
|
|||||||
static ssize_t debug_read_mmap(struct file *file, char __user *userbuf,
|
static ssize_t debug_read_mmap(struct file *file, char __user *userbuf,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct omap_iommu *obj = file->private_data;
|
struct device *dev = file->private_data;
|
||||||
|
struct omap_iommu *obj = dev_to_omap_iommu(dev);
|
||||||
char *p, *buf;
|
char *p, *buf;
|
||||||
struct iovm_struct *tmp;
|
struct iovm_struct *tmp;
|
||||||
int uninitialized_var(i);
|
int uninitialized_var(i);
|
||||||
@ -254,7 +259,7 @@ static ssize_t debug_read_mmap(struct file *file, char __user *userbuf,
|
|||||||
static ssize_t debug_read_mem(struct file *file, char __user *userbuf,
|
static ssize_t debug_read_mem(struct file *file, char __user *userbuf,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct omap_iommu *obj = file->private_data;
|
struct device *dev = file->private_data;
|
||||||
char *p, *buf;
|
char *p, *buf;
|
||||||
struct iovm_struct *area;
|
struct iovm_struct *area;
|
||||||
ssize_t bytes;
|
ssize_t bytes;
|
||||||
@ -268,8 +273,8 @@ static ssize_t debug_read_mem(struct file *file, char __user *userbuf,
|
|||||||
|
|
||||||
mutex_lock(&iommu_debug_lock);
|
mutex_lock(&iommu_debug_lock);
|
||||||
|
|
||||||
area = omap_find_iovm_area(obj, (u32)ppos);
|
area = omap_find_iovm_area(dev, (u32)ppos);
|
||||||
if (IS_ERR(area)) {
|
if (!area) {
|
||||||
bytes = -EINVAL;
|
bytes = -EINVAL;
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
@ -287,7 +292,7 @@ err_out:
|
|||||||
static ssize_t debug_write_mem(struct file *file, const char __user *userbuf,
|
static ssize_t debug_write_mem(struct file *file, const char __user *userbuf,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct omap_iommu *obj = file->private_data;
|
struct device *dev = file->private_data;
|
||||||
struct iovm_struct *area;
|
struct iovm_struct *area;
|
||||||
char *p, *buf;
|
char *p, *buf;
|
||||||
|
|
||||||
@ -305,8 +310,8 @@ static ssize_t debug_write_mem(struct file *file, const char __user *userbuf,
|
|||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
area = omap_find_iovm_area(obj, (u32)ppos);
|
area = omap_find_iovm_area(dev, (u32)ppos);
|
||||||
if (IS_ERR(area)) {
|
if (!area) {
|
||||||
count = -EINVAL;
|
count = -EINVAL;
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
@ -350,7 +355,7 @@ DEBUG_FOPS(mem);
|
|||||||
{ \
|
{ \
|
||||||
struct dentry *dent; \
|
struct dentry *dent; \
|
||||||
dent = debugfs_create_file(#attr, mode, parent, \
|
dent = debugfs_create_file(#attr, mode, parent, \
|
||||||
obj, &debug_##attr##_fops); \
|
dev, &debug_##attr##_fops); \
|
||||||
if (!dent) \
|
if (!dent) \
|
||||||
return -ENOMEM; \
|
return -ENOMEM; \
|
||||||
}
|
}
|
||||||
@ -362,20 +367,29 @@ static int iommu_debug_register(struct device *dev, void *data)
|
|||||||
{
|
{
|
||||||
struct platform_device *pdev = to_platform_device(dev);
|
struct platform_device *pdev = to_platform_device(dev);
|
||||||
struct omap_iommu *obj = platform_get_drvdata(pdev);
|
struct omap_iommu *obj = platform_get_drvdata(pdev);
|
||||||
|
struct omap_iommu_arch_data *arch_data;
|
||||||
struct dentry *d, *parent;
|
struct dentry *d, *parent;
|
||||||
|
|
||||||
if (!obj || !obj->dev)
|
if (!obj || !obj->dev)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
arch_data = kzalloc(sizeof(*arch_data), GFP_KERNEL);
|
||||||
|
if (!arch_data)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
arch_data->iommu_dev = obj;
|
||||||
|
|
||||||
|
dev->archdata.iommu = arch_data;
|
||||||
|
|
||||||
d = debugfs_create_dir(obj->name, iommu_debug_root);
|
d = debugfs_create_dir(obj->name, iommu_debug_root);
|
||||||
if (!d)
|
if (!d)
|
||||||
return -ENOMEM;
|
goto nomem;
|
||||||
parent = d;
|
parent = d;
|
||||||
|
|
||||||
d = debugfs_create_u8("nr_tlb_entries", 400, parent,
|
d = debugfs_create_u8("nr_tlb_entries", 400, parent,
|
||||||
(u8 *)&obj->nr_tlb_entries);
|
(u8 *)&obj->nr_tlb_entries);
|
||||||
if (!d)
|
if (!d)
|
||||||
return -ENOMEM;
|
goto nomem;
|
||||||
|
|
||||||
DEBUG_ADD_FILE_RO(ver);
|
DEBUG_ADD_FILE_RO(ver);
|
||||||
DEBUG_ADD_FILE_RO(regs);
|
DEBUG_ADD_FILE_RO(regs);
|
||||||
@ -384,6 +398,22 @@ static int iommu_debug_register(struct device *dev, void *data)
|
|||||||
DEBUG_ADD_FILE_RO(mmap);
|
DEBUG_ADD_FILE_RO(mmap);
|
||||||
DEBUG_ADD_FILE(mem);
|
DEBUG_ADD_FILE(mem);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
nomem:
|
||||||
|
kfree(arch_data);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int iommu_debug_unregister(struct device *dev, void *data)
|
||||||
|
{
|
||||||
|
if (!dev->archdata.iommu)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
kfree(dev->archdata.iommu);
|
||||||
|
|
||||||
|
dev->archdata.iommu = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -411,6 +441,7 @@ module_init(iommu_debug_init)
|
|||||||
static void __exit iommu_debugfs_exit(void)
|
static void __exit iommu_debugfs_exit(void)
|
||||||
{
|
{
|
||||||
debugfs_remove_recursive(iommu_debug_root);
|
debugfs_remove_recursive(iommu_debug_root);
|
||||||
|
omap_foreach_iommu_device(NULL, iommu_debug_unregister);
|
||||||
}
|
}
|
||||||
module_exit(iommu_debugfs_exit)
|
module_exit(iommu_debugfs_exit)
|
||||||
|
|
||||||
|
@ -1223,7 +1223,8 @@ static int __init omap_iommu_init(void)
|
|||||||
|
|
||||||
return platform_driver_register(&omap_iommu_driver);
|
return platform_driver_register(&omap_iommu_driver);
|
||||||
}
|
}
|
||||||
module_init(omap_iommu_init);
|
/* must be ready before omap3isp is probed */
|
||||||
|
subsys_initcall(omap_iommu_init);
|
||||||
|
|
||||||
static void __exit omap_iommu_exit(void)
|
static void __exit omap_iommu_exit(void)
|
||||||
{
|
{
|
||||||
|
@ -95,11 +95,16 @@ static void sja1000_write_cmdreg(struct sja1000_priv *priv, u8 val)
|
|||||||
spin_unlock_irqrestore(&priv->cmdreg_lock, flags);
|
spin_unlock_irqrestore(&priv->cmdreg_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int sja1000_is_absent(struct sja1000_priv *priv)
|
||||||
|
{
|
||||||
|
return (priv->read_reg(priv, REG_MOD) == 0xFF);
|
||||||
|
}
|
||||||
|
|
||||||
static int sja1000_probe_chip(struct net_device *dev)
|
static int sja1000_probe_chip(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct sja1000_priv *priv = netdev_priv(dev);
|
struct sja1000_priv *priv = netdev_priv(dev);
|
||||||
|
|
||||||
if (priv->reg_base && (priv->read_reg(priv, 0) == 0xFF)) {
|
if (priv->reg_base && sja1000_is_absent(priv)) {
|
||||||
printk(KERN_INFO "%s: probing @0x%lX failed\n",
|
printk(KERN_INFO "%s: probing @0x%lX failed\n",
|
||||||
DRV_NAME, dev->base_addr);
|
DRV_NAME, dev->base_addr);
|
||||||
return 0;
|
return 0;
|
||||||
@ -493,6 +498,9 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
|
|||||||
while ((isrc = priv->read_reg(priv, REG_IR)) && (n < SJA1000_MAX_IRQ)) {
|
while ((isrc = priv->read_reg(priv, REG_IR)) && (n < SJA1000_MAX_IRQ)) {
|
||||||
n++;
|
n++;
|
||||||
status = priv->read_reg(priv, REG_SR);
|
status = priv->read_reg(priv, REG_SR);
|
||||||
|
/* check for absent controller due to hw unplug */
|
||||||
|
if (status == 0xFF && sja1000_is_absent(priv))
|
||||||
|
return IRQ_NONE;
|
||||||
|
|
||||||
if (isrc & IRQ_WUI)
|
if (isrc & IRQ_WUI)
|
||||||
dev_warn(dev->dev.parent, "wakeup interrupt\n");
|
dev_warn(dev->dev.parent, "wakeup interrupt\n");
|
||||||
@ -509,6 +517,9 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
|
|||||||
while (status & SR_RBS) {
|
while (status & SR_RBS) {
|
||||||
sja1000_rx(dev);
|
sja1000_rx(dev);
|
||||||
status = priv->read_reg(priv, REG_SR);
|
status = priv->read_reg(priv, REG_SR);
|
||||||
|
/* check for absent controller */
|
||||||
|
if (status == 0xFF && sja1000_is_absent(priv))
|
||||||
|
return IRQ_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isrc & (IRQ_DOI | IRQ_EI | IRQ_BEI | IRQ_EPI | IRQ_ALI)) {
|
if (isrc & (IRQ_DOI | IRQ_EI | IRQ_BEI | IRQ_EPI | IRQ_ALI)) {
|
||||||
|
@ -2244,10 +2244,6 @@ static netdev_tx_t atl1c_xmit_frame(struct sk_buff *skb,
|
|||||||
dev_info(&adapter->pdev->dev, "tx locked\n");
|
dev_info(&adapter->pdev->dev, "tx locked\n");
|
||||||
return NETDEV_TX_LOCKED;
|
return NETDEV_TX_LOCKED;
|
||||||
}
|
}
|
||||||
if (skb->mark == 0x01)
|
|
||||||
type = atl1c_trans_high;
|
|
||||||
else
|
|
||||||
type = atl1c_trans_normal;
|
|
||||||
|
|
||||||
if (atl1c_tpd_avail(adapter, type) < tpd_req) {
|
if (atl1c_tpd_avail(adapter, type) < tpd_req) {
|
||||||
/* no enough descriptor, just stop queue */
|
/* no enough descriptor, just stop queue */
|
||||||
|
@ -2339,7 +2339,7 @@ static inline int __init b44_pci_init(void)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void __exit b44_pci_exit(void)
|
static inline void b44_pci_exit(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_B44_PCI
|
#ifdef CONFIG_B44_PCI
|
||||||
ssb_pcihost_unregister(&b44_pci_driver);
|
ssb_pcihost_unregister(&b44_pci_driver);
|
||||||
|
@ -3584,7 +3584,11 @@ static int cnic_get_v6_route(struct sockaddr_in6 *dst_addr,
|
|||||||
fl6.flowi6_oif = dst_addr->sin6_scope_id;
|
fl6.flowi6_oif = dst_addr->sin6_scope_id;
|
||||||
|
|
||||||
*dst = ip6_route_output(&init_net, NULL, &fl6);
|
*dst = ip6_route_output(&init_net, NULL, &fl6);
|
||||||
if (*dst)
|
if ((*dst)->error) {
|
||||||
|
dst_release(*dst);
|
||||||
|
*dst = NULL;
|
||||||
|
return -ENETUNREACH;
|
||||||
|
} else
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ static inline void cq_enet_rq_desc_dec(struct cq_enet_rq_desc *desc,
|
|||||||
CQ_ENET_RQ_DESC_FCOE_FC_CRC_OK) ? 1 : 0;
|
CQ_ENET_RQ_DESC_FCOE_FC_CRC_OK) ? 1 : 0;
|
||||||
*fcoe_enc_error = (desc->flags &
|
*fcoe_enc_error = (desc->flags &
|
||||||
CQ_ENET_RQ_DESC_FCOE_ENC_ERROR) ? 1 : 0;
|
CQ_ENET_RQ_DESC_FCOE_ENC_ERROR) ? 1 : 0;
|
||||||
*fcoe_eof = (u8)((desc->checksum_fcoe >>
|
*fcoe_eof = (u8)((le16_to_cpu(desc->checksum_fcoe) >>
|
||||||
CQ_ENET_RQ_DESC_FCOE_EOF_SHIFT) &
|
CQ_ENET_RQ_DESC_FCOE_EOF_SHIFT) &
|
||||||
CQ_ENET_RQ_DESC_FCOE_EOF_MASK);
|
CQ_ENET_RQ_DESC_FCOE_EOF_MASK);
|
||||||
*checksum = 0;
|
*checksum = 0;
|
||||||
|
@ -72,7 +72,7 @@ static int enic_set_port_profile(struct enic *enic, int vf)
|
|||||||
struct enic_port_profile *pp;
|
struct enic_port_profile *pp;
|
||||||
struct vic_provinfo *vp;
|
struct vic_provinfo *vp;
|
||||||
const u8 oui[3] = VIC_PROVINFO_CISCO_OUI;
|
const u8 oui[3] = VIC_PROVINFO_CISCO_OUI;
|
||||||
const u16 os_type = htons(VIC_GENERIC_PROV_OS_TYPE_LINUX);
|
const __be16 os_type = htons(VIC_GENERIC_PROV_OS_TYPE_LINUX);
|
||||||
char uuid_str[38];
|
char uuid_str[38];
|
||||||
char client_mac_str[18];
|
char client_mac_str[18];
|
||||||
u8 *client_mac;
|
u8 *client_mac;
|
||||||
|
@ -2328,19 +2328,11 @@ jme_change_mtu(struct net_device *netdev, int new_mtu)
|
|||||||
((new_mtu) < IPV6_MIN_MTU))
|
((new_mtu) < IPV6_MIN_MTU))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (new_mtu > 4000) {
|
|
||||||
jme->reg_rxcs &= ~RXCS_FIFOTHNP;
|
|
||||||
jme->reg_rxcs |= RXCS_FIFOTHNP_64QW;
|
|
||||||
jme_restart_rx_engine(jme);
|
|
||||||
} else {
|
|
||||||
jme->reg_rxcs &= ~RXCS_FIFOTHNP;
|
|
||||||
jme->reg_rxcs |= RXCS_FIFOTHNP_128QW;
|
|
||||||
jme_restart_rx_engine(jme);
|
|
||||||
}
|
|
||||||
|
|
||||||
netdev->mtu = new_mtu;
|
netdev->mtu = new_mtu;
|
||||||
netdev_update_features(netdev);
|
netdev_update_features(netdev);
|
||||||
|
|
||||||
|
jme_restart_rx_engine(jme);
|
||||||
jme_reset_link(jme);
|
jme_reset_link(jme);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -730,7 +730,7 @@ enum jme_rxcs_values {
|
|||||||
RXCS_RETRYCNT_60 = 0x00000F00,
|
RXCS_RETRYCNT_60 = 0x00000F00,
|
||||||
|
|
||||||
RXCS_DEFAULT = RXCS_FIFOTHTP_128T |
|
RXCS_DEFAULT = RXCS_FIFOTHTP_128T |
|
||||||
RXCS_FIFOTHNP_128QW |
|
RXCS_FIFOTHNP_16QW |
|
||||||
RXCS_DMAREQSZ_128B |
|
RXCS_DMAREQSZ_128B |
|
||||||
RXCS_RETRYGAP_256ns |
|
RXCS_RETRYGAP_256ns |
|
||||||
RXCS_RETRYCNT_32,
|
RXCS_RETRYCNT_32,
|
||||||
|
@ -1036,7 +1036,7 @@ int mlx4_assign_eq(struct mlx4_dev *dev, char* name, int * vector)
|
|||||||
struct mlx4_priv *priv = mlx4_priv(dev);
|
struct mlx4_priv *priv = mlx4_priv(dev);
|
||||||
int vec = 0, err = 0, i;
|
int vec = 0, err = 0, i;
|
||||||
|
|
||||||
spin_lock(&priv->msix_ctl.pool_lock);
|
mutex_lock(&priv->msix_ctl.pool_lock);
|
||||||
for (i = 0; !vec && i < dev->caps.comp_pool; i++) {
|
for (i = 0; !vec && i < dev->caps.comp_pool; i++) {
|
||||||
if (~priv->msix_ctl.pool_bm & 1ULL << i) {
|
if (~priv->msix_ctl.pool_bm & 1ULL << i) {
|
||||||
priv->msix_ctl.pool_bm |= 1ULL << i;
|
priv->msix_ctl.pool_bm |= 1ULL << i;
|
||||||
@ -1058,7 +1058,7 @@ int mlx4_assign_eq(struct mlx4_dev *dev, char* name, int * vector)
|
|||||||
eq_set_ci(&priv->eq_table.eq[vec], 1);
|
eq_set_ci(&priv->eq_table.eq[vec], 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spin_unlock(&priv->msix_ctl.pool_lock);
|
mutex_unlock(&priv->msix_ctl.pool_lock);
|
||||||
|
|
||||||
if (vec) {
|
if (vec) {
|
||||||
*vector = vec;
|
*vector = vec;
|
||||||
@ -1079,13 +1079,13 @@ void mlx4_release_eq(struct mlx4_dev *dev, int vec)
|
|||||||
if (likely(i >= 0)) {
|
if (likely(i >= 0)) {
|
||||||
/*sanity check , making sure were not trying to free irq's
|
/*sanity check , making sure were not trying to free irq's
|
||||||
Belonging to a legacy EQ*/
|
Belonging to a legacy EQ*/
|
||||||
spin_lock(&priv->msix_ctl.pool_lock);
|
mutex_lock(&priv->msix_ctl.pool_lock);
|
||||||
if (priv->msix_ctl.pool_bm & 1ULL << i) {
|
if (priv->msix_ctl.pool_bm & 1ULL << i) {
|
||||||
free_irq(priv->eq_table.eq[vec].irq,
|
free_irq(priv->eq_table.eq[vec].irq,
|
||||||
&priv->eq_table.eq[vec]);
|
&priv->eq_table.eq[vec]);
|
||||||
priv->msix_ctl.pool_bm &= ~(1ULL << i);
|
priv->msix_ctl.pool_bm &= ~(1ULL << i);
|
||||||
}
|
}
|
||||||
spin_unlock(&priv->msix_ctl.pool_lock);
|
mutex_unlock(&priv->msix_ctl.pool_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -531,15 +531,14 @@ int mlx4_change_port_types(struct mlx4_dev *dev,
|
|||||||
for (port = 0; port < dev->caps.num_ports; port++) {
|
for (port = 0; port < dev->caps.num_ports; port++) {
|
||||||
/* Change the port type only if the new type is different
|
/* Change the port type only if the new type is different
|
||||||
* from the current, and not set to Auto */
|
* from the current, and not set to Auto */
|
||||||
if (port_types[port] != dev->caps.port_type[port + 1]) {
|
if (port_types[port] != dev->caps.port_type[port + 1])
|
||||||
change = 1;
|
change = 1;
|
||||||
dev->caps.port_type[port + 1] = port_types[port];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (change) {
|
if (change) {
|
||||||
mlx4_unregister_device(dev);
|
mlx4_unregister_device(dev);
|
||||||
for (port = 1; port <= dev->caps.num_ports; port++) {
|
for (port = 1; port <= dev->caps.num_ports; port++) {
|
||||||
mlx4_CLOSE_PORT(dev, port);
|
mlx4_CLOSE_PORT(dev, port);
|
||||||
|
dev->caps.port_type[port] = port_types[port - 1];
|
||||||
err = mlx4_SET_PORT(dev, port);
|
err = mlx4_SET_PORT(dev, port);
|
||||||
if (err) {
|
if (err) {
|
||||||
mlx4_err(dev, "Failed to set port %d, "
|
mlx4_err(dev, "Failed to set port %d, "
|
||||||
@ -986,6 +985,9 @@ static int map_bf_area(struct mlx4_dev *dev)
|
|||||||
resource_size_t bf_len;
|
resource_size_t bf_len;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
|
if (!dev->caps.bf_reg_size)
|
||||||
|
return -ENXIO;
|
||||||
|
|
||||||
bf_start = pci_resource_start(dev->pdev, 2) +
|
bf_start = pci_resource_start(dev->pdev, 2) +
|
||||||
(dev->caps.num_uars << PAGE_SHIFT);
|
(dev->caps.num_uars << PAGE_SHIFT);
|
||||||
bf_len = pci_resource_len(dev->pdev, 2) -
|
bf_len = pci_resource_len(dev->pdev, 2) -
|
||||||
@ -1825,7 +1827,7 @@ slave_start:
|
|||||||
goto err_master_mfunc;
|
goto err_master_mfunc;
|
||||||
|
|
||||||
priv->msix_ctl.pool_bm = 0;
|
priv->msix_ctl.pool_bm = 0;
|
||||||
spin_lock_init(&priv->msix_ctl.pool_lock);
|
mutex_init(&priv->msix_ctl.pool_lock);
|
||||||
|
|
||||||
mlx4_enable_msi_x(dev);
|
mlx4_enable_msi_x(dev);
|
||||||
if ((mlx4_is_mfunc(dev)) &&
|
if ((mlx4_is_mfunc(dev)) &&
|
||||||
|
@ -697,7 +697,7 @@ struct mlx4_sense {
|
|||||||
|
|
||||||
struct mlx4_msix_ctl {
|
struct mlx4_msix_ctl {
|
||||||
u64 pool_bm;
|
u64 pool_bm;
|
||||||
spinlock_t pool_lock;
|
struct mutex pool_lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mlx4_steer {
|
struct mlx4_steer {
|
||||||
|
@ -1545,7 +1545,7 @@ static int __devinit ks8851_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
netdev->irq = platform_get_irq(pdev, 0);
|
netdev->irq = platform_get_irq(pdev, 0);
|
||||||
|
|
||||||
if (netdev->irq < 0) {
|
if ((int)netdev->irq < 0) {
|
||||||
err = netdev->irq;
|
err = netdev->irq;
|
||||||
goto err_get_irq;
|
goto err_get_irq;
|
||||||
}
|
}
|
||||||
|
@ -156,11 +156,10 @@ static int efx_init_rx_buffers_skb(struct efx_rx_queue *rx_queue)
|
|||||||
if (unlikely(!skb))
|
if (unlikely(!skb))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* Adjust the SKB for padding and checksum */
|
/* Adjust the SKB for padding */
|
||||||
skb_reserve(skb, NET_IP_ALIGN);
|
skb_reserve(skb, NET_IP_ALIGN);
|
||||||
rx_buf->len = skb_len - NET_IP_ALIGN;
|
rx_buf->len = skb_len - NET_IP_ALIGN;
|
||||||
rx_buf->is_page = false;
|
rx_buf->is_page = false;
|
||||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
|
||||||
|
|
||||||
rx_buf->dma_addr = pci_map_single(efx->pci_dev,
|
rx_buf->dma_addr = pci_map_single(efx->pci_dev,
|
||||||
skb->data, rx_buf->len,
|
skb->data, rx_buf->len,
|
||||||
@ -496,6 +495,7 @@ static void efx_rx_packet_gro(struct efx_channel *channel,
|
|||||||
|
|
||||||
EFX_BUG_ON_PARANOID(!checksummed);
|
EFX_BUG_ON_PARANOID(!checksummed);
|
||||||
rx_buf->u.skb = NULL;
|
rx_buf->u.skb = NULL;
|
||||||
|
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||||
|
|
||||||
gro_result = napi_gro_receive(napi, skb);
|
gro_result = napi_gro_receive(napi, skb);
|
||||||
}
|
}
|
||||||
|
@ -1009,7 +1009,7 @@ static void emac_rx_handler(void *token, int len, int status)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* free and bail if we are shutting down */
|
/* free and bail if we are shutting down */
|
||||||
if (unlikely(!netif_running(ndev) || !netif_carrier_ok(ndev))) {
|
if (unlikely(!netif_running(ndev))) {
|
||||||
dev_kfree_skb_any(skb);
|
dev_kfree_skb_any(skb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1038,7 +1038,9 @@ static void emac_rx_handler(void *token, int len, int status)
|
|||||||
recycle:
|
recycle:
|
||||||
ret = cpdma_chan_submit(priv->rxchan, skb, skb->data,
|
ret = cpdma_chan_submit(priv->rxchan, skb, skb->data,
|
||||||
skb_tailroom(skb), GFP_KERNEL);
|
skb_tailroom(skb), GFP_KERNEL);
|
||||||
if (WARN_ON(ret < 0))
|
|
||||||
|
WARN_ON(ret == -ENOMEM);
|
||||||
|
if (unlikely(ret < 0))
|
||||||
dev_kfree_skb_any(skb);
|
dev_kfree_skb_any(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,16 +30,16 @@
|
|||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
MODULE_DESCRIPTION("ICPlus IP175C/IP101A/IC1001 PHY drivers");
|
MODULE_DESCRIPTION("ICPlus IP175C/IP101A/IP101G/IC1001 PHY drivers");
|
||||||
MODULE_AUTHOR("Michael Barkowski");
|
MODULE_AUTHOR("Michael Barkowski");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
/* IP101A/IP1001 */
|
/* IP101A/G - IP1001 */
|
||||||
#define IP10XX_SPEC_CTRL_STATUS 16 /* Spec. Control Register */
|
#define IP10XX_SPEC_CTRL_STATUS 16 /* Spec. Control Register */
|
||||||
#define IP1001_SPEC_CTRL_STATUS_2 20 /* IP1001 Spec. Control Reg 2 */
|
#define IP1001_SPEC_CTRL_STATUS_2 20 /* IP1001 Spec. Control Reg 2 */
|
||||||
#define IP1001_PHASE_SEL_MASK 3 /* IP1001 RX/TXPHASE_SEL */
|
#define IP1001_PHASE_SEL_MASK 3 /* IP1001 RX/TXPHASE_SEL */
|
||||||
#define IP1001_APS_ON 11 /* IP1001 APS Mode bit */
|
#define IP1001_APS_ON 11 /* IP1001 APS Mode bit */
|
||||||
#define IP101A_APS_ON 2 /* IP101A APS Mode bit */
|
#define IP101A_G_APS_ON 2 /* IP101A/G APS Mode bit */
|
||||||
|
|
||||||
static int ip175c_config_init(struct phy_device *phydev)
|
static int ip175c_config_init(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
@ -98,20 +98,24 @@ static int ip175c_config_init(struct phy_device *phydev)
|
|||||||
|
|
||||||
static int ip1xx_reset(struct phy_device *phydev)
|
static int ip1xx_reset(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
int err, bmcr;
|
int bmcr;
|
||||||
|
|
||||||
/* Software Reset PHY */
|
/* Software Reset PHY */
|
||||||
bmcr = phy_read(phydev, MII_BMCR);
|
bmcr = phy_read(phydev, MII_BMCR);
|
||||||
|
if (bmcr < 0)
|
||||||
|
return bmcr;
|
||||||
bmcr |= BMCR_RESET;
|
bmcr |= BMCR_RESET;
|
||||||
err = phy_write(phydev, MII_BMCR, bmcr);
|
bmcr = phy_write(phydev, MII_BMCR, bmcr);
|
||||||
if (err < 0)
|
if (bmcr < 0)
|
||||||
return err;
|
return bmcr;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
bmcr = phy_read(phydev, MII_BMCR);
|
bmcr = phy_read(phydev, MII_BMCR);
|
||||||
|
if (bmcr < 0)
|
||||||
|
return bmcr;
|
||||||
} while (bmcr & BMCR_RESET);
|
} while (bmcr & BMCR_RESET);
|
||||||
|
|
||||||
return err;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ip1001_config_init(struct phy_device *phydev)
|
static int ip1001_config_init(struct phy_device *phydev)
|
||||||
@ -124,7 +128,10 @@ static int ip1001_config_init(struct phy_device *phydev)
|
|||||||
|
|
||||||
/* Enable Auto Power Saving mode */
|
/* Enable Auto Power Saving mode */
|
||||||
c = phy_read(phydev, IP1001_SPEC_CTRL_STATUS_2);
|
c = phy_read(phydev, IP1001_SPEC_CTRL_STATUS_2);
|
||||||
|
if (c < 0)
|
||||||
|
return c;
|
||||||
c |= IP1001_APS_ON;
|
c |= IP1001_APS_ON;
|
||||||
|
c = phy_write(phydev, IP1001_SPEC_CTRL_STATUS_2, c);
|
||||||
if (c < 0)
|
if (c < 0)
|
||||||
return c;
|
return c;
|
||||||
|
|
||||||
@ -132,14 +139,19 @@ static int ip1001_config_init(struct phy_device *phydev)
|
|||||||
/* Additional delay (2ns) used to adjust RX clock phase
|
/* Additional delay (2ns) used to adjust RX clock phase
|
||||||
* at RGMII interface */
|
* at RGMII interface */
|
||||||
c = phy_read(phydev, IP10XX_SPEC_CTRL_STATUS);
|
c = phy_read(phydev, IP10XX_SPEC_CTRL_STATUS);
|
||||||
|
if (c < 0)
|
||||||
|
return c;
|
||||||
|
|
||||||
c |= IP1001_PHASE_SEL_MASK;
|
c |= IP1001_PHASE_SEL_MASK;
|
||||||
c = phy_write(phydev, IP10XX_SPEC_CTRL_STATUS, c);
|
c = phy_write(phydev, IP10XX_SPEC_CTRL_STATUS, c);
|
||||||
|
if (c < 0)
|
||||||
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
return c;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ip101a_config_init(struct phy_device *phydev)
|
static int ip101a_g_config_init(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
@ -149,7 +161,7 @@ static int ip101a_config_init(struct phy_device *phydev)
|
|||||||
|
|
||||||
/* Enable Auto Power Saving mode */
|
/* Enable Auto Power Saving mode */
|
||||||
c = phy_read(phydev, IP10XX_SPEC_CTRL_STATUS);
|
c = phy_read(phydev, IP10XX_SPEC_CTRL_STATUS);
|
||||||
c |= IP101A_APS_ON;
|
c |= IP101A_G_APS_ON;
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,6 +203,7 @@ static struct phy_driver ip1001_driver = {
|
|||||||
.phy_id_mask = 0x0ffffff0,
|
.phy_id_mask = 0x0ffffff0,
|
||||||
.features = PHY_GBIT_FEATURES | SUPPORTED_Pause |
|
.features = PHY_GBIT_FEATURES | SUPPORTED_Pause |
|
||||||
SUPPORTED_Asym_Pause,
|
SUPPORTED_Asym_Pause,
|
||||||
|
.flags = PHY_HAS_INTERRUPT,
|
||||||
.config_init = &ip1001_config_init,
|
.config_init = &ip1001_config_init,
|
||||||
.config_aneg = &genphy_config_aneg,
|
.config_aneg = &genphy_config_aneg,
|
||||||
.read_status = &genphy_read_status,
|
.read_status = &genphy_read_status,
|
||||||
@ -199,13 +212,14 @@ static struct phy_driver ip1001_driver = {
|
|||||||
.driver = { .owner = THIS_MODULE,},
|
.driver = { .owner = THIS_MODULE,},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct phy_driver ip101a_driver = {
|
static struct phy_driver ip101a_g_driver = {
|
||||||
.phy_id = 0x02430c54,
|
.phy_id = 0x02430c54,
|
||||||
.name = "ICPlus IP101A",
|
.name = "ICPlus IP101A/G",
|
||||||
.phy_id_mask = 0x0ffffff0,
|
.phy_id_mask = 0x0ffffff0,
|
||||||
.features = PHY_BASIC_FEATURES | SUPPORTED_Pause |
|
.features = PHY_BASIC_FEATURES | SUPPORTED_Pause |
|
||||||
SUPPORTED_Asym_Pause,
|
SUPPORTED_Asym_Pause,
|
||||||
.config_init = &ip101a_config_init,
|
.flags = PHY_HAS_INTERRUPT,
|
||||||
|
.config_init = &ip101a_g_config_init,
|
||||||
.config_aneg = &genphy_config_aneg,
|
.config_aneg = &genphy_config_aneg,
|
||||||
.read_status = &genphy_read_status,
|
.read_status = &genphy_read_status,
|
||||||
.suspend = genphy_suspend,
|
.suspend = genphy_suspend,
|
||||||
@ -221,7 +235,7 @@ static int __init icplus_init(void)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
ret = phy_driver_register(&ip101a_driver);
|
ret = phy_driver_register(&ip101a_g_driver);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
@ -231,7 +245,7 @@ static int __init icplus_init(void)
|
|||||||
static void __exit icplus_exit(void)
|
static void __exit icplus_exit(void)
|
||||||
{
|
{
|
||||||
phy_driver_unregister(&ip1001_driver);
|
phy_driver_unregister(&ip1001_driver);
|
||||||
phy_driver_unregister(&ip101a_driver);
|
phy_driver_unregister(&ip101a_g_driver);
|
||||||
phy_driver_unregister(&ip175c_driver);
|
phy_driver_unregister(&ip175c_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,6 +255,7 @@ module_exit(icplus_exit);
|
|||||||
static struct mdio_device_id __maybe_unused icplus_tbl[] = {
|
static struct mdio_device_id __maybe_unused icplus_tbl[] = {
|
||||||
{ 0x02430d80, 0x0ffffff0 },
|
{ 0x02430d80, 0x0ffffff0 },
|
||||||
{ 0x02430d90, 0x0ffffff0 },
|
{ 0x02430d90, 0x0ffffff0 },
|
||||||
|
{ 0x02430c54, 0x0ffffff0 },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2024,14 +2024,22 @@ ppp_mp_reconstruct(struct ppp *ppp)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (PPP_MP_CB(p)->sequence != seq) {
|
if (PPP_MP_CB(p)->sequence != seq) {
|
||||||
|
u32 oldseq;
|
||||||
/* Fragment `seq' is missing. If it is after
|
/* Fragment `seq' is missing. If it is after
|
||||||
minseq, it might arrive later, so stop here. */
|
minseq, it might arrive later, so stop here. */
|
||||||
if (seq_after(seq, minseq))
|
if (seq_after(seq, minseq))
|
||||||
break;
|
break;
|
||||||
/* Fragment `seq' is lost, keep going. */
|
/* Fragment `seq' is lost, keep going. */
|
||||||
lost = 1;
|
lost = 1;
|
||||||
|
oldseq = seq;
|
||||||
seq = seq_before(minseq, PPP_MP_CB(p)->sequence)?
|
seq = seq_before(minseq, PPP_MP_CB(p)->sequence)?
|
||||||
minseq + 1: PPP_MP_CB(p)->sequence;
|
minseq + 1: PPP_MP_CB(p)->sequence;
|
||||||
|
|
||||||
|
if (ppp->debug & 1)
|
||||||
|
netdev_printk(KERN_DEBUG, ppp->dev,
|
||||||
|
"lost frag %u..%u\n",
|
||||||
|
oldseq, seq-1);
|
||||||
|
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2076,6 +2084,10 @@ ppp_mp_reconstruct(struct ppp *ppp)
|
|||||||
struct sk_buff *tmp2;
|
struct sk_buff *tmp2;
|
||||||
|
|
||||||
skb_queue_reverse_walk_from_safe(list, p, tmp2) {
|
skb_queue_reverse_walk_from_safe(list, p, tmp2) {
|
||||||
|
if (ppp->debug & 1)
|
||||||
|
netdev_printk(KERN_DEBUG, ppp->dev,
|
||||||
|
"discarding frag %u\n",
|
||||||
|
PPP_MP_CB(p)->sequence);
|
||||||
__skb_unlink(p, list);
|
__skb_unlink(p, list);
|
||||||
kfree_skb(p);
|
kfree_skb(p);
|
||||||
}
|
}
|
||||||
@ -2091,6 +2103,17 @@ ppp_mp_reconstruct(struct ppp *ppp)
|
|||||||
/* If we have discarded any fragments,
|
/* If we have discarded any fragments,
|
||||||
signal a receive error. */
|
signal a receive error. */
|
||||||
if (PPP_MP_CB(head)->sequence != ppp->nextseq) {
|
if (PPP_MP_CB(head)->sequence != ppp->nextseq) {
|
||||||
|
skb_queue_walk_safe(list, p, tmp) {
|
||||||
|
if (p == head)
|
||||||
|
break;
|
||||||
|
if (ppp->debug & 1)
|
||||||
|
netdev_printk(KERN_DEBUG, ppp->dev,
|
||||||
|
"discarding frag %u\n",
|
||||||
|
PPP_MP_CB(p)->sequence);
|
||||||
|
__skb_unlink(p, list);
|
||||||
|
kfree_skb(p);
|
||||||
|
}
|
||||||
|
|
||||||
if (ppp->debug & 1)
|
if (ppp->debug & 1)
|
||||||
netdev_printk(KERN_DEBUG, ppp->dev,
|
netdev_printk(KERN_DEBUG, ppp->dev,
|
||||||
" missed pkts %u..%u\n",
|
" missed pkts %u..%u\n",
|
||||||
|
@ -573,6 +573,13 @@ static const struct usb_device_id products [] = {
|
|||||||
.driver_info = 0,
|
.driver_info = 0,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/* Logitech Harmony 900 - uses the pseudo-MDLM (BLAN) driver */
|
||||||
|
{
|
||||||
|
USB_DEVICE_AND_INTERFACE_INFO(0x046d, 0xc11f, USB_CLASS_COMM,
|
||||||
|
USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
|
||||||
|
.driver_info = 0,
|
||||||
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* WHITELIST!!!
|
* WHITELIST!!!
|
||||||
*
|
*
|
||||||
|
@ -1632,7 +1632,7 @@ static int hso_get_count(struct tty_struct *tty,
|
|||||||
struct hso_serial *serial = get_serial_by_tty(tty);
|
struct hso_serial *serial = get_serial_by_tty(tty);
|
||||||
struct hso_tiocmget *tiocmget = serial->tiocmget;
|
struct hso_tiocmget *tiocmget = serial->tiocmget;
|
||||||
|
|
||||||
memset(&icount, 0, sizeof(struct serial_icounter_struct));
|
memset(icount, 0, sizeof(struct serial_icounter_struct));
|
||||||
|
|
||||||
if (!tiocmget)
|
if (!tiocmget)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
@ -315,6 +315,11 @@ static const struct usb_device_id products [] = {
|
|||||||
.idProduct = 0x9031, /* C-750 C-760 */
|
.idProduct = 0x9031, /* C-750 C-760 */
|
||||||
ZAURUS_MASTER_INTERFACE,
|
ZAURUS_MASTER_INTERFACE,
|
||||||
.driver_info = ZAURUS_PXA_INFO,
|
.driver_info = ZAURUS_PXA_INFO,
|
||||||
|
}, {
|
||||||
|
/* C-750/C-760/C-860/SL-C3000 PDA in MDLM mode */
|
||||||
|
USB_DEVICE_AND_INTERFACE_INFO(0x04DD, 0x9031, USB_CLASS_COMM,
|
||||||
|
USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
|
||||||
|
.driver_info = (unsigned long) &bogus_mdlm_info,
|
||||||
}, {
|
}, {
|
||||||
.match_flags = USB_DEVICE_ID_MATCH_INT_INFO
|
.match_flags = USB_DEVICE_ID_MATCH_INT_INFO
|
||||||
| USB_DEVICE_ID_MATCH_DEVICE,
|
| USB_DEVICE_ID_MATCH_DEVICE,
|
||||||
@ -349,6 +354,13 @@ static const struct usb_device_id products [] = {
|
|||||||
ZAURUS_MASTER_INTERFACE,
|
ZAURUS_MASTER_INTERFACE,
|
||||||
.driver_info = OLYMPUS_MXL_INFO,
|
.driver_info = OLYMPUS_MXL_INFO,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/* Logitech Harmony 900 - uses the pseudo-MDLM (BLAN) driver */
|
||||||
|
{
|
||||||
|
USB_DEVICE_AND_INTERFACE_INFO(0x046d, 0xc11f, USB_CLASS_COMM,
|
||||||
|
USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
|
||||||
|
.driver_info = (unsigned long) &bogus_mdlm_info,
|
||||||
|
},
|
||||||
{ }, // END
|
{ }, // END
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(usb, products);
|
MODULE_DEVICE_TABLE(usb, products);
|
||||||
|
@ -843,8 +843,8 @@ vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
|
|||||||
/* for simplicity, don't copy L4 headers */
|
/* for simplicity, don't copy L4 headers */
|
||||||
ctx->l4_hdr_size = 0;
|
ctx->l4_hdr_size = 0;
|
||||||
}
|
}
|
||||||
ctx->copy_size = ctx->eth_ip_hdr_size +
|
ctx->copy_size = min(ctx->eth_ip_hdr_size +
|
||||||
ctx->l4_hdr_size;
|
ctx->l4_hdr_size, skb->len);
|
||||||
} else {
|
} else {
|
||||||
ctx->eth_ip_hdr_size = 0;
|
ctx->eth_ip_hdr_size = 0;
|
||||||
ctx->l4_hdr_size = 0;
|
ctx->l4_hdr_size = 0;
|
||||||
|
@ -1346,7 +1346,7 @@ static void ath_tx_status(void *priv, struct ieee80211_supported_band *sband,
|
|||||||
fc = hdr->frame_control;
|
fc = hdr->frame_control;
|
||||||
for (i = 0; i < sc->hw->max_rates; i++) {
|
for (i = 0; i < sc->hw->max_rates; i++) {
|
||||||
struct ieee80211_tx_rate *rate = &tx_info->status.rates[i];
|
struct ieee80211_tx_rate *rate = &tx_info->status.rates[i];
|
||||||
if (!rate->count)
|
if (rate->idx < 0 || !rate->count)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
final_ts_idx = i;
|
final_ts_idx = i;
|
||||||
|
@ -841,7 +841,12 @@ mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len, u8 *ssid,
|
|||||||
ret = mwifiex_set_rf_channel(priv, channel,
|
ret = mwifiex_set_rf_channel(priv, channel,
|
||||||
priv->adapter->channel_type);
|
priv->adapter->channel_type);
|
||||||
|
|
||||||
ret = mwifiex_set_encode(priv, NULL, 0, 0, 1); /* Disable keys */
|
/* As this is new association, clear locally stored
|
||||||
|
* keys and security related flags */
|
||||||
|
priv->sec_info.wpa_enabled = false;
|
||||||
|
priv->sec_info.wpa2_enabled = false;
|
||||||
|
priv->wep_key_curr_index = 0;
|
||||||
|
ret = mwifiex_set_encode(priv, NULL, 0, 0, 1);
|
||||||
|
|
||||||
if (mode == NL80211_IFTYPE_ADHOC) {
|
if (mode == NL80211_IFTYPE_ADHOC) {
|
||||||
/* "privacy" is set only for ad-hoc mode */
|
/* "privacy" is set only for ad-hoc mode */
|
||||||
@ -886,6 +891,7 @@ mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len, u8 *ssid,
|
|||||||
dev_dbg(priv->adapter->dev,
|
dev_dbg(priv->adapter->dev,
|
||||||
"info: setting wep encryption"
|
"info: setting wep encryption"
|
||||||
" with key len %d\n", sme->key_len);
|
" with key len %d\n", sme->key_len);
|
||||||
|
priv->wep_key_curr_index = sme->key_idx;
|
||||||
ret = mwifiex_set_encode(priv, sme->key, sme->key_len,
|
ret = mwifiex_set_encode(priv, sme->key, sme->key_len,
|
||||||
sme->key_idx, 0);
|
sme->key_idx, 0);
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#include <linux/prefetch.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* iommu_fill_pdir - Insert coalesced scatter/gather chunks into the I/O Pdir.
|
* iommu_fill_pdir - Insert coalesced scatter/gather chunks into the I/O Pdir.
|
||||||
* @ioc: The I/O Controller.
|
* @ioc: The I/O Controller.
|
||||||
|
@ -328,21 +328,15 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev)
|
|||||||
goto err1;
|
goto err1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret) {
|
pxa2xx_configure_sockets(&dev->dev);
|
||||||
while (--i >= 0)
|
dev_set_drvdata(&dev->dev, sinfo);
|
||||||
soc_pcmcia_remove_one(&sinfo->skt[i]);
|
|
||||||
kfree(sinfo);
|
|
||||||
clk_put(clk);
|
|
||||||
} else {
|
|
||||||
pxa2xx_configure_sockets(&dev->dev);
|
|
||||||
dev_set_drvdata(&dev->dev, sinfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err1:
|
err1:
|
||||||
while (--i >= 0)
|
while (--i >= 0)
|
||||||
soc_pcmcia_remove_one(&sinfo->skt[i]);
|
soc_pcmcia_remove_one(&sinfo->skt[i]);
|
||||||
|
clk_put(clk);
|
||||||
kfree(sinfo);
|
kfree(sinfo);
|
||||||
err0:
|
err0:
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -196,7 +196,7 @@ static const unsigned int LDO12_suspend_table[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned int LDO13_table[] = {
|
static const unsigned int LDO13_table[] = {
|
||||||
1300000, 1800000, 2000000, 2500000, 2800000, 3000000, 0, 0,
|
1200000, 1300000, 1800000, 2000000, 2500000, 2800000, 3000000, 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned int LDO13_suspend_table[] = {
|
static const unsigned int LDO13_suspend_table[] = {
|
||||||
@ -389,10 +389,10 @@ static struct pm8607_regulator_info pm8607_regulator_info[] = {
|
|||||||
PM8607_LDO( 7, LDO7, 0, 3, SUPPLIES_EN12, 1),
|
PM8607_LDO( 7, LDO7, 0, 3, SUPPLIES_EN12, 1),
|
||||||
PM8607_LDO( 8, LDO8, 0, 3, SUPPLIES_EN12, 2),
|
PM8607_LDO( 8, LDO8, 0, 3, SUPPLIES_EN12, 2),
|
||||||
PM8607_LDO( 9, LDO9, 0, 3, SUPPLIES_EN12, 3),
|
PM8607_LDO( 9, LDO9, 0, 3, SUPPLIES_EN12, 3),
|
||||||
PM8607_LDO(10, LDO10, 0, 3, SUPPLIES_EN12, 4),
|
PM8607_LDO(10, LDO10, 0, 4, SUPPLIES_EN12, 4),
|
||||||
PM8607_LDO(12, LDO12, 0, 4, SUPPLIES_EN12, 5),
|
PM8607_LDO(12, LDO12, 0, 4, SUPPLIES_EN12, 5),
|
||||||
PM8607_LDO(13, VIBRATOR_SET, 1, 3, VIBRATOR_SET, 0),
|
PM8607_LDO(13, VIBRATOR_SET, 1, 3, VIBRATOR_SET, 0),
|
||||||
PM8607_LDO(14, LDO14, 0, 4, SUPPLIES_EN12, 6),
|
PM8607_LDO(14, LDO14, 0, 3, SUPPLIES_EN12, 6),
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __devinit pm8607_regulator_probe(struct platform_device *pdev)
|
static int __devinit pm8607_regulator_probe(struct platform_device *pdev)
|
||||||
|
@ -18,12 +18,12 @@
|
|||||||
#include <linux/hdreg.h> /* HDIO_GETGEO */
|
#include <linux/hdreg.h> /* HDIO_GETGEO */
|
||||||
#include <linux/bio.h>
|
#include <linux/bio.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
|
||||||
#include <asm/debug.h>
|
#include <asm/debug.h>
|
||||||
#include <asm/idals.h>
|
#include <asm/idals.h>
|
||||||
#include <asm/ebcdic.h>
|
#include <asm/ebcdic.h>
|
||||||
#include <asm/compat.h>
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/cio.h>
|
#include <asm/cio.h>
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#define KMSG_COMPONENT "dasd"
|
#define KMSG_COMPONENT "dasd"
|
||||||
|
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
#include <linux/major.h>
|
#include <linux/major.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/blkpg.h>
|
#include <linux/blkpg.h>
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include <linux/console.h>
|
#include <linux/console.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/miscdevice.h>
|
#include <linux/miscdevice.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#define KMSG_COMPONENT "zfcp"
|
#define KMSG_COMPONENT "zfcp"
|
||||||
#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
|
#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
|
||||||
|
|
||||||
|
#include <linux/compat.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/miscdevice.h>
|
#include <linux/miscdevice.h>
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user