提交 35239e23 编写于 作者: I Ingo Molnar

Merge branch 'perf/urgent' into perf/core

Merge reason: We are going to queue up a dependent patch.
Signed-off-by: NIngo Molnar <mingo@elte.hu>
...@@ -7,9 +7,9 @@ Each LED is represented as a sub-node of the gpio-leds device. Each ...@@ -7,9 +7,9 @@ Each LED is represented as a sub-node of the gpio-leds device. Each
node's name represents the name of the corresponding LED. node's name represents the name of the corresponding LED.
LED sub-node properties: LED sub-node properties:
- gpios : Should specify the LED's GPIO, see "Specifying GPIO information - gpios : Should specify the LED's GPIO, see "gpios property" in
for devices" in Documentation/devicetree/booting-without-of.txt. Active Documentation/devicetree/gpio.txt. Active low LEDs should be
low LEDs should be indicated using flags in the GPIO specifier. indicated using flags in the GPIO specifier.
- label : (optional) The label for this LED. If omitted, the label is - label : (optional) The label for this LED. If omitted, the label is
taken from the node name (excluding the unit address). taken from the node name (excluding the unit address).
- linux,default-trigger : (optional) This parameter, if present, is a - linux,default-trigger : (optional) This parameter, if present, is a
......
...@@ -30,6 +30,7 @@ national National Semiconductor ...@@ -30,6 +30,7 @@ national National Semiconductor
nintendo Nintendo nintendo Nintendo
nvidia NVIDIA nvidia NVIDIA
nxp NXP Semiconductors nxp NXP Semiconductors
picochip Picochip Ltd
powervr Imagination Technologies powervr Imagination Technologies
qcom Qualcomm, Inc. qcom Qualcomm, Inc.
ramtron Ramtron International ramtron Ramtron International
......
...@@ -7,21 +7,29 @@ Supported chips: ...@@ -7,21 +7,29 @@ Supported chips:
Addresses scanned: I2C 0x18 - 0x1f Addresses scanned: I2C 0x18 - 0x1f
Datasheets: Datasheets:
http://www.analog.com/static/imported-files/data_sheets/ADT7408.pdf http://www.analog.com/static/imported-files/data_sheets/ADT7408.pdf
* IDT TSE2002B3, TS3000B3 * Atmel AT30TS00
Prefix: 'tse2002b3', 'ts3000b3' Prefix: 'at30ts00'
Addresses scanned: I2C 0x18 - 0x1f Addresses scanned: I2C 0x18 - 0x1f
Datasheets: Datasheets:
http://www.idt.com/products/getdoc.cfm?docid=18715691 http://www.atmel.com/Images/doc8585.pdf
http://www.idt.com/products/getdoc.cfm?docid=18715692 * IDT TSE2002B3, TSE2002GB2, TS3000B3, TS3000GB2
Prefix: 'tse2002', 'ts3000'
Addresses scanned: I2C 0x18 - 0x1f
Datasheets:
http://www.idt.com/sites/default/files/documents/IDT_TSE2002B3C_DST_20100512_120303152056.pdf
http://www.idt.com/sites/default/files/documents/IDT_TSE2002GB2A1_DST_20111107_120303145914.pdf
http://www.idt.com/sites/default/files/documents/IDT_TS3000B3A_DST_20101129_120303152013.pdf
http://www.idt.com/sites/default/files/documents/IDT_TS3000GB2A1_DST_20111104_120303151012.pdf
* Maxim MAX6604 * Maxim MAX6604
Prefix: 'max6604' Prefix: 'max6604'
Addresses scanned: I2C 0x18 - 0x1f Addresses scanned: I2C 0x18 - 0x1f
Datasheets: Datasheets:
http://datasheets.maxim-ic.com/en/ds/MAX6604.pdf http://datasheets.maxim-ic.com/en/ds/MAX6604.pdf
* Microchip MCP9805, MCP98242, MCP98243, MCP9843 * Microchip MCP9804, MCP9805, MCP98242, MCP98243, MCP9843
Prefixes: 'mcp9805', 'mcp98242', 'mcp98243', 'mcp9843' Prefixes: 'mcp9804', 'mcp9805', 'mcp98242', 'mcp98243', 'mcp9843'
Addresses scanned: I2C 0x18 - 0x1f Addresses scanned: I2C 0x18 - 0x1f
Datasheets: Datasheets:
http://ww1.microchip.com/downloads/en/DeviceDoc/22203C.pdf
http://ww1.microchip.com/downloads/en/DeviceDoc/21977b.pdf http://ww1.microchip.com/downloads/en/DeviceDoc/21977b.pdf
http://ww1.microchip.com/downloads/en/DeviceDoc/21996a.pdf http://ww1.microchip.com/downloads/en/DeviceDoc/21996a.pdf
http://ww1.microchip.com/downloads/en/DeviceDoc/22153c.pdf http://ww1.microchip.com/downloads/en/DeviceDoc/22153c.pdf
...@@ -48,6 +56,12 @@ Supported chips: ...@@ -48,6 +56,12 @@ Supported chips:
Datasheets: Datasheets:
http://www.st.com/stonline/products/literature/ds/13447/stts424.pdf http://www.st.com/stonline/products/literature/ds/13447/stts424.pdf
http://www.st.com/stonline/products/literature/ds/13448/stts424e02.pdf http://www.st.com/stonline/products/literature/ds/13448/stts424e02.pdf
* ST Microelectronics STTS2002, STTS3000
Prefix: 'stts2002', 'stts3000'
Addresses scanned: I2C 0x18 - 0x1f
Datasheets:
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00225278.pdf
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATA_BRIEF/CD00270920.pdf
* JEDEC JC 42.4 compliant temperature sensor chips * JEDEC JC 42.4 compliant temperature sensor chips
Prefix: 'jc42' Prefix: 'jc42'
Addresses scanned: I2C 0x18 - 0x1f Addresses scanned: I2C 0x18 - 0x1f
......
...@@ -13,7 +13,8 @@ Detection ...@@ -13,7 +13,8 @@ Detection
All ALPS touchpads should respond to the "E6 report" command sequence: All ALPS touchpads should respond to the "E6 report" command sequence:
E8-E6-E6-E6-E9. An ALPS touchpad should respond with either 00-00-0A or E8-E6-E6-E6-E9. An ALPS touchpad should respond with either 00-00-0A or
00-00-64. 00-00-64 if no buttons are pressed. The bits 0-2 of the first byte will be 1s
if some buttons are pressed.
If the E6 report is successful, the touchpad model is identified using the "E7 If the E6 report is successful, the touchpad model is identified using the "E7
report" sequence: E8-E7-E7-E7-E9. The response is the model signature and is report" sequence: E8-E7-E7-E7-E9. The response is the model signature and is
......
...@@ -2211,6 +2211,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -2211,6 +2211,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
default: off. default: off.
printk.always_kmsg_dump=
Trigger kmsg_dump for cases other than kernel oops or
panics
Format: <bool> (1/Y/y=enable, 0/N/n=disable)
default: disabled
printk.time= Show timing data prefixed to each printk message line printk.time= Show timing data prefixed to each printk message line
Format: <bool> (1/Y/y=enable, 0/N/n=disable) Format: <bool> (1/Y/y=enable, 0/N/n=disable)
......
...@@ -962,7 +962,7 @@ F: drivers/tty/serial/msm_serial.c ...@@ -962,7 +962,7 @@ F: drivers/tty/serial/msm_serial.c
F: drivers/platform/msm/ F: drivers/platform/msm/
F: drivers/*/pm8???-* F: drivers/*/pm8???-*
F: include/linux/mfd/pm8xxx/ F: include/linux/mfd/pm8xxx/
T: git git://codeaurora.org/quic/kernel/davidb/linux-msm.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm.git
S: Maintained S: Maintained
ARM/TOSA MACHINE SUPPORT ARM/TOSA MACHINE SUPPORT
...@@ -1310,7 +1310,7 @@ F: drivers/atm/ ...@@ -1310,7 +1310,7 @@ F: drivers/atm/
F: include/linux/atm* F: include/linux/atm*
ATMEL AT91 MCI DRIVER ATMEL AT91 MCI DRIVER
M: Nicolas Ferre <nicolas.ferre@atmel.com> M: Ludovic Desroches <ludovic.desroches@atmel.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
W: http://www.atmel.com/products/AT91/ W: http://www.atmel.com/products/AT91/
W: http://www.at91.com/ W: http://www.at91.com/
...@@ -1318,7 +1318,7 @@ S: Maintained ...@@ -1318,7 +1318,7 @@ S: Maintained
F: drivers/mmc/host/at91_mci.c F: drivers/mmc/host/at91_mci.c
ATMEL AT91 / AT32 MCI DRIVER ATMEL AT91 / AT32 MCI DRIVER
M: Nicolas Ferre <nicolas.ferre@atmel.com> M: Ludovic Desroches <ludovic.desroches@atmel.com>
S: Maintained S: Maintained
F: drivers/mmc/host/atmel-mci.c F: drivers/mmc/host/atmel-mci.c
F: drivers/mmc/host/atmel-mci-regs.h F: drivers/mmc/host/atmel-mci-regs.h
...@@ -7271,7 +7271,7 @@ WATCHDOG DEVICE DRIVERS ...@@ -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/
......
VERSION = 3 VERSION = 3
PATCHLEVEL = 3 PATCHLEVEL = 3
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc5 EXTRAVERSION = -rc7
NAME = Saber-toothed Squirrel NAME = Saber-toothed Squirrel
# *DOCUMENTATION* # *DOCUMENTATION*
......
...@@ -108,7 +108,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, ...@@ -108,7 +108,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
" lda $31,3b-2b(%0)\n" " lda $31,3b-2b(%0)\n"
" .previous\n" " .previous\n"
: "+r"(ret), "=&r"(prev), "=&r"(cmp) : "+r"(ret), "=&r"(prev), "=&r"(cmp)
: "r"(uaddr), "r"((long)oldval), "r"(newval) : "r"(uaddr), "r"((long)(int)oldval), "r"(newval)
: "memory"); : "memory");
*uval = prev; *uval = prev;
......
...@@ -1280,7 +1280,7 @@ config ARM_ERRATA_743622 ...@@ -1280,7 +1280,7 @@ config ARM_ERRATA_743622
depends on CPU_V7 depends on CPU_V7
help help
This option enables the workaround for the 743622 Cortex-A9 This option enables the workaround for the 743622 Cortex-A9
(r2p0..r2p2) erratum. Under very rare conditions, a faulty (r2p*) erratum. Under very rare conditions, a faulty
optimisation in the Cortex-A9 Store Buffer may lead to data optimisation in the Cortex-A9 Store Buffer may lead to data
corruption. This workaround sets a specific bit in the diagnostic corruption. This workaround sets a specific bit in the diagnostic
register of the Cortex-A9 which disables the Store Buffer register of the Cortex-A9 which disables the Store Buffer
......
...@@ -3,3 +3,4 @@ zImage ...@@ -3,3 +3,4 @@ zImage
xipImage xipImage
bootpImage bootpImage
uImage uImage
*.dtb
...@@ -134,7 +134,7 @@ int __init armpmu_register(struct arm_pmu *armpmu, char *name, int type); ...@@ -134,7 +134,7 @@ int __init armpmu_register(struct arm_pmu *armpmu, char *name, int type);
u64 armpmu_event_update(struct perf_event *event, u64 armpmu_event_update(struct perf_event *event,
struct hw_perf_event *hwc, struct hw_perf_event *hwc,
int idx, int overflow); int idx);
int armpmu_event_set_period(struct perf_event *event, int armpmu_event_set_period(struct perf_event *event,
struct hw_perf_event *hwc, struct hw_perf_event *hwc,
......
...@@ -242,6 +242,7 @@ static void ecard_init_pgtables(struct mm_struct *mm) ...@@ -242,6 +242,7 @@ static void ecard_init_pgtables(struct mm_struct *mm)
memcpy(dst_pgd, src_pgd, sizeof(pgd_t) * (EASI_SIZE / PGDIR_SIZE)); memcpy(dst_pgd, src_pgd, sizeof(pgd_t) * (EASI_SIZE / PGDIR_SIZE));
vma.vm_flags = VM_EXEC;
vma.vm_mm = mm; vma.vm_mm = mm;
flush_tlb_range(&vma, IO_START, IO_START + IO_SIZE); flush_tlb_range(&vma, IO_START, IO_START + IO_SIZE);
......
...@@ -180,7 +180,7 @@ armpmu_event_set_period(struct perf_event *event, ...@@ -180,7 +180,7 @@ armpmu_event_set_period(struct perf_event *event,
u64 u64
armpmu_event_update(struct perf_event *event, armpmu_event_update(struct perf_event *event,
struct hw_perf_event *hwc, struct hw_perf_event *hwc,
int idx, int overflow) int idx)
{ {
struct arm_pmu *armpmu = to_arm_pmu(event->pmu); struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
u64 delta, prev_raw_count, new_raw_count; u64 delta, prev_raw_count, new_raw_count;
...@@ -193,13 +193,7 @@ armpmu_event_update(struct perf_event *event, ...@@ -193,13 +193,7 @@ armpmu_event_update(struct perf_event *event,
new_raw_count) != prev_raw_count) new_raw_count) != prev_raw_count)
goto again; goto again;
new_raw_count &= armpmu->max_period; delta = (new_raw_count - prev_raw_count) & armpmu->max_period;
prev_raw_count &= armpmu->max_period;
if (overflow)
delta = armpmu->max_period - prev_raw_count + new_raw_count + 1;
else
delta = new_raw_count - prev_raw_count;
local64_add(delta, &event->count); local64_add(delta, &event->count);
local64_sub(delta, &hwc->period_left); local64_sub(delta, &hwc->period_left);
...@@ -216,7 +210,7 @@ armpmu_read(struct perf_event *event) ...@@ -216,7 +210,7 @@ armpmu_read(struct perf_event *event)
if (hwc->idx < 0) if (hwc->idx < 0)
return; return;
armpmu_event_update(event, hwc, hwc->idx, 0); armpmu_event_update(event, hwc, hwc->idx);
} }
static void static void
...@@ -232,7 +226,7 @@ armpmu_stop(struct perf_event *event, int flags) ...@@ -232,7 +226,7 @@ armpmu_stop(struct perf_event *event, int flags)
if (!(hwc->state & PERF_HES_STOPPED)) { if (!(hwc->state & PERF_HES_STOPPED)) {
armpmu->disable(hwc, hwc->idx); armpmu->disable(hwc, hwc->idx);
barrier(); /* why? */ barrier(); /* why? */
armpmu_event_update(event, hwc, hwc->idx, 0); armpmu_event_update(event, hwc, hwc->idx);
hwc->state |= PERF_HES_STOPPED | PERF_HES_UPTODATE; hwc->state |= PERF_HES_STOPPED | PERF_HES_UPTODATE;
} }
} }
...@@ -518,7 +512,13 @@ __hw_perf_event_init(struct perf_event *event) ...@@ -518,7 +512,13 @@ __hw_perf_event_init(struct perf_event *event)
hwc->config_base |= (unsigned long)mapping; hwc->config_base |= (unsigned long)mapping;
if (!hwc->sample_period) { if (!hwc->sample_period) {
hwc->sample_period = armpmu->max_period; /*
* For non-sampling runs, limit the sample_period to half
* of the counter width. That way, the new counter value
* is far less likely to overtake the previous one unless
* you have some serious IRQ latency issues.
*/
hwc->sample_period = armpmu->max_period >> 1;
hwc->last_period = hwc->sample_period; hwc->last_period = hwc->sample_period;
local64_set(&hwc->period_left, hwc->sample_period); local64_set(&hwc->period_left, hwc->sample_period);
} }
...@@ -679,6 +679,28 @@ static void __init cpu_pmu_init(struct arm_pmu *armpmu) ...@@ -679,6 +679,28 @@ static void __init cpu_pmu_init(struct arm_pmu *armpmu)
armpmu->type = ARM_PMU_DEVICE_CPU; armpmu->type = ARM_PMU_DEVICE_CPU;
} }
/*
* PMU hardware loses all context when a CPU goes offline.
* When a CPU is hotplugged back in, since some hardware registers are
* UNKNOWN at reset, the PMU must be explicitly reset to avoid reading
* junk values out of them.
*/
static int __cpuinit pmu_cpu_notify(struct notifier_block *b,
unsigned long action, void *hcpu)
{
if ((action & ~CPU_TASKS_FROZEN) != CPU_STARTING)
return NOTIFY_DONE;
if (cpu_pmu && cpu_pmu->reset)
cpu_pmu->reset(NULL);
return NOTIFY_OK;
}
static struct notifier_block __cpuinitdata pmu_cpu_notifier = {
.notifier_call = pmu_cpu_notify,
};
/* /*
* CPU PMU identification and registration. * CPU PMU identification and registration.
*/ */
...@@ -730,6 +752,7 @@ init_hw_perf_events(void) ...@@ -730,6 +752,7 @@ init_hw_perf_events(void)
pr_info("enabled with %s PMU driver, %d counters available\n", pr_info("enabled with %s PMU driver, %d counters available\n",
cpu_pmu->name, cpu_pmu->num_events); cpu_pmu->name, cpu_pmu->num_events);
cpu_pmu_init(cpu_pmu); cpu_pmu_init(cpu_pmu);
register_cpu_notifier(&pmu_cpu_notifier);
armpmu_register(cpu_pmu, "cpu", PERF_TYPE_RAW); armpmu_register(cpu_pmu, "cpu", PERF_TYPE_RAW);
} else { } else {
pr_info("no hardware support available\n"); pr_info("no hardware support available\n");
......
...@@ -467,23 +467,6 @@ armv6pmu_enable_event(struct hw_perf_event *hwc, ...@@ -467,23 +467,6 @@ armv6pmu_enable_event(struct hw_perf_event *hwc,
raw_spin_unlock_irqrestore(&events->pmu_lock, flags); raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
} }
static int counter_is_active(unsigned long pmcr, int idx)
{
unsigned long mask = 0;
if (idx == ARMV6_CYCLE_COUNTER)
mask = ARMV6_PMCR_CCOUNT_IEN;
else if (idx == ARMV6_COUNTER0)
mask = ARMV6_PMCR_COUNT0_IEN;
else if (idx == ARMV6_COUNTER1)
mask = ARMV6_PMCR_COUNT1_IEN;
if (mask)
return pmcr & mask;
WARN_ONCE(1, "invalid counter number (%d)\n", idx);
return 0;
}
static irqreturn_t static irqreturn_t
armv6pmu_handle_irq(int irq_num, armv6pmu_handle_irq(int irq_num,
void *dev) void *dev)
...@@ -513,7 +496,8 @@ armv6pmu_handle_irq(int irq_num, ...@@ -513,7 +496,8 @@ armv6pmu_handle_irq(int irq_num,
struct perf_event *event = cpuc->events[idx]; struct perf_event *event = cpuc->events[idx];
struct hw_perf_event *hwc; struct hw_perf_event *hwc;
if (!counter_is_active(pmcr, idx)) /* Ignore if we don't have an event. */
if (!event)
continue; continue;
/* /*
...@@ -524,7 +508,7 @@ armv6pmu_handle_irq(int irq_num, ...@@ -524,7 +508,7 @@ armv6pmu_handle_irq(int irq_num,
continue; continue;
hwc = &event->hw; hwc = &event->hw;
armpmu_event_update(event, hwc, idx, 1); armpmu_event_update(event, hwc, idx);
data.period = event->hw.last_period; data.period = event->hw.last_period;
if (!armpmu_event_set_period(event, hwc, idx)) if (!armpmu_event_set_period(event, hwc, idx))
continue; continue;
......
...@@ -809,6 +809,11 @@ static inline int armv7_pmnc_disable_intens(int idx) ...@@ -809,6 +809,11 @@ static inline int armv7_pmnc_disable_intens(int idx)
counter = ARMV7_IDX_TO_COUNTER(idx); counter = ARMV7_IDX_TO_COUNTER(idx);
asm volatile("mcr p15, 0, %0, c9, c14, 2" : : "r" (BIT(counter))); asm volatile("mcr p15, 0, %0, c9, c14, 2" : : "r" (BIT(counter)));
isb();
/* Clear the overflow flag in case an interrupt is pending. */
asm volatile("mcr p15, 0, %0, c9, c12, 3" : : "r" (BIT(counter)));
isb();
return idx; return idx;
} }
...@@ -955,6 +960,10 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev) ...@@ -955,6 +960,10 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev)
struct perf_event *event = cpuc->events[idx]; struct perf_event *event = cpuc->events[idx];
struct hw_perf_event *hwc; struct hw_perf_event *hwc;
/* Ignore if we don't have an event. */
if (!event)
continue;
/* /*
* We have a single interrupt for all counters. Check that * We have a single interrupt for all counters. Check that
* each counter has overflowed before we process it. * each counter has overflowed before we process it.
...@@ -963,7 +972,7 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev) ...@@ -963,7 +972,7 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev)
continue; continue;
hwc = &event->hw; hwc = &event->hw;
armpmu_event_update(event, hwc, idx, 1); armpmu_event_update(event, hwc, idx);
data.period = event->hw.last_period; data.period = event->hw.last_period;
if (!armpmu_event_set_period(event, hwc, idx)) if (!armpmu_event_set_period(event, hwc, idx))
continue; continue;
......
...@@ -255,11 +255,14 @@ xscale1pmu_handle_irq(int irq_num, void *dev) ...@@ -255,11 +255,14 @@ xscale1pmu_handle_irq(int irq_num, void *dev)
struct perf_event *event = cpuc->events[idx]; struct perf_event *event = cpuc->events[idx];
struct hw_perf_event *hwc; struct hw_perf_event *hwc;
if (!event)
continue;
if (!xscale1_pmnc_counter_has_overflowed(pmnc, idx)) if (!xscale1_pmnc_counter_has_overflowed(pmnc, idx))
continue; continue;
hwc = &event->hw; hwc = &event->hw;
armpmu_event_update(event, hwc, idx, 1); armpmu_event_update(event, hwc, idx);
data.period = event->hw.last_period; data.period = event->hw.last_period;
if (!armpmu_event_set_period(event, hwc, idx)) if (!armpmu_event_set_period(event, hwc, idx))
continue; continue;
...@@ -592,11 +595,14 @@ xscale2pmu_handle_irq(int irq_num, void *dev) ...@@ -592,11 +595,14 @@ xscale2pmu_handle_irq(int irq_num, void *dev)
struct perf_event *event = cpuc->events[idx]; struct perf_event *event = cpuc->events[idx];
struct hw_perf_event *hwc; struct hw_perf_event *hwc;
if (!xscale2_pmnc_counter_has_overflowed(pmnc, idx)) if (!event)
continue;
if (!xscale2_pmnc_counter_has_overflowed(of_flags, idx))
continue; continue;
hwc = &event->hw; hwc = &event->hw;
armpmu_event_update(event, hwc, idx, 1); armpmu_event_update(event, hwc, idx);
data.period = event->hw.last_period; data.period = event->hw.last_period;
if (!armpmu_event_set_period(event, hwc, idx)) if (!armpmu_event_set_period(event, hwc, idx))
continue; continue;
...@@ -663,7 +669,7 @@ xscale2pmu_enable_event(struct hw_perf_event *hwc, int idx) ...@@ -663,7 +669,7 @@ xscale2pmu_enable_event(struct hw_perf_event *hwc, int idx)
static void static void
xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx) xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx)
{ {
unsigned long flags, ien, evtsel; unsigned long flags, ien, evtsel, of_flags;
struct pmu_hw_events *events = cpu_pmu->get_hw_events(); struct pmu_hw_events *events = cpu_pmu->get_hw_events();
ien = xscale2pmu_read_int_enable(); ien = xscale2pmu_read_int_enable();
...@@ -672,26 +678,31 @@ xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx) ...@@ -672,26 +678,31 @@ xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx)
switch (idx) { switch (idx) {
case XSCALE_CYCLE_COUNTER: case XSCALE_CYCLE_COUNTER:
ien &= ~XSCALE2_CCOUNT_INT_EN; ien &= ~XSCALE2_CCOUNT_INT_EN;
of_flags = XSCALE2_CCOUNT_OVERFLOW;
break; break;
case XSCALE_COUNTER0: case XSCALE_COUNTER0:
ien &= ~XSCALE2_COUNT0_INT_EN; ien &= ~XSCALE2_COUNT0_INT_EN;
evtsel &= ~XSCALE2_COUNT0_EVT_MASK; evtsel &= ~XSCALE2_COUNT0_EVT_MASK;
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT0_EVT_SHFT; evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT0_EVT_SHFT;
of_flags = XSCALE2_COUNT0_OVERFLOW;
break; break;
case XSCALE_COUNTER1: case XSCALE_COUNTER1:
ien &= ~XSCALE2_COUNT1_INT_EN; ien &= ~XSCALE2_COUNT1_INT_EN;
evtsel &= ~XSCALE2_COUNT1_EVT_MASK; evtsel &= ~XSCALE2_COUNT1_EVT_MASK;
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT1_EVT_SHFT; evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT1_EVT_SHFT;
of_flags = XSCALE2_COUNT1_OVERFLOW;
break; break;
case XSCALE_COUNTER2: case XSCALE_COUNTER2:
ien &= ~XSCALE2_COUNT2_INT_EN; ien &= ~XSCALE2_COUNT2_INT_EN;
evtsel &= ~XSCALE2_COUNT2_EVT_MASK; evtsel &= ~XSCALE2_COUNT2_EVT_MASK;
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT2_EVT_SHFT; evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT2_EVT_SHFT;
of_flags = XSCALE2_COUNT2_OVERFLOW;
break; break;
case XSCALE_COUNTER3: case XSCALE_COUNTER3:
ien &= ~XSCALE2_COUNT3_INT_EN; ien &= ~XSCALE2_COUNT3_INT_EN;
evtsel &= ~XSCALE2_COUNT3_EVT_MASK; evtsel &= ~XSCALE2_COUNT3_EVT_MASK;
evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT3_EVT_SHFT; evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT3_EVT_SHFT;
of_flags = XSCALE2_COUNT3_OVERFLOW;
break; break;
default: default:
WARN_ONCE(1, "invalid counter number (%d)\n", idx); WARN_ONCE(1, "invalid counter number (%d)\n", idx);
...@@ -701,6 +712,7 @@ xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx) ...@@ -701,6 +712,7 @@ xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx)
raw_spin_lock_irqsave(&events->pmu_lock, flags); raw_spin_lock_irqsave(&events->pmu_lock, flags);
xscale2pmu_write_event_select(evtsel); xscale2pmu_write_event_select(evtsel);
xscale2pmu_write_int_enable(ien); xscale2pmu_write_int_enable(ien);
xscale2pmu_write_overflow_flags(of_flags);
raw_spin_unlock_irqrestore(&events->pmu_lock, flags); raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
} }
......
...@@ -38,10 +38,6 @@ ...@@ -38,10 +38,6 @@
#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE) #if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
static u64 hdmac_dmamask = DMA_BIT_MASK(32); static u64 hdmac_dmamask = DMA_BIT_MASK(32);
static struct at_dma_platform_data atdma_pdata = {
.nr_channels = 8,
};
static struct resource hdmac_resources[] = { static struct resource hdmac_resources[] = {
[0] = { [0] = {
.start = AT91SAM9G45_BASE_DMA, .start = AT91SAM9G45_BASE_DMA,
...@@ -56,12 +52,11 @@ static struct resource hdmac_resources[] = { ...@@ -56,12 +52,11 @@ static struct resource hdmac_resources[] = {
}; };
static struct platform_device at_hdmac_device = { static struct platform_device at_hdmac_device = {
.name = "at_hdmac", .name = "at91sam9g45_dma",
.id = -1, .id = -1,
.dev = { .dev = {
.dma_mask = &hdmac_dmamask, .dma_mask = &hdmac_dmamask,
.coherent_dma_mask = DMA_BIT_MASK(32), .coherent_dma_mask = DMA_BIT_MASK(32),
.platform_data = &atdma_pdata,
}, },
.resource = hdmac_resources, .resource = hdmac_resources,
.num_resources = ARRAY_SIZE(hdmac_resources), .num_resources = ARRAY_SIZE(hdmac_resources),
...@@ -69,9 +64,15 @@ static struct platform_device at_hdmac_device = { ...@@ -69,9 +64,15 @@ static struct platform_device at_hdmac_device = {
void __init at91_add_device_hdmac(void) void __init at91_add_device_hdmac(void)
{ {
dma_cap_set(DMA_MEMCPY, atdma_pdata.cap_mask); #if defined(CONFIG_OF)
dma_cap_set(DMA_SLAVE, atdma_pdata.cap_mask); struct device_node *of_node =
platform_device_register(&at_hdmac_device); of_find_node_by_name(NULL, "dma-controller");
if (of_node)
of_node_put(of_node);
else
#endif
platform_device_register(&at_hdmac_device);
} }
#else #else
void __init at91_add_device_hdmac(void) {} void __init at91_add_device_hdmac(void) {}
......
...@@ -33,10 +33,6 @@ ...@@ -33,10 +33,6 @@
#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE) #if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)
static u64 hdmac_dmamask = DMA_BIT_MASK(32); static u64 hdmac_dmamask = DMA_BIT_MASK(32);
static struct at_dma_platform_data atdma_pdata = {
.nr_channels = 2,
};
static struct resource hdmac_resources[] = { static struct resource hdmac_resources[] = {
[0] = { [0] = {
.start = AT91SAM9RL_BASE_DMA, .start = AT91SAM9RL_BASE_DMA,
...@@ -51,12 +47,11 @@ static struct resource hdmac_resources[] = { ...@@ -51,12 +47,11 @@ static struct resource hdmac_resources[] = {
}; };
static struct platform_device at_hdmac_device = { static struct platform_device at_hdmac_device = {
.name = "at_hdmac", .name = "at91sam9rl_dma",
.id = -1, .id = -1,
.dev = { .dev = {
.dma_mask = &hdmac_dmamask, .dma_mask = &hdmac_dmamask,
.coherent_dma_mask = DMA_BIT_MASK(32), .coherent_dma_mask = DMA_BIT_MASK(32),
.platform_data = &atdma_pdata,
}, },
.resource = hdmac_resources, .resource = hdmac_resources,
.num_resources = ARRAY_SIZE(hdmac_resources), .num_resources = ARRAY_SIZE(hdmac_resources),
...@@ -64,7 +59,6 @@ static struct platform_device at_hdmac_device = { ...@@ -64,7 +59,6 @@ static struct platform_device at_hdmac_device = {
void __init at91_add_device_hdmac(void) void __init at91_add_device_hdmac(void)
{ {
dma_cap_set(DMA_MEMCPY, atdma_pdata.cap_mask);
platform_device_register(&at_hdmac_device); platform_device_register(&at_hdmac_device);
} }
#else #else
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <mach/ep93xx_spi.h> #include <mach/ep93xx_spi.h>
#include <mach/gpio-ep93xx.h> #include <mach/gpio-ep93xx.h>
#include <asm/hardware/vic.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -361,6 +362,7 @@ MACHINE_START(VISION_EP9307, "Vision Engraving Systems EP9307") ...@@ -361,6 +362,7 @@ MACHINE_START(VISION_EP9307, "Vision Engraving Systems EP9307")
.atag_offset = 0x100, .atag_offset = 0x100,
.map_io = vision_map_io, .map_io = vision_map_io,
.init_irq = ep93xx_init_irq, .init_irq = ep93xx_init_irq,
.handle_irq = vic_handle_irq,
.timer = &ep93xx_timer, .timer = &ep93xx_timer,
.init_machine = vision_init_machine, .init_machine = vision_init_machine,
.restart = ep93xx_restart, .restart = ep93xx_restart,
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/gpio_keys.h> #include <linux/gpio_keys.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/interrupt.h>
#include <linux/fb.h> #include <linux/fb.h>
#include <linux/mfd/max8998.h> #include <linux/mfd/max8998.h>
#include <linux/regulator/machine.h> #include <linux/regulator/machine.h>
...@@ -595,6 +596,7 @@ static struct mxt_platform_data qt602240_platform_data = { ...@@ -595,6 +596,7 @@ static struct mxt_platform_data qt602240_platform_data = {
.threshold = 0x28, .threshold = 0x28,
.voltage = 2800000, /* 2.8V */ .voltage = 2800000, /* 2.8V */
.orient = MXT_DIAGONAL, .orient = MXT_DIAGONAL,
.irqflags = IRQF_TRIGGER_FALLING,
}; };
static struct i2c_board_info i2c3_devs[] __initdata = { static struct i2c_board_info i2c3_devs[] __initdata = {
......
...@@ -61,7 +61,7 @@ ...@@ -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] = { ...@@ -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) ...@@ -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) ...@@ -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 { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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) ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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) ...@@ -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 ...@@ -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
......
...@@ -371,7 +371,11 @@ static void n8x0_mmc_callback(void *data, u8 card_mask) ...@@ -371,7 +371,11 @@ static void n8x0_mmc_callback(void *data, u8 card_mask)
else else
*openp = 0; *openp = 0;
#ifdef CONFIG_MMC_OMAP
omap_mmc_notify_cover_event(mmc_device, index, *openp); omap_mmc_notify_cover_event(mmc_device, index, *openp);
#else
pr_warn("MMC: notify cover event not available\n");
#endif
} }
static int n8x0_mmc_late_init(struct device *dev) static int n8x0_mmc_late_init(struct device *dev)
......
...@@ -381,7 +381,7 @@ static int omap3evm_twl_gpio_setup(struct device *dev, ...@@ -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); ...@@ -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, ...@@ -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, ...@@ -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 @@ ...@@ -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 = { ...@@ -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) ...@@ -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;
......
...@@ -428,6 +428,7 @@ static int omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c, ...@@ -428,6 +428,7 @@ static int omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
return 0; return 0;
} }
static int omap_hsmmc_done;
#define MAX_OMAP_MMC_HWMOD_NAME_LEN 16 #define MAX_OMAP_MMC_HWMOD_NAME_LEN 16
void omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr) void omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr)
...@@ -491,6 +492,11 @@ void omap2_hsmmc_init(struct omap2_hsmmc_info *controllers) ...@@ -491,6 +492,11 @@ void omap2_hsmmc_init(struct omap2_hsmmc_info *controllers)
{ {
u32 reg; u32 reg;
if (omap_hsmmc_done)
return;
omap_hsmmc_done = 1;
if (!cpu_is_omap44xx()) { if (!cpu_is_omap44xx()) {
if (cpu_is_omap2430()) { if (cpu_is_omap2430()) {
control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE; control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE;
......
...@@ -343,6 +343,7 @@ static void __init omap3_check_revision(const char **cpu_rev) ...@@ -343,6 +343,7 @@ static void __init omap3_check_revision(const char **cpu_rev)
case 0xb944: case 0xb944:
omap_revision = AM335X_REV_ES1_0; omap_revision = AM335X_REV_ES1_0;
*cpu_rev = "1.0"; *cpu_rev = "1.0";
break;
case 0xb8f2: case 0xb8f2:
switch (rev) { switch (rev) {
case 0: case 0:
......
...@@ -307,6 +307,7 @@ void __init omapam33xx_map_common_io(void) ...@@ -307,6 +307,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 = { ...@@ -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)
......
...@@ -218,7 +218,7 @@ static int _omap_mux_get_by_name(struct omap_mux_partition *partition, ...@@ -218,7 +218,7 @@ static int _omap_mux_get_by_name(struct omap_mux_partition *partition,
return -ENODEV; return -ENODEV;
} }
static int __init static int
omap_mux_get_by_name(const char *muxname, omap_mux_get_by_name(const char *muxname,
struct omap_mux_partition **found_partition, struct omap_mux_partition **found_partition,
struct omap_mux **found_mux) struct omap_mux **found_mux)
......
...@@ -150,7 +150,8 @@ static int __init omap_iommu_init(void) ...@@ -150,7 +150,8 @@ static int __init omap_iommu_init(void)
platform_device_put(omap_iommu_pdev[i]); platform_device_put(omap_iommu_pdev[i]);
return err; return err;
} }
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)
{ {
......
...@@ -24,12 +24,14 @@ ...@@ -24,12 +24,14 @@
#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>
#include "common.h" #include "common.h"
#include "omap4-sar-layout.h" #include "omap4-sar-layout.h"
#include <linux/export.h>
#ifdef CONFIG_CACHE_L2X0 #ifdef CONFIG_CACHE_L2X0
static void __iomem *l2cache_base; static void __iomem *l2cache_base;
...@@ -43,6 +45,9 @@ static void __iomem *sar_ram_base; ...@@ -43,6 +45,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) {
...@@ -51,19 +56,22 @@ void omap_bus_sync(void) ...@@ -51,19 +56,22 @@ void omap_bus_sync(void)
isb(); isb();
} }
} }
EXPORT_SYMBOL(omap_bus_sync);
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 +83,10 @@ static int __init omap_barriers_init(void) ...@@ -75,9 +83,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, ...@@ -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);
......
...@@ -270,7 +270,6 @@ static struct regulator_init_data omap4_vusb_idata = { ...@@ -270,7 +270,6 @@ static struct regulator_init_data omap4_vusb_idata = {
.constraints = { .constraints = {
.min_uV = 3300000, .min_uV = 3300000,
.max_uV = 3300000, .max_uV = 3300000,
.apply_uV = true,
.valid_modes_mask = REGULATOR_MODE_NORMAL .valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY, | REGULATOR_MODE_STANDBY,
.valid_ops_mask = REGULATOR_CHANGE_MODE .valid_ops_mask = REGULATOR_CHANGE_MODE
......
...@@ -486,7 +486,7 @@ static void setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode) ...@@ -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) ...@@ -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;
......
...@@ -49,7 +49,6 @@ extern unsigned pxa3xx_get_clk_frequency_khz(int); ...@@ -49,7 +49,6 @@ extern unsigned pxa3xx_get_clk_frequency_khz(int);
#endif #endif
extern struct syscore_ops pxa_irq_syscore_ops; extern struct syscore_ops pxa_irq_syscore_ops;
extern struct syscore_ops pxa_gpio_syscore_ops;
extern struct syscore_ops pxa2xx_mfp_syscore_ops; extern struct syscore_ops pxa2xx_mfp_syscore_ops;
extern struct syscore_ops pxa3xx_mfp_syscore_ops; extern struct syscore_ops pxa3xx_mfp_syscore_ops;
......
...@@ -45,6 +45,7 @@ ...@@ -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[] = { ...@@ -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 = { ...@@ -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) ...@@ -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));
......
...@@ -226,6 +226,12 @@ static void __init pxa25x_mfp_init(void) ...@@ -226,6 +226,12 @@ static void __init pxa25x_mfp_init(void)
{ {
int i; int i;
/* running before pxa_gpio_probe() */
#ifdef CONFIG_CPU_PXA26x
pxa_last_gpio = 89;
#else
pxa_last_gpio = 84;
#endif
for (i = 0; i <= pxa_last_gpio; i++) for (i = 0; i <= pxa_last_gpio; i++)
gpio_desc[i].valid = 1; gpio_desc[i].valid = 1;
...@@ -295,6 +301,7 @@ static void __init pxa27x_mfp_init(void) ...@@ -295,6 +301,7 @@ static void __init pxa27x_mfp_init(void)
{ {
int i, gpio; int i, gpio;
pxa_last_gpio = 120; /* running before pxa_gpio_probe() */
for (i = 0; i <= pxa_last_gpio; i++) { for (i = 0; i <= pxa_last_gpio; i++) {
/* skip GPIO2, 5, 6, 7, 8, they are not /* skip GPIO2, 5, 6, 7, 8, they are not
* valid pins allow configuration * valid pins allow configuration
......
...@@ -25,7 +25,6 @@ ...@@ -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>
...@@ -209,6 +208,7 @@ static struct clk_lookup pxa25x_clkregs[] = { ...@@ -209,6 +208,7 @@ static struct clk_lookup pxa25x_clkregs[] = {
INIT_CLKREG(&clk_pxa25x_gpio11, NULL, "GPIO11_CLK"), INIT_CLKREG(&clk_pxa25x_gpio11, NULL, "GPIO11_CLK"),
INIT_CLKREG(&clk_pxa25x_gpio12, NULL, "GPIO12_CLK"), INIT_CLKREG(&clk_pxa25x_gpio12, NULL, "GPIO12_CLK"),
INIT_CLKREG(&clk_pxa25x_mem, "pxa2xx-pcmcia", NULL), INIT_CLKREG(&clk_pxa25x_mem, "pxa2xx-pcmcia", NULL),
INIT_CLKREG(&clk_dummy, "pxa-gpio", NULL),
}; };
static struct clk_lookup pxa25x_hwuart_clkreg = static struct clk_lookup pxa25x_hwuart_clkreg =
...@@ -368,7 +368,6 @@ static int __init pxa25x_init(void) ...@@ -368,7 +368,6 @@ static int __init pxa25x_init(void)
register_syscore_ops(&pxa_irq_syscore_ops); register_syscore_ops(&pxa_irq_syscore_ops);
register_syscore_ops(&pxa2xx_mfp_syscore_ops); register_syscore_ops(&pxa2xx_mfp_syscore_ops);
register_syscore_ops(&pxa_gpio_syscore_ops);
register_syscore_ops(&pxa2xx_clock_syscore_ops); register_syscore_ops(&pxa2xx_clock_syscore_ops);
ret = platform_add_devices(pxa25x_devices, ret = platform_add_devices(pxa25x_devices,
......
...@@ -22,7 +22,6 @@ ...@@ -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>
...@@ -230,6 +229,7 @@ static struct clk_lookup pxa27x_clkregs[] = { ...@@ -230,6 +229,7 @@ static struct clk_lookup pxa27x_clkregs[] = {
INIT_CLKREG(&clk_pxa27x_im, NULL, "IMCLK"), INIT_CLKREG(&clk_pxa27x_im, NULL, "IMCLK"),
INIT_CLKREG(&clk_pxa27x_memc, NULL, "MEMCLK"), INIT_CLKREG(&clk_pxa27x_memc, NULL, "MEMCLK"),
INIT_CLKREG(&clk_pxa27x_mem, "pxa2xx-pcmcia", NULL), INIT_CLKREG(&clk_pxa27x_mem, "pxa2xx-pcmcia", NULL),
INIT_CLKREG(&clk_dummy, "pxa-gpio", NULL),
}; };
#ifdef CONFIG_PM #ifdef CONFIG_PM
...@@ -456,7 +456,6 @@ static int __init pxa27x_init(void) ...@@ -456,7 +456,6 @@ static int __init pxa27x_init(void)
register_syscore_ops(&pxa_irq_syscore_ops); register_syscore_ops(&pxa_irq_syscore_ops);
register_syscore_ops(&pxa2xx_mfp_syscore_ops); register_syscore_ops(&pxa2xx_mfp_syscore_ops);
register_syscore_ops(&pxa_gpio_syscore_ops);
register_syscore_ops(&pxa2xx_clock_syscore_ops); register_syscore_ops(&pxa2xx_clock_syscore_ops);
ret = platform_add_devices(devices, ARRAY_SIZE(devices)); ret = platform_add_devices(devices, ARRAY_SIZE(devices));
......
...@@ -462,7 +462,6 @@ static int __init pxa3xx_init(void) ...@@ -462,7 +462,6 @@ static int __init pxa3xx_init(void)
register_syscore_ops(&pxa_irq_syscore_ops); register_syscore_ops(&pxa_irq_syscore_ops);
register_syscore_ops(&pxa3xx_mfp_syscore_ops); register_syscore_ops(&pxa3xx_mfp_syscore_ops);
register_syscore_ops(&pxa_gpio_syscore_ops);
register_syscore_ops(&pxa3xx_clock_syscore_ops); register_syscore_ops(&pxa3xx_clock_syscore_ops);
ret = platform_add_devices(devices, ARRAY_SIZE(devices)); ret = platform_add_devices(devices, ARRAY_SIZE(devices));
......
...@@ -283,7 +283,6 @@ static int __init pxa95x_init(void) ...@@ -283,7 +283,6 @@ static int __init pxa95x_init(void)
return ret; return ret;
register_syscore_ops(&pxa_irq_syscore_ops); register_syscore_ops(&pxa_irq_syscore_ops);
register_syscore_ops(&pxa_gpio_syscore_ops);
register_syscore_ops(&pxa3xx_clock_syscore_ops); register_syscore_ops(&pxa3xx_clock_syscore_ops);
ret = platform_add_devices(devices, ARRAY_SIZE(devices)); ret = platform_add_devices(devices, ARRAY_SIZE(devices));
......
...@@ -15,7 +15,6 @@ ...@@ -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[] = { ...@@ -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) ...@@ -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) ...@@ -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;
} }
......
...@@ -12,6 +12,6 @@ ...@@ -12,6 +12,6 @@
#ifndef __ARCH_ARM_MACH_S3C2440_COMMON_H #ifndef __ARCH_ARM_MACH_S3C2440_COMMON_H
#define __ARCH_ARM_MACH_S3C2440_COMMON_H #define __ARCH_ARM_MACH_S3C2440_COMMON_H
void s3c2440_restart(char mode, const char *cmd); void s3c244x_restart(char mode, const char *cmd);
#endif /* __ARCH_ARM_MACH_S3C2440_COMMON_H */ #endif /* __ARCH_ARM_MACH_S3C2440_COMMON_H */
...@@ -487,5 +487,5 @@ MACHINE_START(ANUBIS, "Simtec-Anubis") ...@@ -487,5 +487,5 @@ MACHINE_START(ANUBIS, "Simtec-Anubis")
.init_machine = anubis_init, .init_machine = anubis_init,
.init_irq = s3c24xx_init_irq, .init_irq = s3c24xx_init_irq,
.timer = &s3c24xx_timer, .timer = &s3c24xx_timer,
.restart = s3c2440_restart, .restart = s3c244x_restart,
MACHINE_END MACHINE_END
...@@ -222,5 +222,5 @@ MACHINE_START(AT2440EVB, "AT2440EVB") ...@@ -222,5 +222,5 @@ MACHINE_START(AT2440EVB, "AT2440EVB")
.init_machine = at2440evb_init, .init_machine = at2440evb_init,
.init_irq = s3c24xx_init_irq, .init_irq = s3c24xx_init_irq,
.timer = &s3c24xx_timer, .timer = &s3c24xx_timer,
.restart = s3c2440_restart, .restart = s3c244x_restart,
MACHINE_END MACHINE_END
...@@ -601,5 +601,5 @@ MACHINE_START(NEO1973_GTA02, "GTA02") ...@@ -601,5 +601,5 @@ MACHINE_START(NEO1973_GTA02, "GTA02")
.init_irq = s3c24xx_init_irq, .init_irq = s3c24xx_init_irq,
.init_machine = gta02_machine_init, .init_machine = gta02_machine_init,
.timer = &s3c24xx_timer, .timer = &s3c24xx_timer,
.restart = s3c2440_restart, .restart = s3c244x_restart,
MACHINE_END MACHINE_END
...@@ -701,5 +701,5 @@ MACHINE_START(MINI2440, "MINI2440") ...@@ -701,5 +701,5 @@ MACHINE_START(MINI2440, "MINI2440")
.init_machine = mini2440_init, .init_machine = mini2440_init,
.init_irq = s3c24xx_init_irq, .init_irq = s3c24xx_init_irq,
.timer = &s3c24xx_timer, .timer = &s3c24xx_timer,
.restart = s3c2440_restart, .restart = s3c244x_restart,
MACHINE_END MACHINE_END
...@@ -158,5 +158,5 @@ MACHINE_START(NEXCODER_2440, "NexVision - Nexcoder 2440") ...@@ -158,5 +158,5 @@ MACHINE_START(NEXCODER_2440, "NexVision - Nexcoder 2440")
.init_machine = nexcoder_init, .init_machine = nexcoder_init,
.init_irq = s3c24xx_init_irq, .init_irq = s3c24xx_init_irq,
.timer = &s3c24xx_timer, .timer = &s3c24xx_timer,
.restart = s3c2440_restart, .restart = s3c244x_restart,
MACHINE_END MACHINE_END
...@@ -436,5 +436,5 @@ MACHINE_START(OSIRIS, "Simtec-OSIRIS") ...@@ -436,5 +436,5 @@ MACHINE_START(OSIRIS, "Simtec-OSIRIS")
.init_irq = s3c24xx_init_irq, .init_irq = s3c24xx_init_irq,
.init_machine = osiris_init, .init_machine = osiris_init,
.timer = &s3c24xx_timer, .timer = &s3c24xx_timer,
.restart = s3c2440_restart, .restart = s3c244x_restart,
MACHINE_END MACHINE_END
...@@ -822,5 +822,5 @@ MACHINE_START(RX1950, "HP iPAQ RX1950") ...@@ -822,5 +822,5 @@ MACHINE_START(RX1950, "HP iPAQ RX1950")
.init_irq = s3c24xx_init_irq, .init_irq = s3c24xx_init_irq,
.init_machine = rx1950_init_machine, .init_machine = rx1950_init_machine,
.timer = &s3c24xx_timer, .timer = &s3c24xx_timer,
.restart = s3c2440_restart, .restart = s3c244x_restart,
MACHINE_END MACHINE_END
...@@ -213,5 +213,5 @@ MACHINE_START(RX3715, "IPAQ-RX3715") ...@@ -213,5 +213,5 @@ MACHINE_START(RX3715, "IPAQ-RX3715")
.init_irq = rx3715_init_irq, .init_irq = rx3715_init_irq,
.init_machine = rx3715_init_machine, .init_machine = rx3715_init_machine,
.timer = &s3c24xx_timer, .timer = &s3c24xx_timer,
.restart = s3c2440_restart, .restart = s3c244x_restart,
MACHINE_END MACHINE_END
...@@ -183,5 +183,5 @@ MACHINE_START(S3C2440, "SMDK2440") ...@@ -183,5 +183,5 @@ MACHINE_START(S3C2440, "SMDK2440")
.map_io = smdk2440_map_io, .map_io = smdk2440_map_io,
.init_machine = smdk2440_machine_init, .init_machine = smdk2440_machine_init,
.timer = &s3c24xx_timer, .timer = &s3c24xx_timer,
.restart = s3c2440_restart, .restart = s3c244x_restart,
MACHINE_END MACHINE_END
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
#include <plat/cpu.h> #include <plat/cpu.h>
#include <plat/s3c244x.h> #include <plat/s3c244x.h>
#include <plat/pm.h> #include <plat/pm.h>
#include <plat/watchdog-reset.h>
#include <plat/gpio-core.h> #include <plat/gpio-core.h>
#include <plat/gpio-cfg.h> #include <plat/gpio-cfg.h>
...@@ -74,15 +73,3 @@ void __init s3c2440_map_io(void) ...@@ -74,15 +73,3 @@ void __init s3c2440_map_io(void)
s3c24xx_gpiocfg_default.set_pull = s3c24xx_gpio_setpull_1up; s3c24xx_gpiocfg_default.set_pull = s3c24xx_gpio_setpull_1up;
s3c24xx_gpiocfg_default.get_pull = s3c24xx_gpio_getpull_1up; s3c24xx_gpiocfg_default.get_pull = s3c24xx_gpio_getpull_1up;
} }
void s3c2440_restart(char mode, const char *cmd)
{
if (mode == 's') {
soft_restart(0);
}
arch_wdt_reset();
/* we'll take a jump through zero as a poor second */
soft_restart(0);
}
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#include <plat/pm.h> #include <plat/pm.h>
#include <plat/pll.h> #include <plat/pll.h>
#include <plat/nand-core.h> #include <plat/nand-core.h>
#include <plat/watchdog-reset.h>
static struct map_desc s3c244x_iodesc[] __initdata = { static struct map_desc s3c244x_iodesc[] __initdata = {
IODESC_ENT(CLKPWR), IODESC_ENT(CLKPWR),
...@@ -196,3 +197,14 @@ struct syscore_ops s3c244x_pm_syscore_ops = { ...@@ -196,3 +197,14 @@ struct syscore_ops s3c244x_pm_syscore_ops = {
.suspend = s3c244x_suspend, .suspend = s3c244x_suspend,
.resume = s3c244x_resume, .resume = s3c244x_resume,
}; };
void s3c244x_restart(char mode, const char *cmd)
{
if (mode == 's')
soft_restart(0);
arch_wdt_reset();
/* we'll take a jump through zero as a poor second */
soft_restart(0);
}
...@@ -5,7 +5,7 @@ config UX500_SOC_COMMON ...@@ -5,7 +5,7 @@ config UX500_SOC_COMMON
default y default y
select ARM_GIC select ARM_GIC
select HAS_MTU select HAS_MTU
select ARM_ERRATA_753970 select PL310_ERRATA_753970
select ARM_ERRATA_754322 select ARM_ERRATA_754322
select ARM_ERRATA_764369 select ARM_ERRATA_764369
......
...@@ -7,7 +7,7 @@ config ARCH_VEXPRESS_CA9X4 ...@@ -7,7 +7,7 @@ config ARCH_VEXPRESS_CA9X4
select ARM_GIC select ARM_GIC
select ARM_ERRATA_720789 select ARM_ERRATA_720789
select ARM_ERRATA_751472 select ARM_ERRATA_751472
select ARM_ERRATA_753970 select PL310_ERRATA_753970
select HAVE_SMP select HAVE_SMP
select MIGHT_HAVE_CACHE_L2X0 select MIGHT_HAVE_CACHE_L2X0
......
...@@ -230,9 +230,7 @@ __v7_setup: ...@@ -230,9 +230,7 @@ __v7_setup:
mcreq p15, 0, r10, c15, c0, 1 @ write diagnostic register mcreq p15, 0, r10, c15, c0, 1 @ write diagnostic register
#endif #endif
#ifdef CONFIG_ARM_ERRATA_743622 #ifdef CONFIG_ARM_ERRATA_743622
teq r6, #0x20 @ present in r2p0 teq r5, #0x00200000 @ only present in r2p*
teqne r6, #0x21 @ present in r2p1
teqne r6, #0x22 @ present in r2p2
mrceq p15, 0, r10, c15, c0, 1 @ read diagnostic register mrceq p15, 0, r10, c15, c0, 1 @ read diagnostic register
orreq r10, r10, #1 << 6 @ set bit #6 orreq r10, r10, #1 << 6 @ set bit #6
mcreq p15, 0, r10, c15, c0, 1 @ write diagnostic register mcreq p15, 0, r10, c15, c0, 1 @ write diagnostic register
......
...@@ -69,6 +69,7 @@ void __init omap_reserve(void) ...@@ -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)
......
...@@ -428,8 +428,16 @@ ...@@ -428,8 +428,16 @@
#define OMAP_GPMC_NR_IRQS 8 #define OMAP_GPMC_NR_IRQS 8
#define OMAP_GPMC_IRQ_END (OMAP_GPMC_IRQ_BASE + OMAP_GPMC_NR_IRQS) #define OMAP_GPMC_IRQ_END (OMAP_GPMC_IRQ_BASE + OMAP_GPMC_NR_IRQS)
/* PRCM IRQ handler */
#ifdef CONFIG_ARCH_OMAP2PLUS
#define OMAP_PRCM_IRQ_BASE (OMAP_GPMC_IRQ_END)
#define OMAP_PRCM_NR_IRQS 64
#define OMAP_PRCM_IRQ_END (OMAP_PRCM_IRQ_BASE + OMAP_PRCM_NR_IRQS)
#else
#define OMAP_PRCM_IRQ_END OMAP_GPMC_IRQ_END
#endif
#define NR_IRQS OMAP_GPMC_IRQ_END #define NR_IRQS OMAP_PRCM_IRQ_END
#define OMAP_IRQ_BIT(irq) (1 << ((irq) % 32)) #define OMAP_IRQ_BIT(irq) (1 << ((irq) % 32))
......
...@@ -10,4 +10,10 @@ static inline void omap_secure_ram_reserve_memblock(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__ */
...@@ -1249,7 +1249,7 @@ static void s3c2410_dma_resume(void) ...@@ -1249,7 +1249,7 @@ static void s3c2410_dma_resume(void)
struct s3c2410_dma_chan *cp = s3c2410_chans + dma_channels - 1; struct s3c2410_dma_chan *cp = s3c2410_chans + dma_channels - 1;
int channel; int channel;
for (channel = dma_channels - 1; channel >= 0; cp++, channel--) for (channel = dma_channels - 1; channel >= 0; cp--, channel--)
s3c2410_dma_resume_chan(cp); s3c2410_dma_resume_chan(cp);
} }
......
...@@ -1409,7 +1409,7 @@ void __init s5p_ehci_set_platdata(struct s5p_ehci_platdata *pd) ...@@ -1409,7 +1409,7 @@ void __init s5p_ehci_set_platdata(struct s5p_ehci_platdata *pd)
#ifdef CONFIG_S3C_DEV_USB_HSOTG #ifdef CONFIG_S3C_DEV_USB_HSOTG
static struct resource s3c_usb_hsotg_resources[] = { static struct resource s3c_usb_hsotg_resources[] = {
[0] = DEFINE_RES_MEM(S3C_PA_USB_HSOTG, SZ_16K), [0] = DEFINE_RES_MEM(S3C_PA_USB_HSOTG, SZ_128K),
[1] = DEFINE_RES_IRQ(IRQ_OTG), [1] = DEFINE_RES_IRQ(IRQ_OTG),
}; };
......
...@@ -145,11 +145,13 @@ static void clockevent_set_mode(enum clock_event_mode mode, ...@@ -145,11 +145,13 @@ static void clockevent_set_mode(enum clock_event_mode mode,
static int clockevent_next_event(unsigned long cycles, static int clockevent_next_event(unsigned long cycles,
struct clock_event_device *clk_event_dev) struct clock_event_device *clk_event_dev)
{ {
u16 val; u16 val = readw(gpt_base + CR(CLKEVT));
if (val & CTRL_ENABLE)
writew(val & ~CTRL_ENABLE, gpt_base + CR(CLKEVT));
writew(cycles, gpt_base + LOAD(CLKEVT)); writew(cycles, gpt_base + LOAD(CLKEVT));
val = readw(gpt_base + CR(CLKEVT));
val |= CTRL_ENABLE | CTRL_INT_ENABLE; val |= CTRL_ENABLE | CTRL_INT_ENABLE;
writew(val, gpt_base + CR(CLKEVT)); writew(val, gpt_base + CR(CLKEVT));
......
...@@ -122,8 +122,8 @@ extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); ...@@ -122,8 +122,8 @@ extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
extern unsigned long get_wchan(struct task_struct *p); extern unsigned long get_wchan(struct task_struct *p);
#define KSTK_EIP(tsk) (task_pt_regs(task)->pc) #define KSTK_EIP(task) (task_pt_regs(task)->pc)
#define KSTK_ESP(tsk) (task_pt_regs(task)->sp) #define KSTK_ESP(task) (task_pt_regs(task)->sp)
#define cpu_relax() do { } while (0) #define cpu_relax() do { } while (0)
......
...@@ -146,7 +146,7 @@ static int __init alchemy_time_init(unsigned int m2int) ...@@ -146,7 +146,7 @@ static int __init alchemy_time_init(unsigned int m2int)
cd->shift = 32; cd->shift = 32;
cd->mult = div_sc(32768, NSEC_PER_SEC, cd->shift); cd->mult = div_sc(32768, NSEC_PER_SEC, cd->shift);
cd->max_delta_ns = clockevent_delta2ns(0xffffffff, cd); cd->max_delta_ns = clockevent_delta2ns(0xffffffff, cd);
cd->min_delta_ns = clockevent_delta2ns(8, cd); /* ~0.25ms */ cd->min_delta_ns = clockevent_delta2ns(9, cd); /* ~0.28ms */
clockevents_register_device(cd); clockevents_register_device(cd);
setup_irq(m2int, &au1x_rtcmatch2_irqaction); setup_irq(m2int, &au1x_rtcmatch2_irqaction);
......
...@@ -96,7 +96,7 @@ void __init ath79_register_wmac(u8 *cal_data) ...@@ -96,7 +96,7 @@ void __init ath79_register_wmac(u8 *cal_data)
{ {
if (soc_is_ar913x()) if (soc_is_ar913x())
ar913x_wmac_setup(); ar913x_wmac_setup();
if (soc_is_ar933x()) else if (soc_is_ar933x())
ar933x_wmac_setup(); ar933x_wmac_setup();
else else
BUG(); BUG();
......
...@@ -8,7 +8,7 @@ CONFIG_HIGH_RES_TIMERS=y ...@@ -8,7 +8,7 @@ CONFIG_HIGH_RES_TIMERS=y
# CONFIG_SECCOMP is not set # CONFIG_SECCOMP is not set
CONFIG_USE_OF=y CONFIG_USE_OF=y
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y
CONFIG_CROSS_COMPILE="mips-linux-gnu-" CONFIG_CROSS_COMPILE=""
# CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE=y
...@@ -22,7 +22,7 @@ CONFIG_AUDIT=y ...@@ -22,7 +22,7 @@ CONFIG_AUDIT=y
CONFIG_CGROUPS=y CONFIG_CGROUPS=y
CONFIG_NAMESPACES=y CONFIG_NAMESPACES=y
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="usr/dev_file_list usr/rootfs.xlp" CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_BZIP2=y CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y CONFIG_RD_LZMA=y
CONFIG_INITRAMFS_COMPRESSION_LZMA=y CONFIG_INITRAMFS_COMPRESSION_LZMA=y
......
...@@ -8,7 +8,7 @@ CONFIG_HIGH_RES_TIMERS=y ...@@ -8,7 +8,7 @@ CONFIG_HIGH_RES_TIMERS=y
CONFIG_PREEMPT_VOLUNTARY=y CONFIG_PREEMPT_VOLUNTARY=y
CONFIG_KEXEC=y CONFIG_KEXEC=y
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y
CONFIG_CROSS_COMPILE="mips-linux-gnu-" CONFIG_CROSS_COMPILE=""
# CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE=y
...@@ -22,7 +22,7 @@ CONFIG_AUDIT=y ...@@ -22,7 +22,7 @@ CONFIG_AUDIT=y
CONFIG_NAMESPACES=y CONFIG_NAMESPACES=y
CONFIG_SCHED_AUTOGROUP=y CONFIG_SCHED_AUTOGROUP=y
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="usr/dev_file_list usr/rootfs.xlr" CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_BZIP2=y CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y CONFIG_RD_LZMA=y
CONFIG_INITRAMFS_COMPRESSION_GZIP=y CONFIG_INITRAMFS_COMPRESSION_GZIP=y
......
...@@ -6,7 +6,7 @@ CONFIG_HZ_1000=y ...@@ -6,7 +6,7 @@ CONFIG_HZ_1000=y
CONFIG_PREEMPT=y CONFIG_PREEMPT=y
# CONFIG_SECCOMP is not set # CONFIG_SECCOMP is not set
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y
CONFIG_CROSS_COMPILE="mips-linux-" CONFIG_CROSS_COMPILE=""
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_LOG_BUF_SHIFT=16 CONFIG_LOG_BUF_SHIFT=16
......
...@@ -11,6 +11,9 @@ ...@@ -11,6 +11,9 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/mach-au1x00/au1000.h> #include <asm/mach-au1x00/au1000.h>
struct gpio;
struct gpio_chip;
/* with the current GPIC design, up to 128 GPIOs are possible. /* with the current GPIC design, up to 128 GPIOs are possible.
* The only implementation so far is in the Au1300, which has 75 externally * The only implementation so far is in the Au1300, which has 75 externally
* available GPIOs. * available GPIOs.
...@@ -203,7 +206,22 @@ static inline int gpio_request(unsigned int gpio, const char *label) ...@@ -203,7 +206,22 @@ static inline int gpio_request(unsigned int gpio, const char *label)
return 0; return 0;
} }
static inline void gpio_free(unsigned int gpio) static inline int gpio_request_one(unsigned gpio,
unsigned long flags, const char *label)
{
return 0;
}
static inline int gpio_request_array(struct gpio *array, size_t num)
{
return 0;
}
static inline void gpio_free(unsigned gpio)
{
}
static inline void gpio_free_array(struct gpio *array, size_t num)
{ {
} }
......
...@@ -39,9 +39,6 @@ ...@@ -39,9 +39,6 @@
#define HPAGE_MASK (~(HPAGE_SIZE - 1)) #define HPAGE_MASK (~(HPAGE_SIZE - 1))
#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
#else /* !CONFIG_HUGETLB_PAGE */ #else /* !CONFIG_HUGETLB_PAGE */
# ifndef BUILD_BUG
# define BUILD_BUG() do { extern void __build_bug(void); __build_bug(); } while (0)
# endif
#define HPAGE_SHIFT ({BUILD_BUG(); 0; }) #define HPAGE_SHIFT ({BUILD_BUG(); 0; })
#define HPAGE_SIZE ({BUILD_BUG(); 0; }) #define HPAGE_SIZE ({BUILD_BUG(); 0; })
#define HPAGE_MASK ({BUILD_BUG(); 0; }) #define HPAGE_MASK ({BUILD_BUG(); 0; })
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
* SMP support for BMIPS * SMP support for BMIPS
*/ */
#include <linux/version.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mm.h> #include <linux/mm.h>
......
...@@ -1135,7 +1135,7 @@ asmlinkage void do_mt(struct pt_regs *regs) ...@@ -1135,7 +1135,7 @@ asmlinkage void do_mt(struct pt_regs *regs)
printk(KERN_DEBUG "YIELD Scheduler Exception\n"); printk(KERN_DEBUG "YIELD Scheduler Exception\n");
break; break;
case 5: case 5:
printk(KERN_DEBUG "Gating Storage Schedulier Exception\n"); printk(KERN_DEBUG "Gating Storage Scheduler Exception\n");
break; break;
default: default:
printk(KERN_DEBUG "*** UNKNOWN THREAD EXCEPTION %d ***\n", printk(KERN_DEBUG "*** UNKNOWN THREAD EXCEPTION %d ***\n",
......
...@@ -69,7 +69,6 @@ SECTIONS ...@@ -69,7 +69,6 @@ SECTIONS
RODATA RODATA
/* writeable */ /* writeable */
_sdata = .; /* Start of data section */
.data : { /* Data */ .data : { /* Data */
. = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */ . = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */
......
...@@ -42,6 +42,8 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ ...@@ -42,6 +42,8 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ
const int field = sizeof(unsigned long) * 2; const int field = sizeof(unsigned long) * 2;
siginfo_t info; siginfo_t info;
int fault; int fault;
unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE |
(write ? FAULT_FLAG_WRITE : 0);
#if 0 #if 0
printk("Cpu%d[%s:%d:%0*lx:%ld:%0*lx]\n", raw_smp_processor_id(), printk("Cpu%d[%s:%d:%0*lx:%ld:%0*lx]\n", raw_smp_processor_id(),
...@@ -91,6 +93,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ ...@@ -91,6 +93,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ
if (in_atomic() || !mm) if (in_atomic() || !mm)
goto bad_area_nosemaphore; goto bad_area_nosemaphore;
retry:
down_read(&mm->mmap_sem); down_read(&mm->mmap_sem);
vma = find_vma(mm, address); vma = find_vma(mm, address);
if (!vma) if (!vma)
...@@ -144,7 +147,11 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ ...@@ -144,7 +147,11 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ
* make sure we exit gracefully rather than endlessly redo * make sure we exit gracefully rather than endlessly redo
* the fault. * the fault.
*/ */
fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0); fault = handle_mm_fault(mm, vma, address, flags);
if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
return;
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
if (unlikely(fault & VM_FAULT_ERROR)) { if (unlikely(fault & VM_FAULT_ERROR)) {
if (fault & VM_FAULT_OOM) if (fault & VM_FAULT_OOM)
...@@ -153,12 +160,27 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ ...@@ -153,12 +160,27 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ
goto do_sigbus; goto do_sigbus;
BUG(); BUG();
} }
if (fault & VM_FAULT_MAJOR) { if (flags & FAULT_FLAG_ALLOW_RETRY) {
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, regs, address); if (fault & VM_FAULT_MAJOR) {
tsk->maj_flt++; perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1,
} else { regs, address);
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, regs, address); tsk->maj_flt++;
tsk->min_flt++; } else {
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1,
regs, address);
tsk->min_flt++;
}
if (fault & VM_FAULT_RETRY) {
flags &= ~FAULT_FLAG_ALLOW_RETRY;
/*
* No need to up_read(&mm->mmap_sem) as we would
* have already released it in __lock_page_or_retry
* in mm/filemap.c.
*/
goto retry;
}
} }
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
......
...@@ -279,7 +279,6 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus) ...@@ -279,7 +279,6 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus)
{ {
/* Propagate hose info into the subordinate devices. */ /* Propagate hose info into the subordinate devices. */
struct list_head *ln;
struct pci_dev *dev = bus->self; struct pci_dev *dev = bus->self;
if (pci_probe_only && dev && if (pci_probe_only && dev &&
...@@ -288,9 +287,7 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus) ...@@ -288,9 +287,7 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus)
pcibios_fixup_device_resources(dev, bus); pcibios_fixup_device_resources(dev, bus);
} }
for (ln = bus->devices.next; ln != &bus->devices; ln = ln->next) { list_for_each_entry(dev, &bus->devices, bus_list) {
dev = pci_dev_b(ln);
if ((dev->class >> 8) != PCI_CLASS_BRIDGE_PCI) if ((dev->class >> 8) != PCI_CLASS_BRIDGE_PCI)
pcibios_fixup_device_resources(dev, bus); pcibios_fixup_device_resources(dev, bus);
} }
......
...@@ -35,16 +35,6 @@ ...@@ -35,16 +35,6 @@
*/ */
void __init titan_ht_pcibios_fixup_bus(struct pci_bus *bus) void __init titan_ht_pcibios_fixup_bus(struct pci_bus *bus)
{ {
struct pci_bus *current_bus = bus;
struct pci_dev *devices;
struct list_head *devices_link;
list_for_each(devices_link, &(current_bus->devices)) {
devices = pci_dev_b(devices_link);
if (devices == NULL)
continue;
}
/* /*
* PLX and SPKT related changes go here * PLX and SPKT related changes go here
*/ */
......
...@@ -102,7 +102,7 @@ static int __init tx_7segled_init_sysfs(void) ...@@ -102,7 +102,7 @@ static int __init tx_7segled_init_sysfs(void)
break; break;
} }
dev->id = i; dev->id = i;
dev->dev = &tx_7segled_subsys; dev->bus = &tx_7segled_subsys;
error = device_register(dev); error = device_register(dev);
if (!error) { if (!error) {
device_create_file(dev, &dev_attr_ascii); device_create_file(dev, &dev_attr_ascii);
......
...@@ -77,7 +77,6 @@ struct pt_regs { ...@@ -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 { ...@@ -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 @@ ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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 ...@@ -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 ...@@ -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
......
...@@ -11,7 +11,6 @@ ...@@ -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>
......
...@@ -223,16 +223,38 @@ void free_initrd_mem(unsigned long start, unsigned long end) ...@@ -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;
......
...@@ -315,6 +315,13 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs) ...@@ -315,6 +315,13 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs)
current->mm->free_area_cache = TASK_UNMAPPED_BASE; current->mm->free_area_cache = TASK_UNMAPPED_BASE;
current->mm->cached_hole_size = 0; current->mm->cached_hole_size = 0;
retval = setup_arg_pages(bprm, IA32_STACK_TOP, EXSTACK_DEFAULT);
if (retval < 0) {
/* Someone check-me: is this error path enough? */
send_sig(SIGKILL, current, 0);
return retval;
}
install_exec_creds(bprm); install_exec_creds(bprm);
current->flags &= ~PF_FORKNOEXEC; current->flags &= ~PF_FORKNOEXEC;
...@@ -410,13 +417,6 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs) ...@@ -410,13 +417,6 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs)
set_brk(current->mm->start_brk, current->mm->brk); set_brk(current->mm->start_brk, current->mm->brk);
retval = setup_arg_pages(bprm, IA32_STACK_TOP, EXSTACK_DEFAULT);
if (retval < 0) {
/* Someone check-me: is this error path enough? */
send_sig(SIGKILL, current, 0);
return retval;
}
current->mm->start_stack = current->mm->start_stack =
(unsigned long)create_aout_tables((char __user *)bprm->p, bprm); (unsigned long)create_aout_tables((char __user *)bprm->p, bprm);
/* start thread */ /* start thread */
......
...@@ -385,14 +385,15 @@ static __initconst const u64 westmere_hw_cache_event_ids ...@@ -385,14 +385,15 @@ static __initconst const u64 westmere_hw_cache_event_ids
#define NHM_LOCAL_DRAM (1 << 14) #define NHM_LOCAL_DRAM (1 << 14)
#define NHM_NON_DRAM (1 << 15) #define NHM_NON_DRAM (1 << 15)
#define NHM_ALL_DRAM (NHM_REMOTE_DRAM|NHM_LOCAL_DRAM) #define NHM_LOCAL (NHM_LOCAL_DRAM|NHM_REMOTE_CACHE_FWD)
#define NHM_REMOTE (NHM_REMOTE_DRAM)
#define NHM_DMND_READ (NHM_DMND_DATA_RD) #define NHM_DMND_READ (NHM_DMND_DATA_RD)
#define NHM_DMND_WRITE (NHM_DMND_RFO|NHM_DMND_WB) #define NHM_DMND_WRITE (NHM_DMND_RFO|NHM_DMND_WB)
#define NHM_DMND_PREFETCH (NHM_PF_DATA_RD|NHM_PF_DATA_RFO) #define NHM_DMND_PREFETCH (NHM_PF_DATA_RD|NHM_PF_DATA_RFO)
#define NHM_L3_HIT (NHM_UNCORE_HIT|NHM_OTHER_CORE_HIT_SNP|NHM_OTHER_CORE_HITM) #define NHM_L3_HIT (NHM_UNCORE_HIT|NHM_OTHER_CORE_HIT_SNP|NHM_OTHER_CORE_HITM)
#define NHM_L3_MISS (NHM_NON_DRAM|NHM_ALL_DRAM|NHM_REMOTE_CACHE_FWD) #define NHM_L3_MISS (NHM_NON_DRAM|NHM_LOCAL_DRAM|NHM_REMOTE_DRAM|NHM_REMOTE_CACHE_FWD)
#define NHM_L3_ACCESS (NHM_L3_HIT|NHM_L3_MISS) #define NHM_L3_ACCESS (NHM_L3_HIT|NHM_L3_MISS)
static __initconst const u64 nehalem_hw_cache_extra_regs static __initconst const u64 nehalem_hw_cache_extra_regs
...@@ -416,16 +417,16 @@ static __initconst const u64 nehalem_hw_cache_extra_regs ...@@ -416,16 +417,16 @@ static __initconst const u64 nehalem_hw_cache_extra_regs
}, },
[ C(NODE) ] = { [ C(NODE) ] = {
[ C(OP_READ) ] = { [ C(OP_READ) ] = {
[ C(RESULT_ACCESS) ] = NHM_DMND_READ|NHM_ALL_DRAM, [ C(RESULT_ACCESS) ] = NHM_DMND_READ|NHM_LOCAL|NHM_REMOTE,
[ C(RESULT_MISS) ] = NHM_DMND_READ|NHM_REMOTE_DRAM, [ C(RESULT_MISS) ] = NHM_DMND_READ|NHM_REMOTE,
}, },
[ C(OP_WRITE) ] = { [ C(OP_WRITE) ] = {
[ C(RESULT_ACCESS) ] = NHM_DMND_WRITE|NHM_ALL_DRAM, [ C(RESULT_ACCESS) ] = NHM_DMND_WRITE|NHM_LOCAL|NHM_REMOTE,
[ C(RESULT_MISS) ] = NHM_DMND_WRITE|NHM_REMOTE_DRAM, [ C(RESULT_MISS) ] = NHM_DMND_WRITE|NHM_REMOTE,
}, },
[ C(OP_PREFETCH) ] = { [ C(OP_PREFETCH) ] = {
[ C(RESULT_ACCESS) ] = NHM_DMND_PREFETCH|NHM_ALL_DRAM, [ C(RESULT_ACCESS) ] = NHM_DMND_PREFETCH|NHM_LOCAL|NHM_REMOTE,
[ C(RESULT_MISS) ] = NHM_DMND_PREFETCH|NHM_REMOTE_DRAM, [ C(RESULT_MISS) ] = NHM_DMND_PREFETCH|NHM_REMOTE,
}, },
}, },
}; };
......
...@@ -48,9 +48,9 @@ static void delay_loop(unsigned long loops) ...@@ -48,9 +48,9 @@ static void delay_loop(unsigned long loops)
} }
/* TSC based delay: */ /* TSC based delay: */
static void delay_tsc(unsigned long loops) static void delay_tsc(unsigned long __loops)
{ {
unsigned long bclock, now; u32 bclock, now, loops = __loops;
int cpu; int cpu;
preempt_disable(); preempt_disable();
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册