svn commit: r299380 - head/sys/arm/allwinner
Emmanuel Vadot
manu at FreeBSD.org
Tue May 10 18:00:39 UTC 2016
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_ */
More information about the svn-src-all
mailing list