atheros: use correct address space and pointer type for register access
[openwrt/svn-archive/archive.git] / target / linux / atheros / patches-3.10 / 100-board.patch
index df7dcf602049ead3860d6b4f044ae747a4525fc0..02ab9432d4279e59ab2230a2fa970d979b62799a 100644 (file)
@@ -84,7 +84,7 @@
 +obj-$(CONFIG_ATHEROS_AR2315) += ar2315.o
 --- /dev/null
 +++ b/arch/mips/ar231x/board.c
-@@ -0,0 +1,259 @@
+@@ -0,0 +1,261 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General Public
 + * License.  See the file "COPYING" in the main directory of this archive
 +#include <linux/random.h>
 +#include <linux/etherdevice.h>
 +#include <linux/irq.h>
++#include <linux/io.h>
 +#include <asm/irq_cpu.h>
 +#include <asm/reboot.h>
-+#include <asm/io.h>
 +
 +#include <ar231x_platform.h>
 +#include "devices.h"
 +check_radio_magic(u8 *addr)
 +{
 +      addr += 0x7a; /* offset for flash magic */
-+      if ((addr[0] == 0x5a) && (addr[1] == 0xa5)) {
++      if ((addr[0] == 0x5a) && (addr[1] == 0xa5))
 +              return 1;
-+      }
++
 +      return 0;
 +}
 +
 +              ar231x_board.radio = addr + 0x10000;
 +
 +      if (ar231x_board.radio) {
-+              /* broken board data detected, use radio data to find the offset,
-+               * user will fix this */
++              /* broken board data detected, use radio data to find the
++               * offset, user will fix this */
 +              return 1;
 +      }
 +      return 0;
 +
 +      /* AR2316 relocates radio config to new location */
 +      if (!found) {
-+          for (radio_config = board_config + 0xf8;
-+                      (radio_config < flash_limit - 0x1000 + 0xf8);
-+                       radio_config += 0x1000) {
++              for (radio_config = board_config + 0xf8;
++                   (radio_config < flash_limit - 0x1000 + 0xf8);
++                   radio_config += 0x1000) {
 +                      if ((*(u32 *)radio_config != 0xffffffff) &&
-+                              check_radio_magic(radio_config)) {
++                          check_radio_magic(radio_config)) {
 +                              found = 1;
 +                              break;
 +                      }
-+          }
++              }
 +      }
 +
 +      if (!found) {
-+              printk("Could not find Radio Configuration data\n");
++              pr_warn("WARNING: Could not find Radio Configuration data\n");
 +              radio_config = 0;
 +      }
 +
-+      return (u8 *) radio_config;
++      return radio_config;
 +}
 +
 +int __init
 +      }
 +
 +      if (!bcfg) {
-+              printk(KERN_WARNING "WARNING: No board configuration data found!\n");
++              pr_warn("WARNING: No board configuration data found!\n");
 +              return -ENODEV;
 +      }
 +
 +      board_data = kzalloc(BOARD_CONFIG_BUFSZ, GFP_KERNEL);
-+      ar231x_board.config = (struct ar231x_boarddata *) board_data;
++      ar231x_board.config = (struct ar231x_boarddata *)board_data;
 +      memcpy(board_data, bcfg, 0x100);
 +      if (broken_boarddata) {
-+              printk(KERN_WARNING "WARNING: broken board data detected\n");
++              pr_warn("WARNING: broken board data detected\n");
 +              config = ar231x_board.config;
 +              if (!memcmp(config->enet0_mac, "\x00\x00\x00\x00\x00\x00", 6)) {
-+                      printk(KERN_INFO "Fixing up empty mac addresses\n");
++                      pr_info("Fixing up empty mac addresses\n");
 +                      config->reset_config_gpio = 0xffff;
 +                      config->sys_led_gpio = 0xffff;
 +                      random_ether_addr(config->wlan0_mac);
 +       * of what the physical layout on the flash chip looks like */
 +
 +      if (ar231x_board.radio)
-+              rcfg = (u8 *) ar231x_board.radio;
++              rcfg = (u8 *)ar231x_board.radio;
 +      else
 +              rcfg = find_radio_config(flash_limit, bcfg);
 +
 +      radio_data = board_data + 0x100 + ((rcfg - bcfg) & 0xfff);
 +      ar231x_board.radio = radio_data;
 +      offset = radio_data - board_data;
-+      printk(KERN_INFO "Radio config found at offset 0x%x(0x%x)\n", rcfg - bcfg, offset);
++      pr_info("Radio config found at offset 0x%x (0x%x)\n", rcfg - bcfg,
++              offset);
 +      rcfg_size = BOARD_CONFIG_BUFSZ - offset;
 +      memcpy(radio_data, rcfg, rcfg_size);
 +
 +      mac_addr = &radio_data[0x1d * 2];
 +      if (is_broadcast_ether_addr(mac_addr)) {
-+              printk(KERN_INFO "Radio MAC is blank; using board-data\n");
++              pr_info("Radio MAC is blank; using board-data\n");
 +              memcpy(mac_addr, ar231x_board.config->wlan0_mac, ETH_ALEN);
 +      }
 +
 +ar231x_halt(void)
 +{
 +      local_irq_disable();
-+      while (1);
++      while (1)
++              ;
 +}
 +
 +void __init
 + * address(es).
 + */
 +struct ar231x_boarddata {
-+    u32 magic;                       /* board data is valid */
++      u32 magic;                   /* board data is valid */
 +#define AR531X_BD_MAGIC 0x35333131   /* "5311", for all 531x platforms */
-+    u16 cksum;                       /* checksum (starting with BD_REV 2) */
-+    u16 rev;                         /* revision of this struct */
-+#define BD_REV  4
-+    char board_name[64];             /* Name of board */
-+    u16 major;                       /* Board major number */
-+    u16 minor;                       /* Board minor number */
-+    u32 flags;                      /* Board configuration */
++      u16 cksum;                   /* checksum (starting with BD_REV 2) */
++      u16 rev;                     /* revision of this struct */
++#define BD_REV 4
++      char board_name[64];         /* Name of board */
++      u16 major;                   /* Board major number */
++      u16 minor;                   /* Board minor number */
++      u32 flags;                   /* Board configuration */
 +#define BD_ENET0        0x00000001   /* ENET0 is stuffed */
 +#define BD_ENET1        0x00000002   /* ENET1 is stuffed */
 +#define BD_UART1        0x00000004   /* UART1 is stuffed */
 +#define BD_WLAN0_5G_EN  0x00008000   /* FLAG for radio0_2G */
 +#define BD_WLAN1_2G_EN  0x00020000   /* FLAG for radio0_2G */
 +#define BD_WLAN1_5G_EN  0x00040000   /* FLAG for radio0_2G */
-+    u16 reset_config_gpio;           /* Reset factory GPIO pin */
-+    u16 sys_led_gpio;                /* System LED GPIO pin */
++      u16 reset_config_gpio;       /* Reset factory GPIO pin */
++      u16 sys_led_gpio;            /* System LED GPIO pin */
 +
-+    u32 cpu_freq;                    /* CPU core frequency in Hz */
-+    u32 sys_freq;                    /* System frequency in Hz */
-+    u32 cnt_freq;                    /* Calculated C0_COUNT frequency */
++      u32 cpu_freq;                /* CPU core frequency in Hz */
++      u32 sys_freq;                /* System frequency in Hz */
++      u32 cnt_freq;                /* Calculated C0_COUNT frequency */
 +
-+    u8  wlan0_mac[6];
-+    u8  enet0_mac[6];
-+    u8  enet1_mac[6];
++      u8  wlan0_mac[6];
++      u8  enet0_mac[6];
++      u8  enet1_mac[6];
 +
-+    u16 pci_id;                      /* Pseudo PCIID for common code */
-+    u16 mem_cap;                     /* cap bank1 in MB */
++      u16 pci_id;                  /* Pseudo PCIID for common code */
++      u16 mem_cap;                 /* cap bank1 in MB */
 +
-+    /* version 3 */
-+    u8  wlan1_mac[6];                 /* (ar5212) */
++      /* version 3 */
++      u8  wlan1_mac[6];            /* (ar5212) */
 +};
 +
 +#define BOARD_CONFIG_BUFSZ            0x1000
 +#endif /* __ASM_MACH_ATHEROS_CPU_FEATURE_OVERRIDES_H */
 --- /dev/null
 +++ b/arch/mips/include/asm/mach-ar231x/dma-coherence.h
-@@ -0,0 +1,76 @@
+@@ -0,0 +1,79 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General Public
 + * License.  See the file "COPYING" in the main directory of this archive
 +              return 0;
 +}
 +
-+static inline dma_addr_t plat_map_dma_mem(struct device *dev, void *addr, size_t size)
++static inline dma_addr_t
++plat_map_dma_mem(struct device *dev, void *addr, size_t size)
 +{
 +      return virt_to_phys(addr) + ar231x_dev_offset(dev);
 +}
 +
-+static inline dma_addr_t plat_map_dma_mem_page(struct device *dev, struct page *page)
++static inline dma_addr_t
++plat_map_dma_mem_page(struct device *dev, struct page *page)
 +{
 +      return page_to_phys(page) + ar231x_dev_offset(dev);
 +}
 +
-+static inline unsigned long plat_dma_addr_to_phys(struct device *dev,
-+      dma_addr_t dma_addr)
++static inline unsigned long
++plat_dma_addr_to_phys(struct device *dev, dma_addr_t dma_addr)
 +{
 +      return dma_addr - ar231x_dev_offset(dev);
 +}
 +
-+static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr,
-+      size_t size, enum dma_data_direction direction)
++static inline void
++plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr, size_t size,
++                 enum dma_data_direction direction)
 +{
 +}
 +
 +#endif /* __ASM_MACH_GENERIC_DMA_COHERENCE_H */
 --- /dev/null
 +++ b/arch/mips/include/asm/mach-ar231x/gpio.h
