From owner-svn-src-all@FreeBSD.ORG Thu Jun 5 21:37:05 2014 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id B4D80F4F; Thu, 5 Jun 2014 21:37:05 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 889A32D47; Thu, 5 Jun 2014 21:37:05 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.8/8.14.8) with ESMTP id s55Lb5iP098140; Thu, 5 Jun 2014 21:37:05 GMT (envelope-from zbb@svn.freebsd.org) Received: (from zbb@localhost) by svn.freebsd.org (8.14.8/8.14.8/Submit) id s55Lb5jB098138; Thu, 5 Jun 2014 21:37:05 GMT (envelope-from zbb@svn.freebsd.org) Message-Id: <201406052137.s55Lb5jB098138@svn.freebsd.org> From: Zbigniew Bodek Date: Thu, 5 Jun 2014 21:37:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r267130 - head/sys/arm/mv/armadaxp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Jun 2014 21:37:05 -0000 Author: zbb Date: Thu Jun 5 21:37:04 2014 New Revision: 267130 URL: http://svnweb.freebsd.org/changeset/base/267130 Log: Avoid using hard-coded SoC's register address in mptramp code for Armada XP SoC's registers base address may differ between boards (0xf1000000 or 0xd0000000). Therefore, in order to use the proper CPU Boot Address Redirect register during SMP initialization in mptramp the real, physical address has to be passed to mptramp based on the value from DT. 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:35:10 2014 (r267129) +++ head/sys/arm/mv/armadaxp/armadaxp_mp.c Thu Jun 5 21:37:04 2014 (r267130) @@ -37,6 +37,8 @@ #include #include +#include + #include #include #include @@ -98,12 +100,13 @@ platform_mp_init_secondary(void) void mptramp(void); void mptramp_end(void); +extern vm_offset_t mptramp_pmu_boot; void platform_mp_start_ap(void) { uint32_t reg, *src, *dst, cpu_num, div_val, cputype; - vm_offset_t smp_boot; + vm_offset_t smp_boot, pmu_boot_off; /* * Initialization procedure depends on core revision, * in this step CHIP ID is checked to choose proper procedure @@ -114,6 +117,12 @@ platform_mp_start_ap(void) smp_boot = kva_alloc(PAGE_SIZE); pmap_kenter_nocache(smp_boot, 0xffff0000); dst = (uint32_t *) smp_boot; + /* + * Set the PA of CPU0 Boot Address Redirect register used in + * mptramp according to the actual SoC registers' base address. + */ + pmu_boot_off = (CPU_PMU(0) - MV_BASE) + CPU_PMU_BOOT; + mptramp_pmu_boot = fdt_immr_pa + pmu_boot_off; for (src = (uint32_t *)mptramp; src < (uint32_t *)mptramp_end; src++, dst++) { Modified: head/sys/arm/mv/armadaxp/mptramp.S ============================================================================== --- head/sys/arm/mv/armadaxp/mptramp.S Thu Jun 5 21:35:10 2014 (r267129) +++ head/sys/arm/mv/armadaxp/mptramp.S Thu Jun 5 21:37:04 2014 (r267130) @@ -29,6 +29,8 @@ __FBSDID("$FreeBSD$"); +.global _C_LABEL(mptramp_pmu_boot) + ASENTRY_NP(mptramp) mov r0, #0 mcr p15, 0, r0, c7, c7, 0 @@ -44,14 +46,15 @@ ASENTRY_NP(mptramp) /* Read boot address for CPU */ mov r1, #0x100 mul r2, r0, r1 - ldr r1, Lpmureg + ldr r1, mptramp_pmu_boot add r0, r2, r1 ldr r1, [r0], #0x00 mov pc, r1 -Lpmureg: - .word 0xd0022124 +_C_LABEL(mptramp_pmu_boot): + .word 0x0 + END(mptramp) .global _C_LABEL(mptramp_end)