svn commit: r267129 - head/sys/arm/mv/armadaxp

Zbigniew Bodek zbb at FreeBSD.org
Thu Jun 5 21:35:11 UTC 2014


Author: zbb
Date: Thu Jun  5 21:35:10 2014
New Revision: 267129
URL: http://svnweb.freebsd.org/changeset/base/267129

Log:
  Fix broken SMP startup on Armada XP after r265694
  
  During Armada's platform_mp_start_ap(), mptramp code
  is being copied to the specific physical location (0xffff0000).
  Before r265694 the address to which the code should be copied
  was equal to the address of mpentry routine that followed the
  mptramp in locore.S. Now the mptramp end address should be
  exported and used as a copy limit.
  
  Reviewed by: gber

Modified:
  head/sys/arm/mv/armadaxp/armadaxp_mp.c
  head/sys/arm/mv/armadaxp/mptramp.S

Modified: head/sys/arm/mv/armadaxp/armadaxp_mp.c
==============================================================================
--- head/sys/arm/mv/armadaxp/armadaxp_mp.c	Thu Jun  5 21:12:41 2014	(r267128)
+++ head/sys/arm/mv/armadaxp/armadaxp_mp.c	Thu Jun  5 21:35:10 2014	(r267129)
@@ -97,8 +97,7 @@ platform_mp_init_secondary(void)
 }
 
 void mptramp(void);
-
-
+void mptramp_end(void);
 
 void
 platform_mp_start_ap(void)
@@ -116,7 +115,7 @@ platform_mp_start_ap(void)
 	pmap_kenter_nocache(smp_boot, 0xffff0000);
 	dst = (uint32_t *) smp_boot;
 
-	for (src = (uint32_t *)mptramp; src < (uint32_t *)mpentry;
+	for (src = (uint32_t *)mptramp; src < (uint32_t *)mptramp_end;
 	    src++, dst++) {
 		*dst = *src;
 	}

Modified: head/sys/arm/mv/armadaxp/mptramp.S
==============================================================================
--- head/sys/arm/mv/armadaxp/mptramp.S	Thu Jun  5 21:12:41 2014	(r267128)
+++ head/sys/arm/mv/armadaxp/mptramp.S	Thu Jun  5 21:35:10 2014	(r267129)
@@ -54,3 +54,5 @@ Lpmureg:
         .word   0xd0022124
 END(mptramp)
 
+	.global _C_LABEL(mptramp_end)
+_C_LABEL(mptramp_end):


More information about the svn-src-head mailing list