From 4194b3668a93eee18dd1f7eb1309ca7b05003aa7 Mon Sep 17 00:00:00 2001 From: Kumar Gala Date: Tue, 12 Jan 2010 11:42:43 -0600 Subject: Add support to disable cpu's in multicore processors Add a disable sub-command to the cpu command that allows for disabling cores in multicore processors. This can be useful for systems that are using multicore chips but aren't utilizing all the cores as a way to reduce power and possibly improve performance. Also updated an added missing copyright. Signed-off-by: Kumar Gala --- cpu/mpc85xx/mp.c | 8 +++++++- cpu/mpc86xx/mp.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) (limited to 'cpu') diff --git a/cpu/mpc85xx/mp.c b/cpu/mpc85xx/mp.c index 6530cb176b4..6ae7f0a72ca 100644 --- a/cpu/mpc85xx/mp.c +++ b/cpu/mpc85xx/mp.c @@ -1,5 +1,5 @@ /* - * Copyright 2008-2009 Freescale Semiconductor, Inc. + * Copyright 2008-2010 Freescale Semiconductor, Inc. * * See file CREDITS for list of people who contributed to this * project. @@ -68,6 +68,12 @@ int cpu_status(int nr) return 0; } +int cpu_disable(int nr) +{ + /* dummy function so common/cmd_mp.c will build */ + return 1; +} + static u8 boot_entry_map[4] = { 0, BOOT_ENTRY_PIR, diff --git a/cpu/mpc86xx/mp.c b/cpu/mpc86xx/mp.c index 2940673c7c7..ecdf2fb389b 100644 --- a/cpu/mpc86xx/mp.c +++ b/cpu/mpc86xx/mp.c @@ -1,3 +1,25 @@ +/* + * Copyright 2008-2010 Freescale Semiconductor, Inc. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + #include #include #include @@ -24,6 +46,12 @@ int cpu_status(int nr) return 0; } +int cpu_disable(int nr) +{ + /* dummy function so common/cmd_mp.c will build */ + return 1; +} + int cpu_release(int nr, int argc, char *argv[]) { /* dummy function so common/cmd_mp.c will build -- cgit v1.2.3 From c894852b7aa2ac5f04ca70a073f803aa665c3ec1 Mon Sep 17 00:00:00 2001 From: Kumar Gala Date: Tue, 12 Jan 2010 11:51:52 -0600 Subject: 86xx: Add support for 'cpu disable' command Support disabling of a core via user command 'cpu disable'. Signed-off-by: Kumar Gala --- cpu/mpc86xx/mp.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'cpu') diff --git a/cpu/mpc86xx/mp.c b/cpu/mpc86xx/mp.c index ecdf2fb389b..b4a0faacde0 100644 --- a/cpu/mpc86xx/mp.c +++ b/cpu/mpc86xx/mp.c @@ -48,8 +48,22 @@ int cpu_status(int nr) int cpu_disable(int nr) { - /* dummy function so common/cmd_mp.c will build */ - return 1; + volatile immap_t *immap = (immap_t *) CONFIG_SYS_CCSRBAR; + volatile ccsr_gur_t *gur = &immap->im_gur; + + switch (nr) { + case 0: + setbits_be32(&gur->devdisr, MPC86xx_DEVDISR_CPU0); + break; + case 1: + setbits_be32(&gur->devdisr, MPC86xx_DEVDISR_CPU1); + break; + default: + printf("Invalid cpu number for disable %d\n", nr); + return 1; + } + + return 0; } int cpu_release(int nr, int argc, char *argv[]) -- cgit v1.2.3 From a9c3ac78d81d7ff4fe239e292e11e0f78ac5d461 Mon Sep 17 00:00:00 2001 From: Kumar Gala Date: Tue, 12 Jan 2010 12:56:05 -0600 Subject: 85xx: Add support for 'cpu disable' command Support disabling of a core via user command 'cpu disable'. Signed-off-by: Kumar Gala --- cpu/mpc85xx/mp.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'cpu') diff --git a/cpu/mpc85xx/mp.c b/cpu/mpc85xx/mp.c index 6ae7f0a72ca..826bf32d4d5 100644 --- a/cpu/mpc85xx/mp.c +++ b/cpu/mpc85xx/mp.c @@ -68,11 +68,35 @@ int cpu_status(int nr) return 0; } +#ifdef CONFIG_FSL_CORENET +int cpu_disable(int nr) +{ + volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); + + setbits_be32(&gur->coredisrl, 1 << nr); + + return 0; +} +#else int cpu_disable(int nr) { - /* dummy function so common/cmd_mp.c will build */ - return 1; + volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); + + switch (nr) { + case 0: + setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_CPU0); + break; + case 1: + setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_CPU1); + break; + default: + printf("Invalid cpu number for disable %d\n", nr); + return 1; + } + + return 0; } +#endif static u8 boot_entry_map[4] = { 0, -- cgit v1.2.3