diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2011-08-01 13:26:08 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2011-08-01 13:26:08 +0200 |
commit | 38e356a749191c1832c9726b0b6cb913737af700 (patch) | |
tree | e8649d752a11d05d20615b2d4fd3a506baab516b /target | |
parent | 2ee33f7b7bb6f36dcee29f7df1e6122b55139e92 (diff) |
different make bulkallmod fixes
Diffstat (limited to 'target')
-rw-r--r-- | target/config/Config.in | 23 | ||||
-rw-r--r-- | target/linux/config/Config.in.bluetooth | 2 | ||||
-rw-r--r-- | target/linux/config/Config.in.crypto | 2 | ||||
-rw-r--r-- | target/linux/patches/2.6.39/cris.patch | 13194 | ||||
-rw-r--r-- | target/linux/patches/2.6.39/ocf-20100325.patch | 90188 |
5 files changed, 103398 insertions, 11 deletions
diff --git a/target/config/Config.in b/target/config/Config.in index 5162a6c72..4ab0999be 100644 --- a/target/config/Config.in +++ b/target/config/Config.in @@ -32,15 +32,12 @@ endchoice choice prompt "Target Kernel" depends on ADK_TARGET_SYSTEM_LEMOTE_YEELONG -config ADK_TARGET_KERNEL - boolean "Choose target kernel" +config ADK_TARGET_KERNEL64 + boolean "64 Bit Kernel" config ADK_TARGET_KERNEL32 boolean "32 Bit Kernel" -config ADK_TARGET_KERNEL64 - boolean "64 Bit Kernel" - endchoice config ADK_o32 @@ -61,17 +58,15 @@ config ADK_TARGET_ABI choice prompt "Target ABI" depends on ADK_TARGET_KERNEL64 && ADK_LINUX_MIPS -config ADK_ABI - boolean "Choose target ABI" - -config ADK_TARGET_ABI_O32 - boolean "O32 ABI (old)" - select ADK_o32 config ADK_TARGET_ABI_N32 boolean "N32 ABI (new)" select ADK_n32 +config ADK_TARGET_ABI_O32 + boolean "O32 ABI (old)" + select ADK_o32 + config ADK_TARGET_ABI_N64 boolean "N64 ABI" select ADK_n64 @@ -269,6 +264,12 @@ config ADK_TARGET_ABI_CFLAGS default "-mabi=n32 -Wl,-m -Wl,elf32ltsmipn32" if ADK_TARGET_ABI_N32 default "-mabi=64 -Wl,-m -Wl,elf64ltsmip" if ADK_TARGET_ABI_N64 +config ADK_TARGET_KERNEL_LDFLAGS + string + default "-mabi=64 -m elf64ltsmip" if ADK_TARGET_ABI_N32 + default "-mabi=64 -m elf64ltsmip" if ADK_TARGET_ABI_O32 + default "-mabi=64 -m elf64ltsmip" if ADK_TARGET_ABI_N64 + config ADK_TARGET_CFLAGS string default "-march=geode" if ADK_CPU_GEODE diff --git a/target/linux/config/Config.in.bluetooth b/target/linux/config/Config.in.bluetooth index 26ac067b1..73760d14c 100644 --- a/target/linux/config/Config.in.bluetooth +++ b/target/linux/config/Config.in.bluetooth @@ -82,6 +82,7 @@ config ADK_KPACKAGE_KMOD_BT_HCIBTUSB tristate default n depends on ADK_KPACKAGE_KMOD_BT + depends on ADK_TARGET_WITH_USB help Bluetooth HCI USB driver. This driver is required if you want to use Bluetooth devices with @@ -106,6 +107,7 @@ config ADK_KPACKAGE_KMOD_BT_HCIBCM203X select ADK_KPACKAGE_KMOD_FW_LOADER select ADK_KPACKAGE_KMOD_BT_HCIBTUSB depends on ADK_KPACKAGE_KMOD_BT + depends on ADK_LINUX_X86 || ADK_LINUX_X86_64 help Bluetooth HCI BCM203x USB driver. This driver provides the firmware loading mechanism for the Broadcom diff --git a/target/linux/config/Config.in.crypto b/target/linux/config/Config.in.crypto index ff6fb6b00..694443350 100644 --- a/target/linux/config/Config.in.crypto +++ b/target/linux/config/Config.in.crypto @@ -65,6 +65,8 @@ config ADK_KPACKAGE_KMOD_OCF_HIFN default n select ADK_KERNEL_OCF_OCF depends on ADK_TARGET_WITH_PCI || ADK_TARGET_WITH_MINIPCI + depends on !ADK_HARDWARE_QEMU + depends on ADK_LINUX_X86 || ADK_LINUX_X86_64 select ADK_KPACKAGE_KMOD_CRYPTO_AES help Engine for cryptodev that uses Hifn based accelerators diff --git a/target/linux/patches/2.6.39/cris.patch b/target/linux/patches/2.6.39/cris.patch new file mode 100644 index 000000000..f58391a5d --- /dev/null +++ b/target/linux/patches/2.6.39/cris.patch @@ -0,0 +1,13194 @@ +diff -Nur linux-2.6.39.orig/arch/cris/arch-v10/drivers/axisflashmap.c linux-2.6.39/arch/cris/arch-v10/drivers/axisflashmap.c +--- linux-2.6.39.orig/arch/cris/arch-v10/drivers/axisflashmap.c 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/arch-v10/drivers/axisflashmap.c 2011-07-28 16:16:35.633425525 +0200 +@@ -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 = "cfgfs", ++ .size = 0x20000 , ++ .offset = CONFIG_ETRAX_MTD_SIZE - 0x20000 + }, + { +- .name = "filesystem", +- .size = 5 * CONFIG_ETRAX_PTABLE_SECTOR, +- .offset = 0x200000 - (5 * CONFIG_ETRAX_PTABLE_SECTOR) ++ .name = "linux", ++ .size = CONFIG_ETRAX_MTD_SIZE - 0x20000, ++ .offset = 0 + } + }; + +@@ -275,6 +280,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 +@@ -286,6 +296,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; +@@ -354,21 +389,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; +@@ -391,36 +411,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.39.orig/arch/cris/arch-v10/drivers/axisflashmap.c.orig linux-2.6.39/arch/cris/arch-v10/drivers/axisflashmap.c.orig +--- linux-2.6.39.orig/arch/cris/arch-v10/drivers/axisflashmap.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.39/arch/cris/arch-v10/drivers/axisflashmap.c.orig 2011-05-19 06:06:34.000000000 +0200 +@@ -0,0 +1,430 @@ ++/* ++ * Physical mapping layer for MTD using the Axis partitiontable format ++ * ++ * Copyright (c) 2001, 2002 Axis Communications AB ++ * ++ * This file is under the GPL. ++ * ++ * First partition is always sector 0 regardless of if we find a partitiontable ++ * or not. In the start of the next sector, there can be a partitiontable that ++ * tells us what other partitions to define. If there isn't, we use a default ++ * partition split defined below. ++ * ++ */ ++ ++#include <linux/module.h> ++#include <linux/types.h> ++#include <linux/kernel.h> ++#include <linux/init.h> ++#include <linux/slab.h> ++ ++#include <linux/mtd/concat.h> ++#include <linux/mtd/map.h> ++#include <linux/mtd/mtd.h> ++#include <linux/mtd/mtdram.h> ++#include <linux/mtd/partitions.h> ++ ++#include <asm/axisflashmap.h> ++#include <asm/mmu.h> ++#include <arch/sv_addr_ag.h> ++ ++#ifdef CONFIG_CRIS_LOW_MAP ++#define FLASH_UNCACHED_ADDR KSEG_8 ++#define FLASH_CACHED_ADDR KSEG_5 ++#else ++#define FLASH_UNCACHED_ADDR KSEG_E ++#define FLASH_CACHED_ADDR KSEG_F ++#endif ++ ++#if CONFIG_ETRAX_FLASH_BUSWIDTH==1 ++#define flash_data __u8 ++#elif CONFIG_ETRAX_FLASH_BUSWIDTH==2 ++#define flash_data __u16 ++#elif CONFIG_ETRAX_FLASH_BUSWIDTH==4 ++#define flash_data __u32 ++#endif ++ ++/* From head.S */ ++extern unsigned long romfs_start, romfs_length, romfs_in_flash; ++ ++/* The master mtd for the entire flash. */ ++struct mtd_info* axisflash_mtd = NULL; ++ ++/* Map driver functions. */ ++ ++static map_word flash_read(struct map_info *map, unsigned long ofs) ++{ ++ map_word tmp; ++ tmp.x[0] = *(flash_data *)(map->map_priv_1 + ofs); ++ return tmp; ++} ++ ++static void flash_copy_from(struct map_info *map, void *to, ++ unsigned long from, ssize_t len) ++{ ++ memcpy(to, (void *)(map->map_priv_1 + from), len); ++} ++ ++static void flash_write(struct map_info *map, map_word d, unsigned long adr) ++{ ++ *(flash_data *)(map->map_priv_1 + adr) = (flash_data)d.x[0]; ++} ++ ++/* ++ * The map for chip select e0. ++ * ++ * We run into tricky coherence situations if we mix cached with uncached ++ * accesses to we only use the uncached version here. ++ * ++ * The size field is the total size where the flash chips may be mapped on the ++ * chip select. MTD probes should find all devices there and it does not matter ++ * if there are unmapped gaps or aliases (mirrors of flash devices). The MTD ++ * probes will ignore them. ++ * ++ * The start address in map_priv_1 is in virtual memory so we cannot use ++ * MEM_CSE0_START but must rely on that FLASH_UNCACHED_ADDR is the start ++ * address of cse0. ++ */ ++static struct map_info map_cse0 = { ++ .name = "cse0", ++ .size = MEM_CSE0_SIZE, ++ .bankwidth = CONFIG_ETRAX_FLASH_BUSWIDTH, ++ .read = flash_read, ++ .copy_from = flash_copy_from, ++ .write = flash_write, ++ .map_priv_1 = FLASH_UNCACHED_ADDR ++}; ++ ++/* ++ * The map for chip select e1. ++ * ++ * If there was a gap between cse0 and cse1, map_priv_1 would get the wrong ++ * address, but there isn't. ++ */ ++static struct map_info map_cse1 = { ++ .name = "cse1", ++ .size = MEM_CSE1_SIZE, ++ .bankwidth = CONFIG_ETRAX_FLASH_BUSWIDTH, ++ .read = flash_read, ++ .copy_from = flash_copy_from, ++ .write = flash_write, ++ .map_priv_1 = FLASH_UNCACHED_ADDR + MEM_CSE0_SIZE ++}; ++ ++/* If no partition-table was found, we use this default-set. */ ++#define MAX_PARTITIONS 7 ++#define NUM_DEFAULT_PARTITIONS 3 ++ ++/* ++ * Default flash size is 2MB. CONFIG_ETRAX_PTABLE_SECTOR is most likely the ++ * size of one flash block and "filesystem"-partition needs 5 blocks to be able ++ * to use JFFS. ++ */ ++static struct mtd_partition axis_default_partitions[NUM_DEFAULT_PARTITIONS] = { ++ { ++ .name = "boot firmware", ++ .size = CONFIG_ETRAX_PTABLE_SECTOR, ++ .offset = 0 ++ }, ++ { ++ .name = "kernel", ++ .size = 0x200000 - (6 * CONFIG_ETRAX_PTABLE_SECTOR), ++ .offset = CONFIG_ETRAX_PTABLE_SECTOR ++ }, ++ { ++ .name = "filesystem", ++ .size = 5 * CONFIG_ETRAX_PTABLE_SECTOR, ++ .offset = 0x200000 - (5 * CONFIG_ETRAX_PTABLE_SECTOR) ++ } ++}; ++ ++/* Initialize the ones normally used. */ ++static struct mtd_partition axis_partitions[MAX_PARTITIONS] = { ++ { ++ .name = "part0", ++ .size = CONFIG_ETRAX_PTABLE_SECTOR, ++ .offset = 0 ++ }, ++ { ++ .name = "part1", ++ .size = 0, ++ .offset = 0 ++ }, ++ { ++ .name = "part2", ++ .size = 0, ++ .offset = 0 ++ }, ++ { ++ .name = "part3", ++ .size = 0, ++ .offset = 0 ++ }, ++ { ++ .name = "part4", ++ .size = 0, ++ .offset = 0 ++ }, ++ { ++ .name = "part5", ++ .size = 0, ++ .offset = 0 ++ }, ++ { ++ .name = "part6", ++ .size = 0, ++ .offset = 0 ++ }, ++}; ++ ++#ifdef CONFIG_ETRAX_AXISFLASHMAP_MTD0WHOLE ++/* Main flash device */ ++static struct mtd_partition main_partition = { ++ .name = "main", ++ .size = 0, ++ .offset = 0 ++}; ++#endif ++ ++/* ++ * Probe a chip select for AMD-compatible (JEDEC) or CFI-compatible flash ++ * chips in that order (because the amd_flash-driver is faster). ++ */ ++static struct mtd_info *probe_cs(struct map_info *map_cs) ++{ ++ struct mtd_info *mtd_cs = NULL; ++ ++ printk(KERN_INFO ++ "%s: Probing a 0x%08lx bytes large window at 0x%08lx.\n", ++ map_cs->name, map_cs->size, map_cs->map_priv_1); ++ ++#ifdef CONFIG_MTD_CFI ++ mtd_cs = do_map_probe("cfi_probe", map_cs); ++#endif ++#ifdef CONFIG_MTD_JEDECPROBE ++ if (!mtd_cs) ++ mtd_cs = do_map_probe("jedec_probe", map_cs); ++#endif ++ ++ return mtd_cs; ++} ++ ++/* ++ * Probe each chip select individually for flash chips. If there are chips on ++ * both cse0 and cse1, the mtd_info structs will be concatenated to one struct ++ * so that MTD partitions can cross chip boundries. ++ * ++ * The only known restriction to how you can mount your chips is that each ++ * chip select must hold similar flash chips. But you need external hardware ++ * to do that anyway and you can put totally different chips on cse0 and cse1 ++ * so it isn't really much of a restriction. ++ */ ++static struct mtd_info *flash_probe(void) ++{ ++ struct mtd_info *mtd_cse0; ++ struct mtd_info *mtd_cse1; ++ struct mtd_info *mtd_cse; ++ ++ mtd_cse0 = probe_cs(&map_cse0); ++ mtd_cse1 = probe_cs(&map_cse1); ++ ++ if (!mtd_cse0 && !mtd_cse1) { ++ /* No chip found. */ ++ return NULL; ++ } ++ ++ if (mtd_cse0 && mtd_cse1) { ++ struct mtd_info *mtds[] = { mtd_cse0, mtd_cse1 }; ++ ++ /* Since the concatenation layer adds a small overhead we ++ * could try to figure out if the chips in cse0 and cse1 are ++ * identical and reprobe the whole cse0+cse1 window. But since ++ * flash chips are slow, the overhead is relatively small. ++ * So we use the MTD concatenation layer instead of further ++ * complicating the probing procedure. ++ */ ++ mtd_cse = mtd_concat_create(mtds, ARRAY_SIZE(mtds), ++ "cse0+cse1"); ++ if (!mtd_cse) { ++ printk(KERN_ERR "%s and %s: Concatenation failed!\n", ++ map_cse0.name, map_cse1.name); ++ ++ /* The best we can do now is to only use what we found ++ * at cse0. ++ */ ++ mtd_cse = mtd_cse0; ++ map_destroy(mtd_cse1); ++ } ++ } else { ++ mtd_cse = mtd_cse0? mtd_cse0 : mtd_cse1; ++ } ++ ++ return mtd_cse; ++} ++ ++/* ++ * Probe the flash chip(s) and, if it succeeds, read the partition-table ++ * and register the partitions with MTD. ++ */ ++static int __init init_axis_flash(void) ++{ ++ struct mtd_info *mymtd; ++ int err = 0; ++ int pidx = 0; ++ struct partitiontable_head *ptable_head = NULL; ++ 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"; ++ ++ if (!(mymtd = flash_probe())) { ++ /* There's no reason to use this module if no flash chip can ++ * be identified. Make sure that's understood. ++ */ ++ printk(KERN_INFO "axisflashmap: Found no flash chip.\n"); ++ } else { ++ printk(KERN_INFO "%s: 0x%08x bytes of flash memory.\n", ++ mymtd->name, mymtd->size); ++ axisflash_mtd = mymtd; ++ } ++ ++ if (mymtd) { ++ mymtd->owner = THIS_MODULE; ++ ptable_head = (struct partitiontable_head *)(FLASH_CACHED_ADDR + ++ CONFIG_ETRAX_PTABLE_SECTOR + ++ PARTITION_TABLE_OFFSET); ++ } ++ pidx++; /* First partition is always set to the default. */ ++ ++ if (ptable_head && (ptable_head->magic == PARTITION_TABLE_MAGIC) ++ && (ptable_head->size < ++ (MAX_PARTITIONS * sizeof(struct partitiontable_entry) + ++ PARTITIONTABLE_END_MARKER_SIZE)) ++ && (*(unsigned long*)((void*)ptable_head + sizeof(*ptable_head) + ++ ptable_head->size - ++ PARTITIONTABLE_END_MARKER_SIZE) ++ == PARTITIONTABLE_END_MARKER)) { ++ /* Looks like a start, sane length and end of a ++ * partition table, lets check csum etc. ++ */ ++ int ptable_ok = 0; ++ struct partitiontable_entry *max_addr = ++ (struct partitiontable_entry *) ++ ((unsigned long)ptable_head + sizeof(*ptable_head) + ++ ptable_head->size); ++ unsigned long offset = CONFIG_ETRAX_PTABLE_SECTOR; ++ unsigned char *p; ++ unsigned long csum = 0; ++ ++ ptable = (struct partitiontable_entry *) ++ ((unsigned long)ptable_head + sizeof(*ptable_head)); ++ ++ /* Lets be PARANOID, and check the checksum. */ ++ p = (unsigned char*) ptable; ++ ++ while (p <= (unsigned char*)max_addr) { ++ csum += *p++; ++ csum += *p++; ++ csum += *p++; ++ csum += *p++; ++ } ++ ptable_ok = (csum == ptable_head->checksum); ++ ++ /* Read the entries and use/show the info. */ ++ printk(KERN_INFO " Found a%s partition table at 0x%p-0x%p.\n", ++ (ptable_ok ? " valid" : "n invalid"), ptable_head, ++ max_addr); ++ ++ /* We have found a working bootblock. Now read the ++ * partition table. Scan the table. It ends when ++ * there is 0xffffffff, that is, empty flash. ++ */ ++ while (ptable_ok ++ && ptable->offset != 0xffffffff ++ && ptable < max_addr ++ && pidx < MAX_PARTITIONS) { ++ ++ axis_partitions[pidx].offset = offset + ptable->offset; ++ axis_partitions[pidx].size = ptable->size; ++ ++ printk(pmsg, pidx, axis_partitions[pidx].offset, ++ axis_partitions[pidx].size); ++ pidx++; ++ ptable++; ++ } ++ 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; ++ err = add_mtd_partitions(mymtd, &main_partition, 1); ++ if (err) ++ panic("axisflashmap: Could not initialize " ++ "partition for whole main mtd device!\n"); ++ } ++#endif ++ ++ if (mymtd) { ++ if (use_default_ptable) { ++ printk(KERN_INFO " Using default partition table.\n"); ++ err = add_mtd_partitions(mymtd, axis_default_partitions, ++ NUM_DEFAULT_PARTITIONS); ++ } else { ++ err = add_mtd_partitions(mymtd, axis_partitions, pidx); ++ } ++ ++ 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; ++} ++ ++/* This adds the above to the kernels init-call chain. */ ++module_init(init_axis_flash); ++ ++EXPORT_SYMBOL(axisflash_mtd); +diff -Nur linux-2.6.39.orig/arch/cris/arch-v10/drivers/ds1302.c linux-2.6.39/arch/cris/arch-v10/drivers/ds1302.c +--- linux-2.6.39.orig/arch/cris/arch-v10/drivers/ds1302.c 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/arch-v10/drivers/ds1302.c 2011-07-28 16:16:35.863415658 +0200 +@@ -22,6 +22,7 @@ + #include <linux/mutex.h> + #include <linux/bcd.h> + #include <linux/capability.h> ++#include <linux/device.h> + + #include <asm/uaccess.h> + #include <asm/system.h> +@@ -501,6 +502,10 @@ + return 0; + } + ++#ifdef CONFIG_SYSFS ++static struct class *rtc_class; ++#endif ++ + static int __init ds1302_register(void) + { + ds1302_init(); +@@ -509,6 +514,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.39.orig/arch/cris/arch-v10/drivers/gpio.c linux-2.6.39/arch/cris/arch-v10/drivers/gpio.c +--- linux-2.6.39.orig/arch/cris/arch-v10/drivers/gpio.c 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/arch-v10/drivers/gpio.c 2011-07-28 16:16:36.023425394 +0200 +@@ -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> +@@ -798,6 +799,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; +@@ -811,6 +816,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.39.orig/arch/cris/arch-v10/lib/hw_settings.S linux-2.6.39/arch/cris/arch-v10/lib/hw_settings.S +--- linux-2.6.39.orig/arch/cris/arch-v10/lib/hw_settings.S 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/arch-v10/lib/hw_settings.S 2011-07-28 16:16:36.163758404 +0200 +@@ -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.39.orig/arch/cris/arch-v10/mm/init.c linux-2.6.39/arch/cris/arch-v10/mm/init.c +--- linux-2.6.39.orig/arch/cris/arch-v10/mm/init.c 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/arch-v10/mm/init.c 2011-07-28 16:16:36.313421347 +0200 +@@ -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.39.orig/arch/cris/boot/compressed/Makefile linux-2.6.39/arch/cris/boot/compressed/Makefile +--- linux-2.6.39.orig/arch/cris/boot/compressed/Makefile 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/boot/compressed/Makefile 2011-07-28 16:16:36.453421314 +0200 +@@ -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.39.orig/arch/cris/boot/Makefile linux-2.6.39/arch/cris/boot/Makefile +--- linux-2.6.39.orig/arch/cris/boot/Makefile 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/boot/Makefile 2011-07-28 16:16:36.573671907 +0200 +@@ -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.39.orig/arch/cris/Kconfig linux-2.6.39/arch/cris/Kconfig +--- linux-2.6.39.orig/arch/cris/Kconfig 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/Kconfig 2011-07-28 16:16:36.713417234 +0200 +@@ -168,6 +168,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 +@@ -273,7 +279,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_COMPLEX_MAPPINGS + help +@@ -660,6 +666,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" +@@ -675,6 +686,8 @@ + + source "fs/Kconfig" + ++source "sound/Kconfig" ++ + source "drivers/usb/Kconfig" + + source "drivers/uwb/Kconfig" +diff -Nur linux-2.6.39.orig/arch/cris/Kconfig.orig linux-2.6.39/arch/cris/Kconfig.orig +--- linux-2.6.39.orig/arch/cris/Kconfig.orig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.39/arch/cris/Kconfig.orig 2011-05-19 06:06:34.000000000 +0200 +@@ -0,0 +1,690 @@ ++config MMU ++ bool ++ default y ++ ++config ZONE_DMA ++ bool ++ default y ++ ++config RWSEM_GENERIC_SPINLOCK ++ bool ++ default y ++ ++config RWSEM_XCHGADD_ALGORITHM ++ bool ++ ++config GENERIC_CMOS_UPDATE ++ def_bool y ++ ++config ARCH_USES_GETTIMEOFFSET ++ def_bool n ++ ++config GENERIC_IOMAP ++ bool ++ default y ++ ++config ARCH_HAS_ILOG2_U32 ++ bool ++ default n ++ ++config ARCH_HAS_ILOG2_U64 ++ bool ++ default n ++ ++config GENERIC_FIND_NEXT_BIT ++ bool ++ default y ++ ++config GENERIC_HWEIGHT ++ bool ++ default y ++ ++config GENERIC_CALIBRATE_DELAY ++ bool ++ default y ++ ++config NO_IOPORT ++ def_bool y ++ ++config FORCE_MAX_ZONEORDER ++ int ++ default 6 ++ ++config CRIS ++ bool ++ default y ++ select HAVE_IDE ++ select HAVE_GENERIC_HARDIRQS ++ select GENERIC_IRQ_SHOW ++ ++config HZ ++ int ++ default 100 ++ ++source "init/Kconfig" ++ ++source "kernel/Kconfig.freezer" ++ ++menu "General setup" ++ ++source "fs/Kconfig.binfmt" ++ ++config ETRAX_CMDLINE ++ string "Kernel command line" ++ default "root=/dev/mtdblock3" ++ help ++ Pass additional commands to the kernel. ++ ++config ETRAX_WATCHDOG ++ bool "Enable ETRAX watchdog" ++ help ++ Enable the built-in watchdog timer support on ETRAX based embedded ++ network computers. ++ ++config ETRAX_WATCHDOG_NICE_DOGGY ++ bool "Disable watchdog during Oops printouts" ++ depends on ETRAX_WATCHDOG ++ help ++ By enabling this you make sure that the watchdog does not bite while ++ printing oopses. Recommended for development systems but not for ++ production releases. ++ ++config ETRAX_FAST_TIMER ++ bool "Enable ETRAX fast timer API" ++ help ++ This options enables the API to a fast timer implementation using ++ timer1 to get sub jiffie resolution timers (primarily one-shot ++ timers). ++ This is needed if CONFIG_ETRAX_SERIAL_FAST_TIMER is enabled. ++ ++config ETRAX_KMALLOCED_MODULES ++ bool "Enable module allocation with kmalloc" ++ help ++ Enable module allocation with kmalloc instead of vmalloc. ++ ++config OOM_REBOOT ++ bool "Enable reboot at out of memory" ++ ++source "kernel/Kconfig.preempt" ++ ++source mm/Kconfig ++ ++endmenu ++ ++menu "Hardware setup" ++ ++choice ++ prompt "Processor type" ++ default ETRAX100LX ++ ++config ETRAX100LX ++ bool "ETRAX-100LX-v1" ++ select ARCH_USES_GETTIMEOFFSET ++ help ++ Support version 1 of the ETRAX 100LX. ++ ++config ETRAX100LX_V2 ++ bool "ETRAX-100LX-v2" ++ select ARCH_USES_GETTIMEOFFSET ++ help ++ Support version 2 of the ETRAX 100LX. ++ ++config SVINTO_SIM ++ bool "ETRAX-100LX-for-xsim-simulator" ++ select ARCH_USES_GETTIMEOFFSET ++ help ++ Support the xsim ETRAX Simulator. ++ ++config ETRAXFS ++ bool "ETRAX-FS-V32" ++ help ++ Support CRIS V32. ++ ++config CRIS_MACH_ARTPEC3 ++ bool "ARTPEC-3" ++ help ++ Support Axis ARTPEC-3. ++ ++endchoice ++ ++config ETRAX_VCS_SIM ++ bool "VCS Simulator" ++ help ++ Setup hardware to be run in the VCS simulator. ++ ++config ETRAX_ARCH_V10 ++ bool ++ default y if ETRAX100LX || ETRAX100LX_V2 ++ default n if !(ETRAX100LX || ETRAX100LX_V2) ++ ++config ETRAX_ARCH_V32 ++ bool ++ default y if (ETRAXFS || CRIS_MACH_ARTPEC3) ++ default n if !(ETRAXFS || CRIS_MACH_ARTPEC3) ++ ++config ETRAX_DRAM_SIZE ++ int "DRAM size (dec, in MB)" ++ default "8" ++ help ++ Size of DRAM (decimal in MB) typically 2, 8 or 16. ++ ++config ETRAX_VMEM_SIZE ++ int "Video memory size (dec, in MB)" ++ depends on ETRAX_ARCH_V32 && !ETRAXFS ++ default 8 if !ETRAXFS ++ help ++ Size of Video accessible memory (decimal, in MB). ++ ++config ETRAX_FLASH_BUSWIDTH ++ int "Buswidth of NOR flash in bytes" ++ default "2" ++ help ++ Width in bytes of the NOR Flash bus (1, 2 or 4). Is usually 2. ++ ++config ETRAX_NANDFLASH_BUSWIDTH ++ int "Buswidth of NAND flash in bytes" ++ default "1" ++ help ++ Width in bytes of the NAND flash (1 or 2). ++ ++config ETRAX_FLASH1_SIZE ++ int "FLASH1 size (dec, in MB. 0 = Unknown)" ++ default "0" ++ ++choice ++ prompt "Product debug-port" ++ default ETRAX_DEBUG_PORT0 ++ ++config ETRAX_DEBUG_PORT0 ++ bool "Serial-0" ++ help ++ Choose a serial port for the ETRAX debug console. Default to ++ port 0. ++ ++config ETRAX_DEBUG_PORT1 ++ bool "Serial-1" ++ help ++ Use serial port 1 for the console. ++ ++config ETRAX_DEBUG_PORT2 ++ bool "Serial-2" ++ help ++ Use serial port 2 for the console. ++ ++config ETRAX_DEBUG_PORT3 ++ bool "Serial-3" ++ help ++ Use serial port 3 for the console. ++ ++config ETRAX_DEBUG_PORT_NULL ++ bool "disabled" ++ help ++ Disable serial-port debugging. ++ ++endchoice ++ ++choice ++ prompt "Kernel GDB port" ++ depends on ETRAX_KGDB ++ default ETRAX_KGDB_PORT0 ++ help ++ Choose a serial port for kernel debugging. NOTE: This port should ++ not be enabled under Drivers for built-in interfaces (as it has its ++ own initialization code) and should not be the same as the debug port. ++ ++config ETRAX_KGDB_PORT0 ++ bool "Serial-0" ++ help ++ Use serial port 0 for kernel debugging. ++ ++config ETRAX_KGDB_PORT1 ++ bool "Serial-1" ++ help ++ Use serial port 1 for kernel debugging. ++ ++config ETRAX_KGDB_PORT2 ++ bool "Serial-2" ++ help ++ Use serial port 2 for kernel debugging. ++ ++config ETRAX_KGDB_PORT3 ++ bool "Serial-3" |