broadcom-diag: use new in kernel board detection code
SVN-Revision: 35764
This commit is contained in:
parent
2754907a13
commit
49ff283df8
1 changed files with 93 additions and 117 deletions
|
@ -32,6 +32,7 @@
|
||||||
#include <linux/netlink.h>
|
#include <linux/netlink.h>
|
||||||
#include <linux/kobject.h>
|
#include <linux/kobject.h>
|
||||||
#include <net/sock.h>
|
#include <net/sock.h>
|
||||||
|
#include <bcm47xx_board.h>
|
||||||
extern u64 uevent_next_seqnum(void);
|
extern u64 uevent_next_seqnum(void);
|
||||||
|
|
||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
|
@ -1038,85 +1039,13 @@ static struct platform_t __initdata platforms[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_t __init *platform_detect(void)
|
static struct platform_t __init *platform_detect_legacy(void)
|
||||||
{
|
{
|
||||||
char *boardnum, *boardtype, *buf;
|
char *boardnum, *boardtype, *buf;
|
||||||
|
|
||||||
if (strcmp(getvar("nvram_type"), "cfe") == 0)
|
if (strcmp(getvar("nvram_type"), "cfe") == 0)
|
||||||
return &platforms[WGT634U];
|
return &platforms[WGT634U];
|
||||||
|
|
||||||
/* Look for a model identifier */
|
|
||||||
|
|
||||||
/* Based on "model_name" */
|
|
||||||
if ((buf = nvram_get("model_name"))) {
|
|
||||||
if (!strcmp(buf, "DIR-130"))
|
|
||||||
return &platforms[DIR130];
|
|
||||||
if (!strcmp(buf, "DIR-330"))
|
|
||||||
return &platforms[DIR330];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Based on "wsc_modelname */
|
|
||||||
if ((buf = nvram_get("wsc_modelname"))) {
|
|
||||||
if (!strcmp(buf, "WRT610N"))
|
|
||||||
return &platforms[WRT610N];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Based on "model_no" */
|
|
||||||
if ((buf = nvram_get("model_no"))) {
|
|
||||||
if (startswith(buf,"WL700")) /* WL700* */
|
|
||||||
return &platforms[WL700GE];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Based on "hardware_version" */
|
|
||||||
if ((buf = nvram_get("hardware_version"))) {
|
|
||||||
if (startswith(buf,"WL500GPV2-")) /* WL500GPV2-* */
|
|
||||||
return &platforms[WL500GPV2];
|
|
||||||
if (startswith(buf,"WL520GC-")) /* WL520GU-* */
|
|
||||||
return &platforms[WL520GC];
|
|
||||||
if (startswith(buf,"WL520GU-")) /* WL520GU-* */
|
|
||||||
return &platforms[WL520GU];
|
|
||||||
if (startswith(buf,"WL330GE-")) /* WL330GE-* */
|
|
||||||
return &platforms[WL330GE];
|
|
||||||
if (startswith(buf,"RT-N16-")) /* RT-N16-* */
|
|
||||||
return &platforms[RTN16];
|
|
||||||
if (startswith(buf,"F7D4301")) /* F7D4301* */
|
|
||||||
return &platforms[BELKIN_F7D4301];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Based on "ModelId" */
|
|
||||||
if ((buf = nvram_get("ModelId"))) {
|
|
||||||
if (!strcmp(buf, "WR850GP"))
|
|
||||||
return &platforms[WR850GP];
|
|
||||||
if (!strcmp(buf, "WR850G"))
|
|
||||||
return &platforms[WR850GV2V3];
|
|
||||||
if (!strcmp(buf, "WX-5565") && !strcmp(getvar("boardtype"),"bcm94710ap"))
|
|
||||||
return &platforms[TM2300]; /* Dell TrueMobile 2300 */
|
|
||||||
if (startswith(buf,"WE800G")) /* WE800G* */
|
|
||||||
return &platforms[WE800G];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Buffalo */
|
|
||||||
if ((buf = (nvram_get("melco_id") ?: nvram_get("buffalo_id")))) {
|
|
||||||
/* Buffalo hardware, check id for specific hardware matches */
|
|
||||||
if (!strcmp(buf, "29bb0332"))
|
|
||||||
return &platforms[WBR2_G54];
|
|
||||||
if (!strcmp(buf, "29129"))
|
|
||||||
return &platforms[WLA2_G54L];
|
|
||||||
if (!strcmp(buf, "30189"))
|
|
||||||
return &platforms[WHR_HP_G54];
|
|
||||||
if (!strcmp(buf, "32093"))
|
|
||||||
return &platforms[WHR_G125];
|
|
||||||
if (!strcmp(buf, "30182"))
|
|
||||||
return &platforms[WHR_G54S];
|
|
||||||
if (!strcmp(buf, "290441dd"))
|
|
||||||
return &platforms[WHR2_A54G54];
|
|
||||||
if (!strcmp(buf, "31120"))
|
|
||||||
return &platforms[WZR_G300N];
|
|
||||||
if (!strcmp(buf, "30083"))
|
|
||||||
return &platforms[WZR_RS_G54];
|
|
||||||
if (!strcmp(buf, "30103"))
|
|
||||||
return &platforms[WZR_RS_G54HP];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* no easy model number, attempt to guess */
|
/* no easy model number, attempt to guess */
|
||||||
boardnum = getvar("boardnum");
|
boardnum = getvar("boardnum");
|
||||||
|
@ -1130,59 +1059,18 @@ static struct platform_t __init *platform_detect(void)
|
||||||
return &platforms[WRT600N];
|
return &platforms[WRT600N];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Normally, these would go inside the "CFE based - newer hardware" block below; however, during early init, the
|
|
||||||
* "pmon_ver" variable is not available on the E3000v1 (and probably the WRT610Nv2 also). Until this is figured out,
|
|
||||||
* these will need to remain here in order for platform detection to work.
|
|
||||||
*/
|
|
||||||
if (!strcmp(boardnum, "42")) { /* Linksys */
|
|
||||||
if (!strcmp(boardtype, "0x04cf") && !strcmp(getvar("boot_hw_model"), "E300") && !strcmp(getvar("boot_hw_ver"), "1.0"))
|
|
||||||
return &platforms[E3000V1];
|
|
||||||
|
|
||||||
if (!strcmp(boardtype, "0x04cf") && !strcmp(getvar("boot_hw_model"), "WRT610N") && !strcmp(getvar("boot_hw_ver"), "2.0"))
|
|
||||||
return &platforms[WRT610NV2];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (startswith(getvar("pmon_ver"), "CFE")) {
|
if (startswith(getvar("pmon_ver"), "CFE")) {
|
||||||
/* CFE based - newer hardware */
|
/* CFE based - newer hardware */
|
||||||
if (!strcmp(boardnum, "42")) { /* Linksys */
|
if (!strcmp(boardnum, "42")) { /* Linksys */
|
||||||
if (!strcmp(boardtype, "0x478") && !strcmp(getvar("boot_hw_model"), "WRT300N") && !strcmp(getvar("boot_hw_ver"), "1.1"))
|
|
||||||
return &platforms[WRT300NV11];
|
|
||||||
|
|
||||||
if (!strcmp(boardtype, "0x478") && !strcmp(getvar("cardbus"), "1"))
|
if (!strcmp(boardtype, "0x478") && !strcmp(getvar("cardbus"), "1"))
|
||||||
return &platforms[WRT350N];
|
return &platforms[WRT350N];
|
||||||
|
|
||||||
if (!strcmp(boardtype, "0x0101") && !strcmp(getvar("boot_ver"), "v3.6"))
|
if (!strcmp(boardtype, "0x0101") && !strcmp(getvar("boot_ver"), "v3.6"))
|
||||||
return &platforms[WRT54G3G];
|
return &platforms[WRT54G3G];
|
||||||
|
|
||||||
if (!strcmp(boardtype, "0x042f") && !strcmp(getvar("model_name"), "WRT54G3GV2-VF"))
|
|
||||||
return &platforms[WRT54G3GV2_VF];
|
|
||||||
|
|
||||||
if (!strcmp(getvar("et1phyaddr"),"5") && !strcmp(getvar("et1mdcport"), "1"))
|
if (!strcmp(getvar("et1phyaddr"),"5") && !strcmp(getvar("et1mdcport"), "1"))
|
||||||
return &platforms[WRTSL54GS];
|
return &platforms[WRTSL54GS];
|
||||||
|
|
||||||
if (!strcmp(boardtype, "0x0472")) {
|
|
||||||
if(!strcmp(getvar("boot_hw_model"), "WRT150N")) {
|
|
||||||
if(!strcmp(getvar("boot_hw_ver"), "1"))
|
|
||||||
return &platforms[WRT150NV1];
|
|
||||||
else if(!strcmp(getvar("boot_hw_ver"), "1.1"))
|
|
||||||
return &platforms[WRT150NV11];
|
|
||||||
}
|
|
||||||
else if(!strcmp(getvar("boot_hw_model"), "WRT160N")) {
|
|
||||||
if(!strcmp(getvar("boot_hw_ver"), "1.0"))
|
|
||||||
return &platforms[WRT160NV1];
|
|
||||||
else if(!strcmp(getvar("boot_hw_ver"), "3.0"))
|
|
||||||
return &platforms[WRT160NV3];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(boardtype, "0x04cd")) {
|
|
||||||
if (!strcmp(getvar("boot_hw_model"), "E100")) {
|
|
||||||
if (!strcmp(getvar("boot_hw_ver"), "1.0"))
|
|
||||||
return &platforms[E1000V1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* default to WRT54G */
|
/* default to WRT54G */
|
||||||
return &platforms[WRT54G];
|
return &platforms[WRT54G];
|
||||||
}
|
}
|
||||||
|
@ -1199,9 +1087,7 @@ static struct platform_t __init *platform_detect(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(boardnum, "45")) { /* ASUS */
|
if (!strcmp(boardnum, "45")) { /* ASUS */
|
||||||
if (!strcmp(boardtype,"0x042f"))
|
if (!strcmp(boardtype,"0x0472"))
|
||||||
return &platforms[WL500GP];
|
|
||||||
else if (!strcmp(boardtype,"0x0472"))
|
|
||||||
return &platforms[WL500W];
|
return &platforms[WL500W];
|
||||||
else if (!strcmp(boardtype,"0x467"))
|
else if (!strcmp(boardtype,"0x467"))
|
||||||
return &platforms[WL320GE];
|
return &platforms[WL320GE];
|
||||||
|
@ -1310,6 +1196,96 @@ static struct platform_t __init *platform_detect(void)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct platform_t __init *platform_detect(void)
|
||||||
|
{
|
||||||
|
enum bcm47xx_board board;
|
||||||
|
const char *board_name;
|
||||||
|
|
||||||
|
|
||||||
|
board = bcm47xx_board_get();
|
||||||
|
board_name = bcm47xx_board_get_name();
|
||||||
|
if (board != BCM47XX_BOARD_UNKNOWN && board != BCM47XX_BOARD_NON)
|
||||||
|
printk(MODULE_NAME ": kernel found a \"%s\"\n", board_name);
|
||||||
|
|
||||||
|
switch(board) {
|
||||||
|
case BCM47XX_BOARD_ASUS_RTN16:
|
||||||
|
return &platforms[RTN16];
|
||||||
|
case BCM47XX_BOARD_ASUS_WL330GE:
|
||||||
|
return &platforms[WL330GE];
|
||||||
|
case BCM47XX_BOARD_ASUS_WL500GPV1:
|
||||||
|
return &platforms[WL500GP];
|
||||||
|
case BCM47XX_BOARD_ASUS_WL500GPV2:
|
||||||
|
return &platforms[WL500GPV2];
|
||||||
|
case BCM47XX_BOARD_ASUS_WL520GC:
|
||||||
|
return &platforms[WL520GC];
|
||||||
|
case BCM47XX_BOARD_ASUS_WL520GU:
|
||||||
|
return &platforms[WL520GU];
|
||||||
|
case BCM47XX_BOARD_ASUS_WL700GE:
|
||||||
|
return &platforms[WL700GE];
|
||||||
|
case BCM47XX_BOARD_BELKIN_F7D4301:
|
||||||
|
return &platforms[BELKIN_F7D4301];
|
||||||
|
case BCM47XX_BOARD_BUFFALO_WBR2_G54:
|
||||||
|
return &platforms[WBR2_G54];
|
||||||
|
case BCM47XX_BOARD_BUFFALO_WHR2_A54G54:
|
||||||
|
return &platforms[WHR2_A54G54];
|
||||||
|
case BCM47XX_BOARD_BUFFALO_WHR_G125:
|
||||||
|
return &platforms[WHR_G125];
|
||||||
|
case BCM47XX_BOARD_BUFFALO_WHR_G54S:
|
||||||
|
return &platforms[WHR_G54S];
|
||||||
|
case BCM47XX_BOARD_BUFFALO_WHR_HP_G54:
|
||||||
|
return &platforms[WHR_HP_G54];
|
||||||
|
case BCM47XX_BOARD_BUFFALO_WLA2_G54L:
|
||||||
|
return &platforms[WLA2_G54L];
|
||||||
|
case BCM47XX_BOARD_BUFFALO_WZR_G300N:
|
||||||
|
return &platforms[WZR_G300N];
|
||||||
|
case BCM47XX_BOARD_BUFFALO_WZR_RS_G54:
|
||||||
|
return &platforms[WZR_RS_G54];
|
||||||
|
case BCM47XX_BOARD_BUFFALO_WZR_RS_G54HP:
|
||||||
|
return &platforms[WZR_RS_G54HP];
|
||||||
|
case BCM47XX_BOARD_DELL_TM2300:
|
||||||
|
return &platforms[TM2300];
|
||||||
|
case BCM47XX_BOARD_DLINK_DIR130:
|
||||||
|
return &platforms[DIR130];
|
||||||
|
case BCM47XX_BOARD_DLINK_DIR330:
|
||||||
|
return &platforms[DIR330];
|
||||||
|
case BCM47XX_BOARD_LINKSYS_E1000V1:
|
||||||
|
return &platforms[E1000V1];
|
||||||
|
case BCM47XX_BOARD_LINKSYS_E3000V1:
|
||||||
|
return &platforms[E3000V1];
|
||||||
|
case BCM47XX_BOARD_LINKSYS_WRT150NV1:
|
||||||
|
return &platforms[WRT150NV1];
|
||||||
|
case BCM47XX_BOARD_LINKSYS_WRT150NV11:
|
||||||
|
return &platforms[WRT150NV11];
|
||||||
|
case BCM47XX_BOARD_LINKSYS_WRT160NV1:
|
||||||
|
return &platforms[WRT160NV1];
|
||||||
|
case BCM47XX_BOARD_LINKSYS_WRT160NV3:
|
||||||
|
return &platforms[WRT160NV3];
|
||||||
|
case BCM47XX_BOARD_LINKSYS_WRT300NV11:
|
||||||
|
return &platforms[WRT300NV11];
|
||||||
|
case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
|
||||||
|
return &platforms[WRT54G3GV2_VF];
|
||||||
|
case BCM47XX_BOARD_LINKSYS_WRT610NV1:
|
||||||
|
return &platforms[WRT610N];
|
||||||
|
case BCM47XX_BOARD_LINKSYS_WRT610NV2:
|
||||||
|
return &platforms[WRT610NV2];
|
||||||
|
case BCM47XX_BOARD_MOTOROLA_WE800G:
|
||||||
|
return &platforms[WE800G];
|
||||||
|
case BCM47XX_BOARD_MOTOROLA_WR850GP:
|
||||||
|
return &platforms[WR850GP];
|
||||||
|
case BCM47XX_BOARD_MOTOROLA_WR850GV2V3:
|
||||||
|
return &platforms[WR850GV2V3];
|
||||||
|
case BCM47XX_BOARD_UNKNOWN:
|
||||||
|
case BCM47XX_BOARD_NON:
|
||||||
|
printk(MODULE_NAME ": unknown board found, try legacy detect\n");
|
||||||
|
printk(MODULE_NAME ": please open a ticket at https://dev.openwrt.org and attach the complete nvram\n");
|
||||||
|
return platform_detect_legacy();
|
||||||
|
default:
|
||||||
|
printk(MODULE_NAME ": board was detected as \"%s\", but not gpio configuration available\n", board_name);
|
||||||
|
printk(MODULE_NAME ": now trying legacy detect\n");
|
||||||
|
return platform_detect_legacy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static inline void ssb_maskset32(struct ssb_device *dev,
|
static inline void ssb_maskset32(struct ssb_device *dev,
|
||||||
u16 offset, u32 mask, u32 set)
|
u16 offset, u32 mask, u32 set)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue