#### Auto-generated patch #### Date: Tue, 22 Mar 2005 15:23:37 -0500 Maintainer: Jason McMullan Summary: MPC85xx series CPU support Description: MPC85xx series CPU support ############################### --- linux-orig/arch/ppc/platforms/85xx/mpc85xx_devices.c +++ linux/arch/ppc/platforms/85xx/mpc85xx_devices.c @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include #include @@ -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; } --- linux-orig/arch/ppc/platforms/85xx/mpc85xx_sys.c +++ linux/arch/ppc/platforms/85xx/mpc85xx_sys.c @@ -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, }, --- linux-orig/include/linux/fsl_devices.h +++ linux/include/linux/fsl_devices.h @@ -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;