Esempio n. 1
0
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(&param);
	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;
}
Esempio n. 2
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;
}