/* ------------------------------------------------------------------------*//** * @FUNCTION voltdm54xx_opp_get * @BRIEF find the current voltage domain OPP * @RETURNS valid OPP ID in case of success * OPP54XX_ID_MAX in case of error * @param[in] id: voltage domain ID * @DESCRIPTION find the current voltage domain OPP *//*------------------------------------------------------------------------ */ opp54xx_id voltdm54xx_opp_get(voltdm54xx_id id) { opp54xx_id opp_id; double volt = 0.0, volt_por = 0.0; CHECK_CPU(54xx, OPP54XX_ID_MAX); CHECK_ARG_LESS_THAN(id, VDD54XX_ID_MAX, OPP54XX_ID_MAX); if (id == VDD54XX_WKUP) { /* Only 1 OPP for WKUP voltage domain */ opp_id = OPP54XX_NOM; } else { /* * In VDD_MM there are 3 independent modules (GPU, IVA, DSP) * that may be running at different clock rates. * Furthermore, these modules may or may not be running, so * module's clock rate may not be relevant. * Use nominal voltage instead. */ volt = voltdm54xx_nominal_voltage_get(id); if (volt < 0.0) return OPP54XX_ID_MAX; dprintf("%s(%s): nominal voltage is %lfV\n", __func__, voltdm54xx_name_get(id), volt); for (opp_id = OPP54XX_DPLL_CASC; opp_id < OPP54XX_ID_MAX; opp_id++) { volt_por = voltdm54xx_por_nominal_voltage_get( id, opp_id); if (volt_por < 0.0) return OPP54XX_ID_MAX; dprintf("%s(%s): POR nominal voltage for %s is %lfV\n", __func__, voltdm54xx_name_get(id), opp54xx_name_get(opp_id), volt_por); if (volt == volt_por) break; } } #ifdef VOLTDM54XX_DEBUG if (opp_id != OPP54XX_ID_MAX) { dprintf("%s(%s): OPP found: %s\n", __func__, voltdm54xx_name_get(id), opp54xx_name_get(opp_id)); } else { dprintf("%s(%s): OPP not found!\n", __func__, voltdm54xx_name_get(id)); } #endif return opp_id; }
/* ------------------------------------------------------------------------*//** * @FUNCTION ctt44xx_rd1_export * @BRIEF export PRCM registers in CTT RD1 format * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * OMAPCONF_ERR_NOT_AVAILABLE * @param[in] filename: output file name * @DESCRIPTION export PRCM registers in CTT RD1 format *//*------------------------------------------------------------------------ */ int ctt44xx_rd1_export(char *filename) { unsigned int i = 0; unsigned int ret, val = 0; int err = 0; FILE *fd = NULL; CHECK_CPU(44xx, OMAPCONF_ERR_ARG); CHECK_NULL_ARG(filename, OMAPCONF_ERR_ARG); fd = fopen(filename, "w"); if (fd == NULL) { printf("error: could not create %s file!\n", filename); return OMAPCONF_ERR_NOT_AVAILABLE; } if (cpu_is_omap4430()) { fprintf(fd, "DeviceName OMAP4430_ES2.x\n"); } else if (cpu_is_omap4460()) { fprintf(fd, "DeviceName OMAP4460_ES1.x\n"); } else if (cpu_is_omap4470()) { fprintf(fd, "DeviceName OMAP4470_ES1.0\n"); } else { err = OMAPCONF_ERR_CPU; goto ctt44xx_rd1_export_end; } ctt44xx_regtable_init(); while (prcm_ctt_reg_table[i].addr != 0) { /* display register addr & content (hex) */ ret = mem_read(prcm_ctt_reg_table[i].addr, &val); if (ret == 0) fprintf(fd, "0x%08X 0x%08X\n", prcm_ctt_reg_table[i].addr, val); else { fprintf(stderr, "omapconf: read error! (addr=0x%08X, err=%d)\n", prcm_ctt_reg_table[i].addr, ret); err = OMAPCONF_ERR_REG_ACCESS; } i++; } printf("Output written to file '%s'.\n", filename); err = 0; ctt44xx_rd1_export_end: if (fd != NULL) fclose(fd); return err; }
/* ------------------------------------------------------------------------*//** * @FUNCTION prm54xx_export * @BRIEF export module register content to file, in XML format. * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_ARG * OMAPCONF_ERR_INTERNAL * @param[in,out] fp: output file stream (opened for write operations) * @param[in] id: PRM module ID * @DESCRIPTION export module register content to file, in XML format. *//*------------------------------------------------------------------------ */ int prm54xx_export(FILE *fp, prm54xx_mod_id id) { reg **mod; unsigned int i; CHECK_CPU(54xx, OMAPCONF_ERR_CPU); CHECK_NULL_ARG(fp, OMAPCONF_ERR_ARG); CHECK_ARG_LESS_THAN(id, PRM54XX_MODS_COUNT, OMAPCONF_ERR_ARG); if ((cpu_revision_get() != REV_ES1_0) && (id == PRM54XX_L4PER_PRM)) { fprintf(stderr, "omapconf: %s(): L4_PER does not exist!!!\n", __func__); return OMAPCONF_ERR_ARG; } dprintf("%s(): exporting PRM %s (%u) module ...\n", __func__, prm54xx_mod_name_get(id), id); if (cpu_revision_get() == REV_ES1_0) mod = prm54xxes1_mods[id]; else mod = prm54xx_mods[id]; if (mod == NULL) { fprintf(stderr, "omapconf: %s(): mod == NULL!!!\n", __func__); return OMAPCONF_ERR_INTERNAL; } if ((id == PRM54XX_INSTR_PRM) && !prm54xx_is_profiling_running()) { dprintf( "%s(%s): PRM module is not accessible, don't export registers\n", __func__, prm54xx_mod_name_get(id)); return 0; } fprintf(fp, " <submodule id=\"%u\" name=\"%s\">\n", id, prm54xx_mod_name_get(id)); for (i = 0; mod[i] != NULL; i++) fprintf(fp, " <register id=\"%u\" name=\"%s\" addr=\"0x%08X\" data=\"0x%08X\" />\n", i, reg_name_get(mod[i]), reg_addr_get(mod[i]), reg_read(mod[i])); fprintf(fp, " </submodule>\n"); fflush(fp); dprintf("%s(): PRM %s (%u) module exported.\n", __func__, cm54xx_mod_name_get(id), id); return 0; }
/* ------------------------------------------------------------------------*//** * @FUNCTION opp54xx_count_get * @BRIEF return the number of OPP(s) of a given voltage domain * @RETURNS number of OPP(s) (> 0) in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_ARG * @param[in] vdd_id: voltage domain ID * @DESCRIPTION return the number of OPP(s) of a given voltage domain *//*------------------------------------------------------------------------ */ int opp54xx_count_get(voltdm54xx_id vdd_id) { int count; CHECK_CPU(54xx, OMAPCONF_ERR_CPU); CHECK_ARG_LESS_THAN(vdd_id, VDD54XX_ID_MAX, OMAPCONF_ERR_ARG); opp54xx_init(); count = genlist_getcount(opp54xx_list_table_es1[vdd_id]); dprintf("%s(%d) = %d\n", __func__, vdd_id, count); return count; }
/* ------------------------------------------------------------------------*//** * @FUNCTION emif54xx_export * @BRIEF export module register content to file, in XML format. * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_ARG * OMAPCONF_ERR_REG_ACCESS * OMAPCONF_ERR_INTERNAL * @param[in,out] fp: output file stream (opened for write operations) * @param[in] id: EMIF module ID * @DESCRIPTION export module register content to file, in XML format. *//*------------------------------------------------------------------------ */ int emif54xx_export(FILE *fp, emif54xx_mod_id id) { reg **mod; unsigned int i, accessible; CHECK_CPU(54xx, OMAPCONF_ERR_CPU); CHECK_NULL_ARG(fp, OMAPCONF_ERR_ARG); CHECK_ARG_LESS_THAN(id, EMIF54XX_MODS_COUNT, OMAPCONF_ERR_ARG); switch (id) { case EMIF54XX_EMIF1: accessible = module_is_accessible(MOD_EMIF1); break; case EMIF54XX_EMIF2: accessible = module_is_accessible(MOD_EMIF2); break; default: /* should not happen as already checked just before ... */ return OMAPCONF_ERR_INTERNAL; } if (!accessible) { printf("%s export: module not running, skipping " "registers export.\n", emif54xx_mod_name_get(id)); return 0; } if (cpu_revision_get() == REV_ES1_0) mod = emif54xxes1_mods[id]; else mod = emif54xx_mods[id]; fprintf(fp, " <submodule id=\"%u\" name=\"%s\">\n", id, emif54xx_mod_name_get(id)); if (cpu_revision_get() == REV_ES1_0) { for (i = 0; i < OMAP5430ES1_EMIF1_MOD_REGCOUNT; i++) fprintf(fp, " <register id=\"%u\" name=\"%s\" " "addr=\"0x%08X\" data=\"0x%08X\" />\n", i, (mod[i])->name, (mod[i])->addr, reg_read(mod[i])); } else { for (i = 0; i < OMAP5430_EMIF1_MOD_REGCOUNT; i++) fprintf(fp, " <register id=\"%u\" name=\"%s\" " "addr=\"0x%08X\" data=\"0x%08X\" />\n", i, (mod[i])->name, (mod[i])->addr, reg_read(mod[i])); } fprintf(fp, " </submodule>\n"); return 0; }
/* ------------------------------------------------------------------------*//** * @FUNCTION main44xx_enable * @BRIEF enable selected item provided in string argv. * @RETURNS 0 in case of success * OMAPCONF_ERR_ARG * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * OMAPCONF_ERR_INTERNAL * @param[in] argc: shell input argument number * @param[in] argv: shell input argument(s) * @DESCRIPTION enable selected item provided in string argv. *//*------------------------------------------------------------------------ */ static int main44xx_enable(int argc, char *argv[]) { CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (argc < 1) { return err_arg_missing_msg_show(HELP_CATEGORY_MAX); } else if (strcmp(argv[0], "hwobs") == 0) { if (argc == 1) return hwobs44xx_setup_enable(); else return err_arg_too_many_msg_show(HELP_HWOBS); } else { return err_unknown_argument_msg_show(argv[0]); } }
/* ------------------------------------------------------------------------*//** * @FUNCTION main44xx_read * @BRIEF read selected item provided in string argv. * @RETURNS 0 in case of success * OMAPCONF_ERR_ARG * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * OMAPCONF_ERR_INTERNAL * @param[in] argc: shell input argument number * @param[in] argv: shell input argument(s) * @DESCRIPTION read selected item provided in string argv. *//*------------------------------------------------------------------------ */ static int main44xx_read(int argc, char *argv[]) { CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (strcmp(argv[0], "audioic") == 0) { if (argc < 2) return err_arg_missing_msg_show(HELP_CATEGORY_MAX); else if (argc == 2) return twl6040_readreg(uppercase(argv[1])); else return err_arg_too_many_msg_show(HELP_CATEGORY_MAX); } else { return err_unknown_argument_msg_show(argv[0]); } }
/* ------------------------------------------------------------------------*//** * @FUNCTION voltdm54xx_por_nominal_voltage_get * @BRIEF return the Plan of Record (POR) nominal voltage * of a given voltage domain for a given OPP. * @RETURNS supply voltage in case of success (>= 0.0) * OMAPCONF_ERR_ARG * OMAPCONF_ERR_CPU * @param[in] id: valid voltage domain ID * @DESCRIPTION return the Plan of Record (POR) nominal voltage * of a given voltage domain for a given OPP. *//*------------------------------------------------------------------------ */ double voltdm54xx_por_nominal_voltage_get(voltdm54xx_id id, opp54xx_id opp_id) { double volt; CHECK_CPU(54xx, (double) OMAPCONF_ERR_CPU); CHECK_ARG_LESS_THAN(id, VDD54XX_ID_MAX, (double) OMAPCONF_ERR_ARG); CHECK_ARG_LESS_THAN(id, VDD54XX_ID_MAX, (double) OMAPCONF_ERR_ARG); volt = voltdm54xx_por_nominal_voltages_table_es1[id][opp_id]; dprintf("%s(%s): %s POR nominal volt=%lfV\n", __func__, opp54xx_name_get(opp_id), voltdm54xx_name_get(id), volt); return volt; }
/* ------------------------------------------------------------------------*//** * @FUNCTION dsp44xx_config_show * @BRIEF analyze DSP power configuration * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * @param[in] stream: output file stream * @DESCRIPTION analyze DSP power configuration *//*------------------------------------------------------------------------ */ int dsp44xx_config_show(FILE *stream) { unsigned int pm_pwstctrl; unsigned int pm_pwstst; unsigned int cm_clkstctrl; unsigned int rm_context; unsigned int cm_clkctrl; int ret; CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (!init_done) dsp44xx_regtable_init(); if (mem_read(OMAP4430_CM_DSP_DSP_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_DSP_DSP_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; /* Power Domain Configuration */ if (mem_read(OMAP4430_PM_DSP_PWRSTCTRL, &pm_pwstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_PM_DSP_PWRSTST, &pm_pwstst) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = pwrdm44xx_config_show(stream, "DSP", OMAP4430_PM_DSP_PWRSTCTRL, pm_pwstctrl, OMAP4430_PM_DSP_PWRSTST, pm_pwstst); if (ret != 0) return ret; /* Clock Domain Configuration */ if (mem_read(OMAP4430_CM_DSP_CLKSTCTRL, &cm_clkstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = clkdm44xx_config_show(stream, "DSP", OMAP4430_CM_DSP_CLKSTCTRL, cm_clkstctrl); if (ret != 0) return ret; /* Module Power Configuration */ ret = mod44xx_config_show(stream, "DSP", OMAP4430_CM_DSP_DSP_CLKCTRL, cm_clkctrl, OMAP4430_RM_DSP_DSP_CONTEXT, rm_context); if (ret != 0) return ret; return 0; }
/* ------------------------------------------------------------------------*//** * @FUNCTION sr54xx_module_config_show * @BRIEF analyze Smart-Reflex module configuration * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * @param[in] stream: output file (NULL: no output (silent)) * @DESCRIPTION analyze Smart-Reflex module configuration *//*------------------------------------------------------------------------ */ int sr54xx_module_config_show(FILE *stream) { sr_registers sr_regs[3]; unsigned int i; mod54xx_id sr_mods[3] = { OMAP5_SMARTREFLEX_MPU, OMAP5_SMARTREFLEX_MM, OMAP5_SMARTREFLEX_CORE}; CHECK_CPU(54xx, OMAPCONF_ERR_CPU); for (i = 0; i < 3; i++) { if (mod54xx_is_accessible(sr_mods[i]) != 1) { sr_regs[i].accessible = 0; continue; } sr_regs[i].accessible = 1; sr_regs[i].srconfig = reg_read(sr54xx_mods[i][0]); sr_regs[i].srstatus = reg_read(sr54xx_mods[i][1]); sr_regs[i].senval = reg_read(sr54xx_mods[i][2]); sr_regs[i].senmin = reg_read(sr54xx_mods[i][3]); sr_regs[i].senmax = reg_read(sr54xx_mods[i][4]); sr_regs[i].senavg = reg_read(sr54xx_mods[i][5]); sr_regs[i].avgweight = reg_read(sr54xx_mods[i][6]); sr_regs[i].nvaluereciprocal = reg_read(sr54xx_mods[i][7]); sr_regs[i].irqstatus_raw = reg_read(sr54xx_mods[i][8]); sr_regs[i].irqstatus = reg_read(sr54xx_mods[i][9]); sr_regs[i].irqenable_set = reg_read(sr54xx_mods[i][10]); sr_regs[i].senerror = reg_read(sr54xx_mods[i][12]); sr_regs[i].errconfig = reg_read(sr54xx_mods[i][13]); sr_regs[i].lvtsenval = reg_read(sr54xx_mods[i][14]); sr_regs[i].lvtsenmin = reg_read(sr54xx_mods[i][15]); sr_regs[i].lvtsenmax = reg_read(sr54xx_mods[i][16]); sr_regs[i].lvtsenavg = reg_read(sr54xx_mods[i][17]); sr_regs[i].lvtnvaluereciprocal = reg_read(sr54xx_mods[i][18]); } if ((sr_regs[0].accessible == 0) && (sr_regs[1].accessible == 0) && (sr_regs[2].accessible == 0)) { printf("All Smart-Reflex Modules disabled.\n"); return 0; } return sr_config_show(stream, sr_regs); }
/* ------------------------------------------------------------------------*//** * @FUNCTION main44xx * @BRIEF omap4 functions main entry point * @RETURNS 0 in case of success * OMAPCONF_ERR_ARG * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * OMAPCONF_ERR_INTERNAL * @param[in] argc: shell input argument number * @param[in] argv: shell input argument(s) * @DESCRIPTION omap4 functions main entry point (legacy) *//*------------------------------------------------------------------------ */ int main44xx(int argc, char *argv[]) { int ret; CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (argc == 0) { help(HELP_USAGE); return OMAPCONF_ERR_ARG; } /* Initializations */ main44xx_init(); if (strcmp(argv[0], "dump") == 0) ret = main44xx_dump(argc - 1, argv + 1); else if (strcmp(argv[0], "show") == 0) ret = main44xx_show(argc - 1, argv + 1); else if (strcmp(argv[0], "audit") == 0) ret = audit44xx_main(argc, argv); else if (strcmp(argv[0], "trace") == 0) ret = main44xx_trace(argc, argv); else if (strcmp(argv[0], "search") == 0) ret = main44xx_search(argc - 1, argv + 1); else if (strcmp(argv[0], "export") == 0) ret = main44xx_export(argc - 1, argv + 1); else if (strcmp(argv[0], "read") == 0) ret = main44xx_read(argc - 1, argv + 1); else if (strcmp(argv[0], "write") == 0) ret = main44xx_write(argc - 1, argv + 1); else if (strcmp(argv[0], "set") == 0) ret = main44xx_set(argc - 1, argv + 1); else if (strcmp(argv[0], "reset") == 0) ret = main44xx_reset(argc - 1, argv + 1); else if (strcmp(argv[0], "clear") == 0) ret = main44xx_clear(argc - 1, argv + 1); else if (strcmp(argv[0], "enable") == 0) ret = main44xx_enable(argc - 1, argv + 1); else if (strcmp(argv[0], "setup") == 0) ret = main44xx_setup(argc - 1, argv + 1); else if (strcmp(argv[0], "test") == 0) ret = main44xx_test(argc - 1, argv + 1); else ret = main44xx_legacy(argc, argv); return ret; }
/* ------------------------------------------------------------------------*//** * @FUNCTION mod44xx_get_por_clk_speed * @BRIEF retrieve omap module's functional POR clock speed * @RETURNS 0 in case of success * OMAPCONF_ERR_ARG * OMAPCONF_ERR_CPU * @param[in] module_id: omap module ID * @param[in] opp: the OPP ID * @param[in,out] por_clk_speed: returned omap functional clock speed * (in MHz) * @DESCRIPTION retrieve omap module's functional POR clock speed *//*------------------------------------------------------------------------ */ int mod44xx_get_por_clk_speed(mod44xx_id module_id, unsigned short opp, double *por_clk_speed) { *por_clk_speed = 0.0; #ifdef MODULE44XX_DEBUG char name[MOD44XX_MAX_NAME_LENGTH]; #endif CHECK_CPU(44xx, OMAPCONF_ERR_CPU); CHECK_ARG_LESS_THAN(module_id, OMAP4_MODULE_ID_MAX, OMAPCONF_ERR_ARG); CHECK_ARG_LESS_THAN(opp, OPP44XX_ID_MAX, OMAPCONF_ERR_ARG); *por_clk_speed = (double) mod44xx_info_table[module_id].por_speed[opp]; dprintf("%s(): module %s POR speed is %lf\n", __func__, mod44xx_get_name(module_id, name), *por_clk_speed); return 0; }
/* ------------------------------------------------------------------------*//** * @FUNCTION emu44xx_config_show * @BRIEF analyze power configuration * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * @param[in] stream: output file stream * @DESCRIPTION analyze power configuration *//*------------------------------------------------------------------------ */ int emu44xx_config_show(FILE *stream) { unsigned int pm_pwstctrl; unsigned int pm_pwstst; unsigned int cm_clkstctrl; unsigned int rm_context; unsigned int cm_clkctrl; int ret; CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (!init_done) emu44xx_regtable_init(); if (mem_read(OMAP4430_PM_EMU_PWRSTCTRL, &pm_pwstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_PM_EMU_PWRSTST, &pm_pwstst) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_CM_EMU_CLKSTCTRL, &cm_clkstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = pwrdm44xx_config_show(stream, "EMU", OMAP4430_PM_EMU_PWRSTCTRL, pm_pwstctrl, OMAP4430_PM_EMU_PWRSTST, pm_pwstst); if (ret != 0) return ret; ret = clkdm44xx_config_show(stream, "EMU", OMAP4430_CM_EMU_CLKSTCTRL, cm_clkstctrl); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_EMU_DEBUGSS_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_EMU_DEBUGSS_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "DEBUGSS", OMAP4430_CM_EMU_DEBUGSS_CLKCTRL, cm_clkctrl, OMAP4430_RM_EMU_DEBUGSS_CONTEXT, rm_context); return ret; }
/* ------------------------------------------------------------------------*//** * @FUNCTION sr54xx_avs_enable * @BRIEF control SR AVS via sysfs entry. * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_ARG * OMAPCONF_ERR_NOT_AVAILABLE * OMAPCONF_ERR_UNEXPECTED * @param[in] id: SR ID * @param[in] enable: =1 to enable, =0 to disable SR AVS * @DESCRIPTION control SR AVS via sysfs entry. *//*------------------------------------------------------------------------ */ int sr54xx_avs_enable(sr54xx_mod_id id, unsigned short enable) { int ret; FILE *fp; static const char filename[SR54XX_MODS_COUNT][72] = { "/sys/kernel/debug/smartreflex/smartreflex_mpu/autocomp", "/sys/kernel/debug/smartreflex/smartreflex_mm/autocomp", "/sys/kernel/debug/smartreflex/smartreflex_core/autocomp"}; CHECK_CPU(54xx, OMAPCONF_ERR_CPU); CHECK_ARG_LESS_THAN(id, SR54XX_MODS_COUNT, OMAPCONF_ERR_ARG); CHECK_ARG_LESS_THAN(enable, 2, OMAPCONF_ERR_ARG); /* Open file */ fp = fopen(filename[id], "w"); if (fp == NULL) { fprintf(stderr, "omapconf (%s()): could not open %s! Is debugfs mounted???\n\n", __func__, filename[id]); return OMAPCONF_ERR_NOT_AVAILABLE; } if (enable) ret = fwrite("1", sizeof(char), 1, fp); else ret = fwrite("0", sizeof(char), 1, fp); if (ret != 1) { fprintf(stderr, "omapconf (%s()): could not write into %s!\n\n", __func__, filename[id]); ret = OMAPCONF_ERR_UNEXPECTED; } else { ret = 0; } /* Close file */ if (fp != NULL) fclose(fp); return ret; }
/* ------------------------------------------------------------------------*//** * @FUNCTION ctt44xx_main * @BRIEF main entry point for ctt * @RETURNS 0 in case of success * OMAPCONF_ERR_ARG * OMAPCONF_ERR_CPU * OMAPCONF_ERR_INTERNAL * @param[in] argc: shell input argument number * @param[in] argv: shell input argument(s) * @DESCRIPTION main entry point for ctt *//*------------------------------------------------------------------------ */ int ctt44xx_main(int argc, char *argv[]) { int ret; CHECK_CPU(44xx, OMAPCONF_ERR_ARG); if (argc == 2) { if (strcmp(argv[1], "dump") == 0) ret = ctt44xx_dump(); else if (strcmp(argv[1], "rd1") == 0) ret = ctt44xx_rd1_export(ctt_filename); else { help(HELP_EXPORT); ret = OMAPCONF_ERR_ARG; } } else { help(HELP_EXPORT); ret = OMAPCONF_ERR_ARG; } return ret; }
/* ------------------------------------------------------------------------*//** * @FUNCTION pwrdm54xx_state_get * @BRIEF extract power domain state from register * @RETURNS power domain state on success * PWRDM_STATE_MAX in case of error * @param[in] id: valid power domain ID * @param[in] type: valid power domain state type * @DESCRIPTION extract power domain state from register *//*------------------------------------------------------------------------ */ pwrdm_state pwrdm54xx_state_get(pwrdm54xx_id id, pwrdm_state_type type) { reg *pm_pwrst; CHECK_CPU(54xx, PWRDM_STATE_MAX); CHECK_ARG_LESS_THAN(id, PWRDM54XX_ID_MAX, PWRDM_STATE_MAX); /* Retrieve registers address */ if (type == PWRDM_STATE_TARGET) pm_pwrst = pwrdm54xx_pwrstctrl_table[id]; else pm_pwrst = pwrdm54xx_pwrstst_table[id]; if (pm_pwrst == NULL) { /* Always ON domain */ dprintf("%s(%s): Always ON domain\n", __func__, pwrdm54xx_name_get(id)); return PWRDM_ON_STATE; } /* Retrieve power domain state */ return pwrdm_state_get(pm_pwrst, type); }
/* ------------------------------------------------------------------------*//** * @FUNCTION main44xx_clear * @BRIEF clear selected item provided in string argv. * @RETURNS 0 in case of success * OMAPCONF_ERR_ARG * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * OMAPCONF_ERR_INTERNAL * @param[in] argc: shell input argument number * @param[in] argv: shell input argument(s) * @DESCRIPTION clear selected item provided in string argv. *//*------------------------------------------------------------------------ */ static int main44xx_clear(int argc, char *argv[]) { CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (strcmp(argv[0], "prcm") == 0) { if (argc < 3) { return err_arg_missing_msg_show(HELP_PRCM); } else if (strcmp(argv[1], "statdep") == 0) { if (argc == 3) return statdep44xx_main_set(argv[2], NULL, 0); else if (argc == 4) return statdep44xx_main_set( argv[2], argv[3], 0); else return err_arg_too_many_msg_show(HELP_PRCM); } else { return err_arg_msg_show(HELP_PRCM); } } else { return err_unknown_argument_msg_show(argv[0]); } }
/* ------------------------------------------------------------------------*//** * @FUNCTION sr54xx_config_show * @BRIEF analyze Smart-Reflex complete configuration * (SR module + VC + VP) * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * @param[in] stream: output file (NULL: no output (silent)) * @DESCRIPTION analyze Smart-Reflex complete configuration * (SR module + VC + VP) *//*------------------------------------------------------------------------ */ int sr54xx_config_show(FILE *stream) { vc54xx_registers vc_regs; int ret; CHECK_CPU(54xx, OMAPCONF_ERR_CPU); vc_regs.vc_smps_mpu_config = reg_read(&omap5430_prm_vc_smps_mpu_config); vc_regs.vc_smps_mm_config = reg_read(&omap5430_prm_vc_smps_mm_config); vc_regs.vc_smps_core_config = reg_read(&omap5430_prm_vc_smps_core_config); vc_regs.vc_val_cmd_vdd_mpu_l = reg_read(&omap5430_prm_vc_val_cmd_vdd_mpu_l); vc_regs.vc_val_cmd_vdd_mm_l = reg_read(&omap5430_prm_vc_val_cmd_vdd_mm_l); vc_regs.vc_val_cmd_vdd_core_l = reg_read(&omap5430_prm_vc_val_cmd_vdd_core_l); vc_regs.vc_val_bypass = reg_read(&omap5430_prm_vc_val_bypass); vc_regs.vc_mpu_errst = reg_read(&omap5430_prm_vc_mpu_errst); vc_regs.vc_mm_errst = reg_read(&omap5430_prm_vc_mm_errst); vc_regs.vc_core_errst = reg_read(&omap5430_prm_vc_core_errst); vc_regs.vc_bypass_errst = reg_read(&omap5430_prm_vc_bypass_errst); vc_regs.vc_cfg_i2c_mode = reg_read(&omap5430_prm_vc_cfg_i2c_mode); vc_regs.vc_cfg_i2c_clk = reg_read(&omap5430_prm_vc_cfg_i2c_clk); ret = vc54xx_config_show(stream, &vc_regs); if (ret != 0) return ret; ret = vp54xx_config_show(stream); if (ret != 0) return ret; ret = sr54xx_module_config_show(stream); if (ret != 0) return ret; return sr54xx_convergence_status_show(stream); }
/* ------------------------------------------------------------------------*//** * @FUNCTION sr54xx_avs_is_enabled * @BRIEF return SR AVS current mode (enabled/disabled). * @RETURNS 0 if disabled or in case of error. * 1 if enabled. * @param[in] id: SR ID * @DESCRIPTION return SR AVS current mode (enabled/disabled). *//*------------------------------------------------------------------------ */ unsigned short sr54xx_avs_is_enabled(sr54xx_mod_id id) { int ret; FILE *fp; char s[2]; unsigned short enable; static const char filename[SR54XX_MODS_COUNT][72] = { "/sys/kernel/debug/smartreflex/smartreflex_mpu/autocomp", "/sys/kernel/debug/smartreflex/smartreflex_mm/autocomp", "/sys/kernel/debug/smartreflex/smartreflex_core/autocomp"}; CHECK_CPU(54xx, 0); CHECK_ARG_LESS_THAN(id, SR54XX_MODS_COUNT, 0); /* Open file */ fp = fopen(filename[id], "r"); if (fp == NULL) { fprintf(stderr, "omapconf (%s()): could not open %s! Is debugfs mounted???\n\n", __func__, filename[id]); return 0; } ret = fread(s, sizeof(char), 1, fp); if (ret != 1) { fprintf(stderr, "omapconf (%s()): could not read %s!\n\n", __func__, filename[id]); enable = 0; } else { enable = atoi(s); } /* Close file */ if (fp != NULL) fclose(fp); return enable; }
/* ------------------------------------------------------------------------*//** * @FUNCTION gfx44xx_dependency_show * @BRIEF analyse GFX dependency configuration * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * @param[in] stream: output file stream * @DESCRIPTION analyse GFX dependency configuration *//*------------------------------------------------------------------------ */ int gfx44xx_dependency_show(FILE *stream) { unsigned int cm_staticdep; unsigned int cm_dynamicdep; CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (!init_done) gfx44xx_regtable_init(); if (mem_read(OMAP4430_CM_GFX_STATICDEP, &cm_staticdep) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_CM_GFX_DYNAMICDEP, &cm_dynamicdep) != 0) return OMAPCONF_ERR_REG_ACCESS; fprintf(stream, "|--------------------------------------------------------|\n"); fprintf(stream, "| GFX Domain Dependency Configuration | Static | Dynamic |\n"); fprintf(stream, "|-------------------------------------|------------------|\n"); fprintf(stream, "| %-35s | %-6s | %-7s |\n", "IVAHD", ((extract_bit(cm_staticdep, 2) == 1) ? "En" : "Dis"), ""); fprintf(stream, "| %-35s | %-6s | %-7s |\n", "MEM IF", ((extract_bit(cm_staticdep, 4) == 1) ? "En" : "Dis"), ""); fprintf(stream, "| %-35s | %-6s | %-7s |\n", "L3_1", ((extract_bit(cm_staticdep, 5) == 1) ? "En" : "Dis"), ((extract_bit(cm_dynamicdep, 5) == 1) ? "En" : "Dis")); fprintf(stream, "| %-35s | %-6s | %-7s |\n", "L3_2", ((extract_bit(cm_staticdep, 6) == 1) ? "En" : "Dis"), ""); fprintf(stream, "|--------------------------------------------------------|\n"); fprintf(stream, "\n"); return 0; }
/* ------------------------------------------------------------------------*//** * @FUNCTION main44xx_setup * @BRIEF setup selected item provided in string argv. * @RETURNS 0 in case of success * OMAPCONF_ERR_ARG * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * OMAPCONF_ERR_INTERNAL * @param[in] argc: shell input argument number * @param[in] argv: shell input argument(s) * @DESCRIPTION setup selected item provided in string argv. *//*------------------------------------------------------------------------ */ static int main44xx_setup(int argc, char *argv[]) { CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (argc == 0) { return err_arg_missing_msg_show(HELP_CATEGORY_MAX); } else if (strcmp(argv[0], "hwobs") == 0) { if (argc < 2) { return err_arg_missing_msg_show(HELP_HWOBS); } else if (argc == 2) { if (strcmp(argv[1], "pinmux") == 0) return hwobs44xx_pinmux_setup(); else return err_arg_msg_show(HELP_HWOBS); } else if (argc == 3) { if (strcmp(argv[1], "mpuss") == 0) return hwobs44xx_mpuss_setup(argv[2]); else if (strcmp(argv[1], "abe") == 0) return hwobs44xx_abe_setup(argv[2]); else return err_arg_msg_show(HELP_HWOBS); } else if (argc == 4) { return err_arg_missing_msg_show(HELP_HWOBS); } else if (argc == 5) { if (strcmp(argv[1], "prcm") == 0) return hwobs44xx_prcm_setup( argv[2], argv[3], argv[4]); else return err_arg_msg_show(HELP_HWOBS); } else { return err_arg_too_many_msg_show(HELP_HWOBS); } } else { return err_unknown_argument_msg_show(argv[0]); } }
/* ------------------------------------------------------------------------*//** * @FUNCTION wkup44xx_main * @BRIEF PRCM WKUP main menu * @RETURNS 0 in case of success * OMAPCONF_ERR_ARG * OMAPCONF_ERR_CPU * OMAPCONF_ERR_INTERNAL * @param[in] argc: shell input argument number * @param[in] argv: shell input argument(s) * @DESCRIPTION PRCM WKUP main menu *//*------------------------------------------------------------------------ */ int wkup44xx_main(int argc, char *argv[]) { int ret; CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (argc == 2) { if (!init_done) wkup44xx_regtable_init(); if (strcmp(argv[1], "dump") == 0) { ret = dumpregs(prcm_wkup_reg_table); } else if (strcmp(argv[1], "cfg") == 0) { ret = wkup44xx_config_show(stdout); } else { help(HELP_PRCM); ret = OMAPCONF_ERR_ARG; } } else { help(HELP_PRCM); ret = OMAPCONF_ERR_ARG; } return ret; }
/* ------------------------------------------------------------------------*//** * @FUNCTION main44xx_export * @BRIEF Export OMAP configuration into format and destination * provided in argv. * @RETURNS 0 in case of success * OMAPCONF_ERR_ARG * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * OMAPCONF_ERR_INTERNAL * @param[in] argc: shell input argument number * @param[in] argv: shell input argument(s) * @DESCRIPTION Export OMAP configuration into format and destination * provided in argv. *//*------------------------------------------------------------------------ */ static int main44xx_export(int argc, char *argv[]) { CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (argc < 1) { return err_arg_missing_msg_show(HELP_EXPORT); } else if (strcmp(argv[0], "ctt") == 0) { if (argc == 1) return ctt44xx_dump(); else if (argc == 2) return ctt44xx_rd1_export(argv[1]); else return err_arg_too_many_msg_show(HELP_EXPORT); } else if (strcmp(argv[0], "pct") == 0) { if (argc == 1) return pct44xx_dump(); else if (argc == 2) return pct44xx_rd1_export(argv[1]); else return err_arg_too_many_msg_show(HELP_EXPORT); } else { return err_unknown_argument_msg_show(argv[0]); } }
/* ------------------------------------------------------------------------*//** * @FUNCTION per44xx_dependency_show * @BRIEF analyse dependency configuration * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * @DESCRIPTION analyse dependency configuration *//*------------------------------------------------------------------------ */ int per44xx_dependency_show(FILE *stream) { unsigned int cm_dynamicdep; CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (!init_done) per44xx_regtable_init(); if (mem_read(OMAP4430_CM_L4PER_DYNAMICDEP, &cm_dynamicdep) != 0) return OMAPCONF_ERR_REG_ACCESS; fprintf(stream, "|--------------------------------------------------------|\n"); fprintf(stream, "| PER Domain Dependency Configuration | Static | Dynamic |\n"); fprintf(stream, "|-------------------------------------|------------------|\n"); fprintf(stream, "| %-35s | %-6s | %-7s |\n", "L3_INIT", "", ((extract_bit(cm_dynamicdep, 7) == 1) ? "En" : "Dis")); fprintf(stream, "| %-35s | %-6s | %-7s |\n", "DSS", "", ((extract_bit(cm_dynamicdep, 8) == 1) ? "En" : "Dis")); fprintf(stream, "|--------------------------------------------------------|\n"); fprintf(stream, "| %-44s | %-7d |\n", "Window Size", extract_bitfield(cm_dynamicdep, 24, 4)); fprintf(stream, "|--------------------------------------------------------|\n"); fprintf(stream, "\n"); return 0; }
/* ------------------------------------------------------------------------*//** * @FUNCTION ctt44xx_regtable_init * @BRIEF initialize regtable * @RETURNS 0 * OMAPCONF_ERR_CPU * @DESCRIPTION initialize regtable *//*------------------------------------------------------------------------ */ static int ctt44xx_regtable_init(void) { int i = 0; CHECK_CPU(44xx, OMAPCONF_ERR_ARG); /* Init PRCM registers table */ prcm_ctt_reg_table[i++].addr = 0x4a004100; prcm_ctt_reg_table[i++].addr = 0x4a004108; prcm_ctt_reg_table[i++].addr = 0x4a004110; prcm_ctt_reg_table[i++].addr = 0x4a004120; prcm_ctt_reg_table[i++].addr = 0x4a004124; prcm_ctt_reg_table[i++].addr = 0x4a004128; prcm_ctt_reg_table[i++].addr = 0x4a00412c; prcm_ctt_reg_table[i++].addr = 0x4a004130; prcm_ctt_reg_table[i++].addr = 0x4a004134; prcm_ctt_reg_table[i++].addr = 0x4a004138; prcm_ctt_reg_table[i++].addr = 0x4a00413c; prcm_ctt_reg_table[i++].addr = 0x4a004140; prcm_ctt_reg_table[i++].addr = 0x4a004144; prcm_ctt_reg_table[i++].addr = 0x4a004148; prcm_ctt_reg_table[i++].addr = 0x4a00414c; prcm_ctt_reg_table[i++].addr = 0x4a004150; prcm_ctt_reg_table[i++].addr = 0x4a004160; prcm_ctt_reg_table[i++].addr = 0x4a004164; prcm_ctt_reg_table[i++].addr = 0x4a004168; prcm_ctt_reg_table[i++].addr = 0x4a00416c; prcm_ctt_reg_table[i++].addr = 0x4a004170; prcm_ctt_reg_table[i++].addr = 0x4a004188; prcm_ctt_reg_table[i++].addr = 0x4a00418c; prcm_ctt_reg_table[i++].addr = 0x4a00419c; prcm_ctt_reg_table[i++].addr = 0x4a0041a0; prcm_ctt_reg_table[i++].addr = 0x4a0041a4; prcm_ctt_reg_table[i++].addr = 0x4a0041a8; prcm_ctt_reg_table[i++].addr = 0x4a0041ac; prcm_ctt_reg_table[i++].addr = 0x4a0041b8; prcm_ctt_reg_table[i++].addr = 0x4a0041bc; prcm_ctt_reg_table[i++].addr = 0x4a0041c8; prcm_ctt_reg_table[i++].addr = 0x4a0041cc; prcm_ctt_reg_table[i++].addr = 0x4a0041dc; prcm_ctt_reg_table[i++].addr = 0x4a0041e0; prcm_ctt_reg_table[i++].addr = 0x4a0041e4; prcm_ctt_reg_table[i++].addr = 0x4a0041e8; prcm_ctt_reg_table[i++].addr = 0x4a0041ec; prcm_ctt_reg_table[i++].addr = 0x4a0041f0; prcm_ctt_reg_table[i++].addr = 0x4a0041f4; prcm_ctt_reg_table[i++].addr = 0x4a004208; prcm_ctt_reg_table[i++].addr = 0x4a00420c; prcm_ctt_reg_table[i++].addr = 0x4a004260; prcm_ctt_reg_table[i++].addr = 0x4a004264; prcm_ctt_reg_table[i++].addr = 0x4a004270; prcm_ctt_reg_table[i++].addr = 0x4a004280; prcm_ctt_reg_table[i++].addr = 0x4a004400; prcm_ctt_reg_table[i++].addr = 0x4a004404; prcm_ctt_reg_table[i++].addr = 0x4a004408; prcm_ctt_reg_table[i++].addr = 0x4a004420; prcm_ctt_reg_table[i++].addr = 0x4a004500; prcm_ctt_reg_table[i++].addr = 0x4a004520; prcm_ctt_reg_table[i++].addr = 0x4a004528; prcm_ctt_reg_table[i++].addr = 0x4a004530; prcm_ctt_reg_table[i++].addr = 0x4a004538; prcm_ctt_reg_table[i++].addr = 0x4a004540; prcm_ctt_reg_table[i++].addr = 0x4a004548; prcm_ctt_reg_table[i++].addr = 0x4a004550; prcm_ctt_reg_table[i++].addr = 0x4a004558; prcm_ctt_reg_table[i++].addr = 0x4a004560; prcm_ctt_reg_table[i++].addr = 0x4a004568; prcm_ctt_reg_table[i++].addr = 0x4a004570; prcm_ctt_reg_table[i++].addr = 0x4a004578; prcm_ctt_reg_table[i++].addr = 0x4a004580; prcm_ctt_reg_table[i++].addr = 0x4a004588; prcm_ctt_reg_table[i++].addr = 0x4a008100; prcm_ctt_reg_table[i++].addr = 0x4a008104; prcm_ctt_reg_table[i++].addr = 0x4a008108; prcm_ctt_reg_table[i++].addr = 0x4a008110; prcm_ctt_reg_table[i++].addr = 0x4a008114; prcm_ctt_reg_table[i++].addr = 0x4a008118; prcm_ctt_reg_table[i++].addr = 0x4a00811c; prcm_ctt_reg_table[i++].addr = 0x4a008124; prcm_ctt_reg_table[i++].addr = 0x4a008128; prcm_ctt_reg_table[i++].addr = 0x4a00812c; prcm_ctt_reg_table[i++].addr = 0x4a008130; prcm_ctt_reg_table[i++].addr = 0x4a008138; prcm_ctt_reg_table[i++].addr = 0x4a008140; prcm_ctt_reg_table[i++].addr = 0x4a008144; prcm_ctt_reg_table[i++].addr = 0x4a008148; prcm_ctt_reg_table[i++].addr = 0x4a00814c; prcm_ctt_reg_table[i++].addr = 0x4a008150; prcm_ctt_reg_table[i++].addr = 0x4a008154; prcm_ctt_reg_table[i++].addr = 0x4a008158; prcm_ctt_reg_table[i++].addr = 0x4a00815c; prcm_ctt_reg_table[i++].addr = 0x4a008160; prcm_ctt_reg_table[i++].addr = 0x4a008164; prcm_ctt_reg_table[i++].addr = 0x4a008180; prcm_ctt_reg_table[i++].addr = 0x4a008184; prcm_ctt_reg_table[i++].addr = 0x4a008188; prcm_ctt_reg_table[i++].addr = 0x4a00818c; prcm_ctt_reg_table[i++].addr = 0x4a008190; prcm_ctt_reg_table[i++].addr = 0x4a0081b4; prcm_ctt_reg_table[i++].addr = 0x4a008600; prcm_ctt_reg_table[i++].addr = 0x4a008628; prcm_ctt_reg_table[i++].addr = 0x4a008630; prcm_ctt_reg_table[i++].addr = 0x4a008638; prcm_ctt_reg_table[i++].addr = 0x4a008640; prcm_ctt_reg_table[i++].addr = 0x4a008700; prcm_ctt_reg_table[i++].addr = 0x4a008708; prcm_ctt_reg_table[i++].addr = 0x4a008720; prcm_ctt_reg_table[i++].addr = 0x4a008800; prcm_ctt_reg_table[i++].addr = 0x4a008808; prcm_ctt_reg_table[i++].addr = 0x4a008820; prcm_ctt_reg_table[i++].addr = 0x4a008828; prcm_ctt_reg_table[i++].addr = 0x4a008830; prcm_ctt_reg_table[i++].addr = 0x4a008900; prcm_ctt_reg_table[i++].addr = 0x4a008904; prcm_ctt_reg_table[i++].addr = 0x4a008908; prcm_ctt_reg_table[i++].addr = 0x4a008920; prcm_ctt_reg_table[i++].addr = 0x4a008a00; prcm_ctt_reg_table[i++].addr = 0x4a008a04; prcm_ctt_reg_table[i++].addr = 0x4a008a08; prcm_ctt_reg_table[i++].addr = 0x4a008a20; prcm_ctt_reg_table[i++].addr = 0x4a008b00; prcm_ctt_reg_table[i++].addr = 0x4a008b20; prcm_ctt_reg_table[i++].addr = 0x4a008b28; prcm_ctt_reg_table[i++].addr = 0x4a008b30; prcm_ctt_reg_table[i++].addr = 0x4a008b38; prcm_ctt_reg_table[i++].addr = 0x4a008b40; prcm_ctt_reg_table[i++].addr = 0x4a008c00; prcm_ctt_reg_table[i++].addr = 0x4a008c04; prcm_ctt_reg_table[i++].addr = 0x4a008c08; prcm_ctt_reg_table[i++].addr = 0x4a008c20; prcm_ctt_reg_table[i++].addr = 0x4a008c30; prcm_ctt_reg_table[i++].addr = 0x4a008d00; prcm_ctt_reg_table[i++].addr = 0x4a008d08; prcm_ctt_reg_table[i++].addr = 0x4a008d20; prcm_ctt_reg_table[i++].addr = 0x4a008d28; prcm_ctt_reg_table[i++].addr = 0x4a008d30; prcm_ctt_reg_table[i++].addr = 0x4a008d38; prcm_ctt_reg_table[i++].addr = 0x4a008e00; prcm_ctt_reg_table[i++].addr = 0x4a008e20; prcm_ctt_reg_table[i++].addr = 0x4a008e28; prcm_ctt_reg_table[i++].addr = 0x4a008e40; prcm_ctt_reg_table[i++].addr = 0x4a008f00; prcm_ctt_reg_table[i++].addr = 0x4a008f04; prcm_ctt_reg_table[i++].addr = 0x4a008f08; prcm_ctt_reg_table[i++].addr = 0x4a008f20; prcm_ctt_reg_table[i++].addr = 0x4a008f28; prcm_ctt_reg_table[i++].addr = 0x4a009000; prcm_ctt_reg_table[i++].addr = 0x4a009004; prcm_ctt_reg_table[i++].addr = 0x4a009008; prcm_ctt_reg_table[i++].addr = 0x4a009020; prcm_ctt_reg_table[i++].addr = 0x4a009028; prcm_ctt_reg_table[i++].addr = 0x4a009100; prcm_ctt_reg_table[i++].addr = 0x4a009104; prcm_ctt_reg_table[i++].addr = 0x4a009108; prcm_ctt_reg_table[i++].addr = 0x4a009120; prcm_ctt_reg_table[i++].addr = 0x4a009200; prcm_ctt_reg_table[i++].addr = 0x4a009204; prcm_ctt_reg_table[i++].addr = 0x4a009208; prcm_ctt_reg_table[i++].addr = 0x4a009220; prcm_ctt_reg_table[i++].addr = 0x4a009300; prcm_ctt_reg_table[i++].addr = 0x4a009304; prcm_ctt_reg_table[i++].addr = 0x4a009308; prcm_ctt_reg_table[i++].addr = 0x4a009328; prcm_ctt_reg_table[i++].addr = 0x4a009330; prcm_ctt_reg_table[i++].addr = 0x4a009338; prcm_ctt_reg_table[i++].addr = 0x4a009358; prcm_ctt_reg_table[i++].addr = 0x4a009360; prcm_ctt_reg_table[i++].addr = 0x4a009368; prcm_ctt_reg_table[i++].addr = 0x4a0093d0; prcm_ctt_reg_table[i++].addr = 0x4a0093e0; prcm_ctt_reg_table[i++].addr = 0x4a009400; prcm_ctt_reg_table[i++].addr = 0x4a009408; prcm_ctt_reg_table[i++].addr = 0x4a009428; prcm_ctt_reg_table[i++].addr = 0x4a009430; prcm_ctt_reg_table[i++].addr = 0x4a009438; prcm_ctt_reg_table[i++].addr = 0x4a009440; prcm_ctt_reg_table[i++].addr = 0x4a009448; prcm_ctt_reg_table[i++].addr = 0x4a009450; prcm_ctt_reg_table[i++].addr = 0x4a009458; prcm_ctt_reg_table[i++].addr = 0x4a009460; prcm_ctt_reg_table[i++].addr = 0x4a009468; prcm_ctt_reg_table[i++].addr = 0x4a009470; prcm_ctt_reg_table[i++].addr = 0x4a009478; prcm_ctt_reg_table[i++].addr = 0x4a009480; prcm_ctt_reg_table[i++].addr = 0x4a009488; prcm_ctt_reg_table[i++].addr = 0x4a0094a0; prcm_ctt_reg_table[i++].addr = 0x4a0094a8; prcm_ctt_reg_table[i++].addr = 0x4a0094b0; prcm_ctt_reg_table[i++].addr = 0x4a0094b8; prcm_ctt_reg_table[i++].addr = 0x4a0094c0; prcm_ctt_reg_table[i++].addr = 0x4a0094e0; prcm_ctt_reg_table[i++].addr = 0x4a0094f0; prcm_ctt_reg_table[i++].addr = 0x4a0094f8; prcm_ctt_reg_table[i++].addr = 0x4a009500; prcm_ctt_reg_table[i++].addr = 0x4a009508; prcm_ctt_reg_table[i++].addr = 0x4a009520; prcm_ctt_reg_table[i++].addr = 0x4a009528; prcm_ctt_reg_table[i++].addr = 0x4a009538; prcm_ctt_reg_table[i++].addr = 0x4a009540; prcm_ctt_reg_table[i++].addr = 0x4a009548; prcm_ctt_reg_table[i++].addr = 0x4a009550; prcm_ctt_reg_table[i++].addr = 0x4a009558; prcm_ctt_reg_table[i++].addr = 0x4a009560; prcm_ctt_reg_table[i++].addr = 0x4a306100; prcm_ctt_reg_table[i++].addr = 0x4a306108; prcm_ctt_reg_table[i++].addr = 0x4a30610c; prcm_ctt_reg_table[i++].addr = 0x4a306110; prcm_ctt_reg_table[i++].addr = 0x4a307800; prcm_ctt_reg_table[i++].addr = 0x4a307820; prcm_ctt_reg_table[i++].addr = 0x4a307830; prcm_ctt_reg_table[i++].addr = 0x4a307838; prcm_ctt_reg_table[i++].addr = 0x4a307840; prcm_ctt_reg_table[i++].addr = 0x4a307850; prcm_ctt_reg_table[i++].addr = 0x4a307860; prcm_ctt_reg_table[i++].addr = 0x4a307878; prcm_ctt_reg_table[i++].addr = 0x4a307888; prcm_ctt_reg_table[i++].addr = 0x4a307a00; prcm_ctt_reg_table[i++].addr = 0x4a307a08; prcm_ctt_reg_table[i++].addr = 0x4a307a20; prcm_ctt_reg_table[i++].addr = 0x4a30a000; prcm_ctt_reg_table[i++].addr = 0x4a30a100; prcm_ctt_reg_table[i++].addr = 0x4a30a104; prcm_ctt_reg_table[i++].addr = 0x4a30a110; prcm_ctt_reg_table[i++].addr = 0x4a30a11c; prcm_ctt_reg_table[i++].addr = 0x4a30a204; prcm_ctt_reg_table[i++].addr = 0x4a30a208; prcm_ctt_reg_table[i++].addr = 0x4a30a210; prcm_ctt_reg_table[i++].addr = 0x4a30a214; prcm_ctt_reg_table[i++].addr = 0x4a30a218; prcm_ctt_reg_table[i++].addr = 0x4a30a21c; prcm_ctt_reg_table[i++].addr = 0x4a30a220; prcm_ctt_reg_table[i++].addr = 0x4a30a224; prcm_ctt_reg_table[i++].addr = 0x4a30a234; prcm_ctt_reg_table[i++].addr = 0x4a30a310; prcm_ctt_reg_table[i++].addr = 0x4a30a314; prcm_ctt_reg_table[i++].addr = 0x4a30a318; prcm_ctt_reg_table[i++].addr = 0x4a30a31c; prcm_ctt_reg_table[i++].addr = 0x4a30a320; prcm_ctt_reg_table[i++].addr = 0x4a30a324; prcm_ctt_reg_table[i++].addr = 0x4a30a400; prcm_ctt_reg_table[i++].addr = 0x4a30a41c; prcm_ctt_reg_table[i++].addr = 0x4a30a420; prcm_ctt_reg_table[i++].addr = 0x4a30a510; prcm_ctt_reg_table[i++].addr = 0x4a30a514; prcm_ctt_reg_table[i++].addr = 0x4a30a51c; prcm_ctt_reg_table[i].addr = 0; dprintf("prcm_ctt_reg_table last index=%d, size=%d\n", i, i + 1); return 0; }
/** * Function: dpll44xx_init_regtable * Role: initialize .addr field of reg_table (not possible statically) * Parameters: * none * Return: * 0 * OMAPCONF_ERR_CPU */ int dpll44xx_init_regtable(void) { unsigned int i = 0; CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (dpll44xx_prcm_reg_table_init_done == 1) return 0; /* Init DPLLs registers table */ dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKMODE_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKMODE_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_IDLEST_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_IDLEST_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_AUTOIDLE_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_AUTOIDLE_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKSEL_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKSEL_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M2_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M2_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M3_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M3_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M4_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M4_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M5_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M5_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M6_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M6_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M7_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M7_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_DELTAMSTEP_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_DELTAMSTEP_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_MODFREQDIV_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_MODFREQDIV_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_EMU_OVERRIDE_DPLL_CORE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_EMU_OVERRIDE_DPLL_CORE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKMODE_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKMODE_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_IDLEST_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_IDLEST_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_AUTOIDLE_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_AUTOIDLE_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKSEL_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKSEL_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M2_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M2_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M3_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M3_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M4_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M4_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M5_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M5_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M6_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M6_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M7_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M7_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_DELTAMSTEP_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_DELTAMSTEP_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_MODFREQDIV_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_MODFREQDIV_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_EMU_OVERRIDE_DPLL_PER; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_EMU_OVERRIDE_DPLL_PER"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKMODE_DPLL_MPU; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKMODE_DPLL_MPU"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_IDLEST_DPLL_MPU; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_IDLEST_DPLL_MPU"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_AUTOIDLE_DPLL_MPU; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_AUTOIDLE_DPLL_MPU"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKSEL_DPLL_MPU; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKSEL_DPLL_MPU"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M2_DPLL_MPU; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M2_DPLL_MPU"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_DELTAMSTEP_DPLL_MPU; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_DELTAMSTEP_DPLL_MPU"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_MODFREQDIV_DPLL_MPU; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_MODFREQDIV_DPLL_MPU"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_BYPCLK_DPLL_MPU; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_BYPCLK_DPLL_MPU"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKMODE_DPLL_IVA; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKMODE_DPLL_IVA"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_IDLEST_DPLL_IVA; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_IDLEST_DPLL_IVA"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_AUTOIDLE_DPLL_IVA; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_AUTOIDLE_DPLL_IVA"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKSEL_DPLL_IVA; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKSEL_DPLL_IVA"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M4_DPLL_IVA; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M4_DPLL_IVA"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M5_DPLL_IVA; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M5_DPLL_IVA"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_DELTAMSTEP_DPLL_IVA; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_DELTAMSTEP_DPLL_IVA"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_MODFREQDIV_DPLL_IVA; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_MODFREQDIV_DPLL_IVA"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_BYPCLK_DPLL_IVA; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_BYPCLK_DPLL_IVA"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKMODE_DPLL_ABE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKMODE_DPLL_ABE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_IDLEST_DPLL_ABE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_IDLEST_DPLL_ABE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_AUTOIDLE_DPLL_ABE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_AUTOIDLE_DPLL_ABE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKSEL_DPLL_ABE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKSEL_DPLL_ABE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M2_DPLL_ABE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M2_DPLL_ABE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M3_DPLL_ABE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M3_DPLL_ABE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_DELTAMSTEP_DPLL_ABE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_DELTAMSTEP_DPLL_ABE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_MODFREQDIV_DPLL_ABE; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_MODFREQDIV_DPLL_ABE"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKMODE_DPLL_USB; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKMODE_DPLL_USB"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_IDLEST_DPLL_USB; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_IDLEST_DPLL_USB"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_AUTOIDLE_DPLL_USB; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_AUTOIDLE_DPLL_USB"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKSEL_DPLL_USB; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKSEL_DPLL_USB"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M2_DPLL_USB; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M2_DPLL_USB"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_DELTAMSTEP_DPLL_USB; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_DELTAMSTEP_DPLL_USB"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_MODFREQDIV_DPLL_USB; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_MODFREQDIV_DPLL_USB"); if (cpu_is_omap4430() && (cpu_revision_get() == REV_ES1_0)) { dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKMODE_DPLL_UNIPRO; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKMODE_DPLL_UNIPRO"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_IDLEST_DPLL_UNIPRO; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_IDLEST_DPLL_UNIPRO"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_AUTOIDLE_DPLL_UNIPRO; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_AUTOIDLE_DPLL_UNIPRO"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKSEL_DPLL_UNIPRO; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKSEL_DPLL_UNIPRO"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M2_DPLL_UNIPRO; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M2_DPLL_UNIPRO"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_DELTAMSTEP_DPLL_UNIPRO; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_DELTAMSTEP_DPLL_UNIPRO"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_MODFREQDIV_DPLL_UNIPRO; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_MODFREQDIV_DPLL_UNIPRO"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKMODE_DPLL_DDRPHY; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKMODE_DPLL_DDRPHY"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_IDLEST_DPLL_DDRPHY; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_IDLEST_DPLL_DDRPHY"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_AUTOIDLE_DPLL_DDRPHY; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_AUTOIDLE_DPLL_DDRPHY"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_CLKSEL_DPLL_DDRPHY; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_CLKSEL_DPLL_DDRPHY"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M2_DPLL_DDRPHY; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M2_DPLL_DDRPHY"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M4_DPLL_DDRPHY; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M4_DPLL_DDRPHY"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M5_DPLL_DDRPHY; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M5_DPLL_DDRPHY"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_DIV_M6_DPLL_DDRPHY; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_DIV_M6_DPLL_DDRPHY"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_DELTAMSTEP_DPLL_DDRPHY; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_DELTAMSTEP_DPLL_DDRPHY"); dpll44xx_prcm_reg_table[i].addr = OMAP4430_CM_SSC_MODFREQDIV_DPLL_DDRPHY; strcpy(dpll44xx_prcm_reg_table[i++].name, "CM_SSC_MODFREQDIV_DPLL_DDRPHY"); } dpll44xx_prcm_reg_table[i].addr = 0; strcpy(dpll44xx_prcm_reg_table[i].name, "END"); dpll44xx_prcm_reg_table_init_done = 1; return 0; }
/* ------------------------------------------------------------------------*//** * @FUNCTION core44xx_config_show * @BRIEF analyze CORE power configuration * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * @param[in,out] stream: output file stream * @DESCRIPTION analyze CORE power configuration *//*------------------------------------------------------------------------ */ int core44xx_config_show(FILE *stream) { unsigned int pm_pwstctrl; unsigned int pm_pwstst; unsigned int cm_clkstctrl; unsigned int cm_clkctrl; unsigned int rm_context; int ret = 0; CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (!init_done) core44xx_regtable_init(); /* CORE Domain Power Configuration */ if (mem_read(OMAP4430_PM_CORE_PWRSTCTRL, &pm_pwstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_PM_CORE_PWRSTST, &pm_pwstst) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = pwrdm44xx_config_show(stream, "CORE", OMAP4430_PM_CORE_PWRSTCTRL, pm_pwstctrl, OMAP4430_PM_CORE_PWRSTST, pm_pwstst); if (ret != 0) return ret; /* L3_1 Clock Domain Configuration */ if (mem_read(OMAP4430_CM_L3_1_CLKSTCTRL, &cm_clkstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = clkdm44xx_config_show(stream, "L3_1", OMAP4430_CM_L3_1_CLKSTCTRL, cm_clkstctrl); if (ret != 0) return ret; /* L3_1 Module Power Configuration */ if (mem_read(OMAP4430_CM_L3_1_L3_1_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_L3_1_L3_1_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "L3_1", OMAP4430_CM_L3_1_L3_1_CLKCTRL, cm_clkctrl, OMAP4430_RM_L3_1_L3_1_CONTEXT, rm_context); if (ret != 0) return ret; /* L3_2 Clock Domain Configuration */ if (mem_read(OMAP4430_CM_L3_2_CLKSTCTRL, &cm_clkstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = clkdm44xx_config_show(stream, "L3_2", OMAP4430_CM_L3_2_CLKSTCTRL, cm_clkstctrl); if (ret != 0) return ret; /* L3_2 Modules Power Configuration */ if (mem_read(OMAP4430_CM_L3_2_L3_2_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_L3_2_L3_2_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "L3_2", OMAP4430_CM_L3_2_L3_2_CLKCTRL, cm_clkctrl, OMAP4430_RM_L3_2_L3_2_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_L3_2_GPMC_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_L3_2_GPMC_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "GPMC", OMAP4430_CM_L3_2_GPMC_CLKCTRL, cm_clkctrl, OMAP4430_RM_L3_2_GPMC_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_L3_2_OCMC_RAM_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_L3_2_OCMC_RAM_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "OCMC_RAM", OMAP4430_CM_L3_2_OCMC_RAM_CLKCTRL, cm_clkctrl, OMAP4430_RM_L3_2_OCMC_RAM_CONTEXT, rm_context); if (ret != 0) return ret; /* MPU_M3 Clock Domain Configuration */ if (mem_read(OMAP4430_CM_MPU_M3_CLKSTCTRL, &cm_clkstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = clkdm44xx_config_show(stream, "MPU_M3", OMAP4430_CM_MPU_M3_CLKSTCTRL, cm_clkstctrl); if (ret != 0) return ret; /* MPU_M3 Module Power Configuration */ if (mem_read(OMAP4430_CM_MPU_M3_MPU_M3_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_MPU_M3_MPU_M3_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "MPU_M3", OMAP4430_CM_MPU_M3_MPU_M3_CLKCTRL, cm_clkctrl, OMAP4430_RM_MPU_M3_MPU_M3_CONTEXT, rm_context); if (ret != 0) return ret; /* SDMA Clock Domain Configuration */ if (mem_read(OMAP4430_CM_SDMA_CLKSTCTRL, &cm_clkstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = clkdm44xx_config_show(stream, "SDMA", OMAP4430_CM_SDMA_CLKSTCTRL, cm_clkstctrl); if (ret != 0) return ret; /* SDMA Module Power Configuration */ if (mem_read(OMAP4430_CM_SDMA_SDMA_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_SDMA_SDMA_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "SDMA", OMAP4430_CM_SDMA_SDMA_CLKCTRL, cm_clkctrl, OMAP4430_RM_SDMA_SDMA_CONTEXT, rm_context); if (ret != 0) return ret; /* MEMIF Clock Domain Configuration */ if (mem_read(OMAP4430_CM_MEMIF_CLKSTCTRL, &cm_clkstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = clkdm44xx_config_show(stream, "MEMIF", OMAP4430_CM_MEMIF_CLKSTCTRL, cm_clkstctrl); if (ret != 0) return ret; /* MEMIF Modules Power Configuration */ if (mem_read(OMAP4430_CM_MEMIF_DMM_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_MEMIF_DMM_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "DMM", OMAP4430_CM_MEMIF_DMM_CLKCTRL, cm_clkctrl, OMAP4430_RM_MEMIF_DMM_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_MEMIF_EMIF_FW_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_MEMIF_EMIF_FW_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "EMIF_FW", OMAP4430_CM_MEMIF_EMIF_FW_CLKCTRL, cm_clkctrl, OMAP4430_RM_MEMIF_EMIF_FW_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_MEMIF_EMIF_1_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "EMIF_1", OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL, cm_clkctrl, OMAP4430_RM_MEMIF_EMIF_1_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_MEMIF_EMIF_2_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "EMIF_2", OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL, cm_clkctrl, OMAP4430_RM_MEMIF_EMIF_2_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_MEMIF_DLL_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_MEMIF_DLL_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "DLL", OMAP4430_CM_MEMIF_DLL_CLKCTRL, cm_clkctrl, OMAP4430_RM_MEMIF_DLL_CONTEXT, rm_context); if (ret != 0) return ret; /* C2C Clock Domain Configuration */ if (mem_read(OMAP4430_CM_C2C_CLKSTCTRL, &cm_clkstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = clkdm44xx_config_show(stream, "C2C", OMAP4430_CM_C2C_CLKSTCTRL, cm_clkstctrl); if (ret != 0) return ret; /* C2C Modules Power Configuration */ if (mem_read(OMAP4430_CM_C2C_C2C_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_C2C_C2C_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "C2C", OMAP4430_CM_C2C_C2C_CLKCTRL, cm_clkctrl, OMAP4430_RM_C2C_C2C_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_C2C_MODEM_ICR_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_C2C_MODEM_ICR_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "MODEM_ICR", OMAP4430_CM_C2C_MODEM_ICR_CLKCTRL, cm_clkctrl, OMAP4430_RM_C2C_MODEM_ICR_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_C2C_C2C_FW_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_C2C_C2C_FW_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "C2C_FW", OMAP4430_CM_C2C_C2C_FW_CLKCTRL, cm_clkctrl, OMAP4430_RM_C2C_C2C_FW_CONTEXT, rm_context); if (ret != 0) return ret; /* L4CFG Clock Domain Configuration */ if (mem_read(OMAP4430_CM_L4CFG_CLKSTCTRL, &cm_clkstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = clkdm44xx_config_show(stream, "L4CFG", OMAP4430_CM_L4CFG_CLKSTCTRL, cm_clkstctrl); if (ret != 0) return ret; /* L4CFG Modules Power Configuration */ if (mem_read(OMAP4430_CM_L4CFG_L4_CFG_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_L4CFG_L4_CFG_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "L4_CFG", OMAP4430_CM_L4CFG_L4_CFG_CLKCTRL, cm_clkctrl, OMAP4430_RM_L4CFG_L4_CFG_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_L4CFG_HW_SEM_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_L4CFG_HW_SEM_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "HW_SEM", OMAP4430_CM_L4CFG_HW_SEM_CLKCTRL, cm_clkctrl, OMAP4430_RM_L4CFG_HW_SEM_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_L4CFG_MAILBOX_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_L4CFG_MAILBOX_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "MAILBOX", OMAP4430_CM_L4CFG_MAILBOX_CLKCTRL, cm_clkctrl, OMAP4430_RM_L4CFG_MAILBOX_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_L4CFG_SAR_ROM_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_L4CFG_SAR_ROM_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "SAR_ROM", OMAP4430_CM_L4CFG_SAR_ROM_CLKCTRL, cm_clkctrl, OMAP4430_RM_L4CFG_SAR_ROM_CONTEXT, rm_context); if (ret != 0) return ret; /* L3INSTR Clock Domain Configuration */ if (mem_read(OMAP4430_CM_L3INSTR_CLKSTCTRL, &cm_clkstctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = clkdm44xx_config_show(stream, "L3INSTR", OMAP4430_CM_L3INSTR_CLKSTCTRL, cm_clkstctrl); if (ret != 0) return ret; /* L3INSTR Modules Power Configuration */ if (mem_read(OMAP4430_CM_L3INSTR_L3_3_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_L3INSTR_L3_3_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "L3_3", OMAP4430_CM_L3INSTR_L3_3_CLKCTRL, cm_clkctrl, OMAP4430_RM_L3INSTR_L3_3_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_L3INSTR_L3_INSTR_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "L3_INSTR", OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL, cm_clkctrl, OMAP4430_RM_L3INSTR_L3_INSTR_CONTEXT, rm_context); if (ret != 0) return ret; if (mem_read(OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL, &cm_clkctrl) != 0) return OMAPCONF_ERR_REG_ACCESS; if (mem_read(OMAP4430_RM_L3INSTR_OCP_WP1_CONTEXT, &rm_context) != 0) return OMAPCONF_ERR_REG_ACCESS; ret = mod44xx_config_show(stream, "OCP_WP1", OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL, cm_clkctrl, OMAP4430_RM_L3INSTR_OCP_WP1_CONTEXT, rm_context); if (ret != 0) return ret; return 0; }
/* ------------------------------------------------------------------------*//** * @FUNCTION temp54xx_get * @BRIEF return temperature measured by selected sensor * (in degrees celcius) * @RETURNS measured temperature in case of success * TEMP_ABSOLUTE_ZERO (-273) in case of error * @param[in] id: ADC temperature sensor id * @param[in, out] temp: temperature (Celcius, min) (returned) * @DESCRIPTION return temperature measured by selected sensor * (in degrees celcius) *//*------------------------------------------------------------------------ */ int temp54xx_get(temp54xx_sensor_id id) { int temp, ret; char line[256]; unsigned int i; FILE *fp = NULL; static const char *sensor_filenames1[TEMP54XX_ID_MAX] = { "/sys/kernel/debug/thermal_debug/devices/omap_cpu_sensor/temperature", "/sys/kernel/debug/thermal_debug/devices/omap_cpu_governor/hotspot_temp", "/sys/kernel/debug/thermal_debug/devices/omap_gpu_sensor/temperature", "/sys/kernel/debug/thermal_debug/devices/omap_gpu_governor/hotspot_temp", "/sys/kernel/debug/thermal_debug/devices/omap_core_sensor/temperature", "/sys/kernel/debug/emif.1/mr4", "/sys/kernel/debug/emif.2/mr4", "/sys/kernel/debug/thermal_debug/devices/tmp102_temp_sensor.72/temperature", "/sys/kernel/debug/thermal_debug/devices/tmp006_sensor/temperature", "/sys/kernel/debug/thermal_debug/devices/tmp102_temp_sensor.73/temperature"}; static const char *sensor_filenames2[TEMP54XX_ID_MAX] = { "/sys/devices/platform/omap/omap_temp_sensor.0/temp1_input", "/sys/kernel/debug/thermal_debug/devices/omap_cpu_governor/hotspot_temp", "/sys/devices/platform/omap/omap_temp_sensor.1/temp1_input", "/sys/kernel/debug/thermal_debug/devices/omap_gpu_governor/hotspot_temp", "/sys/devices/platform/omap/omap_temp_sensor.2/temp1_input", "/sys/kernel/debug/emif.1/mr4", "/sys/kernel/debug/emif.2/mr4", "/sys/kernel/debug/thermal_debug/devices/tmp102_temp_sensor.72/temperature", "/sys/kernel/debug/thermal_debug/devices/tmp006_sensor/temperature", "/sys/kernel/debug/thermal_debug/devices/tmp102_temp_sensor.73/temperature"}; static const char *sensor_filenames3[TEMP54XX_ID_MAX] = { "/sys/devices/platform/omap/omap4plus_scm.0/temp_sensor_hwmon.0/temp1_input", "/sys/kernel/debug/thermal_debug/devices/omap_cpu_governor/hotspot_temp", "/sys/devices/platform/omap/omap4plus_scm.0/temp_sensor_hwmon.1/temp1_input", "/sys/kernel/debug/thermal_debug/devices/omap_gpu_governor/hotspot_temp", "/sys/devices/platform/omap/omap4plus_scm.0/temp_sensor_hwmon.2/temp1_input", "/sys/kernel/debug/emif.1/mr4", "/sys/kernel/debug/emif.2/mr4", "/sys/kernel/debug/thermal_debug/devices/tmp102_temp_sensor.72/temperature", "/sys/kernel/debug/thermal_debug/devices/tmp006_sensor/temperature", "/sys/kernel/debug/thermal_debug/devices/tmp102_temp_sensor.73/temperature"}; static const char **sensor_filenames_list[3] = { sensor_filenames1, sensor_filenames2, sensor_filenames3}; CHECK_CPU(54xx, TEMP_ABSOLUTE_ZERO); CHECK_ARG_LESS_THAN(id, TEMP54XX_ID_MAX, TEMP_ABSOLUTE_ZERO); /* Open file exported by temp. sensor driver (if loaded) */ for (i = 0; i < 3; i++) { dprintf("%s(): i=%u id=%u filename=%s\n", __func__, i, id, (char *) sensor_filenames_list[i][id]); fp = fopen((char *) sensor_filenames_list[i][id], "r"); if (fp != NULL) break; } if (fp == NULL) { dprintf("%s(): could not open %s file!\n", __func__, temp54xx_name_get(id)); temp = TEMP_ABSOLUTE_ZERO; goto temp54xx_get_end; } /* Read file */ if (fgets(line, 256, fp) == NULL) { fclose(fp); dprintf("%s(): fgets() returned NULL!\n", __func__); temp = TEMP_ABSOLUTE_ZERO; goto temp54xx_get_end; } fclose(fp); /* Remove endind '\n' */ line[strlen(line) - 1] = '\0'; dprintf("%s(): line=%s len=%u\n", __func__, line, strlen(line)); if ((id != TEMP54XX_EMIF1) && (id != TEMP54XX_EMIF2)) { /* Retrieve temperature, in millidegrees celcius */ ret = sscanf(line, "%d", &temp); if (ret != 1) { dprintf("%s(): sscanf() returned %d!\n", __func__, ret); temp = TEMP_ABSOLUTE_ZERO; goto temp54xx_get_end; } temp = temp / 1000; /* convert to degrees */ } else { /* Retrieve temperature as MR4 code */ ret = sscanf(line, "MR4=%d", &temp); if (ret != 1) { dprintf("%s(): sscanf() returned %d!\n", __func__, ret); temp = TEMP_ABSOLUTE_ZERO; goto temp54xx_get_end; } } temp54xx_get_end: if ((id != TEMP54XX_EMIF1) && (id != TEMP54XX_EMIF2)) { dprintf("%s(%s): temp is %d C\n", __func__, temp54xx_name_get(id), temp); } else { dprintf("%s(%s): temp is %s\n", __func__, temp54xx_name_get(id), emif_mr4_convert(temp, TEMP_CELCIUS_DEGREES)); } return temp; }
/* ------------------------------------------------------------------------*//** * @FUNCTION vc44xx_config_show * @BRIEF decode and show VC current configuration * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * @param[in,out] stream: output file (NULL: no output (silent)) * @param[in,out] vc_regs: Voltage Controller registers content * @DESCRIPTION decode and show VC current configuration *//*------------------------------------------------------------------------ */ int vc44xx_config_show(FILE *stream, vc44xx_registers *vc_regs) { voltdm44xx_id id; unsigned char raw_cmd_on, raw_cmd_onlp, raw_cmd_ret, raw_cmd_off; unsigned char cmd_on, cmd_onlp, cmd_ret, cmd_off; char table[TABLE_MAX_ROW][TABLE_MAX_COL][TABLE_MAX_ELT_LEN]; unsigned int row = 0; CHECK_CPU(44xx, OMAPCONF_ERR_CPU); row = 0; autoadjust_table_init(table); autoadjust_table_strncpy(table, row, 0, "PRM VC Configuration"); autoadjust_table_strncpy(table, row, 1, "VC_MPU"); autoadjust_table_strncpy(table, row, 2, "VC_IVA"); autoadjust_table_strncpy(table, row, 3, "VC_CORE"); row++; for (id = OMAP4_VDD_MPU; id <= OMAP4_VDD_CORE; id++) { row = 1; autoadjust_table_strncpy(table, row, 0, "Power IC Slave Address (SA)"); snprintf(table[row][id], TABLE_MAX_ELT_LEN, "0x%02X", vc44xx_sa_get(id, vc_regs->prm_vc_smps_sa, vc_regs->prm_vc_cfg_channel)); row++; autoadjust_table_strncpy(table, row, 0, "Voltage Reg. Addr (VOLRA)"); snprintf(table[row][id], TABLE_MAX_ELT_LEN, "0x%02X", vc44xx_volra_get(id, vc_regs->prm_vc_cfg_channel, vc_regs->prm_vc_smps_ra_vol)); row++; autoadjust_table_strncpy(table, row, 0, "Command Reg. Addr (CMDRA)"); snprintf(table[row][id], TABLE_MAX_ELT_LEN, "0x%02X", vc44xx_cmdra_get(id, vc_regs->prm_vc_cfg_channel, vc_regs->prm_vc_val_smps_ra_cmd)); row++; autoadjust_table_strncpy(table, row++, 0, "Command Values:"); vc44xx_raw_cmd_values_get(id, vc_regs, &raw_cmd_on, &raw_cmd_onlp, &raw_cmd_ret, &raw_cmd_off); vc44xx_cmd_values_get(id, vc_regs, &cmd_on, &cmd_onlp, &cmd_ret, &cmd_off); strncpy(table[row][0], " ON", TABLE_MAX_ELT_LEN); snprintf(table[row][id], TABLE_MAX_ELT_LEN, "0x%02X (%.6lfV)", raw_cmd_on, smps_vsel2volt(vdd_id2smps_id(id), cmd_on)); row++; autoadjust_table_strncpy(table, row, 0, " ON-Low-Power (ONLP)"); snprintf(table[row][id], TABLE_MAX_ELT_LEN, "0x%02X (%.6lfV)", raw_cmd_onlp, smps_vsel2volt(vdd_id2smps_id(id), cmd_onlp)); row++; autoadjust_table_strncpy(table, row, 0, " RET"); snprintf(table[row][id], TABLE_MAX_ELT_LEN, "0x%02X (%.6lfV)", raw_cmd_ret, smps_vsel2volt(vdd_id2smps_id(id), cmd_ret)); row++; autoadjust_table_strncpy(table, row, 0, " OFF"); snprintf(table[row][id], TABLE_MAX_ELT_LEN, "0x%02X (%.6lfV)", raw_cmd_off, smps_vsel2volt(vdd_id2smps_id(id), cmd_off)); row++; } if (stream != NULL) autoadjust_table_fprint(stream, table, row, 4); return 0; }
/* ------------------------------------------------------------------------*//** * @FUNCTION core44xx_dependency_show * @BRIEF analyse CORE dependency configuration * @RETURNS 0 in case of success * OMAPCONF_ERR_CPU * OMAPCONF_ERR_REG_ACCESS * @param[in, out] stream: output file stream * @DESCRIPTION analyse CORE dependency configuration *//*------------------------------------------------------------------------ */ int core44xx_dependency_show(FILE *stream) { unsigned int cm_l3_1_dynamicdep; unsigned int cm_l3_2_dynamicdep; unsigned int cm_mpu_m3_staticdep; unsigned int cm_mpu_m3_dynamicdep; unsigned int cm_sdma_staticdep; unsigned int cm_sdma_dynamicdep; unsigned int cm_c2c_staticdep; unsigned int cm_c2c_dynamicdep; unsigned int cm_l4cfg_dynamicdep; int ret; CHECK_CPU(44xx, OMAPCONF_ERR_CPU); if (!init_done) core44xx_regtable_init(); ret = mem_read(OMAP4430_CM_L3_1_DYNAMICDEP, &cm_l3_1_dynamicdep); ret += mem_read(OMAP4430_CM_L3_2_DYNAMICDEP, &cm_l3_2_dynamicdep); ret += mem_read(OMAP4430_CM_MPU_M3_STATICDEP, &cm_mpu_m3_staticdep); ret += mem_read(OMAP4430_CM_MPU_M3_DYNAMICDEP, &cm_mpu_m3_dynamicdep); ret += mem_read(OMAP4430_CM_SDMA_STATICDEP, &cm_sdma_staticdep); ret += mem_read(OMAP4430_CM_SDMA_DYNAMICDEP, &cm_sdma_dynamicdep); ret += mem_read(OMAP4430_CM_C2C_STATICDEP, &cm_c2c_staticdep); ret += mem_read(OMAP4430_CM_C2C_DYNAMICDEP, &cm_c2c_dynamicdep); ret += mem_read(OMAP4430_CM_L4CFG_DYNAMICDEP, &cm_l4cfg_dynamicdep); if (ret != 0) return OMAPCONF_ERR_REG_ACCESS; fprintf(stream, "|-------------------------------------------------------------" "-------------|\n"); fprintf(stream, "| CORE Domain Dependency Configuration (Static/Dynamic) " " |\n"); fprintf(stream, "|-------------------------------------------------------------" "-------------|\n"); fprintf(stream, "| | FROM: " " |\n"); fprintf(stream, "| | L3_1 | L3_2 | MPU_M3 | SDMA | C2C" " | L4CFG |\n"); fprintf(stream, "| |Stat|Dyn |Stat|Dyn |Stat|Dyn |Stat|Dyn |Stat|" "Dyn |Stat|Dyn |\n"); fprintf(stream, "|-------------------------------------------------------------" "-------------|\n"); fprintf(stream, "| TOWARDS: | | | | | | | | | | " " | | |\n"); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "MPU_M3", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l3_2_dynamicdep, 0) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_sdma_staticdep, 0) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "" /* not implemented */); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "DSP", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_mpu_m3_staticdep, 1) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 1) == 1) ? "En" : "Dis")); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "IVAHD", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l3_2_dynamicdep, 2) == 1) ? "En" : "Dis"), ((extract_bit(cm_mpu_m3_staticdep, 2) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_sdma_staticdep, 2) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_c2c_staticdep, 2) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "" /* not implemented */); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "ABE", "", /* not implemented */ ((extract_bit(cm_l3_1_dynamicdep, 3) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_mpu_m3_staticdep, 3) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_sdma_staticdep, 3) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_c2c_staticdep, 3) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "" /* not implemented */); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "MEM IF", "", /* not implemented */ ((extract_bit(cm_l3_1_dynamicdep, 4) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_mpu_m3_staticdep, 4) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_sdma_staticdep, 4) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_c2c_staticdep, 4) == 1) ? "En" : "Dis"), ((extract_bit(cm_c2c_dynamicdep, 4) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 4) == 1) ? "En" : "Dis")); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "L3_1", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l3_2_dynamicdep, 5) == 1) ? "En" : "Dis"), ((extract_bit(cm_mpu_m3_staticdep, 5) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_sdma_staticdep, 5) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_c2c_staticdep, 5) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 5) == 1) ? "En" : "Dis")); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "L3_2", "", /* not implemented */ ((extract_bit(cm_l3_1_dynamicdep, 6) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_mpu_m3_staticdep, 6) == 1) ? "En" : "Dis"), ((extract_bit(cm_mpu_m3_dynamicdep, 6) == 1) ? "En" : "Dis"), ((extract_bit(cm_sdma_staticdep, 6) == 1) ? "En" : "Dis"), ((extract_bit(cm_sdma_dynamicdep, 6) == 1) ? "En" : "Dis"), ((extract_bit(cm_c2c_staticdep, 6) == 1) ? "En" : "Dis"), ((extract_bit(cm_c2c_dynamicdep, 6) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 6) == 1) ? "En" : "Dis")); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "L3INIT", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l3_2_dynamicdep, 7) == 1) ? "En" : "Dis"), ((extract_bit(cm_mpu_m3_staticdep, 7) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_sdma_staticdep, 7) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_c2c_staticdep, 7) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 7) == 1) ? "En" : "Dis")); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "DSS", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l3_2_dynamicdep, 8) == 1) ? "En" : "Dis"), ((extract_bit(cm_mpu_m3_staticdep, 8) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_sdma_staticdep, 8) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 8) == 1) ? "En" : "Dis")); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "ISS", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l3_2_dynamicdep, 9) == 1) ? "En" : "Dis"), ((extract_bit(cm_mpu_m3_staticdep, 9) == 1) ? "En" : "Dis"), ((extract_bit(cm_mpu_m3_dynamicdep, 9) == 1) ? "En" : "Dis"), ((extract_bit(cm_sdma_staticdep, 9) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 9) == 1) ? "En" : "Dis")); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "GFX", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l3_2_dynamicdep, 10) == 1) ? "En" : "Dis"), ((extract_bit(cm_mpu_m3_staticdep, 10) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "" /* not implemented */); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "SDMA", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_mpu_m3_staticdep, 11) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 11) == 1) ? "En" : "Dis")); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "L4CFG", "", /* not implemented */ ((extract_bit(cm_l3_1_dynamicdep, 12) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_mpu_m3_staticdep, 12) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_sdma_staticdep, 12) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_c2c_staticdep, 12) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "" /* not implemented */); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "L4PER", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l3_2_dynamicdep, 13) == 1) ? "En" : "Dis"), ((extract_bit(cm_mpu_m3_staticdep, 13) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_sdma_staticdep, 13) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_c2c_staticdep, 13) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "" /* not implemented */); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "L4SEC", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l3_2_dynamicdep, 14) == 1) ? "En" : "Dis"), ((extract_bit(cm_mpu_m3_staticdep, 14) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_sdma_staticdep, 14) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "" /* not implemented */); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "L4WKUP", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_mpu_m3_staticdep, 15) == 1) ? "En" : "Dis"), "", /* not implemented */ ((extract_bit(cm_sdma_staticdep, 15) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 15) == 1) ? "En" : "Dis")); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "ALWONCORE", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_mpu_m3_staticdep, 16) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 16) == 1) ? "En" : "Dis")); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "CEFUSE", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_mpu_m3_staticdep, 17) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 17) == 1) ? "En" : "Dis")); fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s" "|%-3s | %-3s|%-3s |\n", "C2C", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l3_2_dynamicdep, 18) == 1) ? "En" : "Dis"), "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 18) == 1) ? "En" : "Dis")); if (!cpu_is_omap4430()) fprintf(stream, "| %-12s | %-3s|%-3s | %-3s|%-3s | %-3s|%-3s | %-3s|" "%-3s | %-3s|%-3s | %-3s|%-3s |\n", "MPU", "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ "", /* not implemented */ ((extract_bit(cm_l4cfg_dynamicdep, 19) == 1) ? "En" : "Dis")); fprintf(stream, "|-------------------------------------------------------------" "-------------|\n"); fprintf(stream, "| Dynamic Dep | | | | | " " | |\n"); fprintf(stream, "| %-12s | %-2d | %-2d | %-2d | | " "%-2d | %-2d |\n", "Window Size", extract_bitfield(cm_l3_1_dynamicdep, 24, 4), extract_bitfield(cm_l3_2_dynamicdep, 24, 4), extract_bitfield(cm_mpu_m3_dynamicdep, 24, 4), extract_bitfield(cm_c2c_dynamicdep, 24, 4), extract_bitfield(cm_l4cfg_dynamicdep, 24, 4)); fprintf(stream, "|------------------------------------------------------------" "--------------|\n\n"); return 0; }