From 03a8a11933f0ecddb52610ef1f4ffb1469f95aec Mon Sep 17 00:00:00 2001 From: CTCaer Date: Tue, 3 Mar 2020 04:11:13 +0200 Subject: [PATCH] Small fixes and changes - Allow printing of more log on HOS boot when LOGS are OFF. - A small name refactoring - Add battery warning symbol when battery < 3200mV --- bootloader/frontend/fe_info.c | 5 +---- bootloader/gfx/gfx.c | 2 +- bootloader/gfx/gfx.h | 2 +- bootloader/hos/pkg2.c | 3 +++ bootloader/hos/secmon_exo.c | 23 ++++++++++------------- bootloader/main.c | 4 ++-- bootloader/mem/sdram.c | 1 - bootloader/power/max17050.h | 7 ++++++- bootloader/power/max7762x.c | 1 + bootloader/power/max7762x.h | 2 +- bootloader/soc/clock.c | 17 ++++++++++++++--- bootloader/soc/hw_init.c | 13 +++++++------ nyx/nyx_gui/frontend/fe_emmc_tools.c | 2 +- nyx/nyx_gui/frontend/gui.c | 2 +- nyx/nyx_gui/frontend/gui_emummc_tools.c | 1 - nyx/nyx_gui/frontend/gui_info.c | 11 ++++++----- nyx/nyx_gui/frontend/gui_tools.c | 2 +- nyx/nyx_gui/libs/lv_conf.h | 7 ------- nyx/nyx_gui/mem/sdram.c | 1 - nyx/nyx_gui/power/max17050.h | 7 ++++++- nyx/nyx_gui/soc/clock.c | 17 ++++++++++++++--- nyx/nyx_gui/utils/sprintf.c | 2 +- 22 files changed, 77 insertions(+), 55 deletions(-) diff --git a/bootloader/frontend/fe_info.c b/bootloader/frontend/fe_info.c index 1551bb0..b12854e 100644 --- a/bootloader/frontend/fe_info.c +++ b/bootloader/frontend/fe_info.c @@ -293,8 +293,6 @@ void print_sdcard_info() if (sd_mount()) { - u32 capacity; - gfx_printf("%kCard IDentification:%k\n", 0xFF00DDFF, 0xFFCCCCCC); gfx_printf( " Vendor ID: %02x\n" @@ -311,7 +309,6 @@ void print_sdcard_info() sd_storage.cid.month, sd_storage.cid.year); gfx_printf("%kCard-Specific Data V%d.0:%k\n", 0xFF00DDFF, sd_storage.csd.structure + 1, 0xFFCCCCCC); - capacity = sd_storage.csd.capacity >> (20 - sd_storage.csd.read_blkbits); gfx_printf( " Cmd Classes: %02X\n" " Capacity: %d MiB\n" @@ -322,7 +319,7 @@ void print_sdcard_info() " Video Class: V%d\n" " App perf class: A%d\n" " Write Protect: %d\n\n", - sd_storage.csd.cmdclass, capacity, + sd_storage.csd.cmdclass, sd_storage.sec_cnt >> 11, sd_storage.ssr.bus_width, sd_storage.csd.busspeed, sd_storage.csd.busspeed * 2, sd_storage.ssr.speed_class, sd_storage.ssr.uhs_grade, sd_storage.ssr.video_class, sd_storage.ssr.app_class, sd_storage.csd.write_protect); diff --git a/bootloader/gfx/gfx.c b/bootloader/gfx/gfx.c index 3560b9f..5fa58c0 100644 --- a/bootloader/gfx/gfx.c +++ b/bootloader/gfx/gfx.c @@ -257,7 +257,7 @@ void gfx_putc(char c) } } -void gfx_puts(const char *s) +void gfx_puts(char *s) { if (!s || gfx_con.mute) return; diff --git a/bootloader/gfx/gfx.h b/bootloader/gfx/gfx.h index 71e5fb0..252d5ff 100644 --- a/bootloader/gfx/gfx.h +++ b/bootloader/gfx/gfx.h @@ -35,7 +35,7 @@ void gfx_con_setcol(u32 fgcol, int fillbg, u32 bgcol); void gfx_con_getpos(u32 *x, u32 *y); void gfx_con_setpos(u32 x, u32 y); void gfx_putc(char c); -void gfx_puts(const char *s); +void gfx_puts(char *s); void gfx_printf(const char *fmt, ...); void gfx_hexdump(u32 base, const u8 *buf, u32 len); diff --git a/bootloader/hos/pkg2.c b/bootloader/hos/pkg2.c index c2bb9c7..02ada87 100644 --- a/bootloader/hos/pkg2.c +++ b/bootloader/hos/pkg2.c @@ -811,6 +811,7 @@ int pkg2_decompress_kip(pkg2_kip1_info_t* ki, u32 sectsToDecomp) gfx_printf("Decomping %s KIP1 sect %d of size %d...\n", (const char*)hdr.name, sectIdx, compSize); if (blz_uncompress_srcdest(srcDataPtr, compSize, dstDataPtr, outputSize) == 0) { + gfx_con.mute = false; gfx_printf("%kERROR decomping sect %d of %s KIP!%k\n", 0xFFFF0000, sectIdx, (char*)hdr.name, 0xFFCCCCCC); free(newKip); @@ -1075,6 +1076,7 @@ const char* pkg2_patch_kips(link_t *info, char* patchNames) if (!currPatch->length) { + gfx_con.mute = false; gfx_printf("%kPatch is empty!%k\n", 0xFFFF0000, 0xFFCCCCCC); return currPatchset->name; // MUST stop here as it's not probably intended. } @@ -1084,6 +1086,7 @@ const char* pkg2_patch_kips(link_t *info, char* patchNames) if ((memcmp(&kipSectData[currOffset], currPatch->srcData, currPatch->length) != 0) && (memcmp(&kipSectData[currOffset], currPatch->dstData, currPatch->length) != 0)) { + gfx_con.mute = false; gfx_printf("%kPatch data mismatch at 0x%x!%k\n", 0xFFFF0000, currOffset, 0xFFCCCCCC); return currPatchset->name; // MUST stop here as kip is likely corrupt. } diff --git a/bootloader/hos/secmon_exo.c b/bootloader/hos/secmon_exo.c index 7419746..0baa851 100644 --- a/bootloader/hos/secmon_exo.c +++ b/bootloader/hos/secmon_exo.c @@ -271,21 +271,18 @@ void secmon_exo_check_panic() WPRINTFARGS("Title ID: %08X%08X", (u32)((u64)rpt->title_id >> 32), (u32)rpt->title_id); WPRINTFARGS("Error Desc: %s (0x%x)\n", get_error_desc(rpt->error_desc), rpt->error_desc); - if (sd_mount()) - { - // Save context to the SD card. - char filepath[0x40]; - f_mkdir("atmosphere/fatal_errors"); - strcpy(filepath, "/atmosphere/fatal_errors/report_"); - itoa((u32)((u64)rpt->report_identifier >> 32), filepath + strlen(filepath), 16); - itoa((u32)(rpt->report_identifier), filepath + strlen(filepath), 16); - strcat(filepath, ".bin"); + // Save context to the SD card. + char filepath[0x40]; + f_mkdir("atmosphere/fatal_errors"); + strcpy(filepath, "/atmosphere/fatal_errors/report_"); + itoa((u32)((u64)rpt->report_identifier >> 32), filepath + strlen(filepath), 16); + itoa((u32)(rpt->report_identifier), filepath + strlen(filepath), 16); + strcat(filepath, ".bin"); - sd_save_to_file((void *)rpt, sizeof(atm_fatal_error_ctx), filepath); + sd_save_to_file((void *)rpt, sizeof(atm_fatal_error_ctx), filepath); - gfx_con.fntsz = 8; - WPRINTFARGS("Report saved to %s\n", filepath); - } + gfx_con.fntsz = 8; + WPRINTFARGS("Report saved to %s\n", filepath); // Change magic to invalid, to prevent double-display of error/bootlooping. rpt->magic = 0x0; diff --git a/bootloader/main.c b/bootloader/main.c index 2bc4cb2..2dee579 100644 --- a/bootloader/main.c +++ b/bootloader/main.c @@ -1305,10 +1305,10 @@ void ipl_main() // Do initial HW configuration. This is compatible with consecutive reruns without a reset. config_hw(); - //Pivot the stack so we have enough space. + // Pivot the stack so we have enough space. pivot_stack(IPL_STACK_TOP); - //Tegra/Horizon configuration goes to 0x80000000+, package2 goes to 0xA9800000, we place our heap in between. + // Tegra/Horizon configuration goes to 0x80000000+, package2 goes to 0xA9800000, we place our heap in between. heap_init(IPL_HEAP_START); #ifdef DEBUG_UART_PORT diff --git a/bootloader/mem/sdram.c b/bootloader/mem/sdram.c index a9a26d3..1b33708 100644 --- a/bootloader/mem/sdram.c +++ b/bootloader/mem/sdram.c @@ -696,7 +696,6 @@ sdram_params_t *sdram_get_params_patched() void sdram_init() { - //TODO: sdram_id should be in [0,4]. const sdram_params_t *params = (const sdram_params_t *)sdram_get_params(); // Set DRAM voltage. diff --git a/bootloader/power/max17050.h b/bootloader/power/max17050.h index e4c8acf..6104e5c 100644 --- a/bootloader/power/max17050.h +++ b/bootloader/power/max17050.h @@ -96,14 +96,17 @@ enum MAX17050_reg { MAX17050_K_empty0 = 0x3B, MAX17050_TaskPeriod = 0x3C, MAX17050_FSTAT = 0x3D, - + MAX17050_TIMER = 0x3E, MAX17050_SHDNTIMER = 0x3F, + MAX17050_QRTbl30 = 0x42, + MAX17050_dQacc = 0x45, MAX17050_dPacc = 0x46, MAX17050_VFSOC0 = 0x48, + Max17050_QH0 = 0x4C, MAX17050_QH = 0x4D, MAX17050_QL = 0x4E, @@ -111,6 +114,8 @@ enum MAX17050_reg { MAX17050_MaxVolt = 0x51, // Custom ID. Not to be sent to i2c. MAX17050_VFSOC0Enable = 0x60, + MAX17050_MODELEnable1 = 0x62, + MAX17050_MODELEnable2 = 0x63, MAX17050_MODELChrTbl = 0x80, diff --git a/bootloader/power/max7762x.c b/bootloader/power/max7762x.c index 0e7a6b5..6dfd6c6 100644 --- a/bootloader/power/max7762x.c +++ b/bootloader/power/max7762x.c @@ -137,6 +137,7 @@ int max77620_regulator_enable(u32 id, int enable) return 1; } +// LDO only. int max77620_regulator_set_volt_and_flags(u32 id, u32 mv, u8 flags) { if (id > REGULATOR_MAX) diff --git a/bootloader/power/max7762x.h b/bootloader/power/max7762x.h index 3a0afe3..8b0feb9 100644 --- a/bootloader/power/max7762x.h +++ b/bootloader/power/max7762x.h @@ -33,7 +33,7 @@ * ldo2 | SDMMC1 | 50000 | 800000 | 1800000 | 3300000 | * ldo3 | GC ASIC | 50000 | 800000 | 3100000 | 3100000 | 3.1V (pcv) * ldo4 | RTC | 12500 | 800000 | 850000 | 850000 | -* ldo5 | GC ASIC | 50000 | 800000 | 1800000 | 1800000 | 1.8V (pcv) +* ldo5 | GC Card | 50000 | 800000 | 1800000 | 1800000 | 1.8V (pcv) * ldo6 | Touch, ALS | 50000 | 800000 | 2900000 | 2900000 | 2.9V * ldo7 | XUSB | 50000 | 800000 | 1050000 | 1050000 | * ldo8 | XUSB, DC | 50000 | 800000 | 1050000 | 1050000 | diff --git a/bootloader/soc/clock.c b/bootloader/soc/clock.c index a3e1782..ebbe572 100644 --- a/bootloader/soc/clock.c +++ b/bootloader/soc/clock.c @@ -19,6 +19,17 @@ #include "../utils/util.h" #include "../storage/sdmmc.h" +/* + * CLOCK Peripherals: + * L 0 - 31 + * H 32 - 63 + * U 64 - 95 + * V 96 - 127 + * W 128 - 159 + * X 160 - 191 + * Y 192 - 223 + */ + /* clock_t: reset, enable, source, index, clk_src, clk_div */ static const clock_t _clock_uart[] = { @@ -29,7 +40,7 @@ static const clock_t _clock_uart[] = { /* UART E */ { CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_RST_CONTROLLER_CLK_SOURCE_UARTAPE, 20, 0, 2 } }; -//I2C default parameters - TLOW: 4, THIGH: 2, DEBOUNCE: 0 FM_DIV: 26. +//I2C default parameters - TLOW: 4, THIGH: 2, DEBOUNCE: 0, FM_DIV: 26. static const clock_t _clock_i2c[] = { /* I2C1 */ { CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_I2C1, 12, 0, 19 }, //20.4MHz -> 100KHz /* I2C2 */ { CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_RST_CONTROLLER_CLK_SOURCE_I2C2, 22, 0, 4 }, //81.6MHz -> 400KHz @@ -247,7 +258,7 @@ void clock_enable_pllc(u32 divn) usleep(10); // Set PLLC4 dividers. - CLOCK(CLK_RST_CONTROLLER_PLLC_BASE) = 4 | (divn << 10); // DIVM: 4, DIVP: 1. + CLOCK(CLK_RST_CONTROLLER_PLLC_BASE) = (divn << 10) | 4; // DIVM: 4, DIVP: 1. // Enable PLLC4 and wait for Phase and Frequency lock. CLOCK(CLK_RST_CONTROLLER_PLLC_BASE) |= PLLCX_BASE_ENABLE; @@ -259,7 +270,7 @@ void clock_enable_pllc(u32 divn) // Enable PLLC_OUT1 and bring it out of reset. CLOCK(CLK_RST_CONTROLLER_PLLC_OUT) |= (PLLC_OUT1_CLKEN | PLLC_OUT1_RSTN_CLR); - msleep(1); // Wait a bit for clock source change. + msleep(1); // Wait a bit for PLL to stabilize. } void clock_disable_pllc() diff --git a/bootloader/soc/hw_init.c b/bootloader/soc/hw_init.c index 1394f53..809588b 100644 --- a/bootloader/soc/hw_init.c +++ b/bootloader/soc/hw_init.c @@ -80,8 +80,8 @@ void _config_gpios() PINMUX_AUX(PINMUX_AUX_UART3_TX) = 0; // Set Joy-Con IsAttached direction. - PINMUX_AUX(PINMUX_AUX_GPIO_PE6) = PINMUX_INPUT_ENABLE; - PINMUX_AUX(PINMUX_AUX_GPIO_PH6) = PINMUX_INPUT_ENABLE; + PINMUX_AUX(PINMUX_AUX_GPIO_PE6) = PINMUX_INPUT_ENABLE | PINMUX_TRISTATE; + PINMUX_AUX(PINMUX_AUX_GPIO_PH6) = PINMUX_INPUT_ENABLE | PINMUX_TRISTATE; // Set pin mode for Joy-Con IsAttached and UARTB/C TX pins. #if !defined (DEBUG_UART_PORT) || DEBUG_UART_PORT != UART_B @@ -111,7 +111,7 @@ void _config_gpios() gpio_output_enable(GPIO_PORT_X, GPIO_PIN_7, GPIO_OUTPUT_DISABLE); // Configure HOME as inputs. - // PINMUX_AUX(PINMUX_AUX_BUTTON_HOME) = PINMUX_PULL_UP | PINMUX_INPUT_ENABLE; + // PINMUX_AUX(PINMUX_AUX_BUTTON_HOME) = PINMUX_INPUT_ENABLE | PINMUX_TRISTATE; // gpio_config(GPIO_PORT_Y, GPIO_PIN_1, GPIO_MODE_GPIO); } @@ -162,7 +162,7 @@ void _mbist_workaround() // Enable specific clocks and disable all others. CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_H) = 0xC0; // Enable clock PMC, FUSE. CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_L) = 0x80000130; // Enable clock RTC, TMR, GPIO, BPMP_CACHE. - //CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_L) = 0x80400130; // Keep USB data ON. + //CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_L) = 0x80400130; // Keep USBD ON. CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_U) = 0x1F00200; // Enable clock CSITE, IRAMA, IRAMB, IRAMC, IRAMD, BPMP_CACHE_RAM. CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_V) = 0x80400808; // Enable clock MSELECT, APB2APE, SPDIF_DOUBLER, SE. CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_W) = 0x402000FC; // Enable clock PCIERX0, PCIERX1, PCIERX2, PCIERX3, PCIERX4, PCIERX5, ENTROPY, MC1. @@ -223,6 +223,7 @@ void _config_regulators() i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_ONOFFCNFG1, (1 << 6) | (3 << MAX77620_ONOFFCNFG1_MRT_SHIFT)); // PWR delay for forced shutdown off. + // Configure all Flexible Power Sequencers. i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_FPS_CFG0, (7 << MAX77620_FPS_TIME_PERIOD_SHIFT)); i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_FPS_CFG1, @@ -238,10 +239,10 @@ void _config_regulators() i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_FPS_GPIO3, (4 << MAX77620_FPS_TIME_PERIOD_SHIFT) | (2 << MAX77620_FPS_PD_PERIOD_SHIFT)); // 3.x+ - // Set vdd_core voltage to 1.125V + // Set vdd_core voltage to 1.125V. max77620_regulator_set_voltage(REGULATOR_SD0, 1125000); - // Fix CPU/GPU after a Linux warmboot. + // Fix CPU/GPU after a L4T warmboot. i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_GPIO5, 2); i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_GPIO6, 2); diff --git a/nyx/nyx_gui/frontend/fe_emmc_tools.c b/nyx/nyx_gui/frontend/fe_emmc_tools.c index f237a28..d8fd361 100644 --- a/nyx/nyx_gui/frontend/fe_emmc_tools.c +++ b/nyx/nyx_gui/frontend/fe_emmc_tools.c @@ -1205,7 +1205,7 @@ static int _restore_emmc_part(emmc_tool_gui_t *gui, char *sd_path, int active_pa } pct = (u64)((u64)(lba_curr - part->lba_start) * 100u) / (u64)(part->lba_end - part->lba_start); if (pct != prevPct) - {; + { lv_bar_set_value(gui->bar, pct); s_printf(gui->txt_buf, " "SYMBOL_DOT" %d%%", pct); lv_label_set_array_text(gui->label_pct, gui->txt_buf, 32); diff --git a/nyx/nyx_gui/frontend/gui.c b/nyx/nyx_gui/frontend/gui.c index edf3204..a32498c 100644 --- a/nyx/nyx_gui/frontend/gui.c +++ b/nyx/nyx_gui/frontend/gui.c @@ -830,7 +830,7 @@ static void _update_status_bar(void *params) bool voltage_empty = batt_volt < 3200; s_printf(label + strlen(label), " mA# (%s%d mV%s)", - voltage_empty ? "#FF8000" : "", batt_volt, voltage_empty ? "#" : ""); + voltage_empty ? "#FF8000 " : "", batt_volt, voltage_empty ? " "SYMBOL_WARNING"#" : ""); lv_label_set_array_text(status_bar.battery_more, label, 64); lv_obj_realign(status_bar.battery_more); diff --git a/nyx/nyx_gui/frontend/gui_emummc_tools.c b/nyx/nyx_gui/frontend/gui_emummc_tools.c index 2a487aa..f91e30c 100644 --- a/nyx/nyx_gui/frontend/gui_emummc_tools.c +++ b/nyx/nyx_gui/frontend/gui_emummc_tools.c @@ -857,7 +857,6 @@ out0:; lv_line_set_style(line_sep, lv_theme_get_current()->line.decor); lv_obj_align(line_sep, label_txt, LV_ALIGN_OUT_BOTTOM_LEFT, -(LV_DPI / 4), LV_DPI / 8); - lv_obj_t *btn = NULL; lv_btn_ext_t *ext; lv_obj_t *btn_label = NULL; diff --git a/nyx/nyx_gui/frontend/gui_info.c b/nyx/nyx_gui/frontend/gui_info.c index 7796619..3e84010 100644 --- a/nyx/nyx_gui/frontend/gui_info.c +++ b/nyx/nyx_gui/frontend/gui_info.c @@ -758,10 +758,11 @@ static lv_res_t _create_window_sdcard_info_status(lv_obj_t *btn) lv_obj_t * lb_val2 = lv_label_create(val2, lb_desc); - u32 capacity = sd_storage.csd.capacity >> (20 - sd_storage.csd.read_blkbits); - s_printf(txt_buf, "#00DDFF v%d.0#\n%02X\n%d MiB\n%d\n%d MB/s (%d MHz)\n%d\nU%d\nV%d\nA%d\n%d", - sd_storage.csd.structure + 1, sd_storage.csd.cmdclass, capacity, - sd_storage.ssr.bus_width, sd_storage.csd.busspeed, sd_storage.csd.busspeed * 2, + s_printf(txt_buf, + "#00DDFF v%d.0#\n%02X\n%d MiB\n%d\n%d MB/s (%d MHz)\n%d\nU%d\nV%d\nA%d\n%d", + sd_storage.csd.structure + 1, sd_storage.csd.cmdclass, sd_storage.sec_cnt >> 11, + sd_storage.ssr.bus_width, sd_storage.csd.busspeed, + (sd_storage.csd.busspeed > 10) ? (sd_storage.csd.busspeed * 2) : 50, sd_storage.ssr.speed_class, sd_storage.ssr.uhs_grade, sd_storage.ssr.video_class, sd_storage.ssr.app_class, sd_storage.csd.write_protect); @@ -888,7 +889,7 @@ static lv_res_t _create_window_battery_status(lv_obj_t *btn) max17050_get_property(MAX17050_VCELL, &value); bool voltage_empty = value < 3200; s_printf(txt_buf + strlen(txt_buf), "%s%d mV%s\n", - voltage_empty ? "#FF8000" : "", value, voltage_empty ? " (Empty!)#" : ""); + voltage_empty ? "#FF8000 " : "", value, voltage_empty ? " "SYMBOL_WARNING"#" : ""); max17050_get_property(MAX17050_OCVInternal, &value); s_printf(txt_buf + strlen(txt_buf), "%d mV\n", value); diff --git a/nyx/nyx_gui/frontend/gui_tools.c b/nyx/nyx_gui/frontend/gui_tools.c index 76b2b2f..9f145e9 100644 --- a/nyx/nyx_gui/frontend/gui_tools.c +++ b/nyx/nyx_gui/frontend/gui_tools.c @@ -394,7 +394,7 @@ static lv_res_t _create_window_dump_pk12_tool(lv_obj_t *btn) if (!h_cfg.se_keygen_done) { - tsec_ctxt.fw = (void *)pkg1 + pkg1_id->tsec_off; + tsec_ctxt.fw = (void *)(pkg1 + pkg1_id->tsec_off); tsec_ctxt.pkg1 = (void *)pkg1; tsec_ctxt.pkg11_off = pkg1_id->pkg11_off; tsec_ctxt.secmon_base = pkg1_id->secmon_base; diff --git a/nyx/nyx_gui/libs/lv_conf.h b/nyx/nyx_gui/libs/lv_conf.h index cc52047..70ce4ff 100644 --- a/nyx/nyx_gui/libs/lv_conf.h +++ b/nyx/nyx_gui/libs/lv_conf.h @@ -365,12 +365,5 @@ /*Switch (dependencies: lv_slider)*/ #define USE_LV_SW 1 -/************************* - * Non-user section - *************************/ -#ifdef _MSC_VER /* Disable warnings for Visual Studio*/ -#define _CRT_SECURE_NO_WARNINGS -#endif - #endif /*LV_CONF_H*/ diff --git a/nyx/nyx_gui/mem/sdram.c b/nyx/nyx_gui/mem/sdram.c index 9ca157d..f0cd286 100644 --- a/nyx/nyx_gui/mem/sdram.c +++ b/nyx/nyx_gui/mem/sdram.c @@ -690,7 +690,6 @@ sdram_params_t *sdram_get_params_patched() void sdram_init() { - //TODO: sdram_id should be in [0,4]. const sdram_params_t *params = (const sdram_params_t *)sdram_get_params(); // Set DRAM voltage. diff --git a/nyx/nyx_gui/power/max17050.h b/nyx/nyx_gui/power/max17050.h index e4c8acf..6104e5c 100644 --- a/nyx/nyx_gui/power/max17050.h +++ b/nyx/nyx_gui/power/max17050.h @@ -96,14 +96,17 @@ enum MAX17050_reg { MAX17050_K_empty0 = 0x3B, MAX17050_TaskPeriod = 0x3C, MAX17050_FSTAT = 0x3D, - + MAX17050_TIMER = 0x3E, MAX17050_SHDNTIMER = 0x3F, + MAX17050_QRTbl30 = 0x42, + MAX17050_dQacc = 0x45, MAX17050_dPacc = 0x46, MAX17050_VFSOC0 = 0x48, + Max17050_QH0 = 0x4C, MAX17050_QH = 0x4D, MAX17050_QL = 0x4E, @@ -111,6 +114,8 @@ enum MAX17050_reg { MAX17050_MaxVolt = 0x51, // Custom ID. Not to be sent to i2c. MAX17050_VFSOC0Enable = 0x60, + MAX17050_MODELEnable1 = 0x62, + MAX17050_MODELEnable2 = 0x63, MAX17050_MODELChrTbl = 0x80, diff --git a/nyx/nyx_gui/soc/clock.c b/nyx/nyx_gui/soc/clock.c index a3e1782..ebbe572 100644 --- a/nyx/nyx_gui/soc/clock.c +++ b/nyx/nyx_gui/soc/clock.c @@ -19,6 +19,17 @@ #include "../utils/util.h" #include "../storage/sdmmc.h" +/* + * CLOCK Peripherals: + * L 0 - 31 + * H 32 - 63 + * U 64 - 95 + * V 96 - 127 + * W 128 - 159 + * X 160 - 191 + * Y 192 - 223 + */ + /* clock_t: reset, enable, source, index, clk_src, clk_div */ static const clock_t _clock_uart[] = { @@ -29,7 +40,7 @@ static const clock_t _clock_uart[] = { /* UART E */ { CLK_RST_CONTROLLER_RST_DEVICES_Y, CLK_RST_CONTROLLER_CLK_OUT_ENB_Y, CLK_RST_CONTROLLER_CLK_SOURCE_UARTAPE, 20, 0, 2 } }; -//I2C default parameters - TLOW: 4, THIGH: 2, DEBOUNCE: 0 FM_DIV: 26. +//I2C default parameters - TLOW: 4, THIGH: 2, DEBOUNCE: 0, FM_DIV: 26. static const clock_t _clock_i2c[] = { /* I2C1 */ { CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_I2C1, 12, 0, 19 }, //20.4MHz -> 100KHz /* I2C2 */ { CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_RST_CONTROLLER_CLK_SOURCE_I2C2, 22, 0, 4 }, //81.6MHz -> 400KHz @@ -247,7 +258,7 @@ void clock_enable_pllc(u32 divn) usleep(10); // Set PLLC4 dividers. - CLOCK(CLK_RST_CONTROLLER_PLLC_BASE) = 4 | (divn << 10); // DIVM: 4, DIVP: 1. + CLOCK(CLK_RST_CONTROLLER_PLLC_BASE) = (divn << 10) | 4; // DIVM: 4, DIVP: 1. // Enable PLLC4 and wait for Phase and Frequency lock. CLOCK(CLK_RST_CONTROLLER_PLLC_BASE) |= PLLCX_BASE_ENABLE; @@ -259,7 +270,7 @@ void clock_enable_pllc(u32 divn) // Enable PLLC_OUT1 and bring it out of reset. CLOCK(CLK_RST_CONTROLLER_PLLC_OUT) |= (PLLC_OUT1_CLKEN | PLLC_OUT1_RSTN_CLR); - msleep(1); // Wait a bit for clock source change. + msleep(1); // Wait a bit for PLL to stabilize. } void clock_disable_pllc() diff --git a/nyx/nyx_gui/utils/sprintf.c b/nyx/nyx_gui/utils/sprintf.c index ba42a66..1b969d2 100644 --- a/nyx/nyx_gui/utils/sprintf.c +++ b/nyx/nyx_gui/utils/sprintf.c @@ -28,7 +28,7 @@ static void _s_putc(char c) *sout_buf += 1; } -static void _s_puts(const char *s) +static void _s_puts(char *s) { for (; *s; s++) _s_putc(*s);