Skip to contentSkip to conversation

ppc32: ppc_sys fixes for 8xx and 82xx

PATCH In review Vitaly Bordug 4 participants 5 messages Oct 11, 2005 – Oct 20, 2005

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ppc32: ppc_sys fixes for 8xx and 82xx

This patch fixes a numbers of issues regarding to that both 8xx and 82xx began to use ppc_sys model:
- Platform is now identified by default deviceless SOC, if no
BOARD_CHIP_NAME is specified in the bard-specific header. For the list of supported names refer to (arch/ppc/syslib/) mpc8xx_sys.c and mpc82xx_sys.c for 8xx and 82xx respectively.
- Fixed a bug in identification by name - if the name was not found, it
returned -1 instead of default deviceless ppc_spec.
- fixed devices amount in the 8xx platform system descriptions

Signature · 2 lines
Sincerely,
Vitaly
arch/ppc/platforms/fads.h +2 -0
@@ -25,6 +25,8 @@
 
 #if defined(CONFIG_MPC86XADS)
 
+#define BOARD_CHIP_NAME "MPC86X"
+
 /* U-Boot maps BCSR to 0xff080000 */
 #define BCSR_ADDR		((uint)0xff080000)
 
arch/ppc/platforms/mpc885ads.h +2 -0
@@ -88,5 +88,7 @@
 #define SICR_ENET_MASK	((uint)0x00ff0000)
 #define SICR_ENET_CLKRT	((uint)0x002c0000)
 
+#define BOARD_CHIP_NAME "MPC885"
+
 #endif /* __ASM_MPC885ADS_H__ */
 #endif /* __KERNEL__ */
arch/ppc/syslib/m8260_setup.c +3 -0
@@ -62,6 +62,9 @@ m8260_setup_arch(void)
 	if (initrd_start)
 		ROOT_DEV = Root_RAM0;
 #endif
+	
+	identify_ppc_sys_by_name_and_id(BOARD_CHIP_NAME, in_be32(CPM_MAP_ADDR + CPM_IMMR_OFFSET));
+	
 	m82xx_board_setup();
 }
 
arch/ppc/syslib/m8xx_setup.c +3 -1
@@ -403,7 +403,9 @@ platform_init(unsigned long r3, unsigned
 		*(char *)(r7+KERNELBASE) = 0;
 		strcpy(cmd_line, (char *)(r6+KERNELBASE));
 	}
-
+	
+	identify_ppc_sys_by_name(BOARD_CHIP_NAME);
+	
 	ppc_md.setup_arch		= m8xx_setup_arch;
 	ppc_md.show_percpuinfo		= m8xx_show_percpuinfo;
 	ppc_md.irq_canonicalize	= NULL;
