Add support for reading RouterBoard's memory which is passed by the loader

(RouterBOOT).

Tested on RouterBoards, various and on RSPRO, TP-Link MR3x20
(for regressions).
This commit is contained in:
Luiz Otavio O Souza 2014-05-09 14:02:18 +00:00
parent 3010d2256a
commit b7c7433150
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=265775
2 changed files with 37 additions and 0 deletions

View File

@ -104,6 +104,7 @@ ARGE_MDIO opt_arge.h
AR71XX_REALMEM opt_ar71xx.h
AR71XX_ENV_UBOOT opt_ar71xx.h
AR71XX_ENV_REDBOOT opt_ar71xx.h
AR71XX_ENV_ROUTERBOOT opt_ar71xx.h
AR71XX_ATH_EEPROM opt_ar71xx.h
#

View File

@ -140,6 +140,34 @@ ar71xx_redboot_get_macaddr(void)
}
}
#ifdef AR71XX_ENV_ROUTERBOOT
/*
* RouterBoot gives us the board memory in a command line argument.
*/
static int
ar71xx_routerboot_get_mem(int argc, char **argv)
{
int i, board_mem;
/*
* Protect ourselves from garbage in registers.
*/
if (!MIPS_IS_VALID_PTR(argv))
return (0);
for (i = 0; i < argc; i++) {
if (argv[i] == NULL)
continue;
if (strncmp(argv[i], "mem=", 4) == 0) {
if (sscanf(argv[i] + 4, "%dM", &board_mem) == 1)
return (btoc(board_mem * 1024 * 1024));
}
}
return (0);
}
#endif
void
platform_start(__register_t a0 __unused, __register_t a1 __unused,
__register_t a2 __unused, __register_t a3 __unused)
@ -183,6 +211,14 @@ platform_start(__register_t a0 __unused, __register_t a1 __unused,
}
}
#ifdef AR71XX_ENV_ROUTERBOOT
/*
* RouterBoot informs the board memory as a command line argument.
*/
if (realmem == 0)
realmem = ar71xx_routerboot_get_mem(argc, argv);
#endif
/*
* Just wild guess. RedBoot let us down and didn't reported
* memory size