forked from mirrors/linux
		
	xtensa: clean up WSR*/RSR*/get_sr/set_sr
WSR and RSR are too generic and collide with other macro definitions in the kernel causing warnings in allmodconfig builds. Drop WSR and RSR macros and WSR_* and RSR_* variants. Change get_sr and set_sr to xtensa_get_sr and xtensa_set_sr. Fix up users. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
		
							parent
							
								
									c066cc8af9
								
							
						
					
					
						commit
						cad6fade6e
					
				
					 11 changed files with 50 additions and 69 deletions
				
			
		|  | @ -12,7 +12,6 @@ | |||
| #ifndef _XTENSA_COPROCESSOR_H | ||||
| #define _XTENSA_COPROCESSOR_H | ||||
| 
 | ||||
| #include <linux/stringify.h> | ||||
| #include <variant/core.h> | ||||
| #include <variant/tie.h> | ||||
| #include <asm/types.h> | ||||
|  | @ -90,19 +89,6 @@ | |||
| 
 | ||||
| #ifndef __ASSEMBLY__ | ||||
| 
 | ||||
| 
 | ||||
| #if XCHAL_HAVE_CP | ||||
| 
 | ||||
| #define RSR_CPENABLE(x)	do {						  \ | ||||
| 	__asm__ __volatile__("rsr %0, cpenable" : "=a" (x));		  \ | ||||
| 	} while(0); | ||||
| #define WSR_CPENABLE(x)	do {						  \ | ||||
| 	__asm__ __volatile__("wsr %0, cpenable; rsync" :: "a" (x));	  \ | ||||
| 	} while(0); | ||||
| 
 | ||||
| #endif /* XCHAL_HAVE_CP */ | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Additional registers. | ||||
|  * We define three types of additional registers: | ||||
|  | @ -162,12 +148,6 @@ extern void coprocessor_flush(struct thread_info*, int); | |||
| extern void coprocessor_release_all(struct thread_info*); | ||||
| extern void coprocessor_flush_all(struct thread_info*); | ||||
| 
 | ||||
| static inline void coprocessor_clear_cpenable(void) | ||||
| { | ||||
| 	unsigned long i = 0; | ||||
| 	WSR_CPENABLE(i); | ||||
| } | ||||
| 
 | ||||
| #endif	/* XTENSA_HAVE_COPROCESSORS */ | ||||
| 
 | ||||
| #endif	/* !__ASSEMBLY__ */ | ||||
|  |  | |||
|  | @ -12,6 +12,7 @@ | |||
| #ifndef _XTENSA_IRQFLAGS_H | ||||
| #define _XTENSA_IRQFLAGS_H | ||||
| 
 | ||||
| #include <linux/stringify.h> | ||||
| #include <linux/types.h> | ||||
| #include <asm/processor.h> | ||||
| 
 | ||||
|  |  | |||
|  | @ -13,6 +13,7 @@ | |||
| #include <variant/core.h> | ||||
| 
 | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/stringify.h> | ||||
| #include <asm/ptrace.h> | ||||
| #include <asm/types.h> | ||||
| #include <asm/regs.h> | ||||
|  | @ -212,11 +213,18 @@ extern unsigned long get_wchan(struct task_struct *p); | |||
| 
 | ||||
| /* Special register access. */ | ||||
| 
 | ||||
| #define WSR(v,sr) __asm__ __volatile__ ("wsr %0,"__stringify(sr) :: "a"(v)); | ||||
| #define RSR(v,sr) __asm__ __volatile__ ("rsr %0,"__stringify(sr) : "=a"(v)); | ||||
| #define xtensa_set_sr(x, sr) \ | ||||
| 	({ \ | ||||
| 	 unsigned int v = (unsigned int)(x); \ | ||||
| 	 __asm__ __volatile__ ("wsr %0, "__stringify(sr) :: "a"(v)); \ | ||||
| 	 }) | ||||
| 
 | ||||
