Skip to contentSkip to conversation

MPC85xx FCC and I2C platform device support

PATCH New Jason McMullan 1 participant 1 message Mar 22, 2005

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 MPC85xx FCC and I2C platform device support

Adds platform support for default FCC mac addresses/phy information, and I2C param info

Signature · 2 lines
Jason McMullan <[email protected]>
TimeSys Corporation

#### Auto-generated patch ####

Date:        Tue, 22 Mar 2005 15:23:37 -0500
Maintainer:  Jason McMullan <[email protected]>
Summary:     MPC85xx series CPU support
Description: MPC85xx series CPU support

###############################

arch/ppc/platforms/85xx/mpc85xx_devices.c +68 -16
@@ -19,6 +19,8 @@
 #include <linux/serial_8250.h>
 #include <linux/fsl_devices.h>
 #include <asm/mpc85xx.h>
+#include <asm/cpm2.h>
+#include <asm/immap_cpm2.h>
 #include <asm/irq.h>
 #include <asm/ppc_sys.h>
 
@@ -61,8 +63,26 @@
 		.iotype		= UPIO_MEM,
 		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ,
 	},
+	[2] = {
+		.flags = 0
+	}
 };
 
+static struct fcc_platform_data fcc_platform_data[] = {
+	[0] = { 
+		.mac_addr = { 0x90, 0x00, 0x00, 0x00, 0x00, 0x00 },
+	},
+	[1] = {
+		.mac_addr = { 0x90, 0x00, 0x00, 0x00, 0x00, 0x01 },
+	},
+	[2] = {
+		.mac_addr = { 0x90, 0x00, 0x00, 0x00, 0x00, 0x02 },
+	}
+};
+
+#define CPM2_OFFSET(t)	((void *)(&((cpm2_map_t *)NULL)->t)-NULL)
+#define CPM2_END(t)	(CPM2_OFFSET(t)+(sizeof(((cpm2_map_t *)NULL)->t))-1)
+
 struct platform_device ppc_sys_platform_devices[] = {
 	[MPC85xx_TSEC1] = {
 		.name = "fsl-gianfar",
@@ -284,16 +304,22 @@
 	[MPC85xx_CPM_FCC1] = {
 		.name = "fsl-cpm-fcc",
 		.id	= 1,
-		.num_resources	 = 3,
+		.num_resources	 = 4,
+		.dev.platform_data = &fcc_platform_data[0],
 		.resource = (struct resource[]) {
 			{
-				.start	= 0x91300,
-				.end	= 0x9131F,
+				.start	= CPM2_OFFSET(im_fcc[0]),
+				.end	= CPM2_END(im_fcc[0]),
+				.flags	= IORESOURCE_MEM,
+			},
+			{
+				.start	= CPM2_OFFSET(im_fcc_c[0]),
+				.end	= CPM2_END(im_fcc_c[0]),
 				.flags	= IORESOURCE_MEM,
 			},
 			{
-				.start	= 0x91380,
-				.end	= 0x9139F,
+				.start	= CPM2_OFFSET(im_dprambase[PROFF_FCC1+0x000]),
+				.end	= CPM2_OFFSET(im_dprambase[PROFF_FCC1+0x000])+0xff,
 				.flags	= IORESOURCE_MEM,
 			},
 			{
@@ -306,16 +332,22 @@
 	[MPC85xx_CPM_FCC2] = {
 		.name = "fsl-cpm-fcc",
 		.id	= 2,
-		.num_resources	 = 3,
+		.num_resources	 = 4,
+		.dev.platform_data = &fcc_platform_data[1],
 		.resource = (struct resource[]) {
 			{
-				.start	= 0x91320,
-				.end	= 0x9133F,
+				.start	= CPM2_OFFSET(im_fcc[1]),
+				.end	= CPM2_END(im_fcc[1]),
+				.flags	= IORESOURCE_MEM,
+			},
+			{
+				.start	= CPM2_OFFSET(im_fcc_c[1]),
+				.end	= CPM2_END(im_fcc_c[1]),
 				.flags	= IORESOURCE_MEM,
 			},
 			{
-				.start	= 0x913A0,
-				.end	= 0x913CF,
+				.start	= CPM2_OFFSET(im_dprambase[PROFF_FCC1+0x100]),
+				.end	= CPM2_OFFSET(im_dprambase[PROFF_FCC1+0x100])+0xff,
 				.flags	= IORESOURCE_MEM,
 			},
 			{
@@ -328,16 +360,22 @@
 	[MPC85xx_CPM_FCC3] = {
 		.name = "fsl-cpm-fcc",
 		.id	= 3,
-		.num_resources	 = 3,
+		.num_resources	 = 4,
+		.dev.platform_data = &fcc_platform_data[2],
 		.resource = (struct resource[]) {
 			{
-				.start	= 0x91340,
-				.end	= 0x9135F,
+				.start	= CPM2_OFFSET(im_fcc[2]),
+				.end	= CPM2_END(im_fcc[2]),
+				.flags	= IORESOURCE_MEM,
+			},
+			{
+				.start	= CPM2_OFFSET(im_fcc_c[2]),
+				.end	= CPM2_END(im_fcc_c[2]),
 				.flags	= IORESOURCE_MEM,
 			},
 			{
-				.start	= 0x913D0,
-				.end	= 0x913FF,
+				.start	= CPM2_OFFSET(im_dprambase[PROFF_FCC1+0x200]),
+				.end	= CPM2_OFFSET(im_dprambase[PROFF_FCC1+0x200])+0xff,
 				.flags	= IORESOURCE_MEM,
 			},
 			{
@@ -350,14 +388,21 @@
 	[MPC85xx_CPM_I2C] = {
 		.name = "fsl-cpm-i2c",
 		.id	= 1,
-		.num_resources	 = 2,
+		.num_resources	 = 3,
 		.resource = (struct resource[]) {
 			{
+				.name	= "i2c",
 				.start	= 0x91860,
 				.end	= 0x918BF,
 				.flags	= IORESOURCE_MEM,
 			},
 			{
+				.name	= "iic",
+				.start	= 0,
+				.end	= 0,
+				.flags  = 0,
+			},
+			{
 				.start	= SIU_INT_I2C,
 				.end	= SIU_INT_I2C,
 				.flags	= IORESOURCE_IRQ,
@@ -539,6 +584,13 @@
 
 static int __init mach_mpc85xx_fixup(struct platform_device *pdev)
 {
+	if (strcmp(pdev->name,"fsl-cpm-i2c")==0) {
+		uint16_t i2c_dpram = *(uint16_t *)cpm_dpram_addr(PROFF_I2C_BASE);
+		printk(KERN_INFO "%s: Relocated to 0x%.4x\n",pdev->name,i2c_dpram);
+		pdev->resource[1].start = CPM2_OFFSET(im_dprambase[i2c_dpram]);
+		pdev->resource[1].end = CPM2_OFFSET(im_dprambase[i2c_dpram])+sizeof(iic_t)-1;
+		pdev->resource[1].flags = IORESOURCE_MEM;
+	}
 	ppc_sys_fixup_mem_resource(pdev, CCSRBAR);
 	return 0;
 }
arch/ppc/platforms/85xx/mpc85xx_sys.c +4 -4
@@ -80,7 +80,7 @@
 		.ppc_sys_name	= "MPC8555",
 		.mask 		= 0xFFFF0000,
 		.value 		= 0x80710000,
-		.num_devices	= 20,
+		.num_devices	= 19,
 		.device_list	= (enum ppc_sys_devices[])
 		{
 			MPC85xx_TSEC1, MPC85xx_TSEC2, MPC85xx_IIC1,
@@ -88,7 +88,7 @@
 			MPC85xx_PERFMON, MPC85xx_DUART,
 			MPC85xx_CPM_SPI, MPC85xx_CPM_I2C, MPC85xx_CPM_SCC1,
 			MPC85xx_CPM_SCC2, MPC85xx_CPM_SCC3,
-			MPC85xx_CPM_FCC1, MPC85xx_CPM_FCC2, MPC85xx_CPM_FCC3,
+			MPC85xx_CPM_FCC1, MPC85xx_CPM_FCC2,
 			MPC85xx_CPM_SMC1, MPC85xx_CPM_SMC2,
 			MPC85xx_CPM_USB,
 		},
@@ -97,7 +97,7 @@
 		.ppc_sys_name	= "MPC8555E",
 		.mask 		= 0xFFFF0000,
 		.value 		= 0x80790000,
-		.num_devices	= 21,
+		.num_devices	= 20,
 		.device_list	= (enum ppc_sys_devices[])
 		{
 			MPC85xx_TSEC1, MPC85xx_TSEC2, MPC85xx_IIC1,
@@ -105,7 +105,7 @@
 			MPC85xx_PERFMON, MPC85xx_DUART, MPC85xx_SEC2,
 			MPC85xx_CPM_SPI, MPC85xx_CPM_I2C, MPC85xx_CPM_SCC1,
 			MPC85xx_CPM_SCC2, MPC85xx_CPM_SCC3,
-			MPC85xx_CPM_FCC1, MPC85xx_CPM_FCC2, MPC85xx_CPM_FCC3,
+			MPC85xx_CPM_FCC1, MPC85xx_CPM_FCC2,
 			MPC85xx_CPM_SMC1, MPC85xx_CPM_SMC2,
 			MPC85xx_CPM_USB,
 		},
include/linux/fsl_devices.h +15 -0
@@ -65,6 +65,21 @@
 /* Flags in gianfar_platform_data */
 #define FSL_GIANFAR_BRD_HAS_PHY_INTR	0x00000001	/* if not set use a timer */
 
+struct fcc_platform_data {
+	/* device specific information */
+
+	/* board speficfic flags */
+	u32 mode;
+	u32 flags;
+	u32 phyid;
+	u8 mac_addr[6];
+};
+
+#define FSL_FCC_BRD_MODE_DISABLED	0
+#define FSL_FCC_BRD_MODE_ETHERNET	1
+
+#define FSL_FCC_BRD_FLAGS_HAS_PHY	0x00000001
+
 struct fsl_i2c_platform_data {
 	/* device specific information */
 	u32 device_flags;