diff options
author | Waldemar Brodkorb <mail@waldemar-brodkorb.de> | 2014-01-16 07:27:47 +0100 |
---|---|---|
committer | Waldemar Brodkorb <mail@waldemar-brodkorb.de> | 2014-01-16 07:27:47 +0100 |
commit | 4e41871d718048a3ef18dfe10607745cc94b7fc4 (patch) | |
tree | 083e6c77ff9d9ce05b4555601a3841eea1cd96bf /target/m68k | |
parent | a238192abad686137d611f6d78bdba8d0b6672ba (diff) |
good bye cris, hardware is eol, latest toolchain is broken, qemu emulator support is bad, kernel needs patches for serial and network
Diffstat (limited to 'target/m68k')
-rw-r--r-- | target/m68k/patches/cris.patch | 5713 | ||||
-rw-r--r-- | target/m68k/sys-available/toolchain-m68k | 2 |
2 files changed, 1 insertions, 5714 deletions
diff --git a/target/m68k/patches/cris.patch b/target/m68k/patches/cris.patch deleted file mode 100644 index 0fefa318c..000000000 --- a/target/m68k/patches/cris.patch +++ /dev/null @@ -1,5713 +0,0 @@ -diff -Nur linux-2.6.36.orig/arch/cris/Kconfig linux-2.6.36/arch/cris/Kconfig ---- linux-2.6.36.orig/arch/cris/Kconfig 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/arch/cris/Kconfig 2010-11-15 17:57:17.000000000 +0100 -@@ -177,6 +177,12 @@ - help - Size of DRAM (decimal in MB) typically 2, 8 or 16. - -+config ETRAX_MTD_SIZE -+ hex "MTD size (hex)" -+ default "0x00800000" -+ help -+ Size of MTD device typically 4 or 8 MB. -+ - config ETRAX_VMEM_SIZE - int "Video memory size (dec, in MB)" - depends on ETRAX_ARCH_V32 && !ETRAXFS -@@ -282,7 +288,7 @@ - select MTD_CFI_AMDSTD - select MTD_JEDECPROBE if ETRAX_ARCH_V32 - select MTD_CHAR -- select MTD_BLOCK -+ select MTD_BLOCK_RO - select MTD_PARTITIONS - select MTD_CONCAT - select MTD_COMPLEX_MAPPINGS -@@ -671,6 +677,11 @@ - - source "drivers/ide/Kconfig" - -+#mysteriously part of this standard linux driver was removed from cris build! - info@crisos.org -+source "drivers/scsi/Kconfig" -+ -+source "drivers/media/Kconfig" -+ - source "drivers/net/Kconfig" - - source "drivers/i2c/Kconfig" -diff -Nur linux-2.6.36.orig/arch/cris/Makefile linux-2.6.36/arch/cris/Makefile ---- linux-2.6.36.orig/arch/cris/Makefile 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/arch/cris/Makefile 2010-11-15 17:57:17.000000000 +0100 -@@ -40,10 +40,10 @@ - - LD = $(CROSS_COMPILE)ld -mcrislinux - --OBJCOPYFLAGS := -O binary -R .note -R .comment -S -+OBJCOPYFLAGS := -O binary -R .bss -R .note -R .note.gnu.build-id -R .comment -S - - KBUILD_AFLAGS += -mlinux -march=$(arch-y) $(inc) --KBUILD_CFLAGS += -mlinux -march=$(arch-y) -pipe $(inc) -+KBUILD_CFLAGS += -mlinux -march=$(arch-y) -pipe -fno-peephole2 $(inc) - KBUILD_CPPFLAGS += $(inc) - - ifdef CONFIG_FRAME_POINTER -diff -Nur linux-2.6.36.orig/arch/cris/arch-v10/drivers/axisflashmap.c linux-2.6.36/arch/cris/arch-v10/drivers/axisflashmap.c ---- linux-2.6.36.orig/arch/cris/arch-v10/drivers/axisflashmap.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/arch/cris/arch-v10/drivers/axisflashmap.c 2010-11-15 17:57:17.000000000 +0100 -@@ -113,7 +113,7 @@ - - /* If no partition-table was found, we use this default-set. */ - #define MAX_PARTITIONS 7 --#define NUM_DEFAULT_PARTITIONS 3 -+#define NUM_DEFAULT_PARTITIONS 4 - - /* - * Default flash size is 2MB. CONFIG_ETRAX_PTABLE_SECTOR is most likely the -@@ -122,19 +122,24 @@ - */ - static struct mtd_partition axis_default_partitions[NUM_DEFAULT_PARTITIONS] = { - { -- .name = "boot firmware", -- .size = CONFIG_ETRAX_PTABLE_SECTOR, -+ .name = "kernel", -+ .size = 0x00, - .offset = 0 - }, - { -- .name = "kernel", -- .size = 0x200000 - (6 * CONFIG_ETRAX_PTABLE_SECTOR), -- .offset = CONFIG_ETRAX_PTABLE_SECTOR -+ .name = "rootfs", -+ .size = 0x200000 , -+ .offset = 0x200000 - }, - { -- .name = "filesystem", -- .size = 5 * CONFIG_ETRAX_PTABLE_SECTOR, -- .offset = 0x200000 - (5 * CONFIG_ETRAX_PTABLE_SECTOR) -+ .name = "cfgfs", -+ .size = 0x20000 , -+ .offset = CONFIG_ETRAX_MTD_SIZE - 0x20000 -+ }, -+ { -+ .name = "linux", -+ .size = CONFIG_ETRAX_MTD_SIZE - 0x20000, -+ .offset = 0 - } - }; - -@@ -281,6 +286,11 @@ - struct partitiontable_entry *ptable; - int use_default_ptable = 1; /* Until proven otherwise. */ - const char pmsg[] = " /dev/flash%d at 0x%08x, size 0x%08x\n"; -+ unsigned int kernel_part_size = 0; -+ unsigned char *flash_mem = (unsigned char*)(FLASH_CACHED_ADDR); -+ unsigned int flash_scan_count = 0; -+ const char *part_magic = "ACME_PART_MAGIC"; -+ unsigned int magic_len = strlen(part_magic); - - if (!(mymtd = flash_probe())) { - /* There's no reason to use this module if no flash chip can -@@ -292,6 +302,31 @@ - mymtd->name, mymtd->size); - axisflash_mtd = mymtd; - } -+ /* scan flash to findout where out partition starts */ -+ -+ printk(KERN_INFO "Scanning flash for end of kernel magic\n"); -+ for(flash_scan_count = 0; flash_scan_count < 100000; flash_scan_count++){ -+ if(strncmp(&flash_mem[flash_scan_count], part_magic, magic_len - 1) == 0) -+ { -+ kernel_part_size = flash_mem[flash_scan_count + magic_len ]; -+ kernel_part_size <<= 8; -+ kernel_part_size += flash_mem[flash_scan_count + magic_len + 2]; -+ kernel_part_size <<= 8; -+ kernel_part_size += flash_mem[flash_scan_count + magic_len + 1]; -+ kernel_part_size <<= 8; -+ kernel_part_size += flash_mem[flash_scan_count + magic_len + 3]; -+ printk(KERN_INFO "Kernel ends at 0x%.08X\n", kernel_part_size); -+ flash_scan_count = 1100000; -+ } -+ } -+ -+ -+ if(kernel_part_size){ -+ kernel_part_size = (kernel_part_size & 0xffff0000); -+ axis_default_partitions[0].size = kernel_part_size; -+ axis_default_partitions[1].size = mymtd->size - axis_default_partitions[0].size - axis_default_partitions[2].size; -+ axis_default_partitions[1].offset = axis_default_partitions[0].size; -+ } - - if (mymtd) { - mymtd->owner = THIS_MODULE; -@@ -360,21 +395,6 @@ - use_default_ptable = !ptable_ok; - } - -- if (romfs_in_flash) { -- /* Add an overlapping device for the root partition (romfs). */ -- -- axis_partitions[pidx].name = "romfs"; -- axis_partitions[pidx].size = romfs_length; -- axis_partitions[pidx].offset = romfs_start - FLASH_CACHED_ADDR; -- axis_partitions[pidx].mask_flags |= MTD_WRITEABLE; -- -- printk(KERN_INFO -- " Adding readonly flash partition for romfs image:\n"); -- printk(pmsg, pidx, axis_partitions[pidx].offset, -- axis_partitions[pidx].size); -- pidx++; -- } -- - #ifdef CONFIG_ETRAX_AXISFLASHMAP_MTD0WHOLE - if (mymtd) { - main_partition.size = mymtd->size; -@@ -397,36 +417,6 @@ - if (err) - panic("axisflashmap could not add MTD partitions!\n"); - } -- -- if (!romfs_in_flash) { -- /* Create an RAM device for the root partition (romfs). */ -- --#if !defined(CONFIG_MTD_MTDRAM) || (CONFIG_MTDRAM_TOTAL_SIZE != 0) || (CONFIG_MTDRAM_ABS_POS != 0) -- /* No use trying to boot this kernel from RAM. Panic! */ -- printk(KERN_EMERG "axisflashmap: Cannot create an MTD RAM " -- "device due to kernel (mis)configuration!\n"); -- panic("This kernel cannot boot from RAM!\n"); --#else -- struct mtd_info *mtd_ram; -- -- mtd_ram = kmalloc(sizeof(struct mtd_info), GFP_KERNEL); -- if (!mtd_ram) -- panic("axisflashmap couldn't allocate memory for " -- "mtd_info!\n"); -- -- printk(KERN_INFO " Adding RAM partition for romfs image:\n"); -- printk(pmsg, pidx, (unsigned)romfs_start, -- (unsigned)romfs_length); -- -- err = mtdram_init_device(mtd_ram, -- (void *)romfs_start, -- romfs_length, -- "romfs"); -- if (err) -- panic("axisflashmap could not initialize MTD RAM " -- "device!\n"); --#endif -- } - return err; - } - -diff -Nur linux-2.6.36.orig/arch/cris/arch-v10/drivers/ds1302.c linux-2.6.36/arch/cris/arch-v10/drivers/ds1302.c ---- linux-2.6.36.orig/arch/cris/arch-v10/drivers/ds1302.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/arch/cris/arch-v10/drivers/ds1302.c 2010-11-15 17:57:17.000000000 +0100 -@@ -22,6 +22,7 @@ - #include <linux/smp_lock.h> - #include <linux/bcd.h> - #include <linux/capability.h> -+#include <linux/device.h> - - #include <asm/uaccess.h> - #include <asm/system.h> -@@ -499,6 +500,10 @@ - return 0; - } - -+#ifdef CONFIG_SYSFS -+static struct class *rtc_class; -+#endif -+ - static int __init ds1302_register(void) - { - ds1302_init(); -@@ -507,6 +512,12 @@ - ds1302_name, RTC_MAJOR_NR); - return -1; - } -+ #ifdef CONFIG_SYSFS -+ rtc_class = class_create(THIS_MODULE, "rtc"); -+ class_device_create(rtc_class, NULL, MKDEV(RTC_MAJOR_NR, 0), -+ NULL, "rtc"); -+ #endif -+ - return 0; - - } -diff -Nur linux-2.6.36.orig/arch/cris/arch-v10/drivers/gpio.c linux-2.6.36/arch/cris/arch-v10/drivers/gpio.c ---- linux-2.6.36.orig/arch/cris/arch-v10/drivers/gpio.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/arch/cris/arch-v10/drivers/gpio.c 2010-11-15 17:57:17.000000000 +0100 -@@ -20,6 +20,7 @@ - #include <linux/poll.h> - #include <linux/init.h> - #include <linux/interrupt.h> -+#include <linux/device.h> - - #include <asm/etraxgpio.h> - #include <arch/svinto.h> -@@ -797,6 +798,10 @@ - - /* main driver initialization routine, called from mem.c */ - -+#ifdef CONFIG_SYSFS -+static struct class *gpio_class; -+#endif -+ - static int __init gpio_init(void) - { - int res; -@@ -810,6 +815,13 @@ - return res; - } - -+#ifdef CONFIG_SYSFS -+ gpio_class = class_create(THIS_MODULE, "gpio"); -+ device_create(gpio_class, NULL, MKDEV(GPIO_MAJOR, 0), NULL, "gpioa"); -+ device_create(gpio_class, NULL, MKDEV(GPIO_MAJOR, 1), NULL, "gpiob"); -+ device_create(gpio_class, NULL, MKDEV(GPIO_MAJOR, 2), NULL, "leds"); -+ device_create(gpio_class, NULL, MKDEV(GPIO_MAJOR, 3), NULL, "gpiog"); -+#endif - /* Clear all leds */ - #if defined (CONFIG_ETRAX_CSP0_LEDS) || defined (CONFIG_ETRAX_PA_LEDS) || defined (CONFIG_ETRAX_PB_LEDS) - CRIS_LED_NETWORK_SET(0); -diff -Nur linux-2.6.36.orig/arch/cris/arch-v10/lib/hw_settings.S linux-2.6.36/arch/cris/arch-v10/lib/hw_settings.S ---- linux-2.6.36.orig/arch/cris/arch-v10/lib/hw_settings.S 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/arch/cris/arch-v10/lib/hw_settings.S 2010-11-15 17:57:17.000000000 +0100 -@@ -58,3 +58,5 @@ - .dword R_PORT_PB_SET - .dword PB_SET_VALUE - .dword 0 ; No more register values -+ .ascii "ACME_PART_MAGIC" -+ .dword 0xdeadc0de -diff -Nur linux-2.6.36.orig/arch/cris/arch-v10/mm/init.c linux-2.6.36/arch/cris/arch-v10/mm/init.c ---- linux-2.6.36.orig/arch/cris/arch-v10/mm/init.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/arch/cris/arch-v10/mm/init.c 2010-11-15 17:57:17.000000000 +0100 -@@ -184,6 +184,9 @@ - - free_area_init_node(0, zones_size, PAGE_OFFSET >> PAGE_SHIFT, 0); - } -+void free_initrd_mem(unsigned long start, unsigned long end) -+{ -+} - - /* Initialize remaps of some I/O-ports. It is important that this - * is called before any driver is initialized. -diff -Nur linux-2.6.36.orig/arch/cris/boot/Makefile linux-2.6.36/arch/cris/boot/Makefile ---- linux-2.6.36.orig/arch/cris/boot/Makefile 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/arch/cris/boot/Makefile 2010-11-15 17:57:17.000000000 +0100 -@@ -5,7 +5,7 @@ - objcopyflags-$(CONFIG_ETRAX_ARCH_V10) += -R .note -R .comment - objcopyflags-$(CONFIG_ETRAX_ARCH_V32) += --remove-section=.bss --remove-section=.note.gnu.build-id - --OBJCOPYFLAGS = -O binary $(objcopyflags-y) -+#OBJCOPYFLAGS = -O binary $(objcopyflags-y) - - - subdir- := compressed rescue -@@ -17,7 +17,6 @@ - - $(obj)/compressed/vmlinux: $(obj)/Image FORCE - $(Q)$(MAKE) $(build)=$(obj)/compressed $@ -- $(Q)$(MAKE) $(build)=$(obj)/rescue $(obj)/rescue/rescue.bin - - $(obj)/zImage: $(obj)/compressed/vmlinux - @cp $< $@ -diff -Nur linux-2.6.36.orig/arch/cris/boot/compressed/Makefile linux-2.6.36/arch/cris/boot/compressed/Makefile ---- linux-2.6.36.orig/arch/cris/boot/compressed/Makefile 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/arch/cris/boot/compressed/Makefile 2010-11-15 17:57:17.000000000 +0100 -@@ -18,7 +18,7 @@ - OBJECTS-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o - OBJECTS-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o - OBJECTS= $(OBJECTS-y) $(obj)/misc.o --OBJCOPYFLAGS = -O binary --remove-section=.bss -+#OBJCOPYFLAGS = -O binary --remove-section=.bss - - quiet_cmd_image = BUILD $@ - cmd_image = cat $(obj)/decompress.bin $(obj)/piggy.gz > $@ -diff -Nur linux-2.6.36.orig/drivers/net/cris/eth_v10.c linux-2.6.36/drivers/net/cris/eth_v10.c ---- linux-2.6.36.orig/drivers/net/cris/eth_v10.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/drivers/net/cris/eth_v10.c 2010-11-15 17:57:17.000000000 +0100 -@@ -1718,7 +1718,7 @@ - static void - e100_netpoll(struct net_device* netdev) - { -- e100rxtx_interrupt(NETWORK_DMA_TX_IRQ_NBR, netdev, NULL); -+ e100rxtx_interrupt(NETWORK_DMA_TX_IRQ_NBR, netdev); - } - #endif - -diff -Nur linux-2.6.36.orig/drivers/serial/crisv10.c linux-2.6.36/drivers/serial/crisv10.c ---- linux-2.6.36.orig/drivers/serial/crisv10.c 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/drivers/serial/crisv10.c 2010-11-15 17:57:17.000000000 +0100 -@@ -13,6 +13,7 @@ - #include <linux/errno.h> - #include <linux/signal.h> - #include <linux/sched.h> -+#include <linux/smp_lock.h> - #include <linux/timer.h> - #include <linux/interrupt.h> - #include <linux/tty.h> -@@ -27,6 +28,7 @@ - #include <linux/kernel.h> - #include <linux/mutex.h> - #include <linux/bitops.h> -+#include <linux/device.h> - #include <linux/seq_file.h> - #include <linux/delay.h> - #include <linux/module.h> -@@ -4426,6 +4428,7 @@ - #endif - }; - -+static struct class *rs_class; - static int __init rs_init(void) - { - int i; -@@ -4559,6 +4562,24 @@ - #endif - #endif /* CONFIG_SVINTO_SIM */ - -+ rs_class = class_create(THIS_MODULE, "rs_tty"); -+#ifdef CONFIG_ETRAX_SERIAL_PORT0 -+ device_create(rs_class, NULL, -+ MKDEV(TTY_MAJOR, 64), NULL, "ttyS0"); -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT1 -+ device_create(rs_class, NULL, -+ MKDEV(TTY_MAJOR, 65), NULL, "ttyS1"); -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT2 -+ device_create(rs_class, NULL, -+ MKDEV(TTY_MAJOR, 66), NULL, "ttyS2"); -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT3 -+ device_create(rs_class, NULL, -+ MKDEV(TTY_MAJOR, 67), NULL, "ttyS3"); -+#endif -+ - return 0; - } - -diff -Nur linux-2.6.36.orig/drivers/usb/Makefile linux-2.6.36/drivers/usb/Makefile ---- linux-2.6.36.orig/drivers/usb/Makefile 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/drivers/usb/Makefile 2010-11-15 17:57:18.000000000 +0100 -@@ -21,6 +21,7 @@ - obj-$(CONFIG_USB_R8A66597_HCD) += host/ - obj-$(CONFIG_USB_HWA_HCD) += host/ - obj-$(CONFIG_USB_ISP1760_HCD) += host/ -+obj-$(CONFIG_ETRAX_USB_HOST) += host/ - obj-$(CONFIG_USB_IMX21_HCD) += host/ - - obj-$(CONFIG_USB_C67X00_HCD) += c67x00/ -diff -Nur linux-2.6.36.orig/drivers/usb/host/Makefile linux-2.6.36/drivers/usb/host/Makefile ---- linux-2.6.36.orig/drivers/usb/host/Makefile 2010-10-20 22:30:22.000000000 +0200 -+++ linux-2.6.36/drivers/usb/host/Makefile 2010-11-15 17:57:18.000000000 +0100 -@@ -32,5 +32,6 @@ - obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o - obj-$(CONFIG_USB_ISP1760_HCD) += isp1760.o - obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o -+obj-$(CONFIG_ETRAX_USB_HOST) += hc-crisv10.o - obj-$(CONFIG_USB_IMX21_HCD) += imx21-hcd.o - -diff -Nur linux-2.6.36.orig/drivers/usb/host/hc-cris-dbg.h linux-2.6.36/drivers/usb/host/hc-cris-dbg.h ---- linux-2.6.36.orig/drivers/usb/host/hc-cris-dbg.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36/drivers/usb/host/hc-cris-dbg.h 2010-11-15 17:57:17.000000000 +0100 -@@ -0,0 +1,146 @@ -+ -+/* macros for debug output */ -+ -+#define warn(fmt, args...) \ -+ printk(KERN_INFO "crisv10 warn: ");printk(fmt, ## args) -+ -+#define hcd_dbg(hcd, fmt, args...) \ -+ dev_info(hcd->self.controller, fmt, ## args) -+#define hcd_err(hcd, fmt, args...) \ -+ dev_err(hcd->self.controller, fmt, ## args) -+#define hcd_info(hcd, fmt, args...) \ -+ dev_info(hcd->self.controller, fmt, ## args) -+#define hcd_warn(hcd, fmt, args...) \ -+ dev_warn(hcd->self.controller, fmt, ## args) -+ -+/* -+#define devdrv_dbg(fmt, args...) \ -+ printk(KERN_INFO "usb_devdrv dbg: ");printk(fmt, ## args) -+*/ -+#define devdrv_dbg(fmt, args...) {} -+ -+#define devdrv_err(fmt, args...) \ -+ printk(KERN_ERR "usb_devdrv error: ");printk(fmt, ## args) -+#define devdrv_info(fmt, args...) \ -+ printk(KERN_INFO "usb_devdrv: ");printk(fmt, ## args) -+ -+#define irq_dbg(fmt, args...) \ -+ printk(KERN_INFO "crisv10_irq dbg: ");printk(fmt, ## args) -+#define irq_err(fmt, args...) \ -+ printk(KERN_ERR "crisv10_irq error: ");printk(fmt, ## args) -+#define irq_warn(fmt, args...) \ -+ printk(KERN_INFO "crisv10_irq warn: ");printk(fmt, ## args) -+#define irq_info(fmt, args...) \ -+ printk(KERN_INFO "crisv10_hcd: ");printk(fmt, ## args) -+ -+/* -+#define rh_dbg(fmt, args...) \ -+ printk(KERN_DEBUG "crisv10_rh dbg: ");printk(fmt, ## args) -+*/ -+#define rh_dbg(fmt, args...) {} -+ -+#define rh_err(fmt, args...) \ -+ printk(KERN_ERR "crisv10_rh error: ");printk(fmt, ## args) -+#define rh_warn(fmt, args...) \ -+ printk(KERN_INFO "crisv10_rh warning: ");printk(fmt, ## args) -+#define rh_info(fmt, args...) \ -+ printk(KERN_INFO "crisv10_rh: ");printk(fmt, ## args) -+ -+/* -+#define tc_dbg(fmt, args...) \ -+ printk(KERN_INFO "crisv10_tc dbg: ");printk(fmt, ## args) -+*/ -+#define tc_dbg(fmt, args...) {while(0){}} -+ -+#define tc_err(fmt, args...) \ -+ printk(KERN_ERR "crisv10_tc error: ");printk(fmt, ## args) -+/* -+#define tc_warn(fmt, args...) \ -+ printk(KERN_INFO "crisv10_tc warning: ");printk(fmt, ## args) -+*/ -+#define tc_warn(fmt, args...) {while(0){}} -+ -+#define tc_info(fmt, args...) \ -+ printk(KERN_INFO "crisv10_tc: ");printk(fmt, ## args) -+ -+ -+/* Debug print-outs for various traffic types */ -+ -+#define intr_warn(fmt, args...) \ -+ printk(KERN_INFO "crisv10_intr warning: ");printk(fmt, ## args) -+ -+#define intr_dbg(fmt, args...) \ -+ printk(KERN_DEBUG "crisv10_intr dbg: ");printk(fmt, ## args) -+/* -+#define intr_dbg(fmt, args...) {while(0){}} -+*/ -+ -+ -+#define isoc_err(fmt, args...) \ -+ printk(KERN_ERR "crisv10_isoc error: ");printk(fmt, ## args) -+/* -+#define isoc_warn(fmt, args...) \ -+ printk(KERN_INFO "crisv10_isoc warning: ");printk(fmt, ## args) -+*/ -+#define isoc_warn(fmt, args...) {while(0){}} -+ -+/* -+#define isoc_dbg(fmt, args...) \ -+ printk(KERN_INFO "crisv10_isoc dbg: ");printk(fmt, ## args) -+*/ -+#define isoc_dbg(fmt, args...) {while(0){}} -+ -+/* -+#define timer_warn(fmt, args...) \ -+ printk(KERN_INFO "crisv10_timer warning: ");printk(fmt, ## args) -+*/ -+#define timer_warn(fmt, args...) {while(0){}} -+ -+/* -+#define timer_dbg(fmt, args...) \ -+ printk(KERN_INFO "crisv10_timer dbg: ");printk(fmt, ## args) -+*/ -+#define timer_dbg(fmt, args...) {while(0){}} -+ -+ -+/* Debug printouts for events related to late finishing of URBs */ -+ -+#define late_dbg(fmt, args...) \ -+ printk(KERN_INFO "crisv10_late dbg: ");printk(fmt, ## args) -+/* -+#define late_dbg(fmt, args...) {while(0){}} -+*/ -+ -+#define late_warn(fmt, args...) \ -+ printk(KERN_INFO "crisv10_late warning: ");printk(fmt, ## args) -+/* -+#define errno_dbg(fmt, args...) \ -+ printk(KERN_INFO "crisv10_errno dbg: ");printk(fmt, ## args) -+*/ -+#define errno_dbg(fmt, args...) {while(0){}} -+ -+ -+#define dma_dbg(fmt, args...) \ -+ printk(KERN_INFO "crisv10_dma dbg: ");printk(fmt, ## args) -+#define dma_err(fmt, args...) \ -+ printk(KERN_ERR "crisv10_dma error: ");printk(fmt, ## args) -+#define dma_warn(fmt, args...) \ -+ printk(KERN_INFO "crisv10_dma warning: ");printk(fmt, ## args) -+#define dma_info(fmt, args...) \ -+ printk(KERN_INFO "crisv10_dma: ");printk(fmt, ## args) -+ -+ -+ -+#define str_dir(pipe) \ -+ (usb_pipeout(pipe) ? "out" : "in") -+#define str_type(pipe) \ -+ ({ \ -+ char *s = "?"; \ -+ switch (usb_pipetype(pipe)) { \ -+ case PIPE_ISOCHRONOUS: s = "iso"; break; \ -+ case PIPE_INTERRUPT: s = "intr"; break; \ -+ case PIPE_CONTROL: s = "ctrl"; break; \ -+ case PIPE_BULK: s = "bulk"; break; \ -+ }; \ -+ s; \ -+ }) -diff -Nur linux-2.6.36.orig/drivers/usb/host/hc-crisv10.c linux-2.6.36/drivers/usb/host/hc-crisv10.c ---- linux-2.6.36.orig/drivers/usb/host/hc-crisv10.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.36/drivers/usb/host/hc-crisv10.c 2010-11-15 17:57:18.000000000 +0100 -@@ -0,0 +1,4801 @@ -+/* -+ * -+ * ETRAX 100LX USB Host Controller Driver -+ * -+ * Copyright (C) 2005, 2006 Axis Communications AB -+ * -+ * Author: Konrad Eriksson <konrad.eriksson@axis.se> -+ * -+ */ -+ -+#include <linux/module.h> -+#include <linux/kernel.h> -+#include <linux/init.h> -+#include <linux/moduleparam.h> -+#include <linux/slab.h> -+#include <linux/spinlock.h> -+#include <linux/usb.h> -+#include <linux/platform_device.h> -+#include <linux/usb/hcd.h> -+ -+#include <asm/io.h> -+#include <asm/irq.h> -+#include <arch/dma.h> -+#include <arch/io_interface_mux.h> -+ -+#include "hc-crisv10.h" -+#include "hc-cris-dbg.h" -+ -+ -+/***************************************************************************/ -+/***************************************************************************/ -+/* Host Controller settings */ -+/***************************************************************************/ -+/***************************************************************************/ -+ -+#define VERSION "1.00 hinko.4" -+#define COPYRIGHT "(c) 2005, 2006 Axis Communications AB" -+#define DESCRIPTION "ETRAX 100LX USB Host Controller" -+ -+#define ETRAX_USB_HC_IRQ USB_HC_IRQ_NBR -+#define ETRAX_USB_RX_IRQ USB_DMA_RX_IRQ_NBR -+#define ETRAX_USB_TX_IRQ USB_DMA_TX_IRQ_NBR -+ -+/* Number of physical ports in Etrax 100LX */ -+#define USB_ROOT_HUB_PORTS 2 -+ -+const char hc_name[] = "hc-crisv10"; -+const char product_desc[] = DESCRIPTION; -+ -+/* The number of epids is, among other things, used for pre-allocating -+ ctrl, bulk and isoc EP descriptors (one for each epid). -+ Assumed to be > 1 when initiating the DMA lists. */ -+#define NBR_OF_EPIDS 32 -+ -+/* Support interrupt traffic intervals up to 128 ms. */ -+#define MAX_INTR_INTERVAL 128 -+ -+/* If periodic traffic (intr or isoc) is to be used, then one entry in the EP -+ table must be "invalid". By this we mean that we shouldn't care about epid -+ attentions for this epid, or at least handle them differently from epid -+ attentions for "valid" epids. This define determines which one to use -+ (don't change it). */ -+#define INVALID_EPID 31 -+/* A special epid for the bulk dummys. */ -+#define DUMMY_EPID 30 -+ -+/* Module settings */ -+ -+MODULE_DESCRIPTION(DESCRIPTION); -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Konrad Eriksson <konrad.eriksson@axis.se>"); -+ -+ -+/* Module parameters */ -+ -+/* 0 = No ports enabled -+ 1 = Only port 1 enabled (on board ethernet on devboard) -+ 2 = Only port 2 enabled (external connector on devboard) -+ 3 = Both ports enabled -+*/ -+static unsigned int ports = 3; -+module_param(ports, uint, S_IRUGO); -+MODULE_PARM_DESC(ports, "Bitmask indicating USB ports to use"); -+ -+ -+/***************************************************************************/ -+/***************************************************************************/ -+/* Shared global variables for this module */ -+/***************************************************************************/ -+/***************************************************************************/ -+ -+/* EP descriptor lists for non period transfers. Must be 32-bit aligned. */ -+static volatile struct USB_EP_Desc TxBulkEPList[NBR_OF_EPIDS] __attribute__ ((aligned (4))); -+ -+static volatile struct USB_EP_Desc TxCtrlEPList[NBR_OF_EPIDS] __attribute__ ((aligned (4))); -+ -+/* EP descriptor lists for period transfers. Must be 32-bit aligned. */ -+static volatile struct USB_EP_Desc TxIntrEPList[MAX_INTR_INTERVAL] __attribute__ ((aligned (4))); -+static volatile struct USB_SB_Desc TxIntrSB_zout __attribute__ ((aligned (4))); -+ -+static volatile struct USB_EP_Desc TxIsocEPList[NBR_OF_EPIDS] __attribute__ ((aligned (4))); -+static volatile struct USB_SB_Desc TxIsocSB_zout __attribute__ ((aligned (4))); -+ -+//static volatile struct USB_SB_Desc TxIsocSBList[NBR_OF_EPIDS] __attribute__ ((aligned (4))); -+ -+/* After each enabled bulk EP IN we put two disabled EP descriptors with the eol flag set, -+ causing the DMA to stop the DMA channel. The first of these two has the intr flag set, which -+ gives us a dma8_sub0_descr interrupt. When we receive this, we advance the DMA one step in the -+ EP list and then restart the bulk channel, thus forcing a switch between bulk EP descriptors -+ in each frame. */ -+static volatile struct USB_EP_Desc TxBulkDummyEPList[NBR_OF_EPIDS][2] __attribute__ ((aligned (4))); -+ -+/* List of URB pointers, where each points to the active URB for a epid. -+ For Bulk, Ctrl and Intr this means which URB that currently is added to -+ DMA lists (Isoc URBs are all directly added to DMA lists). As soon as -+ URB has completed is the queue examined and the first URB in queue is -+ removed and moved to the activeUrbList while its state change to STARTED and -+ its transfer(s) gets added to DMA list (exception Isoc where URBs enter -+ state STARTED directly and added transfers added to DMA lists). */ -+static struct urb *activeUrbList[NBR_OF_EPIDS]; -+ -+/* Additional software state info for each epid */ -+static struct etrax_epid epid_state[NBR_OF_EPIDS]; -+ -+/* Timer handles for bulk traffic timer used to avoid DMA bug where DMA stops -+ even if there is new data waiting to be processed */ -+static struct timer_list bulk_start_timer = TIMER_INITIALIZER(NULL, 0, 0); -+static struct timer_list bulk_eot_timer = TIMER_INITIALIZER(NULL, 0, 0); -+ -+/* We want the start timer to expire before the eot timer, because the former -+ might start traffic, thus making it unnecessary for the latter to time -+ out. */ -+#define BULK_START_TIMER_INTERVAL (HZ/50) /* 20 ms */ -+#define BULK_EOT_TIMER_INTERVAL (HZ/16) /* 60 ms */ -+ -+/* Delay before a URB completion happen when it's scheduled to be delayed */ -+#define LATER_TIMER_DELAY (HZ/50) /* 20 ms */ -+ -+/* Simplifying macros for checking software state info of a epid */ -+/* ----------------------------------------------------------------------- */ -+#define epid_inuse(epid) epid_state[epid].inuse -+#define epid_out_traffic(epid) epid_state[epid].out_traffic -+#define epid_isoc(epid) (epid_state[epid].type == PIPE_ISOCHRONOUS ? 1 : 0) -+#define epid_intr(epid) (epid_state[epid].type == PIPE_INTERRUPT ? 1 : 0) -+ -+ -+/***************************************************************************/ -+/***************************************************************************/ -+/* DEBUG FUNCTIONS */ -+/***************************************************************************/ -+/***************************************************************************/ -+/* Note that these functions are always available in their "__" variants, -+ for use in error situations. The "__" missing variants are controlled by -+ the USB_DEBUG_DESC/USB_DEBUG_URB macros. */ -+static void __dump_urb(struct urb* purb) -+{ -+ struct crisv10_urb_priv *urb_priv = purb->hcpriv; -+ int urb_num = -1; -+ if(urb_priv) { -+ urb_num = urb_priv->urb_num; -+ } -+ printk("\nURB:0x%x[%d]\n", (unsigned int)purb, urb_num); -+ printk("dev :0x%08lx\n", (unsigned long)purb->dev); -+ printk("pipe :0x%08x\n", purb->pipe); -+ printk("status :%d\n", purb->status); -+ printk("transfer_flags :0x%08x\n", purb->transfer_flags); -+ printk("transfer_buffer :0x%08lx\n", (unsigned long)purb->transfer_buffer); -+ printk("transfer_buffer_length:%d\n", purb->transfer_buffer_length); -+ printk("actual_length :%d\n", purb->actual_length); -+ printk("setup_packet :0x%08lx\n", (unsigned long)purb->setup_packet); -+ printk("start_frame :%d\n", purb->start_frame); -+ printk("number_of_packets :%d\n", purb->number_of_packets); -+ printk("interval :%d\n", purb->interval); -+ printk("error_count :%d\n", purb->error_count); -+ printk("context :0x%08lx\n", (unsigned long)purb->context); -+ printk("complete :0x%08lx\n\n", (unsigned long)purb->complete); -+} -+ -+static void __dump_in_desc(volatile struct USB_IN_Desc *in) -+{ -+ printk("\nUSB_IN_Desc at 0x%08lx\n", (unsigned long)in); -+ printk(" sw_len : 0x%04x (%d)\n", in->sw_len, in->sw_len); -+ printk(" command : 0x%04x\n", in->command); -+ printk(" next : 0x%08lx\n", in->next); -+ printk(" buf : 0x%08lx\n", in->buf); -+ printk(" hw_len : 0x%04x (%d)\n", in->hw_len, in->hw_len); -+ printk(" status : 0x%04x\n\n", in->status); -+} -+ -+static void __dump_sb_desc(volatile struct USB_SB_Desc *sb) -+{ -+ char tt = (sb->command & 0x30) >> 4; -+ char *tt_string; -+ -+ switch (tt) { -+ case 0: -+ tt_string = "zout"; -+ break; -+ case 1: -+ tt_string = "in"; -+ break; -+ case 2: -+ tt_string = "out"; -+ break; -+ case 3: -+ tt_string = "setup"; -+ break; -+ default: -+ tt_string = "unknown (weird)"; -+ } -+ -+ printk(" USB_SB_Desc at 0x%08lx ", (unsigned long)sb); -+ printk(" command:0x%04x (", sb->command); -+ printk("rem:%d ", (sb->command & 0x3f00) >> 8); -+ printk("full:%d ", (sb->command & 0x40) >> 6); -+ printk("tt:%d(%s) ", tt, tt_string); -+ printk("intr:%d ", (sb->command & 0x8) >> 3); -+ printk("eot:%d ", (sb->command & 0x2) >> 1); -+ printk("eol:%d)", sb->command & 0x1); -+ printk(" sw_len:0x%04x(%d)", sb->sw_len, sb->sw_len); -+ printk(" next:0x%08lx", sb->next); -+ printk(" buf:0x%08lx\n", sb->buf); -+} -+ -+ -+static void __dump_ep_desc(volatile struct USB_EP_Desc *ep) -+{ -+ printk("USB_EP_Desc at 0x%08lx ", (unsigned long)ep); -+ printk(" command:0x%04x (", ep->command); -+ printk("ep_id:%d ", (ep->command & 0x1f00) >> 8); -+ printk("enable:%d ", (ep->command & 0x10) >> 4); -+ printk("intr:%d ", (ep->command & 0x8) >> 3); -+ printk("eof:%d ", (ep->command & 0x2) >> 1); -+ printk("eol:%d)", ep->command & 0x1); -+ printk(" hw_len:0x%04x(%d)", ep->hw_len, ep->hw_len); -+ printk(" next:0x%08lx", ep->next); -+ printk(" sub:0x%08lx\n", ep->sub); -+} -+ -+static inline void __dump_ep_list(int pipe_type) -+{ -+ volatile struct USB_EP_Desc *ep; -+ volatile struct USB_EP_Desc *first_ep; -+ volatile struct USB_SB_Desc *sb; -+ -+ switch (pipe_type) -+ { -+ case PIPE_BULK: -+ first_ep = &TxBulkEPList[0]; -+ break; -+ case PIPE_CONTROL: -+ first_ep = &TxCtrlEPList[0]; -+ break; -+ case PIPE_INTERRUPT: -+ first_ep = &TxIntrEPList[0]; -+ break; -+ case PIPE_ISOCHRONOUS: -+ first_ep = &TxIsocEPList[0]; -+ break; -+ default: -+ warn("Cannot dump unknown traffic type"); -+ return; -+ } -+ ep = first_ep; -+ -+ printk("\n\nDumping EP list...\n\n"); -+ -+ do { -+ __dump_ep_desc(ep); -+ /* Cannot phys_to_virt on 0 as it turns into 80000000, which is != 0. */ -+ sb = ep->sub ? phys_to_virt(ep->sub) : 0; -+ while (sb) { -+ __dump_sb_desc(sb); -+ sb = sb->next ? phys_to_virt(sb->next) : 0; -+ } -+ ep = (volatile struct USB_EP_Desc *)(phys_to_virt(ep->next)); -+ -+ } while (ep != first_ep); -+} -+ -+static inline void __dump_ept_data(int epid) -+{ -+ unsigned long flags; -+ __u32 r_usb_ept_data; -+ -+ if (epid < 0 || epid > 31) { -+ printk("Cannot dump ept data for invalid epid %d\n", epid); -+ return; -+ } -+ -+ local_irq_save(flags); -+ *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid); -+ nop(); -+ r_usb_ept_data = *R_USB_EPT_DATA; -+ local_irq_restore(flags); -+ -+ printk(" R_USB_EPT_DATA = 0x%x for epid %d :\n", r_usb_ept_data, epid); -+ if (r_usb_ept_data == 0) { -+ /* No need for more detailed printing. */ -+ return; -+ } -+ printk(" valid : %d\n", (r_usb_ept_data & 0x80000000) >> 31); -+ printk(" hold : %d\n", (r_usb_ept_data & 0x40000000) >> 30); -+ printk(" error_count_in : %d\n", (r_usb_ept_data & 0x30000000) >> 28); -+ printk(" t_in : %d\n", (r_usb_ept_data & 0x08000000) >> 27); -+ printk(" low_speed : %d\n", (r_usb_ept_data & 0x04000000) >> 26); -+ printk(" port : %d\n", (r_usb_ept_data & 0x03000000) >> 24); -+ printk(" error_code : %d\n", (r_usb_ept_data & 0x00c00000) >> 22); -+ printk(" t_out : %d\n", (r_usb_ept_data & 0x00200000) >> 21); -+ printk(" error_count_out : %d\n", (r_usb_ept_data & 0x00180000) >> 19); -+ printk(" max_len : %d\n", (r_usb_ept_data & 0x0003f800) >> 11); -+ printk(" ep : %d\n", (r_usb_ept_data & 0x00000780) >> 7); -+ printk(" dev : %d\n", (r_usb_ept_data & 0x0000003f)); -+} -+ -+static inline void __dump_ept_data_iso(int epid) -+{ -+ unsigned long flags; -+ __u32 ept_data; -+ -+ if (epid < 0 || epid > 31) { -+ printk("Cannot dump ept data for invalid epid %d\n", epid); -+ return; -+ } -+ -+ local_irq_save(flags); -+ *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid); -+ nop(); -+ ept_data = *R_USB_EPT_DATA_ISO; -+ local_irq_restore(flags); -+ -+ printk(" R_USB_EPT_DATA = 0x%x for epid %d :\n", ept_data, epid); -+ if (ept_data == 0) { -+ /* No need for more detailed printing. */ -+ return; -+ } -+ printk(" valid : %d\n", IO_EXTRACT(R_USB_EPT_DATA_ISO, valid, -+ ept_data)); -+ printk(" port : %d\n", IO_EXTRACT(R_USB_EPT_DATA_ISO, port, -+ ept_data)); -+ printk(" error_code : %d\n", IO_EXTRACT(R_USB_EPT_DATA_ISO, error_code, -+ ept_data)); -+ printk(" max_len : %d\n", IO_EXTRACT(R_USB_EPT_DATA_ISO, max_len, -+ ept_data)); -+ printk(" ep : %d\n", IO_EXTRACT(R_USB_EPT_DATA_ISO, ep, -+ ept_data)); -+ printk(" dev : %d\n", IO_EXTRACT(R_USB_EPT_DATA_ISO, dev, -+ ept_data)); -+} -+ -+static inline void __dump_ept_data_list(void) -+{ -+ int i; -+ -+ printk("Dumping the whole R_USB_EPT_DATA list\n"); -+ -+ for (i = 0; i < 32; i++) { -+ __dump_ept_data(i); -+ } -+} -+ -+static void debug_epid(int epid) { -+ int i; -+ -+ if(epid_isoc(epid)) { -+ __dump_ept_data_iso(epid); -+ } else { -+ __dump_ept_data(epid); -+ } -+ -+ printk("Bulk:\n"); -+ for(i = 0; i < 32; i++) { -+ if(IO_EXTRACT(USB_EP_command, epid, TxBulkEPList[i].command) == -+ epid) { -+ printk("%d: ", i); __dump_ep_desc(&(TxBulkEPList[i])); -+ } -+ } -+ -+ printk("Ctrl:\n"); -+ for(i = 0; i < 32; i++) { -+ if(IO_EXTRACT(USB_EP_command, epid, TxCtrlEPList[i].command) == -+ epid) { -+ printk("%d: ", i); __dump_ep_desc(&(TxCtrlEPList[i])); -+ } -+ } -+ -+ printk("Intr:\n"); -+ for(i = 0; i < MAX_INTR_INTERVAL; i++) { -+ if(IO_EXTRACT(USB_EP_command, epid, TxIntrEPList[i].command) == -+ epid) { -+ printk("%d: ", i); __dump_ep_desc(&(TxIntrEPList[i])); -+ } -+ } -+ -+ printk("Isoc:\n"); -+ for(i = 0; i < 32; i++) { -+ if(IO_EXTRACT(USB_EP_command, epid, TxIsocEPList[i].command) == -+ epid) { -+ printk("%d: ", i); __dump_ep_desc(&(TxIsocEPList[i])); -+ } -+ } -+ -+ __dump_ept_data_list(); -+ __dump_ep_list(PIPE_INTERRUPT); -+ printk("\n\n"); -+} -+ -+ -+ -+char* hcd_status_to_str(__u8 bUsbStatus) { -+ static char hcd_status_str[128]; -+ hcd_status_str[0] = '\0'; -+ if(bUsbStatus & IO_STATE(R_USB_STATUS, ourun, yes)) { -+ strcat(hcd_status_str, "ourun "); -+ } -+ if(bUsbStatus & IO_STATE(R_USB_STATUS, perror, yes)) { -+ strcat(hcd_status_str, "perror "); -+ } -+ if(bUsbStatus & IO_STATE(R_USB_STATUS, device_mode, yes)) { -+ strcat(hcd_status_str, "device_mode "); -+ } -+ if(bUsbStatus & IO_STATE(R_USB_STATUS, host_mode, yes)) { -+ strcat(hcd_status_str, "host_mode "); -+ } -+ if(bUsbStatus & IO_STATE(R_USB_STATUS, started, yes)) { -+ strcat(hcd_status_str, "started "); -+ } -+ if(bUsbStatus & IO_STATE(R_USB_STATUS, running, yes)) { -+ strcat(hcd_status_str, "running "); -+ } -+ return hcd_status_str; -+} -+ -+ |