| #define set_sr(x,sr) ({unsigned int v=(unsigned int)x; WSR(v,sr);}) | ||||
| #define get_sr(sr) ({unsigned int v; RSR(v,sr); v; }) | ||||
| #define xtensa_get_sr(sr) \ | ||||
| 	({ \ | ||||
| 	 unsigned int v; \ | ||||
| 	 __asm__ __volatile__ ("rsr %0, "__stringify(sr) : "=a"(v)); \ | ||||
| 	 v; \ | ||||
| 	 }) | ||||
| 
 | ||||
| #ifndef XCHAL_HAVE_EXTERN_REGS | ||||
| #define XCHAL_HAVE_EXTERN_REGS 0 | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ | |||
| #ifndef _XTENSA_THREAD_INFO_H | ||||
| #define _XTENSA_THREAD_INFO_H | ||||
| 
 | ||||
| #include <linux/stringify.h> | ||||
| #include <asm/kmem_layout.h> | ||||
| 
 | ||||
| #define CURRENT_SHIFT KERNEL_STACK_SHIFT | ||||
|  |  | |||
|  | @ -10,7 +10,6 @@ | |||
| #define _XTENSA_TIMEX_H | ||||
| 
 | ||||
| #include <asm/processor.h> | ||||
| #include <linux/stringify.h> | ||||
| 
 | ||||
| #if XCHAL_NUM_TIMERS > 0 && \ | ||||
| 	XTENSA_INT_LEVEL(XCHAL_TIMER0_INTERRUPT) <= XCHAL_EXCM_LEVEL | ||||
|  | @ -40,33 +39,24 @@ void local_timer_setup(unsigned cpu); | |||
|  * Register access. | ||||
|  */ | ||||
| 
 | ||||
| #define WSR_CCOUNT(r)	  asm volatile ("wsr %0, ccount" :: "a" (r)) | ||||
| #define RSR_CCOUNT(r)	  asm volatile ("rsr %0, ccount" : "=a" (r)) | ||||
| #define WSR_CCOMPARE(x,r) asm volatile ("wsr %0,"__stringify(SREG_CCOMPARE)"+"__stringify(x) :: "a"(r)) | ||||
| #define RSR_CCOMPARE(x,r) asm volatile ("rsr %0,"__stringify(SREG_CCOMPARE)"+"__stringify(x) : "=a"(r)) | ||||
| 
 | ||||
| static inline unsigned long get_ccount (void) | ||||
| { | ||||
| 	unsigned long ccount; | ||||
| 	RSR_CCOUNT(ccount); | ||||
| 	return ccount; | ||||
| 	return xtensa_get_sr(ccount); | ||||
| } | ||||
| 
 | ||||
| static inline void set_ccount (unsigned long ccount) | ||||
| { | ||||
| 	WSR_CCOUNT(ccount); | ||||
| 	xtensa_set_sr(ccount, ccount); | ||||
| } | ||||
| 
 | ||||
| static inline unsigned long get_linux_timer (void) | ||||
| { | ||||
| 	unsigned ccompare; | ||||
| 	RSR_CCOMPARE(LINUX_TIMER, ccompare); | ||||
| 	return ccompare; | ||||
| 	return xtensa_get_sr(SREG_CCOMPARE + LINUX_TIMER); | ||||
| } | ||||
| 
 | ||||
| static inline void set_linux_timer (unsigned long ccompare) | ||||
| { | ||||
| 	WSR_CCOMPARE(LINUX_TIMER, ccompare); | ||||
| 	xtensa_set_sr(ccompare, SREG_CCOMPARE + LINUX_TIMER); | ||||
| } | ||||
| 
 | ||||
