aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-10-11 20:36:34 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-10-11 20:36:34 -0400
commit052db7ec86dff26f734031c3ef5c2c03a94af0af (patch)
treede4ca607d1ede889a3a804e87f25bd38304f9016
parentfd9879b9bb3258ebc27a4cc6d2d29f528f71901f (diff)
parentbdcf81b658ebc4c2640c3c2c55c8b31c601b6996 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc
Pull sparc updates from David Miller: 1) Move to 4-level page tables on sparc64 and support up to 53-bits of physical addressing. Kernel static image BSS size reduced by several megabytes. 2) M6/M7 cpu support, from Allan Pais. 3) Move to sparse IRQs, handle hypervisor TLB call errors more gracefully, and add T5 perf_event support. From Bob Picco. 4) Recognize cdroms and compute geometry from capacity in virtual disk driver, also from Allan Pais. 5) Fix memset() return value on sparc32, from Andreas Larsson. 6) Respect gfp flags in dma_alloc_coherent on sparc32, from Daniel Hellstrom. 7) Fix handling of compound pages in virtual disk driver, from Dwight Engen. 8) Fix lockdep warnings in LDC layer by moving IRQ requesting to ldc_alloc() from ldc_bind(). 9) Increase boot string length to 1024 bytes, from Dave Kleikamp. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc: (31 commits) sparc64: Fix lockdep warnings on reboot on Ultra-5 sparc64: Increase size of boot string to 1024 bytes sparc64: Kill unnecessary tables and increase MAX_BANKS. sparc64: sparse irq sparc64: Adjust vmalloc region size based upon available virtual address bits. sparc64: Increase MAX_PHYS_ADDRESS_BITS to 53. sparc64: Use kernel page tables for vmemmap. sparc64: Fix physical memory management regressions with large max_phys_bits. sparc64: Adjust KTSB assembler to support larger physical addresses. sparc64: Define VA hole at run time, rather than at compile time. sparc64: Switch to 4-level page tables. sparc64: Fix reversed start/end in flush_tlb_kernel_range() sparc64: Add vio_set_intr() to enable/disable Rx interrupts vio: fix reuse of vio_dring slot sunvdc: limit each sg segment to a page sunvdc: compute vdisk geometry from capacity sunvdc: add cdrom and v1.1 protocol support sparc: VIO protocol version 1.6 sparc64: Fix hibernation code refrence to PAGE_OFFSET. sparc64: Move request_irq() from ldc_bind() to ldc_alloc() ...
-rw-r--r--arch/sparc/Kconfig1
-rw-r--r--arch/sparc/include/asm/dma-mapping.h6
-rw-r--r--arch/sparc/include/asm/hypervisor.h11
-rw-r--r--arch/sparc/include/asm/irq_64.h7
-rw-r--r--arch/sparc/include/asm/ldc.h5
-rw-r--r--arch/sparc/include/asm/page_64.h33
-rw-r--r--arch/sparc/include/asm/pgalloc_64.h28
-rw-r--r--arch/sparc/include/asm/pgtable_64.h100
-rw-r--r--arch/sparc/include/asm/spitfire.h2
-rw-r--r--arch/sparc/include/asm/thread_info_64.h1
-rw-r--r--arch/sparc/include/asm/tsb.h87
-rw-r--r--arch/sparc/include/asm/vio.h16
-rw-r--r--arch/sparc/kernel/cpu.c12
-rw-r--r--arch/sparc/kernel/cpumap.c2
-rw-r--r--arch/sparc/kernel/ds.c4
-rw-r--r--arch/sparc/kernel/head_64.S12
-rw-r--r--arch/sparc/kernel/hvapi.c1
-rw-r--r--arch/sparc/kernel/hvcalls.S16
-rw-r--r--arch/sparc/kernel/ioport.c5
-rw-r--r--arch/sparc/kernel/irq_64.c507
-rw-r--r--arch/sparc/kernel/ktlb.S125
-rw-r--r--arch/sparc/kernel/ldc.c41
-rw-r--r--arch/sparc/kernel/leon_kernel.c31
-rw-r--r--arch/sparc/kernel/pcr.c47
-rw-r--r--arch/sparc/kernel/perf_event.c3
-rw-r--r--arch/sparc/kernel/setup_64.c26
-rw-r--r--arch/sparc/kernel/smp_64.c7
-rw-r--r--arch/sparc/kernel/sun4v_tlb_miss.S35
-rw-r--r--arch/sparc/kernel/traps_64.c15
-rw-r--r--arch/sparc/kernel/vio.c13
-rw-r--r--arch/sparc/kernel/viohs.c4
-rw-r--r--arch/sparc/kernel/vmlinux.lds.S10
-rw-r--r--arch/sparc/lib/memset.S18
-rw-r--r--arch/sparc/mm/fault_64.c3
-rw-r--r--arch/sparc/mm/init_64.c603
-rw-r--r--arch/sparc/mm/init_64.h18
-rw-r--r--arch/sparc/power/hibernate_asm.S4
-rw-r--r--arch/sparc/prom/bootstr_64.c5
-rw-r--r--arch/sparc/prom/p1275.c7
-rw-r--r--drivers/block/sunvdc.c167
-rw-r--r--drivers/net/ethernet/sun/sunvnet.c4
41 files changed, 1248 insertions, 794 deletions
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index a537816613f9..96ac69c5eba0 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -67,6 +67,7 @@ config SPARC64
67 select HAVE_SYSCALL_TRACEPOINTS 67 select HAVE_SYSCALL_TRACEPOINTS
68 select HAVE_CONTEXT_TRACKING 68 select HAVE_CONTEXT_TRACKING
69 select HAVE_DEBUG_KMEMLEAK 69 select HAVE_DEBUG_KMEMLEAK
70 select SPARSE_IRQ
70 select RTC_DRV_CMOS 71 select RTC_DRV_CMOS
71 select RTC_DRV_BQ4802 72 select RTC_DRV_BQ4802
72 select RTC_DRV_SUN4V 73 select RTC_DRV_SUN4V
diff --git a/arch/sparc/include/asm/dma-mapping.h b/arch/sparc/include/asm/dma-mapping.h
index 1ee02710b2dc..5b1b52a04ad6 100644
--- a/arch/sparc/include/asm/dma-mapping.h
+++ b/arch/sparc/include/asm/dma-mapping.h
@@ -20,10 +20,12 @@ extern struct bus_type pci_bus_type;
20 20
21static inline struct dma_map_ops *get_dma_ops(struct device *dev) 21static inline struct dma_map_ops *get_dma_ops(struct device *dev)
22{ 22{
23#if defined(CONFIG_SPARC32) && defined(CONFIG_PCI) 23#ifdef CONFIG_SPARC_LEON
24 if (sparc_cpu_model == sparc_leon) 24 if (sparc_cpu_model == sparc_leon)
25 return leon_dma_ops; 25 return leon_dma_ops;
26 else if (dev->bus == &pci_bus_type) 26#endif
27#if defined(CONFIG_SPARC32) && defined(CONFIG_PCI)
28 if (dev->bus == &pci_bus_type)
27 return &pci32_dma_ops; 29 return &pci32_dma_ops;
28#endif 30#endif
29 return dma_ops; 31 return dma_ops;
diff --git a/arch/sparc/include/asm/hypervisor.h b/arch/sparc/include/asm/hypervisor.h
index 94b39caea3eb..4f6725ff4c33 100644
--- a/arch/sparc/include/asm/hypervisor.h
+++ b/arch/sparc/include/asm/hypervisor.h
@@ -2947,6 +2947,16 @@ unsigned long sun4v_vt_set_perfreg(unsigned long reg_num,
2947 unsigned long reg_val); 2947 unsigned long reg_val);
2948#endif 2948#endif
2949 2949
2950#define HV_FAST_T5_GET_PERFREG 0x1a8
2951#define HV_FAST_T5_SET_PERFREG 0x1a9
2952
2953#ifndef __ASSEMBLY__
2954unsigned long sun4v_t5_get_perfreg(unsigned long reg_num,
2955 unsigned long *reg_val);
2956unsigned long sun4v_t5_set_perfreg(unsigned long reg_num,
2957 unsigned long reg_val);
2958#endif
2959
2950/* Function numbers for HV_CORE_TRAP. */ 2960/* Function numbers for HV_CORE_TRAP. */
2951#define HV_CORE_SET_VER 0x00 2961#define HV_CORE_SET_VER 0x00
2952#define HV_CORE_PUTCHAR 0x01 2962#define HV_CORE_PUTCHAR 0x01
@@ -2978,6 +2988,7 @@ unsigned long sun4v_vt_set_perfreg(unsigned long reg_num,
2978#define HV_GRP_VF_CPU 0x0205 2988#define HV_GRP_VF_CPU 0x0205
2979#define HV_GRP_KT_CPU 0x0209 2989#define HV_GRP_KT_CPU 0x0209
2980#define HV_GRP_VT_CPU 0x020c 2990#define HV_GRP_VT_CPU 0x020c
2991#define HV_GRP_T5_CPU 0x0211
2981#define HV_GRP_DIAG 0x0300 2992#define HV_GRP_DIAG 0x0300
2982 2993
2983#ifndef __ASSEMBLY__ 2994#ifndef __ASSEMBLY__
diff --git a/arch/sparc/include/asm/irq_64.h b/arch/sparc/include/asm/irq_64.h
index 91d219381306..3f70f900e834 100644
--- a/arch/sparc/include/asm/irq_64.h
+++ b/arch/sparc/include/asm/irq_64.h
@@ -37,7 +37,7 @@
37 * 37 *
38 * ino_bucket->irq allocation is made during {sun4v_,}build_irq(). 38 * ino_bucket->irq allocation is made during {sun4v_,}build_irq().
39 */ 39 */
40#define NR_IRQS 255 40#define NR_IRQS (2048)
41 41
42void irq_install_pre_handler(int irq, 42void irq_install_pre_handler(int irq,
43 void (*func)(unsigned int, void *, void *), 43 void (*func)(unsigned int, void *, void *),
@@ -57,11 +57,8 @@ unsigned int sun4u_build_msi(u32 portid, unsigned int *irq_p,
57 unsigned long iclr_base); 57 unsigned long iclr_base);
58void sun4u_destroy_msi(unsigned int irq); 58void sun4u_destroy_msi(unsigned int irq);
59 59
60unsigned char irq_alloc(unsigned int dev_handle, 60unsigned int irq_alloc(unsigned int dev_handle, unsigned int dev_ino);
61 unsigned int dev_ino);
62#ifdef CONFIG_PCI_MSI
63void irq_free(unsigned int irq); 61void irq_free(unsigned int irq);
64#endif
65 62
66void __init init_IRQ(void); 63void __init init_IRQ(void);
67void fixup_irqs(void); 64void fixup_irqs(void);
diff --git a/arch/sparc/include/asm/ldc.h b/arch/sparc/include/asm/ldc.h
index c8c67f621f4f..58ab64de25d2 100644
--- a/arch/sparc/include/asm/ldc.h
+++ b/arch/sparc/include/asm/ldc.h
@@ -53,13 +53,14 @@ struct ldc_channel;
53/* Allocate state for a channel. */ 53/* Allocate state for a channel. */
54struct ldc_channel *ldc_alloc(unsigned long id, 54struct ldc_channel *ldc_alloc(unsigned long id,
55 const struct ldc_channel_config *cfgp, 55 const struct ldc_channel_config *cfgp,
56 void *event_arg); 56 void *event_arg,
57 const char *name);
57 58
58/* Shut down and free state for a channel. */ 59/* Shut down and free state for a channel. */
59void ldc_free(struct ldc_channel *lp); 60void ldc_free(struct ldc_channel *lp);
60 61
61/* Register TX and RX queues of the link with the hypervisor. */ 62/* Register TX and RX queues of the link with the hypervisor. */
62int ldc_bind(struct ldc_channel *lp, const char *name); 63int ldc_bind(struct ldc_channel *lp);
63 64
64/* For non-RAW protocols we need to complete a handshake before 65/* For non-RAW protocols we need to complete a handshake before
65 * communication can proceed. ldc_connect() does that, if the 66 * communication can proceed. ldc_connect() does that, if the
diff --git a/arch/sparc/include/asm/page_64.h b/arch/sparc/include/asm/page_64.h
index bf109984a032..8c2a8c937540 100644
--- a/arch/sparc/include/asm/page_64.h
+++ b/