int omap4430_enable_emu()
{
	int ret = -1;
	void *base_cm_emu, *base_l3instr_l3;
	int timeout = GLOBAL_TIMEOUT;

	base_cm_emu = map_page(OMAP4430_CM_EMU);
	if (base_cm_emu == NULL)
		goto end;

	base_l3instr_l3 = map_page(OMAP4430_CM_L3INSTR_L3);
	if (base_l3instr_l3 == NULL)
		goto unmap_cm_emu;

	// Enable clocks
	__writel(0x2, base_cm_emu + 0xA00);
	__writel(0x1, base_l3instr_l3 + 0xE20);
	__writel(0x1, base_l3instr_l3 + 0xE28);
	
	// Check if it worked
	while (--timeout)
		if (((__readl(base_cm_emu + 0xA00) & 0xf00) == 0x300)
			&& (__readl(base_cm_emu + 0xA20) & 0x40000)) {
			ret = 0;
			break;
		}

	unmap_page(base_l3instr_l3);
unmap_cm_emu:
	unmap_page(base_cm_emu);
end:
	return ret;
}
Exemplo n.º 2
0
Arquivo: io.c Projeto: berkus/nemesis
unsigned long _readl(unsigned long addr)
{
	return __readl(addr);
}