| #endif	/* _XTENSA_TIMEX_H */ | ||||
|  |  | |||
|  | @ -101,30 +101,30 @@ static void xtensa_wsr(unsigned long v, u8 sr) | |||
| 	switch (sr) { | ||||
| #if XCHAL_NUM_IBREAK > 0 | ||||
| 	case SREG_IBREAKA + 0: | ||||
| 		WSR(v, SREG_IBREAKA + 0); | ||||
| 		xtensa_set_sr(v, SREG_IBREAKA + 0); | ||||
| 		break; | ||||
| #endif | ||||
| #if XCHAL_NUM_IBREAK > 1 | ||||
| 	case SREG_IBREAKA + 1: | ||||
| 		WSR(v, SREG_IBREAKA + 1); | ||||
| 		xtensa_set_sr(v, SREG_IBREAKA + 1); | ||||
| 		break; | ||||
| #endif | ||||
| 
 | ||||
| #if XCHAL_NUM_DBREAK > 0 | ||||
| 	case SREG_DBREAKA + 0: | ||||
| 		WSR(v, SREG_DBREAKA + 0); | ||||
| 		xtensa_set_sr(v, SREG_DBREAKA + 0); | ||||
| 		break; | ||||
| 	case SREG_DBREAKC + 0: | ||||
| 		WSR(v, SREG_DBREAKC + 0); | ||||
| 		xtensa_set_sr(v, SREG_DBREAKC + 0); | ||||
| 		break; | ||||
| #endif | ||||
| #if XCHAL_NUM_DBREAK > 1 | ||||
| 	case SREG_DBREAKA + 1: | ||||
| 		WSR(v, SREG_DBREAKA + 1); | ||||
| 		xtensa_set_sr(v, SREG_DBREAKA + 1); | ||||
| 		break; | ||||
| 
 | ||||
| 	case SREG_DBREAKC + 1: | ||||
| 		WSR(v, SREG_DBREAKC + 1); | ||||
| 		xtensa_set_sr(v, SREG_DBREAKC + 1); | ||||
| 		break; | ||||
| #endif | ||||
| 	} | ||||
|  | @ -150,8 +150,8 @@ static void set_ibreak_regs(int reg, struct perf_event *bp) | |||
| 	unsigned long ibreakenable; | ||||
| 
 | ||||
| 	xtensa_wsr(info->address, SREG_IBREAKA + reg); | ||||
| 	RSR(ibreakenable, SREG_IBREAKENABLE); | ||||
| 	WSR(ibreakenable | (1 << reg), SREG_IBREAKENABLE); | ||||
| 	ibreakenable = xtensa_get_sr(SREG_IBREAKENABLE); | ||||
| 	xtensa_set_sr(ibreakenable | (1 << reg), SREG_IBREAKENABLE); | ||||
| } | ||||
| 
 | ||||
| static void set_dbreak_regs(int reg, struct perf_event *bp) | ||||
|  | @ -214,8 +214,9 @@ void arch_uninstall_hw_breakpoint(struct perf_event *bp) | |||
| 		/* Breakpoint */ | ||||
| 		i = free_slot(this_cpu_ptr(bp_on_reg), XCHAL_NUM_IBREAK, bp); | ||||
| 		if (i >= 0) { | ||||
| 			RSR(ibreakenable, SREG_IBREAKENABLE); | ||||
| 			WSR(ibreakenable & ~(1 << i), SREG_IBREAKENABLE); | ||||
| 			ibreakenable = xtensa_get_sr(SREG_IBREAKENABLE); | ||||
| 			xtensa_set_sr(ibreakenable & ~(1 << i), | ||||
| 				      SREG_IBREAKENABLE); | ||||
| 		} | ||||
| 	} else { | ||||
| 		/* Watchpoint */ | ||||
|  |  | |||
|  | @ -87,7 +87,7 @@ void coprocessor_release_all(struct thread_info *ti) | |||
| 	} | ||||
| 
 | ||||
| 	ti->cpenable = cpenable; | ||||
| 	coprocessor_clear_cpenable(); | ||||
| 	xtensa_set_sr(0, cpenable); | ||||
| 
 | ||||
| 	preempt_enable(); | ||||
| } | ||||
|  | @ -99,16 +99,16 @@ void coprocessor_flush_all(struct thread_info *ti) | |||
| 
 | ||||
