Commit 1b050180 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus

Pull MIPS fixes from Ralf Baechle:
 "MIPS fixes for 3.11.  Half of then is for Netlogic the remainder
  touches things across arch/mips.

  Nothing really dramatic and by rc1 standards MIPS will be in fairly
  good shape with this applied.  Tested by building all MIPS defconfigs
  of which with this pull request four platforms won't build.  And yes,
  it boots also on my favorite test systems"

* 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus:
  MIPS: kvm: Kconfig: Drop HAVE_KVM dependency from VIRTUALIZATION
  MIPS: Octeon: Fix DT pruning bug with pip ports
  MIPS: KVM: Mark KVM_GUEST (T&E KVM) as BROKEN_ON_SMP
  MIPS: tlbex: fix broken build in v3.11-rc1
  MIPS: Netlogic: Add XLP PIC irqdomain
  MIPS: Netlogic: Fix USB block's coherent DMA mask
  MIPS: tlbex: Fix typo in r3000 tlb store handler
  MIPS: BMIPS: Fix thinko to release slave TP from reset
  MIPS: Delete dead invocation of exception_exit().
parents 89d0abe3 f1b70019
...@@ -1702,6 +1702,7 @@ endchoice ...@@ -1702,6 +1702,7 @@ endchoice
config KVM_GUEST config KVM_GUEST
bool "KVM Guest Kernel" bool "KVM Guest Kernel"
depends on BROKEN_ON_SMP
help help
Select this option if building a guest kernel for KVM (Trap & Emulate) mode Select this option if building a guest kernel for KVM (Trap & Emulate) mode
......
...@@ -334,9 +334,10 @@ static void __init octeon_fdt_pip_iface(int pip, int idx, u64 *pmac) ...@@ -334,9 +334,10 @@ static void __init octeon_fdt_pip_iface(int pip, int idx, u64 *pmac)
char name_buffer[20]; char name_buffer[20];
int iface; int iface;
int p; int p;
int count; int count = 0;
count = cvmx_helper_interface_enumerate(idx); if (cvmx_helper_interface_enumerate(idx) == 0)
count = cvmx_helper_ports_on_interface(idx);
snprintf(name_buffer, sizeof(name_buffer), "interface@%d", idx); snprintf(name_buffer, sizeof(name_buffer), "interface@%d", idx);
iface = fdt_subnode_offset(initial_boot_params, pip, name_buffer); iface = fdt_subnode_offset(initial_boot_params, pip, name_buffer);
......
...@@ -173,7 +173,7 @@ static void bmips_boot_secondary(int cpu, struct task_struct *idle) ...@@ -173,7 +173,7 @@ static void bmips_boot_secondary(int cpu, struct task_struct *idle)
else { else {
#if defined(CONFIG_CPU_BMIPS4350) || defined(CONFIG_CPU_BMIPS4380) #if defined(CONFIG_CPU_BMIPS4350) || defined(CONFIG_CPU_BMIPS4380)
/* Reset slave TP1 if booting from TP0 */ /* Reset slave TP1 if booting from TP0 */
if (cpu_logical_map(cpu) == 0) if (cpu_logical_map(cpu) == 1)
set_c0_brcm_cmt_ctrl(0x01); set_c0_brcm_cmt_ctrl(0x01);
#elif defined(CONFIG_CPU_BMIPS5000) #elif defined(CONFIG_CPU_BMIPS5000)
if (cpu & 0x01) if (cpu & 0x01)
......
...@@ -1242,7 +1242,6 @@ asmlinkage void do_mcheck(struct pt_regs *regs) ...@@ -1242,7 +1242,6 @@ asmlinkage void do_mcheck(struct pt_regs *regs)
panic("Caught Machine Check exception - %scaused by multiple " panic("Caught Machine Check exception - %scaused by multiple "
"matching entries in the TLB.", "matching entries in the TLB.",
(multi_match) ? "" : "not "); (multi_match) ? "" : "not ");
exception_exit(prev_state);
} }
asmlinkage void do_mt(struct pt_regs *regs) asmlinkage void do_mt(struct pt_regs *regs)
......
...@@ -5,7 +5,6 @@ source "virt/kvm/Kconfig" ...@@ -5,7 +5,6 @@ source "virt/kvm/Kconfig"
menuconfig VIRTUALIZATION menuconfig VIRTUALIZATION
bool "Virtualization" bool "Virtualization"
depends on HAVE_KVM
---help--- ---help---
Say Y here to get to see options for using your Linux host to run Say Y here to get to see options for using your Linux host to run
other operating systems inside virtual machines (guests). other operating systems inside virtual machines (guests).
......
...@@ -1456,7 +1456,7 @@ static void build_r4000_setup_pgd(void) ...@@ -1456,7 +1456,7 @@ static void build_r4000_setup_pgd(void)
{ {
const int a0 = 4; const int a0 = 4;
const int a1 = 5; const int a1 = 5;
u32 *p = tlbmiss_handler_setup_pgd_array; u32 *p = tlbmiss_handler_setup_pgd;
const int tlbmiss_handler_setup_pgd_size = const int tlbmiss_handler_setup_pgd_size =
tlbmiss_handler_setup_pgd_end - tlbmiss_handler_setup_pgd; tlbmiss_handler_setup_pgd_end - tlbmiss_handler_setup_pgd;
struct uasm_label *l = labels; struct uasm_label *l = labels;
...@@ -1793,7 +1793,7 @@ static void build_r3000_tlb_store_handler(void) ...@@ -1793,7 +1793,7 @@ static void build_r3000_tlb_store_handler(void)
uasm_i_j(&p, (unsigned long)tlb_do_page_fault_1 & 0x0fffffff); uasm_i_j(&p, (unsigned long)tlb_do_page_fault_1 & 0x0fffffff);
uasm_i_nop(&p); uasm_i_nop(&p);
if (p >= handle_tlbs) if (p >= handle_tlbs_end)
panic("TLB store handler fastpath space exceeded"); panic("TLB store handler fastpath space exceeded");
uasm_resolve_relocs(relocs, labels); uasm_resolve_relocs(relocs, labels);
......
...@@ -40,6 +40,10 @@ ...@@ -40,6 +40,10 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/irqdomain.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <asm/errno.h> #include <asm/errno.h>
#include <asm/signal.h> #include <asm/signal.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
...@@ -223,17 +227,6 @@ static void nlm_init_node_irqs(int node) ...@@ -223,17 +227,6 @@ static void nlm_init_node_irqs(int node)
nodep->irqmask = irqmask; nodep->irqmask = irqmask;
} }
void __init arch_init_irq(void)
{
/* Initialize the irq descriptors */
nlm_init_percpu_irqs();
nlm_init_node_irqs(0);
write_c0_eimr(nlm_current_node()->irqmask);
#if defined(CONFIG_CPU_XLR)
nlm_setup_fmn_irq();
#endif
}
void nlm_smp_irq_init(int hwcpuid) void nlm_smp_irq_init(int hwcpuid)
{ {
int node, cpu; int node, cpu;
...@@ -266,3 +259,56 @@ asmlinkage void plat_irq_dispatch(void) ...@@ -266,3 +259,56 @@ asmlinkage void plat_irq_dispatch(void)
/* top level irq handling */ /* top level irq handling */
do_IRQ(nlm_irq_to_xirq(node, i)); do_IRQ(nlm_irq_to_xirq(node, i));
} }
#ifdef CONFIG_OF
static struct irq_domain *xlp_pic_domain;
static const struct irq_domain_ops xlp_pic_irq_domain_ops = {
.xlate = irq_domain_xlate_onetwocell,
};
static int __init xlp_of_pic_init(struct device_node *node,
struct device_node *parent)
{
const int n_picirqs = PIC_IRT_LAST_IRQ - PIC_IRQ_BASE + 1;
struct resource res;
int socid, ret;
/* we need a hack to get the PIC's SoC chip id */
ret = of_address_to_resource(node, 0, &res);
if (ret < 0) {
pr_err("PIC %s: reg property not found!\n", node->name);
return -EINVAL;
}
socid = (res.start >> 18) & 0x3;
xlp_pic_domain = irq_domain_add_legacy(node, n_picirqs,
nlm_irq_to_xirq(socid, PIC_IRQ_BASE), PIC_IRQ_BASE,
&xlp_pic_irq_domain_ops, NULL);
if (xlp_pic_domain == NULL) {
pr_err("PIC %s: Creating legacy domain failed!\n", node->name);
return -EINVAL;
}
pr_info("Node %d: IRQ domain created for PIC@%pa\n", socid,
&res.start);
return 0;
}
static struct of_device_id __initdata xlp_pic_irq_ids[] = {
{ .compatible = "netlogic,xlp-pic", .data = xlp_of_pic_init },
{},
};
#endif
void __init arch_init_irq(void)
{
/* Initialize the irq descriptors */
nlm_init_percpu_irqs();
nlm_init_node_irqs(0);
write_c0_eimr(nlm_current_node()->irqmask);
#if defined(CONFIG_CPU_XLR)
nlm_setup_fmn_irq();
#endif
#if defined(CONFIG_OF)
of_irq_init(xlp_pic_irq_ids);
#endif
}
...@@ -76,10 +76,11 @@ dtt@4c { ...@@ -76,10 +76,11 @@ dtt@4c {
}; };
}; };
pic: pic@4000 { pic: pic@4000 {
interrupt-controller; compatible = "netlogic,xlp-pic";
#address-cells = <0>; #address-cells = <0>;
#interrupt-cells = <1>; #interrupt-cells = <1>;
reg = <0 0x4000 0x200>; reg = <0 0x4000 0x200>;
interrupt-controller;
}; };
nor_flash@1,0 { nor_flash@1,0 {
......
...@@ -76,10 +76,11 @@ dtt@4c { ...@@ -76,10 +76,11 @@ dtt@4c {
}; };
}; };
pic: pic@4000 { pic: pic@4000 {
interrupt-controller; compatible = "netlogic,xlp-pic";
#address-cells = <0>; #address-cells = <0>;
#interrupt-cells = <1>; #interrupt-cells = <1>;
reg = <0 0x4000 0x200>; reg = <0 0x4000 0x200>;
interrupt-controller;
}; };
nor_flash@1,0 { nor_flash@1,0 {
......
...@@ -119,7 +119,7 @@ static u64 xlp_usb_dmamask = ~(u32)0; ...@@ -119,7 +119,7 @@ static u64 xlp_usb_dmamask = ~(u32)0;
static void nlm_usb_fixup_final(struct pci_dev *dev) static void nlm_usb_fixup_final(struct pci_dev *dev)
{ {
dev->dev.dma_mask = &xlp_usb_dmamask; dev->dev.dma_mask = &xlp_usb_dmamask;
dev->dev.coherent_dma_mask = DMA_BIT_MASK(64); dev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
switch (dev->devfn) { switch (dev->devfn) {
case 0x10: case 0x10:
dev->irq = PIC_EHCI_0_IRQ; dev->irq = PIC_EHCI_0_IRQ;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment