MPC85xx FCC and I2C platform device support
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;