diff -Naur linux-2.6.30.4-orig/drivers/net/comcerto/comcerto_coredump.c linux-2.6.30.4-new/drivers/net/comcerto/comcerto_coredump.c
--- linux-2.6.30.4-orig/drivers/net/comcerto/comcerto_coredump.c	2009-08-17 20:00:53.941825000 -0700
+++ linux-2.6.30.4-new/drivers/net/comcerto/comcerto_coredump.c	2009-08-18 14:50:57.693274000 -0700
@@ -22,7 +22,7 @@
 #include <linux/vmalloc.h>
 #include <linux/proc_fs.h>
 #include <linux/module.h>
-#include <asm/arch/msp_ioctl.h>
+#include <mach/msp_ioctl.h>
 #include <asm/io.h>
 #include <asm/uaccess.h>
 
diff -Naur linux-2.6.30.4-orig/drivers/net/comcerto/comcerto_fpp.c linux-2.6.30.4-new/drivers/net/comcerto/comcerto_fpp.c
--- linux-2.6.30.4-orig/drivers/net/comcerto/comcerto_fpp.c	2009-08-17 20:00:53.985835000 -0700
+++ linux-2.6.30.4-new/drivers/net/comcerto/comcerto_fpp.c	2009-08-19 02:49:44.000000000 -0700
@@ -30,9 +30,9 @@
 #include <asm/irq.h>
 #include <asm/delay.h>
 #include <asm/mach/irq.h>
-#include <asm/arch/hardware.h>
-#include <asm/arch/memory.h>
-#include <asm/arch/debug.h>
+#include <mach/hardware.h>
+#include <mach/memory.h>
+#include <mach/debug.h>
 #include <asm/sizes.h>
 #include <asm/uaccess.h>
 
@@ -51,8 +51,26 @@
 const char comcerto_fpp_driver_version[] = "1.0";
 struct mutex fpp_mutex; 
 
