sh: Kill off machvec aliases.
authorPaul Mundt <lethal@linux-sh.org>
Tue, 15 May 2007 06:19:34 +0000 (15:19 +0900)
committerPaul Mundt <lethal@hera.kernel.org>
Fri, 8 Jun 2007 02:43:39 +0000 (02:43 +0000)
We now throw all of the machvecs in to .machvec.init and either
select one on the command line, or copy out the first (and
usually only) one to sh_mv. The rest are freed as usual.

This gets rid of all of the silly sh_mv aliasing and makes the
selection explicit rather than link-order dependent.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
32 files changed:
arch/sh/boards/dreamcast/setup.c
arch/sh/boards/hp6xx/mach.c
arch/sh/boards/hp6xx/setup.c
arch/sh/boards/landisk/setup.c
arch/sh/boards/lboxre2/setup.c
arch/sh/boards/mpc1211/setup.c
arch/sh/boards/renesas/edosk7705/setup.c
arch/sh/boards/renesas/hs7751rvoip/setup.c
arch/sh/boards/renesas/r7780rp/setup.c
arch/sh/boards/renesas/rts7751r2d/setup.c
arch/sh/boards/renesas/sh7710voipgw/setup.c
arch/sh/boards/renesas/systemh/setup.c
arch/sh/boards/saturn/setup.c
arch/sh/boards/se/7206/setup.c
arch/sh/boards/se/7300/setup.c
arch/sh/boards/se/73180/setup.c
arch/sh/boards/se/7343/setup.c
arch/sh/boards/se/7619/setup.c
arch/sh/boards/se/770x/setup.c
arch/sh/boards/se/7722/setup.c
arch/sh/boards/se/7751/setup.c
arch/sh/boards/se/7780/setup.c
arch/sh/boards/sh03/setup.c
arch/sh/boards/shmin/setup.c
arch/sh/boards/snapgear/setup.c
arch/sh/boards/superh/microdev/setup.c
arch/sh/boards/titan/setup.c
arch/sh/boards/unknown/setup.c
arch/sh/kernel/machvec.c
arch/sh/kernel/setup.c
include/asm-sh/machvec.h
include/asm-sh/machvec_init.h [deleted file]

index f13017e..8799df6 100644 (file)
@@ -60,7 +60,7 @@ static void __init dreamcast_setup(char **cmdline_p)
 #endif
 }
 
