Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Oct 2015 22:12:03 +0000 (UTC)
From:      Oleksandr Tymoshenko <gonzo@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r290167 - head/sys/arm/arm
Message-ID:  <201510292212.t9TMC35I058229@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: gonzo
Date: Thu Oct 29 22:12:03 2015
New Revision: 290167
URL: https://svnweb.freebsd.org/changeset/base/290167

Log:
  Fix LEAVE_HYP macro: spsr is not guaranteed to contain valid value at this
  point, e.g. on RaspberryPi 2 when control is passed from loader to kernel
  it contains garbage. So we use cpsr as a base for new cpsr value: if we
  have reached this point it means current value is OK
  
  Reviewed by:	andrew

Modified:
  head/sys/arm/arm/locore-v6.S

Modified: head/sys/arm/arm/locore-v6.S
==============================================================================
--- head/sys/arm/arm/locore-v6.S	Thu Oct 29 21:40:32 2015	(r290166)
+++ head/sys/arm/arm/locore-v6.S	Thu Oct 29 22:12:03 2015	(r290167)
@@ -74,9 +74,11 @@ __FBSDID("$FreeBSD$");
 	teq	r0, #(PSR_HYP32_MODE) /* Hyp Mode? */			;\
 	bne	1f							;\
 	/* Ensure that IRQ, FIQ and Aborts will be disabled after eret */ ;\
-	mrs	r0, spsr						;\
+	mrs	r0, cpsr						;\
+	bic	r0, r0, #(PSR_MODE)					;\
+	orr	r0, r0, #(PSR_SVC32_MODE)				;\
 	orr	r0, r0, #(PSR_I | PSR_F | PSR_A)			;\
-	msr	spsr, r0						;\
+	msr	spsr_cxsf, r0						;\
 	/* Exit hypervisor mode */					;\
 	adr	lr, 1f							;\
 	MSR_ELR_HYP(14)							;\



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201510292212.t9TMC35I058229>