-static struct device ghost_device = {
-	.bus_id = "ghost0",
+static void ghost_release(struct device *dev)
+{
+	printk("exit\n");
+}
+
+static struct device ghost_device;
+
+// PLEASE FIX ME
+static struct device *fpp_device;
+
+static int comcerto_fpp_probe(struct platform_device *pdev);
+static int comcerto_fpp_remove(struct platform_device *pdev);
+
+/* Structure for a device driver */
+static struct platform_driver comcerto_fpp_driver = {
+	.probe = comcerto_fpp_probe,
+	.remove = comcerto_fpp_remove,
+	.driver	= {
+		.name = "comcerto-fpp",
+	},
 };
 
 struct {
@@ -66,7 +84,7 @@
 extern int comcerto_eth_register_fpp_ops(t_fpp_ops * ops);
 extern void comcerto_eth_unregister_fpp_ops(void);
 extern int comcerto_fpp_register_event_cb(void *cb);
-
+extern int dci_kioctl (unsigned int cmd, unsigned int flag, struct sk_buff *skb);
 static void fpp_add_buffer(void *buffer)
 {
 	unsigned long flags;
@@ -124,13 +142,11 @@
  */
 int comcerto_fpp_register_event_cb(void *cb)
 {
-	struct comcerto_fpp *fpp = ghost_device.driver_data;
+	struct comcerto_fpp *fpp = dev_get_drvdata(fpp_device);
 
 	/* register FCI callback used for asynchrounous event */
 	fpp->event_cb = (FPP_EVENT_CB)cb;
 
-	//printk(KERN_INFO "FPP: comcerto_fpp_register_event_cb()\n");
-
 	return 0;
 }
 EXPORT_SYMBOL(comcerto_fpp_register_event_cb);
@@ -597,8 +613,16 @@
 			entry_point & 0xffff, entry_point >> 16,
 			stack_ptr & 0xffff, stack_ptr >> 16,
 			stacksize);
-
-	rc = dci_kioctl(DCI_KIOC_DEV_WRITE_MSG, 1, this_skb);         
+// 	{
+// 		u8* data;
+// 		int i=0;
+// 		data = this_skb->data;
+// 		printk("spawn task\n");
+// 	 	for(i=0;i<10;i++)
+// 			printk("%x ",*data++);
+// 		printk("\n");
+// 	}
+	rc = dci_kioctl(DCI_KIOC_DEV_WRITE_MSG, 1, this_skb);
 	if (rc)
 	{
 		printk(KERN_ERR "comcerto_fpp_SPAWN_TASK: dci_kioctl() failed\n");
@@ -798,7 +822,7 @@
 				goto err;
 			}
 
-			consistent_sync(ptr, FPP_SKB_SIZE, DMA_FROM_DEVICE);
+			dma_cache_maint(ptr, FPP_SKB_SIZE, DMA_FROM_DEVICE);
 
 //			printk(KERN_INFO "%d %d %lx %lx\n", total, i, (unsigned long)ptr,  virt_to_phys(ptr));
 
@@ -835,13 +859,14 @@
 	const struct firmware *fw_entry;
 	int rc = 0;
 
-	//printk(KERN_INFO "comcerto_fpp_init\n");
+	printk(KERN_INFO "comcerto_fpp_init %p\n", dev);
 
 	fpp = (struct comcerto_fpp *)kzalloc(sizeof(struct comcerto_fpp), GFP_KERNEL);
 	if (fpp == NULL) {
 		rc = -ENOMEM;
 		goto err0;
-	}	
+	}
+	fpp_device = dev;
 	dev_set_drvdata(dev,fpp);
 
 	if (request_firmware(&fw_entry,"fpp.axf", dev) !=0 ) {
@@ -852,6 +877,7 @@
 	
 	fpp->code_info.code = fw_entry->data;
 	fpp->code_info.size = fw_entry->size;
+
 	if (SDRAM_MSP_MEMORY_PHY) // MSP @ address 0x0
 		fpp->vectors_base = ioremap(0x00000000, 0x40);
 	else
@@ -866,6 +892,8 @@
 	rc = comcerto_fpp_download(fpp); 
 	if (rc)
 		goto err2;
+	
+	release_firmware(fw_entry);
 
 	rc = comcerto_fpp_start(fpp); 
 	if (rc)
@@ -876,16 +904,17 @@
 		goto err2;
 
 	fpp->irq= FPP_IRQ_EVENT;
+	mutex_init(&fpp_mutex);
+
 
 	tasklet_init(&fpp->event_tasklet, comcerto_fpp_tasklet, (unsigned long)fpp);
 	
-	rc = request_irq(fpp->irq , comcerto_fpp_interrupt, SA_SHIRQ, comcerto_fpp_driver_name, dev);
+	rc = request_irq(fpp->irq , comcerto_fpp_interrupt, IRQF_DISABLED, comcerto_fpp_driver_name, dev);
 	if (rc) {
 		printk(KERN_INFO "comcerto_fpp: failed to get the irq: %d\n", fpp->irq);
 		goto err2;
 	}
 
-	release_firmware(fw_entry);
 	return 0;
 
 err2:
@@ -896,6 +925,7 @@
 
 err0:
 	return rc;
+
 }
 
 /**
@@ -926,6 +956,35 @@
 
 	return 0;
 }
+static int comcerto_fpp_probe(struct platform_device *pdev)
+{
+	int rc =0;
+	printk("comcerto_fpp_probe\n");
+
+	rc = comcerto_fpp_init(&pdev->dev); 
+	if (rc)
+		goto err0;
+
+	rc = comcerto_fpp_register_to_eth(); 
+	if (rc)
+		goto err1;
+
+	return 0;
+
+err1:
+	comcerto_fpp_reset(&pdev->dev);
+
+err0:
+	return rc;
+}
+static int comcerto_fpp_remove(struct platform_device *pdev)
+{
+	printk("comcerto_fpp_remove\n");
+	comcerto_eth_unregister_fpp_ops();
+
+	comcerto_fpp_reset(&pdev->dev);
+	return 0;
+}
 
 /**
  * comcerto_fpp_module_init - 
@@ -937,10 +996,9 @@
 	int rc;
 
 	printk(KERN_INFO "comcerto_fpp_module_init\n");
-
-	device_initialize(&ghost_device);
-
-	mutex_init(&fpp_mutex);
+	dev_set_name(&ghost_device, "ghost0");
+	device_register(&ghost_device);
+	rc = platform_driver_register(&comcerto_fpp_driver);
 
 	rc = comcerto_fpp_init(&ghost_device); 
 	if (rc)
@@ -967,10 +1025,11 @@
  */
 static void __exit comcerto_fpp_module_exit(void)
 {
+#if 0
 	comcerto_eth_unregister_fpp_ops();
 
 	comcerto_fpp_reset(&ghost_device);
-
+#endif
 	printk(KERN_INFO "comcerto_fpp_module_exit\n");
 }
 
diff -Naur linux-2.6.30.4-orig/drivers/net/comcerto/comcerto_fpp.h linux-2.6.30.4-new/drivers/net/comcerto/comcerto_fpp.h
--- linux-2.6.30.4-orig/drivers/net/comcerto/comcerto_fpp.h	2009-08-17 20:00:53.997827000 -0700
+++ linux-2.6.30.4-new/drivers/net/comcerto/comcerto_fpp.h	2009-08-18 15:26:12.954525000 -0700
@@ -23,7 +23,7 @@
 
 #include <linux/firmware.h>
 #include <linux/elf.h>
-#include <asm/arch/debug.h>
+#include <mach/debug.h>
 #include <linux/netdevice.h>
 
 
diff -Naur linux-2.6.30.4-orig/drivers/net/comcerto/Makefile linux-2.6.30.4-new/drivers/net/comcerto/Makefile
--- linux-2.6.30.4-orig/drivers/net/comcerto/Makefile	2009-08-17 20:00:54.348827000 -0700
+++ linux-2.6.30.4-new/drivers/net/comcerto/Makefile	2009-08-18 14:19:39.980375000 -0700
@@ -2,6 +2,6 @@
 	obj-y += comcerto_eth.o
 	obj-$(CONFIG_ARCH_M821XX) += comcerto_gemac.o comcerto_gem_AL.o comcerto_mii.o comcerto_ethtool.o comcerto_sysfs.o
 endif
-#	obj-$(CONFIG_COMCERTO_FPP) += comcerto_fpp.o
+	obj-$(CONFIG_COMCERTO_FPP) += comcerto_fpp.o
 	obj-$(CONFIG_COMCERTO_VED) += comcerto_ved.o comcerto_smi_part.o comcerto_smi_queue.o comcerto_msp.o
-#	obj-$(CONFIG_COMCERTO_MSP_COREDUMP) += comcerto_coredump.o
+	obj-$(CONFIG_COMCERTO_MSP_COREDUMP) += comcerto_coredump.o
