diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-11 20:36:34 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-11 20:36:34 -0400 |
| commit | 052db7ec86dff26f734031c3ef5c2c03a94af0af (patch) | |
| tree | de4ca607d1ede889a3a804e87f25bd38304f9016 | |
| parent | fd9879b9bb3258ebc27a4cc6d2d29f528f71901f (diff) | |
| parent | bdcf81b658ebc4c2640c3c2c55c8b31c601b6996 (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()
...
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 | ||
| 21 | static inline struct dma_map_ops *get_dma_ops(struct device *dev) | 21 | static 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__ | ||
| 2954 | unsigned long sun4v_t5_get_perfreg(unsigned long reg_num, | ||
| 2955 | unsigned long *reg_val); | ||
| 2956 | unsigned 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 | ||
| 42 | void irq_install_pre_handler(int irq, | 42 | void 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); |
| 58 | void sun4u_destroy_msi(unsigned int irq); | 58 | void sun4u_destroy_msi(unsigned int irq); |
| 59 | 59 | ||
| 60 | unsigned char irq_alloc(unsigned int dev_handle, | 60 | unsigned int irq_alloc(unsigned int dev_handle, unsigned int dev_ino); |
| 61 | unsigned int dev_ino); | ||
| 62 | #ifdef CONFIG_PCI_MSI | ||
| 63 | void irq_free(unsigned int irq); | 61 | void irq_free(unsigned int irq); |
| 64 | #endif | ||
| 65 | 62 | ||
| 66 | void __init init_IRQ(void); | 63 | void __init init_IRQ(void); |
| 67 | void fixup_irqs(void); | 64 | void 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. */ |
| 54 | struct ldc_channel *ldc_alloc(unsigned long id, | 54 | struct 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. */ |
| 59 | void ldc_free(struct ldc_channel *lp); | 60 | void 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. */ |
| 62 | int ldc_bind(struct ldc_channel *lp, const char *name); | 63 | int 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/ | |||
