/* ------------------------------------------------------------------------*//** * @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; }
/* ------------------------------------------------------------------------*//** * @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, ®_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; }
/* ------------------------------------------------------------------------*//** * @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; }