Commit 24131a61 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'arc-4.6-rc6-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc

Pull ARC fixes from Vineet Gupta:

 - lockdep now works for ARCv2 builds

 - enable DT reserved-memory binding (for forthcoming HDMI driver)

* tag 'arc-4.6-rc6-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
  ARC: add support for reserved memory defined by device tree
  ARC: support generic per-device coherent dma mem
  Documentation: dt: arc: fix spelling mistakes
  ARCv2: Enable LOCKDEP
parents 508fea71 1b10cb21
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
The ARC HS can be configured with a pipeline performance monitor for counting The ARC HS can be configured with a pipeline performance monitor for counting
CPU and cache events like cache misses and hits. Like conventional PCT there CPU and cache events like cache misses and hits. Like conventional PCT there
are 100+ hardware conditions dynamically mapped to upto 32 counters. are 100+ hardware conditions dynamically mapped to up to 32 counters.
It also supports overflow interrupts. It also supports overflow interrupts.
Required properties: Required properties:
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
The ARC700 can be configured with a pipeline performance monitor for counting The ARC700 can be configured with a pipeline performance monitor for counting
CPU and cache events like cache misses and hits. Like conventional PCT there CPU and cache events like cache misses and hits. Like conventional PCT there
are 100+ hardware conditions dynamically mapped to upto 32 counters are 100+ hardware conditions dynamically mapped to up to 32 counters
Note that: Note that:
* The ARC 700 PCT does not support interrupts; although HW events may be * The ARC 700 PCT does not support interrupts; although HW events may be
......
...@@ -35,8 +35,10 @@ config ARC ...@@ -35,8 +35,10 @@ config ARC
select NO_BOOTMEM select NO_BOOTMEM
select OF select OF
select OF_EARLY_FLATTREE select OF_EARLY_FLATTREE
select OF_RESERVED_MEM
select PERF_USE_VMALLOC select PERF_USE_VMALLOC
select HAVE_DEBUG_STACKOVERFLOW select HAVE_DEBUG_STACKOVERFLOW
select HAVE_GENERIC_DMA_COHERENT
config MIGHT_HAVE_PCI config MIGHT_HAVE_PCI
bool bool
......
...@@ -18,6 +18,12 @@ ...@@ -18,6 +18,12 @@
#define STATUS_AD_MASK (1<<STATUS_AD_BIT) #define STATUS_AD_MASK (1<<STATUS_AD_BIT)
#define STATUS_IE_MASK (1<<STATUS_IE_BIT) #define STATUS_IE_MASK (1<<STATUS_IE_BIT)
/* status32 Bits as encoded/expected by CLRI/SETI */
#define CLRI_STATUS_IE_BIT 4
#define CLRI_STATUS_E_MASK 0xF
#define CLRI_STATUS_IE_MASK (1 << CLRI_STATUS_IE_BIT)
#define AUX_USER_SP 0x00D #define AUX_USER_SP 0x00D
#define AUX_IRQ_CTRL 0x00E #define AUX_IRQ_CTRL 0x00E
#define AUX_IRQ_ACT 0x043 /* Active Intr across all levels */ #define AUX_IRQ_ACT 0x043 /* Active Intr across all levels */
...@@ -100,6 +106,13 @@ static inline long arch_local_save_flags(void) ...@@ -100,6 +106,13 @@ static inline long arch_local_save_flags(void)
: :
: "memory"); : "memory");
/* To be compatible with irq_save()/irq_restore()
* encode the irq bits as expected by CLRI/SETI
* (this was needed to make CONFIG_TRACE_IRQFLAGS work)
*/
temp = (1 << 5) |
((!!(temp & STATUS_IE_MASK)) << CLRI_STATUS_IE_BIT) |
(temp & CLRI_STATUS_E_MASK);
return temp; return temp;
} }
...@@ -108,7 +121,7 @@ static inline long arch_local_save_flags(void) ...@@ -108,7 +121,7 @@ static inline long arch_local_save_flags(void)
*/ */
static inline int arch_irqs_disabled_flags(unsigned long flags) static inline int arch_irqs_disabled_flags(unsigned long flags)
{ {
return !(flags & (STATUS_IE_MASK)); return !(flags & CLRI_STATUS_IE_MASK);
} }
static inline int arch_irqs_disabled(void) static inline int arch_irqs_disabled(void)
...@@ -128,11 +141,32 @@ static inline void arc_softirq_clear(int irq) ...@@ -128,11 +141,32 @@ static inline void arc_softirq_clear(int irq)
#else #else
#ifdef CONFIG_TRACE_IRQFLAGS
.macro TRACE_ASM_IRQ_DISABLE
bl trace_hardirqs_off
.endm
.macro TRACE_ASM_IRQ_ENABLE
bl trace_hardirqs_on
.endm
#else
.macro TRACE_ASM_IRQ_DISABLE
.endm
.macro TRACE_ASM_IRQ_ENABLE
.endm
#endif
.macro IRQ_DISABLE scratch .macro IRQ_DISABLE scratch
clri clri
TRACE_ASM_IRQ_DISABLE
.endm .endm
.macro IRQ_ENABLE scratch .macro IRQ_ENABLE scratch
TRACE_ASM_IRQ_ENABLE
seti seti
.endm .endm
......
...@@ -69,8 +69,11 @@ ENTRY(handle_interrupt) ...@@ -69,8 +69,11 @@ ENTRY(handle_interrupt)
clri ; To make status32.IE agree with CPU internal state clri ; To make status32.IE agree with CPU internal state
lr r0, [ICAUSE] #ifdef CONFIG_TRACE_IRQFLAGS
TRACE_ASM_IRQ_DISABLE
#endif
lr r0, [ICAUSE]
mov blink, ret_from_exception mov blink, ret_from_exception
b.d arch_do_IRQ b.d arch_do_IRQ
...@@ -169,6 +172,11 @@ END(EV_TLBProtV) ...@@ -169,6 +172,11 @@ END(EV_TLBProtV)
.Lrestore_regs: .Lrestore_regs:
# Interrpts are actually disabled from this point on, but will get
# reenabled after we return from interrupt/exception.
# But irq tracer needs to be told now...
TRACE_ASM_IRQ_ENABLE
ld r0, [sp, PT_status32] ; U/K mode at time of entry ld r0, [sp, PT_status32] ; U/K mode at time of entry
lr r10, [AUX_IRQ_ACT] lr r10, [AUX_IRQ_ACT]
......
...@@ -341,6 +341,9 @@ END(call_do_page_fault) ...@@ -341,6 +341,9 @@ END(call_do_page_fault)
.Lrestore_regs: .Lrestore_regs:
# Interrpts are actually disabled from this point on, but will get
# reenabled after we return from interrupt/exception.
# But irq tracer needs to be told now...
TRACE_ASM_IRQ_ENABLE TRACE_ASM_IRQ_ENABLE
lr r10, [status32] lr r10, [status32]
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
#include <linux/initrd.h> #include <linux/initrd.h>
#endif #endif
#include <linux/of_fdt.h>
#include <linux/swap.h> #include <linux/swap.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/highmem.h> #include <linux/highmem.h>
...@@ -136,6 +137,9 @@ void __init setup_arch_memory(void) ...@@ -136,6 +137,9 @@ void __init setup_arch_memory(void)
memblock_reserve(__pa(initrd_start), initrd_end - initrd_start); memblock_reserve(__pa(initrd_start), initrd_end - initrd_start);
#endif #endif
early_init_fdt_reserve_self();
early_init_fdt_scan_reserved_mem();
memblock_dump_all(); memblock_dump_all();
/*----------------- node/zones setup --------------------------*/ /*----------------- node/zones setup --------------------------*/
......
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