Exemplo n.º 1
0
/* ------------------------------------------------------------------------*//**
 * @FUNCTION		mem_read
 * @BRIEF		read memory value at given physical address.
 * @RETURNS		0 on success
 *			MEM_ERR_ARG
 *			MEM_ERR_ACCESS
 * @param[in]		addr: 32-bit memory physical address
 * @param[in, out]	val: pointer where to store read value
 * @DESCRIPTION		read memory value at given physical address.
 *			*val == 0xBEEFDEAD in case of error.
 *//*------------------------------------------------------------------------ */
int mem_read(unsigned int addr, unsigned int *val)
{
	int ret;

	if ((void *) val == NULL) {
		fprintf(stderr, "%s(): val == NULL!!!\n", __func__);
		return MEM_ERR_ARG;
	}

	if (addr == 0) {
		fprintf(stderr, "%s(): trying to read address 0!!!\n",
			__func__);
		return MEM_ERR_ARG;
	}

	if (mem_fake_access_get()) {
		*val = (unsigned int) addr;
		ret = 0;
	} else {
		ret = lmem_read(addr, val);
		if (ret != 0)
			ret = MEM_ERR_ACCESS;
	}

	if (mem_read_trace)
		printf("omapconf: read 0x%08X at address 0x%08X\n", *val, addr);

	return ret;
}
Exemplo n.º 2
0
/* ------------------------------------------------------------------------*//**
 * @FUNCTION		clk_am335x_sysclk_rate_get
 * @BRIEF		Return the mandatory system clock speed, in MHz.
 * @RETURNS		> 0 system clock speed, in MHz.
 *			OMAPCONF_ERR_CPU
 *			OMAPCONF_ERR_UNEXPECTED
 * @param[in]		none
 * @DESCRIPTION		Return the mandatory system clock speed, in MHz.
 *//*------------------------------------------------------------------------ */
double clk_am335x_sysclk_rate_get(void)
{
	unsigned int reg_val;
	static double sysclk = 0.0;
	sysclk_am335x_id sysclk_id;

	if (!cpu_is_am335x())
		return (double) OMAPCONF_ERR_CPU;

	if (sysclk > 0.0) {
		dprintf("%s(): sysclk rate=%.1lfMHz\n", __func__, sysclk);
		return sysclk;
	}

	if (!mem_fake_access_get()) {
		mem_read(AM335X_STATUS, &reg_val);
		sysclk_id = extract_bitfield(reg_val, 22, 2);
	} else {
		sysclk_id = SYSCLK_AM335X_19_2_MHZ; /* AM335X EVM PoR */
	}

	sysclk = sysclk_am335x_rate_table[sysclk_id];
	if (sysclk == 0.0) {
		fprintf(stderr, "%s(): bad CONTROL_STATUS value(%d)\n",
				__func__, sysclk_id);
		sysclk = (double) OMAPCONF_ERR_UNEXPECTED;
	} else {
		dprintf("%s(): CONTROL_STATUS=0x%x, sysclk rate=%.1lfMHz\n",
				__func__, sysclk_id, sysclk);
	}

	return sysclk;
}
Exemplo n.º 3
0
/* ------------------------------------------------------------------------*//**
 * @FUNCTION		mem_write
 * @BRIEF		write memory value at given physical address.
 * @RETURNS		0 on success
 *			MEM_ERR_ARG
 *			MEM_ERR_ACCESS
 * @param[in]		addr: 32-bit memory physical address
 * @param[in]		val: value to be written in memory
 * @DESCRIPTION		write value at given memory physical address.
 *//*------------------------------------------------------------------------ */
int mem_write(unsigned int addr, unsigned int val)
{
	int ret;

	if (addr == 0) {
		fprintf(stderr, "%s(): trying to write at address 0!!!\n",
			__func__);
		return MEM_ERR_ARG;
	}

	if (!mem_fake_access_get()) {
		ret = lmem_write(addr, val);
		if (ret != 0)
			ret = MEM_ERR_ACCESS;
	} else {
		ret = 0;
	}

	return ret;
}