rendered paste bodyFrom 3bd9e7ef10b8c4ef6d492c18e5ec6bbd0be1d174 Mon Sep 17 00:00:00 2001From: Gabor Juhos <juhosg@openwrt.org>Date: Thu, 10 Jun 2010 14:49:39 +0200Subject: [PATCH] ar71xx: fix duplicated 'board' parameter on the RouterStation PRO--- target/linux/ar71xx/files/arch/mips/ar71xx/prom.c | 39 ++++++++++++++++---- 1 files changed, 31 insertions(+), 8 deletions(-)diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/prom.c b/target/linux/ar71xx/files/arch/mips/ar71xx/prom.cindex 87d6da0..fe2930f 100644--- a/target/linux/ar71xx/files/arch/mips/ar71xx/prom.c+++ b/target/linux/ar71xx/files/arch/mips/ar71xx/prom.c@@ -1,7 +1,7 @@ /* * Atheros AR71xx SoC specific prom routines *- * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>+ * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> * * This program is free software; you can redistribute it and/or modify it@@ -42,27 +42,31 @@ static void __init ar71xx_prom_append_cmdline(const char *name, strlcat(arcs_cmdline, buf, sizeof(arcs_cmdline)); } -static void __init ar71xx_prom_find_env(char **envp, const char *name)+static const char * __init ar71xx_prom_find_env(char **envp, const char *name) {- int len = strlen(name);+ const char *ret = NULL;+ int len; char **p; if (!is_valid_ram_addr(envp))- return;+ return NULL; + len = strlen(name); for (p = envp; is_valid_ram_addr(*p); p++) { if (strncmp(name, *p, len) == 0 && (*p)[len] == '=') {- ar71xx_prom_append_cmdline(name, *p + len + 1);+ ret = *p + len + 1; break; } /* RedBoot env comes in pointer pairs - key, value */ if (strncmp(name, *p, len) == 0 && (*p)[len] == 0) if (is_valid_ram_addr(*(++p))) {- ar71xx_prom_append_cmdline(name, *p);+ ret = *p; break; } }++ return ret; } static int __init ar71xx_prom_init_myloader(void)@@ -142,6 +146,7 @@ static __init void ar71xx_prom_init_cmdline(int argc, char **argv) void __init prom_init(void) {+ const char *env; char **envp; printk(KERN_DEBUG "prom: fw_arg0=%08x, fw_arg1=%08x, "@@ -156,8 +161,26 @@ void __init prom_init(void) ar71xx_prom_init_cmdline(fw_arg0, (char **)fw_arg1); envp = (char **)fw_arg2;- ar71xx_prom_find_env(envp, "board");- ar71xx_prom_find_env(envp, "ethaddr");+ if (!strstr("ethaddr=", arcs_cmdline)) {+ env = ar71xx_prom_find_env(envp, "ethaddr");+ if (env)+ ar71xx_prom_append_cmdline("ethaddr", env);+ }++ if (!strstr("board=", arcs_cmdline)) {+ env = ar71xx_prom_find_env(envp, "board");+ if (env) {+ /* Workaround for buggy bootloaders */+ if (strcmp(env, "RouterStation") == 0 ||+ strcmp(env, "Ubiquiti AR71xx-based board") == 0)+ env = "UBNT-RS";++ if (strcmp(env, "RouterStation PRO") == 0)+ env = "UBNT-RSPRO";++ ar71xx_prom_append_cmdline("board", env);+ }+ } } void __init prom_free_prom_memory(void)-- 1.5.3.2