diff mbox

[U-Boot] powerpc/mpc85xx: Enabling CPC conditionally based on hwconfig options

Message ID 1404281655-31238-1-git-send-email-shaveta@freescale.com
State Accepted
Delegated to: York Sun
Headers show

Commit Message

Shaveta Leekha July 2, 2014, 6:14 a.m. UTC
If hwconfig does not contains "en_cpc" then by default all cpcs are enabled
If this config is defined then only those individual cpcs which are defined
in the subargument of "en_cpc" will be enabled e.g en_cpc:cpc1,cpc2; (this
will enable cpc1 and cpc2) or en_cpc:cpc2; (this enables just cpc2)

Signed-off-by: Shaveta Leekha <shaveta@freescale.com>
Signed-off-by: Sandeep Singh <Sandeep@freescale.com>
---
 arch/powerpc/cpu/mpc85xx/cpu_init.c |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

Comments

York Sun Aug. 6, 2014, 5:33 p.m. UTC | #1
On 07/01/2014 11:14 PM, Shaveta Leekha wrote:
> If hwconfig does not contains "en_cpc" then by default all cpcs are enabled
> If this config is defined then only those individual cpcs which are defined
> in the subargument of "en_cpc" will be enabled e.g en_cpc:cpc1,cpc2; (this
> will enable cpc1 and cpc2) or en_cpc:cpc2; (this enables just cpc2)
> 

What's the user's case for enabling selected CPC?

York
Shaveta Leekha Aug. 7, 2014, 7:39 a.m. UTC | #2
Hi York,

This change was required to provide the flexibility of enabling DDRC1/CPC1 by
SC3900/DSP core as DDRC1 is used by Starcore. SC enables CPC1 as per their requirement.
PPC core use DDRC2, so it enables DDRC2/CPC2.

Do you suggest mentioning it in the commit message also?

Thanks and Regards,
Shaveta

-----Original Message-----
From: Sun York-R58495 
Sent: Wednesday, August 06, 2014 11:04 PM
To: Leekha Shaveta-B20052; u-boot@lists.denx.de
Cc: Wood Scott-B07421; Singh Sandeep-B37400
Subject: Re: [PATCH] powerpc/mpc85xx: Enabling CPC conditionally based on hwconfig options

On 07/01/2014 11:14 PM, Shaveta Leekha wrote:
> If hwconfig does not contains "en_cpc" then by default all cpcs are 
> enabled If this config is defined then only those individual cpcs 
> which are defined in the subargument of "en_cpc" will be enabled e.g 
> en_cpc:cpc1,cpc2; (this will enable cpc1 and cpc2) or en_cpc:cpc2; 
> (this enables just cpc2)
> 

What's the user's case for enabling selected CPC?

York
York Sun Aug. 20, 2014, 7:37 p.m. UTC | #3
On 07/01/2014 11:14 PM, Shaveta Leekha wrote:
> If hwconfig does not contains "en_cpc" then by default all cpcs are enabled
> If this config is defined then only those individual cpcs which are defined
> in the subargument of "en_cpc" will be enabled e.g en_cpc:cpc1,cpc2; (this
> will enable cpc1 and cpc2) or en_cpc:cpc2; (this enables just cpc2)
> 
> Signed-off-by: Shaveta Leekha <shaveta@freescale.com>
> Signed-off-by: Sandeep Singh <Sandeep@freescale.com>
> ---

Applied to u-boot-mpc85xx master branch, awaiting for upstream.

York
diff mbox

Patch

diff --git a/arch/powerpc/cpu/mpc85xx/cpu_init.c b/arch/powerpc/cpu/mpc85xx/cpu_init.c
index 78316a6..ecde00b 100644
--- a/arch/powerpc/cpu/mpc85xx/cpu_init.c
+++ b/arch/powerpc/cpu/mpc85xx/cpu_init.c
@@ -254,11 +254,38 @@  static void enable_tdm_law(void)
 static void enable_cpc(void)
 {
 	int i;
+	int ret;
 	u32 size = 0;
 
 	cpc_corenet_t *cpc = (cpc_corenet_t *)CONFIG_SYS_FSL_CPC_ADDR;
+	char buffer[HWCONFIG_BUFFER_SIZE];
+	char cpc_subarg[16];
+	bool have_hwconfig = false;
+	int cpc_args = 0;
+
+	/*
+	 * Extract hwconfig from environment since environmen
+	 * is not setup properly yet
+	 */
+	ret = getenv_f("hwconfig", buffer, sizeof(buffer));
+	if (ret > 0) {
+		/*
+		 * If "en_cpc" is not defined in hwconfig then by default all
+		 * cpcs are enable. If this config is defined then individual
+		 * cpcs which have to be enabled should also be defined.
+		 * e.g en_cpc:cpc1,cpc2;
+		 */
+		if (hwconfig_f("en_cpc", buffer))
+			have_hwconfig = true;
+	}
 
 	for (i = 0; i < CONFIG_SYS_NUM_CPC; i++, cpc++) {
+		if (have_hwconfig) {
+			sprintf(cpc_subarg, "cpc%u", i + 1);
+			cpc_args = hwconfig_sub_f("en_cpc", cpc_subarg, buffer);
+			if (cpc_args == 0)
+				continue;
+		}
 		u32 cpccfg0 = in_be32(&cpc->cpccfg0);
 		size += CPC_CFG0_SZ_K(cpccfg0);