| 	preempt_disable(); | ||||
| 
 | ||||
| 	RSR_CPENABLE(old_cpenable); | ||||
| 	old_cpenable = xtensa_get_sr(cpenable); | ||||
| 	cpenable = ti->cpenable; | ||||
| 	WSR_CPENABLE(cpenable); | ||||
| 	xtensa_set_sr(cpenable, cpenable); | ||||
| 
 | ||||
| 	for (i = 0; i < XCHAL_CP_MAX; i++) { | ||||
| 		if ((cpenable & 1) != 0 && coprocessor_owner[i] == ti) | ||||
| 			coprocessor_flush(ti, i); | ||||
| 		cpenable >>= 1; | ||||
| 	} | ||||
| 	WSR_CPENABLE(old_cpenable); | ||||
| 	xtensa_set_sr(old_cpenable, cpenable); | ||||
| 
 | ||||
| 	preempt_enable(); | ||||
| } | ||||
|  |  | |||
|  | @ -318,9 +318,9 @@ static inline int mem_reserve(unsigned long start, unsigned long end) | |||
| void __init setup_arch(char **cmdline_p) | ||||
| { | ||||
| 	pr_info("config ID: %08x:%08x\n", | ||||
| 		get_sr(SREG_EPC), get_sr(SREG_EXCSAVE)); | ||||
| 	if (get_sr(SREG_EPC) != XCHAL_HW_CONFIGID0 || | ||||
| 	    get_sr(SREG_EXCSAVE) != XCHAL_HW_CONFIGID1) | ||||
| 		xtensa_get_sr(SREG_EPC), xtensa_get_sr(SREG_EXCSAVE)); | ||||
| 	if (xtensa_get_sr(SREG_EPC) != XCHAL_HW_CONFIGID0 || | ||||
| 	    xtensa_get_sr(SREG_EXCSAVE) != XCHAL_HW_CONFIGID1) | ||||
| 		pr_info("built for config ID: %08x:%08x\n", | ||||
| 			XCHAL_HW_CONFIGID0, XCHAL_HW_CONFIGID1); | ||||
| 
 | ||||
|  | @ -596,7 +596,7 @@ c_show(struct seq_file *f, void *slot) | |||
| 		      num_online_cpus(), | ||||
| 		      cpumask_pr_args(cpu_online_mask), | ||||
| 		      XCHAL_BUILD_UNIQUE_ID, | ||||
| 		      get_sr(SREG_EPC), get_sr(SREG_EXCSAVE), | ||||
| 		      xtensa_get_sr(SREG_EPC), xtensa_get_sr(SREG_EXCSAVE), | ||||
| 		      XCHAL_HAVE_BE ?  "big" : "little", | ||||
| 		      ccount_freq/1000000, | ||||
| 		      (ccount_freq/10000) % 100, | ||||
|  |  | |||
|  | @ -213,8 +213,8 @@ extern void do_IRQ(int, struct pt_regs *); | |||
| 
 | ||||
