[sibyte]: upgrade to 2.6.32.8
authorkaloz <kaloz@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 17 Feb 2010 23:00:47 +0000 (23:00 +0000)
committerkaloz <kaloz@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 17 Feb 2010 23:00:47 +0000 (23:00 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19694 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/sibyte/Makefile
target/linux/sibyte/config-default
target/linux/sibyte/patches/001-sibyte_remove_simulation.patch [deleted file]
target/linux/sibyte/patches/002-sibyte_remove_standalone_support.patch [deleted file]
target/linux/sibyte/patches/100-honuor_config_cmdline.patch [deleted file]
target/linux/sibyte/patches/102-sbmac_net_device_opts.patch [deleted file]
target/linux/sibyte/patches/104-sibyte_rtc_cleanup.patch
target/linux/sibyte/patches/105-sibyte_hwmon.patch
target/linux/sibyte/patches/106-no_module_reloc.patch

index bfcd648..9146be5 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2006-2009 OpenWrt.org
+# Copyright (C) 2006-2010 OpenWrt.org
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -12,7 +12,7 @@ BOARDNAME:=Broadcom/SiByte SB-1
 FEATURES:=fpu
 CFLAGS:=-Os -pipe -march=sb1 -funit-at-a-time
 
-LINUX_VERSION:=2.6.30.10
+LINUX_VERSION:=2.6.32.8
 
 include $(INCLUDE_DIR)/target.mk
 
index 7d572d9..22dcb12 100644 (file)
@@ -1,5 +1,6 @@
 # CONFIG_32BIT is not set
 CONFIG_64BIT=y
+# CONFIG_AR7 is not set
 # CONFIG_ARCH_HAS_ILOG2_U32 is not set
 # CONFIG_ARCH_HAS_ILOG2_U64 is not set
 CONFIG_ARCH_POPULATES_NODE_MAP=y
@@ -8,6 +9,7 @@ CONFIG_ARCH_SUPPORTS_OPROFILE=y
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
 # CONFIG_ARPD is not set
 # CONFIG_BCM47XX is not set
+# CONFIG_BCM63XX is not set
 # CONFIG_BINARY_PRINTF is not set
 CONFIG_BINFMT_ELF32=y
 CONFIG_BITREVERSE=y
@@ -107,6 +109,7 @@ CONFIG_LOG_BUF_SHIFT=15
 # CONFIG_MACH_ALCHEMY is not set
 # CONFIG_MACH_DECSTATION is not set
 # CONFIG_MACH_JAZZ is not set
+# CONFIG_MACH_LOONGSON is not set
 # CONFIG_MACH_TX39XX is not set
 # CONFIG_MACH_TX49XX is not set
 # CONFIG_MACH_VR41XX is not set
diff --git a/target/linux/sibyte/patches/001-sibyte_remove_simulation.patch b/target/linux/sibyte/patches/001-sibyte_remove_simulation.patch
deleted file mode 100644 (file)
index c3208a4..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-[PATCH] Remove SiByte simulator option
-
-This patch removes the SiByte simulation Kconfig option, which only
-modified a printk.
-
-Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
-
---- a/arch/mips/sibyte/Kconfig
-+++ b/arch/mips/sibyte/Kconfig
-@@ -128,13 +128,6 @@ config SIBYTE_ENABLE_LDT_IF_PCI
-       bool
-       select SIBYTE_HAS_LDT if PCI
--config SIMULATION
--      bool "Running under simulation"
--      depends on SIBYTE_SB1xxx_SOC
--      help
--        Build a kernel suitable for running under the GDB simulator.
--        Primarily adjusts the kernel's notion of time.
--
- config SB1_CEX_ALWAYS_FATAL
-       bool "All cache exceptions considered fatal (no recovery attempted)"
-       depends on SIBYTE_SB1xxx_SOC
---- a/arch/mips/sibyte/swarm/setup.c
-+++ b/arch/mips/sibyte/swarm/setup.c
-@@ -137,11 +137,7 @@ void __init plat_mem_setup(void)
-               swarm_rtc_type = RTC_M4LT81;
-       printk("This kernel optimized for "
--#ifdef CONFIG_SIMULATION
--             "simulation"
--#else
-              "board"
--#endif
-              " runs "
- #ifdef CONFIG_SIBYTE_CFE
-              "with"
diff --git a/target/linux/sibyte/patches/002-sibyte_remove_standalone_support.patch b/target/linux/sibyte/patches/002-sibyte_remove_standalone_support.patch
deleted file mode 100644 (file)
index 2c46ccf..0000000
+++ /dev/null
@@ -1,1070 +0,0 @@
-CFE is the only supported and used bootloader on the SiByte boards,
-the standalone kernel support has been never used outside Broadcom.
-Remove it and make the kernel use CFE by default.
-
-Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
-
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -167,7 +167,6 @@ libs-$(CONFIG_ARC)         += arch/mips/fw/arc/
- libs-$(CONFIG_CFE)            += arch/mips/fw/cfe/
- libs-$(CONFIG_SNIPROM)                += arch/mips/fw/sni/
- libs-y                                += arch/mips/fw/lib/
--libs-$(CONFIG_SIBYTE_CFE)     += arch/mips/sibyte/cfe/
- #
- # Board-dependent options and extra files
---- a/arch/mips/sibyte/cfe/console.c
-+++ /dev/null
-@@ -1,79 +0,0 @@
--#include <linux/init.h>
--#include <linux/errno.h>
--#include <linux/console.h>
--
--#include <asm/sibyte/board.h>
--
--#include <asm/fw/cfe/cfe_api.h>
--#include <asm/fw/cfe/cfe_error.h>
--
--extern int cfe_cons_handle;
--
--static void cfe_console_write(struct console *cons, const char *str,
--                     unsigned int count)
--{
--      int i, last, written;
--
--      for (i=0, last=0; i<count; i++) {
--              if (!str[i])
--                      /* XXXKW can/should this ever happen? */
--                      return;
--              if (str[i] == '\n') {
--                      do {
--                              written = cfe_write(cfe_cons_handle, &str[last], i-last);
--                              if (written < 0)
--                                      ;
--                              last += written;
--                      } while (last < i);
--                      while (cfe_write(cfe_cons_handle, "\r", 1) <= 0)
--                              ;
--              }
--      }
--      if (last != count) {
--              do {
--                      written = cfe_write(cfe_cons_handle, &str[last], count-last);
--                      if (written < 0)
--                              ;
--                      last += written;
--              } while (last < count);
--      }
--
--}
--
--static int cfe_console_setup(struct console *cons, char *str)
--{
--      char consdev[32];
--      /* XXXKW think about interaction with 'console=' cmdline arg */
--      /* If none of the console options are configured, the build will break. */
--      if (cfe_getenv("BOOT_CONSOLE", consdev, 32) >= 0) {
--#ifdef CONFIG_SERIAL_SB1250_DUART
--              if (!strcmp(consdev, "uart0")) {
--                      setleds("u0cn");
--              } else if (!strcmp(consdev, "uart1")) {
--                      setleds("u1cn");
--#endif
--#ifdef CONFIG_VGA_CONSOLE
--              } else if (!strcmp(consdev, "pcconsole0")) {
--                      setleds("pccn");
--#endif
--              } else
--                      return -ENODEV;
--      }
--      return 0;
--}
--
--static struct console sb1250_cfe_cons = {
--      .name           = "cfe",
--      .write          = cfe_console_write,
--      .setup          = cfe_console_setup,
--      .flags          = CON_PRINTBUFFER,
--      .index          = -1,
--};
--
--static int __init sb1250_cfe_console_init(void)
--{
--      register_console(&sb1250_cfe_cons);
--      return 0;
--}
--
--console_initcall(sb1250_cfe_console_init);
---- a/arch/mips/sibyte/cfe/Makefile
-+++ /dev/null
-@@ -1,2 +0,0 @@
--lib-y                                 = setup.o
--lib-$(CONFIG_SIBYTE_CFE_CONSOLE)      += console.o
---- a/arch/mips/sibyte/cfe/setup.c
-+++ /dev/null
-@@ -1,344 +0,0 @@
--/*
-- * Copyright (C) 2000, 2001, 2002, 2003 Broadcom Corporation
-- *
-- * This program is free software; you can redistribute it and/or
-- * modify it under the terms of the GNU General Public License
-- * as published by the Free Software Foundation; either version 2
-- * of the License, or (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-- */
--
--#include <linux/init.h>
--#include <linux/kernel.h>
--#include <linux/linkage.h>
--#include <linux/mm.h>
--#include <linux/blkdev.h>
--#include <linux/bootmem.h>
--#include <linux/pm.h>
--#include <linux/smp.h>
--
--#include <asm/bootinfo.h>
--#include <asm/reboot.h>
--#include <asm/sibyte/board.h>
--#include <asm/smp-ops.h>
--
--#include <asm/fw/cfe/cfe_api.h>
--#include <asm/fw/cfe/cfe_error.h>
--
--/* Max ram addressable in 32-bit segments */
--#ifdef CONFIG_64BIT
--#define MAX_RAM_SIZE (~0ULL)
--#else
--#ifdef CONFIG_HIGHMEM
--#ifdef CONFIG_64BIT_PHYS_ADDR
--#define MAX_RAM_SIZE (~0ULL)
--#else
--#define MAX_RAM_SIZE (0xffffffffULL)
--#endif
--#else
--#define MAX_RAM_SIZE (0x1fffffffULL)
--#endif
--#endif
--
--#define SIBYTE_MAX_MEM_REGIONS 8
--phys_t board_mem_region_addrs[SIBYTE_MAX_MEM_REGIONS];
--phys_t board_mem_region_sizes[SIBYTE_MAX_MEM_REGIONS];
--unsigned int board_mem_region_count;
--
--int cfe_cons_handle;
--
--#ifdef CONFIG_BLK_DEV_INITRD
--extern unsigned long initrd_start, initrd_end;
--#endif
--
--static void __noreturn cfe_linux_exit(void *arg)
--{
--      int warm = *(int *)arg;
--
--      if (smp_processor_id()) {
--              static int reboot_smp;
--
--              /* Don't repeat the process from another CPU */
--              if (!reboot_smp) {
--                      /* Get CPU 0 to do the cfe_exit */
--                      reboot_smp = 1;
--                      smp_call_function(cfe_linux_exit, arg, 0);
--              }
--      } else {
--              printk("Passing control back to CFE...\n");
--              cfe_exit(warm, 0);
--              printk("cfe_exit returned??\n");
--      }
--      while (1);
--}
--
--static void __noreturn cfe_linux_restart(char *command)
--{
--      static const int zero;
--
--      cfe_linux_exit((void *)&zero);
--}
--
--static void __noreturn cfe_linux_halt(void)
--{
--      static const int one = 1;
--
--      cfe_linux_exit((void *)&one);
--}
--
--static __init void prom_meminit(void)
--{
--      u64 addr, size, type; /* regardless of 64BIT_PHYS_ADDR */
--      int mem_flags = 0;
--      unsigned int idx;
--      int rd_flag;
--#ifdef CONFIG_BLK_DEV_INITRD
--      unsigned long initrd_pstart;
--      unsigned long initrd_pend;
--
--      initrd_pstart = CPHYSADDR(initrd_start);
--      initrd_pend = CPHYSADDR(initrd_end);
--      if (initrd_start &&
--          ((initrd_pstart > MAX_RAM_SIZE)
--           || (initrd_pend > MAX_RAM_SIZE))) {
--              panic("initrd out of addressable memory");
--      }
--
--#endif /* INITRD */
--
--      for (idx = 0; cfe_enummem(idx, mem_flags, &addr, &size, &type) != CFE_ERR_NOMORE;
--           idx++) {
--              rd_flag = 0;
--              if (type == CFE_MI_AVAILABLE) {
--                      /*
--                       * See if this block contains (any portion of) the
--                       * ramdisk
--                       */
--#ifdef CONFIG_BLK_DEV_INITRD
--                      if (initrd_start) {
--                              if ((initrd_pstart > addr) &&
--                                  (initrd_pstart < (addr + size))) {
--                                      add_memory_region(addr,
--                                                        initrd_pstart - addr,
--                                                        BOOT_MEM_RAM);
--                                      rd_flag = 1;
--                              }
--                              if ((initrd_pend > addr) &&
--                                  (initrd_pend < (addr + size))) {
--                                      add_memory_region(initrd_pend,
--                                              (addr + size) - initrd_pend,
--                                               BOOT_MEM_RAM);
--                                      rd_flag = 1;
--                              }
--                      }
--#endif
--                      if (!rd_flag) {
--                              if (addr > MAX_RAM_SIZE)
--                                      continue;
--                              if (addr+size > MAX_RAM_SIZE)
--                                      size = MAX_RAM_SIZE - (addr+size) + 1;
--                              /*
--                               * memcpy/__copy_user prefetch, which
--                               * will cause a bus error for
--                               * KSEG/KUSEG addrs not backed by RAM.
--                               * Hence, reserve some padding for the
--                               * prefetch distance.
--                               */
--                              if (size > 512)
--                                      size -= 512;
--                              add_memory_region(addr, size, BOOT_MEM_RAM);
--                      }
--                      board_mem_region_addrs[board_mem_region_count] = addr;
--                      board_mem_region_sizes[board_mem_region_count] = size;
--                      board_mem_region_count++;
--                      if (board_mem_region_count ==
--                          SIBYTE_MAX_MEM_REGIONS) {
--                              /*
--                               * Too many regions.  Need to configure more
--                               */
--                              while(1);
--                      }
--              }
--      }
--#ifdef CONFIG_BLK_DEV_INITRD
--      if (initrd_start) {
--              add_memory_region(initrd_pstart, initrd_pend - initrd_pstart,
--                                BOOT_MEM_RESERVED);
--      }
--#endif
--}
--
--#ifdef CONFIG_BLK_DEV_INITRD
--static int __init initrd_setup(char *str)
--{
--      char rdarg[64];
--      int idx;
--      char *tmp, *endptr;
--      unsigned long initrd_size;
--
--      /* Make a copy of the initrd argument so we can smash it up here */
--      for (idx = 0; idx < sizeof(rdarg)-1; idx++) {
--              if (!str[idx] || (str[idx] == ' ')) break;
--              rdarg[idx] = str[idx];
--      }
--
--      rdarg[idx] = 0;
--      str = rdarg;
--
--      /*
--       *Initrd location comes in the form "<hex size of ramdisk in bytes>@<location in memory>"
--       *  e.g. initrd=3abfd@80010000.  This is set up by the loader.
--       */
--      for (tmp = str; *tmp != '@'; tmp++) {
--              if (!*tmp) {
--                      goto fail;
--              }
--      }
--      *tmp = 0;
--      tmp++;
--      if (!*tmp) {
--              goto fail;
--      }
--      initrd_size = simple_strtoul(str, &endptr, 16);
--      if (*endptr) {
--              *(tmp-1) = '@';
--              goto fail;
--      }
--      *(tmp-1) = '@';
--      initrd_start = simple_strtoul(tmp, &endptr, 16);
--      if (*endptr) {
--              goto fail;
--      }
--      initrd_end = initrd_start + initrd_size;
--      printk("Found initrd of %lx@%lx\n", initrd_size, initrd_start);
--      return 1;
-- fail:
--      printk("Bad initrd argument.  Disabling initrd\n");
--      initrd_start = 0;
--      initrd_end = 0;
--      return 1;
--}
--
--#endif
--
--extern struct plat_smp_ops sb_smp_ops;
--extern struct plat_smp_ops bcm1480_smp_ops;
--
--/*
-- * prom_init is called just after the cpu type is determined, from setup_arch()
-- */
--void __init prom_init(void)
--{
--      uint64_t cfe_ept, cfe_handle;
--      unsigned int cfe_eptseal;
--      int argc = fw_arg0;
--      char **envp = (char **) fw_arg2;
--      int *prom_vec = (int *) fw_arg3;
--
--      _machine_restart   = cfe_linux_restart;
--      _machine_halt      = cfe_linux_halt;
--      pm_power_off = cfe_linux_halt;
--
--      /*
--       * Check if a loader was used; if NOT, the 4 arguments are
--       * what CFE gives us (handle, 0, EPT and EPTSEAL)
--       */
--      if (argc < 0) {
--              cfe_handle = (uint64_t)(long)argc;
--              cfe_ept = (long)envp;
--              cfe_eptseal = (uint32_t)(unsigned long)prom_vec;
--      } else {
--              if ((int32_t)(long)prom_vec < 0) {
--                      /*
--                       * Old loader; all it gives us is the handle,
--                       * so use the "known" entrypoint and assume
--                       * the seal.
--                       */
--                      cfe_handle = (uint64_t)(long)prom_vec;
--                      cfe_ept = (uint64_t)((int32_t)0x9fc00500);
--                      cfe_eptseal = CFE_EPTSEAL;
--              } else {
--                      /*
--                       * Newer loaders bundle the handle/ept/eptseal
--                       * Note: prom_vec is in the loader's useg
--                       * which is still alive in the TLB.
--                       */
--                      cfe_handle = (uint64_t)((int32_t *)prom_vec)[0];
--                      cfe_ept = (uint64_t)((int32_t *)prom_vec)[2];
--                      cfe_eptseal = (unsigned int)((uint32_t *)prom_vec)[3];
--              }
--      }
--      if (cfe_eptseal != CFE_EPTSEAL) {
--              /* too early for panic to do any good */
--              printk("CFE's entrypoint seal doesn't match. Spinning.");
--              while (1) ;
--      }
--      cfe_init(cfe_handle, cfe_ept);
--      /*
--       * Get the handle for (at least) prom_putchar, possibly for
--       * boot console
--       */
--      cfe_cons_handle = cfe_getstdhandle(CFE_STDHANDLE_CONSOLE);
--      if (cfe_getenv("LINUX_CMDLINE", arcs_cmdline, CL_SIZE) < 0) {
--              if (argc >= 0) {
--                      /* The loader should have set the command line */
--                      /* too early for panic to do any good */
--                      printk("LINUX_CMDLINE not defined in cfe.");
--                      while (1) ;
--              }
--      }
--
--#ifdef CONFIG_BLK_DEV_INITRD
--      {
--              char *ptr;
--              /* Need to find out early whether we've got an initrd.  So scan
--                 the list looking now */
--              for (ptr = arcs_cmdline; *ptr; ptr++) {
--                      while (*ptr == ' ') {
--                              ptr++;
--                      }
--                      if (!strncmp(ptr, "initrd=", 7)) {
--                              initrd_setup(ptr+7);
--                              break;
--                      } else {
--                              while (*ptr && (*ptr != ' ')) {
--                                      ptr++;
--                              }
--                      }
--              }
--      }
--#endif /* CONFIG_BLK_DEV_INITRD */
--
--      /* Not sure this is needed, but it's the safe way. */
--      arcs_cmdline[CL_SIZE-1] = 0;
--
--      prom_meminit();
--
--#if defined(CONFIG_SIBYTE_BCM112X) || defined(CONFIG_SIBYTE_SB1250)
--      register_smp_ops(&sb_smp_ops);
--#endif
--#if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
--      register_smp_ops(&bcm1480_smp_ops);
--#endif
--}
--
--void __init prom_free_prom_memory(void)
--{
--      /* Not sure what I'm supposed to do here.  Nothing, I think */
--}
--
--void prom_putchar(char c)
--{
--      int ret;
--
--      while ((ret = cfe_write(cfe_cons_handle, &c, 1)) == 0)
--              ;
--}
---- /dev/null
-+++ b/arch/mips/sibyte/common/cfe.c
-@@ -0,0 +1,350 @@
-+/*
-+ * Copyright (C) 2000, 2001, 2002, 2003 Broadcom Corporation
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2
-+ * of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/linkage.h>
-+#include <linux/mm.h>
-+#include <linux/blkdev.h>
-+#include <linux/bootmem.h>
-+#include <linux/pm.h>
-+#include <linux/smp.h>
-+
-+#include <asm/bootinfo.h>
-+#include <asm/reboot.h>
-+#include <asm/sibyte/board.h>
-+#include <asm/smp-ops.h>
-+
-+#include <asm/fw/cfe/cfe_api.h>
-+#include <asm/fw/cfe/cfe_error.h>
-+
-+/* Max ram addressable in 32-bit segments */
-+#ifdef CONFIG_64BIT
-+#define MAX_RAM_SIZE (~0ULL)
-+#else
-+#ifdef CONFIG_HIGHMEM
-+#ifdef CONFIG_64BIT_PHYS_ADDR
-+#define MAX_RAM_SIZE (~0ULL)
-+#else
-+#define MAX_RAM_SIZE (0xffffffffULL)
-+#endif
-+#else
-+#define MAX_RAM_SIZE (0x1fffffffULL)
-+#endif
-+#endif
-+
-+#define SIBYTE_MAX_MEM_REGIONS 8
-+phys_t board_mem_region_addrs[SIBYTE_MAX_MEM_REGIONS];
-+phys_t board_mem_region_sizes[SIBYTE_MAX_MEM_REGIONS];
-+unsigned int board_mem_region_count;
-+
-+int cfe_cons_handle;
-+
-+#ifdef CONFIG_BLK_DEV_INITRD
-+extern unsigned long initrd_start, initrd_end;
-+#endif
-+
-+static void __noreturn cfe_linux_exit(void *arg)
-+{
-+      int warm = *(int *)arg;
-+
-+      if (smp_processor_id()) {
-+              static int reboot_smp;
-+
-+              /* Don't repeat the process from another CPU */
-+              if (!reboot_smp) {
-+                      /* Get CPU 0 to do the cfe_exit */
-+                      reboot_smp = 1;
-+                      smp_call_function(cfe_linux_exit, arg, 0);
-+              }
-+      } else {
-+              printk("Passing control back to CFE...\n");
-+              cfe_exit(warm, 0);
-+              printk("cfe_exit returned??\n");
-+      }
-+      while (1);
-+}
-+
-+static void __noreturn cfe_linux_restart(char *command)
-+{
-+      static const int zero;
-+
-+      cfe_linux_exit((void *)&zero);
-+}
-+
-+static void __noreturn cfe_linux_halt(void)
-+{
-+      static const int one = 1;
-+
-+      cfe_linux_exit((void *)&one);
-+}
-+
-+static __init void prom_meminit(void)
-+{
-+      u64 addr, size, type; /* regardless of 64BIT_PHYS_ADDR */
-+      int mem_flags = 0;
-+      unsigned int idx;
-+      int rd_flag;
-+#ifdef CONFIG_BLK_DEV_INITRD
-+      unsigned long initrd_pstart;
-+      unsigned long initrd_pend;
-+
-+      initrd_pstart = CPHYSADDR(initrd_start);
-+      initrd_pend = CPHYSADDR(initrd_end);
-+      if (initrd_start &&
-+          ((initrd_pstart > MAX_RAM_SIZE)
-+           || (initrd_pend > MAX_RAM_SIZE))) {
-+              panic("initrd out of addressable memory");
-+      }
-+
-+#endif /* INITRD */
-+
-+      for (idx = 0; cfe_enummem(idx, mem_flags, &addr, &size, &type) != CFE_ERR_NOMORE;
-+           idx++) {
-+              rd_flag = 0;
-+              if (type == CFE_MI_AVAILABLE) {
-+                      /*
-+                       * See if this block contains (any portion of) the
-+                       * ramdisk
-+                       */
-+#ifdef CONFIG_BLK_DEV_INITRD
-+                      if (initrd_start) {
-+                              if ((initrd_pstart > addr) &&
-+                                  (initrd_pstart < (addr + size))) {
-+                                      add_memory_region(addr,
-+                                                        initrd_pstart - addr,
-+                                                        BOOT_MEM_RAM);
-+                                      rd_flag = 1;
-+                              }
-+                              if ((initrd_pend > addr) &&
-+                                  (initrd_pend < (addr + size))) {
-+                                      add_memory_region(initrd_pend,
-+                                              (addr + size) - initrd_pend,
-+                                               BOOT_MEM_RAM);
-+                                      rd_flag = 1;
-+                              }
-+                      }
-+#endif
-+                      if (!rd_flag) {
-+                              if (addr > MAX_RAM_SIZE)
-+                                      continue;
-+                              if (addr+size > MAX_RAM_SIZE)
-+                                      size = MAX_RAM_SIZE - (addr+size) + 1;
-+                              /*
-+                               * memcpy/__copy_user prefetch, which
-+                               * will cause a bus error for
-+                               * KSEG/KUSEG addrs not backed by RAM.
-+                               * Hence, reserve some padding for the
-+                               * prefetch distance.
-+                               */
-+                              if (size > 512)
-+                                      size -= 512;
-+                              add_memory_region(addr, size, BOOT_MEM_RAM);
-+                      }
-+                      board_mem_region_addrs[board_mem_region_count] = addr;
-+                      board_mem_region_sizes[board_mem_region_count] = size;
-+                      board_mem_region_count++;
-+                      if (board_mem_region_count ==
-+                          SIBYTE_MAX_MEM_REGIONS) {
-+                              /*
-+                               * Too many regions.  Need to configure more
-+                               */
-+                              while(1);
-+                      }
-+              }
-+      }
-+#ifdef CONFIG_BLK_DEV_INITRD
-+      if (initrd_start) {
-+              add_memory_region(initrd_pstart, initrd_pend - initrd_pstart,
-+                                BOOT_MEM_RESERVED);
-+      }
-+#endif
-+}
-+
-+#ifdef CONFIG_BLK_DEV_INITRD
-+static int __init initrd_setup(char *str)
-+{
-+      char rdarg[64];
-+      int idx;
-+      char *tmp, *endptr;
-+      unsigned long initrd_size;
-+
-+      /* Make a copy of the initrd argument so we can smash it up here */
-+      for (idx = 0; idx < sizeof(rdarg)-1; idx++) {
-+              if (!str[idx] || (str[idx] == ' ')) break;
-+              rdarg[idx] = str[idx];
-+      }
-+
-+      rdarg[idx] = 0;
-+      str = rdarg;
-+
-+      /*
-+       *Initrd location comes in the form "<hex size of ramdisk in bytes>@<location in memory>"
-+       *  e.g. initrd=3abfd@80010000.  This is set up by the loader.
-+       */
-+      for (tmp = str; *tmp != '@'; tmp++) {
-+              if (!*tmp) {
-+                      goto fail;
-+              }
-+      }
-+      *tmp = 0;
-+      tmp++;
-+      if (!*tmp) {
-+              goto fail;
-+      }
-+      initrd_size = simple_strtoul(str, &endptr, 16);
-+      if (*endptr) {
-+              *(tmp-1) = '@';
-+              goto fail;
-+      }
-+      *(tmp-1) = '@';
-+      initrd_start = simple_strtoul(tmp, &endptr, 16);
-+      if (*endptr) {
-+              goto fail;
-+      }
-+      initrd_end = initrd_start + initrd_size;
-+      printk("Found initrd of %lx@%lx\n", initrd_size, initrd_start);
-+      return 1;
-+ fail:
-+      printk("Bad initrd argument.  Disabling initrd\n");
-+      initrd_start = 0;
-+      initrd_end = 0;
-+      return 1;
-+}
-+
-+#endif
-+
-+extern struct plat_smp_ops sb_smp_ops;
-+extern struct plat_smp_ops bcm1480_smp_ops;
-+
-+/*
-+ * prom_init is called just after the cpu type is determined, from setup_arch()
-+ */
-+void __init prom_init(void)
-+{
-+      uint64_t cfe_ept, cfe_handle;
-+      unsigned int cfe_eptseal;
-+      int argc = fw_arg0;
-+      char **envp = (char **) fw_arg2;
-+      int *prom_vec = (int *) fw_arg3;
-+
-+      _machine_restart   = cfe_linux_restart;
-+      _machine_halt      = cfe_linux_halt;
-+      pm_power_off = cfe_linux_halt;
-+
-+      /*
-+       * Check if a loader was used; if NOT, the 4 arguments are
-+       * what CFE gives us (handle, 0, EPT and EPTSEAL)
-+       */
-+      if (argc < 0) {
-+              cfe_handle = (uint64_t)(long)argc;
-+              cfe_ept = (long)envp;
-+              cfe_eptseal = (uint32_t)(unsigned long)prom_vec;
-+      } else {
-+              if ((int32_t)(long)prom_vec < 0) {
-+                      /*
-+                       * Old loader; all it gives us is the handle,
-+                       * so use the "known" entrypoint and assume
-+                       * the seal.
-+                       */
-+                      cfe_handle = (uint64_t)(long)prom_vec;
-+                      cfe_ept = (uint64_t)((int32_t)0x9fc00500);
-+                      cfe_eptseal = CFE_EPTSEAL;
-+              } else {
-+                      /*
-+                       * Newer loaders bundle the handle/ept/eptseal
-+                       * Note: prom_vec is in the loader's useg
-+                       * which is still alive in the TLB.
-+                       */
-+                      cfe_handle = (uint64_t)((int32_t *)prom_vec)[0];
-+                      cfe_ept = (uint64_t)((int32_t *)prom_vec)[2];
-+                      cfe_eptseal = (unsigned int)((uint32_t *)prom_vec)[3];
-+              }
-+      }
-+      if (cfe_eptseal != CFE_EPTSEAL) {
-+              /* too early for panic to do any good */
-+              printk("CFE's entrypoint seal doesn't match. Spinning.");
-+              while (1) ;
-+      }
-+      cfe_init(cfe_handle, cfe_ept);
-+      /*
-+       * Get the handle for (at least) prom_putchar, possibly for
-+       * boot console
-+       */
-+      cfe_cons_handle = cfe_getstdhandle(CFE_STDHANDLE_CONSOLE);
-+      if (cfe_getenv("LINUX_CMDLINE", arcs_cmdline, CL_SIZE) < 0) {
-+              if (argc < 0) {
-+                      /*
-+                       * It's OK for direct boot to not provide a
-+                       *  command line
-+                       */
-+                      strcpy(arcs_cmdline, "root=/dev/ram0 ");
-+              } else {
-+                      /* The loader should have set the command line */
-+                      /* too early for panic to do any good */
-+                      printk("LINUX_CMDLINE not defined in cfe.");
-+                      while (1) ;
-+              }
-+      }
-+
-+#ifdef CONFIG_BLK_DEV_INITRD
-+      {
-+              char *ptr;
-+              /* Need to find out early whether we've got an initrd.  So scan
-+                 the list looking now */
-+              for (ptr = arcs_cmdline; *ptr; ptr++) {
-+                      while (*ptr == ' ') {
-+                              ptr++;
-+                      }
-+                      if (!strncmp(ptr, "initrd=", 7)) {
-+                              initrd_setup(ptr+7);
-+                              break;
-+                      } else {
-+                              while (*ptr && (*ptr != ' ')) {
-+                                      ptr++;
-+                              }
-+                      }
-+              }
-+      }
-+#endif /* CONFIG_BLK_DEV_INITRD */
-+
-+      /* Not sure this is needed, but it's the safe way. */
-+      arcs_cmdline[CL_SIZE-1] = 0;
-+
-+      prom_meminit();
-+
-+#if defined(CONFIG_SIBYTE_BCM112X) || defined(CONFIG_SIBYTE_SB1250)
-+      register_smp_ops(&sb_smp_ops);
-+#endif
-+#if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
-+      register_smp_ops(&bcm1480_smp_ops);
-+#endif
-+}
-+
-+void __init prom_free_prom_memory(void)
-+{
-+      /* Not sure what I'm supposed to do here.  Nothing, I think */
-+}
-+
-+void prom_putchar(char c)
-+{
-+      int ret;
-+
-+      while ((ret = cfe_write(cfe_cons_handle, &c, 1)) == 0)
-+              ;
-+}
---- /dev/null
-+++ b/arch/mips/sibyte/common/cfe_console.c
-@@ -0,0 +1,79 @@
-+#include <linux/init.h>
-+#include <linux/errno.h>
-+#include <linux/console.h>
-+
-+#include <asm/sibyte/board.h>
-+
-+#include <asm/fw/cfe/cfe_api.h>
-+#include <asm/fw/cfe/cfe_error.h>
-+
-+extern int cfe_cons_handle;
-+
-+static void cfe_console_write(struct console *cons, const char *str,
-+                     unsigned int count)
-+{
-+      int i, last, written;
-+
-+      for (i=0, last=0; i<count; i++) {
-+              if (!str[i])
-+                      /* XXXKW can/should this ever happen? */
-+                      return;
-+              if (str[i] == '\n') {
-+                      do {
-+                              written = cfe_write(cfe_cons_handle, &str[last], i-last);
-+                              if (written < 0)
-+                                      ;
-+                              last += written;
-+                      } while (last < i);
-+                      while (cfe_write(cfe_cons_handle, "\r", 1) <= 0)
-+                              ;
-+              }
-+      }
-+      if (last != count) {
-+              do {
-+                      written = cfe_write(cfe_cons_handle, &str[last], count-last);
-+                      if (written < 0)
-+                              ;
-+                      last += written;
-+              } while (last < count);
-+      }
-+
-+}
-+
-+static int cfe_console_setup(struct console *cons, char *str)
-+{
-+      char consdev[32];
-+      /* XXXKW think about interaction with 'console=' cmdline arg */
-+      /* If none of the console options are configured, the build will break. */
-+      if (cfe_getenv("BOOT_CONSOLE", consdev, 32) >= 0) {
-+#ifdef CONFIG_SERIAL_SB1250_DUART
-+              if (!strcmp(consdev, "uart0")) {
-+                      setleds("u0cn");
-+              } else if (!strcmp(consdev, "uart1")) {
-+                      setleds("u1cn");
-+#endif
-+#ifdef CONFIG_VGA_CONSOLE
-+              } else if (!strcmp(consdev, "pcconsole0")) {
-+                      setleds("pccn");
-+#endif
-+              } else
-+                      return -ENODEV;
-+      }
-+      return 0;
-+}
-+
-+static struct console sb1250_cfe_cons = {
-+      .name           = "cfe",
-+      .write          = cfe_console_write,
-+      .setup          = cfe_console_setup,
-+      .flags          = CON_PRINTBUFFER,
-+      .index          = -1,
-+};
-+
-+static int __init sb1250_cfe_console_init(void)
-+{
-+      register_console(&sb1250_cfe_cons);
-+      return 0;
-+}
-+
-+console_initcall(sb1250_cfe_console_init);
---- a/arch/mips/sibyte/common/Makefile
-+++ b/arch/mips/sibyte/common/Makefile
-@@ -1,5 +1,5 @@
--obj-y :=
--
-+obj-y := cfe.o
-+obj-$(CONFIG_SIBYTE_CFE_CONSOLE)      += cfe_console.o
- obj-$(CONFIG_SIBYTE_TBPROF)           += sb_tbprof.o
- EXTRA_CFLAGS += -Werror
---- a/arch/mips/sibyte/Kconfig
-+++ b/arch/mips/sibyte/Kconfig
-@@ -75,6 +75,8 @@ config SIBYTE_SB1xxx_SOC
-       select SWAP_IO_SPACE
-       select SYS_SUPPORTS_32BIT_KERNEL
-       select SYS_SUPPORTS_64BIT_KERNEL
-+      select CFE
-+      select SYS_HAS_EARLY_PRINTK
- choice
-       prompt "SiByte SOC Stepping"
-@@ -136,34 +138,14 @@ config SB1_CERR_STALL
-       bool "Stall (rather than panic) on fatal cache error"
-       depends on SIBYTE_SB1xxx_SOC
--config SIBYTE_CFE
--      bool "Booting from CFE"
--      depends on SIBYTE_SB1xxx_SOC
--      select CFE
--      select SYS_HAS_EARLY_PRINTK
--      help
--        Make use of the CFE API for enumerating available memory,
--        controlling secondary CPUs, and possibly console output.
--
- config SIBYTE_CFE_CONSOLE
-       bool "Use firmware console"
--      depends on SIBYTE_CFE
-+      depends on SIBYTE_SB1xxx_SOC
-       help
-         Use the CFE API's console write routines during boot.  Other console
-         options (VT console, sb1250 duart console, etc.) should not be
-         configured.
--config SIBYTE_STANDALONE
--      bool
--      depends on SIBYTE_SB1xxx_SOC && !SIBYTE_CFE
--      select SYS_HAS_EARLY_PRINTK
--      default y
--
--config SIBYTE_STANDALONE_RAM_SIZE
--      int "Memory size (in megabytes)"
--      depends on SIBYTE_STANDALONE
--      default "32"
--
- config SIBYTE_BUS_WATCHER
-       bool "Support for Bus Watcher statistics"
-       depends on SIBYTE_SB1xxx_SOC
---- a/arch/mips/sibyte/sb1250/Makefile
-+++ b/arch/mips/sibyte/sb1250/Makefile
-@@ -1,7 +1,6 @@
- obj-y := setup.o irq.o time.o
- obj-$(CONFIG_SMP)                     += smp.o
--obj-$(CONFIG_SIBYTE_STANDALONE)               += prom.o
- obj-$(CONFIG_SIBYTE_BUS_WATCHER)      += bus_watcher.o
- EXTRA_CFLAGS += -Werror
---- a/arch/mips/sibyte/sb1250/prom.c
-+++ /dev/null
-@@ -1,96 +0,0 @@
--/*
-- * Copyright (C) 2000, 2001 Broadcom Corporation
-- *
-- * This program is free software; you can redistribute it and/or
-- * modify it under the terms of the GNU General Public License
-- * as published by the Free Software Foundation; either version 2
-- * of the License, or (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-- */
--
--#include <linux/init.h>
--#include <linux/kernel.h>
--#include <linux/mm.h>
--#include <linux/blkdev.h>
--#include <linux/bootmem.h>
--#include <linux/smp.h>
--#include <linux/initrd.h>
--#include <linux/pm.h>
--
--#include <asm/bootinfo.h>
--#include <asm/reboot.h>
--
--#define MAX_RAM_SIZE ((CONFIG_SIBYTE_STANDALONE_RAM_SIZE * 1024 * 1024) - 1)
--
--static __init void prom_meminit(void)
--{
--#ifdef CONFIG_BLK_DEV_INITRD
--      unsigned long initrd_pstart;
--      unsigned long initrd_pend;
--
--      initrd_pstart = __pa(initrd_start);
--      initrd_pend = __pa(initrd_end);
--      if (initrd_start &&
--          ((initrd_pstart > MAX_RAM_SIZE)
--           || (initrd_pend > MAX_RAM_SIZE))) {
--              panic("initrd out of addressable memory");
--      }
--
--      add_memory_region(0, initrd_pstart,
--                        BOOT_MEM_RAM);
--      add_memory_region(initrd_pstart, initrd_pend - initrd_pstart,
--                        BOOT_MEM_RESERVED);
--      add_memory_region(initrd_pend,
--                        (CONFIG_SIBYTE_STANDALONE_RAM_SIZE * 1024 * 1024) - initrd_pend,
--                        BOOT_MEM_RAM);
--#else
--      add_memory_region(0, CONFIG_SIBYTE_STANDALONE_RAM_SIZE * 1024 * 1024,
--                        BOOT_MEM_RAM);
--#endif
--}
--
--void prom_cpu0_exit(void *unused)
--{
--        while (1) ;
--}
--
--static void prom_linux_exit(void)
--{
--#ifdef CONFIG_SMP
--      if (smp_processor_id()) {
--              smp_call_function(prom_cpu0_exit, NULL, 1);
--      }
--#endif
--      while(1);
--}
--
--/*
-- * prom_init is called just after the cpu type is determined, from setup_arch()
-- */
--void __init prom_init(void)
--{
--      _machine_restart   = (void (*)(char *))prom_linux_exit;
--      _machine_halt      = prom_linux_exit;
--      pm_power_off = prom_linux_exit;
--
--      strcpy(arcs_cmdline, "root=/dev/ram0 ");
--
--      prom_meminit();
--}
--
--void __init prom_free_prom_memory(void)
--{
--      /* Not sure what I'm supposed to do here.  Nothing, I think */
--}
--
--void prom_putchar(char c)
--{
--}
---- a/arch/mips/sibyte/swarm/setup.c
-+++ b/arch/mips/sibyte/swarm/setup.c
-@@ -136,16 +136,6 @@ void __init plat_mem_setup(void)
-       if (m41t81_probe())
-               swarm_rtc_type = RTC_M4LT81;
--      printk("This kernel optimized for "
--             "board"
--             " runs "
--#ifdef CONFIG_SIBYTE_CFE
--             "with"
--#else
--             "without"
--#endif
--             " CFE\n");
--
- #ifdef CONFIG_VT
-       screen_info = (struct screen_info) {
-               0, 0,           /* orig-x, orig-y */
diff --git a/target/linux/sibyte/patches/100-honuor_config_cmdline.patch b/target/linux/sibyte/patches/100-honuor_config_cmdline.patch
deleted file mode 100644 (file)
index 1c3545f..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-The SiByte platform code doesn't honor the CONFIG_CMDLINE kernel
-option. This patch fixes this issue.
-
-Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
-
---- a/arch/mips/sibyte/common/cfe.c
-+++ b/arch/mips/sibyte/common/cfe.c
-@@ -293,7 +293,11 @@ void __init prom_init(void)
-                        * It's OK for direct boot to not provide a
-                        *  command line
-                        */
-+#ifdef CONFIG_CMDLINE
-+                      strlcpy(arcs_cmdline, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
-+#else
-                       strcpy(arcs_cmdline, "root=/dev/ram0 ");
-+#endif
-               } else {
-                       /* The loader should have set the command line */
-                       /* too early for panic to do any good */
diff --git a/target/linux/sibyte/patches/102-sbmac_net_device_opts.patch b/target/linux/sibyte/patches/102-sbmac_net_device_opts.patch
deleted file mode 100644 (file)
index 8171ef3..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
---- a/drivers/net/sb1250-mac.c
-+++ b/drivers/net/sb1250-mac.c
-@@ -2271,6 +2271,22 @@ static int sb1250_change_mtu(struct net_
-       return 0;
- }
-+static const struct net_device_ops sbmac_netdev_ops = {
-+      .ndo_open               = sbmac_open,
-+      .ndo_stop               = sbmac_close,
-+      .ndo_start_xmit         = sbmac_start_tx,
-+      .ndo_tx_timeout         = sbmac_tx_timeout,
-+      .ndo_do_ioctl           = sbmac_mii_ioctl,
-+      .ndo_set_multicast_list = sbmac_set_rx_mode,
-+      .ndo_change_mtu         = sb1250_change_mtu,
-+      .ndo_validate_addr      = eth_validate_addr,
-+      .ndo_set_mac_address    = eth_mac_addr,
-+
-+#ifdef CONFIG_NET_POLL_CONTROLLER
-+      .ndo_poll_controller    = sbmac_netpoll,
-+#endif
-+};
-+
- /**********************************************************************
-  *  SBMAC_INIT(dev)
-  *
-@@ -2327,21 +2343,12 @@ static int sbmac_init(struct platform_de
-       spin_lock_init(&(sc->sbm_lock));
--      dev->open               = sbmac_open;
--      dev->hard_start_xmit    = sbmac_start_tx;
--      dev->stop               = sbmac_close;
--      dev->set_multicast_list = sbmac_set_rx_mode;
--      dev->do_ioctl           = sbmac_mii_ioctl;
--      dev->tx_timeout         = sbmac_tx_timeout;
-+      dev->netdev_ops = &sbmac_netdev_ops;
-+
-       dev->watchdog_timeo     = TX_TIMEOUT;
-       netif_napi_add(dev, &sc->napi, sbmac_poll, 16);
--      dev->change_mtu         = sb1250_change_mtu;
--#ifdef CONFIG_NET_POLL_CONTROLLER
--      dev->poll_controller = sbmac_netpoll;
--#endif
--
-       dev->irq                = UNIT_INT(idx);
-       /* This is needed for PASS2 for Rx H/W checksum feature */
index e4bd8bc..f789dad 100644 (file)
@@ -1,460 +1,3 @@
---- a/arch/mips/sibyte/swarm/Makefile
-+++ b/arch/mips/sibyte/swarm/Makefile
-@@ -1,4 +1,3 @@
--obj-y                         := platform.o setup.o rtc_xicor1241.o \
--                                 rtc_m41t81.o
-+obj-y                         := platform.o setup.o
- obj-$(CONFIG_I2C_BOARDINFO)   += swarm-i2c.o
---- a/arch/mips/sibyte/swarm/rtc_m41t81.c
-+++ /dev/null
-@@ -1,233 +0,0 @@
--/*
-- * Copyright (C) 2000, 2001 Broadcom Corporation
-- *
-- * Copyright (C) 2002 MontaVista Software Inc.
-- * Author: jsun@mvista.com or jsun@junsun.net
-- *
-- * This program is free software; you can redistribute        it and/or modify it
-- * under  the terms of        the GNU General  Public License as published by the
-- * Free Software Foundation;  either version 2 of the  License, or (at your
-- * option) any later version.
-- *
-- */
--#include <linux/bcd.h>
--#include <linux/types.h>
--#include <linux/time.h>
--
--#include <asm/time.h>
--#include <asm/addrspace.h>
--#include <asm/io.h>
--
--#include <asm/sibyte/sb1250.h>
--#include <asm/sibyte/sb1250_regs.h>
--#include <asm/sibyte/sb1250_smbus.h>
--
--
--/* M41T81 definitions */
--
--/*
-- * Register bits
-- */
--
--#define M41T81REG_SC_ST               0x80            /* stop bit */
--#define M41T81REG_HR_CB               0x40            /* century bit */
--#define M41T81REG_HR_CEB      0x80            /* century enable bit */
--#define M41T81REG_CTL_S               0x20            /* sign bit */
--#define M41T81REG_CTL_FT      0x40            /* frequency test bit */
--#define M41T81REG_CTL_OUT     0x80            /* output level */
--#define M41T81REG_WD_RB0      0x01            /* watchdog resolution bit 0 */
--#define M41T81REG_WD_RB1      0x02            /* watchdog resolution bit 1 */
--#define M41T81REG_WD_BMB0     0x04            /* watchdog multiplier bit 0 */
--#define M41T81REG_WD_BMB1     0x08            /* watchdog multiplier bit 1 */
--#define M41T81REG_WD_BMB2     0x10            /* watchdog multiplier bit 2 */
--#define M41T81REG_WD_BMB3     0x20            /* watchdog multiplier bit 3 */
--#define M41T81REG_WD_BMB4     0x40            /* watchdog multiplier bit 4 */
--#define M41T81REG_AMO_ABE     0x20            /* alarm in "battery back-up mode" enable bit */
--#define M41T81REG_AMO_SQWE    0x40            /* square wave enable */
--#define M41T81REG_AMO_AFE     0x80            /* alarm flag enable flag */
--#define M41T81REG_ADT_RPT5    0x40            /* alarm repeat mode bit 5 */
--#define M41T81REG_ADT_RPT4    0x80            /* alarm repeat mode bit 4 */
--#define M41T81REG_AHR_RPT3    0x80            /* alarm repeat mode bit 3 */
--#define M41T81REG_AHR_HT      0x40            /* halt update bit */
--#define M41T81REG_AMN_RPT2    0x80            /* alarm repeat mode bit 2 */
--#define M41T81REG_ASC_RPT1    0x80            /* alarm repeat mode bit 1 */
--#define M41T81REG_FLG_AF      0x40            /* alarm flag (read only) */
--#define M41T81REG_FLG_WDF     0x80            /* watchdog flag (read only) */
--#define M41T81REG_SQW_RS0     0x10            /* sqw frequency bit 0 */
--#define M41T81REG_SQW_RS1     0x20            /* sqw frequency bit 1 */
--#define M41T81REG_SQW_RS2     0x40            /* sqw frequency bit 2 */
--#define M41T81REG_SQW_RS3     0x80            /* sqw frequency bit 3 */
--
--
--/*
-- * Register numbers
-- */
--
--#define M41T81REG_TSC 0x00            /* tenths/hundredths of second */
--#define M41T81REG_SC  0x01            /* seconds */
--#define M41T81REG_MN  0x02            /* minute */
--#define M41T81REG_HR  0x03            /* hour/century */
--#define M41T81REG_DY  0x04            /* day of week */
--#define M41T81REG_DT  0x05            /* date of month */
--#define M41T81REG_MO  0x06            /* month */
--#define M41T81REG_YR  0x07            /* year */
--#define M41T81REG_CTL 0x08            /* control */
--#define M41T81REG_WD  0x09            /* watchdog */
--#define M41T81REG_AMO 0x0A            /* alarm: month */
--#define M41T81REG_ADT 0x0B            /* alarm: date */
--#define M41T81REG_AHR 0x0C            /* alarm: hour */
--#define M41T81REG_AMN 0x0D            /* alarm: minute */
--#define M41T81REG_ASC 0x0E            /* alarm: second */
--#define M41T81REG_FLG 0x0F            /* flags */
--#define M41T81REG_SQW 0x13            /* square wave register */
--
--#define M41T81_CCR_ADDRESS    0x68
--
--#define SMB_CSR(reg)  IOADDR(A_SMB_REGISTER(1, reg))
--
--static int m41t81_read(uint8_t addr)
--{
--      while (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
--              ;
--
--      __raw_writeq(addr & 0xff, SMB_CSR(R_SMB_CMD));
--      __raw_writeq(V_SMB_ADDR(M41T81_CCR_ADDRESS) | V_SMB_TT_WR1BYTE,
--                   SMB_CSR(R_SMB_START));
--
--      while (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
--              ;
--
--      __raw_writeq(V_SMB_ADDR(M41T81_CCR_ADDRESS) | V_SMB_TT_RD1BYTE,
--                   SMB_CSR(R_SMB_START));
--
--      while (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
--              ;
--
--      if (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_ERROR) {
--              /* Clear error bit by writing a 1 */
--              __raw_writeq(M_SMB_ERROR, SMB_CSR(R_SMB_STATUS));
--              return -1;
--      }
--
--      return (__raw_readq(SMB_CSR(R_SMB_DATA)) & 0xff);
--}
--
--static int m41t81_write(uint8_t addr, int b)
--{
--      while (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
--              ;
--
--      __raw_writeq(addr & 0xff, SMB_CSR(R_SMB_CMD));
--      __raw_writeq(b & 0xff, SMB_CSR(R_SMB_DATA));
--      __raw_writeq(V_SMB_ADDR(M41T81_CCR_ADDRESS) | V_SMB_TT_WR2BYTE,
--                   SMB_CSR(R_SMB_START));
--
--      while (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
--              ;
--
--      if (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_ERROR) {
--              /* Clear error bit by writing a 1 */
--              __raw_writeq(M_SMB_ERROR, SMB_CSR(R_SMB_STATUS));
--              return -1;
--      }
--
--      /* read the same byte again to make sure it is written */
--      __raw_writeq(V_SMB_ADDR(M41T81_CCR_ADDRESS) | V_SMB_TT_RD1BYTE,
--                   SMB_CSR(R_SMB_START));
--
--      while (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
--              ;
--
--      return 0;
--}
--
--int m41t81_set_time(unsigned long t)
--{
--      struct rtc_time tm;
--      unsigned long flags;
--
--      /* Note we don't care about the century */
--      rtc_time_to_tm(t, &tm);
--
--      /*
--       * Note the write order matters as it ensures the correctness.
--       * When we write sec, 10th sec is clear.  It is reasonable to
--       * believe we should finish writing min within a second.
--       */
--
--      spin_lock_irqsave(&rtc_lock, flags);
--      tm.tm_sec = bin2bcd(tm.tm_sec);
--      m41t81_write(M41T81REG_SC, tm.tm_sec);
--
--      tm.tm_min = bin2bcd(tm.tm_min);
--      m41t81_write(M41T81REG_MN, tm.tm_min);
--
--      tm.tm_hour = bin2bcd(tm.tm_hour);
--      tm.tm_hour = (tm.tm_hour & 0x3f) | (m41t81_read(M41T81REG_HR) & 0xc0);
--      m41t81_write(M41T81REG_HR, tm.tm_hour);
--
--      /* tm_wday starts from 0 to 6 */
--      if (tm.tm_wday == 0) tm.tm_wday = 7;
--      tm.tm_wday = bin2bcd(tm.tm_wday);
--      m41t81_write(M41T81REG_DY, tm.tm_wday);
--
--      tm.tm_mday = bin2bcd(tm.tm_mday);
--      m41t81_write(M41T81REG_DT, tm.tm_mday);
--
--      /* tm_mon starts from 0, *ick* */
--      tm.tm_mon ++;
--      tm.tm_mon = bin2bcd(tm.tm_mon);
--      m41t81_write(M41T81REG_MO, tm.tm_mon);
--
--      /* we don't do century, everything is beyond 2000 */
--      tm.tm_year %= 100;
--      tm.tm_year = bin2bcd(tm.tm_year);
--      m41t81_write(M41T81REG_YR, tm.tm_year);
--      spin_unlock_irqrestore(&rtc_lock, flags);
--
--      return 0;
--}
--
--unsigned long m41t81_get_time(void)
--{
--      unsigned int year, mon, day, hour, min, sec;
--      unsigned long flags;
--
--      /*
--       * min is valid if two reads of sec are the same.
--       */
--      for (;;) {
--              spin_lock_irqsave(&rtc_lock, flags);
--              sec = m41t81_read(M41T81REG_SC);
--              min = m41t81_read(M41T81REG_MN);
--              if (sec == m41t81_read(M41T81REG_SC)) break;
--              spin_unlock_irqrestore(&rtc_lock, flags);
--      }
--      hour = m41t81_read(M41T81REG_HR) & 0x3f;
--      day = m41t81_read(M41T81REG_DT);
--      mon = m41t81_read(M41T81REG_MO);
--      year = m41t81_read(M41T81REG_YR);
--      spin_unlock_irqrestore(&rtc_lock, flags);
--
--      sec = bcd2bin(sec);
--      min = bcd2bin(min);
--      hour = bcd2bin(hour);
--      day = bcd2bin(day);
--      mon = bcd2bin(mon);
--      year = bcd2bin(year);
--
--      year += 2000;
--
--      return mktime(year, mon, day, hour, min, sec);
--}
--
--int m41t81_probe(void)
--{
--      unsigned int tmp;
--
--      /* enable chip if it is not enabled yet */
--      tmp = m41t81_read(M41T81REG_SC);
--      m41t81_write(M41T81REG_SC, tmp & 0x7f);
--
--      return (m41t81_read(M41T81REG_SC) != -1);
--}
---- a/arch/mips/sibyte/swarm/rtc_xicor1241.c
-+++ /dev/null
-@@ -1,210 +0,0 @@
--/*
-- * Copyright (C) 2000, 2001 Broadcom Corporation
-- *
-- * Copyright (C) 2002 MontaVista Software Inc.
-- * Author: jsun@mvista.com or jsun@junsun.net
-- *
-- * This program is free software; you can redistribute  it and/or modify it
-- * under  the terms of  the GNU General  Public License as published by the
-- * Free Software Foundation;  either version 2 of the  License, or (at your
-- * option) any later version.
-- */
--#include <linux/bcd.h>
--#include <linux/types.h>
--#include <linux/time.h>
--
--#include <asm/time.h>
--#include <asm/addrspace.h>
--#include <asm/io.h>
--
--#include <asm/sibyte/sb1250.h>
--#include <asm/sibyte/sb1250_regs.h>
--#include <asm/sibyte/sb1250_smbus.h>
--
--
--/* Xicor 1241 definitions */
--
--/*
-- * Register bits
-- */
--
--#define X1241REG_SR_BAT       0x80            /* currently on battery power */
--#define X1241REG_SR_RWEL 0x04         /* r/w latch is enabled, can write RTC */
--#define X1241REG_SR_WEL 0x02          /* r/w latch is unlocked, can enable r/w now */
--#define X1241REG_SR_RTCF 0x01         /* clock failed */
--#define X1241REG_BL_BP2 0x80          /* block protect 2 */
--#define X1241REG_BL_BP1 0x40          /* block protect 1 */
--#define X1241REG_BL_BP0 0x20          /* block protect 0 */
--#define X1241REG_BL_WD1       0x10
--#define X1241REG_BL_WD0       0x08
--#define X1241REG_HR_MIL 0x80          /* military time format */
--
--/*
-- * Register numbers
-- */
--
--#define X1241REG_BL   0x10            /* block protect bits */
--#define X1241REG_INT  0x11            /*  */
--#define X1241REG_SC   0x30            /* Seconds */
--#define X1241REG_MN   0x31            /* Minutes */
--#define X1241REG_HR   0x32            /* Hours */
--#define X1241REG_DT   0x33            /* Day of month */
--#define X1241REG_MO   0x34            /* Month */
--#define X1241REG_YR   0x35            /* Year */
--#define X1241REG_DW   0x36            /* Day of Week */
--#define X1241REG_Y2K  0x37            /* Year 2K */
--#define X1241REG_SR   0x3F            /* Status register */
--
--#define X1241_CCR_ADDRESS     0x6F
--
--#define SMB_CSR(reg)  IOADDR(A_SMB_REGISTER(1, reg))
--
--static int xicor_read(uint8_t addr)
--{
--        while (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
--                ;
--
--      __raw_writeq((addr >> 8) & 0x7, SMB_CSR(R_SMB_CMD));
--      __raw_writeq(addr & 0xff, SMB_CSR(R_SMB_DATA));
--      __raw_writeq(V_SMB_ADDR(X1241_CCR_ADDRESS) | V_SMB_TT_WR2BYTE,
--                   SMB_CSR(R_SMB_START));
--
--        while (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
--                ;
--
--      __raw_writeq(V_SMB_ADDR(X1241_CCR_ADDRESS) | V_SMB_TT_RD1BYTE,
--                   SMB_CSR(R_SMB_START));
--
--        while (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
--                ;
--
--        if (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_ERROR) {
--                /* Clear error bit by writing a 1 */
--                __raw_writeq(M_SMB_ERROR, SMB_CSR(R_SMB_STATUS));
--                return -1;
--        }
--
--      return (__raw_readq(SMB_CSR(R_SMB_DATA)) & 0xff);
--}
--
--static int xicor_write(uint8_t addr, int b)
--{
--        while (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
--                ;
--
--      __raw_writeq(addr, SMB_CSR(R_SMB_CMD));
--      __raw_writeq((addr & 0xff) | ((b & 0xff) << 8), SMB_CSR(R_SMB_DATA));
--      __raw_writeq(V_SMB_ADDR(X1241_CCR_ADDRESS) | V_SMB_TT_WR3BYTE,
--                   SMB_CSR(R_SMB_START));
--
--        while (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_BUSY)
--                ;
--
--        if (__raw_readq(SMB_CSR(R_SMB_STATUS)) & M_SMB_ERROR) {
--                /* Clear error bit by writing a 1 */
--                __raw_writeq(M_SMB_ERROR, SMB_CSR(R_SMB_STATUS));
--                return -1;
--        } else {
--              return 0;
--      }
--}
--
--int xicor_set_time(unsigned long t)
--{
--      struct rtc_time tm;
--      int tmp;
--      unsigned long flags;
--
--      rtc_time_to_tm(t, &tm);
--      tm.tm_year += 1900;
--
--      spin_lock_irqsave(&rtc_lock, flags);
--      /* unlock writes to the CCR */
--      xicor_write(X1241REG_SR, X1241REG_SR_WEL);
--      xicor_write(X1241REG_SR, X1241REG_SR_WEL | X1241REG_SR_RWEL);
--
--      /* trivial ones */
--      tm.tm_sec = bin2bcd(tm.tm_sec);
--      xicor_write(X1241REG_SC, tm.tm_sec);
--
--      tm.tm_min = bin2bcd(tm.tm_min);
--      xicor_write(X1241REG_MN, tm.tm_min);
--
--      tm.tm_mday = bin2bcd(tm.tm_mday);
--      xicor_write(X1241REG_DT, tm.tm_mday);
--
--      /* tm_mon starts from 0, *ick* */
--      tm.tm_mon ++;
--      tm.tm_mon = bin2bcd(tm.tm_mon);
--      xicor_write(X1241REG_MO, tm.tm_mon);
--
--      /* year is split */
--      tmp = tm.tm_year / 100;
--      tm.tm_year %= 100;
--      xicor_write(X1241REG_YR, tm.tm_year);
--      xicor_write(X1241REG_Y2K, tmp);
--
--      /* hour is the most tricky one */
--      tmp = xicor_read(X1241REG_HR);
--      if (tmp & X1241REG_HR_MIL) {
--              /* 24 hour format */
--              tm.tm_hour = bin2bcd(tm.tm_hour);
--              tmp = (tmp & ~0x3f) | (tm.tm_hour & 0x3f);
--      } else {
--              /* 12 hour format, with 0x2 for pm */
--              tmp = tmp & ~0x3f;
--              if (tm.tm_hour >= 12) {
--                      tmp |= 0x20;
--                      tm.tm_hour -= 12;
--              }
--              tm.tm_hour = bin2bcd(tm.tm_hour);
--              tmp |= tm.tm_hour;
--      }
--      xicor_write(X1241REG_HR, tmp);
--
--      xicor_write(X1241REG_SR, 0);
--      spin_unlock_irqrestore(&rtc_lock, flags);
--
--      return 0;
--}
--
--unsigned long xicor_get_time(void)
--{
--      unsigned int year, mon, day, hour, min, sec, y2k;
--      unsigned long flags;
--
--      spin_lock_irqsave(&rtc_lock, flags);
--      sec = xicor_read(X1241REG_SC);
--      min = xicor_read(X1241REG_MN);
--      hour = xicor_read(X1241REG_HR);
--
--      if (hour & X1241REG_HR_MIL) {
--              hour &= 0x3f;
--      } else {
--              if (hour & 0x20)
--                      hour = (hour & 0xf) + 0x12;
--      }
--
--      day = xicor_read(X1241REG_DT);
--      mon = xicor_read(X1241REG_MO);
--      year = xicor_read(X1241REG_YR);
--      y2k = xicor_read(X1241REG_Y2K);
--      spin_unlock_irqrestore(&rtc_lock, flags);
--
--      sec = bcd2bin(sec);
--      min = bcd2bin(min);
--      hour = bcd2bin(hour);
--      day = bcd2bin(day);
--      mon = bcd2bin(mon);
--      year = bcd2bin(year);
--      y2k = bcd2bin(y2k);
--
--      year += (y2k * 100);
--
--      return mktime(year, mon, day, hour, min, sec);
--}
--
--int xicor_probe(void)
--{
--      return (xicor_read(X1241REG_SC) != -1);
--}
 --- a/arch/mips/sibyte/swarm/setup.c
 +++ b/arch/mips/sibyte/swarm/setup.c
 @@ -56,14 +56,6 @@ extern void sb1250_setup(void);
  const char *get_system_type(void)
  {
        return "SiByte " SIBYTE_BOARD_NAME;
-@@ -79,42 +71,14 @@ int swarm_be_handler(struct pt_regs *reg
+@@ -79,49 +71,18 @@ int swarm_be_handler(struct pt_regs *reg
        return (is_fixup ? MIPS_BE_FIXUP : MIPS_BE_FATAL);
  }
  
 -
 -enum swarm_rtc_type swarm_rtc_type;
 -
unsigned long read_persistent_clock(void)
void read_persistent_clock(struct timespec *ts)
  {
+       unsigned long sec;
 -      switch (swarm_rtc_type) {
 -      case RTC_XICOR:
--              return xicor_get_time();
+-              sec = xicor_get_time();
+-              break;
 -
 -      case RTC_M4LT81:
--              return m41t81_get_time();
+-              sec = m41t81_get_time();
+-              break;
 -
 -      case RTC_NONE:
 -      default:
--              return mktime(2000, 1, 1, 0, 0, 0);
+-              sec = mktime(2000, 1, 1, 0, 0, 0);
+-              break;
 -      }
-+      return mktime(2000, 1, 1, 0, 0, 0);
++      sec = mktime(2000, 1, 1, 0, 0, 0);
+       ts->tv_sec = sec;
+       ts->tv_nsec = 0;
  }
  
  int rtc_mips_set_time(unsigned long sec)
 -
 -      case RTC_NONE:
 -      default:
--              return -1;
+               return -1;
 -      }
-+      return -1;
  }
  
  void __init plat_mem_setup(void)
-@@ -131,11 +95,6 @@ void __init plat_mem_setup(void)
+@@ -138,11 +99,6 @@ void __init plat_mem_setup(void)
  
        board_be_handler = swarm_be_handler;
  
index a5657b9..93dd423 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/sibyte/swarm/swarm-i2c.c
 +++ b/arch/mips/sibyte/swarm/swarm-i2c.c
-@@ -15,6 +15,11 @@
+@@ -13,6 +13,11 @@
  #include <linux/init.h>
  #include <linux/kernel.h>
  
@@ -12,7 +12,7 @@
  
  static struct i2c_board_info swarm_i2c_info1[] __initdata = {
        {
-@@ -26,6 +31,8 @@ static int __init swarm_i2c_init(void)
+@@ -24,6 +29,8 @@ static int __init swarm_i2c_init(void)
  {
        int err;
  
index 449bda7..20b707e 100644 (file)
@@ -1,7 +1,6 @@
-diff -urN linux-2.6.30.10/arch/mips/Makefile linux-2.6.30.10.new//arch/mips/Makefile
---- linux-2.6.30.10/arch/mips/Makefile 2010-01-29 16:12:01.000000000 +0100
-+++ linux-2.6.30.10.new//arch/mips/Makefile    2009-12-04 07:00:07.000000000 +0100
-@@ -83,7 +83,7 @@
+--- a/arch/mips/Makefile
++++ b/arch/mips/Makefile
+@@ -83,7 +83,7 @@ all-$(CONFIG_BOOT_ELF64)     := $(vmlinux-64
  cflags-y                      += -G 0 -mno-abicalls -fno-pic -pipe
  cflags-y                      += -msoft-float
  LDFLAGS_vmlinux                       += -G 0 -static -n -nostdlib
@@ -10,10 +9,9 @@ diff -urN linux-2.6.30.10/arch/mips/Makefile linux-2.6.30.10.new//arch/mips/Make
  
  cflags-y += -ffreestanding
  
-diff -urN linux-2.6.30.10/arch/mips/include/asm/module.h linux-2.6.30.10.new//arch/mips/include/asm/module.h
---- linux-2.6.30.10/arch/mips/include/asm/module.h     2010-01-29 16:12:01.000000000 +0100
-+++ linux-2.6.30.10.new//arch/mips/include/asm/module.h        2009-12-04 07:00:07.000000000 +0100
-@@ -9,11 +9,6 @@
+--- a/arch/mips/include/asm/module.h
++++ b/arch/mips/include/asm/module.h
+@@ -9,11 +9,6 @@ struct mod_arch_specific {
        struct list_head dbe_list;
        const struct exception_table_entry *dbe_start;
        const struct exception_table_entry *dbe_end;
@@ -25,10 +23,9 @@ diff -urN linux-2.6.30.10/arch/mips/include/asm/module.h linux-2.6.30.10.new//ar
  };
  
  typedef uint8_t Elf64_Byte;           /* Type for a 8-bit quantity.  */
-diff -urN linux-2.6.30.10/arch/mips/kernel/module.c linux-2.6.30.10.new//arch/mips/kernel/module.c
---- linux-2.6.30.10/arch/mips/kernel/module.c  2010-01-29 16:12:01.000000000 +0100
-+++ linux-2.6.30.10.new//arch/mips/kernel/module.c     2009-12-04 07:00:07.000000000 +0100
-@@ -43,116 +43,6 @@
+--- a/arch/mips/kernel/module.c
++++ b/arch/mips/kernel/module.c
+@@ -43,117 +43,6 @@ static struct mips_hi16 *mips_hi16_list;
  static LIST_HEAD(dbe_list);
  static DEFINE_SPINLOCK(dbe_lock);
  
@@ -142,10 +139,11 @@ diff -urN linux-2.6.30.10/arch/mips/kernel/module.c linux-2.6.30.10.new//arch/mi
 -              __free_page(page);
 -}
 -
+-
  void *module_alloc(unsigned long size)
  {
  #ifdef MODULE_START
-@@ -168,101 +58,23 @@
+@@ -169,99 +58,21 @@ void *module_alloc(unsigned long size)
  
        return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL);
  #else
@@ -189,11 +187,8 @@ diff -urN linux-2.6.30.10/arch/mips/kernel/module.c linux-2.6.30.10.new//arch/mi
 -      } else {
 -              vfree(module_region);
 -      }
-+      vfree(module_region);
-       /* FIXME: If module_region == mod->init_region, trim exception
-            table entries. */
- }
+-}
+-
 -static void *__module_alloc(int size, bool phys)
 -{
 -      void *ptr;
@@ -211,8 +206,9 @@ diff -urN linux-2.6.30.10/arch/mips/kernel/module.c linux-2.6.30.10.new//arch/mi
 -              kfree(ptr);
 -      else
 -              vfree(ptr);
--}
--
++      vfree(module_region);
+ }
  int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
                              char *secstrings, struct module *mod)
  {
@@ -249,7 +245,7 @@ diff -urN linux-2.6.30.10/arch/mips/kernel/module.c linux-2.6.30.10.new//arch/mi
        return 0;
  }
  
-@@ -285,37 +97,27 @@
+@@ -284,36 +95,28 @@ static int apply_r_mips_32_rela(struct m
        return 0;
  }
  
@@ -258,7 +254,6 @@ diff -urN linux-2.6.30.10/arch/mips/kernel/module.c linux-2.6.30.10.new//arch/mi
 +static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v)
  {
 -      unsigned *tramp = start + *plt_offset;
--
 -      *plt_offset += 4 * sizeof(int);
 -
 -      /* adjust carry for addiu */
@@ -270,7 +265,8 @@ diff -urN linux-2.6.30.10/arch/mips/kernel/module.c linux-2.6.30.10.new//arch/mi
 -      tramp[2] = 0x03200008;                  /* jr t9 */
 -      tramp[3] = 0x00000000;                  /* nop */
 +      if (v % 4) {
-+              printk(KERN_ERR "module %s: dangerous relocation\n", me->name);
++              pr_err("module %s: dangerous R_MIPS_26 REL relocation\n",
++                     me->name);
 +              return -ENOEXEC;
 +      }
  
@@ -301,8 +297,8 @@ diff -urN linux-2.6.30.10/arch/mips/kernel/module.c linux-2.6.30.10.new//arch/mi
 +static int apply_r_mips_26_rela(struct module *me, u32 *location, Elf_Addr v)
  {
        if (v % 4) {
-               printk(KERN_ERR "module %s: dangerous relocation\n", me->name);
-@@ -323,31 +125,17 @@
+               pr_err("module %s: dangerous R_MIPS_26 RELArelocation\n",
+@@ -322,31 +125,17 @@ static int set_r_mips_26(struct module *
        }
  
        if ((v & 0xf0000000) != (((unsigned long)location + 4) & 0xf0000000)) {
@@ -337,7 +333,7 @@ diff -urN linux-2.6.30.10/arch/mips/kernel/module.c linux-2.6.30.10.new//arch/mi
  static int apply_r_mips_hi16_rel(struct module *me, u32 *location, Elf_Addr v)
  {
        struct mips_hi16 *n;
-@@ -612,32 +400,11 @@
+@@ -611,32 +400,11 @@ int module_finalize(const Elf_Ehdr *hdr,
                list_add(&me->arch.dbe_list, &dbe_list);
                spin_unlock_irq(&dbe_lock);
        }