|
@@ -1430,11 +1430,23 @@ static unsigned int fsl_ddr_parse_interactive_cmd(
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|
|
-unsigned long long fsl_ddr_interactive(fsl_ddr_info_t *pinfo)
|
|
|
|
|
|
+int fsl_ddr_interactive_env_var_exists(void)
|
|
|
|
+{
|
|
|
|
+ char buffer[CONFIG_SYS_CBSIZE];
|
|
|
|
+
|
|
|
|
+ if (getenv_f("ddr_interactive", buffer, CONFIG_SYS_CBSIZE) >= 0)
|
|
|
|
+ return 1;
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+unsigned long long fsl_ddr_interactive(fsl_ddr_info_t *pinfo, int var_is_set)
|
|
{
|
|
{
|
|
unsigned long long ddrsize;
|
|
unsigned long long ddrsize;
|
|
const char *prompt = "FSL DDR>";
|
|
const char *prompt = "FSL DDR>";
|
|
char buffer[CONFIG_SYS_CBSIZE];
|
|
char buffer[CONFIG_SYS_CBSIZE];
|
|
|
|
+ char buffer2[CONFIG_SYS_CBSIZE];
|
|
|
|
+ char *p = NULL;
|
|
char *argv[CONFIG_SYS_MAXARGS + 1]; /* NULL terminated */
|
|
char *argv[CONFIG_SYS_MAXARGS + 1]; /* NULL terminated */
|
|
int argc;
|
|
int argc;
|
|
unsigned int next_step = STEP_GET_SPD;
|
|
unsigned int next_step = STEP_GET_SPD;
|
|
@@ -1451,16 +1463,39 @@ unsigned long long fsl_ddr_interactive(fsl_ddr_info_t *pinfo)
|
|
"go program the memory controller and continue with u-boot\n"
|
|
"go program the memory controller and continue with u-boot\n"
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ if (var_is_set) {
|
|
|
|
+ if (getenv_f("ddr_interactive", buffer2, CONFIG_SYS_CBSIZE) > 0) {
|
|
|
|
+ p = buffer2;
|
|
|
|
+ } else {
|
|
|
|
+ var_is_set = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* The strategy for next_step is that it points to the next
|
|
* The strategy for next_step is that it points to the next
|
|
* step in the computation process that needs to be done.
|
|
* step in the computation process that needs to be done.
|
|
*/
|
|
*/
|
|
while (1) {
|
|
while (1) {
|
|
- /*
|
|
|
|
- * No need to worry for buffer overflow here in
|
|
|
|
- * this function; readline() maxes out at CFG_CBSIZE
|
|
|
|
- */
|
|
|
|
- readline_into_buffer(prompt, buffer, 0);
|
|
|
|
|
|
+ if (var_is_set) {
|
|
|
|
+ char *pend = strchr(p, ';');
|
|
|
|
+ if (pend) {
|
|
|
|
+ /* found command separator, copy sub-command */
|
|
|
|
+ *pend = '\0';
|
|
|
|
+ strcpy(buffer, p);
|
|
|
|
+ p = pend + 1;
|
|
|
|
+ } else {
|
|
|
|
+ /* separator not found, copy whole string */
|
|
|
|
+ strcpy(buffer, p);
|
|
|
|
+ p = NULL;
|
|
|
|
+ var_is_set = 0;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ /*
|
|
|
|
+ * No need to worry for buffer overflow here in
|
|
|
|
+ * this function; readline() maxes out at CFG_CBSIZE
|
|
|
|
+ */
|
|
|
|
+ readline_into_buffer(prompt, buffer, 0);
|
|
|
|
+ }
|
|
argc = parse_line(buffer, argv);
|
|
argc = parse_line(buffer, argv);
|
|
if (argc == 0)
|
|
if (argc == 0)
|
|
continue;
|
|
continue;
|