-struct sh_machine_vector mv_dreamcast __initmv = {
+static struct sh_machine_vector mv_dreamcast __initmv = {
        .mv_name                = "Sega Dreamcast",
        .mv_setup               = dreamcast_setup,
        .mv_irq_demux           = systemasic_irq_demux,
@@ -70,4 +70,3 @@ struct sh_machine_vector mv_dreamcast __initmv = {
        .mv_consistent_free     = dreamcast_consistent_free,
 #endif
 };
-ALIAS_MV(dreamcast)
index 08dbba9..35b8959 100644 (file)
@@ -13,7 +13,7 @@
 #include <asm/io.h>
 #include <asm/irq.h>
 
-struct sh_machine_vector mv_hp6xx __initmv = {
+static struct sh_machine_vector mv_hp6xx __initmv = {
        .mv_nr_irqs = HD64461_IRQBASE + HD64461_IRQ_NUM,
 
        .mv_inb = hd64461_inb,
@@ -42,5 +42,3 @@ struct sh_machine_vector mv_hp6xx __initmv = {
 
        .mv_irq_demux = hd64461_irq_demux,
 };
-
-ALIAS_MV(hp6xx)
index 6aeee85..7ae7089 100644 (file)
@@ -98,10 +98,9 @@ static void __init hp6xx_setup(char **cmdline_p)
 }
 device_initcall(hp6xx_devices_setup);
 
-struct sh_machine_vector mv_hp6xx __initmv = {
+static struct sh_machine_vector mv_hp6xx __initmv = {
        .mv_name = "hp6xx",
        .mv_setup = hp6xx_setup,
        .mv_nr_irqs = HD64461_IRQBASE + HD64461_IRQ_NUM,
        .mv_irq_demux = hd64461_irq_demux,
 };
-ALIAS_MV(hp6xx)
index f953c74..eda7176 100644 (file)
@@ -97,10 +97,9 @@ static void __init landisk_setup(char **cmdline_p)
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_landisk __initmv = {
+static struct sh_machine_vector mv_landisk __initmv = {
        .mv_name = "LANDISK",
        .mv_nr_irqs = 72,
        .mv_setup = landisk_setup,
        .mv_init_irq = init_landisk_IRQ,
 };
-ALIAS_MV(landisk)
index 4e20f7c..9c830fd 100644 (file)
@@ -77,9 +77,8 @@ device_initcall(lboxre2_devices_setup);
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_lboxre2 __initmv = {
+static struct sh_machine_vector mv_lboxre2 __initmv = {
        .mv_name                = "L-BOX RE2",
        .mv_nr_irqs             = 72,
        .mv_init_irq            = init_lboxre2_IRQ,
 };
-ALIAS_MV(lboxre2)
index 1a0604b..8ce03e0 100644 (file)
@@ -338,11 +338,10 @@ static void __init mpc1211_setup(char **cmdline_p)
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_mpc1211 __initmv = {
+static struct sh_machine_vector mv_mpc1211 __initmv = {
        .mv_name                = "Interface MPC-1211(CTP/PCI/MPC-SH02)",
        .mv_setup               = mpc1211_setup,
        .mv_nr_irqs             = 48,
        .mv_irq_demux           = mpc1211_irq_demux,
        .mv_init_irq            = init_mpc1211_IRQ,
 };
-ALIAS_MV(mpc1211)
index ec5be01..f076c45 100644 (file)
@@ -21,7 +21,7 @@ static void __init sh_edosk7705_init_irq(void)
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_edosk7705 __initmv = {
+static struct sh_machine_vector mv_edosk7705 __initmv = {
        .mv_name                = "EDOSK7705",
        .mv_nr_irqs             = 80,
 
@@ -41,4 +41,3 @@ struct sh_machine_vector mv_edosk7705 __initmv = {
        .mv_isa_port2addr       = sh_edosk7705_isa_port2addr,
        .mv_init_irq            = sh_edosk7705_init_irq,
 };
-ALIAS_MV(edosk7705)
index f7d0e30..fa5fa39 100644 (file)
@@ -89,7 +89,7 @@ static void __init hs7751rvoip_setup(char **cmdline_p)
        printk(KERN_INFO "Renesas Technology Sales HS7751RVoIP-2 support.\n");
 }
 
-struct sh_machine_vector mv_hs7751rvoip __initmv = {
+static struct sh_machine_vector mv_hs7751rvoip __initmv = {
        .mv_name                = "HS7751RVoIP",
        .mv_setup               = hs7751rvoip_setup,
        .mv_nr_irqs             = 72,
@@ -118,4 +118,3 @@ struct sh_machine_vector mv_hs7751rvoip __initmv = {
        .mv_init_irq            = hs7751rvoip_init_irq,
        .mv_ioport_map          = hs7751rvoip_ioport_map,
 };
-ALIAS_MV(hs7751rvoip)
index 0727ef9..5afb864 100644 (file)
@@ -166,10 +166,9 @@ static void __init highlander_setup(char **cmdline_p)
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_highlander __initmv = {
+static struct sh_machine_vector mv_highlander __initmv = {
        .mv_name                = "Highlander",
        .mv_nr_irqs             = 109,
        .mv_setup               = highlander_setup,
        .mv_init_irq            = highlander_init_irq,
 };
-ALIAS_MV(highlander)
index 593f26a..656fda3 100644 (file)
@@ -176,7 +176,7 @@ static void __init rts7751r2d_setup(char **cmdline_p)
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_rts7751r2d __initmv = {
+static struct sh_machine_vector mv_rts7751r2d __initmv = {
        .mv_name                = "RTS7751R2D",
        .mv_setup               = rts7751r2d_setup,
        .mv_nr_irqs             = 72,
@@ -189,4 +189,3 @@ struct sh_machine_vector mv_rts7751r2d __initmv = {
        .mv_consistent_free     = voyagergx_consistent_free,
 #endif
 };
-ALIAS_MV(rts7751r2d)
index 180810b..2dce8bd 100644 (file)
@@ -88,9 +88,8 @@ static void __init sh7710voipgw_init_irq(void)
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_sh7710voipgw __initmv = {
+static struct sh_machine_vector mv_sh7710voipgw __initmv = {
        .mv_name                = "SH7710 VoIP Gateway",
        .mv_nr_irqs             = 104,
        .mv_init_irq            = sh7710voipgw_init_irq,
 };
-ALIAS_MV(sh7710voipgw)
index 9361176..ee78af8 100644 (file)
@@ -28,7 +28,7 @@ static void __init sh7751systemh_init_irq(void)
        make_systemh_irq(0xb);  /* Ethernet interrupt */
 }
 
-struct sh_machine_vector mv_7751systemh __initmv = {
+static struct sh_machine_vector mv_7751systemh __initmv = {
        .mv_name                = "7751 SystemH",
        .mv_nr_irqs             = 72,
 
@@ -55,4 +55,3 @@ struct sh_machine_vector mv_7751systemh __initmv = {
 
        .mv_init_irq            = sh7751systemh_init_irq,
 };
-ALIAS_MV(7751systemh)
index a3a37c9..7df4312 100644 (file)
@@ -18,7 +18,7 @@ extern int saturn_irq_demux(int irq_nr);
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_saturn __initmv = {
+static struct sh_machine_vector mv_saturn __initmv = {
        .mv_name                = "Sega Saturn",
        .mv_nr_irqs             = 80,   /* Fix this later */
 
@@ -28,4 +28,3 @@ struct sh_machine_vector mv_saturn __initmv = {
        .mv_ioremap             = saturn_ioremap,
        .mv_iounmap             = saturn_iounmap,
 };
-ALIAS_MV(saturn)
index ca71487..a074b62 100644 (file)
@@ -70,7 +70,7 @@ __initcall(se7206_devices_setup);
  * The Machine Vector
  */
 
-struct sh_machine_vector mv_se __initmv = {
+static struct sh_machine_vector mv_se __initmv = {
        .mv_name                = "SolutionEngine",
        .mv_nr_irqs             = 256,
        .mv_inb                 = se7206_inb,
@@ -96,4 +96,3 @@ struct sh_machine_vector mv_se __initmv = {
 
        .mv_init_irq            = init_se7206_IRQ,
 };
-ALIAS_MV(se)
index f196095..eb469f5 100644 (file)
@@ -46,7 +46,7 @@ __initcall(se7300_devices_setup);
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_7300se __initmv = {
+static struct sh_machine_vector mv_7300se __initmv = {
        .mv_name = "SolutionEngine 7300",
        .mv_nr_irqs = 109,
        .mv_inb = sh7300se_inb,
@@ -72,4 +72,3 @@ struct sh_machine_vector mv_7300se __initmv = {
 
        .mv_init_irq = init_7300se_IRQ,
 };
-ALIAS_MV(7300se)
index e143017..1deee85 100644 (file)
@@ -46,7 +46,7 @@ __initcall(se73180_devices_setup);
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_73180se __initmv = {
+static struct sh_machine_vector mv_73180se __initmv = {
        .mv_name = "SolutionEngine 73180",
        .mv_nr_irqs = 108,
        .mv_inb = sh73180se_inb,
@@ -73,4 +73,3 @@ struct sh_machine_vector mv_73180se __initmv = {
        .mv_init_irq = init_73180se_IRQ,
        .mv_irq_demux = shmse_irq_demux,
 };
-ALIAS_MV(73180se)
index 3fdb16f..8fec155 100644 (file)
@@ -64,7 +64,7 @@ static void __init sh7343se_setup(char **cmdline_p)
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_7343se __initmv = {
+static struct sh_machine_vector mv_7343se __initmv = {
        .mv_name = "SolutionEngine 7343",
        .mv_setup = sh7343se_setup,
        .mv_nr_irqs = 108,
@@ -92,4 +92,3 @@ struct sh_machine_vector mv_7343se __initmv = {
        .mv_init_irq = init_7343se_IRQ,
        .mv_irq_demux = shmse_irq_demux,
 };
-ALIAS_MV(7343se)
index 52d2c4d..1d0ef7f 100644 (file)
@@ -15,8 +15,7 @@
  * The Machine Vector
  */
 
-struct sh_machine_vector mv_se __initmv = {
+static struct sh_machine_vector mv_se __initmv = {
        .mv_name                = "SolutionEngine",
        .mv_nr_irqs             = 108,
 };
-ALIAS_MV(se)
index 17a2631..2962da1 100644 (file)
@@ -122,7 +122,7 @@ device_initcall(se_devices_setup);
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_se __initmv = {
+static struct sh_machine_vector mv_se __initmv = {
        .mv_name                = "SolutionEngine",
        .mv_setup               = smsc_setup,
 #if defined(CONFIG_CPU_SH4)
@@ -160,4 +160,3 @@ struct sh_machine_vector mv_se __initmv = {
 
        .mv_init_irq            = init_se_IRQ,
 };
-ALIAS_MV(se)
index 636ca6c..6cca6cb 100644 (file)
@@ -137,7 +137,7 @@ static void __init se7722_setup(char **cmdline_p)
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_se7722 __initmv = {
+static struct sh_machine_vector mv_se7722 __initmv = {
        .mv_name                = "Solution Engine 7722" ,
        .mv_setup               = se7722_setup ,
        .mv_nr_irqs             = 109 ,
@@ -145,4 +145,3 @@ struct sh_machine_vector mv_se7722 __initmv = {
        .mv_irq_demux           = se7722_irq_demux,
 
 };
-ALIAS_MV(se7722)
index 52c7bfa..7873d07 100644 (file)
@@ -48,7 +48,7 @@ __initcall(se7751_devices_setup);
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_7751se __initmv = {
+static struct sh_machine_vector mv_7751se __initmv = {
        .mv_name                = "7751 SolutionEngine",
        .mv_nr_irqs             = 72,
 
@@ -71,4 +71,3 @@ struct sh_machine_vector mv_7751se __initmv = {
 
        .mv_init_irq            = init_7751se_IRQ,
 };
-ALIAS_MV(7751se)
index df7d08a..723f2fd 100644 (file)
@@ -113,10 +113,9 @@ static void __init se7780_setup(char **cmdline_p)
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_se7780 __initmv = {
+static struct sh_machine_vector mv_se7780 __initmv = {
        .mv_name                = "Solution Engine 7780" ,
        .mv_setup               = se7780_setup ,
        .mv_nr_irqs             = 111 ,
        .mv_init_irq            = init_se7780_IRQ,
 };
-ALIAS_MV(se7780)
index c069c44..d7867c1 100644 (file)
@@ -74,11 +74,10 @@ static int __init sh03_devices_setup(void)
 }
 __initcall(sh03_devices_setup);
 
-struct sh_machine_vector mv_sh03 __initmv = {
+static struct sh_machine_vector mv_sh03 __initmv = {
        .mv_name                = "Interface (CTP/PCI-SH03)",
        .mv_setup               = sh03_setup,
        .mv_nr_irqs             = 48,
        .mv_ioport_map          = sh03_ioport_map,
        .mv_init_irq            = init_sh03_IRQ,
 };
-ALIAS_MV(sh03)
index 4a9df4a..9c8bb51 100644 (file)
@@ -43,9 +43,8 @@ static void __iomem *shmin_ioport_map(unsigned long port, unsigned int size)
 
 }
 
-struct sh_machine_vector mv_shmin __initmv = {
+static struct sh_machine_vector mv_shmin __initmv = {
        .mv_name        = "SHMIN",
        .mv_init_irq    = init_shmin_irq,
        .mv_ioport_map  = shmin_ioport_map,
 };
-ALIAS_MV(shmin)
index 650fb36..b40124c 100644 (file)
@@ -96,7 +96,7 @@ static void __init snapgear_setup(char **cmdline_p)
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_snapgear __initmv = {
+static struct sh_machine_vector mv_snapgear __initmv = {
        .mv_name                = "SnapGear SecureEdge5410",
        .mv_setup               = snapgear_setup,
        .mv_nr_irqs             = 72,
@@ -117,4 +117,3 @@ struct sh_machine_vector mv_snapgear __initmv = {
 
        .mv_init_irq            = init_snapgear_IRQ,
 };
-ALIAS_MV(snapgear)
index 6396cea..fc8cd06 100644 (file)
@@ -371,7 +371,7 @@ static void __init microdev_setup(char **cmdline_p)
 /*
  * The Machine Vector
  */
-struct sh_machine_vector mv_sh4202_microdev __initmv = {
+static struct sh_machine_vector mv_sh4202_microdev __initmv = {
        .mv_name                = "SH4-202 MicroDev",
        .mv_setup               = microdev_setup,
        .mv_nr_irqs             = 72,           /* QQQ need to check this - use the MACRO */
@@ -403,4 +403,3 @@ struct sh_machine_vector mv_sh4202_microdev __initmv = {
        .mv_heartbeat           = microdev_heartbeat,
 #endif
 };
-ALIAS_MV(sh4202_microdev)
index 6bcd939..630f62f 100644 (file)
@@ -28,7 +28,7 @@ static void __init init_titan_irq(void)
        make_ipr_irq(titan_ipr_map, ARRAY_SIZE(titan_ipr_map));
 }
 
-struct sh_machine_vector mv_titan __initmv = {
+static struct sh_machine_vector mv_titan __initmv = {
        .mv_name =      "Titan",
 
        .mv_inb =       titan_inb,
@@ -52,4 +52,3 @@ struct sh_machine_vector mv_titan __initmv = {
 
        .mv_init_irq =  init_titan_irq,
 };
-ALIAS_MV(titan)
index bee4612..f975a1f 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/init.h>
 #include <asm/machvec.h>
 
-struct sh_machine_vector mv_unknown __initmv = {
+static struct sh_machine_vector mv_unknown __initmv = {
        .mv_name                = "Unknown",
 };
-ALIAS_MV(unknown)
index 1e78191..e8121de 100644 (file)
@@ -29,7 +29,7 @@ static struct sh_machine_vector * __init get_mv_byname(const char *name)
        struct sh_machine_vector *mv;
 
        for_each_mv(mv)
-               if (strcasecmp(name, get_system_type()) == 0)
+               if (strcasecmp(name, mv->mv_name) == 0)
                        return mv;
 
        return NULL;
@@ -55,26 +55,43 @@ static int __init early_parse_mv(char *from)
        mv_name[mv_len] = '\0';
        from = mv_end;
 
-       if (strcmp(sh_mv.mv_name, mv_name) != 0) {
-               mvp = get_mv_byname(mv_name);
-               if (unlikely(!mvp)) {
-                       printk("Available vectors:\n\n\t");
-                       for_each_mv(mvp)
-                               printk("'%s', ", mvp->mv_name);
-                       printk("\n\n");
-                       panic("Failed to select machvec '%s' -- halting.\n",
-                             mv_name);
-               } else
-                       sh_mv = *mvp;
-       }
+       mvp = get_mv_byname(mv_name);
+       if (unlikely(!mvp)) {
+               printk("Available vectors:\n\n\t");
+               for_each_mv(mvp)
+                       printk("'%s', ", mvp->mv_name);
+               printk("\n\n");
+               panic("Failed to select machvec '%s' -- halting.\n",
+                     mv_name);
+       } else
+               sh_mv = *mvp;
 
-       printk(KERN_NOTICE "Booting machvec: %s\n", sh_mv.mv_name);
        return 0;
 }
 early_param("sh_mv", early_parse_mv);
 
 void __init sh_mv_setup(void)
 {
+       /*
+        * Only overload the machvec if one hasn't been selected on
+        * the command line with sh_mv=
+        */
+       if (strcmp(sh_mv.mv_name, "Unknown") != 0) {
+               unsigned long machvec_size;
+
+               machvec_size = ((unsigned long)&__machvec_end -
+                               (unsigned long)&__machvec_start);
+
+               /*
+                * If the machvec hasn't been preselected, use the first
+                * vector (usually the only one) from .machvec.init.
+                */
+               if (machvec_size >= sizeof(struct sh_machine_vector))
+                       sh_mv = *(struct sh_machine_vector *)&__machvec_start;
+       }
+
+       printk(KERN_NOTICE "Booting machvec: %s\n", get_system_type());
+
        /*
         * Manually walk the vec, fill in anything that the board hasn't yet
         * by hand, wrapping to the generic implementation.
index 65c0931..55ed653 100644 (file)
@@ -42,6 +42,13 @@ extern void * __rd_start, * __rd_end;
  * The bigger value means no problem.
  */
 struct sh_cpuinfo boot_cpu_data = { CPU_SH_NONE, 10000000, };
+
+/*
+ * The machine vector. First entry in .machvec.init, or clobbered by
+ * sh_mv= on the command line, prior to .machvec.init teardown.
+ */
+struct sh_machine_vector sh_mv = { .mv_name = "Unknown", };
+
 #ifdef CONFIG_VT
 struct screen_info screen_info;
 #endif
index 70389b7..088698b 100644 (file)
@@ -13,7 +13,6 @@
 #include <linux/types.h>
 #include <linux/time.h>
 #include <asm/machtypes.h>
-#include <asm/machvec_init.h>
 
 struct device;
 
@@ -68,4 +67,7 @@ extern struct sh_machine_vector sh_mv;
 
 #define get_system_type()      sh_mv.mv_name
 
+#define __initmv \
+       __attribute_used__ __attribute__((__section__ (".machvec.init")))
+
 #endif /* _ASM_SH_MACHVEC_H */
diff --git a/include/asm-sh/machvec_init.h b/include/asm-sh/machvec_init.h
deleted file mode 100644 (file)
index cb015b8..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * include/asm-sh/machvec_init.h
- *
- * Copyright 2000 Stuart Menefy (stuart.menefy@st.com)
- *
- * May be copied or modified under the terms of the GNU General Public
- * License.  See linux/COPYING for more information.
- *
- * This file has goodies to help simplify instantiation of machine vectors.
- */
-
-#ifndef __SH_MACHVEC_INIT_H
-#define __SH_MACHVEC_INIT_H
-
-#define __initmv __attribute__((unused,__section__ (".machvec.init")))
-#define ALIAS_MV(system) \
-  asm(".weak sh_mv\nsh_mv = mv_"#system );
-
-#endif /* __SH_MACHVEC_INIT_H */