Date: Tue, 10 May 2016 18:00:37 +0000 (UTC) From: Emmanuel Vadot <manu@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r299380 - head/sys/arm/allwinner Message-ID: <201605101800.u4AI0bN7014035@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: manu Date: Tue May 10 18:00:37 2016 New Revision: 299380 URL: https://svnweb.freebsd.org/changeset/base/299380 Log: Merge a20_mp_start_ap and a31_mp_start_ap into one function. This function works with all smp non-multicluster allwinner SoC (A20, A31, A31S and H3). Approved by: cognet (mentor) Differential Revision: https://reviews.freebsd.org/D6269 Modified: head/sys/arm/allwinner/allwinner_machdep.c head/sys/arm/allwinner/aw_mp.c head/sys/arm/allwinner/aw_mp.h Modified: head/sys/arm/allwinner/allwinner_machdep.c ============================================================================== --- head/sys/arm/allwinner/allwinner_machdep.c Tue May 10 17:51:17 2016 (r299379) +++ head/sys/arm/allwinner/allwinner_machdep.c Tue May 10 18:00:37 2016 (r299380) @@ -167,7 +167,7 @@ static platform_method_t a20_methods[] = PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init), #ifdef SMP - PLATFORMMETHOD(platform_mp_start_ap, a20_mp_start_ap), + PLATFORMMETHOD(platform_mp_start_ap, aw_mp_start_ap), PLATFORMMETHOD(platform_mp_setmaxid, aw_mp_setmaxid), #endif PLATFORMMETHOD_END, @@ -182,7 +182,7 @@ static platform_method_t a31_methods[] = PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init), #ifdef SMP - PLATFORMMETHOD(platform_mp_start_ap, a31_mp_start_ap), + PLATFORMMETHOD(platform_mp_start_ap, aw_mp_start_ap), PLATFORMMETHOD(platform_mp_setmaxid, aw_mp_setmaxid), #endif PLATFORMMETHOD_END, @@ -197,7 +197,7 @@ static platform_method_t a31s_methods[] PLATFORMMETHOD(platform_devmap_init, allwinner_devmap_init), #ifdef SMP - PLATFORMMETHOD(platform_mp_start_ap, a31_mp_start_ap), + PLATFORMMETHOD(platform_mp_start_ap, aw_mp_start_ap), PLATFORMMETHOD(platform_mp_setmaxid, aw_mp_setmaxid), #endif PLATFORMMETHOD_END, Modified: head/sys/arm/allwinner/aw_mp.c ============================================================================== --- head/sys/arm/allwinner/aw_mp.c Tue May 10 17:51:17 2016 (r299379) +++ head/sys/arm/allwinner/aw_mp.c Tue May 10 18:00:37 2016 (r299380) @@ -107,12 +107,28 @@ aw_mp_setmaxid(platform_t plat) mp_maxid = ncpu - 1; } -static void -aw_common_mp_start_ap(bus_space_handle_t cpucfg, bus_space_handle_t prcm) +void +aw_mp_start_ap(platform_t plat) { - int i, j; + bus_space_handle_t cpucfg; + bus_space_handle_t prcm; + int i, j, soc_family; uint32_t val; + soc_family = allwinner_soc_family(); + if (soc_family == ALLWINNERSOC_SUN7I) { + if (bus_space_map(fdtbus_bs_tag, A20_CPUCFG_BASE, CPUCFG_SIZE, + 0, &cpucfg) != 0) + panic("Couldn't map the CPUCFG\n"); + } else { + if (bus_space_map(fdtbus_bs_tag, CPUCFG_BASE, CPUCFG_SIZE, + 0, &cpucfg) != 0) + panic("Couldn't map the CPUCFG\n"); + if (bus_space_map(fdtbus_bs_tag, PRCM_BASE, PRCM_SIZE, 0, + &prcm) != 0) + panic("Couldn't map the PRCM\n"); + } + dcache_wbinv_poc_all(); bus_space_write_4(fdtbus_bs_tag, cpucfg, CPUCFG_P_REG0, @@ -141,7 +157,7 @@ aw_common_mp_start_ap(bus_space_handle_t /* Release power clamp */ for (i = 1; i < mp_ncpus; i++) for (j = 0; j <= CPU_PWR_CLAMP_STEPS; j++) { - if (prcm) { + if (soc_family != ALLWINNERSOC_SUN7I) { bus_space_write_4(fdtbus_bs_tag, prcm, CPU_PWR_CLAMP(i), 0xff >> j); } else { @@ -152,7 +168,7 @@ aw_common_mp_start_ap(bus_space_handle_t DELAY(10000); /* Clear power-off gating */ - if (prcm) { + if (soc_family != ALLWINNERSOC_SUN7I) { val = bus_space_read_4(fdtbus_bs_tag, prcm, CPU_PWROFF); for (i = 0; i < mp_ncpus; i++) val &= ~(1 << i); @@ -179,39 +195,8 @@ aw_common_mp_start_ap(bus_space_handle_t armv7_sev(); bus_space_unmap(fdtbus_bs_tag, cpucfg, CPUCFG_SIZE); -} - -void -a20_mp_start_ap(platform_t plat) -{ - bus_space_handle_t cpucfg; - - if (bus_space_map(fdtbus_bs_tag, A20_CPUCFG_BASE, CPUCFG_SIZE, - 0, &cpucfg) != 0) - panic("Couldn't map the CPUCFG\n"); - - aw_common_mp_start_ap(cpucfg, 0); - armv7_sev(); - bus_space_unmap(fdtbus_bs_tag, cpucfg, CPUCFG_SIZE); -} - -void -a31_mp_start_ap(platform_t plat) -{ - bus_space_handle_t cpucfg; - bus_space_handle_t prcm; - - if (bus_space_map(fdtbus_bs_tag, CPUCFG_BASE, CPUCFG_SIZE, - 0, &cpucfg) != 0) - panic("Couldn't map the CPUCFG\n"); - if (bus_space_map(fdtbus_bs_tag, PRCM_BASE, PRCM_SIZE, 0, - &prcm) != 0) - panic("Couldn't map the PRCM\n"); - - aw_common_mp_start_ap(cpucfg, prcm); - armv7_sev(); - bus_space_unmap(fdtbus_bs_tag, cpucfg, CPUCFG_SIZE); - bus_space_unmap(fdtbus_bs_tag, prcm, PRCM_SIZE); + if (soc_family != ALLWINNERSOC_SUN7I) + bus_space_unmap(fdtbus_bs_tag, prcm, PRCM_SIZE); } static void Modified: head/sys/arm/allwinner/aw_mp.h ============================================================================== --- head/sys/arm/allwinner/aw_mp.h Tue May 10 17:51:17 2016 (r299379) +++ head/sys/arm/allwinner/aw_mp.h Tue May 10 18:00:37 2016 (r299380) @@ -29,8 +29,7 @@ #define _AW_MP_H_ void aw_mp_setmaxid(platform_t plat); -void a20_mp_start_ap(platform_t plat); -void a31_mp_start_ap(platform_t plat); +void aw_mp_start_ap(platform_t plat); void a83t_mp_start_ap(platform_t plat); #endif /* _AW_MP_H_ */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605101800.u4AI0bN7014035>