| static inline void check_valid_nmi(void) | ||||
| { | ||||
| 	unsigned intread = get_sr(interrupt); | ||||
| 	unsigned intenable = get_sr(intenable); | ||||
| 	unsigned intread = xtensa_get_sr(interrupt); | ||||
| 	unsigned intenable = xtensa_get_sr(intenable); | ||||
| 
 | ||||
| 	BUG_ON(intread & intenable & | ||||
| 	       ~(XTENSA_INTLEVEL_ANDBELOW_MASK(PROFILING_INTLEVEL) ^ | ||||
|  | @ -271,8 +271,8 @@ void do_interrupt(struct pt_regs *regs) | |||
| 	irq_enter(); | ||||
| 
 | ||||
| 	for (;;) { | ||||
| 		unsigned intread = get_sr(interrupt); | ||||
| 		unsigned intenable = get_sr(intenable); | ||||
| 		unsigned intread = xtensa_get_sr(interrupt); | ||||
| 		unsigned intenable = xtensa_get_sr(intenable); | ||||
| 		unsigned int_at_level = intread & intenable; | ||||
| 		unsigned level; | ||||
| 
 | ||||
|  |  | |||
|  | @ -62,7 +62,7 @@ void secondary_init_irq(void) | |||
| 	__this_cpu_write(cached_irq_mask, | ||||
| 			XCHAL_INTTYPE_MASK_EXTERN_EDGE | | ||||
| 			XCHAL_INTTYPE_MASK_EXTERN_LEVEL); | ||||
| 	set_sr(XCHAL_INTTYPE_MASK_EXTERN_EDGE | | ||||
| 	xtensa_set_sr(XCHAL_INTTYPE_MASK_EXTERN_EDGE | | ||||
| 			XCHAL_INTTYPE_MASK_EXTERN_LEVEL, intenable); | ||||
| } | ||||
| 
 | ||||
|  | @ -77,7 +77,7 @@ static void xtensa_mx_irq_mask(struct irq_data *d) | |||
| 	} else { | ||||
| 		mask = __this_cpu_read(cached_irq_mask) & ~mask; | ||||
| 		__this_cpu_write(cached_irq_mask, mask); | ||||
| 		set_sr(mask, intenable); | ||||
| 		xtensa_set_sr(mask, intenable); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -92,7 +92,7 @@ static void xtensa_mx_irq_unmask(struct irq_data *d) | |||
| 	} else { | ||||
| 		mask |= __this_cpu_read(cached_irq_mask); | ||||
| 		__this_cpu_write(cached_irq_mask, mask); | ||||
| 		set_sr(mask, intenable); | ||||
| 		xtensa_set_sr(mask, intenable); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -108,12 +108,12 @@ static void xtensa_mx_irq_disable(struct irq_data *d) | |||
| 
 | ||||
| static void xtensa_mx_irq_ack(struct irq_data *d) | ||||
| { | ||||
| 	set_sr(1 << d->hwirq, intclear); | ||||
| 	xtensa_set_sr(1 << d->hwirq, intclear); | ||||
| } | ||||
| 
 | ||||
| static int xtensa_mx_irq_retrigger(struct irq_data *d) | ||||
| { | ||||
| 	set_sr(1 << d->hwirq, intset); | ||||
| 	xtensa_set_sr(1 << d->hwirq, intset); | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -44,13 +44,13 @@ static const struct irq_domain_ops xtensa_irq_domain_ops = { | |||
| static void xtensa_irq_mask(struct irq_data *d) | ||||
| { | ||||
| 	cached_irq_mask &= ~(1 << d->hwirq); | ||||
| 	set_sr(cached_irq_mask, intenable); | ||||
| 	xtensa_set_sr(cached_irq_mask, intenable); | ||||
| } | ||||
| 
 | ||||
| static void xtensa_irq_unmask(struct irq_data *d) | ||||
| { | ||||
| 	cached_irq_mask |= 1 << d->hwirq; | ||||
| 	set_sr(cached_irq_mask, intenable); | ||||
| 	xtensa_set_sr(cached_irq_mask, intenable); | ||||
| } | ||||
| 
 | ||||
| static void xtensa_irq_enable(struct irq_data *d) | ||||
|  | @ -65,12 +65,12 @@ static void xtensa_irq_disable(struct irq_data *d) | |||
| 
 | ||||
| static void xtensa_irq_ack(struct irq_data *d) | ||||
| { | ||||
| 	set_sr(1 << d->hwirq, intclear); | ||||
| 	xtensa_set_sr(1 << d->hwirq, intclear); | ||||
| } | ||||
| 
 | ||||
| static int xtensa_irq_retrigger(struct irq_data *d) | ||||
| { | ||||
| 	set_sr(1 << d->hwirq, intset); | ||||
| 	xtensa_set_sr(1 << d->hwirq, intset); | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Max Filippov
						Max Filippov