atheros: rework and cleanup board initialization

- remove odd flags and branching
  - add __init mark
  - make shorter variables names
  - returns true or false from boolean functions
  - unwrap short function declarations
  - unwrap quoted string
  - rename macroses with names in CamelCase

Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>

SVN-Revision: 42495
master
John Crispin 10 years ago
parent 98b6a56b3c
commit d34c3e0674
  1. 131
      target/linux/atheros/patches-3.14/100-board.patch

@ -84,7 +84,7 @@
+obj-$(CONFIG_ATHEROS_AR2315) += ar2315.o
--- /dev/null
+++ b/arch/mips/ar231x/board.c
@@ -0,0 +1,260 @@
@@ -0,0 +1,229 @@
+/*
+ * 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
@ -119,25 +119,25 @@
+
+void (*ar231x_irq_dispatch)(void);
+
+static inline bool
+check_radio_magic(u8 *addr)
+static inline bool check_radio_magic(u8 *addr)
+{
+ addr += 0x7a; /* offset for flash magic */
+ if ((addr[0] == 0x5a) && (addr[1] == 0xa5))
+ return 1;
+ return (addr[0] == 0x5a) && (addr[1] == 0xa5);
+}
+
+ return 0;
+static inline bool check_notempty(u8 *addr)
+{
+ return *(u32 *)addr != 0xffffffff;
+}
+
+static inline bool
+check_board_data(u8 *flash_limit, u8 *addr, bool broken)
+static inline bool check_board_data(u8 *flash_limit, u8 *addr, bool broken)
+{
+ /* config magic found */
+ if (*((u32 *)addr) == AR231X_BD_MAGIC)
+ return 1;
+ return true;
+
+ if (!broken)
+ return 0;
+ return false;
+
+ if (check_radio_magic(addr + 0xf8))
+ ar231x_board.radio = addr + 0xf8;
@ -148,78 +148,53 @@
+ if (ar231x_board.radio) {
+ /* broken board data detected, use radio data to find the
+ * offset, user will fix this */
+ return 1;
+ return true;
+ }
+ return 0;
+
+ return false;
+}
+
+static u8 *
+find_board_config(u8 *flash_limit, bool broken)
+static u8 * __init find_board_config(u8 *flash_limit, bool broken)
+{
+ u8 *addr;
+ int found = 0;
+
+ for (addr = flash_limit - 0x1000;
+ addr >= flash_limit - 0x30000;
+ addr -= 0x1000) {
+
+ if (check_board_data(flash_limit, addr, broken)) {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found)
+ addr = NULL;
+ u8 *begin = flash_limit - 0x1000;
+ u8 *end = flash_limit - 0x30000;
+
+ for (addr = begin; addr >= end; addr -= 0x1000)
+ if (check_board_data(flash_limit, addr, broken))
+ return addr;
+
+ return NULL;
+}
+
+static u8 *
+find_radio_config(u8 *flash_limit, u8 *board_config)
+static u8 * __init find_radio_config(u8 *flash_limit, u8 *bcfg)
+{
+ int found;
+ u8 *radio_config;
+ u8 *rcfg, *begin, *end;
+
+ /*
+ * Now find the start of Radio Configuration data, using heuristics:
+ * Search forward from Board Configuration data by 0x1000 bytes
+ * at a time until we find non-0xffffffff.
+ */
+ found = 0;
+ for (radio_config = board_config + 0x1000;
+ (radio_config < flash_limit);
+ radio_config += 0x1000) {
+ if ((*(u32 *)radio_config != 0xffffffff) &&
+ check_radio_magic(radio_config)) {
+ found = 1;
+ break;
+ }
+ }
+ begin = bcfg + 0x1000;
+ end = flash_limit;
+ for (rcfg = begin; rcfg < end; rcfg += 0x1000)
+ if (check_notempty(rcfg) && check_radio_magic(rcfg))
+ return rcfg;
+
+ /* AR2316 relocates radio config to new location */
+ if (!found) {
+ 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)) {
+ found = 1;
+ break;
+ }
+ }
+ }
+ begin = bcfg + 0xf8;
+ end = flash_limit - 0x1000 + 0xf8;
+ for (rcfg = begin; rcfg < end; rcfg += 0x1000)
+ if (check_notempty(rcfg) && check_radio_magic(rcfg))
+ return rcfg;
+
+ if (!found) {
+ pr_warn("WARNING: Could not find Radio Configuration data\n");
+ radio_config = NULL;
+ }
+
+ return radio_config;
+ return NULL;
+}
+
+int __init
+ar231x_find_config(u8 *flash_limit)
+int __init ar231x_find_config(u8 *flash_limit)
+{
+ struct ar231x_boarddata *config;
+ unsigned int rcfg_size;
@ -294,16 +269,14 @@
+ return 0;
+}
+
+static void
+ar231x_halt(void)
+static void ar231x_halt(void)
+{
+ local_irq_disable();
+ while (1)
+ ;
+}
+
+void __init
+plat_mem_setup(void)
+void __init plat_mem_setup(void)
+{
+ _machine_halt = ar231x_halt;
+ pm_power_off = ar231x_halt;
@ -315,27 +288,23 @@
+ write_c0_watchlo0(0);
+}
+
+asmlinkage void
+plat_irq_dispatch(void)
+asmlinkage void plat_irq_dispatch(void)
+{
+ ar231x_irq_dispatch();
+}
+
+void __init
+plat_time_init(void)
+void __init plat_time_init(void)
+{
+ ar5312_time_init();
+ ar2315_time_init();
+}
+
+unsigned int __cpuinit
+get_c0_compare_int(void)
+unsigned int __cpuinit get_c0_compare_int(void)
+{
+ return CP0_LEGACY_COMPARE_IRQ;
+}
+
+void __init
+arch_init_irq(void)
+void __init arch_init_irq(void)
+{
+ clear_c0_status(ST0_IM);
+ mips_cpu_irq_init();
@ -562,7 +531,7 @@
+#endif /* __ASM_MACH_AR231X_CPU_FEATURE_OVERRIDES_H */
--- /dev/null
+++ b/arch/mips/include/asm/mach-ar231x/dma-coherence.h
@@ -0,0 +1,78 @@
@@ -0,0 +1,77 @@
+/*
+ * 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
@ -586,7 +555,6 @@
+
+ if (dev && dev->bus == &pci_bus_type)
+ return PCI_DMA_OFFSET;
+ else
+#endif
+ return 0;
+}
@ -1551,9 +1519,9 @@
+#define FLASHCTL_WP 0x04000000 /* Write protect */
+#define FLASHCTL_BM 0x08000000 /* Burst mode */
+#define FLASHCTL_MW 0x30000000 /* Memory width */
+#define FLASHCTL_MWx8 0x00000000 /* Memory width x8 */
+#define FLASHCTL_MWx16 0x10000000 /* Memory width x16 */
+#define FLASHCTL_MWx32 0x20000000 /* Memory width x32 (not supported) */
+#define FLASHCTL_MW8 0x00000000 /* Memory width x8 */
+#define FLASHCTL_MW16 0x10000000 /* Memory width x16 */
+#define FLASHCTL_MW32 0x20000000 /* Memory width x32 (not supported) */
+#define FLASHCTL_ATNR 0x00000000 /* Access type == no retry */
+#define FLASHCTL_ATR 0x80000000 /* Access type == retry every */
+#define FLASHCTL_ATR4 0xc0000000 /* Access type == retry every 4 */
@ -1589,7 +1557,7 @@
+
--- /dev/null
+++ b/arch/mips/ar231x/ar5312.c
@@ -0,0 +1,542 @@
@@ -0,0 +1,541 @@
+/*
+ * 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
@ -1704,9 +1672,8 @@
+ u32 dma1 = ar231x_read_reg(AR5312_DMA1);
+ u32 dma_addr = ar231x_read_reg(AR5312_DMAADDR); /* clears error */
+
+ 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);
+ 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;
@ -1911,10 +1878,10 @@
+ /* fixup flash width */
+ fctl = ar231x_read_reg(AR5312_FLASHCTL) & FLASHCTL_MW;
+ switch (fctl) {
+ case FLASHCTL_MWx16:
+ case FLASHCTL_MW16:
+ ar5312_flash_data.width = 2;
+ break;
+ case FLASHCTL_MWx8:
+ case FLASHCTL_MW8:
+ default:
+ ar5312_flash_data.width = 1;
+ break;

Loading…
Cancel
Save