Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d6c77973 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull PA-RISC fixes from James Bottomley:
 "This is a set of three bug fixes that gets parisc running again on
  systems with PA1.1 processors.

  Two fix regressions introduced in 2.6.39 and one fixes a prefetch bug
  that only affects PA7300LC processors.  We also have another pending
  fix to do with the sectional arrangement of vmlinux.lds, but there's a
  query on it during testing on one particular system type, so I'll hold
  off sending it in for now."

* tag 'parisc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/parisc-2.6:
  [PARISC] fix panic on prefetch(NULL) on PA7300LC
  [PARISC] fix crash in flush_icache_page_asm on PA1.1
  [PARISC] fix PA1.1 oops on boot
parents 5d120458 b3cb8674
Loading
Loading
Loading
Loading
+6 −1
Original line number Original line Diff line number Diff line
@@ -21,7 +21,12 @@
#define ARCH_HAS_PREFETCH
#define ARCH_HAS_PREFETCH
static inline void prefetch(const void *addr)
static inline void prefetch(const void *addr)
{
{
	__asm__("ldw 0(%0), %%r0" : : "r" (addr));
	__asm__(
#ifndef CONFIG_PA20
		/* Need to avoid prefetch of NULL on PA7300LC */
		"	extrw,u,= %0,31,32,%%r0\n"
#endif
		"	ldw 0(%0), %%r0" : : "r" (addr));
}
}


/* LDD is a PA2.0 addition. */
/* LDD is a PA2.0 addition. */
+4 −0
Original line number Original line Diff line number Diff line
@@ -581,7 +581,11 @@
	 */
	 */
	cmpiclr,=	0x01,\tmp,%r0
	cmpiclr,=	0x01,\tmp,%r0
	ldi		(_PAGE_DIRTY|_PAGE_READ|_PAGE_WRITE),\prot
	ldi		(_PAGE_DIRTY|_PAGE_READ|_PAGE_WRITE),\prot
#ifdef CONFIG_64BIT
	depd,z		\prot,8,7,\prot
	depd,z		\prot,8,7,\prot
#else
	depw,z		\prot,8,7,\prot
#endif
	/*
	/*
	 * OK, it is in the temp alias region, check whether "from" or "to".
	 * OK, it is in the temp alias region, check whether "from" or "to".
	 * Check "subtle" note in pacache.S re: r23/r26.
	 * Check "subtle" note in pacache.S re: r23/r26.
+20 −18
Original line number Original line Diff line number Diff line
@@ -692,7 +692,7 @@ ENTRY(flush_icache_page_asm)


	/* Purge any old translation */
	/* Purge any old translation */


	pitlb		(%sr0,%r28)
	pitlb		(%sr4,%r28)


	ldil		L%icache_stride, %r1
	ldil		L%icache_stride, %r1
	ldw		R%icache_stride(%r1), %r1
	ldw		R%icache_stride(%r1), %r1
@@ -706,27 +706,29 @@ ENTRY(flush_icache_page_asm)
	sub		%r25, %r1, %r25
	sub		%r25, %r1, %r25




1:      fic,m		%r1(%r28)
	/* fic only has the type 26 form on PA1.1, requiring an
	fic,m		%r1(%r28)
	 * explicit space specification, so use %sr4 */
	fic,m		%r1(%r28)
1:      fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	cmpb,COND(<<)		%r28, %r25,1b
	cmpb,COND(<<)		%r28, %r25,1b
	fic,m		%r1(%r28)
	fic,m		%r1(%sr4,%r28)


	sync
	sync
	bv		%r0(%r2)
	bv		%r0(%r2)
	pitlb		(%sr0,%r25)
	pitlb		(%sr4,%r25)
	.exit
	.exit


	.procend
	.procend