diff --git a/ipl/arm64.h b/ipl/arm64.h index 5325df1..3fa0188 100755 --- a/ipl/arm64.h +++ b/ipl/arm64.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _ARM64_H_ #define _ARM64_H_ diff --git a/ipl/blz.c b/ipl/blz.c index c674b8c..a492b13 100644 --- a/ipl/blz.c +++ b/ipl/blz.c @@ -1,97 +1,98 @@ /* -* Copyright (c) 2018 rajkosto -* Copyright (c) 2018 SciresM -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 rajkosto + * Copyright (c) 2018 SciresM + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include #include + #include "blz.h" -const blz_footer* blz_get_footer(const unsigned char* compData, unsigned int compDataLen, blz_footer* outFooter) +const blz_footer *blz_get_footer(const unsigned char *compData, unsigned int compDataLen, blz_footer *outFooter) { if (compDataLen < sizeof(blz_footer)) return NULL; - const blz_footer* srcFooter = (const blz_footer*)&compData[compDataLen-sizeof(blz_footer)]; + const blz_footer *srcFooter = (const blz_footer*)&compData[compDataLen - sizeof(blz_footer)]; if (outFooter != NULL) - memcpy(outFooter, srcFooter, sizeof(blz_footer)); //must be a memcpy because no umaligned accesses on ARMv4 + memcpy(outFooter, srcFooter, sizeof(blz_footer)); // Must be a memcpy because no umaligned accesses on ARMv4. return srcFooter; } -//from https://github.com/SciresM/hactool/blob/master/kip.c which is exactly how kernel does it, thanks SciresM! -int blz_uncompress_inplace(unsigned char* dataBuf, unsigned int compSize, const blz_footer* footer) +// From https://github.com/SciresM/hactool/blob/master/kip.c which is exactly how kernel does it, thanks SciresM! +int blz_uncompress_inplace(unsigned char *dataBuf, unsigned int compSize, const blz_footer *footer) { - u32 addl_size = footer->addl_size; - u32 header_size = footer->header_size; - u32 cmp_and_hdr_size = footer->cmp_and_hdr_size; - - unsigned char* cmp_start = &dataBuf[compSize] - cmp_and_hdr_size; - u32 cmp_ofs = cmp_and_hdr_size - header_size; - u32 out_ofs = cmp_and_hdr_size + addl_size; - - while (out_ofs) + u32 addl_size = footer->addl_size; + u32 header_size = footer->header_size; + u32 cmp_and_hdr_size = footer->cmp_and_hdr_size; + + unsigned char* cmp_start = &dataBuf[compSize] - cmp_and_hdr_size; + u32 cmp_ofs = cmp_and_hdr_size - header_size; + u32 out_ofs = cmp_and_hdr_size + addl_size; + + while (out_ofs) { - unsigned char control = cmp_start[--cmp_ofs]; - for (unsigned int i=0; i<8; i++) + unsigned char control = cmp_start[--cmp_ofs]; + for (unsigned int i=0; i<8; i++) { - if (control & 0x80) + if (control & 0x80) { - if (cmp_ofs < 2) - return 0; //out of bounds + if (cmp_ofs < 2) + return 0; // Out of bounds. - cmp_ofs -= 2; - u16 seg_val = ((unsigned int)(cmp_start[cmp_ofs+1]) << 8) | cmp_start[cmp_ofs]; - u32 seg_size = ((seg_val >> 12) & 0xF) + 3; - u32 seg_ofs = (seg_val & 0x0FFF) + 3; - if (out_ofs < seg_size) // Kernel restricts segment copy to stay in bounds. - seg_size = out_ofs; + cmp_ofs -= 2; + u16 seg_val = ((unsigned int)(cmp_start[cmp_ofs + 1]) << 8) | cmp_start[cmp_ofs]; + u32 seg_size = ((seg_val >> 12) & 0xF) + 3; + u32 seg_ofs = (seg_val & 0x0FFF) + 3; + if (out_ofs < seg_size) // Kernel restricts segment copy to stay in bounds. + seg_size = out_ofs; - out_ofs -= seg_size; - - for (unsigned int j = 0; j < seg_size; j++) - cmp_start[out_ofs + j] = cmp_start[out_ofs + j + seg_ofs]; - } + out_ofs -= seg_size; + + for (unsigned int j = 0; j < seg_size; j++) + cmp_start[out_ofs + j] = cmp_start[out_ofs + j + seg_ofs]; + } else { - // Copy directly. - if (cmp_ofs < 1) - return 0; //out of bounds + // Copy directly. + if (cmp_ofs < 1) + return 0; //out of bounds - cmp_start[--out_ofs] = cmp_start[--cmp_ofs]; - } - control <<= 1; - if (out_ofs == 0) // blz works backwards, so if it reaches byte 0, it's done - return 1; - } - } + cmp_start[--out_ofs] = cmp_start[--cmp_ofs]; + } + control <<= 1; + if (out_ofs == 0) // Blz works backwards, so if it reaches byte 0, it's done. + return 1; + } + } return 1; } -int blz_uncompress_srcdest(const unsigned char* compData, unsigned int compDataLen, unsigned char* dstData, unsigned int dstSize) +int blz_uncompress_srcdest(const unsigned char *compData, unsigned int compDataLen, unsigned char *dstData, unsigned int dstSize) { - blz_footer footer; - const blz_footer* compFooterPtr = blz_get_footer(compData, compDataLen, &footer); - if (compFooterPtr == NULL) - return 0; + blz_footer footer; + const blz_footer *compFooterPtr = blz_get_footer(compData, compDataLen, &footer); + if (compFooterPtr == NULL) + return 0; - //decompression must be done in-place, so need to copy the relevant compressed data first - unsigned int numCompBytes = (const unsigned char*)(compFooterPtr)-compData; - memcpy(dstData, compData, numCompBytes); - memset(&dstData[numCompBytes], 0, dstSize-numCompBytes); + // Decompression must be done in-place, so need to copy the relevant compressed data first. + unsigned int numCompBytes = (const unsigned char*)(compFooterPtr)-compData; + memcpy(dstData, compData, numCompBytes); + memset(&dstData[numCompBytes], 0, dstSize - numCompBytes); - return blz_uncompress_inplace(dstData, compDataLen, &footer); -} \ No newline at end of file + return blz_uncompress_inplace(dstData, compDataLen, &footer); +} diff --git a/ipl/blz.h b/ipl/blz.h index 6e0f08e..46eb9ab 100644 --- a/ipl/blz.h +++ b/ipl/blz.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 rajkosto -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 rajkosto + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _BLZ_H_ #define _BLZ_H_ @@ -21,16 +21,16 @@ typedef struct _blz_footer { - u32 cmp_and_hdr_size; - u32 header_size; - u32 addl_size; + u32 cmp_and_hdr_size; + u32 header_size; + u32 addl_size; } blz_footer; -//returns pointer to footer in compData if present, additionally copies it to outFooter if not NULL -const blz_footer* blz_get_footer(const unsigned char* compData, unsigned int compDataLen, blz_footer* outFooter); -//returns 0 on failure -int blz_uncompress_inplace(unsigned char* dataBuf, unsigned int compSize, const blz_footer* footer); -//returns 0 on failure -int blz_uncompress_srcdest(const unsigned char* compData, unsigned int compDataLen, unsigned char* dstData, unsigned int dstSize); +// Returns pointer to footer in compData if present, additionally copies it to outFooter if not NULL. +const blz_footer *blz_get_footer(const unsigned char *compData, unsigned int compDataLen, blz_footer *outFooter); +// Returns 0 on failure. +int blz_uncompress_inplace(unsigned char *dataBuf, unsigned int compSize, const blz_footer *footer); +// Returns 0 on failure. +int blz_uncompress_srcdest(const unsigned char *compData, unsigned int compDataLen, unsigned char *dstData, unsigned int dstSize); -#endif \ No newline at end of file +#endif diff --git a/ipl/bq24193.c b/ipl/bq24193.c index 23a36f1..feb5d63 100644 --- a/ipl/bq24193.c +++ b/ipl/bq24193.c @@ -1,20 +1,20 @@ /* -* Battery charger driver for Nintendo Switch's TI BQ24193 -* -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Battery charger driver for Nintendo Switch's TI BQ24193 + * + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "bq24193.h" #include "i2c.h" diff --git a/ipl/bq24193.h b/ipl/bq24193.h index 2b2c680..9c7b74e 100644 --- a/ipl/bq24193.h +++ b/ipl/bq24193.h @@ -1,20 +1,20 @@ /* -* Battery charger driver for Nintendo Switch's TI BQ24193 -* -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Battery charger driver for Nintendo Switch's TI BQ24193 + * + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef __BQ24193_H_ #define __BQ24193_H_ @@ -100,17 +100,17 @@ enum BQ24193_reg { }; enum BQ24193_reg_prop { - BQ24193_InputVoltageLimit, // REG 0. - BQ24193_InputCurrentLimit, // REG 0. - BQ24193_SystemMinimumVoltage, // REG 1. + BQ24193_InputVoltageLimit, // REG 0. + BQ24193_InputCurrentLimit, // REG 0. + BQ24193_SystemMinimumVoltage, // REG 1. BQ24193_FastChargeCurrentLimit, // REG 2. - BQ24193_ChargeVoltageLimit, // REG 4. - BQ24193_RechargeThreshold, // REG 4. - BQ24193_ThermalRegulation, // REG 6. - BQ24193_ChargeStatus, // REG 8. - BQ24193_TempStatus, // REG 9. - BQ24193_DevID, // REG A. - BQ24193_ProductNumber, // REG A. + BQ24193_ChargeVoltageLimit, // REG 4. + BQ24193_RechargeThreshold, // REG 4. + BQ24193_ThermalRegulation, // REG 6. + BQ24193_ChargeStatus, // REG 8. + BQ24193_TempStatus, // REG 9. + BQ24193_DevID, // REG A. + BQ24193_ProductNumber, // REG A. }; int bq24193_get_property(enum BQ24193_reg_prop prop, int *value); diff --git a/ipl/btn.c b/ipl/btn.c index 7b3647e..44e6d4e 100755 --- a/ipl/btn.c +++ b/ipl/btn.c @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "btn.h" #include "i2c.h" diff --git a/ipl/btn.h b/ipl/btn.h index 79dc7c1..ddc28bc 100755 --- a/ipl/btn.h +++ b/ipl/btn.h @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _BTN_H_ #define _BTN_H_ diff --git a/ipl/clock.c b/ipl/clock.c index 08d712e..5222df3 100755 --- a/ipl/clock.c +++ b/ipl/clock.c @@ -1,25 +1,25 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "clock.h" #include "t210.h" #include "util.h" #include "sdmmc.h" -static const clock_t _clock_uart[] = { +static const clock_t _clock_uart[] = { /* UART A */ { CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_UARTA, 6, 0, 0 }, /* UART B */ { CLK_RST_CONTROLLER_RST_DEVICES_L, CLK_RST_CONTROLLER_CLK_OUT_ENB_L, CLK_RST_CONTROLLER_CLK_SOURCE_UARTB, 7, 0, 0 }, /* UART C */ { CLK_RST_CONTROLLER_RST_DEVICES_H, CLK_RST_CONTROLLER_CLK_OUT_ENB_H, CLK_RST_CONTROLLER_CLK_SOURCE_UARTC, 0x17, 0, 0 }, @@ -50,24 +50,24 @@ static clock_t _clock_coresight = { CLK_RST_CONTROLLER_RST_DEVICES_U, CLK_RST_CO void clock_enable(const clock_t *clk) { - //Put clock into reset. + // Put clock into reset. CLOCK(clk->reset) = (CLOCK(clk->reset) & ~(1 << clk->index)) | (1 << clk->index); - //Disable. + // Disable. CLOCK(clk->enable) &= ~(1 << clk->index); - //Configure clock source if required. + // Configure clock source if required. if (clk->source) CLOCK(clk->source) = clk->clk_div | (clk->clk_src << 29); - //Enable. + // Enable. CLOCK(clk->enable) = (CLOCK(clk->enable) & ~(1 << clk->index)) | (1 << clk->index); - //Take clock off reset. + // Take clock off reset. CLOCK(clk->reset) &= ~(1 << clk->index); } void clock_disable(const clock_t *clk) { - //Put clock into reset. + // Put clock into reset. CLOCK(clk->reset) = (CLOCK(clk->reset) & ~(1 << clk->index)) | (1 << clk->index); - //Disable. + // Disable. CLOCK(clk->enable) &= ~(1 << clk->index); } @@ -162,40 +162,45 @@ void clock_enable_cl_dvfs() clock_enable(&_clock_cl_dvfs); } +void clock_disable_cl_dvfs() +{ + clock_disable(&_clock_cl_dvfs); +} + void clock_enable_coresight() { clock_enable(&_clock_coresight); } -#define L_SWR_SDMMC1_RST (1<<14) -#define L_SWR_SDMMC2_RST (1<<9) -#define L_SWR_SDMMC4_RST (1<<15) -#define U_SWR_SDMMC3_RST (1<<5) +#define L_SWR_SDMMC1_RST (1 << 14) +#define L_SWR_SDMMC2_RST (1 << 9) +#define L_SWR_SDMMC4_RST (1 << 15) +#define U_SWR_SDMMC3_RST (1 << 5) -#define L_CLK_ENB_SDMMC1 (1<<14) -#define L_CLK_ENB_SDMMC2 (1<<9) -#define L_CLK_ENB_SDMMC4 (1<<15) -#define U_CLK_ENB_SDMMC3 (1<<5) +#define L_CLK_ENB_SDMMC1 (1 << 14) +#define L_CLK_ENB_SDMMC2 (1 << 9) +#define L_CLK_ENB_SDMMC4 (1 << 15) +#define U_CLK_ENB_SDMMC3 (1 << 5) -#define L_SET_SDMMC1_RST (1<<14) -#define L_SET_SDMMC2_RST (1<<9) -#define L_SET_SDMMC4_RST (1<<15) -#define U_SET_SDMMC3_RST (1<<5) +#define L_SET_SDMMC1_RST (1 << 14) +#define L_SET_SDMMC2_RST (1 << 9) +#define L_SET_SDMMC4_RST (1 << 15) +#define U_SET_SDMMC3_RST (1 << 5) -#define L_CLR_SDMMC1_RST (1<<14) -#define L_CLR_SDMMC2_RST (1<<9) -#define L_CLR_SDMMC4_RST (1<<15) -#define U_CLR_SDMMC3_RST (1<<5) +#define L_CLR_SDMMC1_RST (1 << 14) +#define L_CLR_SDMMC2_RST (1 << 9) +#define L_CLR_SDMMC4_RST (1 << 15) +#define U_CLR_SDMMC3_RST (1 << 5) -#define L_SET_CLK_ENB_SDMMC1 (1<<14) -#define L_SET_CLK_ENB_SDMMC2 (1<<9) -#define L_SET_CLK_ENB_SDMMC4 (1<<15) -#define U_SET_CLK_ENB_SDMMC3 (1<<5) +#define L_SET_CLK_ENB_SDMMC1 (1 << 14) +#define L_SET_CLK_ENB_SDMMC2 (1 << 9) +#define L_SET_CLK_ENB_SDMMC4 (1 << 15) +#define U_SET_CLK_ENB_SDMMC3 (1 << 5) -#define L_CLR_CLK_ENB_SDMMC1 (1<<14) -#define L_CLR_CLK_ENB_SDMMC2 (1<<9) -#define L_CLR_CLK_ENB_SDMMC4 (1<<15) -#define U_CLR_CLK_ENB_SDMMC3 (1<<5) +#define L_CLR_CLK_ENB_SDMMC1 (1 << 14) +#define L_CLR_CLK_ENB_SDMMC2 (1 << 9) +#define L_CLR_CLK_ENB_SDMMC4 (1 << 15) +#define U_CLR_CLK_ENB_SDMMC3 (1 << 5) static int _clock_sdmmc_is_reset(u32 id) { diff --git a/ipl/clock.h b/ipl/clock.h index ecf5dc1..3d2b43e 100755 --- a/ipl/clock.h +++ b/ipl/clock.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _CLOCK_H_ #define _CLOCK_H_ @@ -42,6 +42,8 @@ #define CLK_RST_CONTROLLER_PLLD_BASE 0xD0 #define CLK_RST_CONTROLLER_PLLX_BASE 0xE0 #define CLK_RST_CONTROLLER_PLLX_MISC 0xE4 +#define CLK_RST_CONTROLLER_PLLE_BASE 0xE8 +#define CLK_RST_CONTROLLER_PLLE_MISC 0xEC #define CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRA 0xF8 #define CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRB 0xFC #define CLK_RST_CONTROLLER_CLK_SOURCE_I2C1 0x124 @@ -96,6 +98,7 @@ #define CLK_RST_CONTROLLER_CLK_ENB_W_CLR 0x44C #define CLK_RST_CONTROLLER_RST_CPUG_CMPLX_CLR 0x454 #define CLK_RST_CONTROLLER_UTMIP_PLL_CFG2 0x488 +#define CLK_RST_CONTROLLER_PLLE_AUX 0x48C #define CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S0 0x4A0 #define CLK_RST_CONTROLLER_PLLX_MISC_3 0x518 #define CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRE 0x554 @@ -141,6 +144,7 @@ void clock_disable_sor1(); void clock_enable_kfuse(); void clock_disable_kfuse(); void clock_enable_cl_dvfs(); +void clock_disable_cl_dvfs(); void clock_enable_coresight(); void clock_sdmmc_config_clock_source(u32 *pout, u32 id, u32 val); void clock_sdmmc_get_params(u32 *pout, u16 *pdivisor, u32 type); diff --git a/ipl/cluster.c b/ipl/cluster.c index b3e6542..6333ad4 100755 --- a/ipl/cluster.c +++ b/ipl/cluster.c @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "cluster.h" #include "i2c.h" @@ -28,7 +28,7 @@ void _cluster_enable_power() i2c_send_byte(I2C_5, 0x3C, MAX77620_REG_AME_GPIO, tmp & 0xDF); i2c_send_byte(I2C_5, 0x3C, MAX77620_REG_GPIO5, 0x09); - //Enable cores power. + // Enable cores power. i2c_send_byte(I2C_5, 0x1B, 0x2, 0x20); i2c_send_byte(I2C_5, 0x1B, 0x3, 0x8D); i2c_send_byte(I2C_5, 0x1B, 0x0, 0xB7); @@ -37,7 +37,7 @@ void _cluster_enable_power() int _cluster_pmc_enable_partition(u32 part, u32 toggle) { - //Check if the partition has already been turned on. + // Check if the partition has already been turned on. if (PMC(APBDEV_PMC_PWRGATE_STATUS) & part) return 1; @@ -66,7 +66,7 @@ int _cluster_pmc_enable_partition(u32 part, u32 toggle) void cluster_boot_cpu0(u32 entry) { - //Set ACTIVE_CLUSER to FAST. + // Set ACTIVE_CLUSER to FAST. FLOW_CTLR(FLOW_CTLR_BPMP_CLUSTER_CONTROL) &= 0xFFFFFFFE; _cluster_enable_power(); @@ -83,45 +83,45 @@ void cluster_boot_cpu0(u32 entry) while (!(CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) & 0x8000000)) ; - //Configure MSELECT source and enable clock. + // Configure MSELECT source and enable clock. CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_MSELECT) = (CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_MSELECT) & 0x1FFFFF00) | 6; CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_V) = (CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_V) & 0xFFFFFFF7) | 8; - //Configure initial CPU clock frequency and enable clock. + // Configure initial CPU clock frequency and enable clock. CLOCK(CLK_RST_CONTROLLER_CCLK_BURST_POLICY) = 0x20008888; CLOCK(CLK_RST_CONTROLLER_SUPER_CCLK_DIVIDER) = 0x80000000; CLOCK(CLK_RST_CONTROLLER_CLK_ENB_V_SET) = 1; clock_enable_coresight(); - //CAR2PMC_CPU_ACK_WIDTH should be set to 0. + // CAR2PMC_CPU_ACK_WIDTH should be set to 0. CLOCK(CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL2) &= 0xFFFFF000; - //Enable CPU rail. + // Enable CPU rail. _cluster_pmc_enable_partition(1, 0); //Enable cluster 0 non-CPU. _cluster_pmc_enable_partition(0x8000, 15); - //Enable CE0. + // Enable CE0. _cluster_pmc_enable_partition(0x4000, 14); - //Request and wait for RAM repair. + // Request and wait for RAM repair. FLOW_CTLR(FLOW_CTLR_RAM_REPAIR) = 1; while (!(FLOW_CTLR(FLOW_CTLR_RAM_REPAIR) & 2)) ; EXCP_VEC(0x100) = 0; - //Set reset vector. + // Set reset vector. SB(SB_AA64_RESET_LOW) = entry | 1; SB(SB_AA64_RESET_HIGH) = 0; - //Non-secure reset vector write disable. + // Non-secure reset vector write disable. SB(SB_CSR) = 2; (void)SB(SB_CSR); - //Clear MSELECT reset. + // Clear MSELECT reset. CLOCK(CLK_RST_CONTROLLER_RST_DEVICES_V) &= 0xFFFFFFF7; - //Clear NONCPU reset. + // Clear NONCPU reset. CLOCK(CLK_RST_CONTROLLER_RST_CPUG_CMPLX_CLR) = 0x20000000; - //Clear CPU{0,1,2,3} POR and CORE, CX0, L2, and DBG reset. + // Clear CPU{0,1,2,3} POR and CORE, CX0, L2, and DBG reset. CLOCK(CLK_RST_CONTROLLER_RST_CPUG_CMPLX_CLR) = 0x411F000F; } diff --git a/ipl/cluster.h b/ipl/cluster.h index 4c8369d..f8696a6 100755 --- a/ipl/cluster.h +++ b/ipl/cluster.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _CLUSTER_H_ #define _CLUSTER_H_ diff --git a/ipl/config.c b/ipl/config.c index aedaf1c..4a46860 100644 --- a/ipl/config.c +++ b/ipl/config.c @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include #include @@ -71,7 +71,7 @@ int create_config_entry() itoa(h_cfg.customlogo, lbuf, 10); f_puts(lbuf, &fp); f_puts("\nverification=", &fp); - itoa(h_cfg.verification, lbuf, 10); + itoa(h_cfg.verification, lbuf, 10); f_puts(lbuf, &fp); f_puts("\n", &fp); @@ -198,9 +198,7 @@ void config_autoboot() } memset(&ments[i], 0, sizeof(ment_t)); - menu_t menu = { - ments, "Disable or select entry to auto boot", 0, 0 - }; + menu_t menu = {ments, "Disable or select entry to auto boot", 0, 0}; temp_autoboot = (u32 *)tui_do_menu(&gfx_con, &menu); if (temp_autoboot != NULL) { @@ -275,16 +273,14 @@ void config_bootdelay() delay_text[i * 32] = '*'; delay_text[i * 32 + 1] = i + '0'; memcpy(delay_text + i * 32 + 2, " seconds", 9); - + ments[i + 2].type = MENT_CHOICE; ments[i + 2].caption = delay_text + i * 32; ments[i + 2].data = &delay_values[i]; } memset(&ments[i + 2], 0, sizeof(ment_t)); - menu_t menu = { - ments, "Time delay for entering bootloader menu", 0, 0 - }; + menu_t menu = {ments, "Time delay for entering bootloader menu", 0, 0}; u32 *temp_bootwait = (u32 *)tui_do_menu(&gfx_con, &menu); if (temp_bootwait != NULL) @@ -341,11 +337,9 @@ void config_customlogo() ments[2].caption = "*Disable"; ments[3].caption = " Enable"; } - + memset(&ments[4], 0, sizeof(ment_t)); - menu_t menu = { - ments, "Custom bootlogo", 0, 0 - }; + menu_t menu = {ments, "Custom bootlogo", 0, 0}; u32 *temp_customlogo = (u32 *)tui_do_menu(&gfx_con, &menu); if (temp_customlogo != NULL) @@ -408,11 +402,9 @@ void config_verification() ments[2 + i].caption = vr_text + (i * 64); } } - + memset(&ments[5], 0, sizeof(ment_t)); - menu_t menu = { - ments, "Backup & Restore verification", 0, 0 - }; + menu_t menu = {ments, "Backup & Restore verification", 0, 0}; u32 *temp_verification = (u32 *)tui_do_menu(&gfx_con, &menu); if (temp_verification != NULL) diff --git a/ipl/config.h b/ipl/config.h index f489e9b..3d9f241 100644 --- a/ipl/config.h +++ b/ipl/config.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _CONFIG_H_ #define _CONFIG_H_ @@ -28,7 +28,7 @@ typedef struct _hekate_config // Global temporary config. int se_keygen_done; u32 sbar_time_keeping; -}hekate_config; +} hekate_config; void set_default_configuration(); int create_config_entry(); diff --git a/ipl/di.c b/ipl/di.c index 99c7dd9..3996377 100755 --- a/ipl/di.c +++ b/ipl/di.c @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include @@ -41,11 +41,11 @@ static void _display_dsi_wait(u32 timeout, u32 off, u32 mask) void display_init() { - //Power on. - i2c_send_byte(I2C_5, 0x3C, MAX77620_REG_LDO0_CFG, 0xD0); //Configure to 1.2V. + // Power on. + i2c_send_byte(I2C_5, 0x3C, MAX77620_REG_LDO0_CFG, 0xD0); // Configure to 1.2V. i2c_send_byte(I2C_5, 0x3C, MAX77620_REG_GPIO7, 0x09); - //Enable MIPI CAL, DSI, DISP1, HOST1X, UART_FST_MIPI_CAL, DSIA LP clocks. + // Enable MIPI CAL, DSI, DISP1, HOST1X, UART_FST_MIPI_CAL, DSIA LP clocks. CLOCK(CLK_RST_CONTROLLER_RST_DEV_H_CLR) = 0x1010000; CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_SET) = 0x1010000; CLOCK(CLK_RST_CONTROLLER_RST_DEV_L_CLR) = 0x18000000; @@ -55,32 +55,32 @@ void display_init() CLOCK(CLK_RST_CONTROLLER_CLK_ENB_W_SET) = 0x80000; CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_DSIA_LP) = 0xA; - //DPD idle. + // DPD idle. PMC(APBDEV_PMC_IO_DPD_REQ) = 0x40000000; PMC(APBDEV_PMC_IO_DPD2_REQ) = 0x40000000; - //Config pins. + // Config pins. PINMUX_AUX(PINMUX_AUX_NFC_EN) &= ~PINMUX_TRISTATE; PINMUX_AUX(PINMUX_AUX_NFC_INT) &= ~PINMUX_TRISTATE; PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) &= ~PINMUX_TRISTATE; PINMUX_AUX(PINMUX_AUX_LCD_BL_EN) &= ~PINMUX_TRISTATE; PINMUX_AUX(PINMUX_AUX_LCD_RST) &= ~PINMUX_TRISTATE; - gpio_config(GPIO_PORT_I, GPIO_PIN_0 | GPIO_PIN_1, GPIO_MODE_GPIO); //Backlight +-5V. - gpio_output_enable(GPIO_PORT_I, GPIO_PIN_0 | GPIO_PIN_1, GPIO_OUTPUT_ENABLE); //Backlight +-5V. - gpio_write(GPIO_PORT_I, GPIO_PIN_0, GPIO_HIGH); //Backlight +5V enable. + gpio_config(GPIO_PORT_I, GPIO_PIN_0 | GPIO_PIN_1, GPIO_MODE_GPIO); // Backlight +-5V. + gpio_output_enable(GPIO_PORT_I, GPIO_PIN_0 | GPIO_PIN_1, GPIO_OUTPUT_ENABLE); // Backlight +-5V. + gpio_write(GPIO_PORT_I, GPIO_PIN_0, GPIO_HIGH); // Backlight +5V enable. usleep(10000); - gpio_write(GPIO_PORT_I, GPIO_PIN_1, GPIO_HIGH); //Backlight -5V enable. + gpio_write(GPIO_PORT_I, GPIO_PIN_1, GPIO_HIGH); // Backlight -5V enable. usleep(10000); - gpio_config(GPIO_PORT_V, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_MODE_GPIO); //Backlight PWM, Enable, Reset. + gpio_config(GPIO_PORT_V, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_MODE_GPIO); // Backlight PWM, Enable, Reset. gpio_output_enable(GPIO_PORT_V, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_OUTPUT_ENABLE); - gpio_write(GPIO_PORT_V, GPIO_PIN_1, GPIO_HIGH); //Backlight Enable enable. + gpio_write(GPIO_PORT_V, GPIO_PIN_1, GPIO_HIGH); // Backlight Enable enable. - //Config display interface and display. + // Config display interface and display. MIPI_CAL(0x60) = 0; exec_cfg((u32 *)CLOCK_BASE, _display_config_1, 4); @@ -89,7 +89,7 @@ void display_init() usleep(10000); - gpio_write(GPIO_PORT_V, GPIO_PIN_2, GPIO_HIGH); //Backlight Reset enable. + gpio_write(GPIO_PORT_V, GPIO_PIN_2, GPIO_HIGH); // Backlight Reset enable. usleep(60000); @@ -139,7 +139,7 @@ void display_init() void display_backlight(u8 enable) { - gpio_write(GPIO_PORT_V, GPIO_PIN_0, enable ? GPIO_HIGH : GPIO_LOW); //Backlight PWM. + gpio_write(GPIO_PORT_V, GPIO_PIN_0, enable ? GPIO_HIGH : GPIO_LOW); // Backlight PWM. } void display_end() @@ -192,7 +192,7 @@ void display_end() DSI(_DSIREG(DSI_PAD_CONTROL_0)) = DSI_PAD_CONTROL_VS1_PULLDN_CLK | DSI_PAD_CONTROL_VS1_PULLDN(0xF) | DSI_PAD_CONTROL_VS1_PDIO_CLK | DSI_PAD_CONTROL_VS1_PDIO(0xF); DSI(_DSIREG(DSI_POWER_CONTROL)) = 0;*/ - gpio_config(GPIO_PORT_V, GPIO_PIN_0, GPIO_MODE_SPIO); //Backlight PWM. + gpio_config(GPIO_PORT_V, GPIO_PIN_0, GPIO_MODE_SPIO); // Backlight PWM. PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) = (PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) & ~PINMUX_TRISTATE) | PINMUX_TRISTATE; PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) = (PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) >> 2) << 2 | 1; @@ -202,7 +202,7 @@ void display_color_screen(u32 color) { exec_cfg((u32 *)DISPLAY_A_BASE, cfg_display_one_color, 8); - //Configure display to show single color. + // Configure display to show single color. DISPLAY_A(_DIREG(DC_WIN_AD_WIN_OPTIONS)) = 0; DISPLAY_A(_DIREG(DC_WIN_BD_WIN_OPTIONS)) = 0; DISPLAY_A(_DIREG(DC_WIN_CD_WIN_OPTIONS)) = 0; @@ -216,15 +216,12 @@ void display_color_screen(u32 color) u32 *display_init_framebuffer() { - //Sanitize framebuffer area. + // Sanitize framebuffer area. memset((u32 *)0xC0000000, 0, 0x3C0000); - //This configures the framebuffer @ 0xC0000000 with a resolution of 1280x720 (line stride 768). + // This configures the framebuffer @ 0xC0000000 with a resolution of 1280x720 (line stride 768). exec_cfg((u32 *)DISPLAY_A_BASE, cfg_display_framebuffer, 32); usleep(35000); - //Enable backlight - //display_backlight(1); - return (u32 *)0xC0000000; } diff --git a/ipl/di.h b/ipl/di.h index d78bc09..057a4c9 100755 --- a/ipl/di.h +++ b/ipl/di.h @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _DI_H_ #define _DI_H_ @@ -175,7 +175,7 @@ #define DC_WIN_BD_WIN_OPTIONS 0xD80 #define DC_WIN_CD_WIN_OPTIONS 0xF80 -//The following registers are A/B/C shadows of the 0xB80/0xD80/0xF80 registers (see DISPLAY_WINDOW_HEADER). +// The following registers are A/B/C shadows of the 0xB80/0xD80/0xF80 registers (see DISPLAY_WINDOW_HEADER). #define DC_WIN_WIN_OPTIONS 0x700 #define H_DIRECTION (1 << 0) #define V_DIRECTION (1 << 2) @@ -228,7 +228,7 @@ #define DC_WIN_LINE_STRIDE 0x70A #define DC_WIN_DV_CONTROL 0x70E -//The following registers are A/B/C shadows of the 0xBC0/0xDC0/0xFC0 registers (see DISPLAY_WINDOW_HEADER). +// The following registers are A/B/C shadows of the 0xBC0/0xDC0/0xFC0 registers (see DISPLAY_WINDOW_HEADER). #define DC_WINBUF_START_ADDR 0x800 #define DC_WINBUF_ADDR_H_OFFSET 0x806 #define DC_WINBUF_ADDR_V_OFFSET 0x808 diff --git a/ipl/emc.h b/ipl/emc.h index 7a6405d..88e9da9 100755 --- a/ipl/emc.h +++ b/ipl/emc.h @@ -1,23 +1,23 @@ /* -* arch/arm/mach-tegra/tegra21_emc.h -* -* Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved. -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along -* with this program; if not, write to the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -* -*/ + * arch/arm/mach-tegra/tegra21_emc.h + * + * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ #ifndef _EMC_H_ #define _EMC_H_ diff --git a/ipl/ff.c b/ipl/ff.c index 68cb353..5220859 100755 --- a/ipl/ff.c +++ b/ipl/ff.c @@ -3312,7 +3312,7 @@ static FRESULT find_volume ( /* FR_OK(0): successful, !=0: an error occurred */ return FR_NO_FILESYSTEM; /* Check exFAT version (must be version 1.0) */ if (1 << fs->win[BPB_BytsPerSecEx] != SS(fs)) { /* (BPB_BytsPerSecEx must be equal to the physical sector size) */ - EFSPRINTF("EX_SPS"); + EFSPRINTF("EXSPS"); return FR_NO_FILESYSTEM; } @@ -3324,7 +3324,7 @@ static FRESULT find_volume ( /* FR_OK(0): successful, !=0: an error occurred */ fs->n_fats = fs->win[BPB_NumFATsEx]; /* Number of FATs */ if (fs->n_fats != 1) { - EFSPRINTF("EX_FNF"); + EFSPRINTF("EXFNF"); return FR_NO_FILESYSTEM; /* (Supports only 1 FAT) */ } @@ -3348,14 +3348,14 @@ static FRESULT find_volume ( /* FR_OK(0): successful, !=0: an error occurred */ /* Check if bitmap location is in assumption (at the first cluster) */ if (move_window(fs, clst2sect(fs, fs->dirbase)) != FR_OK) { - EFSPRINTF("EX_BM1C"); + EFSPRINTF("EXBM1C"); return FR_DISK_ERR; } for (i = 0; i < SS(fs); i += SZDIRE) { if (fs->win[i] == 0x81 && ld_dword(fs->win + i + 20) == 2) break; /* 81 entry with cluster #2? */ } if (i == SS(fs)) { - EFSPRINTF("EX_BMM"); + EFSPRINTF("EXBMM"); return FR_NO_FILESYSTEM; } #if !FF_FS_READONLY @@ -3366,7 +3366,7 @@ static FRESULT find_volume ( /* FR_OK(0): successful, !=0: an error occurred */ #endif /* FF_FS_EXFAT */ { if (ld_word(fs->win + BPB_BytsPerSec) != SS(fs)) { - EFSPRINTF("32_SPS"); + EFSPRINTF("32SPS"); return FR_NO_FILESYSTEM; /* (BPB_BytsPerSec must be equal to the physical sector size) */ } diff --git a/ipl/fuse.c b/ipl/fuse.c index 356eb89..1a6662f 100755 --- a/ipl/fuse.c +++ b/ipl/fuse.c @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "fuse.h" #include "t210.h" diff --git a/ipl/fuse.h b/ipl/fuse.h index 2732eb4..44ac719 100755 --- a/ipl/fuse.h +++ b/ipl/fuse.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _FUSE_H_ #define _FUSE_H_ diff --git a/ipl/gfx.c b/ipl/gfx.c index 4e90c05..5ba87fd 100755 --- a/ipl/gfx.c +++ b/ipl/gfx.c @@ -1,120 +1,120 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include #include #include "gfx.h" static const u8 _gfx_font[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 032 ( ) - 0x00, 0x30, 0x30, 0x18, 0x18, 0x00, 0x0C, 0x00, // Char 033 (!) - 0x00, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, // Char 034 (") - 0x00, 0x66, 0x66, 0xFF, 0x66, 0xFF, 0x66, 0x66, // Char 035 (#) - 0x00, 0x18, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x18, // Char 036 ($) - 0x00, 0x46, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x62, // Char 037 (%) - 0x00, 0x3C, 0x66, 0x3C, 0x1C, 0xE6, 0x66, 0xFC, // Char 038 (&) - 0x00, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, // Char 039 (') - 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x18, 0x30, 0x00, // Char 040 (() - 0x00, 0x0C, 0x18, 0x30, 0x30, 0x18, 0x0C, 0x00, // Char 041 ()) - 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, // Char 042 (*) - 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, // Char 043 (+) - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x0C, 0x00, // Char 044 (,) - 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, // Char 045 (-) - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, // Char 046 (.) - 0x00, 0x40, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, // Char 047 (/) - 0x00, 0x3C, 0x66, 0x76, 0x6E, 0x66, 0x3C, 0x00, // Char 048 (0) - 0x00, 0x18, 0x1C, 0x18, 0x18, 0x18, 0x7E, 0x00, // Char 049 (1) - 0x00, 0x3C, 0x62, 0x30, 0x0C, 0x06, 0x7E, 0x00, // Char 050 (2) - 0x00, 0x3C, 0x62, 0x38, 0x60, 0x66, 0x3C, 0x00, // Char 051 (3) - 0x00, 0x6C, 0x6C, 0x66, 0xFE, 0x60, 0x60, 0x00, // Char 052 (4) - 0x00, 0x7E, 0x06, 0x7E, 0x60, 0x66, 0x3C, 0x00, // Char 053 (5) - 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x66, 0x3C, 0x00, // Char 054 (6) - 0x00, 0x7E, 0x30, 0x30, 0x18, 0x18, 0x18, 0x00, // Char 055 (7) - 0x00, 0x3C, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00, // Char 056 (8) - 0x00, 0x3C, 0x66, 0x7C, 0x60, 0x66, 0x3C, 0x00, // Char 057 (9) - 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, // Char 058 (:) - 0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x0C, 0x00, // Char 059 (;) - 0x00, 0x70, 0x1C, 0x06, 0x06, 0x1C, 0x70, 0x00, // Char 060 (<) - 0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 0x00, // Char 061 (=) - 0x00, 0x0E, 0x38, 0x60, 0x60, 0x38, 0x0E, 0x00, // Char 062 (>) - 0x00, 0x3C, 0x66, 0x30, 0x18, 0x00, 0x18, 0x00, // Char 063 (?) - 0x00, 0x3C, 0x66, 0x76, 0x76, 0x06, 0x46, 0x3C, // Char 064 (@) - 0x00, 0x3C, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, // Char 065 (A) - 0x00, 0x3E, 0x66, 0x3E, 0x66, 0x66, 0x3E, 0x00, // Char 066 (B) - 0x00, 0x3C, 0x66, 0x06, 0x06, 0x66, 0x3C, 0x00, // Char 067 (C) - 0x00, 0x1E, 0x36, 0x66, 0x66, 0x36, 0x1E, 0x00, // Char 068 (D) - 0x00, 0x7E, 0x06, 0x1E, 0x06, 0x06, 0x7E, 0x00, // Char 069 (E) - 0x00, 0x3E, 0x06, 0x1E, 0x06, 0x06, 0x06, 0x00, // Char 070 (F) - 0x00, 0x3C, 0x66, 0x06, 0x76, 0x66, 0x3C, 0x00, // Char 071 (G) - 0x00, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, // Char 072 (H) - 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, // Char 073 (I) - 0x00, 0x78, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00, // Char 074 (J) - 0x00, 0x66, 0x36, 0x1E, 0x1E, 0x36, 0x66, 0x00, // Char 075 (K) - 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7E, 0x00, // Char 076 (L) - 0x00, 0x46, 0x6E, 0x7E, 0x56, 0x46, 0x46, 0x00, // Char 077 (M) - 0x00, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0x66, 0x00, // Char 078 (N) - 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, // Char 079 (O) - 0x00, 0x3E, 0x66, 0x3E, 0x06, 0x06, 0x06, 0x00, // Char 080 (P) - 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x70, 0x00, // Char 081 (Q) - 0x00, 0x3E, 0x66, 0x3E, 0x1E, 0x36, 0x66, 0x00, // Char 082 (R) - 0x00, 0x3C, 0x66, 0x0C, 0x30, 0x66, 0x3C, 0x00, // Char 083 (S) - 0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, // Char 084 (T) - 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, // Char 085 (U) - 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, // Char 086 (V) - 0x00, 0x46, 0x46, 0x56, 0x7E, 0x6E, 0x46, 0x00, // Char 087 (W) - 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00, // Char 088 (X) - 0x00, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00, // Char 089 (Y) - 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x06, 0x7E, 0x00, // Char 090 (Z) - 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, // Char 091 ([) - 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00, // Char 092 (\) - 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, // Char 093 (]) - 0x00, 0x18, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, // Char 094 (^) - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, // Char 095 (_) - 0x00, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, // Char 096 (`) - 0x00, 0x00, 0x3C, 0x60, 0x7C, 0x66, 0x7C, 0x00, // Char 097 (a) - 0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x00, // Char 098 (b) - 0x00, 0x00, 0x3C, 0x06, 0x06, 0x06, 0x3C, 0x00, // Char 099 (c) - 0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00, // Char 100 (d) - 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x06, 0x3C, 0x00, // Char 101 (e) - 0x00, 0x38, 0x0C, 0x3E, 0x0C, 0x0C, 0x0C, 0x00, // Char 102 (f) - 0x00, 0x00, 0x7C, 0x66, 0x7C, 0x40, 0x3C, 0x00, // Char 103 (g) - 0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x00, // Char 104 (h) - 0x00, 0x18, 0x00, 0x1C, 0x18, 0x18, 0x3C, 0x00, // Char 105 (i) - 0x00, 0x30, 0x00, 0x30, 0x30, 0x30, 0x1E, 0x00, // Char 106 (j) - 0x00, 0x06, 0x06, 0x36, 0x1E, 0x36, 0x66, 0x00, // Char 107 (k) - 0x00, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, // Char 108 (l) - 0x00, 0x00, 0x66, 0xFE, 0xFE, 0xD6, 0xC6, 0x00, // Char 109 (m) - 0x00, 0x00, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00, // Char 110 (n) - 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, // Char 111 (o) - 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x00, // Char 112 (p) - 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x00, // Char 113 (q) - 0x00, 0x00, 0x3E, 0x66, 0x06, 0x06, 0x06, 0x00, // Char 114 (r) - 0x00, 0x00, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x00, // Char 115 (s) - 0x00, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x70, 0x00, // Char 116 (t) - 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, // Char 117 (u) - 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, // Char 118 (v) - 0x00, 0x00, 0xC6, 0xD6, 0xFE, 0x7C, 0x6C, 0x00, // Char 119 (w) - 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, // Char 120 (x) - 0x00, 0x00, 0x66, 0x66, 0x7C, 0x60, 0x3C, 0x00, // Char 121 (y) - 0x00, 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x7E, 0x00, // Char 122 (z) - 0x00, 0x18, 0x08, 0x08, 0x04, 0x08, 0x08, 0x18, // Char 123 ({) - 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, // Char 124 (|) - 0x00, 0x0C, 0x08, 0x08, 0x10, 0x08, 0x08, 0x0C, // Char 125 (}) - 0x00, 0x00, 0x00, 0x4C, 0x32, 0x00, 0x00, 0x00 // Char 126 (~) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 032 ( ) + 0x00, 0x30, 0x30, 0x18, 0x18, 0x00, 0x0C, 0x00, // Char 033 (!) + 0x00, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, // Char 034 (") + 0x00, 0x66, 0x66, 0xFF, 0x66, 0xFF, 0x66, 0x66, // Char 035 (#) + 0x00, 0x18, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x18, // Char 036 ($) + 0x00, 0x46, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x62, // Char 037 (%) + 0x00, 0x3C, 0x66, 0x3C, 0x1C, 0xE6, 0x66, 0xFC, // Char 038 (&) + 0x00, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, // Char 039 (') + 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x18, 0x30, 0x00, // Char 040 (() + 0x00, 0x0C, 0x18, 0x30, 0x30, 0x18, 0x0C, 0x00, // Char 041 ()) + 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, // Char 042 (*) + 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, // Char 043 (+) + 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x0C, 0x00, // Char 044 (,) + 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, // Char 045 (-) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, // Char 046 (.) + 0x00, 0x40, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, // Char 047 (/) + 0x00, 0x3C, 0x66, 0x76, 0x6E, 0x66, 0x3C, 0x00, // Char 048 (0) + 0x00, 0x18, 0x1C, 0x18, 0x18, 0x18, 0x7E, 0x00, // Char 049 (1) + 0x00, 0x3C, 0x62, 0x30, 0x0C, 0x06, 0x7E, 0x00, // Char 050 (2) + 0x00, 0x3C, 0x62, 0x38, 0x60, 0x66, 0x3C, 0x00, // Char 051 (3) + 0x00, 0x6C, 0x6C, 0x66, 0xFE, 0x60, 0x60, 0x00, // Char 052 (4) + 0x00, 0x7E, 0x06, 0x7E, 0x60, 0x66, 0x3C, 0x00, // Char 053 (5) + 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x66, 0x3C, 0x00, // Char 054 (6) + 0x00, 0x7E, 0x30, 0x30, 0x18, 0x18, 0x18, 0x00, // Char 055 (7) + 0x00, 0x3C, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00, // Char 056 (8) + 0x00, 0x3C, 0x66, 0x7C, 0x60, 0x66, 0x3C, 0x00, // Char 057 (9) + 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, // Char 058 (:) + 0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x0C, 0x00, // Char 059 (;) + 0x00, 0x70, 0x1C, 0x06, 0x06, 0x1C, 0x70, 0x00, // Char 060 (<) + 0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 0x00, // Char 061 (=) + 0x00, 0x0E, 0x38, 0x60, 0x60, 0x38, 0x0E, 0x00, // Char 062 (>) + 0x00, 0x3C, 0x66, 0x30, 0x18, 0x00, 0x18, 0x00, // Char 063 (?) + 0x00, 0x3C, 0x66, 0x76, 0x76, 0x06, 0x46, 0x3C, // Char 064 (@) + 0x00, 0x3C, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, // Char 065 (A) + 0x00, 0x3E, 0x66, 0x3E, 0x66, 0x66, 0x3E, 0x00, // Char 066 (B) + 0x00, 0x3C, 0x66, 0x06, 0x06, 0x66, 0x3C, 0x00, // Char 067 (C) + 0x00, 0x1E, 0x36, 0x66, 0x66, 0x36, 0x1E, 0x00, // Char 068 (D) + 0x00, 0x7E, 0x06, 0x1E, 0x06, 0x06, 0x7E, 0x00, // Char 069 (E) + 0x00, 0x3E, 0x06, 0x1E, 0x06, 0x06, 0x06, 0x00, // Char 070 (F) + 0x00, 0x3C, 0x66, 0x06, 0x76, 0x66, 0x3C, 0x00, // Char 071 (G) + 0x00, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, // Char 072 (H) + 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, // Char 073 (I) + 0x00, 0x78, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00, // Char 074 (J) + 0x00, 0x66, 0x36, 0x1E, 0x1E, 0x36, 0x66, 0x00, // Char 075 (K) + 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7E, 0x00, // Char 076 (L) + 0x00, 0x46, 0x6E, 0x7E, 0x56, 0x46, 0x46, 0x00, // Char 077 (M) + 0x00, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0x66, 0x00, // Char 078 (N) + 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, // Char 079 (O) + 0x00, 0x3E, 0x66, 0x3E, 0x06, 0x06, 0x06, 0x00, // Char 080 (P) + 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x70, 0x00, // Char 081 (Q) + 0x00, 0x3E, 0x66, 0x3E, 0x1E, 0x36, 0x66, 0x00, // Char 082 (R) + 0x00, 0x3C, 0x66, 0x0C, 0x30, 0x66, 0x3C, 0x00, // Char 083 (S) + 0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, // Char 084 (T) + 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, // Char 085 (U) + 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, // Char 086 (V) + 0x00, 0x46, 0x46, 0x56, 0x7E, 0x6E, 0x46, 0x00, // Char 087 (W) + 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00, // Char 088 (X) + 0x00, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00, // Char 089 (Y) + 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x06, 0x7E, 0x00, // Char 090 (Z) + 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, // Char 091 ([) + 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00, // Char 092 (\) + 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, // Char 093 (]) + 0x00, 0x18, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, // Char 094 (^) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, // Char 095 (_) + 0x00, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, // Char 096 (`) + 0x00, 0x00, 0x3C, 0x60, 0x7C, 0x66, 0x7C, 0x00, // Char 097 (a) + 0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x00, // Char 098 (b) + 0x00, 0x00, 0x3C, 0x06, 0x06, 0x06, 0x3C, 0x00, // Char 099 (c) + 0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00, // Char 100 (d) + 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x06, 0x3C, 0x00, // Char 101 (e) + 0x00, 0x38, 0x0C, 0x3E, 0x0C, 0x0C, 0x0C, 0x00, // Char 102 (f) + 0x00, 0x00, 0x7C, 0x66, 0x7C, 0x40, 0x3C, 0x00, // Char 103 (g) + 0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x00, // Char 104 (h) + 0x00, 0x18, 0x00, 0x1C, 0x18, 0x18, 0x3C, 0x00, // Char 105 (i) + 0x00, 0x30, 0x00, 0x30, 0x30, 0x30, 0x1E, 0x00, // Char 106 (j) + 0x00, 0x06, 0x06, 0x36, 0x1E, 0x36, 0x66, 0x00, // Char 107 (k) + 0x00, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, // Char 108 (l) + 0x00, 0x00, 0x66, 0xFE, 0xFE, 0xD6, 0xC6, 0x00, // Char 109 (m) + 0x00, 0x00, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00, // Char 110 (n) + 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, // Char 111 (o) + 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x00, // Char 112 (p) + 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x00, // Char 113 (q) + 0x00, 0x00, 0x3E, 0x66, 0x06, 0x06, 0x06, 0x00, // Char 114 (r) + 0x00, 0x00, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x00, // Char 115 (s) + 0x00, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x70, 0x00, // Char 116 (t) + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, // Char 117 (u) + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, // Char 118 (v) + 0x00, 0x00, 0xC6, 0xD6, 0xFE, 0x7C, 0x6C, 0x00, // Char 119 (w) + 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, // Char 120 (x) + 0x00, 0x00, 0x66, 0x66, 0x7C, 0x60, 0x3C, 0x00, // Char 121 (y) + 0x00, 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x7E, 0x00, // Char 122 (z) + 0x00, 0x18, 0x08, 0x08, 0x04, 0x08, 0x08, 0x18, // Char 123 ({) + 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, // Char 124 (|) + 0x00, 0x0C, 0x08, 0x08, 0x10, 0x08, 0x08, 0x0C, // Char 125 (}) + 0x00, 0x00, 0x00, 0x4C, 0x32, 0x00, 0x00, 0x00 // Char 126 (~) }; void gfx_init_ctxt(gfx_ctxt_t *ctxt, u32 *fb, u32 width, u32 height, u32 stride) @@ -138,7 +138,7 @@ void gfx_clear_color(gfx_ctxt_t *ctxt, u32 color) void gfx_clear_partial_grey(gfx_ctxt_t *ctxt, u8 color, u32 pos_x, u32 height) { - memset(ctxt->fb + pos_x * ctxt->stride , color, height * 4 * ctxt->stride); + memset(ctxt->fb + pos_x * ctxt->stride, color, height * 4 * ctxt->stride); } void gfx_con_init(gfx_con_t *con, gfx_ctxt_t *ctxt) diff --git a/ipl/gfx.h b/ipl/gfx.h index 701ee68..9c32d23 100755 --- a/ipl/gfx.h +++ b/ipl/gfx.h @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _GFX_H_ #define _GFX_H_ diff --git a/ipl/gpio.c b/ipl/gpio.c index fb75ee8..8bdf1a5 100755 --- a/ipl/gpio.c +++ b/ipl/gpio.c @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "gpio.h" #include "t210.h" diff --git a/ipl/gpio.h b/ipl/gpio.h index 39e8c80..2b4651d 100755 --- a/ipl/gpio.h +++ b/ipl/gpio.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _GPIO_H_ #define _GPIO_H_ diff --git a/ipl/heap.c b/ipl/heap.c index 12bfb44..dd2818b 100755 --- a/ipl/heap.c +++ b/ipl/heap.c @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include #include "heap.h" @@ -37,12 +37,12 @@ static void _heap_create(heap_t *heap, u32 start) heap->first = NULL; } -static u32 _heap_alloc(heap_t *heap, u32 size) +static u32 _heap_alloc(heap_t *heap, u32 size, u32 alignment) { hnode_t *node, *new; int search = 1; - size = ALIGN(size, 0x10); + size = ALIGN(size, alignment); if (!heap->first) { @@ -119,12 +119,12 @@ void heap_init(u32 base) void *malloc(u32 size) { - return (void *)_heap_alloc(&_heap, size); + return (void *)_heap_alloc(&_heap, size, 0x10); } void *calloc(u32 num, u32 size) { - void *res = (void *)_heap_alloc(&_heap, num * size); + void *res = (void *)_heap_alloc(&_heap, num * size, 0x10); memset(res, 0, num * size); return res; } diff --git a/ipl/heap.h b/ipl/heap.h index e1ab6fa..08c2c0e 100755 --- a/ipl/heap.h +++ b/ipl/heap.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _HEAP_H_ #define _HEAP_H_ diff --git a/ipl/hekate_logos.h b/ipl/hekate_logos.h index 899e548..f57cfa5 100644 --- a/ipl/hekate_logos.h +++ b/ipl/hekate_logos.h @@ -1,28 +1,27 @@ /* -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _HEKATE_LOGOS_H_ #define _HEKATE_LOGOS_H_ #ifdef MENU_LOGO_ENABLE -//119 x 57 @24bpp RGB RAW positioned at 577 x 1199 -#define SZ_MENU_LOGO 20349 -#define SZ_MENU_LOGO_BLZ 7592 -static unsigned char Kc_MENU_LOGO_blz[SZ_MENU_LOGO_BLZ] = -{ +// 119 x 57 @24bpp RGB RAW positioned at 577 x 1199 +#define SZ_MENU_LOGO 20349 +#define SZ_MENU_LOGO_BLZ 7592 +static unsigned char Kc_MENU_LOGO_blz[SZ_MENU_LOGO_BLZ] = { 0x01, 0x10, 0x80, 0x2D, 0xF0, 0x99, 0x30, 0x84, 0xB0, 0x1C, 0x6C, 0x60, 0x51, 0xF0, 0x59, 0x31, 0x03, 0x30, 0xF7, 0x0F, 0xF0, 0x0F, 0xF0, 0x42, 0xF0, 0xFE, 0xF4, 0x15, 0x6C, 0xCF, 0x30, 0xCC, 0x20, 0x1D, 0x7F, 0x1F, 0x52, 0x6D, 0xD8, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, @@ -502,13 +501,12 @@ static unsigned char Kc_MENU_LOGO_blz[SZ_MENU_LOGO_BLZ] = #endif //MENU_LOGO_ENABLE -//68 x 192 @8bpp Grayscale RAW +// 68 x 192 @8bpp Grayscale RAW. #define X_BOOTLOGO 68 #define Y_BOOTLOGO 192 #define SZ_BOOTLOGO 13056 #define SZ_BOOTLOGO_BLZ 6704 -static u8 BOOTLOGO_BLZ[SZ_BOOTLOGO_BLZ] = -{ +static u8 BOOTLOGO_BLZ[SZ_BOOTLOGO_BLZ] = { 0x0F, 0xF0, 0x80, 0x1B, 0x1B, 0x77, 0xF0, 0x6A, 0x08, 0x41, 0x80, 0x0F, 0x4D, 0x21, 0x40, 0x29, 0xF0, 0xFC, 0x34, 0xED, 0x34, 0x10, 0x23, 0x26, 0x27, 0x23, 0x76, 0x30, 0x0F, 0xF0, 0xC3, 0xC9, 0xF0, 0x3F, 0x7F, 0xC6, 0x53, 0x80, 0x2E, 0x33, 0xDB, 0x2D, 0xBA, 0x20, 0x8F, 0x1C, 0xE7, 0x76, diff --git a/ipl/hos.c b/ipl/hos.c index 776eabb..400e7fd 100755 --- a/ipl/hos.c +++ b/ipl/hos.c @@ -1,23 +1,24 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (c) 2018 st4rk -* Copyright (c) 2018 Ced2911 -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (c) 2018 st4rk + * Copyright (c) 2018 Ced2911 + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include + #include "hos.h" #include "sdmmc.h" #include "nx_emmc.h" @@ -36,6 +37,7 @@ #include "ff.h" #include "di.h" #include "config.h" +#include "mc.h" #include "gfx.h" extern gfx_ctxt_t gfx_ctxt; @@ -178,7 +180,7 @@ int keygen(u8 *keyblob, u32 kb, void *tsec_fw) // Decrypt keyblob and set keyslots. se_aes_crypt_ctr(13, keyblob + 0x20, 0x90, keyblob + 0x20, 0x90, keyblob + 0x10); - se_aes_key_set(11, keyblob + 0x20 + 0x80, 0x10); //Package1 key. + se_aes_key_set(11, keyblob + 0x20 + 0x80, 0x10); // Package1 key. se_aes_key_set(12, keyblob + 0x20, 0x10); se_aes_key_set(13, keyblob + 0x20, 0x10); @@ -186,24 +188,24 @@ int keygen(u8 *keyblob, u32 kb, void *tsec_fw) switch (kb) { - case KB_FIRMWARE_VERSION_100_200: - case KB_FIRMWARE_VERSION_300: - case KB_FIRMWARE_VERSION_301: - se_aes_unwrap_key(13, 15, console_keyseed); - se_aes_unwrap_key(12, 12, master_keyseed_retail); - break; - case KB_FIRMWARE_VERSION_400: - se_aes_unwrap_key(13, 15, console_keyseed_4xx_5xx); - se_aes_unwrap_key(15, 15, console_keyseed); - se_aes_unwrap_key(14, 12, master_keyseed_4xx_5xx); - se_aes_unwrap_key(12, 12, master_keyseed_retail); - break; - case KB_FIRMWARE_VERSION_500: - se_aes_unwrap_key(10, 15, console_keyseed_4xx_5xx); - se_aes_unwrap_key(15, 15, console_keyseed); - se_aes_unwrap_key(14, 12, master_keyseed_4xx_5xx); - se_aes_unwrap_key(12, 12, master_keyseed_retail); - break; + case KB_FIRMWARE_VERSION_100_200: + case KB_FIRMWARE_VERSION_300: + case KB_FIRMWARE_VERSION_301: + se_aes_unwrap_key(13, 15, console_keyseed); + se_aes_unwrap_key(12, 12, master_keyseed_retail); + break; + case KB_FIRMWARE_VERSION_400: + se_aes_unwrap_key(13, 15, console_keyseed_4xx_5xx); + se_aes_unwrap_key(15, 15, console_keyseed); + se_aes_unwrap_key(14, 12, master_keyseed_4xx_5xx); + se_aes_unwrap_key(12, 12, master_keyseed_retail); + break; + case KB_FIRMWARE_VERSION_500: + se_aes_unwrap_key(10, 15, console_keyseed_4xx_5xx); + se_aes_unwrap_key(15, 15, console_keyseed); + se_aes_unwrap_key(14, 12, master_keyseed_4xx_5xx); + se_aes_unwrap_key(12, 12, master_keyseed_retail); + break; } // Package2 key. @@ -287,7 +289,7 @@ static int _read_emmc_pkg2(launch_ctxt_t *ctxt) u32 pkg2_size = hdr[0] ^ hdr[2] ^ hdr[3]; free(tmp); DPRINTF("pkg2 size on emmc is %08X\n", pkg2_size); - //Read in package2. + // Read in package2. u32 pkg2_size_aligned = ALIGN(pkg2_size, NX_EMMC_BLOCKSIZE); DPRINTF("pkg2 size aligned is %08X\n", pkg2_size_aligned); ctxt->pkg2 = malloc(pkg2_size_aligned); @@ -391,23 +393,24 @@ static int _config_kip1patch(launch_ctxt_t *ctxt, const char *value) int valueLen = strlen(value); if (valueLen == 0) return 0; - + if (ctxt->kip1_patches == NULL) { - ctxt->kip1_patches = malloc(valueLen+1); + ctxt->kip1_patches = malloc(valueLen + 1); memcpy(ctxt->kip1_patches, value, valueLen); ctxt->kip1_patches[valueLen] = 0; } else { - char* oldAlloc = ctxt->kip1_patches; + char *oldAlloc = ctxt->kip1_patches; int oldSize = strlen(oldAlloc); - ctxt->kip1_patches = malloc(oldSize+1+valueLen+1); + ctxt->kip1_patches = malloc(oldSize + 1 + valueLen + 1); memcpy(ctxt->kip1_patches, oldAlloc, oldSize); - free(oldAlloc); oldAlloc = NULL; + free(oldAlloc); + oldAlloc = NULL; ctxt->kip1_patches[oldSize++] = ','; memcpy(&ctxt->kip1_patches[oldSize], value, valueLen); - ctxt->kip1_patches[oldSize+valueLen] = 0; + ctxt->kip1_patches[oldSize + valueLen] = 0; } return 1; } @@ -568,13 +571,13 @@ int hos_launch(ini_sec_t *cfg) LIST_FOREACH_ENTRY(merge_kip_t, mki, &ctxt.kip1_list, link) pkg2_merge_kip(&kip1_info, (pkg2_kip1_t *)mki->kip1); - // Patch kip1s in memory if needed + // Patch kip1s in memory if needed. const char* unappliedPatch = pkg2_patch_kips(&kip1_info, ctxt.kip1_patches); if (unappliedPatch != NULL) { gfx_printf(&gfx_con, "%kREQUESTED PATCH '%s' NOT APPLIED!%k\n", 0xFFFF0000, unappliedPatch, 0xFFCCCCCC); - sd_unmount(); //just exiting is not enough until pkg2_patch_kips stops modifying the string passed into it - while(1) {} //MUST stop here, because if user requests 'nogc' but it's not applied, their GC controller gets updated! + sd_unmount(); // Just exiting is not enough until pkg2_patch_kips stops modifying the string passed into it. + while(1) {} // MUST stop here, because if user requests 'nogc' but it's not applied, their GC controller gets updated! } // Rebuild and encrypt package2. @@ -595,7 +598,7 @@ int hos_launch(ini_sec_t *cfg) case KB_FIRMWARE_VERSION_100_200: if (!exoFwNumber) { - if(!strcmp(ctxt.pkg1_id->id, "20161121183008")) + if (!strcmp(ctxt.pkg1_id->id, "20161121183008")) exoFwNumber = 1; else exoFwNumber = 2; @@ -634,7 +637,7 @@ int hos_launch(ini_sec_t *cfg) // Copy BCT if debug mode is enabled. memset((void *)0x4003D000, 0, 0x3000); - if(ctxt.debugmode) + if (ctxt.debugmode) _copy_bootconfig(&ctxt); // Config Exosphère if booting Atmosphère. @@ -647,13 +650,14 @@ int hos_launch(ini_sec_t *cfg) *mb_exo_fw_no = exoFwNumber; } - // Lock SE before starting 'SecureMonitor'. + // Finalize MC carveout and lock SE before starting 'SecureMonitor'. + mc_config_carveout_finalize(); _se_lock(); // < 4.0.0 Signals - 0: Nothing ready, 1: BCT ready, 2: DRAM and pkg2 ready, 3: Continue boot. // >= 4.0.0 Signals - 0: Nothing ready, 1: BCT ready, 2: DRAM ready, 4: pkg2 ready and continue boot. vu32 *mb_in = (vu32 *)0x40002EF8; - //Non-zero: Secmon ready + // Non-zero: Secmon ready. vu32 *mb_out = (vu32 *)0x40002EFC; // Start from DRAM ready signal. @@ -677,7 +681,7 @@ int hos_launch(ini_sec_t *cfg) PMC(0x5BC) = 0xFFFFFFFF; PMC(0x5C0) = 0xFFAAFFFF;*/ - //Disable display. + // Disable display. if (end_di) display_end(); diff --git a/ipl/hos.h b/ipl/hos.h index deab7e8..aa16509 100755 --- a/ipl/hos.h +++ b/ipl/hos.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _HOS_H_ #define _HOS_H_ diff --git a/ipl/i2c.c b/ipl/i2c.c index 3f67b5c..f9946ed 100755 --- a/ipl/i2c.c +++ b/ipl/i2c.c @@ -1,25 +1,28 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include #include "i2c.h" #include "util.h" -static u32 i2c_addrs[] = { 0x7000C000, 0x7000C400, 0x7000C500, 0x7000C700, 0x7000D000, 0x7000D100 }; +static u32 i2c_addrs[] = { + 0x7000C000, 0x7000C400, 0x7000C500, + 0x7000C700, 0x7000D000, 0x7000D100 +}; static void _i2c_wait(vu32 *base) { @@ -42,9 +45,9 @@ static int _i2c_send_pkt(u32 idx, u32 x, u8 *buf, u32 size) vu32 *base = (vu32 *)i2c_addrs[idx]; base[1] = x << 1; //Set x (send mode). - base[3] = tmp; //Set value. + base[3] = tmp; //Set value. base[0] = (2 * size - 2) | 0x2800; //Set size and send mode. - _i2c_wait(base); //Kick transaction. + _i2c_wait(base); //Kick transaction. base[0] = (base[0] & 0xFFFFFDFF) | 0x200; while (base[7] & 0x100) @@ -62,9 +65,9 @@ static int _i2c_recv_pkt(u32 idx, u8 *buf, u32 size, u32 x) return 0; vu32 *base = (vu32 *)i2c_addrs[idx]; - base[1] = (x << 1) | 1; //Set x (recv mode). - base[0] = (2 * size - 2) | 0x2840; //Set size and recv mode. - _i2c_wait(base); //Kick transaction. + base[1] = (x << 1) | 1; // Set x (recv mode). + base[0] = (2 * size - 2) | 0x2840; // Set size and recv mode. + _i2c_wait(base); // Kick transaction. base[0] = (base[0] & 0xFFFFFDFF) | 0x200; while (base[7] & 0x100) @@ -73,7 +76,7 @@ static int _i2c_recv_pkt(u32 idx, u8 *buf, u32 size, u32 x) if (base[7] << 28) return 0; - u32 tmp = base[3]; //Get value. + u32 tmp = base[3]; // Get value. memcpy(buf, &tmp, size); return 1; @@ -102,7 +105,7 @@ int i2c_send_buf_small(u32 idx, u32 x, u32 y, u8 *buf, u32 size) { u8 tmp[4]; - if (size > 3) + if (size > 3) return 0; tmp[0] = y; diff --git a/ipl/i2c.h b/ipl/i2c.h index 699bc48..f42d40d 100755 --- a/ipl/i2c.h +++ b/ipl/i2c.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _I2C_H_ #define _I2C_H_ diff --git a/ipl/ini.c b/ipl/ini.c index 275f6d1..db70233 100755 --- a/ipl/ini.c +++ b/ipl/ini.c @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include @@ -40,16 +40,16 @@ int ini_parse(link_t *dst, char *ini_path) do { - //Fetch one line. + // Fetch one line. lbuf[0] = 0; f_gets(lbuf, 512, &fp); lblen = strlen(lbuf); - //Remove trailing newline. + // Remove trailing newline. if (lbuf[lblen - 1] == '\n') lbuf[lblen - 1] = 0; - if (lblen > 2 && lbuf[0] == '[') //Create new section. + if (lblen > 2 && lbuf[0] == '[') // Create new section. { if (csec) { @@ -101,7 +101,6 @@ int ini_parse(link_t *dst, char *ini_path) csec = (ini_sec_t *)malloc(sizeof(ini_sec_t)); csec->name = _strdup(&lbuf[1]); csec->type = INI_COMMENT; - } else if (lblen <= 1) { diff --git a/ipl/ini.h b/ipl/ini.h index af6b367..67a4fc9 100755 --- a/ipl/ini.h +++ b/ipl/ini.h @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _INI_H_ #define _INI_H_ @@ -49,3 +49,4 @@ ini_sec_t *ini_clone_section(ini_sec_t *cfg); void ini_free_section(ini_sec_t *cfg); #endif + diff --git a/ipl/kfuse.c b/ipl/kfuse.c index 03d95bb..a9c8c4e 100755 --- a/ipl/kfuse.c +++ b/ipl/kfuse.c @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "kfuse.h" #include "clock.h" diff --git a/ipl/kfuse.h b/ipl/kfuse.h index 4aa1b09..27366d7 100755 --- a/ipl/kfuse.h +++ b/ipl/kfuse.h @@ -1,32 +1,32 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _KFUSE_H_ #define _KFUSE_H_ #include "types.h" -#define KFUSE_STATE_SOFTRESET (1<<31) -#define KFUSE_STATE_STOP (1<<25) -#define KFUSE_STATE_RESTART (1<<24) -#define KFUSE_STATE_CRCPASS (1<<17) -#define KFUSE_STATE_DONE (1<<16) -#define KFUSE_STATE_ERRBLOCK_MASK 0x3F00 +#define KFUSE_STATE_SOFTRESET (1 << 31) +#define KFUSE_STATE_STOP (1 << 25) +#define KFUSE_STATE_RESTART (1 << 24) +#define KFUSE_STATE_CRCPASS (1 << 17) +#define KFUSE_STATE_DONE (1 << 16) +#define KFUSE_STATE_ERRBLOCK_MASK 0x3F00 #define KFUSE_STATE_ERRBLOCK_SHIFT 8 -#define KFUSE_STATE_CURBLOCK_MASK 0x3F +#define KFUSE_STATE_CURBLOCK_MASK 0x3F #define KFUSE_KEYADDR_AUTOINC (1<<16) diff --git a/ipl/list.h b/ipl/list.h index 873cbf8..7d43e36 100755 --- a/ipl/list.h +++ b/ipl/list.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _LIST_H_ #define _LIST_H_ diff --git a/ipl/main.c b/ipl/main.c index 7dc9676..bd21575 100755 --- a/ipl/main.c +++ b/ipl/main.c @@ -1,22 +1,22 @@ /* -* Copyright (c) 2018 naehrwert -* -* Copyright (c) 2018 Rajko Stojadinovic -* Copyright (c) 2018 CTCaer -* Copyright (c) 2018 Reisyukaku -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * Copyright (c) 2018 Rajko Stojadinovic + * Copyright (c) 2018 CTCaer + * Copyright (c) 2018 Reisyukaku + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include #include @@ -144,12 +144,13 @@ void *sd_file_read(char *path) return buf; } -int sd_save_to_file(void * buf, u32 size, const char * filename) +int sd_save_to_file(void *buf, u32 size, const char *filename) { FIL fp; u32 res = 0; res = f_open(&fp, filename, FA_CREATE_ALWAYS | FA_WRITE); - if (res) { + if (res) + { EPRINTFARGS("Error (%d) creating file\n%s.\n", res, filename); return 1; } @@ -183,12 +184,11 @@ void emmcsn_path_impl(char *path, char *sub_dir, char *filename, sdmmc_storage_t } else itoa(storage->cid.serial, emmcSN, 16); - - u32 sub_dir_len = strlen(sub_dir); // Can be a null-terminator. - u32 filename_len = strlen(filename); // Can be a null-terminator. + u32 sub_dir_len = strlen(sub_dir); // Can be a null-terminator. + u32 filename_len = strlen(filename); // Can be a null-terminator. - memcpy(path + strlen(path), "/", 2); + memcpy(path + strlen(path), "/", 2); memcpy(path + strlen(path), emmcSN, 9); f_mkdir(path); memcpy(path + strlen(path), sub_dir, sub_dir_len + 1); @@ -323,7 +323,7 @@ void config_se_brom() memset((void *)0x7C010000, 0, 0x10000); PMC(APBDEV_PMC_CRYPTO_OP) = 0; SE(SE_INT_STATUS_REG_OFFSET) = 0x1F; - //Lock SSK (although it's not set and unused anyways). + // Lock SSK (although it's not set and unused anyways). SE(SE_KEY_TABLE_ACCESS_REG_OFFSET + 15 * 4) = 0x7E; // Clear the boot reason to avoid problems later PMC(APBDEV_PMC_SCRATCH200) = 0x0; @@ -393,6 +393,27 @@ void config_hw() sdram_lp0_save_params(sdram_get_params()); } +void reconfig_hw_workaround(int extra_reconfig) +{ + // Re-enable clocks to Audio Processing Engine as a workaround to hanging. + CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_V) |= 0x400; // Enable AHUB clock. + CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_Y) |= 0x40; // Enable APE clock. + + if (extra_reconfig) + { + PMC(APBDEV_PMC_PWR_DET_VAL) |= (1 << 12); + + clock_disable_cl_dvfs(); + + // Disable Joy-con GPIOs. + gpio_config(GPIO_PORT_G, GPIO_PIN_0, GPIO_MODE_SPIO); + gpio_config(GPIO_PORT_D, GPIO_PIN_1, GPIO_MODE_SPIO); + gpio_config(GPIO_PORT_E, GPIO_PIN_6, GPIO_MODE_SPIO); + gpio_config(GPIO_PORT_H, GPIO_PIN_6, GPIO_MODE_SPIO); + } + +} + void print_fuseinfo() { gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); @@ -476,7 +497,7 @@ void print_mmc_info() gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_con_setpos(&gfx_con, 0, 0); - static const u32 SECTORS_TO_MIB_COEFF = 11; + static const u32 SECTORS_TO_MIB_COEFF = 11; sdmmc_storage_t storage; sdmmc_t sdmmc; @@ -497,33 +518,33 @@ void print_mmc_info() case 0: /* MMC v1.0 - v1.2 */ case 1: /* MMC v1.4 */ gfx_printf(&gfx_con, - " Vendor ID: %03X\n" - " Model: %c%c%c%c%c%c%c\n" - " HW rev: %X\n" - " FW rev: %X\n" - " S/N: %03X\n" - " Month/Year: %02d/%04d\n\n", - storage.cid.manfid, - storage.cid.prod_name[0], storage.cid.prod_name[1], storage.cid.prod_name[2], - storage.cid.prod_name[3], storage.cid.prod_name[4], storage.cid.prod_name[5], - storage.cid.prod_name[6], storage.cid.hwrev, storage.cid.fwrev, - storage.cid.serial, storage.cid.month, storage.cid.year); + " Vendor ID: %03X\n" + " Model: %c%c%c%c%c%c%c\n" + " HW rev: %X\n" + " FW rev: %X\n" + " S/N: %03X\n" + " Month/Year: %02d/%04d\n\n", + storage.cid.manfid, + storage.cid.prod_name[0], storage.cid.prod_name[1], storage.cid.prod_name[2], + storage.cid.prod_name[3], storage.cid.prod_name[4], storage.cid.prod_name[5], + storage.cid.prod_name[6], storage.cid.hwrev, storage.cid.fwrev, + storage.cid.serial, storage.cid.month, storage.cid.year); break; case 2: /* MMC v2.0 - v2.2 */ case 3: /* MMC v3.1 - v3.3 */ case 4: /* MMC v4 */ gfx_printf(&gfx_con, - " Vendor ID: %X\n" - " Card/BGA: %X\n" - " OEM ID: %02X\n" - " Model: %c%c%c%c%c%c\n" - " Prd Rev: %X\n" - " S/N: %04X\n" - " Month/Year: %02d/%04d\n\n", - storage.cid.manfid, storage.cid.card_bga, storage.cid.oemid, - storage.cid.prod_name[0], storage.cid.prod_name[1], storage.cid.prod_name[2], - storage.cid.prod_name[3], storage.cid.prod_name[4], storage.cid.prod_name[5], - storage.cid.prv, storage.cid.serial, storage.cid.month, storage.cid.year); + " Vendor ID: %X\n" + " Card/BGA: %X\n" + " OEM ID: %02X\n" + " Model: %c%c%c%c%c%c\n" + " Prd Rev: %X\n" + " S/N: %04X\n" + " Month/Year: %02d/%04d\n\n", + storage.cid.manfid, storage.cid.card_bga, storage.cid.oemid, + storage.cid.prod_name[0], storage.cid.prod_name[1], storage.cid.prod_name[2], + storage.cid.prod_name[3], storage.cid.prod_name[4], storage.cid.prod_name[5], + storage.cid.prv, storage.cid.serial, storage.cid.month, storage.cid.year); break; default: EPRINTFARGS("eMMC has unknown MMCA version %d", storage.csd.mmca_vsn); @@ -628,8 +649,8 @@ out: void print_sdcard_info() { - static const u32 SECTORS_TO_MIB_COEFF = 11; - + static const u32 SECTORS_TO_MIB_COEFF = 11; + gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_con_setpos(&gfx_con, 0, 0); @@ -702,10 +723,9 @@ void print_tsec_key() (char *)pkg1 + 0x10); goto out_wait; } - u8 keys[0x10 * 3]; - for(u32 i = 1; i <= 3; i++) + for (u32 i = 1; i <= 3; i++) { int res = tsec_query(keys + ((i - 1) * 0x10), i, pkg1 + pkg1_id->tsec_off); @@ -721,7 +741,7 @@ void print_tsec_key() } gfx_puts(&gfx_con, "\nPress POWER to dump them to SD Card.\nPress VOL to go to the menu.\n"); - + u32 btn = btn_wait(); if (btn & BTN_POWER) { @@ -736,11 +756,11 @@ void print_tsec_key() } else goto out; - -out_wait:; + +out_wait: btn_wait(); - -out:; + +out: free(pkg1); } @@ -775,7 +795,7 @@ void power_off() i2c_send_byte(I2C_5, 0x3C, MAX77620_REG_ONOFFCNFG1, MAX77620_ONOFFCNFG1_PWR_OFF); } -int dump_emmc_verify(sdmmc_storage_t *storage, u32 lba_curr, char* outFilename, emmc_part_t *part) +int dump_emmc_verify(sdmmc_storage_t *storage, u32 lba_curr, char *outFilename, emmc_part_t *part) { FIL fp; u32 prevPct = 200; @@ -786,8 +806,8 @@ int dump_emmc_verify(sdmmc_storage_t *storage, u32 lba_curr, char* outFilename, if (f_open(&fp, outFilename, FA_READ) == FR_OK) { - u32 totalSectorsVer = (u32)((u64)f_size(&fp)>>(u64)9); - + u32 totalSectorsVer = (u32)((u64)f_size(&fp) >> (u64)9); + u32 numSectorsPerIter = 0; if (totalSectorsVer > 0x200000) numSectorsPerIter = 8192; //4MB Cache @@ -809,7 +829,7 @@ int dump_emmc_verify(sdmmc_storage_t *storage, u32 lba_curr, char* outFilename, { gfx_con.fntsz = 16; EPRINTFARGS("\nFailed to read %d blocks (@LBA %08X),\nfrom eMMC!\n\nVerification failed..\n", - num, lba_curr); + num, lba_curr); free(bufEm); free(bufSd); @@ -981,7 +1001,7 @@ int dump_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part) } FIL fp; - gfx_con_getpos(&gfx_con, &gfx_con.savedx, &gfx_con.savedy); + gfx_con_getpos(&gfx_con, &gfx_con.savedx, &gfx_con.savedy); gfx_printf(&gfx_con, "Filename: %s\n\n", outFilename); res = f_open(&fp, outFilename, FA_CREATE_ALWAYS | FA_WRITE); if (res) @@ -1077,7 +1097,7 @@ int dump_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part) } // Create next part. - gfx_con_setpos(&gfx_con, gfx_con.savedx, gfx_con.savedy); + gfx_con_setpos(&gfx_con, gfx_con.savedx, gfx_con.savedy); gfx_printf(&gfx_con, "Filename: %s\n\n", outFilename); lbaStartPart = lba_curr; res = f_open(&fp, outFilename, FA_CREATE_ALWAYS | FA_WRITE); @@ -1104,7 +1124,7 @@ int dump_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part) { gfx_con.fntsz = 16; EPRINTFARGS("\nFailed to read %d blocks @ LBA %08X\nfrom eMMC. Aborting..\n", - num, lba_curr); + num, lba_curr); EPRINTF("\nPress any key and try again...\n"); free(buf); @@ -1219,7 +1239,7 @@ static void dump_emmc_selected(emmcPartType_t dumpType) emmc_part_t bootPart; memset(&bootPart, 0, sizeof(bootPart)); bootPart.lba_start = 0; - bootPart.lba_end = (BOOT_PART_SIZE/NX_EMMC_BLOCKSIZE)-1; + bootPart.lba_end = (BOOT_PART_SIZE / NX_EMMC_BLOCKSIZE) - 1; for (i = 0; i < 2; i++) { memcpy(bootPart.name, "BOOT", 5); @@ -1229,7 +1249,7 @@ static void dump_emmc_selected(emmcPartType_t dumpType) gfx_printf(&gfx_con, "%k%02d: %s (%07X-%07X)%k\n", 0xFF00DDFF, i, bootPart.name, bootPart.lba_start, bootPart.lba_end, 0xFFCCCCCC); - sdmmc_storage_set_mmc_partition(&storage, i+1); + sdmmc_storage_set_mmc_partition(&storage, i + 1); emmcsn_path_impl(sdPath, "", bootPart.name, &storage); res = dump_emmc_part(sdPath, &storage, &bootPart); @@ -1265,13 +1285,13 @@ static void dump_emmc_selected(emmcPartType_t dumpType) if (dumpType & PART_RAW) { - // Get GP partition size dynamically. + // Get GP partition size dynamically. const u32 RAW_AREA_NUM_SECTORS = storage.sec_cnt; emmc_part_t rawPart; memset(&rawPart, 0, sizeof(rawPart)); rawPart.lba_start = 0; - rawPart.lba_end = RAW_AREA_NUM_SECTORS-1; + rawPart.lba_end = RAW_AREA_NUM_SECTORS - 1; strcpy(rawPart.name, "rawnand.bin"); { gfx_printf(&gfx_con, "%k%02d: %s (%07X-%07X)%k\n", 0xFF00DDFF, i++, @@ -1288,11 +1308,11 @@ static void dump_emmc_selected(emmcPartType_t dumpType) gfx_printf(&gfx_con, "Time taken: %dm %ds.\n", timer / 60, timer % 60); sdmmc_storage_end(&storage); if (res && h_cfg.verification) - gfx_printf(&gfx_con, "\n%kFinished and verified!%k\nPress any key...\n",0xFF96FF00, 0xFFCCCCCC); + gfx_printf(&gfx_con, "\n%kFinished and verified!%k\nPress any key...\n", 0xFF96FF00, 0xFFCCCCCC); else if (res) gfx_printf(&gfx_con, "\nFinished! Press any key...\n"); -out:; +out: sd_unmount(); btn_wait(); } @@ -1314,7 +1334,6 @@ int restore_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part gfx_con.fntsz = 8; FIL fp; - gfx_con_getpos(&gfx_con, &gfx_con.savedx, &gfx_con.savedy); gfx_printf(&gfx_con, "\nFilename: %s\n", outFilename); res = f_open(&fp, outFilename, FA_READ); @@ -1326,7 +1345,7 @@ int restore_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part return 0; } //TODO: Should we keep this check? - else if (((u32)((u64)f_size(&fp)>>(u64)9)) != totalSectors) + else if (((u32)((u64)f_size(&fp) >> (u64)9)) != totalSectors) { gfx_con.fntsz = 16; EPRINTF("Size of the SD Card backup does not match,\neMMC's selected part size.\n"); @@ -1335,7 +1354,7 @@ int restore_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part return 0; } else - gfx_printf(&gfx_con, "\nTotal restore size: %d MiB.\n\n", ((u32)((u64)f_size(&fp)>>(u64)9)) >> SECTORS_TO_MIB_COEFF); + gfx_printf(&gfx_con, "\nTotal restore size: %d MiB.\n\n", ((u32)((u64)f_size(&fp) >> (u64)9)) >> SECTORS_TO_MIB_COEFF); u32 numSectorsPerIter = 0; if (totalSectors > 0x200000) @@ -1378,7 +1397,7 @@ int restore_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part { gfx_con.fntsz = 16; EPRINTFARGS("\nFailed to write %d blocks @ LBA %08X\nfrom eMMC. Aborting..\n", - num, lba_curr); + num, lba_curr); EPRINTF("\nYour device may be in an inoperative state!\n\nPress any key and try again...\n"); free(buf); @@ -1441,7 +1460,7 @@ static void restore_emmc_selected(emmcPartType_t restoreType) gfx_puts(&gfx_con, "partitions that it can find.\n"); gfx_puts(&gfx_con, "If it is not found, it will be skipped\nand continue with the next.\n\n"); } - gfx_con_getpos(&gfx_con, &gfx_con.savedx, &gfx_con.savedy); + gfx_con_getpos(&gfx_con, &gfx_con.savedx, &gfx_con.savedy); u8 value = 10; while (value > 0) @@ -1481,7 +1500,7 @@ static void restore_emmc_selected(emmcPartType_t restoreType) emmc_part_t bootPart; memset(&bootPart, 0, sizeof(bootPart)); bootPart.lba_start = 0; - bootPart.lba_end = (BOOT_PART_SIZE/NX_EMMC_BLOCKSIZE)-1; + bootPart.lba_end = (BOOT_PART_SIZE / NX_EMMC_BLOCKSIZE) - 1; for (i = 0; i < 2; i++) { memcpy(bootPart.name, "BOOT", 4); @@ -1491,7 +1510,7 @@ static void restore_emmc_selected(emmcPartType_t restoreType) gfx_printf(&gfx_con, "%k%02d: %s (%07X-%07X)%k\n", 0xFF00DDFF, i, bootPart.name, bootPart.lba_start, bootPart.lba_end, 0xFFCCCCCC); - sdmmc_storage_set_mmc_partition(&storage, i+1); + sdmmc_storage_set_mmc_partition(&storage, i + 1); emmcsn_path_impl(sdPath, "/Restore", bootPart.name, &storage); res = restore_emmc_part(sdPath, &storage, &bootPart); @@ -1517,13 +1536,13 @@ static void restore_emmc_selected(emmcPartType_t restoreType) if (restoreType & PART_RAW) { - // Get GP partition size dynamically. + // Get GP partition size dynamically. const u32 RAW_AREA_NUM_SECTORS = storage.sec_cnt; emmc_part_t rawPart; memset(&rawPart, 0, sizeof(rawPart)); rawPart.lba_start = 0; - rawPart.lba_end = RAW_AREA_NUM_SECTORS-1; + rawPart.lba_end = RAW_AREA_NUM_SECTORS - 1; strcpy(rawPart.name, "rawnand.bin"); { gfx_printf(&gfx_con, "%k%02d: %s (%07X-%07X)%k\n", 0xFF00DDFF, i++, @@ -1539,11 +1558,11 @@ static void restore_emmc_selected(emmcPartType_t restoreType) gfx_printf(&gfx_con, "Time taken: %dm %ds.\n", timer / 60, timer % 60); sdmmc_storage_end(&storage); if (res && h_cfg.verification) - gfx_printf(&gfx_con, "\n%kFinished and verified!%k\nPress any key...\n",0xFF96FF00, 0xFFCCCCCC); + gfx_printf(&gfx_con, "\n%kFinished and verified!%k\nPress any key...\n", 0xFF96FF00, 0xFFCCCCCC); else if (res) gfx_printf(&gfx_con, "\nFinished! Press any key...\n"); -out:; +out: sd_unmount(); btn_wait(); } @@ -1611,7 +1630,6 @@ void dump_packages12() gfx_printf(&gfx_con, "%kWarmboot addr: %k0x%05X\n", 0xFFC7EA46, 0xFFCCCCCC, pkg1_id->warmboot_base); gfx_printf(&gfx_con, "%kWarmboot size: %k0x%05X\n\n", 0xFFC7EA46, 0xFFCCCCCC, hdr->wb_size); - char path[64]; // Dump package1.1. emmcsn_path_impl(path, "/pkg1", "pkg1_decr.bin", &storage); @@ -1663,7 +1681,7 @@ void dump_packages12() // Display info. u32 kernel_crc32 = crc32c(pkg2_hdr->data, pkg2_hdr->sec_size[PKG2_SEC_KERNEL]); - gfx_printf(&gfx_con, "\n%kKernel CRC32C: %k0x%08X\n\n",0xFFC7EA46, 0xFFCCCCCC, kernel_crc32); + gfx_printf(&gfx_con, "\n%kKernel CRC32C: %k0x%08X\n\n", 0xFFC7EA46, 0xFFCCCCCC, kernel_crc32); gfx_printf(&gfx_con, "%kKernel size: %k0x%05X\n\n", 0xFFC7EA46, 0xFFCCCCCC, pkg2_hdr->sec_size[PKG2_SEC_KERNEL]); gfx_printf(&gfx_con, "%kINI1 size: %k0x%05X\n\n", 0xFFC7EA46, 0xFFCCCCCC, pkg2_hdr->sec_size[PKG2_SEC_INI1]); @@ -1685,10 +1703,10 @@ void dump_packages12() pkg2_hdr->sec_size[PKG2_SEC_INI1], path)) goto out; gfx_puts(&gfx_con, "INI1 kip1 package dumped to ini1.bin\n"); - + gfx_puts(&gfx_con, "\nDone. Press any key...\n"); -out:; +out: free(pkg1); free(secmon); free(warmboot); @@ -1850,8 +1868,8 @@ void auto_launch_firmware() { if (!strcmp("logopath", kv->key)) bootlogoCustomEntry = kv->val; - } - break; + } + break; } boot_entry_id++; } @@ -1962,7 +1980,7 @@ void auto_launch_firmware() #endif //MENU_LOGO_ENABLE } -out:; +out: gfx_clear_grey(&gfx_ctxt, 0x1B); ini_free(&ini_sections); ini_free_section(cfg_sec); @@ -1974,7 +1992,8 @@ out:; display_backlight(1); } -void toggle_autorcm(){ +void toggle_autorcm() +{ sdmmc_storage_t storage; sdmmc_t sdmmc; @@ -1989,7 +2008,7 @@ void toggle_autorcm(){ u8 *tempbuf = (u8 *)malloc(0x200); sdmmc_storage_set_mmc_partition(&storage, 1); - + int i, sect = 0; for (i = 0; i < 4; i++) { @@ -1998,13 +2017,13 @@ void toggle_autorcm(){ tempbuf[0x10] ^= 0x77; // !IMPORTANT: DO NOT CHANGE! XOR by arbitrary number to corrupt. sdmmc_storage_write(&storage, sect, 1, tempbuf); } - + free(tempbuf); sdmmc_storage_end(&storage); - + gfx_printf(&gfx_con, "%kAutoRCM mode toggled!%k\n\nPress any key...\n", 0xFF96FF00, 0xFFCCCCCC); -out:; +out: btn_wait(); } @@ -2029,7 +2048,7 @@ int fix_attributes(char *path, u32 *total, u32 is_root, u32 check_first_run) f_chmod(path, 0, AM_ARC); } } - + // Open directory. res = f_opendir(&dir, path); if (res != FR_OK) @@ -2054,7 +2073,7 @@ int fix_attributes(char *path, u32 *total, u32 is_root, u32 check_first_run) // Set new directory or file. memcpy(&path[dirLength], "/", 1); - memcpy(&path[dirLength+1], fno.fname, strlen(fno.fname) + 1); + memcpy(&path[dirLength + 1], fno.fname, strlen(fno.fname) + 1); // Check if archive bit is set. if (fno.fattrib & AM_ARC) @@ -2101,7 +2120,7 @@ void fix_sd_attr(u32 type) memcpy(label, "switch folder", 14); break; } - + gfx_printf(&gfx_con, "Traversing all %s files!\nThis may take some time, please wait...\n\n", label); fix_attributes(path, &total, !type, type); gfx_printf(&gfx_con, "%kTotal archive bits cleared: %d!%k\n\nDone! Press any key...", 0xFF96FF00, total, 0xFFCCCCCC); @@ -2391,42 +2410,42 @@ void fix_battery_desync() void about() { static const char credits[] = - "\nhekate (C) 2018 naehrwert, st4rk\n\n" - "CTCaer mod (C) 2018 CTCaer\n" - " ___________________________________________\n\n" - "Thanks to: %kderrek, nedwill, plutoo,\n" - " shuffle2, smea, thexyz, yellows8%k\n" - " ___________________________________________\n\n" - "Greetings to: fincs, hexkyz, SciresM,\n" - " Shiny Quagsire, WinterMute\n" - " ___________________________________________\n\n" - "Open source and free packages used:\n\n" - " - FatFs R0.13b,\n" - " Copyright (C) 2018, ChaN\n\n" - " - bcl-1.2.0,\n" - " Copyright (C) 2003-2006, Marcus Geelnard\n\n" - " - Atmosphere (SE sha256, prc id patches),\n" - " Copyright (C) 2018, Atmosphere-NX\n" - " ___________________________________________\n\n"; + "\nhekate (C) 2018 naehrwert, st4rk\n\n" + "CTCaer mod (C) 2018 CTCaer\n" + " ___________________________________________\n\n" + "Thanks to: %kderrek, nedwill, plutoo,\n" + " shuffle2, smea, thexyz, yellows8%k\n" + " ___________________________________________\n\n" + "Greetings to: fincs, hexkyz, SciresM,\n" + " Shiny Quagsire, WinterMute\n" + " ___________________________________________\n\n" + "Open source and free packages used:\n\n" + " - FatFs R0.13b,\n" + " Copyright (C) 2018, ChaN\n\n" + " - bcl-1.2.0,\n" + " Copyright (C) 2003-2006, Marcus Geelnard\n\n" + " - Atmosphere (SE sha256, prc id patches),\n" + " Copyright (C) 2018, Atmosphere-NX\n" + " ___________________________________________\n\n"; static const char octopus[] = - " %k___\n" - " .-' `'.\n" - " / \\\n" - " | ;\n" - " | | ___.--,\n" - " _.._ |0) = (0) | _.---'`__.-( (_.\n" - " __.--'`_.. '.__.\\ '--. \\_.-' ,.--'` `\"\"`\n" - " ( ,.--'` ',__ /./; ;, '.__.'` __\n" - " _`) ) .---.__.' / | |\\ \\__..--\"\" \"\"\"--.,_\n" - " `---' .'.''-._.-'`_./ /\\ '. \\ _.--''````'''--._`-.__.'\n" - " | | .' _.-' | | \\ \\ '. `----`\n" - " \\ \\/ .' \\ \\ '. '-._)\n" - " \\/ / \\ \\ `=.__`'-.\n" - " / /\\ `) ) / / `\"\".`\\\n" - " , _.-'.'\\ \\ / / ( ( / /\n" - " `--'` ) ) .-'.' '.'. | (\n" - " (/` ( (` ) ) '-; %k[switchbrew]%k\n" - " ` '-; (-'%k"; + " %k___\n" + " .-' `'.\n" + " / \\\n" + " | ;\n" + " | | ___.--,\n" + " _.._ |0) = (0) | _.---'`__.-( (_.\n" + " __.--'`_.. '.__.\\ '--. \\_.-' ,.--'` `\"\"`\n" + " ( ,.--'` ',__ /./; ;, '.__.'` __\n" + " _`) ) .---.__.' / | |\\ \\__..--\"\" \"\"\"--.,_\n" + " `---' .'.''-._.-'`_./ /\\ '. \\ _.--''````'''--._`-.__.'\n" + " | | .' _.-' | | \\ \\ '. `----`\n" + " \\ \\/ .' \\ \\ '. '-._)\n" + " \\/ / \\ \\ `=.__`'-.\n" + " / /\\ `) ) / / `\"\".`\\\n" + " , _.-'.'\\ \\ / / ( ( / /\n" + " `--'` ) ) .-'.' '.'. | (\n" + " (/` ( (` ) ) '-; %k[switchbrew]%k\n" + " ` '-; (-'%k"; gfx_clear_grey(&gfx_ctxt, 0x1B); gfx_con_setpos(&gfx_con, 0, 0); diff --git a/ipl/max17050.c b/ipl/max17050.c index 47c532f..29f0248 100644 --- a/ipl/max17050.c +++ b/ipl/max17050.c @@ -49,66 +49,66 @@ int max17050_get_property(enum MAX17050_reg reg, int *value) switch (reg) { - case MAX17050_Age: //Age (percent). Based on 100% x (FullCAP Register/DesignCap). + case MAX17050_Age: // Age (percent). Based on 100% x (FullCAP Register/DesignCap). i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_Age); *value = data >> 8; /* Show MSB. 1% increments */ break; - case MAX17050_Cycles: //Cycle count. + case MAX17050_Cycles: // Cycle count. i2c_recv_buf_small((u8 *)value, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_Cycles); break; - case MAX17050_MinVolt: //Voltage max/min + case MAX17050_MinVolt: // Voltage max/min i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_MinMaxVolt); *value = (data & 0xff) * 20; /* Voltage MIN. Units of 20mV */ break; - case MAX17050_MaxVolt: //Voltage max/min + case MAX17050_MaxVolt: // Voltage max/min i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_MinMaxVolt); *value = (data >> 8) * 20; /* Voltage MAX. Units of LSB = 20mV */ break; - case MAX17050_V_empty: //Voltage min design. + case MAX17050_V_empty: // Voltage min design. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_V_empty); *value = (data >> 7) * 10; /* Units of LSB = 10mV */ break; - case MAX17050_VCELL: //Voltage now. + case MAX17050_VCELL: // Voltage now. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_VCELL); *value = data * 625 / 8 / 1000; break; - case MAX17050_AvgVCELL: //Voltage avg. + case MAX17050_AvgVCELL: // Voltage avg. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_AvgVCELL); *value = data * 625 / 8 / 1000; break; - case MAX17050_OCVInternal: //Voltage ocv. + case MAX17050_OCVInternal: // Voltage ocv. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_OCVInternal); *value = data * 625 / 8 / 1000; break; - case MAX17050_RepSOC: //Capacity %. + case MAX17050_RepSOC: // Capacity %. i2c_recv_buf_small((u8 *)value, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_RepSOC); break; - case MAX17050_DesignCap: //Charge full design. + case MAX17050_DesignCap: // Charge full design. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_DesignCap); data = data * 5 / 10; *value = data; break; - case MAX17050_FullCAP: //Charge full. + case MAX17050_FullCAP: // Charge full. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_FullCAP); data = data * 5 / 10; *value = data; break; - case MAX17050_RepCap: //Charge now. + case MAX17050_RepCap: // Charge now. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_RepCap); data = data * 5 / 10; *value = data; break; - case MAX17050_TEMP: //Temp. + case MAX17050_TEMP: // Temp. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_TEMP); *value = (s16)data; *value = *value * 10 / 256; break; - case MAX17050_Current: //Current now. + case MAX17050_Current: // Current now. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_Current); *value = (s16)data; *value *= 1562500 / MAX17050_DEFAULT_SNS_RESISTOR; break; - case MAX17050_AvgCurrent: //Current avg. + case MAX17050_AvgCurrent: // Current avg. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_AvgCurrent); *value = (s16)data; *value *= 1562500 / MAX17050_DEFAULT_SNS_RESISTOR; @@ -125,10 +125,12 @@ static int _max17050_write_verify_reg(u8 reg, u16 value) int ret; u16 read_value; - do { + do + { ret = i2c_send_buf_small(I2C_1, MAXIM17050_I2C_ADDR, reg, (u8 *)&value, 2); i2c_recv_buf_small((u8 *)&read_value, 2, I2C_1, MAXIM17050_I2C_ADDR, reg); - if (read_value != value) { + if (read_value != value) + { ret = -1; retries--; } @@ -152,7 +154,6 @@ static void _max17050_load_new_capacity_params() dp_acc = 0x5e09; // =||= repSoc = 0x6400; // 100%. - _max17050_write_verify_reg(MAX17050_RemCap, fullcap); _max17050_write_verify_reg(MAX17050_RepCap, fullcap); @@ -182,7 +183,7 @@ static void _max17050_reset_vfsoc0_reg() static void _max17050_update_capacity_regs() { - u16 value = 0x2476; //Set to 4667mAh design capacity. + u16 value = 0x2476; // Set to 4667mAh design capacity. _max17050_write_verify_reg(MAX17050_FullCAP, value); _max17050_write_verify_reg(MAX17050_FullCAPNom, value); //i2c_send_buf_small(I2C_1, MAXIM17050_I2C_ADDR, MAX17050_DesignCap, config->design_cap, 2); @@ -210,7 +211,7 @@ static void _max17050_override_por_values() { u16 dq_acc = 0x10bc; // From a healthy fuel gauge. u16 dp_acc = 0x5e09; // =||= - + _max17050_override_por(MAX17050_dQacc, dq_acc); _max17050_override_por(MAX17050_dPacc, dp_acc); @@ -218,7 +219,7 @@ static void _max17050_override_por_values() //_max17050_override_por(MAX17050_TempCo, config->tcompc0); //0x1b22 //u16 k_empty0 = 0x439; - //_max17050_override_por(map, MAX17050_K_empty0, k_empty0); // unknown cell data + //_max17050_override_por(map, MAX17050_K_empty0, k_empty0); // Unknown cell data } static void _max17050_set_por_bit(u16 value) @@ -241,7 +242,6 @@ int max17050_fix_configuration() /* Initialize configaration */ _max17050_write_config_regs(); - /* update capacity params */ _max17050_update_capacity_regs(); diff --git a/ipl/max7762x.c b/ipl/max7762x.c index a5c25db..713e3ea 100755 --- a/ipl/max7762x.c +++ b/ipl/max7762x.c @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "max7762x.h" #include "max77620.h" diff --git a/ipl/max7762x.h b/ipl/max7762x.h index efcb761..c86f69e 100755 --- a/ipl/max7762x.h +++ b/ipl/max7762x.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _MAX7762X_H_ #define _MAX7762X_H_ @@ -24,11 +24,11 @@ * Name | Usage | uV step | uV min | uV default | uV max | Init *-------+---------------+---------+--------+------------+---------+------------------ * sd0 | core | 12500 | 600000 | 625000 | 1400000 | 1.125V (pkg1.1) -* sd1 | SDRAM | 12500 | 600000 | 1125000 | 1125000 | 1.1V (pkg1.1) +* sd1 | SDRAM | 12500 | 600000 | 1125000 | 1125000 | 1.1V (pkg1.1) * sd2 | ldo{0-1, 7-8} | 12500 | 600000 | 1325000 | 1350000 | 1.325V (pcv) * sd3 | 1.8V general | 12500 | 600000 | 1800000 | 1800000 | -* ldo0 | Display Panel | 25000 | 800000 | 1200000 | 1200000 | 1.2V (pkg1.1) -* ldo1 | XUSB | 25000 | 800000 | 1050000 | 1050000 | 1.05V (pcv) +* ldo0 | Display Panel | 25000 | 800000 | 1200000 | 1200000 | 1.2V (pkg1.1) +* ldo1 | XUSB, PCIE | 25000 | 800000 | 1050000 | 1050000 | 1.05V (pcv) * ldo2 | SDMMC1 | 50000 | 800000 | 1800000 | 3300000 | * ldo3 | | 50000 | 800000 | 3100000 | 3100000 | * ldo4 | RTC | 12500 | 800000 | 850000 | 850000 | diff --git a/ipl/mc.c b/ipl/mc.c index eae6622..f1a86d9 100755 --- a/ipl/mc.c +++ b/ipl/mc.c @@ -20,7 +20,7 @@ void mc_config_carveout() MC(MC_VIDEO_PROTECT_SIZE_MB) = 0; MC(MC_VIDEO_PROTECT_REG_CTRL) = 1; - //Configure TSEC carveout @ 0x90000000, 1MB. + // Configure TSEC carveout @ 0x90000000, 1MB. //mc_config_tsec_carveout(0x90000000, 1, 0); mc_config_tsec_carveout(0, 0, 1); @@ -42,20 +42,7 @@ void mc_config_carveout() MC(MC_SECURITY_CARVEOUT1_CLIENT_FORCE_INTERNAL_ACCESS3) = 0; MC(MC_SECURITY_CARVEOUT1_CLIENT_FORCE_INTERNAL_ACCESS4) = 0; MC(MC_SECURITY_CARVEOUT1_CFG0) = 0x4000006; - MC(MC_SECURITY_CARVEOUT2_BOM) = 0x80020000; - MC(MC_SECURITY_CARVEOUT2_BOM_HI) = 0; - MC(MC_SECURITY_CARVEOUT2_SIZE_128KB) = 2; - MC(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS0) = 0; - MC(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS1) = 0; - MC(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS2) = 0x3000000; - MC(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS3) = 0; - MC(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS4) = 0x300; - MC(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS0) = 0; - MC(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS1) = 0; - MC(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS2) = 0; - MC(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS3) = 0; - MC(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS4) = 0; - MC(MC_SECURITY_CARVEOUT2_CFG0) = 0x440167E; + MC(MC_SECURITY_CARVEOUT3_BOM) = 0; MC(MC_SECURITY_CARVEOUT3_BOM_HI) = 0; MC(MC_SECURITY_CARVEOUT3_SIZE_128KB) = 0; @@ -100,6 +87,24 @@ void mc_config_carveout() MC(MC_SECURITY_CARVEOUT5_CFG0) = 0x8F; } +void mc_config_carveout_finalize() +{ + MC(MC_SECURITY_CARVEOUT2_BOM) = 0x80020000; + MC(MC_SECURITY_CARVEOUT2_BOM_HI) = 0; + MC(MC_SECURITY_CARVEOUT2_SIZE_128KB) = 2; + MC(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS0) = 0; + MC(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS1) = 0; + MC(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS2) = 0x3000000; + MC(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS3) = 0; + MC(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS4) = 0x300; + MC(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS0) = 0; + MC(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS1) = 0; + MC(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS2) = 0; + MC(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS3) = 0; + MC(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS4) = 0; + MC(MC_SECURITY_CARVEOUT2_CFG0) = 0x440167E; +} + void mc_enable_ahb_redirect() { CLOCK(CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRD) = (CLOCK(CLK_RST_CONTROLLER_LVL2_CLK_GATE_OVRD) & 0xFFF7FFFF) | 0x80000; @@ -112,7 +117,7 @@ void mc_disable_ahb_redirect() { MC(MC_IRAM_BOM) = 0xFFFFF000; MC(MC_IRAM_TOM) = 0; - //Disable IRAM_CFG_WRITE_ACCESS (sticky). + // Disable IRAM_CFG_WRITE_ACCESS (sticky). //MC(MC_IRAM_REG_CTRL) = MC(MC_IRAM_REG_CTRL) & 0xFFFFFFFE | 1; CLOCK(0x3A4) &= 0xFFF7FFFF; } @@ -120,11 +125,11 @@ void mc_disable_ahb_redirect() void mc_enable() { CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_EMC) = (CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_EMC) & 0x1FFFFFFF) | 0x40000000; - //Enable MIPI CAL clock. + // Enable MIPI CAL clock. CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_SET) = (CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_SET) & 0xFDFFFFFF) | 0x2000000; - //Enable MC clock. + // Enable MC clock. CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_SET) = (CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_SET) & 0xFFFFFFFE) | 1; - //Enable EMC DLL clock. + // Enable EMC DLL clock. CLOCK(CLK_RST_CONTROLLER_CLK_ENB_X_SET) = (CLOCK(CLK_RST_CONTROLLER_CLK_ENB_X_SET) & 0xFFFFBFFF) | 0x4000; CLOCK(CLK_RST_CONTROLLER_RST_DEV_H_SET) = 0x2000001; //Clear EMC and MC reset. usleep(5); diff --git a/ipl/mc.h b/ipl/mc.h index 536b5dc..88a9584 100755 --- a/ipl/mc.h +++ b/ipl/mc.h @@ -6,6 +6,7 @@ void mc_config_tsec_carveout(u32 bom, u32 size1mb, int lock); void mc_config_carveout(); +void mc_config_carveout_finalize(); void mc_enable_ahb_redirect(); void mc_disable_ahb_redirect(); void mc_enable(); diff --git a/ipl/mc_t210.h b/ipl/mc_t210.h index 4f696a5..602915f 100755 --- a/ipl/mc_t210.h +++ b/ipl/mc_t210.h @@ -1,15 +1,15 @@ /* -* Copyright (c) 2014, NVIDIA Corporation. All rights reserved. -* -* This software is licensed under the terms of the GNU General Public -* License version 2, as published by the Free Software Foundation, and -* may be copied, distributed, and modified under those terms. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -*/ + * Copyright (c) 2014, NVIDIA Corporation. All rights reserved. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ #ifndef _MC_T210_H_ #define _MC_T210_H_ diff --git a/ipl/mmc.h b/ipl/mmc.h index a3beea6..dddb956 100755 --- a/ipl/mmc.h +++ b/ipl/mmc.h @@ -1,25 +1,25 @@ /* -* Header for MultiMediaCard (MMC) -* -* Copyright 2002 Hewlett-Packard Company -* -* Use consistent with the GNU GPL is permitted, -* provided that this copyright notice is -* preserved in its entirety in all copies and derived works. -* -* HEWLETT-PACKARD COMPANY MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, -* AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS -* FITNESS FOR ANY PARTICULAR PURPOSE. -* -* Many thanks to Alessandro Rubini and Jonathan Corbet! -* -* Based strongly on code by: -* -* Author: Yong-iL Joh -* -* Author: Andrew Christian -* 15 May 2002 -*/ + * Header for MultiMediaCard (MMC) + * + * Copyright 2002 Hewlett-Packard Company + * + * Use consistent with the GNU GPL is permitted, + * provided that this copyright notice is + * preserved in its entirety in all copies and derived works. + * + * HEWLETT-PACKARD COMPANY MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, + * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS + * FITNESS FOR ANY PARTICULAR PURPOSE. + * + * Many thanks to Alessandro Rubini and Jonathan Corbet! + * + * Based strongly on code by: + * + * Author: Yong-iL Joh + * + * Author: Andrew Christian + * 15 May 2002 + */ #ifndef LINUX_MMC_MMC_H #define LINUX_MMC_MMC_H diff --git a/ipl/nx_emmc.c b/ipl/nx_emmc.c index fd5e9c7..5ac0ed2 100755 --- a/ipl/nx_emmc.c +++ b/ipl/nx_emmc.c @@ -1,20 +1,21 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include + #include "nx_emmc.h" #include "heap.h" #include "list.h" @@ -61,7 +62,7 @@ emmc_part_t *nx_emmc_part_find(link_t *gpt, const char *name) int nx_emmc_part_read(sdmmc_storage_t *storage, emmc_part_t *part, u32 sector_off, u32 num_sectors, void *buf) { - //The last LBA is inclusive. + // The last LBA is inclusive. if (part->lba_start + sector_off > part->lba_end) return 0; return sdmmc_storage_read(storage, part->lba_start + sector_off, num_sectors, buf); @@ -69,7 +70,7 @@ int nx_emmc_part_read(sdmmc_storage_t *storage, emmc_part_t *part, u32 sector_of int nx_emmc_part_write(sdmmc_storage_t *storage, emmc_part_t *part, u32 sector_off, u32 num_sectors, void *buf) { - //The last LBA is inclusive. + // The last LBA is inclusive. if (part->lba_start + sector_off > part->lba_end) return 0; return sdmmc_storage_write(storage, part->lba_start + sector_off, num_sectors, buf); diff --git a/ipl/nx_emmc.h b/ipl/nx_emmc.h index 0b81c29..66a248f 100755 --- a/ipl/nx_emmc.h +++ b/ipl/nx_emmc.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _NX_EMMC_H_ #define _NX_EMMC_H_ diff --git a/ipl/pinmux.c b/ipl/pinmux.c index 5dae384..8903fb4 100755 --- a/ipl/pinmux.c +++ b/ipl/pinmux.c @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "pinmux.h" #include "t210.h" diff --git a/ipl/pinmux.h b/ipl/pinmux.h index 82dda29..09bcdf6 100755 --- a/ipl/pinmux.h +++ b/ipl/pinmux.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _PINMUX_H_ #define _PINMUX_H_ @@ -41,6 +41,8 @@ #define PINMUX_AUX_DMIC3_CLK 0xB4 #define PINMUX_AUX_UART2_TX 0xF4 #define PINMUX_AUX_UART3_TX 0x104 +#define PINMUX_AUX_WIFI_EN 0x1B4 +#define PINMUX_AUX_WIFI_RST 0x1B8 #define PINMUX_AUX_NFC_EN 0x1D0 #define PINMUX_AUX_NFC_INT 0x1D4 #define PINMUX_AUX_LCD_BL_PWM 0x1FC diff --git a/ipl/pkg1.c b/ipl/pkg1.c index e3afc18..7e5a8dc 100755 --- a/ipl/pkg1.c +++ b/ipl/pkg1.c @@ -1,29 +1,30 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (c) 2018 st4rk -* Copyright (c) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (c) 2018 st4rk + * Copyright (c) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include + #include "pkg1.h" #include "arm64.h" #include "se.h" #define SM_100_ADR 0x4002B020 PATCHSET_DEF(_secmon_1_patchset, - //Patch the relocator to be able to run from SM_100_ADR. + // Patch the relocator to be able to run from SM_100_ADR. { 0x1E0, _ADRP(0, 0x7C013000 - _PAGEOFF(SM_100_ADR)) }, //Patch package2 decryption and signature/hash checks. { 0x9F0 + 0xADC, _NOP() }, //Header signature. @@ -32,14 +33,14 @@ PATCHSET_DEF(_secmon_1_patchset, ); PATCHSET_DEF(_secmon_2_patchset, - //Patch package2 decryption and signature/hash checks. + // Patch package2 decryption and signature/hash checks. { 0xAC8 + 0xAAC, _NOP() }, //Header signature. { 0xAC8 + 0xB3C, _NOP() }, //Version. { 0xAC8 + 0xB58, _NOP() } //Sections SHA2. ); PATCHSET_DEF(_secmon_3_patchset, - //Patch package2 decryption and signature/hash checks. + // Patch package2 decryption and signature/hash checks. { 0xAC8 + 0xA30, _NOP() }, //Header signature. { 0xAC8 + 0xAB4, _NOP() }, //package2 structure. { 0xAC8 + 0xAC0, _NOP() }, //Version. @@ -47,7 +48,7 @@ PATCHSET_DEF(_secmon_3_patchset, ); PATCHSET_DEF(_secmon_4_patchset, - //Patch package2 decryption and signature/hash checks. + // Patch package2 decryption and signature/hash checks. { 0x2300 + 0x5D80, _NOP() }, //package2 structure. { 0x2300 + 0x5D8C, _NOP() }, //Version. { 0x2300 + 0x5EFC, _NOP() }, //Header signature. @@ -55,7 +56,7 @@ PATCHSET_DEF(_secmon_4_patchset, ); PATCHSET_DEF(_secmon_5_patchset, - //Patch package2 decryption and signature/hash checks. + // Patch package2 decryption and signature/hash checks. { 0xDA8 + 0x9D8 , _NOP() }, //package2 structure. { 0xDA8 + 0x9E4 , _NOP() }, //Version. { 0xDA8 + 0xC9C , _NOP() }, //Header signature. @@ -63,15 +64,15 @@ PATCHSET_DEF(_secmon_5_patchset, ); /* -* package1.1 header: -* package1.1 layout: -* 1.0: {sm, ldr, wb} { 2, 1, 0 } -* 2.0: {wb, ldr, sm} { 0, 1, 2 } -* 3.0: {wb, ldr, sm} { 0, 1, 2 } -* 3.1: {wb, ldr, sm} { 0, 1, 2 } -* 4.0: {ldr, sm, wb} { 1, 2, 0 } -* 5.0: {ldr, sm, wb} { 1, 2, 0 } -*/ + * package1.1 header: + * package1.1 layout: + * 1.0: {sm, ldr, wb} { 2, 1, 0 } + * 2.0: {wb, ldr, sm} { 0, 1, 2 } + * 3.0: {wb, ldr, sm} { 0, 1, 2 } + * 3.1: {wb, ldr, sm} { 0, 1, 2 } + * 4.0: {ldr, sm, wb} { 1, 2, 0 } + * 5.0: {ldr, sm, wb} { 1, 2, 0 } + */ static const pkg1_id_t _pkg1_ids[] = { { "20161121183008", 0, 0x1900, 0x3FE0, { 2, 1, 0 }, SM_100_ADR, 0x8000D000, 1, _secmon_1_patchset }, //1.0.0 (Patched relocator) @@ -94,7 +95,7 @@ const pkg1_id_t *pkg1_identify(u8 *pkg1) void pkg1_decrypt(const pkg1_id_t *id, u8 *pkg1) { - //Decrypt package1. + // Decrypt package1. u8 *pkg11 = pkg1 + id->pkg11_off; u32 pkg11_size = *(u32 *)pkg11; se_aes_crypt_ctr(11, pkg11 + 0x20, pkg11_size, pkg11 + 0x20, pkg11_size, pkg11 + 0x10); diff --git a/ipl/pkg1.h b/ipl/pkg1.h index 487a5ec..8f0f765 100755 --- a/ipl/pkg1.h +++ b/ipl/pkg1.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _PKG1_H_ #define _PKG1_H_ diff --git a/ipl/pkg2.c b/ipl/pkg2.c index d551fdd..5231d8c 100755 --- a/ipl/pkg2.c +++ b/ipl/pkg2.c @@ -1,22 +1,23 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (c) 2018 CTCaer -* Copyright (c) 2018 Atmosphère-NX -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (c) 2018 CTCaer + * Copyright (c) 2018 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include + #include "pkg2.h" #include "arm64.h" #include "heap.h" @@ -486,7 +487,7 @@ int pkg2_decompress_kip(pkg2_kip1_info_t* ki, u32 sectsToDecomp) { u32 compClearMask = ~sectsToDecomp; if ((ki->kip1->flags & compClearMask) == ki->kip1->flags) - return 0; //already decompressed, nothing to do + return 0; // Already decompressed, nothing to do. pkg2_kip1_t hdr; memcpy(&hdr, ki->kip1, sizeof(hdr)); @@ -495,7 +496,7 @@ int pkg2_decompress_kip(pkg2_kip1_info_t* ki, u32 sectsToDecomp) for (u32 sectIdx=0; sectIdx= 3 || !(sectsToDecomp & sectCompBit) || !(hdr.flags & sectCompBit)) { unsigned int dataSize = hdr.sections[sectIdx].size_comp; @@ -528,6 +529,7 @@ int pkg2_decompress_kip(pkg2_kip1_info_t* ki, u32 sectsToDecomp) { gfx_printf(&gfx_con, "%kERROR decomping sect %d of %s KIP!%k\n", 0xFFFF0000, sectIdx, (char*)hdr.name, 0xFFCCCCCC); free(newKip); + return 1; } else @@ -546,6 +548,7 @@ int pkg2_decompress_kip(pkg2_kip1_info_t* ki, u32 sectsToDecomp) free(ki->kip1); ki->kip1 = newKip; ki->size = newKipSize; + return 0; } @@ -574,10 +577,10 @@ const char* pkg2_patch_kips(link_t *info, char* patchNames) } } - u32 patchesApplied = 0; //bitset over patches + u32 patchesApplied = 0; // Bitset over patches. for (u32 i=0; i=0; chIdx--) { const char* p = patches[i] + chIdx; @@ -606,7 +609,7 @@ const char* pkg2_patch_kips(link_t *info, char* patchNames) u32 shaBuf[32/sizeof(u32)]; LIST_FOREACH_ENTRY(pkg2_kip1_info_t, ki, info, link) { - shaBuf[0] = 0; //sha256 for this kip not yet calculated + shaBuf[0] = 0; // sha256 for this kip not yet calculated. for (u32 currKipIdx=0; currKipIdx<(sizeof(_kip_ids)/sizeof(_kip_ids[0])); currKipIdx++) { if (strncmp((const char*)ki->kip1->name, _kip_ids[currKipIdx].name, sizeof(ki->kip1->name)) != 0) @@ -620,14 +623,14 @@ const char* pkg2_patch_kips(link_t *info, char* patchNames) { if (strcmp(currPatchset->name, patches[i]) != 0) { - bitsAffected = i+1; + bitsAffected = i + 1; break; } } currPatchset++; } - // dont bother even hashing this KIP if we dont have any patches enabled for it + // Dont bother even hashing this KIP if we dont have any patches enabled for it. if (bitsAffected == 0) continue; @@ -640,7 +643,7 @@ const char* pkg2_patch_kips(link_t *info, char* patchNames) if (memcmp(shaBuf, _kip_ids[currKipIdx].hash, sizeof(_kip_ids[0].hash)) != 0) continue; - //find out which sections are affected by the enabled patches, to know which to decompress + // Find out which sections are affected by the enabled patches, to know which to decompress. bitsAffected = 0; currPatchset = _kip_ids[currKipIdx].patchset; while (currPatchset != NULL && currPatchset->name != NULL) @@ -659,12 +662,12 @@ const char* pkg2_patch_kips(link_t *info, char* patchNames) currPatchset++; } - // got patches to apply to this kip, have to decompress it + // Got patches to apply to this kip, have to decompress it. #ifdef DEBUG_PRINTING u32 preDecompTime = get_tmr_us(); #endif if (pkg2_decompress_kip(ki, bitsAffected)) - return (const char*)ki->kip1->name; //failed to decompress + return (const char*)ki->kip1->name; // Failed to decompress. #ifdef DEBUG_PRINTING u32 postDecompTime = get_tmr_us(); @@ -705,7 +708,7 @@ const char* pkg2_patch_kips(link_t *info, char* patchNames) if (memcmp(&kipSectData[currOffset], currPatch->srcData, currPatch->length) != 0) { gfx_printf(&gfx_con, "%kDATA MISMATCH FOR PATCH AT OFFSET 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. } else { diff --git a/ipl/pkg2.h b/ipl/pkg2.h index ab83f50..47d9dff 100755 --- a/ipl/pkg2.h +++ b/ipl/pkg2.h @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _PKG2_H_ #define _PKG2_H_ diff --git a/ipl/pmc.h b/ipl/pmc.h index b8d7ae9..a8ae8a9 100755 --- a/ipl/pmc.h +++ b/ipl/pmc.h @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (c) 2018 st4rk -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (c) 2018 st4rk + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _PMC_H_ #define _PMC_H_ @@ -42,6 +42,8 @@ #define APBDEV_PMC_SECURE_SCRATCH49 0x3A4 #define APBDEV_PMC_CNTRL2 0x440 #define APBDEV_PMC_IO_DPD4_REQ 0x464 +#define APBDEV_PMC_UTMIP_PAD_CFG1 0x4C4 +#define APBDEV_PMC_UTMIP_PAD_CFG3 0x4CC #define APBDEV_PMC_DDR_CNTRL 0x4E4 #define APBDEV_PMC_SCRATCH188 0x810 #define APBDEV_PMC_SCRATCH190 0x818 diff --git a/ipl/reloc.S b/ipl/reloc.S index d89a414..acc6d5e 100755 --- a/ipl/reloc.S +++ b/ipl/reloc.S @@ -1,25 +1,25 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ /* -* TODO: the placement of the relocator is a bit fragile atm, maybe we -* should include it in start.S and copy it to some known good -* place in IRAM instead. Basically we want it as far back atm -* as it might be overwritten during relocation. -*/ + * TODO: the placement of the relocator is a bit fragile atm, maybe we + * should include it in start.S and copy it to some known good + * place in IRAM instead. Basically we want it as far back atm + * as it might be overwritten during relocation. + */ .section .text.reloc .arm diff --git a/ipl/sd.h b/ipl/sd.h index fd15eea..c3bf82b 100755 --- a/ipl/sd.h +++ b/ipl/sd.h @@ -1,14 +1,14 @@ /* -* include/linux/mmc/sd.h -* -* Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved. -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or (at -* your option) any later version. -*/ + * include/linux/mmc/sd.h + * + * Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved. + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + */ #ifndef LINUX_MMC_SD_H #define LINUX_MMC_SD_H diff --git a/ipl/sdmmc.c b/ipl/sdmmc.c index 8e9547d..4cbe0ca 100755 --- a/ipl/sdmmc.c +++ b/ipl/sdmmc.c @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include #include "sdmmc.h" @@ -945,7 +945,8 @@ static int _sd_storage_get_ssr(sdmmc_storage_t *storage, u8 *buf) reqbuf.is_multi_block = 0; reqbuf.is_auto_cmd12 = 0; - if (!(storage->csd.cmdclass & CCC_APP_SPEC)) { + if (!(storage->csd.cmdclass & CCC_APP_SPEC)) + { DPRINTF("[SD] ssr: Card lacks mandatory SD Status function\n"); return 0; } @@ -1124,7 +1125,7 @@ int sdmmc_storage_init_sd(sdmmc_storage_t *storage, sdmmc_t *sdmmc, u32 id, u32 sdmmc_sd_clock_ctrl(sdmmc, 1); - // Parse additional card info from sd status + // Parse additional card info from sd status. if (_sd_storage_get_ssr(storage, buf)) DPRINTF("[SD] got sd status\n"); diff --git a/ipl/sdmmc.h b/ipl/sdmmc.h index 9a15feb..b716885 100755 --- a/ipl/sdmmc.h +++ b/ipl/sdmmc.h @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _SDMMC_H_ #define _SDMMC_H_ @@ -73,7 +73,8 @@ typedef struct _sd_scr u8 cmds; } sd_scr_t; -typedef struct _sd_ssr { +typedef struct _sd_ssr +{ u8 bus_width; u8 speed_class; u8 uhs_grade; diff --git a/ipl/sdmmc_driver.c b/ipl/sdmmc_driver.c index 7e9632d..edfb235 100755 --- a/ipl/sdmmc_driver.c +++ b/ipl/sdmmc_driver.c @@ -1,19 +1,19 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include diff --git a/ipl/sdmmc_driver.h b/ipl/sdmmc_driver.h index 2f232c1..0f4a2a2 100755 --- a/ipl/sdmmc_driver.h +++ b/ipl/sdmmc_driver.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _SDMMC_DRIVER_H_ #define _SDMMC_DRIVER_H_ diff --git a/ipl/sdmmc_t210.h b/ipl/sdmmc_t210.h index 80862c2..b1a2add 100755 --- a/ipl/sdmmc_t210.h +++ b/ipl/sdmmc_t210.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _SDMMC_T210_H_ #define _SDMMC_T210_H_ diff --git a/ipl/sdram.c b/ipl/sdram.c index ab0b95d..71f86a8 100755 --- a/ipl/sdram.c +++ b/ipl/sdram.c @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "i2c.h" #include "t210.h" diff --git a/ipl/sdram.h b/ipl/sdram.h index df86631..478b0a2 100755 --- a/ipl/sdram.h +++ b/ipl/sdram.h @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _SDRAM_H_ #define _SDRAM_H_ diff --git a/ipl/sdram.inl b/ipl/sdram.inl index 2ad630e..d23f4da 100755 --- a/ipl/sdram.inl +++ b/ipl/sdram.inl @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ static const u8 _dram_cfg_0[1896] = { 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, diff --git a/ipl/sdram_lp0.c b/ipl/sdram_lp0.c index 1fe3fa1..558630a 100755 --- a/ipl/sdram_lp0.c +++ b/ipl/sdram_lp0.c @@ -47,7 +47,7 @@ void sdram_lp0_save_params(const void *params) #define c32(value, pmcreg) pmc->pmcreg = value //TODO: pkg1.1 (1.X - 3.X) reads them from MC. - //Patch carveout parameters. + // Patch carveout parameters. /*sdram->McGeneralizedCarveout1Bom = 0; sdram->McGeneralizedCarveout1BomHi = 0; sdram->McGeneralizedCarveout1Size128kb = 0; @@ -120,14 +120,14 @@ void sdram_lp0_save_params(const void *params) sdram->McGeneralizedCarveout5Cfg0 = 0x8F;*/ //TODO: this is 4.X+ behaviour which seems to work fine for < 4.X. - //Patch carveout parameters. + // Patch carveout parameters. sdram->McGeneralizedCarveout1Cfg0 = 0; sdram->McGeneralizedCarveout2Cfg0 = 0; sdram->McGeneralizedCarveout3Cfg0 = 0; sdram->McGeneralizedCarveout4Cfg0 = 0; sdram->McGeneralizedCarveout5Cfg0 = 0; - //Patch SDRAM parameters. + // Patch SDRAM parameters. u32 t0 = sdram->EmcSwizzleRank0Byte0 << 5 >> 29 > sdram->EmcSwizzleRank0Byte0 << 1 >> 29; u32 t1 = (t0 & 0xFFFFFFEF) | ((sdram->EmcSwizzleRank1Byte0 << 5 >> 29 > sdram->EmcSwizzleRank1Byte0 << 1 >> 29) << 4); u32 t2 = (t1 & 0xFFFFFFFD) | ((sdram->EmcSwizzleRank0Byte1 << 5 >> 29 > sdram->EmcSwizzleRank0Byte1 << 1 >> 29) << 1); @@ -837,7 +837,8 @@ void sdram_lp0_save_params(const void *params) s(EmcAutoCalWait, 9:0, scratch101, 31:22); s(SwizzleRankByteEncode, 15:0, scratch190, 15:0); - switch (sdram->MemoryType) { + switch (sdram->MemoryType) + { case NvBootMemoryType_LpDdr2: case NvBootMemoryType_LpDdr4: s(EmcMrwLpddr2ZcalWarmBoot, 23:16, scratch5, 7:0); diff --git a/ipl/sdram_lz.inl b/ipl/sdram_lz.inl index 0974245..832b5b4 100755 --- a/ipl/sdram_lz.inl +++ b/ipl/sdram_lz.inl @@ -1,18 +1,18 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ static const u8 _dram_cfg_lz[1262] = { 0x17, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, diff --git a/ipl/sdram_param_t210.h b/ipl/sdram_param_t210.h index 2ab6d42..d926fa4 100755 --- a/ipl/sdram_param_t210.h +++ b/ipl/sdram_param_t210.h @@ -37,7 +37,8 @@ /** * Defines the SDRAM parameter structure */ -typedef struct _sdram_params { +typedef struct _sdram_params +{ /* Specifies the type of memory device */ u32 memory_type; diff --git a/ipl/sdram_param_t210_lp0.h b/ipl/sdram_param_t210_lp0.h index 6eeaeac..523a50f 100755 --- a/ipl/sdram_param_t210_lp0.h +++ b/ipl/sdram_param_t210_lp0.h @@ -25,7 +25,8 @@ #include "types.h" -enum { +enum +{ /* Specifies the memory type to be undefined */ NvBootMemoryType_None = 0, @@ -56,7 +57,8 @@ enum { /** * Defines the SDRAM parameter structure */ -struct sdram_params { +struct sdram_params +{ /* Specifies the type of memory device */ u32 MemoryType; diff --git a/ipl/se.c b/ipl/se.c index 18e9d9a..45625bb 100755 --- a/ipl/se.c +++ b/ipl/se.c @@ -1,22 +1,23 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (c) 2018 CTCaer -* Copyright (c) 2018 Atmosphère-NX -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (c) 2018 CTCaer + * Copyright (c) 2018 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include + #include "se.h" #include "heap.h" #include "t210.h" diff --git a/ipl/t210.h b/ipl/t210.h index 027bfc3..cb20e5e 100755 --- a/ipl/t210.h +++ b/ipl/t210.h @@ -92,6 +92,8 @@ /*! Misc registers. */ #define APB_MISC_PP_PINMUX_GLOBAL 0x40 +#define APB_MISC_GP_WIFI_EN_CFGPADCTRL 0xB64 +#define APB_MISC_GP_WIFI_RST_CFGPADCTRL 0xB68 /*! System registers. */ #define AHB_ARBITRATION_XBAR_CTRL 0xE0 diff --git a/ipl/tsec.c b/ipl/tsec.c index de567ed..36862ec 100755 --- a/ipl/tsec.c +++ b/ipl/tsec.c @@ -1,20 +1,21 @@ /* -* Copyright (c) 2018 naehrwert -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include + #include "tsec.h" #include "clock.h" #include "t210.h" diff --git a/ipl/tui.c b/ipl/tui.c index 6f99ee0..51297f5 100755 --- a/ipl/tui.c +++ b/ipl/tui.c @@ -1,24 +1,24 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (c) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (c) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "tui.h" #include "btn.h" -#include "max17050.h" #include "config.h" +#include "max17050.h" #include "util.h" #ifdef MENU_LOGO_ENABLE diff --git a/ipl/util.h b/ipl/util.h index a18166a..801391a 100755 --- a/ipl/util.h +++ b/ipl/util.h @@ -1,27 +1,27 @@ /* -* Copyright (c) 2018 naehrwert -* Copyright (C) 2018 CTCaer -* -* This program is free software; you can redistribute it and/or modify it -* under the terms and conditions of the GNU General Public License, -* version 2, as published by the Free Software Foundation. -* -* This program is distributed in the hope it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see . -*/ + * Copyright (c) 2018 naehrwert + * Copyright (C) 2018 CTCaer + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef _UTIL_H_ #define _UTIL_H_ #include "types.h" -#define byte_swap_32(num) ((num>>24)&0xff) | ((num<<8)&0xff0000) | \ - ((num>>8)&0xff00) | ((num<<24)&0xff000000) \ +#define byte_swap_32(num) ((num >> 24) & 0xff) | ((num << 8) & 0xff0000) | \ + ((num >> 8 )& 0xff00) | ((num << 24) & 0xff000000) typedef struct _cfg_op_t {