[lantiq-wdt]
[openwrt.git] / target / linux / lantiq / patches-2.6.39 / 250-mt-vpe.patch
index 0a19289..6bb38b4 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/Kconfig
 +++ b/arch/mips/Kconfig
 --- a/arch/mips/Kconfig
 +++ b/arch/mips/Kconfig
-@@ -1871,6 +1871,28 @@
+@@ -1871,6 +1871,28 @@ config MIPS_VPE_LOADER
          Includes a loader for loading an elf relocatable object
          onto another VPE and running it.
  
          Includes a loader for loading an elf relocatable object
          onto another VPE and running it.
  
  /* TCStatus fields (per TC) */
  #define TCSTATUS_TASID                (_ULCAST_(0xff))
  #define TCSTATUS_IXMT_SHIFT   10
  /* TCStatus fields (per TC) */
  #define TCSTATUS_TASID                (_ULCAST_(0xff))
  #define TCSTATUS_IXMT_SHIFT   10
-@@ -350,6 +390,14 @@
+@@ -350,6 +390,14 @@ do {                                                                      \
  #define write_vpe_c0_vpecontrol(val)  mttc0(1, 1, val)
  #define read_vpe_c0_vpeconf0()                mftc0(1, 2)
  #define write_vpe_c0_vpeconf0(val)    mttc0(1, 2, val)
  #define write_vpe_c0_vpecontrol(val)  mttc0(1, 1, val)
  #define read_vpe_c0_vpeconf0()                mftc0(1, 2)
  #define write_vpe_c0_vpeconf0(val)    mttc0(1, 2, val)
  #define read_vpe_c0_count()           mftc0(9, 0)
  #define write_vpe_c0_count(val)               mttc0(9, 0, val)
  #define read_vpe_c0_status()          mftc0(12, 0)
  #define read_vpe_c0_count()           mftc0(9, 0)
  #define write_vpe_c0_count(val)               mttc0(9, 0, val)
  #define read_vpe_c0_status()          mftc0(12, 0)
-@@ -381,6 +429,12 @@
+@@ -381,6 +429,12 @@ do {                                                                      \
  #define write_tc_c0_tchalt(val)               mttc0(2, 4, val)
  #define read_tc_c0_tccontext()                mftc0(2, 5)
  #define write_tc_c0_tccontext(val)    mttc0(2, 5, val)
  #define write_tc_c0_tchalt(val)               mttc0(2, 4, val)
  #define read_tc_c0_tccontext()                mftc0(2, 5)
  #define write_tc_c0_tccontext(val)    mttc0(2, 5, val)
  #define read_tc_gpr_sp()              mftgpr(29)
 --- a/arch/mips/kernel/Makefile
 +++ b/arch/mips/kernel/Makefile
  #define read_tc_gpr_sp()              mftgpr(29)
 --- a/arch/mips/kernel/Makefile
 +++ b/arch/mips/kernel/Makefile
-@@ -85,7 +85,8 @@
+@@ -85,7 +85,8 @@ obj-$(CONFIG_MIPS32_O32)     += binfmt_elfo3
  
  obj-$(CONFIG_KGDB)            += kgdb.o
  obj-$(CONFIG_PROC_FS)         += proc.o
  
  obj-$(CONFIG_KGDB)            += kgdb.o
  obj-$(CONFIG_PROC_FS)         += proc.o
  
  /*
   * Dump new MIPS MT state for the core. Does not leave TCs halted.
  
  /*
   * Dump new MIPS MT state for the core. Does not leave TCs halted.
-@@ -78,18 +148,18 @@
+@@ -78,18 +148,18 @@ void mips_mt_regdump(unsigned long mvpct
                        if ((read_tc_c0_tcbind() & TCBIND_CURVPE) == i) {
                                printk("  VPE %d\n", i);
                                printk("   VPEControl : %08lx\n",
                        if ((read_tc_c0_tcbind() & TCBIND_CURVPE) == i) {
                                printk("  VPE %d\n", i);
                                printk("   VPEControl : %08lx\n",
                                break; /* Next VPE */
                        }
                }
                                break; /* Next VPE */
                        }
                }
-@@ -287,6 +357,9 @@
+@@ -287,6 +357,9 @@ void mips_mt_set_cpuoptions(void)
                printk("Mapped %ld ITC cells starting at 0x%08x\n",
                        ((itcblkgrn & 0x7fe00000) >> 20), itc_base);
        }
                printk("Mapped %ld ITC cells starting at 0x%08x\n",
                        ((itcblkgrn & 0x7fe00000) >> 20), itc_base);
        }
  #include <asm/bootinfo.h>
  #include <asm/cpu.h>
  #include <asm/cpu-features.h>
  #include <asm/bootinfo.h>
  #include <asm/cpu.h>
  #include <asm/cpu-features.h>
