Commit 64b36ca7 authored by Ingo Molnar's avatar Ingo Molnar

Merge branches 'tracing/function-graph-tracer' and 'linus' into tracing/core

parents 00a8bf85 402a917a
...@@ -692,6 +692,13 @@ M: kernel@wantstofly.org ...@@ -692,6 +692,13 @@ M: kernel@wantstofly.org
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
S: Maintained S: Maintained
ARM/NUVOTON W90X900 ARM ARCHITECTURE
P: Wan ZongShun
M: mcuos.com@gmail.com
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
W: http://www.mcuos.com
S: Maintained
ARPD SUPPORT ARPD SUPPORT
P: Jonathan Layes P: Jonathan Layes
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
......
...@@ -608,7 +608,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y ...@@ -608,7 +608,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
# Watchdog Device Drivers # Watchdog Device Drivers
# #
# CONFIG_SOFT_WATCHDOG is not set # CONFIG_SOFT_WATCHDOG is not set
CONFIG_AT91SAM9_WATCHDOG=y CONFIG_AT91SAM9X_WATCHDOG=y
# #
# USB-based Watchdog Cards # USB-based Watchdog Cards
......
...@@ -700,7 +700,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y ...@@ -700,7 +700,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
# Watchdog Device Drivers # Watchdog Device Drivers
# #
# CONFIG_SOFT_WATCHDOG is not set # CONFIG_SOFT_WATCHDOG is not set
CONFIG_AT91SAM9_WATCHDOG=y CONFIG_AT91SAM9X_WATCHDOG=y
# #
# USB-based Watchdog Cards # USB-based Watchdog Cards
......
...@@ -710,7 +710,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y ...@@ -710,7 +710,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
# Watchdog Device Drivers # Watchdog Device Drivers
# #
# CONFIG_SOFT_WATCHDOG is not set # CONFIG_SOFT_WATCHDOG is not set
CONFIG_AT91SAM9_WATCHDOG=y CONFIG_AT91SAM9X_WATCHDOG=y
# #
# USB-based Watchdog Cards # USB-based Watchdog Cards
......
...@@ -606,7 +606,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y ...@@ -606,7 +606,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
# Watchdog Device Drivers # Watchdog Device Drivers
# #
# CONFIG_SOFT_WATCHDOG is not set # CONFIG_SOFT_WATCHDOG is not set
CONFIG_AT91SAM9_WATCHDOG=y CONFIG_AT91SAM9X_WATCHDOG=y
# #
# Sonics Silicon Backplane # Sonics Silicon Backplane
......
...@@ -727,7 +727,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y ...@@ -727,7 +727,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
# Watchdog Device Drivers # Watchdog Device Drivers
# #
# CONFIG_SOFT_WATCHDOG is not set # CONFIG_SOFT_WATCHDOG is not set
# CONFIG_AT91SAM9_WATCHDOG is not set # CONFIG_AT91SAM9X_WATCHDOG is not set
# #
# USB-based Watchdog Cards # USB-based Watchdog Cards
......
...@@ -74,9 +74,9 @@ EXPORT_SYMBOL(elf_set_personality); ...@@ -74,9 +74,9 @@ EXPORT_SYMBOL(elf_set_personality);
*/ */
int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack)
{ {
if (executable_stack != EXSTACK_ENABLE_X) if (executable_stack != EXSTACK_DISABLE_X)
return 1; return 1;
if (cpu_architecture() <= CPU_ARCH_ARMv6) if (cpu_architecture() < CPU_ARCH_ARMv6)
return 1; return 1;
return 0; return 0;
} }
......
...@@ -697,7 +697,7 @@ static void __init at91_add_device_rtt(void) ...@@ -697,7 +697,7 @@ static void __init at91_add_device_rtt(void)
* Watchdog * Watchdog
* -------------------------------------------------------------------- */ * -------------------------------------------------------------------- */
#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
static struct platform_device at91cap9_wdt_device = { static struct platform_device at91cap9_wdt_device = {
.name = "at91_wdt", .name = "at91_wdt",
.id = -1, .id = -1,
......
...@@ -643,7 +643,7 @@ static void __init at91_add_device_rtt(void) ...@@ -643,7 +643,7 @@ static void __init at91_add_device_rtt(void)
* Watchdog * Watchdog
* -------------------------------------------------------------------- */ * -------------------------------------------------------------------- */
#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
static struct platform_device at91sam9260_wdt_device = { static struct platform_device at91sam9260_wdt_device = {
.name = "at91_wdt", .name = "at91_wdt",
.id = -1, .id = -1,
......
...@@ -621,7 +621,7 @@ static void __init at91_add_device_rtt(void) ...@@ -621,7 +621,7 @@ static void __init at91_add_device_rtt(void)
* Watchdog * Watchdog
* -------------------------------------------------------------------- */ * -------------------------------------------------------------------- */
#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
static struct platform_device at91sam9261_wdt_device = { static struct platform_device at91sam9261_wdt_device = {
.name = "at91_wdt", .name = "at91_wdt",
.id = -1, .id = -1,
......
...@@ -854,7 +854,7 @@ static void __init at91_add_device_rtt(void) ...@@ -854,7 +854,7 @@ static void __init at91_add_device_rtt(void)
* Watchdog * Watchdog
* -------------------------------------------------------------------- */ * -------------------------------------------------------------------- */
#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
static struct platform_device at91sam9263_wdt_device = { static struct platform_device at91sam9263_wdt_device = {
.name = "at91_wdt", .name = "at91_wdt",
.id = -1, .id = -1,
......
...@@ -609,7 +609,7 @@ static void __init at91_add_device_rtt(void) ...@@ -609,7 +609,7 @@ static void __init at91_add_device_rtt(void)
* Watchdog * Watchdog
* -------------------------------------------------------------------- */ * -------------------------------------------------------------------- */
#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE) #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
static struct platform_device at91sam9rl_wdt_device = { static struct platform_device at91sam9rl_wdt_device = {
.name = "at91_wdt", .name = "at91_wdt",
.id = -1, .id = -1,
......
...@@ -490,7 +490,8 @@ postcore_initcall(at91_gpio_debugfs_init); ...@@ -490,7 +490,8 @@ postcore_initcall(at91_gpio_debugfs_init);
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/* This lock class tells lockdep that GPIO irqs are in a different /*
* This lock class tells lockdep that GPIO irqs are in a different
* category than their parents, so it won't report false recursion. * category than their parents, so it won't report false recursion.
*/ */
static struct lock_class_key gpio_lock_class; static struct lock_class_key gpio_lock_class;
...@@ -509,9 +510,6 @@ void __init at91_gpio_irq_setup(void) ...@@ -509,9 +510,6 @@ void __init at91_gpio_irq_setup(void)
unsigned id = this->id; unsigned id = this->id;
unsigned i; unsigned i;
/* enable PIO controller's clock */
clk_enable(this->clock);
__raw_writel(~0, this->regbase + PIO_IDR); __raw_writel(~0, this->regbase + PIO_IDR);
for (i = 0, pin = this->chipbase; i < 32; i++, pin++) { for (i = 0, pin = this->chipbase; i < 32; i++, pin++) {
...@@ -556,7 +554,14 @@ void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks) ...@@ -556,7 +554,14 @@ void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks)
data->chipbase = PIN_BASE + i * 32; data->chipbase = PIN_BASE + i * 32;
data->regbase = data->offset + (void __iomem *)AT91_VA_BASE_SYS; data->regbase = data->offset + (void __iomem *)AT91_VA_BASE_SYS;
/* AT91SAM9263_ID_PIOCDE groups PIOC, PIOD, PIOE */ /* enable PIO controller's clock */
clk_enable(data->clock);
/*
* Some processors share peripheral ID between multiple GPIO banks.
* SAM9263 (PIOC, PIOD, PIOE)
* CAP9 (PIOA, PIOB, PIOC, PIOD)
*/
if (last && last->id == data->id) if (last && last->id == data->id)
last->next = data; last->next = data;
} }
......
...@@ -93,6 +93,7 @@ struct atmel_nand_data { ...@@ -93,6 +93,7 @@ struct atmel_nand_data {
u8 enable_pin; /* chip enable */ u8 enable_pin; /* chip enable */
u8 det_pin; /* card detect */ u8 det_pin; /* card detect */
u8 rdy_pin; /* ready/busy */ u8 rdy_pin; /* ready/busy */
u8 rdy_pin_active_low; /* rdy_pin value is inverted */
u8 ale; /* address line number connected to ALE */ u8 ale; /* address line number connected to ALE */
u8 cle; /* address line number connected to CLE */ u8 cle; /* address line number connected to CLE */
u8 bus_width_16; /* buswidth is 16 bit */ u8 bus_width_16; /* buswidth is 16 bit */
......
/*
* arch/arm/mach-ep93xx/include/mach/gesbc9312.h
*/
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "platform.h" #include "platform.h"
#include "gesbc9312.h"
#include "ts72xx.h" #include "ts72xx.h"
#endif #endif
...@@ -42,7 +42,7 @@ void __init kirkwood_init_irq(void) ...@@ -42,7 +42,7 @@ void __init kirkwood_init_irq(void)
writel(0, GPIO_EDGE_CAUSE(32)); writel(0, GPIO_EDGE_CAUSE(32));
for (i = IRQ_KIRKWOOD_GPIO_START; i < NR_IRQS; i++) { for (i = IRQ_KIRKWOOD_GPIO_START; i < NR_IRQS; i++) {
set_irq_chip(i, &orion_gpio_irq_level_chip); set_irq_chip(i, &orion_gpio_irq_chip);
set_irq_handler(i, handle_level_irq); set_irq_handler(i, handle_level_irq);
irq_desc[i].status |= IRQ_LEVEL; irq_desc[i].status |= IRQ_LEVEL;
set_irq_flags(i, IRQF_VALID); set_irq_flags(i, IRQF_VALID);
......
...@@ -40,7 +40,7 @@ void __init mv78xx0_init_irq(void) ...@@ -40,7 +40,7 @@ void __init mv78xx0_init_irq(void)
writel(0, GPIO_EDGE_CAUSE(0)); writel(0, GPIO_EDGE_CAUSE(0));
for (i = IRQ_MV78XX0_GPIO_START; i < NR_IRQS; i++) { for (i = IRQ_MV78XX0_GPIO_START; i < NR_IRQS; i++) {
set_irq_chip(i, &orion_gpio_irq_level_chip); set_irq_chip(i, &orion_gpio_irq_chip);
set_irq_handler(i, handle_level_irq); set_irq_handler(i, handle_level_irq);
irq_desc[i].status |= IRQ_LEVEL; irq_desc[i].status |= IRQ_LEVEL;
set_irq_flags(i, IRQF_VALID); set_irq_flags(i, IRQF_VALID);
......
...@@ -565,7 +565,7 @@ u32 omap2_clksel_to_divisor(struct clk *clk, u32 field_val) ...@@ -565,7 +565,7 @@ u32 omap2_clksel_to_divisor(struct clk *clk, u32 field_val)
* *
* Given a struct clk of a rate-selectable clksel clock, and a clock divisor, * Given a struct clk of a rate-selectable clksel clock, and a clock divisor,
* find the corresponding register field value. The return register value is * find the corresponding register field value. The return register value is
* the value before left-shifting. Returns 0xffffffff on error * the value before left-shifting. Returns ~0 on error
*/ */
u32 omap2_divisor_to_clksel(struct clk *clk, u32 div) u32 omap2_divisor_to_clksel(struct clk *clk, u32 div)
{ {
...@@ -577,7 +577,7 @@ u32 omap2_divisor_to_clksel(struct clk *clk, u32 div) ...@@ -577,7 +577,7 @@ u32 omap2_divisor_to_clksel(struct clk *clk, u32 div)
clks = omap2_get_clksel_by_parent(clk, clk->parent); clks = omap2_get_clksel_by_parent(clk, clk->parent);
if (clks == NULL) if (clks == NULL)
return 0; return ~0;
for (clkr = clks->rates; clkr->div; clkr++) { for (clkr = clks->rates; clkr->div; clkr++) {
if ((clkr->flags & cpu_mask) && (clkr->div == div)) if ((clkr->flags & cpu_mask) && (clkr->div == div))
...@@ -588,7 +588,7 @@ u32 omap2_divisor_to_clksel(struct clk *clk, u32 div) ...@@ -588,7 +588,7 @@ u32 omap2_divisor_to_clksel(struct clk *clk, u32 div)
printk(KERN_ERR "clock: Could not find divisor %d for " printk(KERN_ERR "clock: Could not find divisor %d for "
"clock %s parent %s\n", div, clk->name, "clock %s parent %s\n", div, clk->name,
clk->parent->name); clk->parent->name);
return 0; return ~0;
} }
return clkr->val; return clkr->val;
...@@ -708,7 +708,7 @@ static u32 omap2_clksel_get_src_field(void __iomem **src_addr, ...@@ -708,7 +708,7 @@ static u32 omap2_clksel_get_src_field(void __iomem **src_addr,
return 0; return 0;
for (clkr = clks->rates; clkr->div; clkr++) { for (clkr = clks->rates; clkr->div; clkr++) {
if (clkr->flags & (cpu_mask | DEFAULT_RATE)) if (clkr->flags & cpu_mask && clkr->flags & DEFAULT_RATE)
break; /* Found the default rate for this platform */ break; /* Found the default rate for this platform */
} }
...@@ -746,7 +746,7 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent) ...@@ -746,7 +746,7 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent)
return -EINVAL; return -EINVAL;
if (clk->usecount > 0) if (clk->usecount > 0)
_omap2_clk_disable(clk); omap2_clk_disable(clk);
/* Set new source value (previous dividers if any in effect) */ /* Set new source value (previous dividers if any in effect) */
reg_val = __raw_readl(src_addr) & ~field_mask; reg_val = __raw_readl(src_addr) & ~field_mask;
...@@ -759,11 +759,11 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent) ...@@ -759,11 +759,11 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent)
wmb(); wmb();
} }
if (clk->usecount > 0)
_omap2_clk_enable(clk);
clk->parent = new_parent; clk->parent = new_parent;
if (clk->usecount > 0)
omap2_clk_enable(clk);
/* CLKSEL clocks follow their parents' rates, divided by a divisor */ /* CLKSEL clocks follow their parents' rates, divided by a divisor */
clk->rate = new_parent->rate; clk->rate = new_parent->rate;
......
...@@ -44,7 +44,7 @@ void __init orion5x_init_irq(void) ...@@ -44,7 +44,7 @@ void __init orion5x_init_irq(void)
* User can use set_type() if he wants to use edge types handlers. * User can use set_type() if he wants to use edge types handlers.
*/ */
for (i = IRQ_ORION5X_GPIO_START; i < NR_IRQS; i++) { for (i = IRQ_ORION5X_GPIO_START; i < NR_IRQS; i++) {
set_irq_chip(i, &orion_gpio_irq_level_chip); set_irq_chip(i, &orion_gpio_irq_chip);
set_irq_handler(i, handle_level_irq); set_irq_handler(i, handle_level_irq);
irq_desc[i].status |= IRQ_LEVEL; irq_desc[i].status |= IRQ_LEVEL;
set_irq_flags(i, IRQF_VALID); set_irq_flags(i, IRQF_VALID);
......
...@@ -693,7 +693,8 @@ static void __init sanity_check_meminfo(void) ...@@ -693,7 +693,8 @@ static void __init sanity_check_meminfo(void)
* Check whether this memory bank would entirely overlap * Check whether this memory bank would entirely overlap
* the vmalloc area. * the vmalloc area.
*/ */
if (__va(bank->start) >= VMALLOC_MIN) { if (__va(bank->start) >= VMALLOC_MIN ||
__va(bank->start) < PAGE_OFFSET) {
printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx " printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx "
"(vmalloc region overlap).\n", "(vmalloc region overlap).\n",
bank->start, bank->start + bank->size - 1); bank->start, bank->start + bank->size - 1);
......
...@@ -265,51 +265,36 @@ EXPORT_SYMBOL(orion_gpio_set_blink); ...@@ -265,51 +265,36 @@ EXPORT_SYMBOL(orion_gpio_set_blink);
* polarity LEVEL mask * polarity LEVEL mask
* *
****************************************************************************/ ****************************************************************************/
static void gpio_irq_edge_ack(u32 irq)
{
int pin = irq_to_gpio(irq);
writel(~(1 << (pin & 31)), GPIO_EDGE_CAUSE(pin)); static void gpio_irq_ack(u32 irq)
}
static void gpio_irq_edge_mask(u32 irq)
{
int pin = irq_to_gpio(irq);
u32 u;
u = readl(GPIO_EDGE_MASK(pin));
u &= ~(1 << (pin & 31));
writel(u, GPIO_EDGE_MASK(pin));
}
static void gpio_irq_edge_unmask(u32 irq)
{ {
int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK;
if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
int pin = irq_to_gpio(irq); int pin = irq_to_gpio(irq);
u32 u; writel(~(1 << (pin & 31)), GPIO_EDGE_CAUSE(pin));
}
u = readl(GPIO_EDGE_MASK(pin));
u |= 1 << (pin & 31);
writel(u, GPIO_EDGE_MASK(pin));
} }
static void gpio_irq_level_mask(u32 irq) static void gpio_irq_mask(u32 irq)
{ {
int pin = irq_to_gpio(irq); int pin = irq_to_gpio(irq);
u32 u; int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK;
u32 reg = (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) ?
u = readl(GPIO_LEVEL_MASK(pin)); GPIO_EDGE_MASK(pin) : GPIO_LEVEL_MASK(pin);
u32 u = readl(reg);
u &= ~(1 << (pin & 31)); u &= ~(1 << (pin & 31));
writel(u, GPIO_LEVEL_MASK(pin)); writel(u, reg);
} }
static void gpio_irq_level_unmask(u32 irq) static void gpio_irq_unmask(u32 irq)
{ {
int pin = irq_to_gpio(irq); int pin = irq_to_gpio(irq);
u32 u; int type = irq_desc[irq].status & IRQ_TYPE_SENSE_MASK;
u32 reg = (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) ?
u = readl(GPIO_LEVEL_MASK(pin)); GPIO_EDGE_MASK(pin) : GPIO_LEVEL_MASK(pin);
u32 u = readl(reg);
u |= 1 << (pin & 31); u |= 1 << (pin & 31);
writel(u, GPIO_LEVEL_MASK(pin)); writel(u, reg);
} }
static int gpio_irq_set_type(u32 irq, u32 type) static int gpio_irq_set_type(u32 irq, u32 type)
...@@ -331,9 +316,9 @@ static int gpio_irq_set_type(u32 irq, u32 type) ...@@ -331,9 +316,9 @@ static int gpio_irq_set_type(u32 irq, u32 type)
* Set edge/level type. * Set edge/level type.
*/ */
if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
desc->chip = &orion_gpio_irq_edge_chip; desc->handle_irq = handle_edge_irq;
} else if (type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) { } else if (type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) {
desc->chip = &orion_gpio_irq_level_chip; desc->handle_irq = handle_level_irq;
} else { } else {
printk(KERN_ERR "failed to set irq=%d (type=%d)\n", irq, type); printk(KERN_ERR "failed to set irq=%d (type=%d)\n", irq, type);
return -EINVAL; return -EINVAL;
...@@ -371,19 +356,11 @@ static int gpio_irq_set_type(u32 irq, u32 type) ...@@ -371,19 +356,11 @@ static int gpio_irq_set_type(u32 irq, u32 type)
return 0; return 0;
} }
struct irq_chip orion_gpio_irq_edge_chip = { struct irq_chip orion_gpio_irq_chip = {
.name = "orion_gpio_irq_edge", .name = "orion_gpio",
.ack = gpio_irq_edge_ack, .ack = gpio_irq_ack,
.mask = gpio_irq_edge_mask, .mask = gpio_irq_mask,
.unmask = gpio_irq_edge_unmask, .unmask = gpio_irq_unmask,
.set_type = gpio_irq_set_type,
};
struct irq_chip orion_gpio_irq_level_chip = {
.name = "orion_gpio_irq_level",
.mask = gpio_irq_level_mask,
.mask_ack = gpio_irq_level_mask,
.unmask = gpio_irq_level_unmask,
.set_type = gpio_irq_set_type, .set_type = gpio_irq_set_type,
}; };
......
...@@ -31,8 +31,7 @@ void orion_gpio_set_blink(unsigned pin, int blink); ...@@ -31,8 +31,7 @@ void orion_gpio_set_blink(unsigned pin, int blink);
/* /*
* GPIO interrupt handling. * GPIO interrupt handling.
*/ */
extern struct irq_chip orion_gpio_irq_edge_chip; extern struct irq_chip orion_gpio_irq_chip;
extern struct irq_chip orion_gpio_irq_level_chip;
void orion_gpio_irq_handler(int irqoff); void orion_gpio_irq_handler(int irqoff);
......
...@@ -116,6 +116,7 @@ struct atmel_nand_data { ...@@ -116,6 +116,7 @@ struct atmel_nand_data {
int enable_pin; /* chip enable */ int enable_pin; /* chip enable */
int det_pin; /* card detect */ int det_pin; /* card detect */
int rdy_pin; /* ready/busy */ int rdy_pin; /* ready/busy */
u8 rdy_pin_active_low; /* rdy_pin value is inverted */
u8 ale; /* address line number connected to ALE */ u8 ale; /* address line number connected to ALE */
u8 cle; /* address line number connected to CLE */ u8 cle; /* address line number connected to CLE */
u8 bus_width_16; /* buswidth is 16 bit */ u8 bus_width_16; /* buswidth is 16 bit */
......
...@@ -145,7 +145,7 @@ cputime_to_timeval(const cputime_t cputime, struct timeval *value) ...@@ -145,7 +145,7 @@ cputime_to_timeval(const cputime_t cputime, struct timeval *value)
value->tv_usec = rp.subreg.even / 4096; value->tv_usec = rp.subreg.even / 4096;
value->tv_sec = rp.subreg.odd; value->tv_sec = rp.subreg.odd;
#else #else
value->tv_usec = cputime % 4096000000ULL; value->tv_usec = (cputime % 4096000000ULL) / 4096;
value->tv_sec = cputime / 4096000000ULL; value->tv_sec = cputime / 4096000000ULL;
#endif #endif
} }
......
...@@ -43,6 +43,8 @@ struct mem_chunk { ...@@ -43,6 +43,8 @@ struct mem_chunk {
extern struct mem_chunk memory_chunk[]; extern struct mem_chunk memory_chunk[];
extern unsigned long real_memory_size; extern unsigned long real_memory_size;
extern int memory_end_set;
extern unsigned long memory_end;
void detect_memory_layout(struct mem_chunk chunk[]); void detect_memory_layout(struct mem_chunk chunk[]);
......
...@@ -82,7 +82,9 @@ char elf_platform[ELF_PLATFORM_SIZE]; ...@@ -82,7 +82,9 @@ char elf_platform[ELF_PLATFORM_SIZE];
struct mem_chunk __initdata memory_chunk[MEMORY_CHUNKS]; struct mem_chunk __initdata memory_chunk[MEMORY_CHUNKS];
volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */ volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */
static unsigned long __initdata memory_end;
int __initdata memory_end_set;
unsigned long __initdata memory_end;
/* /*
* This is set up by the setup-routine at boot-time * This is set up by the setup-routine at boot-time
...@@ -281,6 +283,7 @@ void (*pm_power_off)(void) = machine_power_off; ...@@ -281,6 +283,7 @@ void (*pm_power_off)(void) = machine_power_off;
static int __init early_parse_mem(char *p) static int __init early_parse_mem(char *p)
{ {
memory_end = memparse(p, &p); memory_end = memparse(p, &p);
memory_end_set = 1;
return 0; return 0;
} }
early_param("mem", early_parse_mem); early_param("mem", early_parse_mem);
...@@ -508,8 +511,10 @@ static void __init setup_memory_end(void) ...@@ -508,8 +511,10 @@ static void __init setup_memory_end(void)
int i; int i;
#if defined(CONFIG_ZFCPDUMP) || defined(CONFIG_ZFCPDUMP_MODULE) #if defined(CONFIG_ZFCPDUMP) || defined(CONFIG_ZFCPDUMP_MODULE)
if (ipl_info.type == IPL_TYPE_FCP_DUMP) if (ipl_info.type == IPL_TYPE_FCP_DUMP) {
memory_end = ZFCPDUMP_HSA_SIZE; memory_end = ZFCPDUMP_HSA_SIZE;
memory_end_set = 1;
}
#endif #endif
memory_size = 0; memory_size = 0;
memory_end &= PAGE_MASK; memory_end &= PAGE_MASK;
......
...@@ -862,7 +862,7 @@ void clear_local_APIC(void) ...@@ -862,7 +862,7 @@ void clear_local_APIC(void)
} }
/* lets not touch this if we didn't frob it */ /* lets not touch this if we didn't frob it */
#if defined(CONFIG_X86_MCE_P4THERMAL) || defined(X86_MCE_INTEL) #if defined(CONFIG_X86_MCE_P4THERMAL) || defined(CONFIG_X86_MCE_INTEL)
if (maxlvt >= 5) { if (maxlvt >= 5) {
v = apic_read(APIC_LVTTHMR); v = apic_read(APIC_LVTTHMR);
apic_write(APIC_LVTTHMR, v | APIC_LVT_MASKED); apic_write(APIC_LVTTHMR, v | APIC_LVT_MASKED);
......
...@@ -295,11 +295,11 @@ void do_machine_check(struct pt_regs * regs, long error_code) ...@@ -295,11 +295,11 @@ void do_machine_check(struct pt_regs * regs, long error_code)
* If we know that the error was in user space, send a * If we know that the error was in user space, send a
* SIGBUS. Otherwise, panic if tolerance is low. * SIGBUS. Otherwise, panic if tolerance is low.
* *
* do_exit() takes an awful lot of locks and has a slight * force_sig() takes an awful lot of locks and has a slight
* risk of deadlocking. * risk of deadlocking.
*/ */
if (user_space) { if (user_space) {
do_exit(SIGBUS); force_sig(SIGBUS, current);
} else if (panic_on_oops || tolerant < 2) { } else if (panic_on_oops || tolerant < 2) {
mce_panic("Uncorrected machine check", mce_panic("Uncorrected machine check",
&panicm, mcestart); &panicm, mcestart);
...@@ -734,6 +734,7 @@ __setup("mce=", mcheck_enable); ...@@ -734,6 +734,7 @@ __setup("mce=", mcheck_enable);
static int mce_resume(struct sys_device *dev) static int mce_resume(struct sys_device *dev)
{ {
mce_init(NULL); mce_init(NULL);
mce_cpu_features(&current_cpu_data);
return 0; return 0;
} }
......
...@@ -104,9 +104,6 @@ void cpu_idle(void) ...@@ -104,9 +104,6 @@ void cpu_idle(void)
check_pgt_cache(); check_pgt_cache();
rmb(); rmb();
if (rcu_pending(cpu))
rcu_check_callbacks(cpu, 0);
if (cpu_is_offline(cpu)) if (cpu_is_offline(cpu))
play_dead(); play_dead();
......
...@@ -139,7 +139,8 @@ static int atmel_nand_device_ready(struct mtd_info *mtd) ...@@ -139,7 +139,8 @@ static int atmel_nand_device_ready(struct mtd_info *mtd)
struct nand_chip *nand_chip = mtd->priv; struct nand_chip *nand_chip = mtd->priv;
struct atmel_nand_host *host = nand_chip->priv; struct atmel_nand_host *host = nand_chip->priv;
return gpio_get_value(host->board->rdy_pin); return gpio_get_value(host->board->rdy_pin) ^
!!host->board->rdy_pin_active_low;
} }
/* /*
......
...@@ -280,8 +280,11 @@ sclp_dispatch_evbufs(struct sccb_header *sccb) ...@@ -280,8 +280,11 @@ sclp_dispatch_evbufs(struct sccb_header *sccb)
rc = 0; rc = 0;
for (offset = sizeof(struct sccb_header); offset < sccb->length; for (offset = sizeof(struct sccb_header); offset < sccb->length;
offset += evbuf->length) { offset += evbuf->length) {
/* Search for event handler */
evbuf = (struct evbuf_header *) ((addr_t) sccb + offset); evbuf = (struct evbuf_header *) ((addr_t) sccb + offset);
/* Check for malformed hardware response */
if (evbuf->length == 0)
break;
/* Search for event handler */
reg = NULL; reg = NULL;
list_for_each(l, &sclp_reg_list) { list_for_each(l, &sclp_reg_list) {
reg = list_entry(l, struct sclp_register, list); reg = list_entry(l, struct sclp_register, list);
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/memory.h> #include <linux/memory.h>
#include <asm/chpid.h> #include <asm/chpid.h>
#include <asm/sclp.h> #include <asm/sclp.h>
#include <asm/setup.h>
#include "sclp.h" #include "sclp.h"
...@@ -474,6 +475,10 @@ static void __init add_memory_merged(u16 rn) ...@@ -474,6 +475,10 @@ static void __init add_memory_merged(u16 rn)
goto skip_add; goto skip_add;
if (start + size > VMEM_MAX_PHYS) if (start + size > VMEM_MAX_PHYS)
size = VMEM_MAX_PHYS - start; size = VMEM_MAX_PHYS - start;
if (memory_end_set && (start >= memory_end))
goto skip_add;
if (memory_end_set && (start + size > memory_end))
size = memory_end - start;
add_memory(0, start, size); add_memory(0, start, size);
skip_add: skip_add:
first_rn = rn; first_rn = rn;
......
...@@ -904,8 +904,8 @@ static void pxa25x_ep_fifo_flush(struct usb_ep *_ep) ...@@ -904,8 +904,8 @@ static void pxa25x_ep_fifo_flush(struct usb_ep *_ep)
/* most IN status is the same, but ISO can't stall */ /* most IN status is the same, but ISO can't stall */
*ep->reg_udccs = UDCCS_BI_TPC|UDCCS_BI_FTF|UDCCS_BI_TUR *ep->reg_udccs = UDCCS_BI_TPC|UDCCS_BI_FTF|UDCCS_BI_TUR
| (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC) | (ep->bmAttributes == USB_ENDPOINT_XFER_ISOC
? 0 : UDCCS_BI_SST; ? 0 : UDCCS_BI_SST);
} }
......
...@@ -107,10 +107,10 @@ static int at91_wdt_close(struct inode *inode, struct file *file) ...@@ -107,10 +107,10 @@ static int at91_wdt_close(struct inode *inode, struct file *file)
static int at91_wdt_settimeout(int new_time) static int at91_wdt_settimeout(int new_time)
{ {
/* /*
* All counting occurs at SLOW_CLOCK / 128 = 0.256 Hz * All counting occurs at SLOW_CLOCK / 128 = 256 Hz
* *
* Since WDV is a 16-bit counter, the maximum period is * Since WDV is a 16-bit counter, the maximum period is
* 65536 / 0.256 = 256 seconds. * 65536 / 256 = 256 seconds.
*/ */
if ((new_time <= 0) || (new_time > WDT_MAX_TIME)) if ((new_time <= 0) || (new_time > WDT_MAX_TIME))
return -EINVAL; return -EINVAL;
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/io.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/miscdevice.h> #include <linux/miscdevice.h>
#include <linux/module.h> #include <linux/module.h>
......
...@@ -47,7 +47,7 @@ static int snd_jack_dev_register(struct snd_device *device) ...@@ -47,7 +47,7 @@ static int snd_jack_dev_register(struct snd_device *device)
int err; int err;
snprintf(jack->name, sizeof(jack->name), "%s %s", snprintf(jack->name, sizeof(jack->name), "%s %s",
card->longname, jack->id); card->shortname, jack->id);
jack->input_dev->name = jack->name; jack->input_dev->name = jack->name;
/* Default to the sound card device. */ /* Default to the sound card device. */
......
...@@ -1947,16 +1947,13 @@ static int azx_suspend(struct pci_dev *pci, pm_message_t state) ...@@ -1947,16 +1947,13 @@ static int azx_suspend(struct pci_dev *pci, pm_message_t state)
return 0; return 0;
} }
static int azx_resume_early(struct pci_dev *pci)
{
return pci_restore_state(pci);
}
static int azx_resume(struct pci_dev *pci) static int azx_resume(struct pci_dev *pci)
{ {
struct snd_card *card = pci_get_drvdata(pci); struct snd_card *card = pci_get_drvdata(pci);
struct azx *chip = card->private_data; struct azx *chip = card->private_data;
pci_set_power_state(pci, PCI_D0);
pci_restore_state(pci);
if (pci_enable_device(pci) < 0) { if (pci_enable_device(pci) < 0) {
printk(KERN_ERR "hda-intel: pci_enable_device failed, " printk(KERN_ERR "hda-intel: pci_enable_device failed, "
"disabling device\n"); "disabling device\n");
...@@ -2468,7 +2465,6 @@ static struct pci_driver driver = { ...@@ -2468,7 +2465,6 @@ static struct pci_driver driver = {
.remove = __devexit_p(azx_remove), .remove = __devexit_p(azx_remove),
#ifdef CONFIG_PM #ifdef CONFIG_PM
.suspend = azx_suspend, .suspend = azx_suspend,
.resume_early = azx_resume_early,
.resume = azx_resume, .resume = azx_resume,
#endif #endif
}; };
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
* SPI 0 -> 1st PCM1796 (front) * SPI 0 -> 1st PCM1796 (front)
* SPI 1 -> 2nd PCM1796 (surround) * SPI 1 -> 2nd PCM1796 (surround)
* SPI 2 -> 3rd PCM1796 (center/LFE) * SPI 2 -> 3rd PCM1796 (center/LFE)
* SPI 4 -> 4th PCM1796 (back) and EEPROM self-destruct (do not use!) * SPI 4 -> 4th PCM1796 (back)
* *
* GPIO 2 -> M0 of CS5381 * GPIO 2 -> M0 of CS5381
* GPIO 3 -> M1 of CS5381 * GPIO 3 -> M1 of CS5381
...@@ -207,12 +207,6 @@ static void xonar_gpio_changed(struct oxygen *chip); ...@@ -207,12 +207,6 @@ static void xonar_gpio_changed(struct oxygen *chip);
static inline void pcm1796_write_spi(struct oxygen *chip, unsigned int codec, static inline void pcm1796_write_spi(struct oxygen *chip, unsigned int codec,
u8 reg, u8 value) u8 reg, u8 value)
{ {
/*
* We don't want to do writes on SPI 4 because the EEPROM, which shares
* the same pin, might get confused and broken. We'd better take care
* that the driver works with the default register values ...
*/
#if 0
/* maps ALSA channel pair number to SPI output */ /* maps ALSA channel pair number to SPI output */
static const u8 codec_map[4] = { static const u8 codec_map[4] = {
0, 1, 2, 4 0, 1, 2, 4
...@@ -223,7 +217,6 @@ static inline void pcm1796_write_spi(struct oxygen *chip, unsigned int codec, ...@@ -223,7 +217,6 @@ static inline void pcm1796_write_spi(struct oxygen *chip, unsigned int codec,
(codec_map[codec] << OXYGEN_SPI_CODEC_SHIFT) | (codec_map[codec] << OXYGEN_SPI_CODEC_SHIFT) |
OXYGEN_SPI_CEN_LATCH_CLOCK_HI, OXYGEN_SPI_CEN_LATCH_CLOCK_HI,
(reg << 8) | value); (reg << 8) | value);
#endif
} }
static inline void pcm1796_write_i2c(struct oxygen *chip, unsigned int codec, static inline void pcm1796_write_i2c(struct oxygen *chip, unsigned int codec,
...@@ -757,9 +750,6 @@ static const DECLARE_TLV_DB_SCALE(cs4362a_db_scale, -12700, 100, 0); ...@@ -757,9 +750,6 @@ static const DECLARE_TLV_DB_SCALE(cs4362a_db_scale, -12700, 100, 0);
static int xonar_d2_control_filter(struct snd_kcontrol_new *template) static int xonar_d2_control_filter(struct snd_kcontrol_new *template)
{ {
if (!strncmp(template->name, "Master Playback ", 16))
/* disable volume/mute because they would require SPI writes */
return 1;
if (!strncmp(template->name, "CD Capture ", 11)) if (!strncmp(template->name, "CD Capture ", 11))
/* CD in is actually connected to the video in pin */ /* CD in is actually connected to the video in pin */
template->private_value ^= AC97_CD ^ AC97_VIDEO; template->private_value ^= AC97_CD ^ AC97_VIDEO;
...@@ -850,8 +840,9 @@ static const struct oxygen_model model_xonar_d2 = { ...@@ -850,8 +840,9 @@ static const struct oxygen_model model_xonar_d2 = {
.dac_volume_min = 0x0f, .dac_volume_min = 0x0f,
.dac_volume_max = 0xff, .dac_volume_max = 0xff,
.misc_flags = OXYGEN_MISC_MIDI, .misc_flags = OXYGEN_MISC_MIDI,
.function_flags = OXYGEN_FUNCTION_SPI, .function_flags = OXYGEN_FUNCTION_SPI |
.dac_i2s_format = OXYGEN_I2S_FORMAT_I2S, OXYGEN_FUNCTION_ENABLE_SPI_4_5,
.dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
.adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST, .adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
}; };
......
...@@ -2524,7 +2524,6 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform ...@@ -2524,7 +2524,6 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform
* build the rate table and bitmap flags * build the rate table and bitmap flags
*/ */
int r, idx; int r, idx;
unsigned int nonzero_rates = 0;
fp->rate_table = kmalloc(sizeof(int) * nr_rates, GFP_KERNEL); fp->rate_table = kmalloc(sizeof(int) * nr_rates, GFP_KERNEL);
if (fp->rate_table == NULL) { if (fp->rate_table == NULL) {
...@@ -2532,24 +2531,27 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform ...@@ -2532,24 +2531,27 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform
return -1; return -1;
} }
fp->nr_rates = nr_rates; fp->nr_rates = 0;
fp->rate_min = fp->rate_max = combine_triple(&fmt[8]); fp->rate_min = fp->rate_max = 0;
for (r = 0, idx = offset + 1; r < nr_rates; r++, idx += 3) { for (r = 0, idx = offset + 1; r < nr_rates; r++, idx += 3) {
unsigned int rate = combine_triple(&fmt[idx]); unsigned int rate = combine_triple(&fmt[idx]);
if (!rate)
continue;
/* C-Media CM6501 mislabels its 96 kHz altsetting */ /* C-Media CM6501 mislabels its 96 kHz altsetting */
if (rate == 48000 && nr_rates == 1 && if (rate == 48000 && nr_rates == 1 &&
chip->usb_id == USB_ID(0x0d8c, 0x0201) && (chip->usb_id == USB_ID(0x0d8c, 0x0201) ||
chip->usb_id == USB_ID(0x0d8c, 0x0102)) &&
fp->altsetting == 5 && fp->maxpacksize == 392) fp->altsetting == 5 && fp->maxpacksize == 392)
rate = 96000; rate = 96000;
fp->rate_table[r] = rate; fp->rate_table[fp->nr_rates] = rate;
nonzero_rates |= rate; if (!fp->rate_min || rate < fp->rate_min)
if (rate < fp->rate_min)
fp->rate_min = rate; fp->rate_min = rate;
else if (rate > fp->rate_max) if (!fp->rate_max || rate > fp->rate_max)
fp->rate_max = rate; fp->rate_max = rate;
fp->rates |= snd_pcm_rate_to_rate_bit(rate); fp->rates |= snd_pcm_rate_to_rate_bit(rate);
fp->nr_rates++;
} }
if (!nonzero_rates) { if (!fp->nr_rates) {
hwc_debug("All rates were zero. Skipping format!\n"); hwc_debug("All rates were zero. Skipping format!\n");
return -1; return -1;
} }
......
...@@ -1625,6 +1625,7 @@ static int snd_usbmidi_create_endpoints_midiman(struct snd_usb_midi* umidi, ...@@ -1625,6 +1625,7 @@ static int snd_usbmidi_create_endpoints_midiman(struct snd_usb_midi* umidi,
} }
ep_info.out_ep = get_endpoint(hostif, 2)->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; ep_info.out_ep = get_endpoint(hostif, 2)->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
ep_info.out_interval = 0;
ep_info.out_cables = endpoint->out_cables & 0x5555; ep_info.out_cables = endpoint->out_cables & 0x5555;
err = snd_usbmidi_out_endpoint_create(umidi, &ep_info, &umidi->endpoints[0]); err = snd_usbmidi_out_endpoint_create(umidi, &ep_info, &umidi->endpoints[0]);
if (err < 0) if (err < 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment