mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-13 14:06:07 -04:00
powerpc/mpc8xxxx: FSL DDR debugger auto run of stored commands
This patch adds the ability for the FSL DDR interactive debugger to automatically run the sequence of commands stored in the ddr_interactive environment variable. Commands are separated using ';'. ddr_interactive=compute; edit c0 d0 dimmparms caslat_X 0x3FC0; go Signed-off-by: James Yang <James.Yang@freescale.com> Signed-off-by: Andy Fleming <afleming@freescale.com>
This commit is contained in:
parent
02a9ce7187
commit
e8ba6c503f
@ -86,7 +86,8 @@ void fsl_ddr_set_lawbar(
|
|||||||
unsigned int memctl_interleaved,
|
unsigned int memctl_interleaved,
|
||||||
unsigned int ctrl_num);
|
unsigned int ctrl_num);
|
||||||
|
|
||||||
unsigned long long fsl_ddr_interactive(fsl_ddr_info_t *pinfo);
|
int fsl_ddr_interactive_env_var_exists(void);
|
||||||
|
unsigned long long fsl_ddr_interactive(fsl_ddr_info_t *pinfo, int var_is_set);
|
||||||
void fsl_ddr_get_spd(generic_spd_eeprom_t *ctrl_dimms_spd,
|
void fsl_ddr_get_spd(generic_spd_eeprom_t *ctrl_dimms_spd,
|
||||||
unsigned int ctrl_num);
|
unsigned int ctrl_num);
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
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
|
* No need to worry for buffer overflow here in
|
||||||
* this function; readline() maxes out at CFG_CBSIZE
|
* this function; readline() maxes out at CFG_CBSIZE
|
||||||
*/
|
*/
|
||||||
readline_into_buffer(prompt, buffer, 0);
|
readline_into_buffer(prompt, buffer, 0);
|
||||||
|
}
|
||||||
argc = parse_line(buffer, argv);
|
argc = parse_line(buffer, argv);
|
||||||
if (argc == 0)
|
if (argc == 0)
|
||||||
continue;
|
continue;
|
||||||
|
@ -532,10 +532,10 @@ phys_size_t fsl_ddr_sdram(void)
|
|||||||
|
|
||||||
/* Compute it once normally. */
|
/* Compute it once normally. */
|
||||||
#ifdef CONFIG_FSL_DDR_INTERACTIVE
|
#ifdef CONFIG_FSL_DDR_INTERACTIVE
|
||||||
if (getenv("ddr_interactive")) {
|
if (tstc() && (getc() == 'd')) { /* we got a key press of 'd' */
|
||||||
total_memory = fsl_ddr_interactive(&info);
|
total_memory = fsl_ddr_interactive(&info, 0);
|
||||||
} else if (tstc() && (getc() == 'd')) { /* we got a key press of 'd' */
|
} else if (fsl_ddr_interactive_env_var_exists()) {
|
||||||
total_memory = fsl_ddr_interactive(&info);
|
total_memory = fsl_ddr_interactive(&info, 1);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
total_memory = fsl_ddr_compute(&info, STEP_GET_SPD, 0);
|
total_memory = fsl_ddr_compute(&info, STEP_GET_SPD, 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user