source: branches/backfire/target/linux/generic-2.6/patches-2.6.30/020-mips_multi_machine_support.patch @ 29023

Last change on this file since 29023 was 29023, checked in by florian, 5 years ago

refresh 2.6.30 patches

File size: 4.2 KB
  • new file arch/mips/include/asm/mips_machine.h

    - +  
     1/* 
     2 *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> 
     3 * 
     4 *  This program is free software; you can redistribute it and/or modify it 
     5 *  under the terms of the GNU General Public License version 2 as published 
     6 *  by the Free Software Foundation. 
     7 * 
     8 */ 
     9 
     10#ifndef __ASM_MIPS_MACHINE_H 
     11#define __ASM_MIPS_MACHINE_H 
     12 
     13#include <linux/init.h> 
     14#include <linux/list.h> 
     15 
     16struct mips_machine { 
     17        unsigned long           mach_type; 
     18        void                    (*mach_setup)(void); 
     19        char                    *mach_name; 
     20        struct list_head        list; 
     21}; 
     22 
     23void mips_machine_register(struct mips_machine *) __init; 
     24void mips_machine_setup(unsigned long machtype) __init; 
     25void mips_machine_set_name(char *name) __init; 
     26 
     27extern char *mips_machine_name; 
     28 
     29#define MIPS_MACHINE(_type, _name, _setup)                      \ 
     30static char machine_name_##_type[] __initdata = _name;          \ 
     31static struct mips_machine machine_##_type __initdata =         \ 
     32{                                                               \ 
     33        .mach_type      = _type,                                \ 
     34        .mach_name      = machine_name_##_type,                 \ 
     35        .mach_setup     = _setup,                               \ 
     36};                                                              \ 
     37                                                                \ 
     38static int __init register_machine_##_type(void)                \ 
     39{                                                               \ 
     40        mips_machine_register(&machine_##_type);                \ 
     41        return 0;                                               \ 
     42}                                                               \ 
     43                                                                \ 
     44pure_initcall(register_machine_##_type) 
     45 
     46#endif /* __ASM_MIPS_MACHINE_H */ 
     47 
  • new file arch/mips/kernel/mips_machine.c

    - +  
     1/* 
     2 *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> 
     3 * 
     4 *  This program is free software; you can redistribute it and/or modify it 
     5 *  under the terms of the GNU General Public License version 2 as published 
     6 *  by the Free Software Foundation. 
     7 * 
     8 */ 
     9#include <linux/mm.h> 
     10 
     11#include <asm/mips_machine.h> 
     12#include <asm/bootinfo.h> 
     13 
     14static struct list_head mips_machines __initdata = 
     15                LIST_HEAD_INIT(mips_machines); 
     16 
     17char *mips_machine_name = "Unknown"; 
     18 
     19static struct mips_machine * __init mips_machine_find(unsigned long machtype) 
     20{ 
     21        struct list_head *this; 
     22 
     23        list_for_each(this, &mips_machines) { 
     24                struct mips_machine *mach; 
     25 
     26                mach = list_entry(this, struct mips_machine, list); 
     27                if (mach->mach_type == machtype) 
     28                        return mach; 
     29        } 
     30 
     31        return NULL; 
     32} 
     33 
     34void __init mips_machine_register(struct mips_machine *mach) 
     35{ 
     36        list_add_tail(&mach->list, &mips_machines); 
     37} 
     38 
     39void __init mips_machine_set_name(char *name) 
     40{ 
     41        unsigned int len; 
     42        char *p; 
     43 
     44        if (name == NULL) 
     45                return; 
     46 
     47        len = strlen(name); 
     48        p = kmalloc(len + 1, GFP_KERNEL); 
     49        if (p) { 
     50                strncpy(p, name, len); 
     51                p[len] = '\0'; 
     52                mips_machine_name = p; 
     53        } else { 
     54                printk(KERN_WARNING "MIPS: no memory for machine_name\n"); 
     55        } 
     56} 
     57 
     58void __init mips_machine_setup(unsigned long machtype) 
     59{ 
     60        struct mips_machine *mach; 
     61 
     62        mach = mips_machine_find(machtype); 
     63        if (!mach) { 
     64                printk(KERN_ALERT "MIPS: no machine registered for " 
     65                        "machtype %lu\n", machtype); 
     66                return; 
     67        } 
     68 
     69        mips_machine_set_name(mach->mach_name); 
     70        printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name); 
     71 
     72        if (mach->mach_setup) 
     73                mach->mach_setup(); 
     74} 
  • arch/mips/kernel/Makefile

    a b obj-$(CONFIG_GPIO_TXX9) += gpio_txx9.o 
    8585 
    8686obj-$(CONFIG_KEXEC)             += machine_kexec.o relocate_kernel.o 
    8787obj-$(CONFIG_EARLY_PRINTK)      += early_printk.o 
     88obj-$(CONFIG_MIPS_MACHINE)      += mips_machine.o 
    8889 
    8990CFLAGS_cpu-bugs64.o     = $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi) 
    9091 
  • arch/mips/Kconfig

    a b config MIPS_DISABLE_OBSOLETE_IDE 
    803803config SYNC_R4K 
    804804        bool 
    805805 
     806config MIPS_MACHINE 
     807        def_bool n 
     808 
    806809config NO_IOPORT 
    807810        def_bool n 
    808811 
  • arch/mips/kernel/proc.c

    a b  
    1414#include <asm/cpu-features.h> 
    1515#include <asm/mipsregs.h> 
    1616#include <asm/processor.h> 
     17#include <asm/mips_machine.h> 
    1718 
    1819unsigned int vced_count, vcei_count; 
    1920 
    static int show_cpuinfo(struct seq_file 
    3334        /* 
    3435         * For the first processor also print the system type 
    3536         */ 
    36         if (n == 0) 
     37        if (n == 0) { 
    3738                seq_printf(m, "system type\t\t: %s\n", get_system_type()); 
     39#ifdef CONFIG_MIPS_MACHINE 
     40                seq_printf(m, "machine\t\t\t: %s\n", mips_machine_name); 
     41#endif 
     42        } 
    3843 
    3944        seq_printf(m, "processor\t\t: %ld\n", n); 
    4045        sprintf(fmt, "cpu model\t\t: %%s V%%d.%%d%s\n", 
Note: See TracBrowser for help on using the repository browser.