arch/ppc/syslib/mpc8xx_sys.c +2 -2
@@ -24,7 +24,7 @@ struct ppc_sys_spec ppc_sys_specs[] = {
 		.ppc_sys_name	= "MPC86X",
 		.mask 		= 0xFFFFFFFF,
 		.value 		= 0x00000000,
-		.num_devices	= 2,
+		.num_devices	= 7,
 		.device_list	= (enum ppc_sys_devices[])
 		{
 			MPC8xx_CPM_FEC1,
@@ -40,7 +40,7 @@ struct ppc_sys_spec ppc_sys_specs[] = {
 		.ppc_sys_name	= "MPC885",
 		.mask 		= 0xFFFFFFFF,
 		.value 		= 0x00000000,
-		.num_devices	= 3,
+		.num_devices	= 8,
 		.device_list	= (enum ppc_sys_devices[])
 		{
 			MPC8xx_CPM_FEC1,
arch/ppc/syslib/ppc_sys.c +3 -0
@@ -69,6 +69,9 @@ static int __init find_chip_by_name_and_
 			matched[j++] = i;
 		i++;
 	}
+
+	ret = i;
+
 	if (j != 0) {
 		for (i = 0; i < j; i++) {
 			if ((ppc_sys_specs[matched[i]].mask & id) ==
include/asm-ppc/cpm2.h +3 -0
@@ -1087,6 +1087,9 @@ typedef struct im_idma {
 #define SCCR_PCIDF_MSK	0x00000078	/* PCI division factor	*/
 #define SCCR_PCIDF_SHIFT 3
 
+#ifndef CPM_IMMR_OFFSET
+#define CPM_IMMR_OFFSET	0x101a8
+#endif
 
 #endif /* __CPM2__ */
 #endif /* __KERNEL__ */
include/asm-ppc/mpc8260.h +4 -0
@@ -92,6 +92,10 @@ enum ppc_sys_devices {
 extern unsigned char __res[];
 #endif
 
+#ifndef BOARD_CHIP_NAME
+#define BOARD_CHIP_NAME ""
+#endif
+
 #endif /* CONFIG_8260 */
 #endif /* !__ASM_PPC_MPC8260_H__ */
 #endif /* __KERNEL__ */
include/asm-ppc/mpc8xx.h +4 -0
@@ -113,6 +113,10 @@ enum ppc_sys_devices {
 	MPC8xx_CPM_USB,
 };
 
+#ifndef BOARD_CHIP_NAME
+#define BOARD_CHIP_NAME ""
+#endif
+
 #endif /* !__ASSEMBLY__ */
 #endif /* CONFIG_8xx */
 #endif /* __CONFIG_8xx_DEFS */
#1 lore raw

Hi Vitaly,

Quoted 9 lines

This patch fixes a numbers of issues regarding to that both 8xx and 82xx began to use ppc_sys model:
- Platform is now identified by default deviceless SOC, if no
BOARD_CHIP_NAME is specified in the bard-specific header. For the list of supported names refer to (arch/ppc/syslib/) mpc8xx_sys.c and mpc82xx_sys.c for 8xx and 82xx respectively.
- Fixed a bug in identification by name - if the name was not found, it returned -1 instead of default deviceless ppc_spec.
- fixed devices amount in the 8xx platform system descriptions

Patch looks good.

For 8xx, I was wondering if the PARTNUM field of the IMMR (section 10.4.1 of MPC860UM.pdf) does have meaningful information which could be used to identify the CPU.

#2 lore raw
Quoted 3 lines · Marcelo Tosatti

For 8xx, I was wondering if the PARTNUM field of the IMMR (section 10.4.1 of MPC860UM.pdf) does have meaningful information which could be used to identify the CPU.

It has meaningful information, but not the way you want to use it :-) The PARTNUM/MASKNUM is only useful once you know the type of processor (like 823, 850, 885, etc) The PARTNUM is only useful within the "family." For example, the 860 and 880 are two different families, and will contain the similar PARTNUM values through their life. I believe it's tied to the fabrication process.

You may as well stop looking for an easy (or possibly any) way to differentiate these parts in software, but due to they way they are fabricated, I don't think that's ever going to happen. :-)

	-- Dan
#3 lore raw
Quoted 7 lines · Dan Malek
Quoted 3 lines · Marcelo Tosatti

For 8xx, I was wondering if the PARTNUM field of the IMMR (section 10.4.1 of MPC860UM.pdf) does have meaningful information which could be used to identify the CPU.

Quoted 7 lines

It has meaningful information, but not the way you want to use it :-) The PARTNUM/MASKNUM is only useful once you know the type of processor (like 823, 850, 885, etc) The PARTNUM is only useful within the "family." For example, the 860 and 880 are two different families, and will contain the similar PARTNUM values through their life. I believe it's tied to the fabrication process.

I don't understand in what way Marcelo wants to use it, but from my understanding and a quick look of the Freescale product summary pages it's the opposite of what you're indicating. I believe the PARTNUM identifies the family not the part. You can't tell an 885 from an 870 (IMMR contains 0x09xx). Similarly you can't tell an 860EN from an 860T (IMMR contains 0x00xx or 0x05xx).
But you can tell an 860 from an 880 which are in different families. Note that it's not always obvious which parts are in the same family.

Quoted 4 lines

You may as well stop looking for an easy (or possibly any) way to differentiate these parts in software, but due to they way they are fabricated, I don't think that's ever going to happen. :-)

Also just because a feature isn't supposed to be present doesn't mean it's not.
We bought 860EN (4 SCCs) parts but Motorola accidentily shipped us 860DE (2 SCCs) parts. We installed, tested and shipped a few of these parts using all 4 SCCs without problem. It wasn't until another unrelated problem occurred that we noticed that we had used a tray of the wrong part.

Chris

#4 lore raw
Quoted 3 lines · Christopher Cordahi

I don't understand in what way Marcelo wants to use it, but from my understanding and a quick look of the Freescale product summary pages it's the opposite of what you're indicating.

OK. I can't find an up to date one any more. From the processor manuals there are overlapping numbers (unless that was just an oversight during editing).

Quoted 2 lines

Also just because a feature isn't supposed to be present doesn't mean it's not.

Yeah, some people have tried probing peripherals to discover the type of processor, but that was quickly proven to not work.

Thanks.

	-- Dan