diff --git a/README.md b/README.md index 116ce457..73219487 100644 --- a/README.md +++ b/README.md @@ -84,14 +84,12 @@ It enables advanced CPU, GPU, and RAM tuning with user-friendly configuration to ``` 3. Move the cloned folder into `build/`. 4. Insert your `Source/stratosphere` folder into `build/`. -5. Run: (On Windows you need to use "make -j %NUMBER_OF_PROCESSORS%") +5. Run: ```bash ./build.sh ``` - - To build the Configurator: ```bash diff --git a/Source/Atmosphere-Patches/secmon_define_emc_access_table.inc b/Source/Atmosphere-Patches/secmon_define_emc_access_table.inc deleted file mode 100644 index 161f77c6..00000000 --- a/Source/Atmosphere-Patches/secmon_define_emc_access_table.inc +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 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 . - */ - -#define __ACCESS_TABLE_NAME__ EmcAccessTable -#define __ACCESS_TABLE_ADDRESS__ MemoryRegionPhysicalDeviceExternalMemoryController.GetAddress() -#define __ACCESS_TABLE_INC__ "secmon_emc_access_table_data.inc" - -#include "secmon_define_access_table.inc" - -#undef __ACCESS_TABLE_INC__ -#undef __ACCESS_TABLE_ADDRESS__ -#undef __ACCESS_TABLE_NAME__ diff --git a/Source/Atmosphere-Patches/secmon_emc_access_table_data.inc b/Source/Atmosphere-Patches/secmon_emc_access_table_data.inc deleted file mode 100644 index 6089047e..00000000 --- a/Source/Atmosphere-Patches/secmon_emc_access_table_data.inc +++ /dev/null @@ -1,967 +0,0 @@ -/* - * Copyright (c) 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 . - */ - -SetRegisterAllowed(0x0); -SetRegisterAllowed(0x4); -SetRegisterAllowed(0x8); -SetRegisterAllowed(0xC); -SetRegisterAllowed(0x10); -SetRegisterAllowed(0x14); -SetRegisterAllowed(0x18); -SetRegisterAllowed(0x1C); -SetRegisterAllowed(0x20); -SetRegisterAllowed(0x24); -SetRegisterAllowed(0x28); -SetRegisterAllowed(0x2C); -SetRegisterAllowed(0x30); -SetRegisterAllowed(0x34); -SetRegisterAllowed(0x38); -SetRegisterAllowed(0x3C); -SetRegisterAllowed(0x40); -SetRegisterAllowed(0x44); -SetRegisterAllowed(0x48); -SetRegisterAllowed(0x4C); -SetRegisterAllowed(0x50); -SetRegisterAllowed(0x54); -SetRegisterAllowed(0x58); -SetRegisterAllowed(0x5C); -SetRegisterAllowed(0x60); -SetRegisterAllowed(0x64); -SetRegisterAllowed(0x68); -SetRegisterAllowed(0x6C); -SetRegisterAllowed(0x70); -SetRegisterAllowed(0x74); -SetRegisterAllowed(0x78); -SetRegisterAllowed(0x7C); -SetRegisterAllowed(0x80); -SetRegisterAllowed(0x84); -SetRegisterAllowed(0x88); -SetRegisterAllowed(0x8C); -SetRegisterAllowed(0x90); -SetRegisterAllowed(0x94); -SetRegisterAllowed(0x98); -SetRegisterAllowed(0x9C); -SetRegisterAllowed(0xA0); -SetRegisterAllowed(0xA4); -SetRegisterAllowed(0xA8); -SetRegisterAllowed(0xAC); -SetRegisterAllowed(0xB0); -SetRegisterAllowed(0xB4); -SetRegisterAllowed(0xB8); -SetRegisterAllowed(0xBC); -SetRegisterAllowed(0xC0); -SetRegisterAllowed(0xC4); -SetRegisterAllowed(0xC8); -SetRegisterAllowed(0xCC); -SetRegisterAllowed(0xD0); -SetRegisterAllowed(0xD4); -SetRegisterAllowed(0xD8); -SetRegisterAllowed(0xDC); -SetRegisterAllowed(0xE0); -SetRegisterAllowed(0xE4); -SetRegisterAllowed(0xE8); -SetRegisterAllowed(0xEC); -SetRegisterAllowed(0xF0); -SetRegisterAllowed(0xF4); -SetRegisterAllowed(0xF8); -SetRegisterAllowed(0xFC); -SetRegisterAllowed(0x100); -SetRegisterAllowed(0x104); -SetRegisterAllowed(0x108); -SetRegisterAllowed(0x10C); -SetRegisterAllowed(0x110); -SetRegisterAllowed(0x114); -SetRegisterAllowed(0x118); -SetRegisterAllowed(0x11C); -SetRegisterAllowed(0x120); -SetRegisterAllowed(0x124); -SetRegisterAllowed(0x128); -SetRegisterAllowed(0x12C); -SetRegisterAllowed(0x130); -SetRegisterAllowed(0x134); -SetRegisterAllowed(0x138); -SetRegisterAllowed(0x13C); -SetRegisterAllowed(0x140); -SetRegisterAllowed(0x144); -SetRegisterAllowed(0x148); -SetRegisterAllowed(0x14C); -SetRegisterAllowed(0x150); -SetRegisterAllowed(0x154); -SetRegisterAllowed(0x158); -SetRegisterAllowed(0x15C); -SetRegisterAllowed(0x160); -SetRegisterAllowed(0x164); -SetRegisterAllowed(0x168); -SetRegisterAllowed(0x16C); -SetRegisterAllowed(0x170); -SetRegisterAllowed(0x174); -SetRegisterAllowed(0x178); -SetRegisterAllowed(0x17C); -SetRegisterAllowed(0x180); -SetRegisterAllowed(0x184); -SetRegisterAllowed(0x188); -SetRegisterAllowed(0x18C); -SetRegisterAllowed(0x190); -SetRegisterAllowed(0x194); -SetRegisterAllowed(0x198); -SetRegisterAllowed(0x19C); -SetRegisterAllowed(0x1A0); -SetRegisterAllowed(0x1A4); -SetRegisterAllowed(0x1A8); -SetRegisterAllowed(0x1AC); -SetRegisterAllowed(0x1B0); -SetRegisterAllowed(0x1B4); -SetRegisterAllowed(0x1B8); -SetRegisterAllowed(0x1BC); -SetRegisterAllowed(0x1C0); -SetRegisterAllowed(0x1C4); -SetRegisterAllowed(0x1C8); -SetRegisterAllowed(0x1CC); -SetRegisterAllowed(0x1D0); -SetRegisterAllowed(0x1D4); -SetRegisterAllowed(0x1D8); -SetRegisterAllowed(0x1DC); -SetRegisterAllowed(0x1E0); -SetRegisterAllowed(0x1E4); -SetRegisterAllowed(0x1E8); -SetRegisterAllowed(0x1EC); -SetRegisterAllowed(0x1F0); -SetRegisterAllowed(0x1F4); -SetRegisterAllowed(0x1F8); -SetRegisterAllowed(0x1FC); -SetRegisterAllowed(0x200); -SetRegisterAllowed(0x204); -SetRegisterAllowed(0x208); -SetRegisterAllowed(0x20C); -SetRegisterAllowed(0x210); -SetRegisterAllowed(0x214); -SetRegisterAllowed(0x218); -SetRegisterAllowed(0x21C); -SetRegisterAllowed(0x220); -SetRegisterAllowed(0x224); -SetRegisterAllowed(0x228); -SetRegisterAllowed(0x22C); -SetRegisterAllowed(0x230); -SetRegisterAllowed(0x234); -SetRegisterAllowed(0x238); -SetRegisterAllowed(0x23C); -SetRegisterAllowed(0x240); -SetRegisterAllowed(0x244); -SetRegisterAllowed(0x248); -SetRegisterAllowed(0x24C); -SetRegisterAllowed(0x250); -SetRegisterAllowed(0x254); -SetRegisterAllowed(0x258); -SetRegisterAllowed(0x25C); -SetRegisterAllowed(0x260); -SetRegisterAllowed(0x264); -SetRegisterAllowed(0x268); -SetRegisterAllowed(0x26C); -SetRegisterAllowed(0x270); -SetRegisterAllowed(0x274); -SetRegisterAllowed(0x278); -SetRegisterAllowed(0x27C); -SetRegisterAllowed(0x280); -SetRegisterAllowed(0x284); -SetRegisterAllowed(0x288); -SetRegisterAllowed(0x28C); -SetRegisterAllowed(0x290); -SetRegisterAllowed(0x294); -SetRegisterAllowed(0x298); -SetRegisterAllowed(0x29C); -SetRegisterAllowed(0x2A0); -SetRegisterAllowed(0x2A4); -SetRegisterAllowed(0x2A8); -SetRegisterAllowed(0x2AC); -SetRegisterAllowed(0x2B0); -SetRegisterAllowed(0x2B4); -SetRegisterAllowed(0x2B8); -SetRegisterAllowed(0x2BC); -SetRegisterAllowed(0x2C0); -SetRegisterAllowed(0x2C4); -SetRegisterAllowed(0x2C8); -SetRegisterAllowed(0x2CC); -SetRegisterAllowed(0x2D0); -SetRegisterAllowed(0x2D4); -SetRegisterAllowed(0x2D8); -SetRegisterAllowed(0x2DC); -SetRegisterAllowed(0x2E0); -SetRegisterAllowed(0x2E4); -SetRegisterAllowed(0x2E8); -SetRegisterAllowed(0x2EC); -SetRegisterAllowed(0x2F0); -SetRegisterAllowed(0x2F4); -SetRegisterAllowed(0x2F8); -SetRegisterAllowed(0x2FC); -SetRegisterAllowed(0x300); -SetRegisterAllowed(0x304); -SetRegisterAllowed(0x308); -SetRegisterAllowed(0x30C); -SetRegisterAllowed(0x310); -SetRegisterAllowed(0x314); -SetRegisterAllowed(0x318); -SetRegisterAllowed(0x31C); -SetRegisterAllowed(0x320); -SetRegisterAllowed(0x324); -SetRegisterAllowed(0x328); -SetRegisterAllowed(0x32C); -SetRegisterAllowed(0x330); -SetRegisterAllowed(0x334); -SetRegisterAllowed(0x338); -SetRegisterAllowed(0x33C); -SetRegisterAllowed(0x340); -SetRegisterAllowed(0x344); -SetRegisterAllowed(0x348); -SetRegisterAllowed(0x34C); -SetRegisterAllowed(0x350); -SetRegisterAllowed(0x354); -SetRegisterAllowed(0x358); -SetRegisterAllowed(0x35C); -SetRegisterAllowed(0x360); -SetRegisterAllowed(0x364); -SetRegisterAllowed(0x368); -SetRegisterAllowed(0x36C); -SetRegisterAllowed(0x370); -SetRegisterAllowed(0x374); -SetRegisterAllowed(0x378); -SetRegisterAllowed(0x37C); -SetRegisterAllowed(0x380); -SetRegisterAllowed(0x384); -SetRegisterAllowed(0x388); -SetRegisterAllowed(0x38C); -SetRegisterAllowed(0x390); -SetRegisterAllowed(0x394); -SetRegisterAllowed(0x398); -SetRegisterAllowed(0x39C); -SetRegisterAllowed(0x3A0); -SetRegisterAllowed(0x3A4); -SetRegisterAllowed(0x3A8); -SetRegisterAllowed(0x3AC); -SetRegisterAllowed(0x3B0); -SetRegisterAllowed(0x3B4); -SetRegisterAllowed(0x3B8); -SetRegisterAllowed(0x3BC); -SetRegisterAllowed(0x3C0); -SetRegisterAllowed(0x3C4); -SetRegisterAllowed(0x3C8); -SetRegisterAllowed(0x3CC); -SetRegisterAllowed(0x3D0); -SetRegisterAllowed(0x3D4); -SetRegisterAllowed(0x3D8); -SetRegisterAllowed(0x3DC); -SetRegisterAllowed(0x3E0); -SetRegisterAllowed(0x3E4); -SetRegisterAllowed(0x3E8); -SetRegisterAllowed(0x3EC); -SetRegisterAllowed(0x3F0); -SetRegisterAllowed(0x3F4); -SetRegisterAllowed(0x3F8); -SetRegisterAllowed(0x3FC); -SetRegisterAllowed(0x400); -SetRegisterAllowed(0x404); -SetRegisterAllowed(0x408); -SetRegisterAllowed(0x40C); -SetRegisterAllowed(0x410); -SetRegisterAllowed(0x414); -SetRegisterAllowed(0x418); -SetRegisterAllowed(0x41C); -SetRegisterAllowed(0x420); -SetRegisterAllowed(0x424); -SetRegisterAllowed(0x428); -SetRegisterAllowed(0x42C); -SetRegisterAllowed(0x430); -SetRegisterAllowed(0x434); -SetRegisterAllowed(0x438); -SetRegisterAllowed(0x43C); -SetRegisterAllowed(0x440); -SetRegisterAllowed(0x444); -SetRegisterAllowed(0x448); -SetRegisterAllowed(0x44C); -SetRegisterAllowed(0x450); -SetRegisterAllowed(0x454); -SetRegisterAllowed(0x458); -SetRegisterAllowed(0x45C); -SetRegisterAllowed(0x460); -SetRegisterAllowed(0x464); -SetRegisterAllowed(0x468); -SetRegisterAllowed(0x46C); -SetRegisterAllowed(0x470); -SetRegisterAllowed(0x474); -SetRegisterAllowed(0x478); -SetRegisterAllowed(0x47C); -SetRegisterAllowed(0x480); -SetRegisterAllowed(0x484); -SetRegisterAllowed(0x488); -SetRegisterAllowed(0x48C); -SetRegisterAllowed(0x490); -SetRegisterAllowed(0x494); -SetRegisterAllowed(0x498); -SetRegisterAllowed(0x49C); -SetRegisterAllowed(0x4A0); -SetRegisterAllowed(0x4A4); -SetRegisterAllowed(0x4A8); -SetRegisterAllowed(0x4AC); -SetRegisterAllowed(0x4B0); -SetRegisterAllowed(0x4B4); -SetRegisterAllowed(0x4B8); -SetRegisterAllowed(0x4BC); -SetRegisterAllowed(0x4C0); -SetRegisterAllowed(0x4C4); -SetRegisterAllowed(0x4C8); -SetRegisterAllowed(0x4CC); -SetRegisterAllowed(0x4D0); -SetRegisterAllowed(0x4D4); -SetRegisterAllowed(0x4D8); -SetRegisterAllowed(0x4DC); -SetRegisterAllowed(0x4E0); -SetRegisterAllowed(0x4E4); -SetRegisterAllowed(0x4E8); -SetRegisterAllowed(0x4EC); -SetRegisterAllowed(0x4F0); -SetRegisterAllowed(0x4F4); -SetRegisterAllowed(0x4F8); -SetRegisterAllowed(0x4FC); -SetRegisterAllowed(0x500); -SetRegisterAllowed(0x504); -SetRegisterAllowed(0x508); -SetRegisterAllowed(0x50C); -SetRegisterAllowed(0x510); -SetRegisterAllowed(0x514); -SetRegisterAllowed(0x518); -SetRegisterAllowed(0x51C); -SetRegisterAllowed(0x520); -SetRegisterAllowed(0x524); -SetRegisterAllowed(0x528); -SetRegisterAllowed(0x52C); -SetRegisterAllowed(0x530); -SetRegisterAllowed(0x534); -SetRegisterAllowed(0x538); -SetRegisterAllowed(0x53C); -SetRegisterAllowed(0x540); -SetRegisterAllowed(0x544); -SetRegisterAllowed(0x548); -SetRegisterAllowed(0x54C); -SetRegisterAllowed(0x550); -SetRegisterAllowed(0x554); -SetRegisterAllowed(0x558); -SetRegisterAllowed(0x55C); -SetRegisterAllowed(0x560); -SetRegisterAllowed(0x564); -SetRegisterAllowed(0x568); -SetRegisterAllowed(0x56C); -SetRegisterAllowed(0x570); -SetRegisterAllowed(0x574); -SetRegisterAllowed(0x578); -SetRegisterAllowed(0x57C); -SetRegisterAllowed(0x580); -SetRegisterAllowed(0x584); -SetRegisterAllowed(0x588); -SetRegisterAllowed(0x58C); -SetRegisterAllowed(0x590); -SetRegisterAllowed(0x594); -SetRegisterAllowed(0x598); -SetRegisterAllowed(0x59C); -SetRegisterAllowed(0x5A0); -SetRegisterAllowed(0x5A4); -SetRegisterAllowed(0x5A8); -SetRegisterAllowed(0x5AC); -SetRegisterAllowed(0x5B0); -SetRegisterAllowed(0x5B4); -SetRegisterAllowed(0x5B8); -SetRegisterAllowed(0x5BC); -SetRegisterAllowed(0x5C0); -SetRegisterAllowed(0x5C4); -SetRegisterAllowed(0x5C8); -SetRegisterAllowed(0x5CC); -SetRegisterAllowed(0x5D0); -SetRegisterAllowed(0x5D4); -SetRegisterAllowed(0x5D8); -SetRegisterAllowed(0x5DC); -SetRegisterAllowed(0x5E0); -SetRegisterAllowed(0x5E4); -SetRegisterAllowed(0x5E8); -SetRegisterAllowed(0x5EC); -SetRegisterAllowed(0x5F0); -SetRegisterAllowed(0x5F4); -SetRegisterAllowed(0x5F8); -SetRegisterAllowed(0x5FC); -SetRegisterAllowed(0x600); -SetRegisterAllowed(0x604); -SetRegisterAllowed(0x608); -SetRegisterAllowed(0x60C); -SetRegisterAllowed(0x610); -SetRegisterAllowed(0x614); -SetRegisterAllowed(0x618); -SetRegisterAllowed(0x61C); -SetRegisterAllowed(0x620); -SetRegisterAllowed(0x624); -SetRegisterAllowed(0x628); -SetRegisterAllowed(0x62C); -SetRegisterAllowed(0x630); -SetRegisterAllowed(0x634); -SetRegisterAllowed(0x638); -SetRegisterAllowed(0x63C); -SetRegisterAllowed(0x640); -SetRegisterAllowed(0x644); -SetRegisterAllowed(0x648); -SetRegisterAllowed(0x64C); -SetRegisterAllowed(0x650); -SetRegisterAllowed(0x654); -SetRegisterAllowed(0x658); -SetRegisterAllowed(0x65C); -SetRegisterAllowed(0x660); -SetRegisterAllowed(0x664); -SetRegisterAllowed(0x668); -SetRegisterAllowed(0x66C); -SetRegisterAllowed(0x670); -SetRegisterAllowed(0x674); -SetRegisterAllowed(0x678); -SetRegisterAllowed(0x67C); -SetRegisterAllowed(0x680); -SetRegisterAllowed(0x684); -SetRegisterAllowed(0x688); -SetRegisterAllowed(0x68C); -SetRegisterAllowed(0x690); -SetRegisterAllowed(0x694); -SetRegisterAllowed(0x698); -SetRegisterAllowed(0x69C); -SetRegisterAllowed(0x6A0); -SetRegisterAllowed(0x6A4); -SetRegisterAllowed(0x6A8); -SetRegisterAllowed(0x6AC); -SetRegisterAllowed(0x6B0); -SetRegisterAllowed(0x6B4); -SetRegisterAllowed(0x6B8); -SetRegisterAllowed(0x6BC); -SetRegisterAllowed(0x6C0); -SetRegisterAllowed(0x6C4); -SetRegisterAllowed(0x6C8); -SetRegisterAllowed(0x6CC); -SetRegisterAllowed(0x6D0); -SetRegisterAllowed(0x6D4); -SetRegisterAllowed(0x6D8); -SetRegisterAllowed(0x6DC); -SetRegisterAllowed(0x6E0); -SetRegisterAllowed(0x6E4); -SetRegisterAllowed(0x6E8); -SetRegisterAllowed(0x6EC); -SetRegisterAllowed(0x6F0); -SetRegisterAllowed(0x6F4); -SetRegisterAllowed(0x6F8); -SetRegisterAllowed(0x6FC); -SetRegisterAllowed(0x700); -SetRegisterAllowed(0x704); -SetRegisterAllowed(0x708); -SetRegisterAllowed(0x70C); -SetRegisterAllowed(0x710); -SetRegisterAllowed(0x714); -SetRegisterAllowed(0x718); -SetRegisterAllowed(0x71C); -SetRegisterAllowed(0x720); -SetRegisterAllowed(0x724); -SetRegisterAllowed(0x728); -SetRegisterAllowed(0x72C); -SetRegisterAllowed(0x730); -SetRegisterAllowed(0x734); -SetRegisterAllowed(0x738); -SetRegisterAllowed(0x73C); -SetRegisterAllowed(0x740); -SetRegisterAllowed(0x744); -SetRegisterAllowed(0x748); -SetRegisterAllowed(0x74C); -SetRegisterAllowed(0x750); -SetRegisterAllowed(0x754); -SetRegisterAllowed(0x758); -SetRegisterAllowed(0x75C); -SetRegisterAllowed(0x760); -SetRegisterAllowed(0x764); -SetRegisterAllowed(0x768); -SetRegisterAllowed(0x76C); -SetRegisterAllowed(0x770); -SetRegisterAllowed(0x774); -SetRegisterAllowed(0x778); -SetRegisterAllowed(0x77C); -SetRegisterAllowed(0x780); -SetRegisterAllowed(0x784); -SetRegisterAllowed(0x788); -SetRegisterAllowed(0x78C); -SetRegisterAllowed(0x790); -SetRegisterAllowed(0x794); -SetRegisterAllowed(0x798); -SetRegisterAllowed(0x79C); -SetRegisterAllowed(0x7A0); -SetRegisterAllowed(0x7A4); -SetRegisterAllowed(0x7A8); -SetRegisterAllowed(0x7AC); -SetRegisterAllowed(0x7B0); -SetRegisterAllowed(0x7B4); -SetRegisterAllowed(0x7B8); -SetRegisterAllowed(0x7BC); -SetRegisterAllowed(0x7C0); -SetRegisterAllowed(0x7C4); -SetRegisterAllowed(0x7C8); -SetRegisterAllowed(0x7CC); -SetRegisterAllowed(0x7D0); -SetRegisterAllowed(0x7D4); -SetRegisterAllowed(0x7D8); -SetRegisterAllowed(0x7DC); -SetRegisterAllowed(0x7E0); -SetRegisterAllowed(0x7E4); -SetRegisterAllowed(0x7E8); -SetRegisterAllowed(0x7EC); -SetRegisterAllowed(0x7F0); -SetRegisterAllowed(0x7F4); -SetRegisterAllowed(0x7F8); -SetRegisterAllowed(0x7FC); -SetRegisterAllowed(0x800); -SetRegisterAllowed(0x804); -SetRegisterAllowed(0x808); -SetRegisterAllowed(0x80C); -SetRegisterAllowed(0x810); -SetRegisterAllowed(0x814); -SetRegisterAllowed(0x818); -SetRegisterAllowed(0x81C); -SetRegisterAllowed(0x820); -SetRegisterAllowed(0x824); -SetRegisterAllowed(0x828); -SetRegisterAllowed(0x82C); -SetRegisterAllowed(0x830); -SetRegisterAllowed(0x834); -SetRegisterAllowed(0x838); -SetRegisterAllowed(0x83C); -SetRegisterAllowed(0x840); -SetRegisterAllowed(0x844); -SetRegisterAllowed(0x848); -SetRegisterAllowed(0x84C); -SetRegisterAllowed(0x850); -SetRegisterAllowed(0x854); -SetRegisterAllowed(0x858); -SetRegisterAllowed(0x85C); -SetRegisterAllowed(0x860); -SetRegisterAllowed(0x864); -SetRegisterAllowed(0x868); -SetRegisterAllowed(0x86C); -SetRegisterAllowed(0x870); -SetRegisterAllowed(0x874); -SetRegisterAllowed(0x878); -SetRegisterAllowed(0x87C); -SetRegisterAllowed(0x880); -SetRegisterAllowed(0x884); -SetRegisterAllowed(0x888); -SetRegisterAllowed(0x88C); -SetRegisterAllowed(0x890); -SetRegisterAllowed(0x894); -SetRegisterAllowed(0x898); -SetRegisterAllowed(0x89C); -SetRegisterAllowed(0x8A0); -SetRegisterAllowed(0x8A4); -SetRegisterAllowed(0x8A8); -SetRegisterAllowed(0x8AC); -SetRegisterAllowed(0x8B0); -SetRegisterAllowed(0x8B4); -SetRegisterAllowed(0x8B8); -SetRegisterAllowed(0x8BC); -SetRegisterAllowed(0x8C0); -SetRegisterAllowed(0x8C4); -SetRegisterAllowed(0x8C8); -SetRegisterAllowed(0x8CC); -SetRegisterAllowed(0x8D0); -SetRegisterAllowed(0x8D4); -SetRegisterAllowed(0x8D8); -SetRegisterAllowed(0x8DC); -SetRegisterAllowed(0x8E0); -SetRegisterAllowed(0x8E4); -SetRegisterAllowed(0x8E8); -SetRegisterAllowed(0x8EC); -SetRegisterAllowed(0x8F0); -SetRegisterAllowed(0x8F4); -SetRegisterAllowed(0x8F8); -SetRegisterAllowed(0x8FC); -SetRegisterAllowed(0x900); -SetRegisterAllowed(0x904); -SetRegisterAllowed(0x908); -SetRegisterAllowed(0x90C); -SetRegisterAllowed(0x910); -SetRegisterAllowed(0x914); -SetRegisterAllowed(0x918); -SetRegisterAllowed(0x91C); -SetRegisterAllowed(0x920); -SetRegisterAllowed(0x924); -SetRegisterAllowed(0x928); -SetRegisterAllowed(0x92C); -SetRegisterAllowed(0x930); -SetRegisterAllowed(0x934); -SetRegisterAllowed(0x938); -SetRegisterAllowed(0x93C); -SetRegisterAllowed(0x940); -SetRegisterAllowed(0x944); -SetRegisterAllowed(0x948); -SetRegisterAllowed(0x94C); -SetRegisterAllowed(0x950); -SetRegisterAllowed(0x954); -SetRegisterAllowed(0x958); -SetRegisterAllowed(0x95C); -SetRegisterAllowed(0x960); -SetRegisterAllowed(0x964); -SetRegisterAllowed(0x968); -SetRegisterAllowed(0x96C); -SetRegisterAllowed(0x970); -SetRegisterAllowed(0x974); -SetRegisterAllowed(0x978); -SetRegisterAllowed(0x97C); -SetRegisterAllowed(0x980); -SetRegisterAllowed(0x984); -SetRegisterAllowed(0x988); -SetRegisterAllowed(0x98C); -SetRegisterAllowed(0x990); -SetRegisterAllowed(0x994); -SetRegisterAllowed(0x998); -SetRegisterAllowed(0x99C); -SetRegisterAllowed(0x9A0); -SetRegisterAllowed(0x9A4); -SetRegisterAllowed(0x9A8); -SetRegisterAllowed(0x9AC); -SetRegisterAllowed(0x9B0); -SetRegisterAllowed(0x9B4); -SetRegisterAllowed(0x9B8); -SetRegisterAllowed(0x9BC); -SetRegisterAllowed(0x9C0); -SetRegisterAllowed(0x9C4); -SetRegisterAllowed(0x9C8); -SetRegisterAllowed(0x9CC); -SetRegisterAllowed(0x9D0); -SetRegisterAllowed(0x9D4); -SetRegisterAllowed(0x9D8); -SetRegisterAllowed(0x9DC); -SetRegisterAllowed(0x9E0); -SetRegisterAllowed(0x9E4); -SetRegisterAllowed(0x9E8); -SetRegisterAllowed(0x9EC); -SetRegisterAllowed(0x9F0); -SetRegisterAllowed(0x9F4); -SetRegisterAllowed(0x9F8); -SetRegisterAllowed(0x9FC); -SetRegisterAllowed(0xA00); -SetRegisterAllowed(0xA04); -SetRegisterAllowed(0xA08); -SetRegisterAllowed(0xA0C); -SetRegisterAllowed(0xA10); -SetRegisterAllowed(0xA14); -SetRegisterAllowed(0xA18); -SetRegisterAllowed(0xA1C); -SetRegisterAllowed(0xA20); -SetRegisterAllowed(0xA24); -SetRegisterAllowed(0xA28); -SetRegisterAllowed(0xA2C); -SetRegisterAllowed(0xA30); -SetRegisterAllowed(0xA34); -SetRegisterAllowed(0xA38); -SetRegisterAllowed(0xA3C); -SetRegisterAllowed(0xA40); -SetRegisterAllowed(0xA44); -SetRegisterAllowed(0xA48); -SetRegisterAllowed(0xA4C); -SetRegisterAllowed(0xA50); -SetRegisterAllowed(0xA54); -SetRegisterAllowed(0xA58); -SetRegisterAllowed(0xA5C); -SetRegisterAllowed(0xA60); -SetRegisterAllowed(0xA64); -SetRegisterAllowed(0xA68); -SetRegisterAllowed(0xA6C); -SetRegisterAllowed(0xA70); -SetRegisterAllowed(0xA74); -SetRegisterAllowed(0xA78); -SetRegisterAllowed(0xA7C); -SetRegisterAllowed(0xA80); -SetRegisterAllowed(0xA84); -SetRegisterAllowed(0xA88); -SetRegisterAllowed(0xA8C); -SetRegisterAllowed(0xA90); -SetRegisterAllowed(0xA94); -SetRegisterAllowed(0xA98); -SetRegisterAllowed(0xA9C); -SetRegisterAllowed(0xAA0); -SetRegisterAllowed(0xAA4); -SetRegisterAllowed(0xAA8); -SetRegisterAllowed(0xAAC); -SetRegisterAllowed(0xAB0); -SetRegisterAllowed(0xAB4); -SetRegisterAllowed(0xAB8); -SetRegisterAllowed(0xABC); -SetRegisterAllowed(0xAC0); -SetRegisterAllowed(0xAC4); -SetRegisterAllowed(0xAC8); -SetRegisterAllowed(0xACC); -SetRegisterAllowed(0xAD0); -SetRegisterAllowed(0xAD4); -SetRegisterAllowed(0xAD8); -SetRegisterAllowed(0xADC); -SetRegisterAllowed(0xAE0); -SetRegisterAllowed(0xAE4); -SetRegisterAllowed(0xAE8); -SetRegisterAllowed(0xAEC); -SetRegisterAllowed(0xAF0); -SetRegisterAllowed(0xAF4); -SetRegisterAllowed(0xAF8); -SetRegisterAllowed(0xAFC); -SetRegisterAllowed(0xB00); -SetRegisterAllowed(0xB04); -SetRegisterAllowed(0xB08); -SetRegisterAllowed(0xB0C); -SetRegisterAllowed(0xB10); -SetRegisterAllowed(0xB14); -SetRegisterAllowed(0xB18); -SetRegisterAllowed(0xB1C); -SetRegisterAllowed(0xB20); -SetRegisterAllowed(0xB24); -SetRegisterAllowed(0xB28); -SetRegisterAllowed(0xB2C); -SetRegisterAllowed(0xB30); -SetRegisterAllowed(0xB34); -SetRegisterAllowed(0xB38); -SetRegisterAllowed(0xB3C); -SetRegisterAllowed(0xB40); -SetRegisterAllowed(0xB44); -SetRegisterAllowed(0xB48); -SetRegisterAllowed(0xB4C); -SetRegisterAllowed(0xB50); -SetRegisterAllowed(0xB54); -SetRegisterAllowed(0xB58); -SetRegisterAllowed(0xB5C); -SetRegisterAllowed(0xB60); -SetRegisterAllowed(0xB64); -SetRegisterAllowed(0xB68); -SetRegisterAllowed(0xB6C); -SetRegisterAllowed(0xB70); -SetRegisterAllowed(0xB74); -SetRegisterAllowed(0xB78); -SetRegisterAllowed(0xB7C); -SetRegisterAllowed(0xB80); -SetRegisterAllowed(0xB84); -SetRegisterAllowed(0xB88); -SetRegisterAllowed(0xB8C); -SetRegisterAllowed(0xB90); -SetRegisterAllowed(0xB94); -SetRegisterAllowed(0xB98); -SetRegisterAllowed(0xB9C); -SetRegisterAllowed(0xBA0); -SetRegisterAllowed(0xBA4); -SetRegisterAllowed(0xBA8); -SetRegisterAllowed(0xBAC); -SetRegisterAllowed(0xBB0); -SetRegisterAllowed(0xBB4); -SetRegisterAllowed(0xBB8); -SetRegisterAllowed(0xBBC); -SetRegisterAllowed(0xBC0); -SetRegisterAllowed(0xBC4); -SetRegisterAllowed(0xBC8); -SetRegisterAllowed(0xBCC); -SetRegisterAllowed(0xBD0); -SetRegisterAllowed(0xBD4); -SetRegisterAllowed(0xBD8); -SetRegisterAllowed(0xBDC); -SetRegisterAllowed(0xBE0); -SetRegisterAllowed(0xBE4); -SetRegisterAllowed(0xBE8); -SetRegisterAllowed(0xBEC); -SetRegisterAllowed(0xBF0); -SetRegisterAllowed(0xBF4); -SetRegisterAllowed(0xBF8); -SetRegisterAllowed(0xBFC); -SetRegisterAllowed(0xC00); -SetRegisterAllowed(0xC04); -SetRegisterAllowed(0xC08); -SetRegisterAllowed(0xC0C); -SetRegisterAllowed(0xC10); -SetRegisterAllowed(0xC14); -SetRegisterAllowed(0xC18); -SetRegisterAllowed(0xC1C); -SetRegisterAllowed(0xC20); -SetRegisterAllowed(0xC24); -SetRegisterAllowed(0xC28); -SetRegisterAllowed(0xC2C); -SetRegisterAllowed(0xC30); -SetRegisterAllowed(0xC34); -SetRegisterAllowed(0xC38); -SetRegisterAllowed(0xC3C); -SetRegisterAllowed(0xC40); -SetRegisterAllowed(0xC44); -SetRegisterAllowed(0xC48); -SetRegisterAllowed(0xC4C); -SetRegisterAllowed(0xC50); -SetRegisterAllowed(0xC54); -SetRegisterAllowed(0xC58); -SetRegisterAllowed(0xC5C); -SetRegisterAllowed(0xC60); -SetRegisterAllowed(0xC64); -SetRegisterAllowed(0xC68); -SetRegisterAllowed(0xC6C); -SetRegisterAllowed(0xC70); -SetRegisterAllowed(0xC74); -SetRegisterAllowed(0xC78); -SetRegisterAllowed(0xC7C); -SetRegisterAllowed(0xC80); -SetRegisterAllowed(0xC84); -SetRegisterAllowed(0xC88); -SetRegisterAllowed(0xC8C); -SetRegisterAllowed(0xC90); -SetRegisterAllowed(0xC94); -SetRegisterAllowed(0xC98); -SetRegisterAllowed(0xC9C); -SetRegisterAllowed(0xCA0); -SetRegisterAllowed(0xCA4); -SetRegisterAllowed(0xCA8); -SetRegisterAllowed(0xCAC); -SetRegisterAllowed(0xCB0); -SetRegisterAllowed(0xCB4); -SetRegisterAllowed(0xCB8); -SetRegisterAllowed(0xCBC); -SetRegisterAllowed(0xCC0); -SetRegisterAllowed(0xCC4); -SetRegisterAllowed(0xCC8); -SetRegisterAllowed(0xCCC); -SetRegisterAllowed(0xCD0); -SetRegisterAllowed(0xCD4); -SetRegisterAllowed(0xCD8); -SetRegisterAllowed(0xCDC); -SetRegisterAllowed(0xCE0); -SetRegisterAllowed(0xCE4); -SetRegisterAllowed(0xCE8); -SetRegisterAllowed(0xCEC); -SetRegisterAllowed(0xCF0); -SetRegisterAllowed(0xCF4); -SetRegisterAllowed(0xCF8); -SetRegisterAllowed(0xCFC); -SetRegisterAllowed(0xD00); -SetRegisterAllowed(0xD04); -SetRegisterAllowed(0xD08); -SetRegisterAllowed(0xD0C); -SetRegisterAllowed(0xD10); -SetRegisterAllowed(0xD14); -SetRegisterAllowed(0xD18); -SetRegisterAllowed(0xD1C); -SetRegisterAllowed(0xD20); -SetRegisterAllowed(0xD24); -SetRegisterAllowed(0xD28); -SetRegisterAllowed(0xD2C); -SetRegisterAllowed(0xD30); -SetRegisterAllowed(0xD34); -SetRegisterAllowed(0xD38); -SetRegisterAllowed(0xD3C); -SetRegisterAllowed(0xD40); -SetRegisterAllowed(0xD44); -SetRegisterAllowed(0xD48); -SetRegisterAllowed(0xD4C); -SetRegisterAllowed(0xD50); -SetRegisterAllowed(0xD54); -SetRegisterAllowed(0xD58); -SetRegisterAllowed(0xD5C); -SetRegisterAllowed(0xD60); -SetRegisterAllowed(0xD64); -SetRegisterAllowed(0xD68); -SetRegisterAllowed(0xD6C); -SetRegisterAllowed(0xD70); -SetRegisterAllowed(0xD74); -SetRegisterAllowed(0xD78); -SetRegisterAllowed(0xD7C); -SetRegisterAllowed(0xD80); -SetRegisterAllowed(0xD84); -SetRegisterAllowed(0xD88); -SetRegisterAllowed(0xD8C); -SetRegisterAllowed(0xD90); -SetRegisterAllowed(0xD94); -SetRegisterAllowed(0xD98); -SetRegisterAllowed(0xD9C); -SetRegisterAllowed(0xDA0); -SetRegisterAllowed(0xDA4); -SetRegisterAllowed(0xDA8); -SetRegisterAllowed(0xDAC); -SetRegisterAllowed(0xDB0); -SetRegisterAllowed(0xDB4); -SetRegisterAllowed(0xDB8); -SetRegisterAllowed(0xDBC); -SetRegisterAllowed(0xDC0); -SetRegisterAllowed(0xDC4); -SetRegisterAllowed(0xDC8); -SetRegisterAllowed(0xDCC); -SetRegisterAllowed(0xDD0); -SetRegisterAllowed(0xDD4); -SetRegisterAllowed(0xDD8); -SetRegisterAllowed(0xDDC); -SetRegisterAllowed(0xDE0); -SetRegisterAllowed(0xDE4); -SetRegisterAllowed(0xDE8); -SetRegisterAllowed(0xDEC); -SetRegisterAllowed(0xDF0); -SetRegisterAllowed(0xDF4); -SetRegisterAllowed(0xDF8); -SetRegisterAllowed(0xDFC); -SetRegisterAllowed(0xE00); -SetRegisterAllowed(0xE04); -SetRegisterAllowed(0xE08); -SetRegisterAllowed(0xE0C); -SetRegisterAllowed(0xE10); -SetRegisterAllowed(0xE14); -SetRegisterAllowed(0xE18); -SetRegisterAllowed(0xE1C); -SetRegisterAllowed(0xE20); -SetRegisterAllowed(0xE24); -SetRegisterAllowed(0xE28); -SetRegisterAllowed(0xE2C); -SetRegisterAllowed(0xE30); -SetRegisterAllowed(0xE34); -SetRegisterAllowed(0xE38); -SetRegisterAllowed(0xE3C); -SetRegisterAllowed(0xE40); -SetRegisterAllowed(0xE44); -SetRegisterAllowed(0xE48); -SetRegisterAllowed(0xE4C); -SetRegisterAllowed(0xE50); -SetRegisterAllowed(0xE54); -SetRegisterAllowed(0xE58); -SetRegisterAllowed(0xE5C); -SetRegisterAllowed(0xE60); -SetRegisterAllowed(0xE64); -SetRegisterAllowed(0xE68); -SetRegisterAllowed(0xE6C); -SetRegisterAllowed(0xE70); -SetRegisterAllowed(0xE74); -SetRegisterAllowed(0xE78); -SetRegisterAllowed(0xE7C); -SetRegisterAllowed(0xE80); -SetRegisterAllowed(0xE84); -SetRegisterAllowed(0xE88); -SetRegisterAllowed(0xE8C); -SetRegisterAllowed(0xE90); -SetRegisterAllowed(0xE94); -SetRegisterAllowed(0xE98); -SetRegisterAllowed(0xE9C); -SetRegisterAllowed(0xEA0); -SetRegisterAllowed(0xEA4); -SetRegisterAllowed(0xEA8); -SetRegisterAllowed(0xEAC); -SetRegisterAllowed(0xEB0); -SetRegisterAllowed(0xEB4); -SetRegisterAllowed(0xEB8); -SetRegisterAllowed(0xEBC); -SetRegisterAllowed(0xEC0); -SetRegisterAllowed(0xEC4); -SetRegisterAllowed(0xEC8); -SetRegisterAllowed(0xECC); -SetRegisterAllowed(0xED0); -SetRegisterAllowed(0xED4); -SetRegisterAllowed(0xED8); diff --git a/Source/Atmosphere-Patches/secmon_memory_layout.hpp b/Source/Atmosphere-Patches/secmon_memory_layout.hpp deleted file mode 100644 index 891d9d98..00000000 --- a/Source/Atmosphere-Patches/secmon_memory_layout.hpp +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Copyright (c) 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 . - */ -#pragma once -#include -#include - -namespace ams::secmon { - - using Address = u64; - - struct MemoryRegion { - private: - Address m_start_address; - Address m_end_address; - public: - consteval MemoryRegion(Address address, size_t size) : m_start_address(address), m_end_address(address + size) { - if (m_end_address < m_start_address) { - __builtin_unreachable(); - } - } - - constexpr Address GetStartAddress() const { - return m_start_address; - } - - constexpr Address GetAddress() const { - return this->GetStartAddress(); - } - - constexpr Address GetEndAddress() const { - return m_end_address; - } - - constexpr Address GetLastAddress() const { - return m_end_address - 1; - } - - constexpr size_t GetSize() const { - return m_end_address - m_start_address; - } - - constexpr bool Contains(Address address, size_t size) const { - return m_start_address <= address && (address + size - 1) <= this->GetLastAddress(); - } - - constexpr bool Contains(const MemoryRegion &rhs) const { - return this->Contains(rhs.GetStartAddress(), rhs.GetSize()); - } - - template requires (std::is_same::value || util::is_pod::value) - ALWAYS_INLINE T *GetPointer() const { - return reinterpret_cast(this->GetAddress()); - } - - template requires (std::is_same::value || util::is_pod::value) - ALWAYS_INLINE T *GetEndPointer() const { - return reinterpret_cast(this->GetEndAddress()); - } - }; - - constexpr inline const MemoryRegion MemoryRegionVirtual = MemoryRegion(UINT64_C(0x1F0000000), 2_MB); - constexpr inline const MemoryRegion MemoryRegionPhysical = MemoryRegion(UINT64_C( 0x40000000), 1_GB); - constexpr inline const MemoryRegion MemoryRegionDram = MemoryRegion(UINT64_C( 0x80000000), 2_GB); - constexpr inline const MemoryRegion MemoryRegionDramHigh = MemoryRegion(MemoryRegionDram.GetEndAddress(), 2_GB); - - constexpr inline const MemoryRegion MemoryRegionDramForMarikoProgram = MemoryRegion(UINT64_C(0xC0000000), 1_GB); - constexpr inline const MemoryRegion MemoryRegionDramDcFramebuffer = MemoryRegion(UINT64_C(0xC0000000), 4_MB); - static_assert(MemoryRegionDram.Contains(MemoryRegionDramForMarikoProgram)); - static_assert(MemoryRegionDramForMarikoProgram.Contains(MemoryRegionDramDcFramebuffer)); - - constexpr inline const MemoryRegion MemoryRegionDramGpuCarveout = MemoryRegion(UINT64_C(0x80020000), UINT64_C(0x40000)); - static_assert(MemoryRegionDram.Contains(MemoryRegionDramGpuCarveout)); - - constexpr inline const MemoryRegion MemoryRegionDramDefaultKernelCarveout = MemoryRegion(UINT64_C(0x80060000), UINT64_C(0x1FFE0000)); - static_assert(MemoryRegionDram.Contains(MemoryRegionDramDefaultKernelCarveout)); - - constexpr inline const MemoryRegion MemoryRegionDramPackage2Payloads = MemoryRegion(MemoryRegionDram.GetAddress(), 8_MB); - static_assert(MemoryRegionDram.Contains(MemoryRegionDramPackage2Payloads)); - - constexpr inline const MemoryRegion MemoryRegionDramPackage2 = MemoryRegion(UINT64_C(0xA9800000), UINT64_C(0x07FC0000)); - static_assert(MemoryRegionDram.Contains(MemoryRegionDramPackage2)); - - constexpr inline const MemoryRegion MemoryRegionPhysicalIram = MemoryRegion(UINT64_C(0x40000000), 0x40000); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzram = MemoryRegion(UINT64_C(0x7C010000), 0x10000); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramMariko = MemoryRegion(UINT64_C(0x7C010000), 0x40000); - static_assert(MemoryRegionPhysical.Contains(MemoryRegionPhysicalIram)); - static_assert(MemoryRegionPhysical.Contains(MemoryRegionPhysicalTzram)); - static_assert(MemoryRegionPhysicalTzramMariko.Contains(MemoryRegionPhysicalTzram)); - - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramVolatile(UINT64_C(0x7C010000), 0x2000); - static_assert(MemoryRegionPhysicalTzram.Contains(MemoryRegionPhysicalTzramVolatile)); - - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramNonVolatile(UINT64_C(0x7C012000), 0xE000); - static_assert(MemoryRegionPhysicalTzram.Contains(MemoryRegionPhysicalTzramNonVolatile)); - - static_assert(MemoryRegionPhysicalTzram.GetSize() == MemoryRegionPhysicalTzramNonVolatile.GetSize() + MemoryRegionPhysicalTzramVolatile.GetSize()); - - constexpr inline const MemoryRegion MemoryRegionVirtualL1 = MemoryRegion(util::AlignDown(MemoryRegionVirtual.GetAddress(), mmu::L1EntrySize), mmu::L1EntrySize); - constexpr inline const MemoryRegion MemoryRegionPhysicalL1 = MemoryRegion(util::AlignDown(MemoryRegionPhysical.GetAddress(), mmu::L1EntrySize), mmu::L1EntrySize); - static_assert(MemoryRegionVirtualL1.Contains(MemoryRegionVirtual)); - static_assert(MemoryRegionPhysicalL1.Contains(MemoryRegionPhysical)); - - constexpr inline const MemoryRegion MemoryRegionVirtualL2 = MemoryRegion(util::AlignDown(MemoryRegionVirtual.GetAddress(), mmu::L2EntrySize), mmu::L2EntrySize); - constexpr inline const MemoryRegion MemoryRegionPhysicalIramL2 = MemoryRegion(util::AlignDown(MemoryRegionPhysicalIram.GetAddress(), mmu::L2EntrySize), mmu::L2EntrySize); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramL2 = MemoryRegion(util::AlignDown(MemoryRegionPhysicalTzram.GetAddress(), mmu::L2EntrySize), mmu::L2EntrySize); - static_assert(MemoryRegionVirtualL2.Contains(MemoryRegionVirtual)); - static_assert(MemoryRegionPhysicalIramL2.Contains(MemoryRegionPhysicalIram)); - static_assert(MemoryRegionPhysicalTzramL2.Contains(MemoryRegionPhysicalTzram)); - - constexpr inline const MemoryRegion MemoryRegionPhysicalIramBootCode = MemoryRegion(UINT64_C(0x40020000), 0x20000); - static_assert(MemoryRegionPhysicalIram.Contains(MemoryRegionPhysicalIramBootCode)); - - constexpr inline const MemoryRegion MemoryRegionVirtualDevice = MemoryRegion(UINT64_C(0x1F0040000), UINT64_C(0x40000)); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualDevice)); - - constexpr inline const MemoryRegion MemoryRegionVirtualDeviceEmpty = MemoryRegion(MemoryRegionVirtualDevice.GetStartAddress(), 0); - - #define AMS_SECMON_FOREACH_DEVICE_REGION(HANDLER, ...) \ - HANDLER(GicDistributor, Empty, UINT64_C(0x50041000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(GicCpuInterface, GicDistributor, UINT64_C(0x50042000), UINT64_C(0x2000), true, ## __VA_ARGS__) \ - HANDLER(Uart, GicCpuInterface, UINT64_C(0x70006000), UINT64_C(0x1000), false, ## __VA_ARGS__) \ - HANDLER(ClkRst, Uart, UINT64_C(0x60006000), UINT64_C(0x1000), false, ## __VA_ARGS__) \ - HANDLER(RtcPmc, ClkRst, UINT64_C(0x7000E000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(Timer, RtcPmc, UINT64_C(0x60005000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(System, Timer, UINT64_C(0x6000C000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(SecurityEngine, System, UINT64_C(0x70012000), UINT64_C(0x2000), true, ## __VA_ARGS__) \ - HANDLER(SecurityEngine2, SecurityEngine, UINT64_C(0x70412000), UINT64_C(0x2000), true, ## __VA_ARGS__) \ - HANDLER(SysCtr0, SecurityEngine2, UINT64_C(0x700F0000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(MemoryController, SysCtr0, UINT64_C(0x70019000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(ExternalMemoryController, MemoryController, UINT64_C(0x7001b000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(FuseKFuse, ExternalMemoryController, UINT64_C(0x7000F000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(ApbMisc, FuseKFuse, UINT64_C(0x70000000), UINT64_C(0x4000), true, ## __VA_ARGS__) \ - HANDLER(FlowController, ApbMisc, UINT64_C(0x60007000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(BootloaderParams, FlowController, UINT64_C(0x40000000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(I2c5, BootloaderParams, UINT64_C(0x7000D000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(Gpio, I2c5, UINT64_C(0x6000D000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(I2c1, Gpio, UINT64_C(0x7000C000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(ExceptionVectors, I2c1, UINT64_C(0x6000F000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(MemoryController0, ExceptionVectors, UINT64_C(0x7001C000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(MemoryController1, MemoryController0, UINT64_C(0x7001D000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(Sdmmc, MemoryController1, UINT64_C(0x700B0000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(Disp1, Sdmmc, UINT64_C(0x54200000), UINT64_C(0x3000), true, ## __VA_ARGS__) \ - HANDLER(Dsi, Disp1, UINT64_C(0x54300000), UINT64_C(0x1000), true, ## __VA_ARGS__) \ - HANDLER(MipiCal, Dsi, UINT64_C(0x700E3000), UINT64_C(0x1000), true, ## __VA_ARGS__) - - #define DEFINE_DEVICE_REGION(_NAME_, _PREV_, _ADDRESS_, _SIZE_, _SECURE_) \ - constexpr inline const MemoryRegion MemoryRegionVirtualDevice##_NAME_ = MemoryRegion(MemoryRegionVirtualDevice##_PREV_.GetEndAddress() + 0x1000, _SIZE_); \ - constexpr inline const MemoryRegion MemoryRegionPhysicalDevice##_NAME_ = MemoryRegion(_ADDRESS_, _SIZE_); \ - static_assert(MemoryRegionVirtualDevice.Contains(MemoryRegionVirtualDevice##_NAME_)); \ - static_assert(MemoryRegionPhysical.Contains(MemoryRegionPhysicalDevice##_NAME_)); - - AMS_SECMON_FOREACH_DEVICE_REGION(DEFINE_DEVICE_REGION) - - #undef DEFINE_DEVICE_REGION - - constexpr inline const MemoryRegion MemoryRegionVirtualDeviceFuses = MemoryRegion(MemoryRegionVirtualDeviceFuseKFuse.GetAddress() + 0x800, 0x400); - constexpr inline const MemoryRegion MemoryRegionPhysicalDeviceFuses = MemoryRegion(MemoryRegionPhysicalDeviceFuseKFuse.GetAddress() + 0x800, 0x400); - static_assert(MemoryRegionVirtualDeviceFuseKFuse.Contains(MemoryRegionVirtualDeviceFuses)); - static_assert(MemoryRegionPhysicalDeviceFuseKFuse.Contains(MemoryRegionPhysicalDeviceFuses)); - - constexpr inline const MemoryRegion MemoryRegionVirtualDeviceActivityMonitor = MemoryRegion(MemoryRegionVirtualDeviceSystem.GetAddress() + 0x800, 0x400); - constexpr inline const MemoryRegion MemoryRegionPhysicalDeviceActivityMonitor = MemoryRegion(MemoryRegionPhysicalDeviceSystem.GetAddress() + 0x800, 0x400); - static_assert(MemoryRegionVirtualDeviceSystem.Contains(MemoryRegionVirtualDeviceActivityMonitor)); - static_assert(MemoryRegionPhysicalDeviceSystem.Contains(MemoryRegionPhysicalDeviceActivityMonitor)); - - constexpr inline const MemoryRegion MemoryRegionVirtualDeviceUartA = MemoryRegion(MemoryRegionVirtualDeviceUart.GetAddress() + 0x000, 0x040); - constexpr inline const MemoryRegion MemoryRegionVirtualDeviceUartB = MemoryRegion(MemoryRegionVirtualDeviceUart.GetAddress() + 0x040, 0x040); - constexpr inline const MemoryRegion MemoryRegionVirtualDeviceUartC = MemoryRegion(MemoryRegionVirtualDeviceUart.GetAddress() + 0x200, 0x100); - static_assert(MemoryRegionVirtualDeviceUart.Contains(MemoryRegionVirtualDeviceUartA)); - static_assert(MemoryRegionVirtualDeviceUart.Contains(MemoryRegionVirtualDeviceUartB)); - static_assert(MemoryRegionVirtualDeviceUart.Contains(MemoryRegionVirtualDeviceUartC)); - - constexpr inline const MemoryRegion MemoryRegionPhysicalDeviceUartA = MemoryRegion(MemoryRegionPhysicalDeviceUart.GetAddress() + 0x000, 0x040); - constexpr inline const MemoryRegion MemoryRegionPhysicalDeviceUartB = MemoryRegion(MemoryRegionPhysicalDeviceUart.GetAddress() + 0x040, 0x040); - constexpr inline const MemoryRegion MemoryRegionPhysicalDeviceUartC = MemoryRegion(MemoryRegionPhysicalDeviceUart.GetAddress() + 0x200, 0x100); - static_assert(MemoryRegionPhysicalDeviceUart.Contains(MemoryRegionPhysicalDeviceUartA)); - static_assert(MemoryRegionPhysicalDeviceUart.Contains(MemoryRegionPhysicalDeviceUartB)); - static_assert(MemoryRegionPhysicalDeviceUart.Contains(MemoryRegionPhysicalDeviceUartC)); - - constexpr inline const MemoryRegion MemoryRegionVirtualDevicePmc = MemoryRegion(MemoryRegionVirtualDeviceRtcPmc.GetAddress() + 0x400, 0xC00); - constexpr inline const MemoryRegion MemoryRegionPhysicalDevicePmc = MemoryRegion(MemoryRegionPhysicalDeviceRtcPmc.GetAddress() + 0x400, 0xC00); - static_assert(MemoryRegionVirtualDeviceRtcPmc.Contains(MemoryRegionVirtualDevicePmc)); - static_assert(MemoryRegionPhysicalDeviceRtcPmc.Contains(MemoryRegionPhysicalDevicePmc)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramReadOnlyAlias = MemoryRegion(UINT64_C(0x1F00A0000), MemoryRegionPhysicalTzram.GetSize()); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramReadOnlyAlias = MemoryRegion(MemoryRegionPhysicalTzram.GetAddress(), MemoryRegionPhysicalTzram.GetSize()); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualTzramReadOnlyAlias)); - static_assert(MemoryRegionPhysicalTzram.Contains(MemoryRegionPhysicalTzramReadOnlyAlias)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramProgram(UINT64_C(0x1F00C0000), 0xC000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualTzramProgram)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramProgramExceptionVectors(UINT64_C(0x1F00C0000), 0x800); - static_assert(MemoryRegionVirtualTzramProgram.Contains(MemoryRegionVirtualTzramProgramExceptionVectors)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramMarikoProgram(UINT64_C(0x1F00D0000), 0x20000); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramMarikoProgram(UINT64_C(0x7C020000), 0x20000); - static_assert(MemoryRegionPhysicalTzramMariko.Contains(MemoryRegionPhysicalTzramMarikoProgram)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramMarikoProgramFatalErrorContext(UINT64_C(0x1F00EF000), 0x1000); - static_assert(MemoryRegionVirtualTzramMarikoProgram.Contains(MemoryRegionVirtualTzramMarikoProgramFatalErrorContext)); - - constexpr inline const MemoryRegion MemoryRegionPhysicalIramFatalErrorContext(UINT64_C(0x4003E000), 0x1000); - static_assert(MemoryRegionPhysicalIram.Contains(MemoryRegionPhysicalIramFatalErrorContext)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramMarikoProgramStack(UINT64_C(0x1F00F4000), 0x8000); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramMarikoProgramStack(UINT64_C(0x7C040000), 0x8000); - static_assert(MemoryRegionPhysicalTzramMariko.Contains(MemoryRegionPhysicalTzramMarikoProgramStack)); - - constexpr inline const MemoryRegion MemoryRegionPhysicalMarikoProgramImage(UINT64_C(0x80020000), 0x20000); - static_assert(MemoryRegionDram.Contains(MemoryRegionPhysicalMarikoProgramImage)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramProgramMain(UINT64_C(0x1F00C0800), 0xB800); - static_assert(MemoryRegionVirtualTzramProgram.Contains(MemoryRegionVirtualTzramProgramMain)); - - static_assert(MemoryRegionVirtualTzramProgram.GetSize() == MemoryRegionVirtualTzramProgramExceptionVectors.GetSize() + MemoryRegionVirtualTzramProgramMain.GetSize()); - - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramProgram(UINT64_C(0x7C012000), 0xC000); - static_assert(MemoryRegionPhysicalTzramNonVolatile.Contains(MemoryRegionPhysicalTzramProgram)); - - constexpr inline const Address PhysicalTzramProgramResetVector = MemoryRegionPhysicalTzramProgram.GetAddress() + MemoryRegionVirtualTzramProgramExceptionVectors.GetSize(); - static_assert(static_cast(PhysicalTzramProgramResetVector) == PhysicalTzramProgramResetVector); - - constexpr uintptr_t GetPhysicalTzramProgramAddress(uintptr_t virtual_address) { - return virtual_address - MemoryRegionVirtualTzramProgram.GetStartAddress() + MemoryRegionPhysicalTzramNonVolatile.GetStartAddress(); - } - - constexpr inline const MemoryRegion MemoryRegionVirtualIramSc7Work = MemoryRegion(UINT64_C(0x1F0120000), MemoryRegionPhysicalTzram.GetSize()); - constexpr inline const MemoryRegion MemoryRegionPhysicalIramSc7Work = MemoryRegion( UINT64_C(0x40020000), MemoryRegionPhysicalTzram.GetSize()); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualIramSc7Work)); - static_assert(MemoryRegionPhysicalIram.Contains(MemoryRegionPhysicalIramSc7Work)); - - constexpr inline const MemoryRegion MemoryRegionVirtualIramSc7Firmware = MemoryRegion(UINT64_C(0x1F0140000), 0x1000); - constexpr inline const MemoryRegion MemoryRegionPhysicalIramSc7Firmware = MemoryRegion( UINT64_C(0x40003000), 0x1000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualIramSc7Firmware)); - static_assert(MemoryRegionPhysicalIram.Contains(MemoryRegionPhysicalIramSc7Firmware)); - - constexpr inline const MemoryRegion MemoryRegionPhysicalIramSecureMonitorDebug(UINT64_C(0x40034000), 0x4000); - static_assert(MemoryRegionPhysicalIram.Contains(MemoryRegionPhysicalIramSecureMonitorDebug)); - - constexpr inline const MemoryRegion MemoryRegionVirtualDebugCode = MemoryRegion(UINT64_C(0x1F0150000), 0x4000); - constexpr inline const MemoryRegion MemoryRegionPhysicalDebugCode = MemoryRegion(UINT64_C(0x40034000), 0x4000); - static_assert(MemoryRegionPhysicalIramSecureMonitorDebug.Contains(MemoryRegionPhysicalDebugCode)); - - constexpr inline const MemoryRegion MemoryRegionVirtualDebug = MemoryRegion(UINT64_C(0x1F0160000), 0x10000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualDebug)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramBootCode = MemoryRegion(UINT64_C(0x1F01C0000), 0x2000); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramBootCode = MemoryRegion( UINT64_C(0x7C010000), 0x2000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualTzramBootCode)); - static_assert(MemoryRegionPhysicalTzramVolatile.Contains(MemoryRegionPhysicalTzramBootCode)); - - constexpr inline const MemoryRegion MemoryRegionPhysicalDramMonitorConfiguration = MemoryRegion( UINT64_C(0x8000F000), 0x1000); - - constexpr inline const MemoryRegion MemoryRegionVirtualDramSecureDataStore = MemoryRegion(UINT64_C(0x1F0100000), 0x10000); - constexpr inline const MemoryRegion MemoryRegionPhysicalDramSecureDataStore = MemoryRegion( UINT64_C(0x80010000), 0x10000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualDramSecureDataStore)); - static_assert(MemoryRegionDram.Contains(MemoryRegionPhysicalDramSecureDataStore)); - - constexpr inline const MemoryRegion MemoryRegionVirtualDramDebugDataStore = MemoryRegion(UINT64_C(0x1F0110000), 0x4000); - constexpr inline const MemoryRegion MemoryRegionPhysicalDramDebugDataStore = MemoryRegion( UINT64_C(0x8000C000), 0x4000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualDramSecureDataStore)); - static_assert(MemoryRegionDram.Contains(MemoryRegionPhysicalDramSecureDataStore)); - - constexpr inline const MemoryRegion MemoryRegionVirtualDramSdmmcMappedData = MemoryRegion(UINT64_C(0x1F0100000), 0xC000); - constexpr inline const MemoryRegion MemoryRegionPhysicalDramSdmmcMappedData = MemoryRegion(UINT64_C(0x80010000), 0xC000); - - constexpr inline const MemoryRegion MemoryRegionVirtualDramDcL0DevicePageTable = MemoryRegion(UINT64_C(0x1F010C000), 0x1000); - constexpr inline const MemoryRegion MemoryRegionPhysicalDramDcL0DevicePageTable = MemoryRegion( UINT64_C(0x8001C000), 0x1000); - - constexpr inline const MemoryRegion MemoryRegionVirtualDramSdmmc1L0DevicePageTable = MemoryRegion(UINT64_C(0x1F010E000), 0x1000); - constexpr inline const MemoryRegion MemoryRegionPhysicalDramSdmmc1L0DevicePageTable = MemoryRegion( UINT64_C(0x8001E000), 0x1000); - - constexpr inline const MemoryRegion MemoryRegionVirtualDramSdmmc1L1DevicePageTable = MemoryRegion(UINT64_C(0x1F010F000), 0x1000); - constexpr inline const MemoryRegion MemoryRegionPhysicalDramSdmmc1L1DevicePageTable = MemoryRegion( UINT64_C(0x8001F000), 0x1000); - - constexpr inline const MemoryRegion MemoryRegionVirtualDramSecureDataStoreTzram = MemoryRegion(UINT64_C(0x1F0100000), 0xE000); - constexpr inline const MemoryRegion MemoryRegionVirtualDramSecureDataStoreWarmbootFirmware = MemoryRegion(UINT64_C(0x1F010E000), 0x17C0); - constexpr inline const MemoryRegion MemoryRegionVirtualDramSecureDataStoreSecurityEngineState = MemoryRegion(UINT64_C(0x1F010F7C0), 0x0840); - static_assert(MemoryRegionVirtualDramSecureDataStore.Contains(MemoryRegionVirtualDramSecureDataStoreTzram)); - static_assert(MemoryRegionVirtualDramSecureDataStore.Contains(MemoryRegionVirtualDramSecureDataStoreWarmbootFirmware)); - static_assert(MemoryRegionVirtualDramSecureDataStore.Contains(MemoryRegionVirtualDramSecureDataStoreSecurityEngineState)); - - constexpr inline const MemoryRegion MemoryRegionPhysicalDramSecureDataStoreTzram = MemoryRegion(UINT64_C(0x80010000), 0xE000); - constexpr inline const MemoryRegion MemoryRegionPhysicalDramSecureDataStoreWarmbootFirmware = MemoryRegion(UINT64_C(0x8001E000), 0x17C0); - constexpr inline const MemoryRegion MemoryRegionPhysicalDramSecureDataStoreSecurityEngineState = MemoryRegion(UINT64_C(0x8001F7C0), 0x0840); - static_assert(MemoryRegionPhysicalDramSecureDataStore.Contains(MemoryRegionPhysicalDramSecureDataStoreTzram)); - static_assert(MemoryRegionPhysicalDramSecureDataStore.Contains(MemoryRegionPhysicalDramSecureDataStoreWarmbootFirmware)); - static_assert(MemoryRegionPhysicalDramSecureDataStore.Contains(MemoryRegionPhysicalDramSecureDataStoreSecurityEngineState)); - - constexpr inline const MemoryRegion MemoryRegionVirtualAtmosphereIramPage = MemoryRegion(UINT64_C(0x1F01F0000), 0x1000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualAtmosphereIramPage)); - - constexpr inline const MemoryRegion MemoryRegionVirtualAtmosphereUserPage = MemoryRegion(UINT64_C(0x1F01F2000), 0x1000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualAtmosphereUserPage)); - - constexpr inline const MemoryRegion MemoryRegionVirtualSmcUserPage = MemoryRegion(UINT64_C(0x1F01F4000), 0x1000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualSmcUserPage)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramVolatileData = MemoryRegion(UINT64_C(0x1F01F6000), 0x1000); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramVolatileData = MemoryRegion( UINT64_C(0x7C010000), 0x1000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualTzramVolatileData)); - static_assert(MemoryRegionPhysicalTzramVolatile.Contains(MemoryRegionPhysicalTzramVolatileData)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramVolatileStack = MemoryRegion(UINT64_C(0x1F01F8000), 0x1000); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramVolatileStack = MemoryRegion( UINT64_C(0x7C011000), 0x1000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualTzramVolatileStack)); - static_assert(MemoryRegionPhysicalTzramVolatile.Contains(MemoryRegionPhysicalTzramVolatileStack)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramConfigurationData = MemoryRegion(UINT64_C(0x1F01FA000), 0x1000); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramConfigurationData = MemoryRegion( UINT64_C(0x7C01E000), 0x1000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualTzramConfigurationData)); - static_assert(MemoryRegionPhysicalTzramNonVolatile.Contains(MemoryRegionPhysicalTzramConfigurationData)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramL1PageTable = MemoryRegion(UINT64_C(0x1F01FCFC0), 0x40); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramL1PageTable = MemoryRegion( UINT64_C(0x7C01EFC0), 0x40); - static_assert(MemoryRegionPhysicalTzramConfigurationData.Contains(MemoryRegionPhysicalTzramL1PageTable)); - - constexpr inline const MemoryRegion MemoryRegionVirtualTzramL2L3PageTable = MemoryRegion(UINT64_C(0x1F01FE000), 0x1000); - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramL2L3PageTable = MemoryRegion( UINT64_C(0x7C01F000), 0x1000); - static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualTzramL2L3PageTable)); - static_assert(MemoryRegionPhysicalTzramNonVolatile.Contains(MemoryRegionPhysicalTzramL2L3PageTable)); - - constexpr inline const MemoryRegion MemoryRegionPhysicalTzramFullProgramImage = MemoryRegion(UINT64_C(0x7C010800), 0xD800); - constexpr inline const MemoryRegion MemoryRegionPhysicalIramBootCodeImage = MemoryRegion(UINT64_C(0x40032000), 0xC000); - - constexpr inline const MemoryRegion MemoryRegionPhysicalIramBootCodeCode = MemoryRegion(UINT64_C(0x40032000), 0x1000); - constexpr inline const MemoryRegion MemoryRegionPhysicalIramBootCodeKeys = MemoryRegion(UINT64_C(0x40033000), 0x1000); - - constexpr inline const MemoryRegion MemoryRegionPhysicalIramWarmbootBin = MemoryRegion(UINT64_C(0x4003E000), 0x17F0); - constexpr inline const MemoryRegion MemoryRegionPhysicalIramBootConfig = MemoryRegion(UINT64_C(0x4003F800), 0x400); - - constexpr inline const MemoryRegion MemoryRegionPhysicalIramRebootStub = MemoryRegion(UINT64_C(0x4003F000), 0x1000); - -} diff --git a/Source/Atmosphere-Patches/secmon_smc_register_access.cpp b/Source/Atmosphere-Patches/secmon_smc_register_access.cpp deleted file mode 100644 index eae2933c..00000000 --- a/Source/Atmosphere-Patches/secmon_smc_register_access.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright (c) 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 "../secmon_error.hpp" -#include "secmon_smc_register_access.hpp" - -namespace ams::secmon::smc { - - namespace { - - template - constexpr void SetRegisterTableAllowed(std::array &arr, uintptr_t reg) { - /* All registers should be four byte aligned. */ - AMS_ASSUME(reg % sizeof(u32) == 0); - - /* Reduce the register to an index. */ - reg /= sizeof(u32); - - /* Get the index and mask. */ - const auto index = reg / BITSIZEOF(u8); - const auto mask = (1u << (reg % BITSIZEOF(u8))); - - /* Check that the permission bit isn't already set. */ - AMS_ASSUME((arr[index] & mask) == 0); - - /* Set the permission bit. */ - arr[index] |= mask; - - /* Ensure that indices are set in sorted order. */ - for (auto i = (reg % BITSIZEOF(u8)) + 1; i < 8; ++i) { - AMS_ASSUME((arr[index] & (1u << i)) == 0); - } - - for (auto i = index + 1; i < arr.size(); ++i) { - AMS_ASSUME(arr[i] == 0); - } - } - - template - consteval std::pair GetReducedAccessTableInfo(const std::array &arr) { - for (int last = arr.size() - 1; last >= 0; --last) { - if (arr[last] != 0) { - const int end = last + 1; - for (int start = 0; start < end; ++start) { - if (arr[start] != 0) { - return std::make_pair(static_cast(start), static_cast(end)); - } - } - return std::make_pair(static_cast(0), static_cast(end)); - } - } - - /* All empty perm table is disallowed. */ - AMS_ASSUME(false); - } - - - template - struct AccessTable { - static constexpr inline auto ReducedAccessTableInfo = GetReducedAccessTableInfo(RawTable); - static constexpr inline size_t ReducedAccessTableSize = ReducedAccessTableInfo.second - ReducedAccessTableInfo.first; - static constexpr inline auto ReducedAccessTable = []() -> std::array { - std::array reduced = {}; - - for (size_t i = ReducedAccessTableInfo.first; i < ReducedAccessTableInfo.second; ++i) { - reduced[i - ReducedAccessTableInfo.first] = RawTable[i]; - } - - return reduced; - }(); - - static constexpr u32 Address = _Address + (ReducedAccessTableInfo.first * sizeof(u32) * BITSIZEOF(u8)); - static constexpr u32 Size = static_cast(ReducedAccessTableSize * sizeof(u32) * BITSIZEOF(u8)); - - static_assert(Size <= 0x1000); - }; - - struct AccessTableEntry { - const u8 * const table; - uintptr_t virtual_address; - u32 address; - u32 size; - }; - - /* Include the access tables. */ - #include "secmon_define_pmc_access_table.inc" - #include "secmon_define_mc_access_table.inc" - #include "secmon_define_emc_access_table.inc" - #include "secmon_define_mc01_access_table.inc" - - constexpr const AccessTableEntry AccessTables[] = { - { PmcAccessTable::ReducedAccessTable.data(), MemoryRegionVirtualDevicePmc.GetAddress(), PmcAccessTable::Address, PmcAccessTable::Size, }, - { McAccessTable::ReducedAccessTable.data(), MemoryRegionVirtualDeviceMemoryController.GetAddress(), McAccessTable::Address, McAccessTable::Size, }, - { EmcAccessTable::ReducedAccessTable.data(), MemoryRegionVirtualDeviceExternalMemoryController.GetAddress(), EmcAccessTable::Address, EmcAccessTable::Size, }, - { Mc01AccessTable::ReducedAccessTable.data(), Mc01AccessTable::Address + MemoryRegionVirtualDeviceMemoryController0.GetAddress(), Mc01AccessTable::Address + MemoryRegionPhysicalDeviceMemoryController0.GetAddress(), Mc01AccessTable::Size, }, - { Mc01AccessTable::ReducedAccessTable.data(), Mc01AccessTable::Address + MemoryRegionVirtualDeviceMemoryController1.GetAddress(), Mc01AccessTable::Address + MemoryRegionPhysicalDeviceMemoryController1.GetAddress(), Mc01AccessTable::Size, }, - }; - - constexpr bool IsAccessAllowed(const AccessTableEntry &entry, uintptr_t address) { - /* Check if the address is within range. */ - if (!(entry.address <= address && address < entry.address + entry.size)) { - return false; - } - - /* Get the offset. */ - const auto offset = address - entry.address; - - /* Convert it to an index. */ - const auto reg_index = offset / sizeof(u32); - - /* Get the bit fields. */ - const auto index = reg_index / BITSIZEOF(u8); - const auto mask = (1u << (reg_index % BITSIZEOF(u8))); - - /* Validate that we're not going out of bounds. */ - if (index >= entry.size / sizeof(u32)) { - return false; - } - - return (entry.table[index] & mask) != 0; - } - - constexpr const AccessTableEntry *GetAccessTableEntry(uintptr_t address) { - for (const auto &entry : AccessTables) { - if (IsAccessAllowed(entry, address)) { - return std::addressof(entry); - } - } - - return nullptr; - } - - } - - SmcResult SmcReadWriteRegister(SmcArguments &args) { - /* Get the arguments. */ - const uintptr_t address = args.r[1]; - const u32 mask = args.r[2]; - const u32 value = args.r[3]; - - /* Validate that the address is aligned. */ - SMC_R_UNLESS(util::IsAligned(address, alignof(u32)), InvalidArgument); - - /* Find the access table. */ - const AccessTableEntry * const entry = GetAccessTableEntry(address); - - /* Translate our entry into an address to access. */ - uintptr_t virtual_address = 0; - if (entry != nullptr) { - /* Get the address to read or write. */ - virtual_address = entry->virtual_address + (address - entry->address); - } else { - /* For no clearly discernable reason, SmcReadWriteRegister returns success despite not doing the read/write */ - /* when accessing the SMMU controls for the BPMP and for APB-DMA. */ - /* This is "probably" to fuck with hackers who got access to the SMC and are trying to get control of the */ - /* BPMP to exploit jamais vu, deja vu, or other related DMA/wake-from-sleep vulnerabilities. */ - constexpr uintptr_t MC = MemoryRegionPhysicalDeviceMemoryController.GetAddress(); - SMC_R_UNLESS((address == (MC + MC_SMMU_AVPC_ASID) || address == (MC + MC_SMMU_PPCS1_ASID)), InvalidArgument); - - /* For backwards compatibility, we'll allow access to these devices on 1.0.0. */ - if (GetTargetFirmware() < TargetFirmware_2_0_0) { - virtual_address = MemoryRegionVirtualDeviceMemoryController.GetAddress() + (address - MC); - } - } - - /* Perform the read or write, if we should. */ - if (virtual_address != 0) { - u32 out = 0; - - if (mask != ~static_cast(0)) { - out = reg::Read(virtual_address); - } - if (mask != static_cast(0)) { - reg::Write(virtual_address, (out & ~mask) | (value & mask)); - } - - args.r[1] = out; - } - - return SmcResult::Success; - } - -} diff --git a/Source/ams_patch.bat b/Source/ams_patch.bat deleted file mode 100644 index 02428619..00000000 --- a/Source/ams_patch.bat +++ /dev/null @@ -1,10 +0,0 @@ -@echo off -set ROOT=Atmosphere-MTC-Unlock -set PATCHES=Atmosphere-Patches -copy "%PATCHES%\secmon_memory_layout.hpp" "%ROOT%\libraries\libexosphere/include/exosphere/secmon/" /Y -copy "%PATCHES%\secmon_emc_access_table_data.inc" "%ROOT%\exosphere/program/source/smc/" /Y -copy "%PATCHES%\secmon_define_emc_access_table.inc" "%ROOT%\exosphere/program/source/smc/" /Y -copy "%PATCHES%\secmon_smc_register_access.cpp" "%ROOT%\exosphere/program/source/smc/" /Y - -echo Patched! -pause diff --git a/Source/sys-clk/common/include/sysclk/config.h b/Source/sys-clk/common/include/sysclk/config.h index b38dd62e..a29137ec 100644 --- a/Source/sys-clk/common/include/sysclk/config.h +++ b/Source/sys-clk/common/include/sysclk/config.h @@ -60,8 +60,6 @@ typedef enum { HocClkConfigValue_EnforceBoardLimit, - HocClkConfigValue_EMCVdd2VoltageUV, - SysClkConfigValue_EnumMax, } SysClkConfigValue; @@ -124,10 +122,7 @@ static inline const char* sysclkFormatConfigValue(SysClkConfigValue val, bool pr case HocClkConfigValue_TDPCycleLimit: return pretty ? "TDP Cycle Limit" : "tdp_limit_c"; - case HocClkConfigValue_EnforceBoardLimit: - return pretty ? "Enforce Board Limit" : "enforce_board_limit"; - case HocClkConfigValue_EMCVdd2VoltageUV: - return pretty ? "EMC Vdd2 Voltage" : "emc_vdd2_voltage_uv"; + default: return pretty ? "Null" : "null"; } @@ -164,7 +159,6 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val) case HocClkConfigValue_DockedGovernor: case HocClkConfigValue_HandheldGovernor: case HocClkConfigValue_HandheldTDP: - case HocClkConfigValue_EnforceBoardLimit: return 1ULL; case HocClkConfigValue_ThermalThrottleThreshold: return 70ULL; @@ -174,8 +168,6 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val) return 6400ULL; case HocClkConfigValue_TDPCycleLimit: return 10ULL; - case HocClkConfigValue_EMCVdd2VoltageUV: - return 1175000ULL; default: return 0ULL; } @@ -201,7 +193,6 @@ static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t in case SysClkConfigValue_PowerLogIntervalMs: case SysClkConfigValue_CsvWriteIntervalMs: case HocClkConfigValue_TDPCycleLimit: - case HocClkConfigValue_EMCVdd2VoltageUV: return input >= 0; case HocClkConfigValue_UncappedClocks: case HocClkConfigValue_OverwriteBoostMode: @@ -209,7 +200,6 @@ static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t in case HocClkConfigValue_DockedGovernor: case HocClkConfigValue_HandheldGovernor: case HocClkConfigValue_HandheldTDP: - case HocClkConfigValue_EnforceBoardLimit: return (input & 0x1) == input; default: return false; diff --git a/Source/sys-clk/overlay/src/ui/gui/misc_gui.cpp b/Source/sys-clk/overlay/src/ui/gui/misc_gui.cpp index cd01d3ca..4b997b07 100644 --- a/Source/sys-clk/overlay/src/ui/gui/misc_gui.cpp +++ b/Source/sys-clk/overlay/src/ui/gui/misc_gui.cpp @@ -207,13 +207,12 @@ void MiscGui::listUI() this->listElement->addItem(new tsl::elm::CategoryHeader("Experimental")); addConfigToggle(HocClkConfigValue_ThermalThrottle, nullptr); addConfigToggle(HocClkConfigValue_HandheldTDP, nullptr); - addConfigToggle(HocClkConfigValue_EnforceBoardLimit, nullptr); ValueThresholds tdpThresholds(8600, 9500); addConfigButton( HocClkConfigValue_HandheldTDPLimit, "TDP Threshold", - ValueRange(5000, 10000, 200, "mW", 1), + ValueRange(5000, 10000, 100, "mW", 1), "Power", &tdpThresholds ); @@ -222,7 +221,7 @@ void MiscGui::listUI() addConfigButton( HocClkConfigValue_LiteTDPLimit, "Lite TDP Threshold", - ValueRange(4000, 8000, 200, "mW", 1), + ValueRange(4000, 8000, 100, "mW", 1), "Power", &tdpThresholdsLite ); @@ -231,7 +230,7 @@ void MiscGui::listUI() addConfigButton( HocClkConfigValue_ThermalThrottleThreshold, "Thermal Throttle Limit", - ValueRange(50, 85, 5, "°C", 1), + ValueRange(50, 85, 1, "°C", 1), "Temp", &throttleThresholds ); @@ -245,16 +244,6 @@ void MiscGui::listUI() addFreqButton(HocClkConfigValue_EristaMaxGpuClock, nullptr, SysClkModule_GPU); addFreqButton(HocClkConfigValue_EristaMaxMemClock, nullptr, SysClkModule_MEM); } - - ValueThresholds emcUvThresholds(1212500, 1250000); - addConfigButton( - HocClkConfigValue_EMCVdd2VoltageUV, - "EMC VDD2 Voltage", - ValueRange(1100000, 1350000, 12500, "mV", 1000, 1), - "EMC VDD2 Voltage", - &emcUvThresholds - ); - tsl::elm::ListItem* applyBtn = new tsl::elm::ListItem("Apply EMC Regs"); applyBtn->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { diff --git a/Source/sys-clk/overlay/src/ui/gui/value_choice_gui.cpp b/Source/sys-clk/overlay/src/ui/gui/value_choice_gui.cpp index 7856d150..ed5108df 100644 --- a/Source/sys-clk/overlay/src/ui/gui/value_choice_gui.cpp +++ b/Source/sys-clk/overlay/src/ui/gui/value_choice_gui.cpp @@ -1,118 +1,145 @@ -#include "value_choice_gui.h" -#include "../format.h" -#include "fatal_gui.h" -#include -#include +/* + * Copyright (c) Souldbminer and Horizon OC Contributors + * + * 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 . + * + */ + +/* -------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * , , + * wrote this file. As long as you retain this notice you can do whatever you + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ -ValueChoiceGui::ValueChoiceGui(std::uint32_t selectedValue, - const ValueRange& range, - const std::string& categoryName, - ValueChoiceListener listener, - const ValueThresholds& thresholds, - bool enableThresholds) - : selectedValue(selectedValue), - range(range), - categoryName(categoryName), - listener(listener), - thresholds(thresholds), - enableThresholds(enableThresholds) -{ -} -ValueChoiceGui::~ValueChoiceGui() -{ -} + #include "value_choice_gui.h" + #include "../format.h" + #include "fatal_gui.h" + #include + #include -std::string ValueChoiceGui::formatValue(std::uint32_t value) -{ - std::ostringstream oss; + ValueChoiceGui::ValueChoiceGui(std::uint32_t selectedValue, + const ValueRange& range, + const std::string& categoryName, + ValueChoiceListener listener, + const ValueThresholds& thresholds, + bool enableThresholds) + : selectedValue(selectedValue), + range(range), + categoryName(categoryName), + listener(listener), + thresholds(thresholds), + enableThresholds(enableThresholds) + { + } - if (value == 0) { - return VALUE_DEFAULT_TEXT; - } + ValueChoiceGui::~ValueChoiceGui() + { + } - // Convert to floating point for division - double displayValue = static_cast(value) / static_cast(range.divisor); + std::string ValueChoiceGui::formatValue(std::uint32_t value) + { + std::ostringstream oss; - // Set precision and formatting - oss << std::fixed << std::setprecision(range.decimalPlaces) << displayValue; - - if (!range.suffix.empty()) { - oss << " " << range.suffix; - } - return oss.str(); -} + if (value == 0) { -int ValueChoiceGui::getSafetyLevel(std::uint32_t value) -{ - // if (!enableThresholds) { - // return 0; - // } + return VALUE_DEFAULT_TEXT; + } - std::uint32_t scaledValue = value / range.divisor; + std::uint32_t displayValue = value / range.divisor; - if (value > thresholds.danger) { - return 2; - } - if (value > thresholds.warning) { - return 1; - } - return 0; -} + oss << displayValue; + if (!range.suffix.empty()) { + oss << " " << range.suffix; + } + return oss.str(); + } -tsl::elm::ListItem* ValueChoiceGui::createValueListItem(std::uint32_t value, bool selected, int safety) -{ - std::string text = formatValue(value); - if (selected) { - text += " \uE14B"; - } + int ValueChoiceGui::getSafetyLevel(std::uint32_t value) + { + if (!enableThresholds) { + return 0; + } - tsl::elm::ListItem* listItem = new tsl::elm::ListItem(text, "", false); + std::uint32_t scaledValue = value / range.divisor; - switch (safety) - { - case 0: - listItem->setTextColor(tsl::Color(255, 255, 255, 255)); - listItem->setValueColor(tsl::Color(255, 255, 255, 255)); - break; - case 1: - listItem->setTextColor(tsl::Color(255, 165, 0, 255)); - listItem->setValueColor(tsl::Color(255, 165, 0, 255)); - break; - case 2: - listItem->setTextColor(tsl::Color(255, 0, 0, 255)); - listItem->setValueColor(tsl::Color(255, 0, 0, 255)); - break; - } + if (scaledValue > thresholds.danger) { + return 2; + } + if (scaledValue > thresholds.warning) { + return 1; + } + return 0; + } - listItem->setClickListener([this, value](u64 keys) - { - if ((keys & HidNpadButton_A) == HidNpadButton_A && this->listener) { - if (this->listener(value)) { - tsl::goBack(); - } - return true; - } - return false; - }); + tsl::elm::ListItem* ValueChoiceGui::createValueListItem(std::uint32_t value, bool selected, int safety) + { + std::string text = formatValue(value); + if (selected) { + text += " \uE14B"; + } - return listItem; -} + tsl::elm::ListItem* listItem = new tsl::elm::ListItem(text, "", false); -void ValueChoiceGui::listUI() -{ - if (!categoryName.empty()) { - this->listElement->addItem(new tsl::elm::CategoryHeader(categoryName)); - } + switch (safety) + { + case 0: + listItem->setTextColor(tsl::Color(255, 255, 255, 255)); + listItem->setValueColor(tsl::Color(255, 255, 255, 255)); + break; + case 1: + listItem->setTextColor(tsl::Color(255, 165, 0, 255)); + listItem->setValueColor(tsl::Color(255, 165, 0, 255)); + break; + case 2: + listItem->setTextColor(tsl::Color(255, 0, 0, 255)); + listItem->setValueColor(tsl::Color(255, 0, 0, 255)); + break; + } - this->listElement->addItem(this->createValueListItem(0, this->selectedValue == 0, 0)); + listItem->setClickListener([this, value](u64 keys) + { + if ((keys & HidNpadButton_A) == HidNpadButton_A && this->listener) { - for (std::uint32_t value = range.min; value <= range.max; value += range.step) - { - int safety = getSafetyLevel(value); - bool selected = (value == this->selectedValue); - this->listElement->addItem(this->createValueListItem(value, selected, safety)); - } + if (this->listener(value)) { + tsl::goBack(); + } + return true; + } + return false; + }); - this->listElement->jumpToItem("", "\uE14B"); -} \ No newline at end of file + return listItem; + } + + void ValueChoiceGui::listUI() + { + + if (!categoryName.empty()) { + this->listElement->addItem(new tsl::elm::CategoryHeader(categoryName)); + } + + this->listElement->addItem(this->createValueListItem(0, this->selectedValue == 0, 0)); + + for (std::uint32_t value = range.min; value <= range.max; value += range.step) + { + int safety = getSafetyLevel(value); + bool selected = (value == this->selectedValue); + this->listElement->addItem(this->createValueListItem(value, selected, safety)); + } + + this->listElement->jumpToItem("", "\uE14B"); + } \ No newline at end of file diff --git a/Source/sys-clk/overlay/src/ui/gui/value_choice_gui.h b/Source/sys-clk/overlay/src/ui/gui/value_choice_gui.h index 2c9b122e..160de655 100644 --- a/Source/sys-clk/overlay/src/ui/gui/value_choice_gui.h +++ b/Source/sys-clk/overlay/src/ui/gui/value_choice_gui.h @@ -37,20 +37,20 @@ #define VALUE_DEFAULT_TEXT "Default" struct ValueRange { - std::uint32_t min; - std::uint32_t max; - std::uint32_t step; - std::string suffix; - std::uint32_t divisor; // Divide input values by this for display - int decimalPlaces; // Number of decimal places to display (0-6) - - ValueRange() : min(0), max(0), step(1), suffix(""), divisor(1), decimalPlaces(0) {} - - ValueRange(std::uint32_t min, std::uint32_t max, std::uint32_t step, - const std::string& suffix = "", std::uint32_t divisor = 1, int decimalPlaces = 0) - : min(min), max(max), step(step), suffix(suffix), divisor(divisor), decimalPlaces(decimalPlaces) {} -}; - + std::uint32_t min; + std::uint32_t max; + std::uint32_t step; + std::string suffix; + std::uint32_t divisor; // Divide input values by this for display + + // Default constructor + ValueRange() : min(0), max(0), step(1), suffix(""), divisor(1) {} + + ValueRange(std::uint32_t min, std::uint32_t max, std::uint32_t step, + const std::string& suffix = "", std::uint32_t divisor = 1) + : min(min), max(max), step(step), suffix(suffix), divisor(divisor) {} + }; + struct ValueThresholds { std::uint32_t warning; // Values >= this show orange std::uint32_t danger; // Values >= this show red diff --git a/Source/sys-clk/sysmodule/src/clock_manager.cpp b/Source/sys-clk/sysmodule/src/clock_manager.cpp index 9e47d770..b82dd89d 100644 --- a/Source/sys-clk/sysmodule/src/clock_manager.cpp +++ b/Source/sys-clk/sysmodule/src/clock_manager.cpp @@ -235,32 +235,23 @@ void ClockManager::Tick() std::uint32_t maxHz = 0; std::uint32_t nearestHz = 0; std::uint32_t mode = 0; - - if(this->config->GetConfigValue(HocClkConfigValue_EMCVdd2VoltageUV) < 1400000) { // Safety Check - set_sd1_voltage((u32)this->config->GetConfigValue(HocClkConfigValue_EMCVdd2VoltageUV)); - } - + AppletOperationMode opMode = appletGetOperationMode(); Result rc = apmExtGetCurrentPerformanceConfiguration(&mode); ASSERT_RESULT_OK(rc, "apmExtGetCurrentPerformanceConfiguration"); if(this->config->GetConfigValue(HocClkConfigValue_HandheldTDP) && opMode == AppletOperationMode_Handheld) { if(Board::GetSocType() == SysClkSocType_MarikoLite) { - if(Board::GetPowerMw(SysClkPowerSensor_Avg) < -(int)this->config->GetConfigValue(HocClkConfigValue_LiteTDPLimit)) { + if(Board::GetPowerMw(SysClkPowerSensor_Now) < -(int)this->config->GetConfigValue(HocClkConfigValue_LiteTDPLimit)) { ResetToStockClocks(); return; } } else { - if(Board::GetPowerMw(SysClkPowerSensor_Avg) < -(int)this->config->GetConfigValue(HocClkConfigValue_HandheldTDPLimit)) { + if(Board::GetPowerMw(SysClkPowerSensor_Now) < -(int)this->config->GetConfigValue(HocClkConfigValue_HandheldTDPLimit)) { ResetToStockClocks(); return; } } - } else if(opMode == AppletOperationMode_Console && this->config->GetConfigValue(HocClkConfigValue_EnforceBoardLimit)) { - if(Board::GetPowerMw(SysClkPowerSensor_Avg) < 0) { - ResetToStockClocks(); - return; - } } if(apmExtIsBoostMode(mode) && !this->config->GetConfigValue(HocClkConfigValue_OverwriteBoostMode)) { @@ -281,15 +272,13 @@ void ClockManager::Tick() for (unsigned int module = 0; module < SysClkModule_EnumMax; module++) { targetHz = this->context->overrideFreqs[module]; - globalTargetHz = this->context->overrideFreqs[module]; if (!targetHz) { targetHz = this->config->GetAutoClockHz(this->context->applicationId, (SysClkModule)module, this->context->profile); - globalTargetHz = this->config->GetAutoClockHz(SYSCLK_GLOBAL_PROFILE_TID, (SysClkModule)module, this->context->profile); } - if (targetHz || globalTargetHz) + if (targetHz) { maxHz = this->GetMaxAllowedHz((SysClkModule)module, this->context->profile); nearestHz = this->GetNearestHz((SysClkModule)module, targetHz, maxHz); @@ -453,52 +442,4 @@ bool ClockManager::RefreshContext() void ClockManager::SetRNXRTMode(ReverseNXMode mode) { this->rnxSync->SetRTMode(mode); -} - -void ClockManager::set_sd1_voltage(uint32_t voltage_uv) -{ - // SD1 parameters - const u32 uv_step = 12500; - const u32 uv_min = 1100000; - const u32 uv_max = 1350000; - const u8 volt_addr = 0x17; // MAX77620_REG_SD1 - const u8 volt_mask = 0x7F; // MAX77620_SD1_VOLT_MASK - - // Validate input voltage - if (voltage_uv < uv_min || voltage_uv > uv_max) - return; - - // Calculate voltage multiplier - u32 mult = (voltage_uv + uv_step - 1 - uv_min) / uv_step; - mult = mult & volt_mask; - - // Open I2C session to MAX77620 PMIC - I2cSession session; - Result res = i2cOpenSession(&session, I2cDevice_Max77620Pmic); - if (R_FAILED(res)) { - return; - } - - // Read current register value - u8 current_val = 0; - res = i2csessionSendAuto(&session, &volt_addr, 1, I2cTransactionOption_Start); - if (R_FAILED(res)) { - i2csessionClose(&session); - return; - } - - res = i2csessionReceiveAuto(&session, ¤t_val, 1, I2cTransactionOption_Stop); - if (R_FAILED(res)) { - i2csessionClose(&session); - return; - } - - // Mask in the new voltage bits, preserving other bits - u8 new_val = (current_val & ~volt_mask) | mult; - - // Write back register with START and STOP conditions - u8 write_buf[2] = {volt_addr, new_val}; - res = i2csessionSendAuto(&session, write_buf, sizeof(write_buf), I2cTransactionOption_All); - - i2csessionClose(&session); } \ No newline at end of file diff --git a/Source/sys-clk/sysmodule/src/clock_manager.h b/Source/sys-clk/sysmodule/src/clock_manager.h index 9fd92c00..c29681d8 100644 --- a/Source/sys-clk/sysmodule/src/clock_manager.h +++ b/Source/sys-clk/sysmodule/src/clock_manager.h @@ -70,7 +70,6 @@ class ClockManager bool ConfigIntervalTimeout(SysClkConfigValue intervalMsConfigValue, std::uint64_t ns, std::uint64_t* lastLogNs); void RefreshFreqTableRow(SysClkModule module); bool RefreshContext(); - void set_sd1_voltage(uint32_t voltage_uv); static ClockManager *instance; diff --git a/Source/sys-clk/sysmodule/src/maxXXXXX.h b/Source/sys-clk/sysmodule/src/maxXXXXX.h deleted file mode 100644 index 2da06670..00000000 --- a/Source/sys-clk/sysmodule/src/maxXXXXX.h +++ /dev/null @@ -1,691 +0,0 @@ -/* - * Copyright (c) Souldbminer and Horizon OC Contributors - * - * 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 . - * - */ - - -/* - * Defining registers address and its bit definitions of MAX77620 and MAX20024 - * - * Copyright (c) 2019-2020 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. - */ - -#include - -#ifndef MAX77XXX_H -#define MAX77XXX_H - - -#define MAX17050_BOARD_CGAIN 2 /* Actual: 1.99993 */ -#define MAX17050_BOARD_SNS_RESISTOR_UOHM 5000 /* 0.005 Ohm */ - -#define MAX17050_STATUS_BattAbsent BIT(3) - -/* Consider RepCap which is less then 10 units below FullCAP full */ -#define MAX17050_FULL_THRESHOLD 10 - -#define MAX17050_CHARACTERIZATION_DATA_SIZE 48 - -#define MAXIM17050_I2C_ADDR 0x36 - -enum MAX17050_reg { - MAX17050_STATUS = 0x00, - MAX17050_VALRT_Th = 0x01, - MAX17050_TALRT_Th = 0x02, - MAX17050_SALRT_Th = 0x03, - MAX17050_AtRate = 0x04, - MAX17050_RepCap = 0x05, - MAX17050_RepSOC = 0x06, - MAX17050_Age = 0x07, - MAX17050_TEMP = 0x08, - MAX17050_VCELL = 0x09, - MAX17050_Current = 0x0A, - MAX17050_AvgCurrent = 0x0B, - - MAX17050_SOC = 0x0D, - MAX17050_AvSOC = 0x0E, - MAX17050_RemCap = 0x0F, - MAX17050_FullCAP = 0x10, - MAX17050_TTE = 0x11, - MAX17050_QRTbl00 = 0x12, - MAX17050_FullSOCThr = 0x13, - MAX17050_RSLOW = 0x14, - - MAX17050_AvgTA = 0x16, - MAX17050_Cycles = 0x17, - MAX17050_DesignCap = 0x18, - MAX17050_AvgVCELL = 0x19, - MAX17050_MinMaxTemp = 0x1A, - MAX17050_MinMaxVolt = 0x1B, - MAX17050_MinMaxCurr = 0x1C, - MAX17050_CONFIG = 0x1D, - MAX17050_ICHGTerm = 0x1E, - MAX17050_AvCap = 0x1F, - MAX17050_ManName = 0x20, - MAX17050_DevName = 0x21, - MAX17050_QRTbl10 = 0x22, - MAX17050_FullCAPNom = 0x23, - MAX17050_TempNom = 0x24, - MAX17050_TempLim = 0x25, - MAX17050_TempHot = 0x26, - MAX17050_AIN = 0x27, - MAX17050_LearnCFG = 0x28, - MAX17050_FilterCFG = 0x29, - MAX17050_RelaxCFG = 0x2A, - MAX17050_MiscCFG = 0x2B, - MAX17050_TGAIN = 0x2C, - MAX17050_TOFF = 0x2D, - MAX17050_CGAIN = 0x2E, - MAX17050_COFF = 0x2F, - - MAX17050_QRTbl20 = 0x32, - MAX17050_SOC_empty = 0x33, - MAX17050_T_empty = 0x34, - MAX17050_FullCAP0 = 0x35, - MAX17050_LAvg_empty = 0x36, - MAX17050_FCTC = 0x37, - MAX17050_RCOMP0 = 0x38, - MAX17050_TempCo = 0x39, - MAX17050_V_empty = 0x3A, - MAX17050_K_empty0 = 0x3B, - MAX17050_TaskPeriod = 0x3C, - MAX17050_FSTAT = 0x3D, - MAX17050_TIMER = 0x3E, - MAX17050_SHDNTIMER = 0x3F, - - MAX17050_QRTbl30 = 0x42, - - MAX17050_dQacc = 0x45, - MAX17050_dPacc = 0x46, - - MAX17050_VFSOC0 = 0x48, - - Max17050_QH0 = 0x4C, - MAX17050_QH = 0x4D, - MAX17050_QL = 0x4E, - - MAX17050_MinVolt = 0x50, // Custom ID. Not to be sent to i2c. - MAX17050_MaxVolt = 0x51, // Custom ID. Not to be sent to i2c. - - MAX17050_VFSOC0Enable = 0x60, - MAX17050_MODELEnable1 = 0x62, - MAX17050_MODELEnable2 = 0x63, - - MAX17050_MODELChrTbl = 0x80, - - MAX17050_OCV = 0xEE, - - MAX17050_OCVInternal = 0xFB, - - MAX17050_VFSOC = 0xFF, -}; - -#define MAX77620_I2C_ADDR 0x3C - -/* GLOBAL, PMIC, GPIO, FPS, ONOFFC, CID Registers */ -#define MAX77620_REG_CNFGGLBL1 0x00 -#define MAX77620_CNFGGLBL1_LBRSTEN BIT(0) -#define MAX77620_CNFGGLBL1_LBDAC_MASK 0x0E -#define MAX77620_CNFGGLBL1_LBDAC_2700 (0 << 1) -#define MAX77620_CNFGGLBL1_LBDAC_2800 (1 << 1) -#define MAX77620_CNFGGLBL1_LBDAC_2900 (2 << 1) -#define MAX77620_CNFGGLBL1_LBDAC_3000 (3 << 1) -#define MAX77620_CNFGGLBL1_LBDAC_3100 (4 << 1) -#define MAX77620_CNFGGLBL1_LBDAC_3200 (5 << 1) -#define MAX77620_CNFGGLBL1_LBDAC_3300 (6 << 1) -#define MAX77620_CNFGGLBL1_LBDAC_3400 (7 << 1) -#define MAX77620_CNFGGLBL1_LBHYST_100 (0 << 4) -#define MAX77620_CNFGGLBL1_LBHYST_200 (1 << 4) -#define MAX77620_CNFGGLBL1_LBHYST_300 (2 << 4) -#define MAX77620_CNFGGLBL1_LBHYST_400 (3 << 4) -#define MAX77620_CNFGGLBL1_MPPLD BIT(6) -#define MAX77620_CNFGGLBL1_LBDAC_EN BIT(7) - -#define MAX77620_REG_CNFGGLBL2 0x01 -#define MAX77620_TWD_MASK 0x3 -#define MAX77620_TWD_2s 0x0 -#define MAX77620_TWD_16s 0x1 -#define MAX77620_TWD_64s 0x2 -#define MAX77620_TWD_128s 0x3 -#define MAX77620_WDTEN BIT(2) -#define MAX77620_WDTSLPC BIT(3) -#define MAX77620_WDTOFFC BIT(4) -#define MAX77620_GLBL_LPM BIT(5) -#define MAX77620_I2CTWD_MASK 0xC0 -#define MAX77620_I2CTWD_DISABLED 0x00 -#define MAX77620_I2CTWD_1_33ms 0x40 -#define MAX77620_I2CTWD_35_7ms 0x80 -#define MAX77620_I2CTWD_41_7ms 0xC0 - -#define MAX77620_REG_CNFGGLBL3 0x02 -#define MAX77620_WDTC_MASK 0x3 - -#define MAX77620_REG_CNFG1_32K 0x03 -#define MAX77620_CNFG1_PWR_MD_32K_MASK 0x3 -#define MAX77620_CNFG1_32K_OUT0_EN BIT(2) -#define MAX77620_CNFG1_32KLOAD_MASK 0x30 -#define MAX77620_CNFG1_32K_OK BIT(7) - -#define MAX77620_REG_CNFGBBC 0x04 -#define MAX77620_CNFGBBC_ENABLE BIT(0) -#define MAX77620_CNFGBBC_CURRENT_MASK 0x06 -#define MAX77620_CNFGBBC_CURRENT_SHIFT 1 -#define MAX77620_CNFGBBC_VOLTAGE_MASK 0x18 -#define MAX77620_CNFGBBC_VOLTAGE_SHIFT 3 -#define MAX77620_CNFGBBC_LOW_CURRENT_DISABLE BIT(5) -#define MAX77620_CNFGBBC_RESISTOR_MASK 0xC0 -#define MAX77620_CNFGBBC_RESISTOR_SHIFT 6 -#define MAX77620_CNFGBBC_RESISTOR_100 (0 << MAX77620_CNFGBBC_RESISTOR_SHIFT) -#define MAX77620_CNFGBBC_RESISTOR_1K (1 << MAX77620_CNFGBBC_RESISTOR_SHIFT) -#define MAX77620_CNFGBBC_RESISTOR_3K (2 << MAX77620_CNFGBBC_RESISTOR_SHIFT) -#define MAX77620_CNFGBBC_RESISTOR_6K (3 << MAX77620_CNFGBBC_RESISTOR_SHIFT) - -#define MAX77620_REG_IRQTOP 0x05 -#define MAX77620_REG_IRQTOPM 0x0D -#define MAX77620_IRQ_TOP_ONOFF_MASK BIT(1) -#define MAX77620_IRQ_TOP_32K_MASK BIT(2) -#define MAX77620_IRQ_TOP_RTC_MASK BIT(3) -#define MAX77620_IRQ_TOP_GPIO_MASK BIT(4) -#define MAX77620_IRQ_TOP_LDO_MASK BIT(5) -#define MAX77620_IRQ_TOP_SD_MASK BIT(6) -#define MAX77620_IRQ_TOP_GLBL_MASK BIT(7) - -#define MAX77620_REG_INTLBT 0x06 -#define MAX77620_REG_INTENLBT 0x0E -#define MAX77620_IRQ_GLBLM_MASK BIT(0) -#define MAX77620_IRQ_TJALRM2_MASK BIT(1) -#define MAX77620_IRQ_TJALRM1_MASK BIT(2) -#define MAX77620_IRQ_LBM_MASK BIT(3) - -#define MAX77620_REG_IRQSD 0x07 -#define MAX77620_REG_IRQMASKSD 0x0F -#define MAX77620_IRQSD_PFI_SD3 BIT(4) -#define MAX77620_IRQSD_PFI_SD2 BIT(5) -#define MAX77620_IRQSD_PFI_SD1 BIT(6) -#define MAX77620_IRQSD_PFI_SD0 BIT(7) - -#define MAX77620_REG_IRQ_LVL2_L0_7 0x08 // LDO number that irq occurred. -#define MAX77620_REG_IRQ_MSK_L0_7 0x10 -#define MAX77620_REG_IRQ_LVL2_L8 \ - 0x09 // LDO number that irq occurred. Only bit0: LDO8 is valid. -#define MAX77620_REG_IRQ_MSK_L8 0x11 -#define MAX77620_REG_IRQ_LVL2_GPIO 0x0A // Edge detection interrupt. - -#define MAX77620_REG_ONOFFIRQ 0x0B -#define MAX77620_REG_ONOFFIRQM 0x12 -#define MAX77620_ONOFFIRQ_MRWRN BIT(0) -#define MAX77620_ONOFFIRQ_EN0_1SEC BIT(1) -#define MAX77620_ONOFFIRQ_EN0_F BIT(2) -#define MAX77620_ONOFFIRQ_EN0_R BIT(3) -#define MAX77620_ONOFFIRQ_LID_F BIT(4) -#define MAX77620_ONOFFIRQ_LID_R BIT(5) -#define MAX77620_ONOFFIRQ_ACOK_F BIT(6) -#define MAX77620_ONOFFIRQ_ACOK_R BIT(7) - -#define MAX77620_REG_NVERC 0x0C // Shutdown reason (non-volatile). -#define MAX77620_NVERC_SHDN BIT(0) -#define MAX77620_NVERC_WTCHDG BIT(1) -#define MAX77620_NVERC_HDRST BIT(2) -#define MAX77620_NVERC_TOVLD BIT(3) -#define MAX77620_NVERC_MBLSD BIT(4) -#define MAX77620_NVERC_MBO BIT(5) -#define MAX77620_NVERC_MBU BIT(6) -#define MAX77620_NVERC_RSTIN BIT(7) - -#define MAX77620_REG_STATLBT 0x13 -#define MAX77620_REG_STATSD 0x14 - -#define MAX77620_REG_ONOFFSTAT 0x15 -#define MAX77620_ONOFFSTAT_LID BIT(0) -#define MAX77620_ONOFFSTAT_ACOK BIT(1) -#define MAX77620_ONOFFSTAT_EN0 BIT(2) - -/* SD and LDO Registers */ -#define MAX77620_REG_SD0 0x16 -#define MAX77620_REG_SD1 0x17 -#define MAX77620_REG_SD2 0x18 -#define MAX77620_REG_SD3 0x19 -#define MAX77620_REG_SD4 0x1A -#define MAX77620_REG_DVSSD0 0x1B -#define MAX77620_REG_DVSSD1 0x1C -#define MAX77620_SDX_VOLT_MASK 0xFF -#define MAX77620_SD0_VOLT_MASK 0x7F // Max is 0x40. -#define MAX77620_SD1_VOLT_MASK 0x7F // Max is 0x4C. -#define MAX77620_LDO_VOLT_MASK 0x3F - -#define MAX77620_REG_SD0_CFG 0x1D -#define MAX77620_REG_SD1_CFG 0x1E -#define MAX77620_REG_SD2_CFG 0x1F -#define MAX77620_REG_SD3_CFG 0x20 -#define MAX77620_REG_SD4_CFG 0x21 -#define MAX77620_SD_SR_MASK 0xC0 -#define MAX77620_SD_SR_SHIFT 6 -#define MAX77620_SD_POWER_MODE_MASK 0x30 -#define MAX77620_SD_POWER_MODE_SHIFT 4 -#define MAX77620_SD_CFG1_ADE_MASK BIT(3) -#define MAX77620_SD_CFG1_ADE_DISABLE 0 -#define MAX77620_SD_CFG1_ADE_ENABLE BIT(3) -#define MAX77620_SD_FPWM_MASK 0x04 -#define MAX77620_SD_FPWM_SHIFT 2 -#define MAX77620_SD_FSRADE_MASK 0x01 -#define MAX77620_SD_FSRADE_SHIFT 0 -#define MAX77620_SD_CFG1_FPWM_SD_MASK BIT(2) -#define MAX77620_SD_CFG1_FPWM_SD_SKIP 0 -#define MAX77620_SD_CFG1_FPWM_SD_FPWM BIT(2) -#define MAX77620_SD_CFG1_MPOK_MASK BIT(1) -#define MAX77620_SD_CFG1_FSRADE_SD_MASK BIT(0) -#define MAX77620_SD_CFG1_FSRADE_SD_DISABLE 0 -#define MAX77620_SD_CFG1_FSRADE_SD_ENABLE BIT(0) - -#define MAX77620_REG_SD_CFG2 0x22 -#define MAX77620_SD_CNF2_RSVD BIT(0) -#define MAX77620_SD_CNF2_ROVS_EN_SD1 BIT(1) -#define MAX77620_SD_CNF2_ROVS_EN_SD0 BIT(2) - -#define MAX77620_REG_LDO0_CFG 0x23 -#define MAX77620_REG_LDO0_CFG2 0x24 -#define MAX77620_REG_LDO1_CFG 0x25 -#define MAX77620_REG_LDO1_CFG2 0x26 -#define MAX77620_REG_LDO2_CFG 0x27 -#define MAX77620_REG_LDO2_CFG2 0x28 -#define MAX77620_REG_LDO3_CFG 0x29 -#define MAX77620_REG_LDO3_CFG2 0x2A -#define MAX77620_REG_LDO4_CFG 0x2B -#define MAX77620_REG_LDO4_CFG2 0x2C -#define MAX77620_REG_LDO5_CFG 0x2D -#define MAX77620_REG_LDO5_CFG2 0x2E -#define MAX77620_REG_LDO6_CFG 0x2F -#define MAX77620_REG_LDO6_CFG2 0x30 -#define MAX77620_REG_LDO7_CFG 0x31 -#define MAX77620_REG_LDO7_CFG2 0x32 -#define MAX77620_REG_LDO8_CFG 0x33 -#define MAX77620_REG_LDO8_CFG2 0x34 -/*! LDO CFG */ -#define MAX77620_LDO_POWER_MODE_SHIFT 6 -#define MAX77620_LDO_POWER_MODE_MASK (3 << MAX77620_LDO_POWER_MODE_SHIFT) -#define MAX77620_POWER_MODE_NORMAL 3 -#define MAX77620_POWER_MODE_LPM 2 -#define MAX77620_POWER_MODE_GLPM 1 -#define MAX77620_POWER_MODE_DISABLE 0 -/*! LDO CFG2 */ -#define MAX77620_LDO_CFG2_SS_MASK (1 << 0) -#define MAX77620_LDO_CFG2_SS_FAST (0 << 0) -#define MAX77620_LDO_CFG2_SS_SLOW (1 << 0) -#define MAX77620_LDO_CFG2_ADE_MASK (1 << 1) -#define MAX77620_LDO_CFG2_ADE_DISABLE (0 << 1) -#define MAX77620_LDO_CFG2_ADE_ENABLE (1 << 1) -#define MAX77620_LDO_CFG2_MPOK_MASK BIT(2) -#define MAX77620_LDO_CFG2_POK_MASK BIT(3) -#define MAX77620_LDO_CFG2_COMP_SHIFT 4 -#define MAX77620_LDO_CFG2_COMP_MASK (3 << MAX77620_LDO_COMP_SHIFT) -#define MAX77620_LDO_CFG2_COMP_SLOW 3 -#define MAX77620_LDO_CFG2_COMP_MID_SLOW 2 -#define MAX77620_LDO_CFG2_COMP_MID_FAST 1 -#define MAX77620_LDO_CFG2_COMP_FAST 0 -#define MAX77620_LDO_CFG2_ALPM_EN_MASK BIT(6) -#define MAX77620_LDO_CFG2_OVCLMP_MASK BIT(7) - -#define MAX77620_REG_LDO_CFG3 0x35 -#define MAX77620_LDO_BIAS_EN BIT(0) -#define MAX77620_TRACK4_SHIFT 5 -#define MAX77620_TRACK4_MASK (1 << MAX77620_TRACK4_SHIFT) - -#define MAX77620_REG_GPIO0 0x36 -#define MAX77620_REG_GPIO1 0x37 -#define MAX77620_REG_GPIO2 0x38 -#define MAX77620_REG_GPIO3 0x39 -#define MAX77620_REG_GPIO4 0x3A -#define MAX77620_REG_GPIO5 0x3B -#define MAX77620_REG_GPIO6 0x3C -#define MAX77620_REG_GPIO7 0x3D -#define MAX77620_CNFG_GPIO_DRV_MASK (1 << 0) -#define MAX77620_CNFG_GPIO_DRV_PUSHPULL (1 << 0) -#define MAX77620_CNFG_GPIO_DRV_OPENDRAIN (0 << 0) -#define MAX77620_CNFG_GPIO_DIR_MASK (1 << 1) -#define MAX77620_CNFG_GPIO_DIR_INPUT (1 << 1) -#define MAX77620_CNFG_GPIO_DIR_OUTPUT (0 << 1) -#define MAX77620_CNFG_GPIO_INPUT_VAL_MASK (1 << 2) -#define MAX77620_CNFG_GPIO_OUTPUT_VAL_MASK (1 << 3) -#define MAX77620_CNFG_GPIO_OUTPUT_VAL_HIGH (1 << 3) -#define MAX77620_CNFG_GPIO_OUTPUT_VAL_LOW (0 << 3) -#define MAX77620_CNFG_GPIO_INT_MASK (0x3 << 4) -#define MAX77620_CNFG_GPIO_INT_FALLING (1 << 4) -#define MAX77620_CNFG_GPIO_INT_RISING (1 << 5) -#define MAX77620_CNFG_GPIO_DBNC_MASK (0x3 << 6) -#define MAX77620_CNFG_GPIO_DBNC_None (0x0 << 6) -#define MAX77620_CNFG_GPIO_DBNC_8ms (0x1 << 6) -#define MAX77620_CNFG_GPIO_DBNC_16ms (0x2 << 6) -#define MAX77620_CNFG_GPIO_DBNC_32ms (0x3 << 6) -#define MAX77620_GPIO_OUTPUT_DISABLE 0 -#define MAX77620_GPIO_OUTPUT_ENABLE 1 - -#define MAX77620_REG_PUE_GPIO 0x3E // Gpio Pullup resistor enable. -#define MAX77620_REG_PDE_GPIO 0x3F // Gpio Pulldown resistor enable. - -#define MAX77620_REG_AME_GPIO \ - 0x40 // Gpio pinmuxing. Clear bits are Standard GPIO. - -#define MAX77620_REG_ONOFFCNFG1 0x41 -#define MAX20024_ONOFFCNFG1_CLRSE 0x18 -#define MAX77620_ONOFFCNFG1_PWR_OFF BIT(1) -#define MAX77620_ONOFFCNFG1_SLPEN BIT(2) -#define MAX77620_ONOFFCNFG1_MRT_SHIFT 0x3 -#define MAX77620_ONOFFCNFG1_MRT_MASK 0x38 -#define MAX77620_ONOFFCNFG1_RSVD BIT(6) -#define MAX77620_ONOFFCNFG1_SFT_RST BIT(7) - -#define MAX77620_REG_ONOFFCNFG2 0x42 -#define MAX77620_ONOFFCNFG2_WK_EN0 BIT(0) -#define MAX77620_ONOFFCNFG2_WK_ALARM2 BIT(1) -#define MAX77620_ONOFFCNFG2_WK_ALARM1 BIT(2) -#define MAX77620_ONOFFCNFG2_WK_MBATT \ - BIT(3) // MBATT event generates a wakeup signal. use it in android/l4t? -#define MAX77620_ONOFFCNFG2_WK_ACOK BIT(4) -#define MAX77620_ONOFFCNFG2_SLP_LPM_MSK BIT(5) -#define MAX77620_ONOFFCNFG2_WD_RST_WK BIT(6) -#define MAX77620_ONOFFCNFG2_SFT_RST_WK BIT(7) - -/* FPS Registers */ -#define MAX77620_REG_FPS_CFG0 0x43 // FPS0. -#define MAX77620_REG_FPS_CFG1 0x44 // FPS1. -#define MAX77620_REG_FPS_CFG2 0x45 // FPS2. -#define MAX77620_FPS_ENFPS_SW_MASK 0x01 -#define MAX77620_FPS_ENFPS_SW 0x01 -#define MAX77620_FPS_EN_SRC_SHIFT 1 -#define MAX77620_FPS_EN_SRC_MASK 0x06 -#define MAX77620_FPS_TIME_PERIOD_SHIFT 3 -#define MAX77620_FPS_TIME_PERIOD_MASK 0x38 - -#define MAX77620_REG_FPS_LDO0 0x46 -#define MAX77620_REG_FPS_LDO1 0x47 -#define MAX77620_REG_FPS_LDO2 0x48 -#define MAX77620_REG_FPS_LDO3 0x49 -#define MAX77620_REG_FPS_LDO4 0x4A -#define MAX77620_REG_FPS_LDO5 0x4B -#define MAX77620_REG_FPS_LDO6 0x4C -#define MAX77620_REG_FPS_LDO7 0x4D -#define MAX77620_REG_FPS_LDO8 0x4E -#define MAX77620_REG_FPS_SD0 0x4F -#define MAX77620_REG_FPS_SD1 0x50 -#define MAX77620_REG_FPS_SD2 0x51 -#define MAX77620_REG_FPS_SD3 0x52 -#define MAX77620_REG_FPS_SD4 0x53 -#define MAX77620_REG_FPS_GPIO1 0x54 -#define MAX77620_REG_FPS_GPIO2 0x55 -#define MAX77620_REG_FPS_GPIO3 0x56 -#define MAX77620_REG_FPS_RSO 0x57 -#define MAX77620_FPS_PD_PERIOD_SHIFT 0 -#define MAX77620_FPS_PD_PERIOD_MASK 0x07 -#define MAX77620_FPS_PU_PERIOD_SHIFT 3 -#define MAX77620_FPS_PU_PERIOD_MASK 0x38 -#define MAX77620_FPS_SRC_SHIFT 6 -#define MAX77620_FPS_SRC_MASK 0xC0 - -#define MAX77620_FPS_COUNT 3 -#define MAX77620_FPS_PERIOD_MIN_US 40 -#define MAX77620_FPS_PERIOD_MAX_US 2560 - -#define MAX77620_REG_CID0 0x58 -#define MAX77620_REG_CID1 0x59 -#define MAX77620_REG_CID2 0x5A -#define MAX77620_REG_CID3 0x5B -#define MAX77620_REG_CID4 0x5C // OTP version. -#define MAX77620_REG_CID5 0x5D // ES version. -#define MAX77620_CID_DIDO_MASK 0xF -#define MAX77620_CID_DIDO_SHIFT 0 -#define MAX77620_CID_DIDM_MASK 0xF0 -#define MAX77620_CID_DIDM_SHIFT 4 - -/* Device Identification Metal */ -#define MAX77620_CID5_DIDM(n) (((n) >> 4) & 0xF) -/* Device Indentification OTP */ -#define MAX77620_CID5_DIDO(n) ((n) & 0xF) - -#define MAX77620_REG_DVSSD4 0x5E -#define MAX20024_REG_MAX_ADD 0x70 - -#define MAX77620_IRQ_LVL2_GPIO_EDGE0 BIT(0) -#define MAX77620_IRQ_LVL2_GPIO_EDGE1 BIT(1) -#define MAX77620_IRQ_LVL2_GPIO_EDGE2 BIT(2) -#define MAX77620_IRQ_LVL2_GPIO_EDGE3 BIT(3) -#define MAX77620_IRQ_LVL2_GPIO_EDGE4 BIT(4) -#define MAX77620_IRQ_LVL2_GPIO_EDGE5 BIT(5) -#define MAX77620_IRQ_LVL2_GPIO_EDGE6 BIT(6) -#define MAX77620_IRQ_LVL2_GPIO_EDGE7 BIT(7) - -/* Interrupts */ -enum { - MAX77620_IRQ_TOP_GLBL, /* Low-Battery */ - MAX77620_IRQ_TOP_SD, /* SD power fail */ - MAX77620_IRQ_TOP_LDO, /* LDO power fail */ - MAX77620_IRQ_TOP_GPIO, /* TOP GPIO internal int to MAX77620 */ - MAX77620_IRQ_TOP_RTC, /* RTC */ - MAX77620_IRQ_TOP_32K, /* 32kHz oscillator */ - MAX77620_IRQ_TOP_ONOFF, /* ON/OFF oscillator */ - MAX77620_IRQ_LBT_MBATLOW, /* Thermal alarm status, > 120C */ - MAX77620_IRQ_LBT_TJALRM1, /* Thermal alarm status, > 120C */ - MAX77620_IRQ_LBT_TJALRM2, /* Thermal alarm status, > 140C */ -}; - -/* GPIOs */ -enum { - MAX77620_GPIO0, - MAX77620_GPIO1, - MAX77620_GPIO2, - MAX77620_GPIO3, - MAX77620_GPIO4, - MAX77620_GPIO5, - MAX77620_GPIO6, - MAX77620_GPIO7, - MAX77620_GPIO_NR, -}; - -/* FPS Source */ -enum max77620_fps_src { - MAX77620_FPS_SRC_0, - MAX77620_FPS_SRC_1, - MAX77620_FPS_SRC_2, - MAX77620_FPS_SRC_NONE, - MAX77620_FPS_SRC_DEF, -}; - -#define MAX77812_PHASE31_CPU_I2C_ADDR \ - 0x31 // High power GPU. 2 Outputs: 3-phase M1 + 1-phase M4. -#define MAX77812_PHASE211_CPU_I2C_ADDR \ - 0x33 // Low power GPU. 3 Outputs: 2-phase M1 + 1-phase M3 + 1-phase M4. - -#define MAX77812_REG_RSET 0x00 -#define MAX77812_REG_INT_SRC 0x01 -#define MAX77812_REG_INT_SRC_M 0x02 -#define MAX77812_REG_TOPSYS_INT 0x03 -#define MAX77812_REG_TOPSYS_INT_M 0x04 -#define MAX77812_REG_TOPSYS_STAT 0x05 -#define MAX77812_REG_EN_CTRL 0x06 -#define MAX77812_EN_CTRL_ENABLE 1 -#define MAX77812_EN_CTRL_EN_M1_SHIFT 0 -#define MAX77812_EN_CTRL_EN_M1_MASK (1 << MAX77812_EN_CTRL_EN_M1_SHIFT) -#define MAX77812_EN_CTRL_EN_M2_SHIFT 2 -#define MAX77812_EN_CTRL_EN_M2_MASK (1 << MAX77812_EN_CTRL_EN_M2_SHIFT) -#define MAX77812_EN_CTRL_EN_M3_SHIFT 4 -#define MAX77812_EN_CTRL_EN_M3_MASK (1 << MAX77812_EN_CTRL_EN_M3_SHIFT) -#define MAX77812_EN_CTRL_EN_M4_SHIFT 6 -#define MAX77812_EN_CTRL_EN_M4_MASK (1 << MAX77812_EN_CTRL_EN_M4_SHIFT) -#define MAX77812_REG_STUP_DLY2 0x07 -#define MAX77812_REG_STUP_DLY3 0x08 -#define MAX77812_REG_STUP_DLY4 0x09 -#define MAX77812_REG_SHDN_DLY1 0x0A -#define MAX77812_REG_SHDN_DLY2 0x0B -#define MAX77812_REG_SHDN_DLY3 0x0C -#define MAX77812_REG_SHDN_DLY4 0x0D -#define MAX77812_REG_WDTRSTB_DEB 0x0E -#define MAX77812_REG_GPI_FUNC 0x0F -#define MAX77812_REG_GPI_DEB1 0x10 -#define MAX77812_REG_GPI_DEB2 0x11 -#define MAX77812_REG_GPI_PD_CTRL 0x12 -#define MAX77812_REG_PROT_CFG 0x13 -#define MAX77812_REG_VERSION 0x14 -#define MAX77812_REG_I2C_CFG 0x15 -#define MAX77812_REG_BUCK_INT 0x20 -#define MAX77812_REG_BUCK_INT_M 0x21 -#define MAX77812_REG_BUCK_STAT 0x22 -#define MAX77812_REG_M1_VOUT 0x23 // GPU. -#define MAX77812_REG_M2_VOUT 0x24 -#define MAX77812_REG_M3_VOUT 0x25 // DRAM on PHASE211. -#define MAX77812_REG_M4_VOUT 0x26 // CPU. -#define MAX77812_REG_M1_VOUT_D 0x27 -#define MAX77812_REG_M2_VOUT_D 0x28 -#define MAX77812_REG_M3_VOUT_D 0x29 -#define MAX77812_REG_M4_VOUT_D 0x2A -#define MAX77812_REG_M1_VOUT_S 0x2B -#define MAX77812_REG_M2_VOUT_S 0x2C -#define MAX77812_REG_M3_VOUT_S 0x2D -#define MAX77812_REG_M4_VOUT_S 0x2E -#define MAX77812_REG_M1_CFG 0x2F // HOS: M1_ILIM - 7.2A/4.8A. -#define MAX77812_REG_M2_CFG 0x30 // HOS: M2_ILIM - 7.2A/4.8A. -#define MAX77812_REG_M3_CFG 0x31 // HOS: M3_ILIM - 7.2A/4.8A. -#define MAX77812_REG_M4_CFG 0x32 // HOS: M4_ILIM - 7.2A/4.8A. -#define MAX77812_REG_GLB_CFG1 0x33 // HOS: B_SD_SR/B_SS_SR - 5mV/us. -#define MAX77812_REG_GLB_CFG2 0x34 // HOS: B_RD_SR/B_RU_SR - 5mV/us -#define MAX77812_REG_GLB_CFG3 0x35 - -/*! Protected area and settings only for MAX77812_ES2_VERSION */ -#define MAX77812_REG_GLB_CFG4 0x36 // QS: 0xBB. -#define MAX77812_REG_GLB_CFG5 0x37 // QS: 0x39. ES2: Set to 0x3E. -#define MAX77812_REG_GLB_CFG6 0x38 // QS: 0x88. ES2: Set to 0x90. -#define MAX77812_REG_GLB_CFG7 0x39 // QS: 0x04. -#define MAX77812_REG_GLB_CFG8 0x3A // QS: 0x3A. ES2: Set to 0x3A. - -#define MAX77812_REG_PROT_ACCESS 0xFD // 0x00: Lock, 0x5A: Unlock. -#define MAX77812_REG_UNKNOWN 0xFE - -#define MAX77812_REG_EN_CTRL_MASK(n) BIT(n) -#define MAX77812_START_SLEW_RATE_MASK 0x07 -#define MAX77812_SHDN_SLEW_RATE_MASK 0x70 -#define MAX77812_RAMPUP_SLEW_RATE_MASK 0x07 -#define MAX77812_RAMPDOWN_SLEW_RATE_MASK 0x70 -#define MAX77812_SLEW_RATE_SHIFT 4 - -#define MAX77812_OP_ACTIVE_DISCHARGE_MASK BIT(7) -#define MAX77812_PEAK_CURRENT_LMT_MASK 0x70 -#define MAX77812_SWITCH_FREQ_MASK 0x0C -#define MAX77812_FORCED_PWM_MASK BIT(1) -#define MAX77812_SLEW_RATE_CNTRL_MASK BIT(0) -#define MAX77812_START_SHD_DELAY_MASK 0x1F -#define MAX77812_VERSION_MASK 0x07 -#define MAX77812_ES2_VERSION 0x04 -#define MAX77812_QS_VERSION 0x05 - -#define MAX77812_BUCK_VOLT_MASK 0xFF - -#define BQ24193_I2C_ADDR 0x6B - -// REG 0 masks. -#define BQ24193_INCONFIG_INLIMIT_MASK (7 << 0) -#define BQ24193_INCONFIG_VINDPM_MASK 0x78 -#define BQ24193_INCONFIG_HIZ_EN_MASK (1 << 7) - -// REG 1 masks. -#define BQ24193_PORCONFIG_BOOST_MASK (1 << 0) -#define BQ24193_PORCONFIG_SYSMIN_MASK (7 << 1) // 3000uV HOS default. -#define BQ24193_PORCONFIG_CHGCONFIG_MASK (3 << 4) -#define BQ24193_PORCONFIG_CHGCONFIG_CHARGER_EN (1 << 4) -#define BQ24193_PORCONFIG_I2CWATCHDOG_MASK (1 << 6) -#define BQ24193_PORCONFIG_RESET_MASK (1 << 7) - -// REG 2 masks. -#define BQ24193_CHRGCURR_20PCT_MASK (1 << 0) -#define BQ24193_CHRGCURR_ICHG_MASK 0xFC - -// REG 3 masks. -#define BQ24193_PRECHRG_ITERM 0x0F -#define BQ24193_PRECHRG_IPRECHG 0xF0 - -// REG 4 masks. -#define BQ24193_CHRGVOLT_VTHRES (1 << 0) -#define BQ24193_CHRGVOLT_BATTLOW (1 << 1) -#define BQ24193_CHRGVOLT_VREG 0xFC - -// REG 5 masks. -#define BQ24193_CHRGTERM_ISET_MASK (1 << 0) -#define BQ24193_CHRGTERM_CHGTIMER_MASK (3 << 1) -#define BQ24193_CHRGTERM_ENTIMER_MASK (1 << 3) -#define BQ24193_CHRGTERM_WATCHDOG_MASK (3 << 4) -#define BQ24193_CHRGTERM_TERM_ST_MASK (1 << 6) -#define BQ24193_CHRGTERM_TERM_EN_MASK (1 << 7) - -// REG 6 masks. -#define BQ24193_IRTHERMAL_THERM_MASK (3 << 0) -#define BQ24193_IRTHERMAL_VCLAMP_MASK (7 << 2) -#define BQ24193_IRTHERMAL_BATTCOMP_MASK (7 << 5) - -// REG 7 masks. -#define BQ24193_MISC_INT_MASK (3 << 0) -#define BQ24193_MISC_VSET_MASK (1 << 4) -#define BQ24193_MISC_BATFET_DI_MASK (1 << 5) -#define BQ24193_MISC_TMR2X_EN_MASK (1 << 6) -#define BQ24193_MISC_DPDM_EN_MASK (1 << 7) - -// REG 8 masks. -#define BQ24193_STATUS_VSYS_MASK (1 << 0) -#define BQ24193_STATUS_THERM_MASK (1 << 1) -#define BQ24193_STATUS_PG_MASK (1 << 2) -#define BQ24193_STATUS_DPM_MASK (1 << 3) -#define BQ24193_STATUS_CHRG_MASK (3 << 4) -#define BQ24193_STATUS_VBUS_MASK (3 << 6) - -// REG 9 masks. -#define BQ24193_FAULT_THERM_MASK (7 << 0) -#define BQ24193_FAULT_BATT_OVP_MASK (1 << 3) -#define BQ24193_FAULT_CHARGE_MASK (3 << 4) -#define BQ24193_FAULT_BOOST_MASK (1 << 6) -#define BQ24193_FAULT_WATCHDOG_MASK (1 << 7) - -// REG A masks. -#define BQ24193_VENDORPART_DEV_MASK (3 << 0) -#define BQ24193_VENDORPART_PN_MASK (7 << 3) - -enum BQ24193_reg { - BQ24193_InputSource = 0x00, - BQ24193_PORConfig = 0x01, - BQ24193_ChrgCurr = 0x02, - BQ24193_PreChrgTerm = 0x03, - BQ24193_ChrgVolt = 0x04, - BQ24193_ChrgTermTimer = 0x05, - BQ24193_IRCompThermal = 0x06, - BQ24193_Misc = 0x07, - BQ24193_Status = 0x08, - BQ24193_FaultReg = 0x09, - BQ24193_VendorPart = 0x0A, -}; - -enum BQ24193_reg_prop { - 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. -}; - -#endif /* MAX77XXX_H */