int ddr_training(void) { ddrtr_t entry; unsigned int start, length; struct ddrtr_result_t *result; struct ddrtr_param_t param; start = get_ddr_free(&length, 0x100000); param.cmd = DDRTR_PARAM_TRAINING; param.train.start = start; param.train.length = length; entry = (ddrtr_t)get_ddrtr_entry(); if (!entry) return -1; printf("## DDR training entry: 0x%08X area: 0x%08X - 0x%08X\n", (unsigned int)entry, start, start + length); asm("mcr p15, 0, r0, c7, c5, 0"); asm("mcr p15, 0, r0, c7, c10, 4"); result = entry(¶m); if (!result) { printf("## DDR training fail, reset system.\n"); reset_cpu(0); return 0; } memcpy((void *)&ddrtr_result, result, sizeof(ddrtr_result)); printf("## DDR training terminated.\n"); ddr_training_result((unsigned int)(&(ddrtr_result.data))); printf("\nDDR Training Registers and Value:\n"); printf(dump_ddrtr_result(result, '\n')); return 0; }
int ddr_training(void) { ddrtr_t entry; unsigned int start, end; struct ddrtr_result_t *result; start = get_ddr_free(&end, 0x100000); end += start; entry = (ddrtr_t)get_ddrtr_entry(); if (!entry) return -1; printf ("## DDR training entry: 0x%08X, " "training area: 0x%08X - 0x%08X\n", (unsigned int)entry, start, end); asm("mcr p15, 0, r0, c7, c5, 0"); asm("mcr p15, 0, r0, c7, c10, 4"); result = entry(start, (end - start)); if (!result) { printf("## DDR training fail, reset system.\n"); reset_cpu(0); return 0; } memcpy((void*)&ddrtr_result, result, sizeof(ddrtr_result)); printf ("## DDR training terminated.\n"); ddr_training_result((unsigned int)(&(ddrtr_result.data))); printf("\nDDR Training Registers and Value:\n"); printf(dump_ddrtr_result(result, '\n')); return 0; }