-@@ -0,0 +1,28 @@
+@@ -0,0 +1,30 @@
 +#ifndef _ATHEROS_GPIO_H_
 +#define _ATHEROS_GPIO_H_
 +
 +/* not sure if these are used? */
 +
 +/* Returns IRQ to attach for gpio.  Unchecked function */
-+static inline int gpio_to_irq(unsigned gpio) {
++static inline int gpio_to_irq(unsigned gpio)
++{
 +      return AR531X_GPIO_IRQ(gpio);
 +}
 +
 +/* Returns gpio for IRQ attached.  Unchecked function */
-+static inline int irq_to_gpio(unsigned irq) {
++static inline int irq_to_gpio(unsigned irq)
++{
 +      return irq - AR531X_GPIO_IRQ(0);
 +}
 +
 +#endif /* __ASM_MIPS_MACH_ATHEROS_WAR_H */
 --- /dev/null
 +++ b/arch/mips/include/asm/mach-ar231x/ar2315_regs.h
-@@ -0,0 +1,580 @@
+@@ -0,0 +1,597 @@
 +/*
 + * Register definitions for AR2315+
 + *
 +#define AR2315_ENET0            0x10500000      /* ETHERNET MMR */
 +#define AR2315_DSLBASE          0x11000000      /* RESET CONTROL MMR */
 +#define AR2315_UART0            0x11100003      /* UART MMR */
-+#define AR2315_SPI              0x11300000      /* SPI FLASH MMR */
++#define AR2315_SPI_MMR          0x11300000      /* SPI FLASH MMR */
 +#define AR2315_PCIEXT           0x80000000      /* pci external */
 +
 +/*
 +#define AR2315_RESET_COLD_APB              0x00000002
 +#define AR2315_RESET_COLD_CPU              0x00000004
 +#define AR2315_RESET_COLD_CPUWARM          0x00000008
-+#define AR2315_RESET_SYSTEM                (RESET_COLD_CPU | RESET_COLD_APB | RESET_COLD_AHB)      /* full system */
++#define AR2315_RESET_SYSTEM   \
++      (RESET_COLD_CPU |\
++       RESET_COLD_APB |\
++       RESET_COLD_AHB)                                   /* full system */
 +#define AR2317_RESET_SYSTEM                0x00000010
 +
 +
 +#define AR2315_RESET            (AR2315_DSLBASE + 0x0004)
 +
-+#define AR2315_RESET_WARM_WLAN0_MAC        0x00000001      /* warm reset WLAN0 MAC */
-+#define AR2315_RESET_WARM_WLAN0_BB         0x00000002      /* warm reset WLAN0 BaseBand */
-+#define AR2315_RESET_MPEGTS_RSVD           0x00000004      /* warm reset MPEG-TS */
-+#define AR2315_RESET_PCIDMA                0x00000008      /* warm reset PCI ahb/dma */
-+#define AR2315_RESET_MEMCTL                0x00000010      /* warm reset memory controller */
-+#define AR2315_RESET_LOCAL                 0x00000020      /* warm reset local bus */
-+#define AR2315_RESET_I2C_RSVD              0x00000040      /* warm reset I2C bus */
-+#define AR2315_RESET_SPI                   0x00000080      /* warm reset SPI interface */
-+#define AR2315_RESET_UART0                 0x00000100      /* warm reset UART0 */
-+#define AR2315_RESET_IR_RSVD               0x00000200      /* warm reset IR interface */
-+#define AR2315_RESET_EPHY0                 0x00000400      /* cold reset ENET0 phy */
-+#define AR2315_RESET_ENET0                 0x00000800      /* cold reset ENET0 mac */
++/* warm reset WLAN0 MAC */
++#define AR2315_RESET_WARM_WLAN0_MAC        0x00000001
++/* warm reset WLAN0 BaseBand */
++#define AR2315_RESET_WARM_WLAN0_BB         0x00000002
++/* warm reset MPEG-TS */
++#define AR2315_RESET_MPEGTS_RSVD           0x00000004
++/* warm reset PCI ahb/dma */
++#define AR2315_RESET_PCIDMA                0x00000008
++/* warm reset memory controller */
++#define AR2315_RESET_MEMCTL                0x00000010
++/* warm reset local bus */
++#define AR2315_RESET_LOCAL                 0x00000020
++/* warm reset I2C bus */
++#define AR2315_RESET_I2C_RSVD              0x00000040
++/* warm reset SPI interface */
++#define AR2315_RESET_SPI                   0x00000080
++/* warm reset UART0 */
++#define AR2315_RESET_UART0                 0x00000100
++/* warm reset IR interface */
++#define AR2315_RESET_IR_RSVD               0x00000200
++/* cold reset ENET0 phy */
++#define AR2315_RESET_EPHY0                 0x00000400
++/* cold reset ENET0 mac */
++#define AR2315_RESET_ENET0                 0x00000800
 +
 +/*
 + * AHB master arbitration control
 + */
 +#define AR2315_AHB_ARB_CTL      (AR2315_DSLBASE + 0x0008)
 +
-+#define AR2315_ARB_CPU                     0x00000001      /* CPU, default */
-+#define AR2315_ARB_WLAN                    0x00000002      /* WLAN */
-+#define AR2315_ARB_MPEGTS_RSVD             0x00000004      /* MPEG-TS */
-+#define AR2315_ARB_LOCAL                   0x00000008      /* LOCAL */
-+#define AR2315_ARB_PCI                     0x00000010      /* PCI */
-+#define AR2315_ARB_ETHERNET                0x00000020      /* Ethernet */
-+#define AR2315_ARB_RETRY                   0x00000100      /* retry policy, debug only */
++/* CPU, default */
++#define AR2315_ARB_CPU                     0x00000001
++/* WLAN */
++#define AR2315_ARB_WLAN                    0x00000002
++/* MPEG-TS */
++#define AR2315_ARB_MPEGTS_RSVD             0x00000004
++/* LOCAL */
++#define AR2315_ARB_LOCAL                   0x00000008
++/* PCI */
++#define AR2315_ARB_PCI                     0x00000010
++/* Ethernet */
++#define AR2315_ARB_ETHERNET                0x00000020
++/* retry policy, debug only */
++#define AR2315_ARB_RETRY                   0x00000100
 +
 +/*
 + * Config Register
 + */
 +#define AR2315_ENDIAN_CTL       (AR2315_DSLBASE + 0x000c)
 +
-+#define AR2315_CONFIG_AHB                  0x00000001      /* EC - AHB bridge endianess */
-+#define AR2315_CONFIG_WLAN                 0x00000002      /* WLAN byteswap */
-+#define AR2315_CONFIG_MPEGTS_RSVD          0x00000004      /* MPEG-TS byteswap */
-+#define AR2315_CONFIG_PCI                  0x00000008      /* PCI byteswap */
-+#define AR2315_CONFIG_MEMCTL               0x00000010      /* Memory controller endianess */
-+#define AR2315_CONFIG_LOCAL                0x00000020      /* Local bus byteswap */
-+#define AR2315_CONFIG_ETHERNET             0x00000040      /* Ethernet byteswap */
-+
-+#define AR2315_CONFIG_MERGE                0x00000200      /* CPU write buffer merge */
-+#define AR2315_CONFIG_CPU                  0x00000400      /* CPU big endian */
++/* EC - AHB bridge endianess */
++#define AR2315_CONFIG_AHB                  0x00000001
++/* WLAN byteswap */
++#define AR2315_CONFIG_WLAN                 0x00000002
++/* MPEG-TS byteswap */
++#define AR2315_CONFIG_MPEGTS_RSVD          0x00000004
++/* PCI byteswap */
++#define AR2315_CONFIG_PCI                  0x00000008
++/* Memory controller endianess */
++#define AR2315_CONFIG_MEMCTL               0x00000010
++/* Local bus byteswap */
++#define AR2315_CONFIG_LOCAL                0x00000020
++/* Ethernet byteswap */
++#define AR2315_CONFIG_ETHERNET             0x00000040
++
++/* CPU write buffer merge */
++#define AR2315_CONFIG_MERGE                0x00000200
++/* CPU big endian */
++#define AR2315_CONFIG_CPU                  0x00000400
 +#define AR2315_CONFIG_PCIAHB               0x00000800
 +#define AR2315_CONFIG_PCIAHB_BRIDGE        0x00001000
-+#define AR2315_CONFIG_SPI                  0x00008000      /* SPI byteswap */
++/* SPI byteswap */
++#define AR2315_CONFIG_SPI                  0x00008000
 +#define AR2315_CONFIG_CPU_DRAM             0x00010000
 +#define AR2315_CONFIG_CPU_PCI              0x00020000
 +#define AR2315_CONFIG_CPU_MMR              0x00040000
 +#define AR2315_IF_DISABLED                 0
 +#define AR2315_IF_PCI                      1
 +#define AR2315_IF_TS_LOCAL                 2
-+#define AR2315_IF_ALL                      3   /* only for emulation with separate pins */
++/* only for emulation with separate pins */
++#define AR2315_IF_ALL                      3
 +#define AR2315_IF_LOCAL_HOST               0x00000008
 +#define AR2315_IF_PCI_HOST                 0x00000010
 +#define AR2315_IF_PCI_INTR                 0x00000020
 +#define AR2315_IMR              (AR2315_DSLBASE + 0x0024)
 +#define AR2315_GISR             (AR2315_DSLBASE + 0x0028)
 +
-+#define AR2315_ISR_UART0                   0x0001           /* high speed UART */
-+#define AR2315_ISR_I2C_RSVD                0x0002           /* I2C bus */
-+#define AR2315_ISR_SPI                     0x0004           /* SPI bus */
-+#define AR2315_ISR_AHB                     0x0008           /* AHB error */
-+#define AR2315_ISR_APB                     0x0010           /* APB error */
-+#define AR2315_ISR_TIMER                   0x0020           /* timer */
-+#define AR2315_ISR_GPIO                    0x0040           /* GPIO */
-+#define AR2315_ISR_WD                      0x0080           /* watchdog */
-+#define AR2315_ISR_IR_RSVD                 0x0100           /* IR */
-+
-+#define AR2315_GISR_MISC                   0x0001
-+#define AR2315_GISR_WLAN0                  0x0002
-+#define AR2315_GISR_MPEGTS_RSVD            0x0004
-+#define AR2315_GISR_LOCALPCI               0x0008
-+#define AR2315_GISR_WMACPOLL               0x0010
-+#define AR2315_GISR_TIMER                  0x0020
-+#define AR2315_GISR_ETHERNET               0x0040
++#define AR2315_ISR_UART0      0x0001           /* high speed UART */
++#define AR2315_ISR_I2C_RSVD   0x0002           /* I2C bus */
++#define AR2315_ISR_SPI                0x0004           /* SPI bus */
++#define AR2315_ISR_AHB                0x0008           /* AHB error */
++#define AR2315_ISR_APB                0x0010           /* APB error */
++#define AR2315_ISR_TIMER      0x0020           /* timer */
++#define AR2315_ISR_GPIO               0x0040           /* GPIO */
++#define AR2315_ISR_WD         0x0080           /* watchdog */
++#define AR2315_ISR_IR_RSVD    0x0100           /* IR */
++
++#define AR2315_GISR_MISC      0x0001
++#define AR2315_GISR_WLAN0     0x0002
++#define AR2315_GISR_MPEGTS_RSVD       0x0004
++#define AR2315_GISR_LOCALPCI  0x0008
++#define AR2315_GISR_WMACPOLL  0x0010
++#define AR2315_GISR_TIMER     0x0020
++#define AR2315_GISR_ETHERNET  0x0040
 +
 +/*
 + * Interrupt routing from IO to the processor IP bits
 +#define AR2315_WD               (AR2315_DSLBASE + 0x0038)
 +#define AR2315_WDC              (AR2315_DSLBASE + 0x003c)
 +
-+#define AR2315_WDC_IGNORE_EXPIRATION       0x00000000
-+#define AR2315_WDC_NMI                     0x00000001               /* NMI on watchdog */
-+#define AR2315_WDC_RESET                   0x00000002               /* reset on watchdog */
++#define AR2315_WDC_IGNORE_EXPIRATION  0x00000000
++#define AR2315_WDC_NMI                        0x00000001      /* NMI on watchdog */
++#define AR2315_WDC_RESET              0x00000002      /* reset on watchdog */
 +
 +/*
 + * CPU Performance Counters
 +#define AR2315_PERFCNT0         (AR2315_DSLBASE + 0x0048)
 +#define AR2315_PERFCNT1         (AR2315_DSLBASE + 0x004c)
 +
-+#define AR2315_PERF0_DATAHIT                0x0001  /* Count Data Cache Hits */
-+#define AR2315_PERF0_DATAMISS               0x0002  /* Count Data Cache Misses */
-+#define AR2315_PERF0_INSTHIT                0x0004  /* Count Instruction Cache Hits */
-+#define AR2315_PERF0_INSTMISS               0x0008  /* Count Instruction Cache Misses */
-+#define AR2315_PERF0_ACTIVE                 0x0010  /* Count Active Processor Cycles */
-+#define AR2315_PERF0_WBHIT                  0x0020  /* Count CPU Write Buffer Hits */
-+#define AR2315_PERF0_WBMISS                 0x0040  /* Count CPU Write Buffer Misses */
-+
-+#define AR2315_PERF1_EB_ARDY                0x0001  /* Count EB_ARdy signal */
-+#define AR2315_PERF1_EB_AVALID              0x0002  /* Count EB_AValid signal */
-+#define AR2315_PERF1_EB_WDRDY               0x0004  /* Count EB_WDRdy signal */
-+#define AR2315_PERF1_EB_RDVAL               0x0008  /* Count EB_RdVal signal */
-+#define AR2315_PERF1_VRADDR                 0x0010  /* Count valid read address cycles */
-+#define AR2315_PERF1_VWADDR                 0x0020  /* Count valid write address cycles */
-+#define AR2315_PERF1_VWDATA                 0x0040  /* Count valid write data cycles */
++#define AR2315_PERF0_DATAHIT  0x0001  /* Count Data Cache Hits */
++#define AR2315_PERF0_DATAMISS 0x0002  /* Count Data Cache Misses */
++#define AR2315_PERF0_INSTHIT  0x0004  /* Count Instruction Cache Hits */
++#define AR2315_PERF0_INSTMISS 0x0008  /* Count Instruction Cache Misses */
++#define AR2315_PERF0_ACTIVE   0x0010  /* Count Active Processor Cycles */
++#define AR2315_PERF0_WBHIT    0x0020  /* Count CPU Write Buffer Hits */
++#define AR2315_PERF0_WBMISS   0x0040  /* Count CPU Write Buffer Misses */
++
++#define AR2315_PERF1_EB_ARDY  0x0001  /* Count EB_ARdy signal */
++#define AR2315_PERF1_EB_AVALID        0x0002  /* Count EB_AValid signal */
++#define AR2315_PERF1_EB_WDRDY 0x0004  /* Count EB_WDRdy signal */
++#define AR2315_PERF1_EB_RDVAL 0x0008  /* Count EB_RdVal signal */
++#define AR2315_PERF1_VRADDR   0x0010  /* Count valid read address cycles */
++#define AR2315_PERF1_VWADDR   0x0020  /* Count valid write address cycles */
++#define AR2315_PERF1_VWDATA   0x0040  /* Count valid write data cycles */
 +
 +/*
 + * AHB Error Reporting.
 +#define AR2315_AHB_ERR3         (AR2315_DSLBASE + 0x005c)  /* hrdata */
 +#define AR2315_AHB_ERR4         (AR2315_DSLBASE + 0x0060)  /* status */
 +
-+#define AHB_ERROR_DET               1   /* AHB Error has been detected,          */
-+                                        /* write 1 to clear all bits in ERR0     */
-+#define AHB_ERROR_OVR               2   /* AHB Error overflow has been detected  */
-+#define AHB_ERROR_WDT               4   /* AHB Error due to wdt instead of hresp */
++#define AHB_ERROR_DET 1 /* AHB Error has been detected,          */
++                        /* write 1 to clear all bits in ERR0     */
++#define AHB_ERROR_OVR 2 /* AHB Error overflow has been detected  */
++#define AHB_ERROR_WDT 4 /* AHB Error due to wdt instead of hresp */
 +
 +#define AR2315_PROCERR_HMAST               0x0000000f
 +#define AR2315_PROCERR_HMAST_DFLT          0
 +#define AR2315_GPIO_CR          (AR2315_DSLBASE + 0x0098)
 +#define AR2315_GPIO_INT         (AR2315_DSLBASE + 0x00a0)
 +
-+#define AR2315_GPIO_CR_M(x)                (1 << (x))                  /* mask for i/o */
-+#define AR2315_GPIO_CR_O(x)                (1 << (x))                  /* output */
-+#define AR2315_GPIO_CR_I(x)                (0)                         /* input */
++#define AR2315_GPIO_CR_M(x)                (1 << (x))       /* mask for i/o */
++#define AR2315_GPIO_CR_O(x)                (1 << (x))       /* output */
++#define AR2315_GPIO_CR_I(x)                (0)              /* input */
 +
-+#define AR2315_GPIO_INT_S(x)               (x)                         /* interrupt enable */
-+#define AR2315_GPIO_INT_M                  (0x3F)                      /* mask for int */
-+#define AR2315_GPIO_INT_LVL(x)             ((x) << 6)                  /* interrupt level */
-+#define AR2315_GPIO_INT_LVL_M              ((0x3) << 6)                /* mask for int level */
++#define AR2315_GPIO_INT_S(x)  (x)             /* interrupt enable */
++#define AR2315_GPIO_INT_M     (0x3F)          /* mask for int */
++#define AR2315_GPIO_INT_LVL(x)        ((x) << 6)      /* interrupt level */
++#define AR2315_GPIO_INT_LVL_M ((0x3) << 6)    /* mask for int level */
 +
-+#define AR2315_GPIO_INT_MAX_Y                         1   /* Maximum value of Y for AR5313_GPIO_INT_* macros */
-+#define AR2315_GPIO_INT_LVL_OFF                               0   /* Triggerring off */
-+#define AR2315_GPIO_INT_LVL_LOW                               1   /* Low Level Triggered */
-+#define AR2315_GPIO_INT_LVL_HIGH                      2   /* High Level Triggered */
-+#define AR2315_GPIO_INT_LVL_EDGE                      3   /* Edge Triggered */
++#define AR2315_GPIO_INT_MAX_Y         1   /* Maximum value of Y for
++                                           * AR5313_GPIO_INT_* macros */
++#define AR2315_GPIO_INT_LVL_OFF               0   /* Triggerring off */
++#define AR2315_GPIO_INT_LVL_LOW               1   /* Low Level Triggered */
++#define AR2315_GPIO_INT_LVL_HIGH      2   /* High Level Triggered */
++#define AR2315_GPIO_INT_LVL_EDGE      3   /* Edge Triggered */
 +
 +#define AR2315_RESET_GPIO       5
 +#define AR2315_NUM_GPIO         22
 +#define SDRAM_BANKADDR_BITS_S       3
 +
 +/*
-+ * SPI Flash Interface Registers
-+ */
-+
-+#define AR2315_SPI_CTL      (AR2315_SPI + 0x00)
-+#define AR2315_SPI_OPCODE   (AR2315_SPI + 0x04)
-+#define AR2315_SPI_DATA     (AR2315_SPI + 0x08)
-+
-+#define SPI_CTL_START           0x00000100
-+#define SPI_CTL_BUSY            0x00010000
-+#define SPI_CTL_TXCNT_MASK      0x0000000f
-+#define SPI_CTL_RXCNT_MASK      0x000000f0
-+#define SPI_CTL_TX_RX_CNT_MASK  0x000000ff
-+#define SPI_CTL_SIZE_MASK       0x00060000
-+
-+#define SPI_CTL_CLK_SEL_MASK    0x03000000
-+#define SPI_OPCODE_MASK         0x000000ff
-+
-+/*
 + * PCI Bus Interface Registers
 + */
 +#define AR2315_PCI_1MS_REG      (AR2315_PCI + 0x0008)
-+#define AR2315_PCI_1MS_MASK     0x3FFFF         /* # of AHB clk cycles in 1ms */
++#define AR2315_PCI_1MS_MASK     0x3FFFF       /* # of AHB clk cycles in 1ms */
 +
 +#define AR2315_PCI_MISC_CONFIG  (AR2315_PCI + 0x000c)
 +#define AR2315_PCIMISC_TXD_EN   0x00000001      /* Enable TXD for fragments */
 +#define AR2315_PCIGRANT_FRAME   0x00000040      /* 6:7=1 grant waits 4 frame */
 +#define AR2315_PCIGRANT_IDLE    0x00000080      /* 6:7=2 grant waits 4 idle */
 +#define AR2315_PCIGRANT_GAP     0x00000000      /* 6:7=2 grant waits 4 idle */
-+#define AR2315_PCICACHE_DIS     0x00001000      /* PCI external access cache disable */
++#define AR2315_PCICACHE_DIS     0x00001000      /* PCI external access cache
++                                               * disable */
 +
 +#define AR2315_PCI_OUT_TSTAMP   (AR2315_PCI + 0x0010)
 +
 +#define AR2315_PCI_EXT_INT      0x02000000
 +#define AR2315_PCI_ABORT_INT    0x04000000
 +
-+#define AR2315_PCI_INT_MASK     (AR2315_PCI + 0x0504)   /* same as INT_STATUS */
++#define AR2315_PCI_INT_MASK     (AR2315_PCI + 0x0504)  /* same as INT_STATUS */
 +
 +#define AR2315_PCI_INTEN_REG    (AR2315_PCI + 0x0508)
 +#define AR2315_PCI_INT_DISABLE  0x00            /* disable pci interrupts */
 + * Local Bus Interface Registers
 + */
 +#define AR2315_LB_CONFIG        (AR2315_LOCAL + 0x0000)
-+#define AR2315_LBCONF_OE        0x00000001      /* =1 OE is low-true */
-+#define AR2315_LBCONF_CS0       0x00000002      /* =1 first CS is low-true */
-+#define AR2315_LBCONF_CS1       0x00000004      /* =1 2nd CS is low-true */
-+#define AR2315_LBCONF_RDY       0x00000008      /* =1 RDY is low-true */
-+#define AR2315_LBCONF_WE        0x00000010      /* =1 Write En is low-true */
-+#define AR2315_LBCONF_WAIT      0x00000020      /* =1 WAIT is low-true */
-+#define AR2315_LBCONF_ADS       0x00000040      /* =1 Adr Strobe is low-true */
-+#define AR2315_LBCONF_MOT       0x00000080      /* =0 Intel, =1 Motorola */
-+#define AR2315_LBCONF_8CS       0x00000100      /* =1 8 bits CS, 0= 16bits */
-+#define AR2315_LBCONF_8DS       0x00000200      /* =1 8 bits Data S, 0=16bits */
-+#define AR2315_LBCONF_ADS_EN    0x00000400      /* =1 Enable ADS */
-+#define AR2315_LBCONF_ADR_OE    0x00000800      /* =1 Adr cap on OE, WE or DS */
-+#define AR2315_LBCONF_ADDT_MUX  0x00001000      /* =1 Adr and Data share bus */
-+#define AR2315_LBCONF_DATA_OE   0x00002000      /* =1 Data cap on OE, WE, DS */
-+#define AR2315_LBCONF_16DATA    0x00004000      /* =1 Data is 16 bits wide */
-+#define AR2315_LBCONF_SWAPDT    0x00008000      /* =1 Byte swap data */
-+#define AR2315_LBCONF_SYNC      0x00010000      /* =1 Bus synchronous to clk */
-+#define AR2315_LBCONF_INT       0x00020000      /* =1 Intr is low true */
-+#define AR2315_LBCONF_INT_CTR0  0x00000000      /* GND high-Z, Vdd is high-Z */
-+#define AR2315_LBCONF_INT_CTR1  0x00040000      /* GND drive, Vdd is high-Z */
-+#define AR2315_LBCONF_INT_CTR2  0x00080000      /* GND high-Z, Vdd drive */
-+#define AR2315_LBCONF_INT_CTR3  0x000C0000      /* GND drive, Vdd drive */
-+#define AR2315_LBCONF_RDY_WAIT  0x00100000      /* =1 RDY is negative of WAIT */
-+#define AR2315_LBCONF_INT_PULSE 0x00200000      /* =1 Interrupt is a pulse */
-+#define AR2315_LBCONF_ENABLE    0x00400000      /* =1 Falcon respond to LB */
++#define AR2315_LBCONF_OE        0x00000001    /* =1 OE is low-true */
++#define AR2315_LBCONF_CS0       0x00000002    /* =1 first CS is low-true */
++#define AR2315_LBCONF_CS1       0x00000004    /* =1 2nd CS is low-true */
++#define AR2315_LBCONF_RDY       0x00000008    /* =1 RDY is low-true */
++#define AR2315_LBCONF_WE        0x00000010    /* =1 Write En is low-true */
++#define AR2315_LBCONF_WAIT      0x00000020    /* =1 WAIT is low-true */
++#define AR2315_LBCONF_ADS       0x00000040    /* =1 Adr Strobe is low-true */
++#define AR2315_LBCONF_MOT       0x00000080    /* =0 Intel, =1 Motorola */
++#define AR2315_LBCONF_8CS       0x00000100    /* =1 8 bits CS, 0= 16bits */
++#define AR2315_LBCONF_8DS       0x00000200    /* =1 8 bits Data S, 0=16bits */
++#define AR2315_LBCONF_ADS_EN    0x00000400    /* =1 Enable ADS */
++#define AR2315_LBCONF_ADR_OE    0x00000800    /* =1 Adr cap on OE, WE or DS */
++#define AR2315_LBCONF_ADDT_MUX  0x00001000    /* =1 Adr and Data share bus */
++#define AR2315_LBCONF_DATA_OE   0x00002000    /* =1 Data cap on OE, WE, DS */
++#define AR2315_LBCONF_16DATA    0x00004000    /* =1 Data is 16 bits wide */
++#define AR2315_LBCONF_SWAPDT    0x00008000    /* =1 Byte swap data */
++#define AR2315_LBCONF_SYNC      0x00010000    /* =1 Bus synchronous to clk */
++#define AR2315_LBCONF_INT       0x00020000    /* =1 Intr is low true */
++#define AR2315_LBCONF_INT_CTR0  0x00000000    /* GND high-Z, Vdd is high-Z */
++#define AR2315_LBCONF_INT_CTR1  0x00040000    /* GND drive, Vdd is high-Z */
++#define AR2315_LBCONF_INT_CTR2  0x00080000    /* GND high-Z, Vdd drive */
++#define AR2315_LBCONF_INT_CTR3  0x000C0000    /* GND drive, Vdd drive */
++#define AR2315_LBCONF_RDY_WAIT  0x00100000    /* =1 RDY is negative of WAIT */
++#define AR2315_LBCONF_INT_PULSE 0x00200000    /* =1 Interrupt is a pulse */
++#define AR2315_LBCONF_ENABLE    0x00400000    /* =1 Falcon respond to LB */
 +
 +#define AR2315_LB_CLKSEL        (AR2315_LOCAL + 0x0004)
-+#define AR2315_LBCLK_EXT        0x0001          /* use external clk for lb */
++#define AR2315_LBCLK_EXT        0x0001        /* use external clk for lb */
 +
 +#define AR2315_LB_1MS           (AR2315_LOCAL + 0x0008)
-+#define AR2315_LB1MS_MASK       0x3FFFF         /* # of AHB clk cycles in 1ms */
++#define AR2315_LB1MS_MASK       0x3FFFF       /* # of AHB clk cycles in 1ms */
 +
 +#define AR2315_LB_MISCCFG       (AR2315_LOCAL + 0x000C)
-+#define AR2315_LBM_TXD_EN       0x00000001      /* Enable TXD for fragments */
-+#define AR2315_LBM_RX_INTEN     0x00000002      /* Enable LB ints on RX ready */
-+#define AR2315_LBM_MBOXWR_INTEN 0x00000004      /* Enable LB ints on mbox wr */
-+#define AR2315_LBM_MBOXRD_INTEN 0x00000008      /* Enable LB ints on mbox rd */
-+#define AR2315_LMB_DESCSWAP_EN  0x00000010      /* Byte swap desc enable */
++#define AR2315_LBM_TXD_EN       0x00000001    /* Enable TXD for fragments */
++#define AR2315_LBM_RX_INTEN     0x00000002    /* Enable LB ints on RX ready */
++#define AR2315_LBM_MBOXWR_INTEN 0x00000004    /* Enable LB ints on mbox wr */
++#define AR2315_LBM_MBOXRD_INTEN 0x00000008    /* Enable LB ints on mbox rd */
++#define AR2315_LMB_DESCSWAP_EN  0x00000010    /* Byte swap desc enable */
 +#define AR2315_LBM_TIMEOUT_MASK 0x00FFFF80
 +#define AR2315_LBM_TIMEOUT_SHFT 7
 +#define AR2315_LBM_PORTMUX      0x07000000
 +/*
 + * IR Interface Registers
 + */
-+#define AR2315_IR_PKTDATA                   (AR2315_IR + 0x0000)
-+
-+#define AR2315_IR_PKTLEN                    (AR2315_IR + 0x07fc) /* 0 - 63 */
-+
-+#define AR2315_IR_CONTROL                   (AR2315_IR + 0x0800)
-+#define AR2315_IRCTL_TX                     0x00000000  /* use as tranmitter */
-+#define AR2315_IRCTL_RX                     0x00000001  /* use as receiver   */
-+#define AR2315_IRCTL_SAMPLECLK_MASK         0x00003ffe  /* Sample clk divisor mask */
-+#define AR2315_IRCTL_SAMPLECLK_SHFT                  1
-+#define AR2315_IRCTL_OUTPUTCLK_MASK         0x03ffc000  /* Output clk divisor mask */
-+#define AR2315_IRCTL_OUTPUTCLK_SHFT                 14
-+
-+#define AR2315_IR_STATUS                    (AR2315_IR + 0x0804)
-+#define AR2315_IRSTS_RX                     0x00000001  /* receive in progress */
-+#define AR2315_IRSTS_TX                     0x00000002  /* transmit in progress */
-+
-+#define AR2315_IR_CONFIG                    (AR2315_IR + 0x0808)
-+#define AR2315_IRCFG_INVIN                  0x00000001  /* invert input polarity */
-+#define AR2315_IRCFG_INVOUT                 0x00000002  /* invert output polarity */
-+#define AR2315_IRCFG_SEQ_START_WIN_SEL      0x00000004  /* 1 => 28, 0 => 7 */
-+#define AR2315_IRCFG_SEQ_START_THRESH       0x000000f0  /*  */
-+#define AR2315_IRCFG_SEQ_END_UNIT_SEL       0x00000100  /*  */
-+#define AR2315_IRCFG_SEQ_END_UNIT_THRESH    0x00007e00  /*  */
-+#define AR2315_IRCFG_SEQ_END_WIN_SEL        0x00008000  /*  */
-+#define AR2315_IRCFG_SEQ_END_WIN_THRESH     0x001f0000  /*  */
-+#define AR2315_IRCFG_NUM_BACKOFF_WORDS      0x01e00000  /*  */
++#define AR2315_IR_PKTDATA             (AR2315_IR + 0x0000)
++
++#define AR2315_IR_PKTLEN              (AR2315_IR + 0x07fc) /* 0 - 63 */
++
++#define AR2315_IR_CONTROL             (AR2315_IR + 0x0800)
++#define AR2315_IRCTL_TX                       0x00000000  /* use as tranmitter */
++#define AR2315_IRCTL_RX                       0x00000001  /* use as receiver   */
++#define AR2315_IRCTL_SAMPLECLK_MASK   0x00003ffe  /* Sample clk divisor */
++#define AR2315_IRCTL_SAMPLECLK_SHFT   1
++#define AR2315_IRCTL_OUTPUTCLK_MASK   0x03ffc000  /* Output clk div */
++#define AR2315_IRCTL_OUTPUTCLK_SHFT   14
++
++#define AR2315_IR_STATUS              (AR2315_IR + 0x0804)
++#define AR2315_IRSTS_RX                       0x00000001  /* receive in progress */
++#define AR2315_IRSTS_TX                       0x00000002  /* transmit in progress */
++
++#define AR2315_IR_CONFIG              (AR2315_IR + 0x0808)
++#define AR2315_IRCFG_INVIN            0x00000001  /* invert in polarity */
++#define AR2315_IRCFG_INVOUT           0x00000002  /* invert out polarity */
++#define AR2315_IRCFG_SEQ_START_WIN_SEL        0x00000004  /* 1 => 28, 0 => 7 */
++#define AR2315_IRCFG_SEQ_START_THRESH 0x000000f0
++#define AR2315_IRCFG_SEQ_END_UNIT_SEL 0x00000100
++#define AR2315_IRCFG_SEQ_END_UNIT_THRESH 0x00007e00
++#define AR2315_IRCFG_SEQ_END_WIN_SEL  0x00008000
++#define AR2315_IRCFG_SEQ_END_WIN_THRESH       0x001f0000
++#define AR2315_IRCFG_NUM_BACKOFF_WORDS        0x01e00000
 +
 +#define HOST_PCI_DEV_ID         3
 +#define HOST_PCI_MBAR0          0x10000000
 +#endif /* __AR2315_REG_H */
 --- /dev/null
 +++ b/arch/mips/include/asm/mach-ar231x/ar5312_regs.h
-@@ -0,0 +1,232 @@
+@@ -0,0 +1,233 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General Public
 + * License.  See the file "COPYING" in the main directory of this archive
 +/* Reset/Timer Block Address Map */
 +#define AR531X_RESETTMR               (AR531X_APBBASE  + 0x3000)
 +#define AR531X_TIMER          (AR531X_RESETTMR + 0x0000) /* countdown timer */
-+#define AR531X_WD_CTRL          (AR531X_RESETTMR + 0x0008) /* watchdog cntrl */
-+#define AR531X_WD_TIMER         (AR531X_RESETTMR + 0x000c) /* watchdog timer */
++#define AR531X_WD_CTRL                (AR531X_RESETTMR + 0x0008) /* watchdog cntrl */
++#define AR531X_WD_TIMER               (AR531X_RESETTMR + 0x000c) /* watchdog timer */
 +#define AR531X_ISR            (AR531X_RESETTMR + 0x0010) /* Intr Status Reg */
 +#define AR531X_IMR            (AR531X_RESETTMR + 0x0014) /* Intr Mask Reg */
 +#define AR531X_RESET          (AR531X_RESETTMR + 0x0020)
 +#define AR5312_CLOCKCTL1      (AR531X_RESETTMR + 0x0064)
-+#define AR5312_SCRATCH        (AR531X_RESETTMR + 0x006c)
++#define AR5312_SCRATCH                (AR531X_RESETTMR + 0x006c)
 +#define AR531X_PROCADDR               (AR531X_RESETTMR + 0x0070)
 +#define AR531X_PROC1          (AR531X_RESETTMR + 0x0074)
 +#define AR531X_DMAADDR                (AR531X_RESETTMR + 0x0078)
 +#define AR531X_DMA1           (AR531X_RESETTMR + 0x007c)
-+#define AR531X_ENABLE           (AR531X_RESETTMR + 0x0080) /* interface enb */
++#define AR531X_ENABLE         (AR531X_RESETTMR + 0x0080) /* interface enb */
 +#define AR531X_REV            (AR531X_RESETTMR + 0x0090) /* revision */
 +
 +/* AR531X_WD_CTRL register bit field definitions */
 +#define AR531X_ENABLE_UART_AND_WLAN1_PIO 0x0008   /* UART, and WLAN1 PIOs */
 +#define AR531X_ENABLE_WLAN1_DMA          0x0010   /* WLAN1 DMAs */
 +#define AR531X_ENABLE_WLAN1 \
-+            (AR531X_ENABLE_UART_AND_WLAN1_PIO | AR531X_ENABLE_WLAN1_DMA)
++      (AR531X_ENABLE_UART_AND_WLAN1_PIO |\
++       AR531X_ENABLE_WLAN1_DMA)
 +
 +/* AR531X_REV register bit field definitions */
 +#define AR531X_REV_WMAC_MAJ    0xf000
 +#define AR531X_GPIO_CR      (AR531X_GPIO + 0x08)        /* control register */
 +
 +/* GPIO Control Register bit field definitions */
-+#define AR531X_GPIO_CR_M(x)    (1 << (x))                      /* mask for i/o */
-+#define AR531X_GPIO_CR_O(x)    (0 << (x))                      /* mask for output */
-+#define AR531X_GPIO_CR_I(x)    (1 << (x))                      /* mask for input */
-+#define AR531X_GPIO_CR_INT(x)  (1 << ((x)+8))                  /* mask for interrupt */
-+#define AR531X_GPIO_CR_UART(x) (1 << ((x)+16))                 /* uart multiplex */
++#define AR531X_GPIO_CR_M(x)    (1 << (x))               /* mask for i/o */
++#define AR531X_GPIO_CR_O(x)    (0 << (x))               /* mask for output */
++#define AR531X_GPIO_CR_I(x)    (1 << (x))               /* mask for input */
++#define AR531X_GPIO_CR_INT(x)  (1 << ((x)+8))           /* mask for interrupt*/
++#define AR531X_GPIO_CR_UART(x) (1 << ((x)+16))          /* uart multiplex */
 +#define AR531X_NUM_GPIO               8
 +
 +
 +
 --- /dev/null
 +++ b/arch/mips/ar231x/ar5312.c
-@@ -0,0 +1,580 @@
+@@ -0,0 +1,582 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General Public
 + * License.  See the file "COPYING" in the main directory of this archive
 +#include <asm/reboot.h>
 +#include <asm/time.h>
 +#include <linux/irq.h>
-+#include <asm/io.h>
++#include <linux/io.h>
 +
 +#include <ar231x_platform.h>
 +#include <ar5312_regs.h>
 +static void
 +ar5312_misc_irq_dispatch(void)
 +{
-+      unsigned int ar231x_misc_intrs = ar231x_read_reg(AR531X_ISR) & ar231x_read_reg(AR531X_IMR);
++      unsigned int ar231x_misc_intrs = ar231x_read_reg(AR531X_ISR) &
++                                       ar231x_read_reg(AR531X_IMR);
 +
 +      if (ar231x_misc_intrs & AR531X_ISR_TIMER) {
 +              do_IRQ(AR531X_MISC_IRQ_TIMER);
 +      u32 dma1 = ar231x_read_reg(AR531X_DMA1);
 +      u32 dma_addr = ar231x_read_reg(AR531X_DMAADDR);   /* clears error */
 +
-+      printk("AHB interrupt: PROCADDR=0x%8.8x  PROC1=0x%8.8x  DMAADDR=0x%8.8x  DMA1=0x%8.8x\n",
-+             proc_addr, proc1, dma_addr, dma1);
++      pr_emerg("AHB interrupt: PROCADDR=0x%8.8x  PROC1=0x%8.8x  "
++               "DMAADDR=0x%8.8x  DMA1=0x%8.8x\n", proc_addr, proc1, dma_addr,
++               dma1);
 +
 +      machine_restart("AHB error"); /* Catastrophic failure */
 +      return IRQ_HANDLED;
 +
 +static const struct gpio_led_platform_data ar5312_led_data = {
 +      .num_leds = ARRAY_SIZE(ar5312_leds),
-+      .leds = (void *) ar5312_leds,
++      .leds = (void *)ar5312_leds,
 +};
 +
 +static struct platform_device ar5312_gpio_leds = {
 +      .name = "leds-gpio",
 +      .id = -1,
-+      .dev.platform_data = (void *) &ar5312_led_data,
++      .dev.platform_data = (void *)&ar5312_led_data,
 +};
 +#endif
 +
 +
 +      /* Disable other flash banks */
 +      ar231x_write_reg(AR531X_FLASHCTL1,
-+              ar231x_read_reg(AR531X_FLASHCTL1) & ~(FLASHCTL_E | FLASHCTL_AC));
++                       ar231x_read_reg(AR531X_FLASHCTL1) &
++                       ~(FLASHCTL_E | FLASHCTL_AC));
 +
 +      ar231x_write_reg(AR531X_FLASHCTL2,
-+              ar231x_read_reg(AR531X_FLASHCTL2) & ~(FLASHCTL_E | FLASHCTL_AC));
++                       ar231x_read_reg(AR531X_FLASHCTL2) &
++                       ~(FLASHCTL_E | FLASHCTL_AC));
 +
-+      return (char *) KSEG1ADDR(AR531X_FLASH + 0x800000);
++      return (char *)KSEG1ADDR(AR531X_FLASH + 0x800000);
 +}
 +
 +int __init ar5312_init_devices(void)
 +                      c--;
 +      }
 +
