mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 11:21:23 +00:00
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
This commit is contained in:
parent
c474e35732
commit
03a8a11933
22 changed files with 77 additions and 55 deletions
|
@ -293,8 +293,6 @@ void print_sdcard_info()
|
||||||
|
|
||||||
if (sd_mount())
|
if (sd_mount())
|
||||||
{
|
{
|
||||||
u32 capacity;
|
|
||||||
|
|
||||||
gfx_printf("%kCard IDentification:%k\n", 0xFF00DDFF, 0xFFCCCCCC);
|
gfx_printf("%kCard IDentification:%k\n", 0xFF00DDFF, 0xFFCCCCCC);
|
||||||
gfx_printf(
|
gfx_printf(
|
||||||
" Vendor ID: %02x\n"
|
" Vendor ID: %02x\n"
|
||||||
|
@ -311,7 +309,6 @@ void print_sdcard_info()
|
||||||
sd_storage.cid.month, sd_storage.cid.year);
|
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);
|
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(
|
gfx_printf(
|
||||||
" Cmd Classes: %02X\n"
|
" Cmd Classes: %02X\n"
|
||||||
" Capacity: %d MiB\n"
|
" Capacity: %d MiB\n"
|
||||||
|
@ -322,7 +319,7 @@ void print_sdcard_info()
|
||||||
" Video Class: V%d\n"
|
" Video Class: V%d\n"
|
||||||
" App perf class: A%d\n"
|
" App perf class: A%d\n"
|
||||||
" Write Protect: %d\n\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.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.speed_class, sd_storage.ssr.uhs_grade, sd_storage.ssr.video_class,
|
||||||
sd_storage.ssr.app_class, sd_storage.csd.write_protect);
|
sd_storage.ssr.app_class, sd_storage.csd.write_protect);
|
||||||
|
|
|
@ -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)
|
if (!s || gfx_con.mute)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -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_getpos(u32 *x, u32 *y);
|
||||||
void gfx_con_setpos(u32 x, u32 y);
|
void gfx_con_setpos(u32 x, u32 y);
|
||||||
void gfx_putc(char c);
|
void gfx_putc(char c);
|
||||||
void gfx_puts(const char *s);
|
void gfx_puts(char *s);
|
||||||
void gfx_printf(const char *fmt, ...);
|
void gfx_printf(const char *fmt, ...);
|
||||||
void gfx_hexdump(u32 base, const u8 *buf, u32 len);
|
void gfx_hexdump(u32 base, const u8 *buf, u32 len);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
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)
|
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);
|
gfx_printf("%kERROR decomping sect %d of %s KIP!%k\n", 0xFFFF0000, sectIdx, (char*)hdr.name, 0xFFCCCCCC);
|
||||||
free(newKip);
|
free(newKip);
|
||||||
|
|
||||||
|
@ -1075,6 +1076,7 @@ const char* pkg2_patch_kips(link_t *info, char* patchNames)
|
||||||
|
|
||||||
if (!currPatch->length)
|
if (!currPatch->length)
|
||||||
{
|
{
|
||||||
|
gfx_con.mute = false;
|
||||||
gfx_printf("%kPatch is empty!%k\n", 0xFFFF0000, 0xFFCCCCCC);
|
gfx_printf("%kPatch is empty!%k\n", 0xFFFF0000, 0xFFCCCCCC);
|
||||||
return currPatchset->name; // MUST stop here as it's not probably intended.
|
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) &&
|
if ((memcmp(&kipSectData[currOffset], currPatch->srcData, currPatch->length) != 0) &&
|
||||||
(memcmp(&kipSectData[currOffset], currPatch->dstData, 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);
|
gfx_printf("%kPatch data mismatch at 0x%x!%k\n", 0xFFFF0000, currOffset, 0xFFCCCCCC);
|
||||||
return currPatchset->name; // MUST stop here as kip is likely corrupt.
|
return currPatchset->name; // MUST stop here as kip is likely corrupt.
|
||||||
}
|
}
|
||||||
|
|
|
@ -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("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);
|
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];
|
||||||
// Save context to the SD card.
|
f_mkdir("atmosphere/fatal_errors");
|
||||||
char filepath[0x40];
|
strcpy(filepath, "/atmosphere/fatal_errors/report_");
|
||||||
f_mkdir("atmosphere/fatal_errors");
|
itoa((u32)((u64)rpt->report_identifier >> 32), filepath + strlen(filepath), 16);
|
||||||
strcpy(filepath, "/atmosphere/fatal_errors/report_");
|
itoa((u32)(rpt->report_identifier), filepath + strlen(filepath), 16);
|
||||||
itoa((u32)((u64)rpt->report_identifier >> 32), filepath + strlen(filepath), 16);
|
strcat(filepath, ".bin");
|
||||||
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;
|
gfx_con.fntsz = 8;
|
||||||
WPRINTFARGS("Report saved to %s\n", filepath);
|
WPRINTFARGS("Report saved to %s\n", filepath);
|
||||||
}
|
|
||||||
|
|
||||||
// Change magic to invalid, to prevent double-display of error/bootlooping.
|
// Change magic to invalid, to prevent double-display of error/bootlooping.
|
||||||
rpt->magic = 0x0;
|
rpt->magic = 0x0;
|
||||||
|
|
|
@ -1305,10 +1305,10 @@ void ipl_main()
|
||||||
// Do initial HW configuration. This is compatible with consecutive reruns without a reset.
|
// Do initial HW configuration. This is compatible with consecutive reruns without a reset.
|
||||||
config_hw();
|
config_hw();
|
||||||
|
|
||||||
//Pivot the stack so we have enough space.
|
// Pivot the stack so we have enough space.
|
||||||
pivot_stack(IPL_STACK_TOP);
|
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);
|
heap_init(IPL_HEAP_START);
|
||||||
|
|
||||||
#ifdef DEBUG_UART_PORT
|
#ifdef DEBUG_UART_PORT
|
||||||
|
|
|
@ -696,7 +696,6 @@ sdram_params_t *sdram_get_params_patched()
|
||||||
|
|
||||||
void sdram_init()
|
void sdram_init()
|
||||||
{
|
{
|
||||||
//TODO: sdram_id should be in [0,4].
|
|
||||||
const sdram_params_t *params = (const sdram_params_t *)sdram_get_params();
|
const sdram_params_t *params = (const sdram_params_t *)sdram_get_params();
|
||||||
|
|
||||||
// Set DRAM voltage.
|
// Set DRAM voltage.
|
||||||
|
|
|
@ -96,14 +96,17 @@ enum MAX17050_reg {
|
||||||
MAX17050_K_empty0 = 0x3B,
|
MAX17050_K_empty0 = 0x3B,
|
||||||
MAX17050_TaskPeriod = 0x3C,
|
MAX17050_TaskPeriod = 0x3C,
|
||||||
MAX17050_FSTAT = 0x3D,
|
MAX17050_FSTAT = 0x3D,
|
||||||
|
MAX17050_TIMER = 0x3E,
|
||||||
MAX17050_SHDNTIMER = 0x3F,
|
MAX17050_SHDNTIMER = 0x3F,
|
||||||
|
|
||||||
MAX17050_QRTbl30 = 0x42,
|
MAX17050_QRTbl30 = 0x42,
|
||||||
|
|
||||||
MAX17050_dQacc = 0x45,
|
MAX17050_dQacc = 0x45,
|
||||||
MAX17050_dPacc = 0x46,
|
MAX17050_dPacc = 0x46,
|
||||||
|
|
||||||
MAX17050_VFSOC0 = 0x48,
|
MAX17050_VFSOC0 = 0x48,
|
||||||
|
|
||||||
|
Max17050_QH0 = 0x4C,
|
||||||
MAX17050_QH = 0x4D,
|
MAX17050_QH = 0x4D,
|
||||||
MAX17050_QL = 0x4E,
|
MAX17050_QL = 0x4E,
|
||||||
|
|
||||||
|
@ -111,6 +114,8 @@ enum MAX17050_reg {
|
||||||
MAX17050_MaxVolt = 0x51, // Custom ID. Not to be sent to i2c.
|
MAX17050_MaxVolt = 0x51, // Custom ID. Not to be sent to i2c.
|
||||||
|
|
||||||
MAX17050_VFSOC0Enable = 0x60,
|
MAX17050_VFSOC0Enable = 0x60,
|
||||||
|
MAX17050_MODELEnable1 = 0x62,
|
||||||
|
MAX17050_MODELEnable2 = 0x63,
|
||||||
|
|
||||||
MAX17050_MODELChrTbl = 0x80,
|
MAX17050_MODELChrTbl = 0x80,
|
||||||
|
|
||||||
|
|
|
@ -137,6 +137,7 @@ int max77620_regulator_enable(u32 id, int enable)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LDO only.
|
||||||
int max77620_regulator_set_volt_and_flags(u32 id, u32 mv, u8 flags)
|
int max77620_regulator_set_volt_and_flags(u32 id, u32 mv, u8 flags)
|
||||||
{
|
{
|
||||||
if (id > REGULATOR_MAX)
|
if (id > REGULATOR_MAX)
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
* ldo2 | SDMMC1 | 50000 | 800000 | 1800000 | 3300000 |
|
* ldo2 | SDMMC1 | 50000 | 800000 | 1800000 | 3300000 |
|
||||||
* ldo3 | GC ASIC | 50000 | 800000 | 3100000 | 3100000 | 3.1V (pcv)
|
* ldo3 | GC ASIC | 50000 | 800000 | 3100000 | 3100000 | 3.1V (pcv)
|
||||||
* ldo4 | RTC | 12500 | 800000 | 850000 | 850000 |
|
* 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
|
* ldo6 | Touch, ALS | 50000 | 800000 | 2900000 | 2900000 | 2.9V
|
||||||
* ldo7 | XUSB | 50000 | 800000 | 1050000 | 1050000 |
|
* ldo7 | XUSB | 50000 | 800000 | 1050000 | 1050000 |
|
||||||
* ldo8 | XUSB, DC | 50000 | 800000 | 1050000 | 1050000 |
|
* ldo8 | XUSB, DC | 50000 | 800000 | 1050000 | 1050000 |
|
||||||
|
|
|
@ -19,6 +19,17 @@
|
||||||
#include "../utils/util.h"
|
#include "../utils/util.h"
|
||||||
#include "../storage/sdmmc.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 */
|
/* clock_t: reset, enable, source, index, clk_src, clk_div */
|
||||||
|
|
||||||
static const clock_t _clock_uart[] = {
|
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 }
|
/* 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[] = {
|
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
|
/* 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
|
/* 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);
|
usleep(10);
|
||||||
|
|
||||||
// Set PLLC4 dividers.
|
// 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.
|
// Enable PLLC4 and wait for Phase and Frequency lock.
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLC_BASE) |= PLLCX_BASE_ENABLE;
|
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.
|
// Enable PLLC_OUT1 and bring it out of reset.
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLC_OUT) |= (PLLC_OUT1_CLKEN | PLLC_OUT1_RSTN_CLR);
|
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()
|
void clock_disable_pllc()
|
||||||
|
|
|
@ -80,8 +80,8 @@ void _config_gpios()
|
||||||
PINMUX_AUX(PINMUX_AUX_UART3_TX) = 0;
|
PINMUX_AUX(PINMUX_AUX_UART3_TX) = 0;
|
||||||
|
|
||||||
// Set Joy-Con IsAttached direction.
|
// Set Joy-Con IsAttached direction.
|
||||||
PINMUX_AUX(PINMUX_AUX_GPIO_PE6) = PINMUX_INPUT_ENABLE;
|
PINMUX_AUX(PINMUX_AUX_GPIO_PE6) = PINMUX_INPUT_ENABLE | PINMUX_TRISTATE;
|
||||||
PINMUX_AUX(PINMUX_AUX_GPIO_PH6) = PINMUX_INPUT_ENABLE;
|
PINMUX_AUX(PINMUX_AUX_GPIO_PH6) = PINMUX_INPUT_ENABLE | PINMUX_TRISTATE;
|
||||||
|
|
||||||
// Set pin mode for Joy-Con IsAttached and UARTB/C TX pins.
|
// Set pin mode for Joy-Con IsAttached and UARTB/C TX pins.
|
||||||
#if !defined (DEBUG_UART_PORT) || DEBUG_UART_PORT != UART_B
|
#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);
|
gpio_output_enable(GPIO_PORT_X, GPIO_PIN_7, GPIO_OUTPUT_DISABLE);
|
||||||
|
|
||||||
// Configure HOME as inputs.
|
// 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);
|
// 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.
|
// 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_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) = 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_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_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.
|
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,
|
i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_ONOFFCNFG1,
|
||||||
(1 << 6) | (3 << MAX77620_ONOFFCNFG1_MRT_SHIFT)); // PWR delay for forced shutdown off.
|
(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,
|
i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_FPS_CFG0,
|
||||||
(7 << MAX77620_FPS_TIME_PERIOD_SHIFT));
|
(7 << MAX77620_FPS_TIME_PERIOD_SHIFT));
|
||||||
i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_FPS_CFG1,
|
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,
|
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+
|
(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);
|
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_GPIO5, 2);
|
||||||
i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_GPIO6, 2);
|
i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_GPIO6, 2);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
pct = (u64)((u64)(lba_curr - part->lba_start) * 100u) / (u64)(part->lba_end - part->lba_start);
|
||||||
if (pct != prevPct)
|
if (pct != prevPct)
|
||||||
{;
|
{
|
||||||
lv_bar_set_value(gui->bar, pct);
|
lv_bar_set_value(gui->bar, pct);
|
||||||
s_printf(gui->txt_buf, " "SYMBOL_DOT" %d%%", pct);
|
s_printf(gui->txt_buf, " "SYMBOL_DOT" %d%%", pct);
|
||||||
lv_label_set_array_text(gui->label_pct, gui->txt_buf, 32);
|
lv_label_set_array_text(gui->label_pct, gui->txt_buf, 32);
|
||||||
|
|
|
@ -830,7 +830,7 @@ static void _update_status_bar(void *params)
|
||||||
|
|
||||||
bool voltage_empty = batt_volt < 3200;
|
bool voltage_empty = batt_volt < 3200;
|
||||||
s_printf(label + strlen(label), " mA# (%s%d mV%s)",
|
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_label_set_array_text(status_bar.battery_more, label, 64);
|
||||||
lv_obj_realign(status_bar.battery_more);
|
lv_obj_realign(status_bar.battery_more);
|
||||||
|
|
|
@ -857,7 +857,6 @@ out0:;
|
||||||
lv_line_set_style(line_sep, lv_theme_get_current()->line.decor);
|
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_align(line_sep, label_txt, LV_ALIGN_OUT_BOTTOM_LEFT, -(LV_DPI / 4), LV_DPI / 8);
|
||||||
|
|
||||||
|
|
||||||
lv_obj_t *btn = NULL;
|
lv_obj_t *btn = NULL;
|
||||||
lv_btn_ext_t *ext;
|
lv_btn_ext_t *ext;
|
||||||
lv_obj_t *btn_label = NULL;
|
lv_obj_t *btn_label = NULL;
|
||||||
|
|
|
@ -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);
|
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,
|
||||||
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",
|
"#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.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 * 2,
|
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.speed_class, sd_storage.ssr.uhs_grade, sd_storage.ssr.video_class,
|
||||||
sd_storage.ssr.app_class, sd_storage.csd.write_protect);
|
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);
|
max17050_get_property(MAX17050_VCELL, &value);
|
||||||
bool voltage_empty = value < 3200;
|
bool voltage_empty = value < 3200;
|
||||||
s_printf(txt_buf + strlen(txt_buf), "%s%d mV%s\n",
|
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);
|
max17050_get_property(MAX17050_OCVInternal, &value);
|
||||||
s_printf(txt_buf + strlen(txt_buf), "%d mV\n", value);
|
s_printf(txt_buf + strlen(txt_buf), "%d mV\n", value);
|
||||||
|
|
|
@ -394,7 +394,7 @@ static lv_res_t _create_window_dump_pk12_tool(lv_obj_t *btn)
|
||||||
|
|
||||||
if (!h_cfg.se_keygen_done)
|
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.pkg1 = (void *)pkg1;
|
||||||
tsec_ctxt.pkg11_off = pkg1_id->pkg11_off;
|
tsec_ctxt.pkg11_off = pkg1_id->pkg11_off;
|
||||||
tsec_ctxt.secmon_base = pkg1_id->secmon_base;
|
tsec_ctxt.secmon_base = pkg1_id->secmon_base;
|
||||||
|
|
|
@ -365,12 +365,5 @@
|
||||||
/*Switch (dependencies: lv_slider)*/
|
/*Switch (dependencies: lv_slider)*/
|
||||||
#define USE_LV_SW 1
|
#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*/
|
#endif /*LV_CONF_H*/
|
||||||
|
|
||||||
|
|
|
@ -690,7 +690,6 @@ sdram_params_t *sdram_get_params_patched()
|
||||||
|
|
||||||
void sdram_init()
|
void sdram_init()
|
||||||
{
|
{
|
||||||
//TODO: sdram_id should be in [0,4].
|
|
||||||
const sdram_params_t *params = (const sdram_params_t *)sdram_get_params();
|
const sdram_params_t *params = (const sdram_params_t *)sdram_get_params();
|
||||||
|
|
||||||
// Set DRAM voltage.
|
// Set DRAM voltage.
|
||||||
|
|
|
@ -96,14 +96,17 @@ enum MAX17050_reg {
|
||||||
MAX17050_K_empty0 = 0x3B,
|
MAX17050_K_empty0 = 0x3B,
|
||||||
MAX17050_TaskPeriod = 0x3C,
|
MAX17050_TaskPeriod = 0x3C,
|
||||||
MAX17050_FSTAT = 0x3D,
|
MAX17050_FSTAT = 0x3D,
|
||||||
|
MAX17050_TIMER = 0x3E,
|
||||||
MAX17050_SHDNTIMER = 0x3F,
|
MAX17050_SHDNTIMER = 0x3F,
|
||||||
|
|
||||||
MAX17050_QRTbl30 = 0x42,
|
MAX17050_QRTbl30 = 0x42,
|
||||||
|
|
||||||
MAX17050_dQacc = 0x45,
|
MAX17050_dQacc = 0x45,
|
||||||
MAX17050_dPacc = 0x46,
|
MAX17050_dPacc = 0x46,
|
||||||
|
|
||||||
MAX17050_VFSOC0 = 0x48,
|
MAX17050_VFSOC0 = 0x48,
|
||||||
|
|
||||||
|
Max17050_QH0 = 0x4C,
|
||||||
MAX17050_QH = 0x4D,
|
MAX17050_QH = 0x4D,
|
||||||
MAX17050_QL = 0x4E,
|
MAX17050_QL = 0x4E,
|
||||||
|
|
||||||
|
@ -111,6 +114,8 @@ enum MAX17050_reg {
|
||||||
MAX17050_MaxVolt = 0x51, // Custom ID. Not to be sent to i2c.
|
MAX17050_MaxVolt = 0x51, // Custom ID. Not to be sent to i2c.
|
||||||
|
|
||||||
MAX17050_VFSOC0Enable = 0x60,
|
MAX17050_VFSOC0Enable = 0x60,
|
||||||
|
MAX17050_MODELEnable1 = 0x62,
|
||||||
|
MAX17050_MODELEnable2 = 0x63,
|
||||||
|
|
||||||
MAX17050_MODELChrTbl = 0x80,
|
MAX17050_MODELChrTbl = 0x80,
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,17 @@
|
||||||
#include "../utils/util.h"
|
#include "../utils/util.h"
|
||||||
#include "../storage/sdmmc.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 */
|
/* clock_t: reset, enable, source, index, clk_src, clk_div */
|
||||||
|
|
||||||
static const clock_t _clock_uart[] = {
|
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 }
|
/* 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[] = {
|
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
|
/* 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
|
/* 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);
|
usleep(10);
|
||||||
|
|
||||||
// Set PLLC4 dividers.
|
// 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.
|
// Enable PLLC4 and wait for Phase and Frequency lock.
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLC_BASE) |= PLLCX_BASE_ENABLE;
|
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.
|
// Enable PLLC_OUT1 and bring it out of reset.
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLC_OUT) |= (PLLC_OUT1_CLKEN | PLLC_OUT1_RSTN_CLR);
|
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()
|
void clock_disable_pllc()
|
||||||
|
|
|
@ -28,7 +28,7 @@ static void _s_putc(char c)
|
||||||
*sout_buf += 1;
|
*sout_buf += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _s_puts(const char *s)
|
static void _s_puts(char *s)
|
||||||
{
|
{
|
||||||
for (; *s; s++)
|
for (; *s; s++)
|
||||||
_s_putc(*s);
|
_s_putc(*s);
|
||||||
|
|
Loading…
Reference in a new issue