-@@ -110,3 +111,19 @@
+@@ -110,3 +111,19 @@ const struct seq_operations cpuinfo_op =
        .stop   = c_stop,
        .show   = show_cpuinfo,
  };
        .stop   = c_stop,
        .show   = show_cpuinfo,
  };
 +}
 --- a/arch/mips/kernel/smtc.c
 +++ b/arch/mips/kernel/smtc.c
 +}
 --- a/arch/mips/kernel/smtc.c
 +++ b/arch/mips/kernel/smtc.c
-@@ -1334,6 +1334,13 @@
+@@ -1334,6 +1334,13 @@ void smtc_get_new_mmu_context(struct mm_
        asid = asid_cache(cpu);
  
        do {
        asid = asid_cache(cpu);
  
        do {
                                flush_icache_all();
 --- a/arch/mips/kernel/vpe.c
 +++ b/arch/mips/kernel/vpe.c
                                flush_icache_all();
 --- a/arch/mips/kernel/vpe.c
 +++ b/arch/mips/kernel/vpe.c
-@@ -76,6 +76,58 @@
+@@ -76,6 +76,58 @@ static struct kspd_notifications kspd_ev
  static int kspd_events_reqd;
  #endif
  
  static int kspd_events_reqd;
  #endif
  
  /* grab the likely amount of memory we will need. */
  #ifdef CONFIG_MIPS_VPE_LOADER_TOM
  #define P_SIZE (2 * 1024 * 1024)
  /* grab the likely amount of memory we will need. */
  #ifdef CONFIG_MIPS_VPE_LOADER_TOM
  #define P_SIZE (2 * 1024 * 1024)
-@@ -268,6 +320,13 @@
+@@ -268,6 +320,13 @@ static void *alloc_progmem(unsigned long
        void *addr;
  
  #ifdef CONFIG_MIPS_VPE_LOADER_TOM
        void *addr;
  
  #ifdef CONFIG_MIPS_VPE_LOADER_TOM
        /*
         * This means you must tell Linux to use less memory than you
         * physically have, for example by passing a mem= boot argument.
        /*
         * This means you must tell Linux to use less memory than you
         * physically have, for example by passing a mem= boot argument.
-@@ -746,6 +805,12 @@
+@@ -746,6 +805,12 @@ static int vpe_run(struct vpe * v)
        }
  
        /* Write the address we want it to start running from in the TCPC register. */
        }
  
        /* Write the address we want it to start running from in the TCPC register. */
        write_tc_c0_tcrestart((unsigned long)v->__start);
        write_tc_c0_tccontext((unsigned long)0);
  
        write_tc_c0_tcrestart((unsigned long)v->__start);
        write_tc_c0_tccontext((unsigned long)0);
  
-@@ -759,6 +824,20 @@
+@@ -759,6 +824,20 @@ static int vpe_run(struct vpe * v)
  
        write_tc_c0_tchalt(read_tc_c0_tchalt() & ~TCHALT_H);
  
  
        write_tc_c0_tchalt(read_tc_c0_tchalt() & ~TCHALT_H);
  
        /*
         * The sde-kit passes 'memsize' to __start in $a3, so set something
         * here...  Or set $a3 to zero and define DFLT_STACK_SIZE and
        /*
         * The sde-kit passes 'memsize' to __start in $a3, so set something
         * here...  Or set $a3 to zero and define DFLT_STACK_SIZE and
-@@ -833,6 +912,9 @@
+@@ -833,6 +912,9 @@ static int find_vpe_symbols(struct vpe *
        if ( (v->__start == 0) || (v->shared_ptr == NULL))
                return -1;
  
        if ( (v->__start == 0) || (v->shared_ptr == NULL))
                return -1;
  
        return 0;
  }
  
        return 0;
  }
  
-@@ -994,6 +1076,15 @@
+@@ -994,6 +1076,15 @@ static int vpe_elfload(struct vpe * v)
                           (unsigned long)v->load_addr + v->len);
  
        if ((find_vpe_symbols(v, sechdrs, symindex, strtab, &mod)) < 0) {
                           (unsigned long)v->load_addr + v->len);
  
        if ((find_vpe_symbols(v, sechdrs, symindex, strtab, &mod)) < 0) {
                if (v->__start == 0) {
                        printk(KERN_WARNING "VPE loader: program does not contain "
                               "a __start symbol\n");
                if (v->__start == 0) {
                        printk(KERN_WARNING "VPE loader: program does not contain "
                               "a __start symbol\n");
-@@ -1064,6 +1155,9 @@
+@@ -1064,6 +1155,9 @@ static int vpe_open(struct inode *inode,
        struct vpe_notifications *not;
        struct vpe *v;
        int ret;
        struct vpe_notifications *not;
        struct vpe *v;
        int ret;
  
        if (minor != iminor(inode)) {
                /* assume only 1 device at the moment. */
  
        if (minor != iminor(inode)) {
                /* assume only 1 device at the moment. */
-@@ -1089,7 +1183,12 @@
+@@ -1089,7 +1183,12 @@ static int vpe_open(struct inode *inode,
                release_progmem(v->load_addr);
                cleanup_tc(get_tc(tclimit));
        }
                release_progmem(v->load_addr);
                cleanup_tc(get_tc(tclimit));
        }
        /* this of-course trashes what was there before... */
        v->pbuffer = vmalloc(P_SIZE);
        if (!v->pbuffer) {
        /* this of-course trashes what was there before... */
        v->pbuffer = vmalloc(P_SIZE);
        if (!v->pbuffer) {
-@@ -1097,11 +1196,14 @@
+@@ -1097,11 +1196,14 @@ static int vpe_open(struct inode *inode,
                return -ENOMEM;
        }
        v->plen = P_SIZE;
                return -ENOMEM;
        }
        v->plen = P_SIZE;
  
  #ifdef CONFIG_MIPS_APSP_KSPD
        /* get kspd to tell us when a syscall_exit happens */
  
  #ifdef CONFIG_MIPS_APSP_KSPD
        /* get kspd to tell us when a syscall_exit happens */
-@@ -1349,6 +1451,133 @@
+@@ -1349,6 +1451,133 @@ static void kspd_sp_exit( int sp_id)
        cleanup_tc(get_tc(sp_id));
  }
  #endif
        cleanup_tc(get_tc(sp_id));
  }
  #endif
  
  static ssize_t store_kill(struct device *dev, struct device_attribute *attr,
                          const char *buf, size_t len)
  
  static ssize_t store_kill(struct device *dev, struct device_attribute *attr,
                          const char *buf, size_t len)
-@@ -1430,6 +1659,18 @@
+@@ -1430,6 +1659,18 @@ static int __init vpe_module_init(void)
                printk("VPE loader: not a MIPS MT capable processor\n");
                return -ENODEV;
        }
                printk("VPE loader: not a MIPS MT capable processor\n");
                return -ENODEV;
        }
  
        if (vpelimit == 0) {
                printk(KERN_WARNING "No VPEs reserved for AP/SP, not "
  
        if (vpelimit == 0) {
                printk(KERN_WARNING "No VPEs reserved for AP/SP, not "
-@@ -1474,10 +1715,12 @@
+@@ -1474,10 +1715,12 @@ static int __init vpe_module_init(void)
        mtflags = dmt();
        vpflags = dvpe();
  
        mtflags = dmt();
        vpflags = dvpe();
  
  
        val = read_c0_mvpconf0();
        hw_tcs = (val & MVPCONF0_PTC) + 1;
  
        val = read_c0_mvpconf0();
        hw_tcs = (val & MVPCONF0_PTC) + 1;
-@@ -1489,6 +1732,7 @@
+@@ -1489,6 +1732,7 @@ static int __init vpe_module_init(void)
                 * reschedule send IPIs or similar we might hang.
                 */
                clear_c0_mvpcontrol(MVPCONTROL_VPC);
                 * reschedule send IPIs or similar we might hang.
                 */
                clear_c0_mvpcontrol(MVPCONTROL_VPC);
                evpe(vpflags);
                emt(mtflags);
                local_irq_restore(flags);
                evpe(vpflags);
                emt(mtflags);
                local_irq_restore(flags);
-@@ -1514,6 +1758,7 @@
+@@ -1514,6 +1758,7 @@ static int __init vpe_module_init(void)
                        }
  
                        v->ntcs = hw_tcs - tclimit;
                        }
  
                        v->ntcs = hw_tcs - tclimit;
  
                        /* add the tc to the list of this vpe's tc's. */
                        list_add(&t->tc, &v->tc);
  
                        /* add the tc to the list of this vpe's tc's. */
                        list_add(&t->tc, &v->tc);
-@@ -1582,6 +1827,7 @@
+@@ -1582,6 +1827,7 @@ static int __init vpe_module_init(void)
  out_reenable:
        /* release config state */
        clear_c0_mvpcontrol(MVPCONTROL_VPC);
  out_reenable:
        /* release config state */
        clear_c0_mvpcontrol(MVPCONTROL_VPC);
This page took 0.037025 seconds and 4 git commands to generate.