mirror of
https://github.com/armbian/linux.git
synced 2026-01-06 10:13:00 -08:00
Merge remote branch 'origin/master' of ../linux-2.6 into drm-next
This was a non-trivial merge with some patches sent to Linus in drm-fixes. Conflicts: drivers/gpu/drm/radeon/r300.c drivers/gpu/drm/radeon/radeon_asic.h drivers/gpu/drm/radeon/rs600.c drivers/gpu/drm/radeon/rs690.c drivers/gpu/drm/radeon/rv515.c
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 31
|
||||
EXTRAVERSION = -rc8
|
||||
EXTRAVERSION = -rc9
|
||||
NAME = Man-Eating Seals of Antiquity
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
||||
@@ -10,7 +10,9 @@ EXPORT_SYMBOL(dma_ops);
|
||||
|
||||
static int __init dma_init(void)
|
||||
{
|
||||
dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
|
||||
dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
|
||||
|
||||
return 0;
|
||||
}
|
||||
fs_initcall(dma_init);
|
||||
|
||||
|
||||
@@ -96,20 +96,22 @@ END(ip_fast_csum)
|
||||
GLOBAL_ENTRY(csum_ipv6_magic)
|
||||
ld4 r20=[in0],4
|
||||
ld4 r21=[in1],4
|
||||
dep r15=in3,in2,32,16
|
||||
zxt4 in2=in2
|
||||
;;
|
||||
ld4 r22=[in0],4
|
||||
ld4 r23=[in1],4
|
||||
mux1 r15=r15,@rev
|
||||
dep r15=in3,in2,32,16
|
||||
;;
|
||||
ld4 r24=[in0],4
|
||||
ld4 r25=[in1],4
|
||||
shr.u r15=r15,16
|
||||
mux1 r15=r15,@rev
|
||||
add r16=r20,r21
|
||||
add r17=r22,r23
|
||||
zxt4 in4=in4
|
||||
;;
|
||||
ld4 r26=[in0],4
|
||||
ld4 r27=[in1],4
|
||||
shr.u r15=r15,16
|
||||
add r18=r24,r25
|
||||
add r8=r16,r17
|
||||
;;
|
||||
|
||||
@@ -317,7 +317,7 @@ static int power7_generic_events[] = {
|
||||
*/
|
||||
static int power7_cache_events[C(MAX)][C(OP_MAX)][C(RESULT_MAX)] = {
|
||||
[C(L1D)] = { /* RESULT_ACCESS RESULT_MISS */
|
||||
[C(OP_READ)] = { 0x400f0, 0xc880 },
|
||||
[C(OP_READ)] = { 0xc880, 0x400f0 },
|
||||
[C(OP_WRITE)] = { 0, 0x300f0 },
|
||||
[C(OP_PREFETCH)] = { 0xd8b8, 0 },
|
||||
},
|
||||
@@ -327,8 +327,8 @@ static int power7_cache_events[C(MAX)][C(OP_MAX)][C(RESULT_MAX)] = {
|
||||
[C(OP_PREFETCH)] = { 0x408a, 0 },
|
||||
},
|
||||
[C(LL)] = { /* RESULT_ACCESS RESULT_MISS */
|
||||
[C(OP_READ)] = { 0x6080, 0x6084 },
|
||||
[C(OP_WRITE)] = { 0x6082, 0x6086 },
|
||||
[C(OP_READ)] = { 0x16080, 0x26080 },
|
||||
[C(OP_WRITE)] = { 0x16082, 0x26082 },
|
||||
[C(OP_PREFETCH)] = { 0, 0 },
|
||||
},
|
||||
[C(DTLB)] = { /* RESULT_ACCESS RESULT_MISS */
|
||||
|
||||
@@ -234,7 +234,6 @@ static void xilinx_i8259_cascade(unsigned int irq, struct irq_desc *desc)
|
||||
generic_handle_irq(cascade_irq);
|
||||
|
||||
/* Let xilinx_intc end the interrupt */
|
||||
desc->chip->ack(irq);
|
||||
desc->chip->unmask(irq);
|
||||
}
|
||||
|
||||
|
||||
@@ -886,7 +886,7 @@ void notrace init_irqwork_curcpu(void)
|
||||
* Therefore you cannot make any OBP calls, not even prom_printf,
|
||||
* from these two routines.
|
||||
*/
|
||||
static void __cpuinit register_one_mondo(unsigned long paddr, unsigned long type, unsigned long qmask)
|
||||
static void __cpuinit notrace register_one_mondo(unsigned long paddr, unsigned long type, unsigned long qmask)
|
||||
{
|
||||
unsigned long num_entries = (qmask + 1) / 64;
|
||||
unsigned long status;
|
||||
|
||||
@@ -103,7 +103,7 @@ notrace __kprobes void perfctr_irq(int irq, struct pt_regs *regs)
|
||||
}
|
||||
if (!touched && __get_cpu_var(last_irq_sum) == sum) {
|
||||
local_inc(&__get_cpu_var(alert_counter));
|
||||
if (local_read(&__get_cpu_var(alert_counter)) == 5 * nmi_hz)
|
||||
if (local_read(&__get_cpu_var(alert_counter)) == 30 * nmi_hz)
|
||||
die_nmi("BUG: NMI Watchdog detected LOCKUP",
|
||||
regs, panic_on_timeout);
|
||||
} else {
|
||||
|
||||
@@ -88,7 +88,7 @@ void prom_cmdline(void)
|
||||
/* Drop into the prom, but completely terminate the program.
|
||||
* No chance of continuing.
|
||||
*/
|
||||
void prom_halt(void)
|
||||
void notrace prom_halt(void)
|
||||
{
|
||||
#ifdef CONFIG_SUN_LDOMS
|
||||
if (ldom_domaining_enabled)
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
#include <asm/openprom.h>
|
||||
#include <asm/oplib.h>
|
||||
|
||||
static char ppbuf[1024];
|
||||
|
||||
void
|
||||
prom_write(const char *buf, unsigned int n)
|
||||
void notrace prom_write(const char *buf, unsigned int n)
|
||||
{
|
||||
char ch;
|
||||
|
||||
@@ -33,8 +33,7 @@ prom_write(const char *buf, unsigned int n)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
prom_printf(const char *fmt, ...)
|
||||
void notrace prom_printf(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
int i;
|
||||
|
||||
@@ -133,7 +133,7 @@ queue_max_sectors_store(struct request_queue *q, const char *page, size_t count)
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_irq(q->queue_lock);
|
||||
blk_queue_max_sectors(q, max_sectors_kb << 1);
|
||||
q->limits.max_sectors = max_sectors_kb << 1;
|
||||
spin_unlock_irq(q->queue_lock);
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -692,7 +692,7 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(crypto_enqueue_request);
|
||||
|
||||
struct crypto_async_request *crypto_dequeue_request(struct crypto_queue *queue)
|
||||
void *__crypto_dequeue_request(struct crypto_queue *queue, unsigned int offset)
|
||||
{
|
||||
struct list_head *request;
|
||||
|
||||
@@ -707,7 +707,14 @@ struct crypto_async_request *crypto_dequeue_request(struct crypto_queue *queue)
|
||||
request = queue->list.next;
|
||||
list_del(request);
|
||||
|
||||
return list_entry(request, struct crypto_async_request, list);
|
||||
return (char *)list_entry(request, struct crypto_async_request, list) -
|
||||
offset;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__crypto_dequeue_request);
|
||||
|
||||
struct crypto_async_request *crypto_dequeue_request(struct crypto_queue *queue)
|
||||
{
|
||||
return __crypto_dequeue_request(queue, 0);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(crypto_dequeue_request);
|
||||
|
||||
|
||||
@@ -300,8 +300,7 @@ static int do_output_char(unsigned char c, struct tty_struct *tty, int space)
|
||||
if (space < 2)
|
||||
return -1;
|
||||
tty->canon_column = tty->column = 0;
|
||||
tty_put_char(tty, '\r');
|
||||
tty_put_char(tty, c);
|
||||
tty->ops->write(tty, "\r\n", 2);
|
||||
return 2;
|
||||
}
|
||||
tty->canon_column = tty->column;
|
||||
|
||||
@@ -109,21 +109,13 @@ static int pty_space(struct tty_struct *to)
|
||||
* the other side of the pty/tty pair.
|
||||
*/
|
||||
|
||||
static int pty_write(struct tty_struct *tty, const unsigned char *buf,
|
||||
int count)
|
||||
static int pty_write(struct tty_struct *tty, const unsigned char *buf, int c)
|
||||
{
|
||||
struct tty_struct *to = tty->link;
|
||||
int c;
|
||||
|
||||
if (tty->stopped)
|
||||
return 0;
|
||||
|
||||
/* This isn't locked but our 8K is quite sloppy so no
|
||||
big deal */
|
||||
|
||||
c = pty_space(to);
|
||||
if (c > count)
|
||||
c = count;
|
||||
if (c > 0) {
|
||||
/* Stuff the data into the input queue of the other end */
|
||||
c = tty_insert_flip_string(to, buf, c);
|
||||
|
||||
@@ -1250,20 +1250,11 @@ static int cpufreq_suspend(struct sys_device *sysdev, pm_message_t pmsg)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
#ifdef __powerpc__
|
||||
int cpu = sysdev->id;
|
||||
unsigned int cur_freq = 0;
|
||||
struct cpufreq_policy *cpu_policy;
|
||||
|
||||
dprintk("suspending cpu %u\n", cpu);
|
||||
|
||||
/*
|
||||
* This whole bogosity is here because Powerbooks are made of fail.
|
||||
* No sane platform should need any of the code below to be run.
|
||||
* (it's entirely the wrong thing to do, as driver->get may
|
||||
* reenable interrupts on some architectures).
|
||||
*/
|
||||
|
||||
if (!cpu_online(cpu))
|
||||
return 0;
|
||||
|
||||
@@ -1282,47 +1273,13 @@ static int cpufreq_suspend(struct sys_device *sysdev, pm_message_t pmsg)
|
||||
|
||||
if (cpufreq_driver->suspend) {
|
||||
ret = cpufreq_driver->suspend(cpu_policy, pmsg);
|
||||
if (ret) {
|
||||
if (ret)
|
||||
printk(KERN_ERR "cpufreq: suspend failed in ->suspend "
|
||||
"step on CPU %u\n", cpu_policy->cpu);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)
|
||||
goto out;
|
||||
|
||||
if (cpufreq_driver->get)
|
||||
cur_freq = cpufreq_driver->get(cpu_policy->cpu);
|
||||
|
||||
if (!cur_freq || !cpu_policy->cur) {
|
||||
printk(KERN_ERR "cpufreq: suspend failed to assert current "
|
||||
"frequency is what timing core thinks it is.\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (unlikely(cur_freq != cpu_policy->cur)) {
|
||||
struct cpufreq_freqs freqs;
|
||||
|
||||
if (!(cpufreq_driver->flags & CPUFREQ_PM_NO_WARN))
|
||||
dprintk("Warning: CPU frequency is %u, "
|
||||
"cpufreq assumed %u kHz.\n",
|
||||
cur_freq, cpu_policy->cur);
|
||||
|
||||
freqs.cpu = cpu;
|
||||
freqs.old = cpu_policy->cur;
|
||||
freqs.new = cur_freq;
|
||||
|
||||
srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
|
||||
CPUFREQ_SUSPENDCHANGE, &freqs);
|
||||
adjust_jiffies(CPUFREQ_SUSPENDCHANGE, &freqs);
|
||||
|
||||
cpu_policy->cur = cur_freq;
|
||||
}
|
||||
|
||||
out:
|
||||
cpufreq_cpu_put(cpu_policy);
|
||||
#endif /* __powerpc__ */
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1330,24 +1287,21 @@ out:
|
||||
* cpufreq_resume - restore proper CPU frequency handling after resume
|
||||
*
|
||||
* 1.) resume CPUfreq hardware support (cpufreq_driver->resume())
|
||||
* 2.) if ->target and !CPUFREQ_CONST_LOOPS: verify we're in sync
|
||||
* 3.) schedule call cpufreq_update_policy() ASAP as interrupts are
|
||||
* restored.
|
||||
* 2.) schedule call cpufreq_update_policy() ASAP as interrupts are
|
||||
* restored. It will verify that the current freq is in sync with
|
||||
* what we believe it to be. This is a bit later than when it
|
||||
* should be, but nonethteless it's better than calling
|
||||
* cpufreq_driver->get() here which might re-enable interrupts...
|
||||
*/
|
||||
static int cpufreq_resume(struct sys_device *sysdev)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
#ifdef __powerpc__
|
||||
int cpu = sysdev->id;
|
||||
struct cpufreq_policy *cpu_policy;
|
||||
|
||||
dprintk("resuming cpu %u\n", cpu);
|
||||
|
||||
/* As with the ->suspend method, all the code below is
|
||||
* only necessary because Powerbooks suck.
|
||||
* See commit 42d4dc3f4e1e for jokes. */
|
||||
|
||||
if (!cpu_online(cpu))
|
||||
return 0;
|
||||
|
||||
@@ -1373,45 +1327,10 @@ static int cpufreq_resume(struct sys_device *sysdev)
|
||||
}
|
||||
}
|
||||
|
||||
if (!(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) {
|
||||
unsigned int cur_freq = 0;
|
||||
|
||||
if (cpufreq_driver->get)
|
||||
cur_freq = cpufreq_driver->get(cpu_policy->cpu);
|
||||
|
||||
if (!cur_freq || !cpu_policy->cur) {
|
||||
printk(KERN_ERR "cpufreq: resume failed to assert "
|
||||
"current frequency is what timing core "
|
||||
"thinks it is.\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (unlikely(cur_freq != cpu_policy->cur)) {
|
||||
struct cpufreq_freqs freqs;
|
||||
|
||||
if (!(cpufreq_driver->flags & CPUFREQ_PM_NO_WARN))
|
||||
dprintk("Warning: CPU frequency "
|
||||
"is %u, cpufreq assumed %u kHz.\n",
|
||||
cur_freq, cpu_policy->cur);
|
||||
|
||||
freqs.cpu = cpu;
|
||||
freqs.old = cpu_policy->cur;
|
||||
freqs.new = cur_freq;
|
||||
|
||||
srcu_notifier_call_chain(
|
||||
&cpufreq_transition_notifier_list,
|
||||
CPUFREQ_RESUMECHANGE, &freqs);
|
||||
adjust_jiffies(CPUFREQ_RESUMECHANGE, &freqs);
|
||||
|
||||
cpu_policy->cur = cur_freq;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
schedule_work(&cpu_policy->update);
|
||||
|
||||
fail:
|
||||
cpufreq_cpu_put(cpu_policy);
|
||||
#endif /* __powerpc__ */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -196,7 +196,7 @@ static int manage_bandwidth(struct fw_card *card, int irm_id, int generation,
|
||||
switch (fw_run_transaction(card, TCODE_LOCK_COMPARE_SWAP,
|
||||
irm_id, generation, SCODE_100,
|
||||
CSR_REGISTER_BASE + CSR_BANDWIDTH_AVAILABLE,
|
||||
data, sizeof(data))) {
|
||||
data, 8)) {
|
||||
case RCODE_GENERATION:
|
||||
/* A generation change frees all bandwidth. */
|
||||
return allocate ? -EAGAIN : bandwidth;
|
||||
@@ -233,7 +233,7 @@ static int manage_channel(struct fw_card *card, int irm_id, int generation,
|
||||
data[1] = old ^ c;
|
||||
switch (fw_run_transaction(card, TCODE_LOCK_COMPARE_SWAP,
|
||||
irm_id, generation, SCODE_100,
|
||||
offset, data, sizeof(data))) {
|
||||
offset, data, 8)) {
|
||||
case RCODE_GENERATION:
|
||||
/* A generation change frees all channels. */
|
||||
return allocate ? -EAGAIN : i;
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/pci_ids.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
@@ -2372,6 +2373,9 @@ static void ohci_pmac_off(struct pci_dev *dev)
|
||||
#define ohci_pmac_off(dev)
|
||||
#endif /* CONFIG_PPC_PMAC */
|
||||
|
||||
#define PCI_VENDOR_ID_AGERE PCI_VENDOR_ID_ATT
|
||||
#define PCI_DEVICE_ID_AGERE_FW643 0x5901
|
||||
|
||||
static int __devinit pci_probe(struct pci_dev *dev,
|
||||
const struct pci_device_id *ent)
|
||||
{
|
||||
@@ -2422,6 +2426,16 @@ static int __devinit pci_probe(struct pci_dev *dev,
|
||||
version = reg_read(ohci, OHCI1394_Version) & 0x00ff00ff;
|
||||
ohci->use_dualbuffer = version >= OHCI_VERSION_1_1;
|
||||
|
||||
/* dual-buffer mode is broken if more than one IR context is active */
|
||||
if (dev->vendor == PCI_VENDOR_ID_AGERE &&
|
||||
dev->device == PCI_DEVICE_ID_AGERE_FW643)
|
||||
ohci->use_dualbuffer = false;
|
||||
|
||||
/* dual-buffer mode is broken */
|
||||
if (dev->vendor == PCI_VENDOR_ID_RICOH &&
|
||||
dev->device == PCI_DEVICE_ID_RICOH_R5C832)
|
||||
ohci->use_dualbuffer = false;
|
||||
|
||||
/* x86-32 currently doesn't use highmem for dma_alloc_coherent */
|
||||
#if !defined(CONFIG_X86_32)
|
||||
/* dual-buffer mode is broken with descriptor addresses above 2G */
|
||||
|
||||
@@ -456,12 +456,12 @@ static void sbp2_status_write(struct fw_card *card, struct fw_request *request,
|
||||
}
|
||||
spin_unlock_irqrestore(&card->lock, flags);
|
||||
|
||||
if (&orb->link != &lu->orb_list)
|
||||
if (&orb->link != &lu->orb_list) {
|
||||
orb->callback(orb, &status);
|
||||
else
|
||||
kref_put(&orb->kref, free_orb);
|
||||
} else {
|
||||
fw_error("status write for unknown orb\n");
|
||||
|
||||
kref_put(&orb->kref, free_orb);
|
||||
}
|
||||
|
||||
fw_send_response(card, request, RCODE_COMPLETE);
|
||||
}
|
||||
|
||||
@@ -408,6 +408,7 @@ static struct pcmcia_device_id ide_ids[] = {
|
||||
PCMCIA_DEVICE_PROD_ID123("PCMCIA", "IDE CARD", "F1", 0x281f1c5d, 0x1907960c, 0xf7fde8b9),
|
||||
PCMCIA_DEVICE_PROD_ID12("ARGOSY", "CD-ROM", 0x78f308dc, 0x66536591),
|
||||
PCMCIA_DEVICE_PROD_ID12("ARGOSY", "PnPIDE", 0x78f308dc, 0x0c694728),
|
||||
PCMCIA_DEVICE_PROD_ID12("CNF ", "CD-ROM", 0x46d7db81, 0x66536591),
|
||||
PCMCIA_DEVICE_PROD_ID12("CNF CD-M", "CD-ROM", 0x7d93b852, 0x66536591),
|
||||
PCMCIA_DEVICE_PROD_ID12("Creative Technology Ltd.", "PCMCIA CD-ROM Interface Card", 0xff8c8a45, 0xfe8020c4),
|
||||
PCMCIA_DEVICE_PROD_ID12("Digital Equipment Corporation.", "Digital Mobile Media CD-ROM", 0x17692a66, 0xef1dcbde),
|
||||
|
||||
@@ -879,6 +879,14 @@ static unsigned int atkbd_hp_zv6100_forced_release_keys[] = {
|
||||
0xae, 0xb0, -1U
|
||||
};
|
||||
|
||||
/*
|
||||
* Perform fixup for HP (Compaq) Presario R4000 R4100 R4200 that don't generate
|
||||
* release for their volume buttons
|
||||
*/
|
||||
static unsigned int atkbd_hp_r4000_forced_release_keys[] = {
|
||||
0xae, 0xb0, -1U
|
||||
};
|
||||
|
||||
/*
|
||||
* Samsung NC10,NC20 with Fn+F? key release not working
|
||||
*/
|
||||
@@ -1536,6 +1544,33 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = {
|
||||
.callback = atkbd_setup_forced_release,
|
||||
.driver_data = atkbd_hp_zv6100_forced_release_keys,
|
||||
},
|
||||
{
|
||||
.ident = "HP Presario R4000",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4000"),
|
||||
},
|
||||
.callback = atkbd_setup_forced_release,
|
||||
.driver_data = atkbd_hp_r4000_forced_release_keys,
|
||||
},
|
||||
{
|
||||
.ident = "HP Presario R4100",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4100"),
|
||||
},
|
||||
.callback = atkbd_setup_forced_release,
|
||||
.driver_data = atkbd_hp_r4000_forced_release_keys,
|
||||
},
|
||||
{
|
||||
.ident = "HP Presario R4200",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4200"),
|
||||
},
|
||||
.callback = atkbd_setup_forced_release,
|
||||
.driver_data = atkbd_hp_r4000_forced_release_keys,
|
||||
},
|
||||
{
|
||||
.ident = "Inventec Symphony",
|
||||
.matches = {
|
||||
|
||||
@@ -382,6 +382,14 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Acer Aspire 5536",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "0100"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user