Commit e11a9356 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull parisc architecture updates from Helge Deller:
 "Minor cleanups and code optimizations, e.g.:

   - improvements in assembly statements in the tmpalias code path

   - added some additionals compile time checks

   - drop some unneccesary assembler DMA syncs"

* tag 'for-5.19/parisc-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
  parisc: Drop __ARCH_WANT_OLD_READDIR and __ARCH_WANT_SYS_OLDUMOUNT
  parisc: Optimize tmpalias function calls
  parisc: Add dep_safe() macro to deposit a register in 32- and 64-kernels
  parisc: Fix wrong comment for shr macro
  parisc: Prevent ldil() to sign-extend into upper 32 bits
  parisc: Don't hardcode assembler bit definitions in tmpalias code
  parisc: Don't enforce DMA completion order in cache flushes
  parisc: video: fbdev: stifb: Add sti_dump_font() to dump STI font
parents 1ff7bc3b 72acadfe
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -143,7 +143,7 @@
	depd,z	\r, 63-(\sa), 64-(\sa), \t
	.endm

	/* Shift Right - note the r and t can NOT be the same! */
	/* Shift Right for 32-bit. Clobbers upper 32-bit on PA2.0. */
	.macro shr r, sa, t
	extru \r, 31-(\sa), 32-(\sa), \t
	.endm
@@ -174,6 +174,16 @@
#endif
	.endm

	/* The depw instruction leaves the most significant 32 bits of the
	 * target register in an undefined state on PA 2.0 systems. */
	.macro dep_safe i, p, len, t
#ifdef CONFIG_64BIT
	depd	\i, 32+(\p), \len, \t
#else
	depw	\i, \p, \len, \t
#endif
	.endm

	/* load 32-bit 'value' into 'reg' compensating for the ldil
	 * sign-extension when running in wide mode.
	 * WARNING!! neither 'value' nor 'reg' can be expressions
+1 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ void parisc_setup_cache_timing(void);
#define asm_io_sync()	asm volatile("sync" \
			ALTERNATIVE(ALT_COND_NO_DCACHE, INSN_NOP) \
			ALTERNATIVE(ALT_COND_NO_IOC_FDC, INSN_NOP) :::"memory")
#define asm_syncdma()	asm volatile("syncdma" :::"memory")

#endif /* ! __ASSEMBLY__ */

+20 −5
Original line number Diff line number Diff line
@@ -9,12 +9,27 @@
 *
 * All of the values in this file must be <4GB (because of assembly
 * loading restrictions).  If you place this region anywhere above
 * __PAGE_OFFSET, you must adjust the memory map accordingly */
 * __PAGE_OFFSET, you must adjust the memory map accordingly
 */

/* The alias region is used in kernel space to do copy/clear to or
 * from areas congruently mapped with user space.  It is 8MB large
 * and must be 16MB aligned */
#define TMPALIAS_MAP_START	((__PAGE_OFFSET) - 16*1024*1024)
/*
 * The tmpalias region is used in kernel space to copy/clear/flush data
 * from pages congruently mapped with user space. It is comprised of
 * a pair regions. The size of these regions is determined by the largest
 * cache aliasing boundary for machines that support equivalent aliasing.
 *
 * The c3750 with PA8700 processor returns an alias value of 11. This
 * indicates that it has an alias boundary of 4 MB. It also supports
 * non-equivalent aliasing without a performance penalty.
 *
 * Machines with PA8800/PA8900 processors return an alias value of 0.
 * This indicates the alias boundary is unknown and may be larger than
 * 16 MB. Non-equivalent aliasing is not supported.
 *
 * Here we assume the maximum alias boundary is 4 MB.
 */
#define TMPALIAS_SIZE_BITS	22	/* 4 MB */
#define TMPALIAS_MAP_START	((__PAGE_OFFSET) - (2 << TMPALIAS_SIZE_BITS))

#define FIXMAP_SIZE		(FIX_BITMAP_COUNT << PAGE_SHIFT)
#define FIXMAP_START		(TMPALIAS_MAP_START - FIXMAP_SIZE)
+0 −2
Original line number Diff line number Diff line
@@ -142,7 +142,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
}

#define __ARCH_WANT_NEW_STAT
#define __ARCH_WANT_OLD_READDIR
#define __ARCH_WANT_STAT64
#define __ARCH_WANT_SYS_ALARM
#define __ARCH_WANT_SYS_GETHOSTNAME
@@ -156,7 +155,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
#define __ARCH_WANT_SYS_FADVISE64
#define __ARCH_WANT_SYS_GETPGRP
#define __ARCH_WANT_SYS_NICE
#define __ARCH_WANT_SYS_OLDUMOUNT
#define __ARCH_WANT_SYS_SIGPENDING
#define __ARCH_WANT_SYS_SIGPROCMASK
#define __ARCH_WANT_SYS_FORK
+3 −0
Original line number Diff line number Diff line
@@ -754,6 +754,9 @@ void invalidate_kernel_vmap_range(void *vaddr, int size)
	unsigned long start = (unsigned long)vaddr;
	unsigned long end = start + size;

	/* Ensure DMA is complete */
	asm_syncdma();

	if ((!IS_ENABLED(CONFIG_SMP) || !arch_irqs_disabled()) &&
	    (unsigned long)size >= parisc_cache_flush_threshold) {
		flush_tlb_kernel_range(start, end);
Loading