-+      switch(ar231x_devtype) {
++      switch (ar231x_devtype) {
 +      case DEV_TYPE_AR5312:
 +              ar5312_eth0_data.macaddr = config->enet0_mac;
 +              ar231x_add_ethernet(0, KSEG1ADDR(AR531X_ENET0),
 +{
 +      /* reset the system */
 +      local_irq_disable();
-+      while(1) {
++      while (1)
 +              ar231x_write_reg(AR531X_RESET, AR531X_RESET_SYSTEM);
-+      }
 +}
 +
 +
 +       *
 +       *  cpu_freq = input_clock * MULT (where MULT is PLL multiplier)
 +       *  sys_freq = cpu_freq / 4       (used for APB clock, serial,
-+       *                                                         flash, Timer, Watchdog Timer)
++       *                                 flash, Timer, Watchdog Timer)
 +       *
 +       *  cnt_freq = cpu_freq / 2        (use for CPU count/compare)
 +       *
 +      predivisor = clockctl1_predivide_table[predivide_select];
 +      multiplier = (clock_ctl1 & multiplier_mask) >> multiplier_shift;
 +
-+      if (clock_ctl1 & doubler_mask) {
++      if (clock_ctl1 & doubler_mask)
 +              multiplier = multiplier << 1;
-+      }
++
 +      return (40000000 / predivisor) * multiplier;
 +}
 +
 +      gpch = &ar5312_gpio_chip;
 +      ret = gpiochip_add(&gpch->chip);
 +      if (ret) {
-+              printk(KERN_ERR "%s: failed to add gpiochip\n",
-+                      gpch->chip.label);
++              pr_err("%s: failed to add gpiochip\n", gpch->chip.label);
 +              return ret;
 +      }
-+      printk(KERN_INFO "%s: registered %d GPIOs\n",
-+              gpch->chip.label, gpch->chip.ngpio);
++      pr_info("%s: registered %d GPIOs\n", gpch->chip.label,
++              gpch->chip.ngpio);
 +      return ret;
 +}
 +
 +      memcfg = ar231x_read_reg(AR531X_MEM_CFG1);
 +      bank0AC = (memcfg & MEM_CFG1_AC0) >> MEM_CFG1_AC0_S;
 +      bank1AC = (memcfg & MEM_CFG1_AC1) >> MEM_CFG1_AC1_S;
