Ejemplo n.º 1
0
int lpddr3_freq_init(int freq)
{
	unsigned int data;

	if (freq == DDR_FREQ_800M) {
		set_ddrc_800mhz();
		INFO("%s, set ddrc 800mhz\n", __func__);
	} else {
		set_ddrc_533mhz();
		INFO("%s, set ddrc 533mhz\n", __func__);
	}

	mmio_write_32((0xf712c000 + 0x004), 0xf1);
	if (freq == DDR_FREQ_800M)
		mmio_write_32((0xf7128000 + 0x050), 0x100023);
	else
		mmio_write_32((0xf7128000 + 0x050), 0x100123);
	mmio_write_32((0xf7128000 + 0x060), 0x133);
	mmio_write_32((0xf7128000 + 0x064), 0x133);
	mmio_write_32((0xf7128000 + 0x200), 0xa1000);

	if (freq == DDR_FREQ_800M) {
		mmio_write_32((0xf7128000 + 0x100), 0x755a9d12);
		mmio_write_32((0xf7128000 + 0x104), 0x1753b055);
		mmio_write_32((0xf7128000 + 0x108), 0x7401505f);
		mmio_write_32((0xf7128000 + 0x10c), 0x578ca244);
		mmio_write_32((0xf7128000 + 0x110), 0x10700000);
		mmio_write_32((0xf7128000 + 0x114), 0x13141306);
	} else {
		mmio_write_32((0xf7128000 + 0x100), 0xb77b6718);
		mmio_write_32((0xf7128000 + 0x104), 0x1e82a071);
		mmio_write_32((0xf7128000 + 0x108), 0x9501c07e);
		mmio_write_32((0xf7128000 + 0x10c), 0xaf50c255);
		mmio_write_32((0xf7128000 + 0x110), 0x10b00000);
		mmio_write_32((0xf7128000 + 0x114), 0x13181908);
	}
	mmio_write_32((0xf7128000 + 0x118), 0x44);
	do {
		data = mmio_read_32((0xf712c000 + 0x004));
	} while (data & 1);

	data = mmio_read_32((0xf712c000 + 0x008));
	if (data & 0x7fe) {
		NOTICE("fail to init ddr3 rank0\n");
		return -EFAULT;
	}
	INFO("init ddr3 rank0\n");
	ddrx_rdet();
	ddrx_wdet();

	data = mmio_read_32((0xf712c000 + 0x048));
	data |= 1;
	mmio_write_32((0xf712c000 + 0x048), data);
	mmio_write_32((0xf712c000 + 0x004), 0x21);
	do {
		data = mmio_read_32((0xf712c000 + 0x004));
	} while (data & 1);

	data = mmio_read_32((0xf712c000 + 0x008));
	if (data & 0x7fe)
		NOTICE("ddr3 rank1 init failure\n");
	else
		INFO("ddr3 rank1 init pass\n");

	data = mmio_read_32((0xf712c000 + 0x048));
	data &= ~0xf;
	mmio_write_32((0xf712c000 + 0x048), data);
	return 0;
}
Ejemplo n.º 2
0
int lpddr3_freq_init(int ddr800)
{
	unsigned int data;

	if (ddr800) {
		set_ddrc_800mhz();
		tf_printf("INFO:    " "%s, set ddrc 800mhz\n", __func__);
	} else {
		set_ddrc_533mhz();
		tf_printf("INFO:    " "%s, set ddrc 533mhz\n", __func__);
	}

	data = cat_533mhz_800mhz();
	if (data)
		tf_printf("NOTICE:  " "fail to set eye diagram\n");

	mmio_write_32((0xf712c000 + 0x004), 0xf1);
	if (ddr800)
		mmio_write_32((0xf7128000 + 0x050), 0x100023);
	else
		mmio_write_32((0xf7128000 + 0x050), 0x100123);
	mmio_write_32((0xf7128000 + 0x060), 0x133);
	mmio_write_32((0xf7128000 + 0x064), 0x133);
	mmio_write_32((0xf7128000 + 0x200), 0xa1000);
	if (ddr800) {
		mmio_write_32((0xf7128000 + 0x100), 0x755a9d12);
		mmio_write_32((0xf7128000 + 0x104), 0x1753b055);
		mmio_write_32((0xf7128000 + 0x108), 0x7401505f);
		mmio_write_32((0xf7128000 + 0x10c), 0x578ca244);
		mmio_write_32((0xf7128000 + 0x110), 0x10700000);
		mmio_write_32((0xf7128000 + 0x114), 0x13141306);
	} else {
		mmio_write_32((0xf7128000 + 0x100), 0xb77b6718);
		mmio_write_32((0xf7128000 + 0x104), 0x1e82a071);
		mmio_write_32((0xf7128000 + 0x108), 0x9501c07e);
		mmio_write_32((0xf7128000 + 0x10c), 0xaf50c255);
		mmio_write_32((0xf7128000 + 0x110), 0x10b00000);
		mmio_write_32((0xf7128000 + 0x114), 0x13181908);
	}
	mmio_write_32((0xf7128000 + 0x118), 0x44);
	do {
		data = mmio_read_32((0xf712c000 + 0x004));
	} while (data & 1);

	data = mmio_read_32((0xf712c000 + 0x008));
	if (data & 0x7fe) {
		tf_printf("NOTICE:  " "fail to init ddr3 rank0\n");
		return -14;
	}
	tf_printf("INFO:    " "init ddr3 rank0\n");
	ddrx_rdet();
	ddrx_wdet();

	data = mmio_read_32((0xf712c000 + 0x048));
	data |= 1;
	mmio_write_32((0xf712c000 + 0x048), data);
	mmio_write_32((0xf712c000 + 0x004), 0x21);
	do {
		data = mmio_read_32((0xf712c000 + 0x004));
	} while (data & 1);

	data = mmio_read_32((0xf712c000 + 0x008));
	if (data & 0x7fe)
		tf_printf("NOTICE:  " "ddr3 rank1 init failure\n");
	else
		tf_printf("INFO:    " "ddr3 rank1 init pass\n");

	data = mmio_read_32((0xf712c000 + 0x048));
	data &= ~0xf;
	mmio_write_32((0xf712c000 + 0x048), data);
	return 0;
}