-+      memsize = (bank0AC ? (1 << (bank0AC+1)) : 0)
-+              + (bank1AC ? (1 << (bank1AC+1)) : 0);
++      memsize = (bank0AC ? (1 << (bank0AC+1)) : 0) +
++                (bank1AC ? (1 << (bank1AC+1)) : 0);
 +      memsize <<= 20;
 +      add_memory_region(0, memsize, BOOT_MEM_RAM);
 +
 +
 --- /dev/null
 +++ b/arch/mips/ar231x/ar2315.c
-@@ -0,0 +1,693 @@
+@@ -0,0 +1,623 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General Public
 + * License.  See the file "COPYING" in the main directory of this archive
 +#include <asm/reboot.h>
 +#include <asm/time.h>
 +#include <linux/irq.h>
-+#include <asm/io.h>
++#include <linux/io.h>
 +
 +#include <ar231x_platform.h>
 +#include <ar2315_regs.h>
 +#include "devices.h"
 +#include "ar2315.h"
 +
-+static u32 gpiointmask = 0, gpiointval = 0;
++static u32 gpiointmask, gpiointval;
 +
 +static inline void ar2315_gpio_irq(void)
 +{
 +              ar231x_write_reg(AR2315_ISR, AR2315_ISR_GPIO);
 +
 +      /* Enable interrupt with edge detection */
-+      if ((ar231x_read_reg(AR2315_GPIO_CR) & AR2315_GPIO_CR_M(bit)) != AR2315_GPIO_CR_I(bit))
++      if ((ar231x_read_reg(AR2315_GPIO_CR) & AR2315_GPIO_CR_M(bit)) !=
++          AR2315_GPIO_CR_I(bit))
 +              return;
 +
 +      if (bit >= 0)
 +      else if (pending & CAUSEF_IP4)
 +              do_IRQ(AR2315_IRQ_ENET0_INTRS);
 +      else if (pending & CAUSEF_IP2) {
-+              unsigned int misc_intr = ar231x_read_reg(AR2315_ISR) & ar231x_read_reg(AR2315_IMR);
++              unsigned int misc_intr = ar231x_read_reg(AR2315_ISR) &
++                                       ar231x_read_reg(AR2315_IMR);
 +
 +              if (misc_intr & AR2315_ISR_SPI)
 +                      do_IRQ(AR531X_MISC_IRQ_SPI);
 +      unsigned int gpio = d->irq - AR531X_GPIO_IRQ_BASE;
 +
 +      /* Enable interrupt with edge detection */
-+      if ((ar231x_read_reg(AR2315_GPIO_CR) & AR2315_GPIO_CR_M(gpio)) != AR2315_GPIO_CR_I(gpio))
++      if ((ar231x_read_reg(AR2315_GPIO_CR) & AR2315_GPIO_CR_M(gpio)) !=
++          AR2315_GPIO_CR_I(gpio))
 +              return;
 +
 +      gpiointmask |= (1 << gpio);
 +      unsigned int imr;
 +
 +      imr = ar231x_read_reg(AR2315_IMR);
-+      switch(d->irq) {
++      switch (d->irq) {
 +      case AR531X_MISC_IRQ_SPI:
-+               imr |= AR2315_ISR_SPI;
-+               break;
++              imr |= AR2315_ISR_SPI;
++              break;
 +      case AR531X_MISC_IRQ_TIMER:
-+           imr |= AR2315_ISR_TIMER;
-+           break;
++              imr |= AR2315_ISR_TIMER;
++              break;
 +      case AR531X_MISC_IRQ_AHB_PROC:
-+           imr |= AR2315_ISR_AHB;
-+           break;
++              imr |= AR2315_ISR_AHB;
++              break;
 +      case AR531X_MISC_IRQ_GPIO:
-+           imr |= AR2315_ISR_GPIO;
-+           break;
++              imr |= AR2315_ISR_GPIO;
++              break;
 +      case AR531X_MISC_IRQ_UART0:
-+           imr |= AR2315_ISR_UART0;
-+           break;
++              imr |= AR2315_ISR_UART0;
++              break;
 +      case AR531X_MISC_IRQ_WATCHDOG:
-+           imr |= AR2315_ISR_WD;
-+           break;
++              imr |= AR2315_ISR_WD;
++              break;
 +      default:
 +              break;
 +      }
 +      unsigned int imr;
 +
 +      imr = ar231x_read_reg(AR2315_IMR);
-+      switch(d->irq) {
++      switch (d->irq) {
 +      case AR531X_MISC_IRQ_SPI:
-+               imr &= ~AR2315_ISR_SPI;
-+               break;
++              imr &= ~AR2315_ISR_SPI;
++              break;
 +      case AR531X_MISC_IRQ_TIMER:
-+           imr &= ~AR2315_ISR_TIMER;
-+           break;
++              imr &= ~AR2315_ISR_TIMER;
++              break;
 +      case AR531X_MISC_IRQ_AHB_PROC:
-+           imr &= ~AR2315_ISR_AHB;
-+           break;
++              imr &= ~AR2315_ISR_AHB;
++              break;
 +      case AR531X_MISC_IRQ_GPIO:
-+           imr &= ~AR2315_ISR_GPIO;
-+           break;
++              imr &= ~AR2315_ISR_GPIO;
++              break;
 +      case AR531X_MISC_IRQ_UART0:
-+           imr &= ~AR2315_ISR_UART0;
-+           break;
++              imr &= ~AR2315_ISR_UART0;
++              break;
 +      case AR531X_MISC_IRQ_WATCHDOG:
-+           imr &= ~AR2315_ISR_WD;
-+           break;
++              imr &= ~AR2315_ISR_WD;
++              break;
 +      default:
 +              break;
 +      }
 +
 +static irqreturn_t ar2315_ahb_proc_handler(int cpl, void *dev_id)
 +{
-+    ar231x_write_reg(AR2315_AHB_ERR0, AHB_ERROR_DET);
-+    ar231x_read_reg(AR2315_AHB_ERR1);
++      ar231x_write_reg(AR2315_AHB_ERR0, AHB_ERROR_DET);
++      ar231x_read_reg(AR2315_AHB_ERR1);
 +
-+    printk(KERN_ERR "AHB fatal error\n");
-+    machine_restart("AHB error"); /* Catastrophic failure */
++      pr_emerg("AHB fatal error\n");
++      machine_restart("AHB error"); /* Catastrophic failure */
 +
-+    return IRQ_HANDLED;
++      return IRQ_HANDLED;
 +}
 +
 +static struct irqaction ar2315_ahb_proc_interrupt  = {
 +
 +static struct resource ar2315_spiflash_res[] = {
 +      {
-+              .name = "flash_base",
++              .name = "spiflash_read",
 +              .flags = IORESOURCE_MEM,
-+              .start = KSEG1ADDR(AR2315_SPI_READ),
-+              .end = KSEG1ADDR(AR2315_SPI_READ) + 0x1000000 - 1,
++              .start = AR2315_SPI_READ,
++              .end = AR2315_SPI_READ + 0x1000000 - 1,
 +      },
 +      {
-+              .name = "flash_regs",
++              .name = "spiflash_mmr",
 +              .flags = IORESOURCE_MEM,
-+              .start = 0x11300000,
-+              .end = 0x11300012,
++              .start = AR2315_SPI_MMR,
++              .end = AR2315_SPI_MMR + 12 - 1,
 +      },
 +};
 +
 +static struct platform_device ar2315_spiflash = {
 +      .id = 0,
-+      .name = "spiflash",
++      .name = "ar2315-spiflash",
 +      .resource = ar2315_spiflash_res,
 +      .num_resources = ARRAY_SIZE(ar2315_spiflash_res)
 +};
 +
 +static struct platform_device ar2315_wdt = {
 +      .id = 0,
-+      .name = "ar2315_wdt",
++      .name = "ar2315-wdt",
 +};
 +
-+#define SPI_FLASH_CTL      0x00
-+#define SPI_FLASH_OPCODE   0x04
-+#define SPI_FLASH_DATA     0x08
-+
-+static inline u32
-+spiflash_read_reg(int reg)
-+{
-+      return ar231x_read_reg(AR2315_SPI + reg);
-+}
-+
-+static inline void
-+spiflash_write_reg(int reg, u32 data)
-+{
-+      ar231x_write_reg(AR2315_SPI + reg, data);
-+}
-+
-+static u32
-+spiflash_wait_status(void)
-+{
-+      u32 reg;
-+
-+      do {
-+              reg = spiflash_read_reg(SPI_FLASH_CTL);
-+      } while (reg & SPI_CTL_BUSY);
-+
-+      return reg;
-+}
-+
-+static u8
-+spiflash_probe(void)
-+{
-+      u32 reg;
-+
-+      reg = spiflash_wait_status();
-+      reg &= ~SPI_CTL_TX_RX_CNT_MASK;
-+      reg |= (1 << 4) | 4 | SPI_CTL_START;
-+
-+      spiflash_write_reg(SPI_FLASH_OPCODE, 0xab);
-+      spiflash_write_reg(SPI_FLASH_CTL, reg);
-+
-+      reg = spiflash_wait_status();
-+      reg = spiflash_read_reg(SPI_FLASH_DATA);
-+      reg &= 0xff;
-+
-+      return (u8) reg;
-+}
-+
-+
-+#define STM_8MBIT_SIGNATURE     0x13
-+#define STM_16MBIT_SIGNATURE    0x14
-+#define STM_32MBIT_SIGNATURE    0x15
-+#define STM_64MBIT_SIGNATURE    0x16
-+#define STM_128MBIT_SIGNATURE   0x17
-+
-+static u8 __init *
-+ar2315_flash_limit(void)
++/*
++ * NB: We use mapping size that is larger than the actual flash size,
++ * but this shouldn't be a problem here, because the flash will simply
++ * be mapped multiple times.
++ */
++static u8 __init *ar2315_flash_limit(void)
 +{
-+      u32 flash_size = 0;
-+
-+      /* probe the flash chip size */
-+      switch(spiflash_probe()) {
-+              case STM_8MBIT_SIGNATURE:
-+                      flash_size = 0x00100000;
-+                      break;
-+              case STM_16MBIT_SIGNATURE:
-+                      flash_size = 0x00200000;
-+                      break;
-+              case STM_32MBIT_SIGNATURE:
-+                      flash_size = 0x00400000;
-+                      break;
-+              case STM_64MBIT_SIGNATURE:
-+                      flash_size = 0x00800000;
-+                      break;
-+              case STM_128MBIT_SIGNATURE:
-+                      flash_size = 0x01000000;
-+                      break;
-+      }
-+
-+      ar2315_spiflash_res[0].end = ar2315_spiflash_res[0].start +
-+              flash_size - 1;
-+      return (u8 *) ar2315_spiflash_res[0].end + 1;
++      return (u8 *)KSEG1ADDR(ar2315_spiflash_res[0].end + 1);
 +}
 +
 +#ifdef CONFIG_LEDS_GPIO
 +static struct gpio_led ar2315_leds[6];
 +static struct gpio_led_platform_data ar2315_led_data = {
-+      .leds = (void *) ar2315_leds,
++      .leds = (void *)ar2315_leds,
 +};
 +
 +static struct platform_device ar2315_gpio_leds = {
 +      .name = "leds-gpio",
 +      .id = -1,
 +      .dev = {
-+              .platform_data = (void *) &ar2315_led_data,
++              .platform_data = (void *)&ar2315_led_data,
 +      }
 +};
 +
 +      int i, led = 0;
 +
 +      ar2315_led_data.num_leds = 0;
-+      for(i = 1; i < 8; i++)
-+      {
-+              if((i == AR2315_RESET_GPIO) ||
-+                 (i == ar231x_board.config->reset_config_gpio))
++      for (i = 1; i < 8; i++) {
++              if ((i == AR2315_RESET_GPIO) ||
++                  (i == ar231x_board.config->reset_config_gpio))
 +                      continue;
 +
 +              if (i == ar231x_board.config->sys_led_gpio)
 +static void
 +ar2315_restart(char *command)
 +{
-+      void (*mips_reset_vec)(void) = (void *) 0xbfc00000;
++      void (*mips_reset_vec)(void) = (void *)0xbfc00000;
 +
 +      local_irq_disable();
 +
 +      /* try reset the system via reset control */
-+      ar231x_write_reg(AR2315_COLD_RESET,AR2317_RESET_SYSTEM);
++      ar231x_write_reg(AR2315_COLD_RESET, AR2317_RESET_SYSTEM);
 +
-+      /* Cold reset does not work on the AR2315/6, use the GPIO reset bits a workaround.
-+       * give it some time to attempt a gpio based hardware reset
-+       * (atheros reference design workaround) */
++      /* Cold reset does not work on the AR2315/6, use the GPIO reset bits
++       * a workaround. Give it some time to attempt a gpio based hardware
++       * reset (atheros reference design workaround) */
 +      gpio_request_one(AR2315_RESET_GPIO, GPIOF_OUT_INIT_LOW, "Reset");
 +      mdelay(100);
 +
 +      divby2 += 1;
 +      pllc_out = (40000000/refdiv)*(2*divby2)*fdiv;
 +
-+    /* clkm input selected */
++      /* clkm input selected */
 +      switch (clock_ctl & CPUCLK_CLK_SEL_M) {
-+              case 0:
-+              case 1:
-+                      clk_div = pllc_divide_table[(pllc_ctrl & PLLC_CLKM_DIV_M) >> PLLC_CLKM_DIV_S];
-+                      break;
-+              case 2:
-+                      clk_div = pllc_divide_table[(pllc_ctrl & PLLC_CLKC_DIV_M) >> PLLC_CLKC_DIV_S];
-+                      break;
-+              default:
-+                      pllc_out = 40000000;
-+                      clk_div = 1;
-+                      break;
++      case 0:
++      case 1:
++              clk_div = pllc_divide_table[(pllc_ctrl & PLLC_CLKM_DIV_M) >>
++                        PLLC_CLKM_DIV_S];
++              break;
++      case 2:
++              clk_div = pllc_divide_table[(pllc_ctrl & PLLC_CLKC_DIV_M) >>
++                        PLLC_CLKC_DIV_S];
++              break;
++      default:
++              pllc_out = 40000000;
++              clk_div = 1;
++              break;
 +      }
 +
 +      cpu_div = (clock_ctl & CPUCLK_CLK_DIV_M) >> CPUCLK_CLK_DIV_S;
 +static inline unsigned int
 +ar2315_cpu_frequency(void)
 +{
-+    return ar2315_sys_clk(ar231x_read_reg(AR2315_CPUCLK));
++      return ar2315_sys_clk(ar231x_read_reg(AR2315_CPUCLK));
 +}
 +
 +static inline unsigned int
 +ar2315_apb_frequency(void)
 +{
-+    return ar2315_sys_clk(ar231x_read_reg(AR2315_AMBACLK));
++      return ar2315_sys_clk(ar231x_read_reg(AR2315_AMBACLK));
 +}
 +
 +void __init
 +      gpch = &ar2315_gpio_chip;
 +      ret = gpiochip_add(&gpch->chip);
 +      if (ret) {
-+              printk(KERN_ERR "%s: failed to add gpiochip\n",
-+                      gpch->chip.label);
++              pr_err("%s: failed to add gpiochip\n", gpch->chip.label);
 +              return ret;
 +      }
-+      printk(KERN_INFO "%s: registered %d GPIOs\n",
-+              gpch->chip.label, gpch->chip.ngpio);
++      pr_info("%s: registered %d GPIOs\n", gpch->chip.label,
++              gpch->chip.ngpio);
 +      return ret;
 +}
 +
 +
 +      /* Detect the hardware based on the device ID */
 +      devid = ar231x_read_reg(AR2315_SREV) & AR2315_REV_CHIP;
-+      switch(devid) {
-+              case 0x90:
-+              case 0x91:
-+                      ar231x_devtype = DEV_TYPE_AR2317;
-+                      break;
-+              default:
-+                      ar231x_devtype = DEV_TYPE_AR2315;
-+                      break;
++      switch (devid) {
++      case 0x90:
++      case 0x91:
++              ar231x_devtype = DEV_TYPE_AR2317;
++              break;
++      default:
++              ar231x_devtype = DEV_TYPE_AR2315;
++              break;
 +      }
 +      ar2315_gpio_init();
 +      ar231x_board.devid = devid;
 +      /* Clear any lingering AHB errors */
 +      config = read_c0_config();
 +      write_c0_config(config & ~0x3);
-+      ar231x_write_reg(AR2315_AHB_ERR0,AHB_ERROR_DET);
++      ar231x_write_reg(AR2315_AHB_ERR0, AHB_ERROR_DET);
 +      ar231x_read_reg(AR2315_AHB_ERR1);
 +      ar231x_write_reg(AR2315_WDC, AR2315_WDC_IGNORE_EXPIRATION);
 +
 +static inline u32
 +ar231x_read_reg(u32 reg)
 +{
-+      return __raw_readl((u32 *) KSEG1ADDR(reg));
++      return __raw_readl((void __iomem *)KSEG1ADDR(reg));
 +}
 +
 +static inline void
 +ar231x_write_reg(u32 reg, u32 val)
 +{
-+      __raw_writel(val, (u32 *) KSEG1ADDR(reg));
++      __raw_writel(val, (void __iomem *)KSEG1ADDR(reg));
 +}
 +
 +static inline u32
 +      },
 +};
 +
-+static const char *devtype_strings[] = {
++static const char * const devtype_strings[] = {
 +      [DEV_TYPE_AR5312] = "Atheros AR5312",
 +      [DEV_TYPE_AR2312] = "Atheros AR2312",
 +      [DEV_TYPE_AR2313] = "Atheros AR2313",