Hello everyone! I recently decided to try to overclock my TK1. I was successful, but it seems that the TK1 can only be overclocked so far before it refuses to go any further.
The CPU overclock was pretty great, I got it to a stable 2.8GHz! However, the GPU doesn’t overclock as far. I only got it to 1,008MHz, which is decent, but I think that it could go further than that. Sadly, it seems that something is limiting both the CPU and GPU clock speeds, as both of them can go no higher than 2.8GHz/1008MHz. I’m going to post a small guide below on how I overclocked it, and hopefully someone might be able to figure out how to get rid of the overclock limit!
(Also, a huge thanks to BitOBSessiOn over at the XDA forums for his kernel for the Shield tablet. The code for that is extremely similar to the TK1, so his overclocking code works on the TK1 with only a few changes.)
- First of all, overclocking the TK1 requires you to modify and compile a kernel. I used Nvidia's source code for the kernel from the L4T 21.4 release page: https://developer.nvidia.com/linux-tegra-r214.
- After you download the kernel source, unzip it. ``` cd Downloads sudo su tar -xvf kernel_src.tbz2 ```
- Go into the kernel directory and set up the kernel. Make sure to give it a custom local version in the menu in General Setup. ``` cd kernel make tegra12_defconfig make menuconfig ```
- Now it's time to modify the files. Navigate to the /kernel/arch/arm/mach-tegra folder and open the three files below (use root shell). ``` cd /home/ubuntu/Downloads/kernel/arch/arm/mach-tegra gedit board-ardbeg-sensors.c gedit tegra12_dvfs.c gedit tegra12_edp.c ```
- Make the following edits to board-ardbeg-sensors.c: ``` #The first throttle table should be located near line 1545. Add this to the top of the table: { { 2499000, NO_CAP, NO_CAP, NO_CAP, NO_CAP, NO_CAP } }, { { 2397500, NO_CAP, NO_CAP, NO_CAP, NO_CAP, NO_CAP } }, #Add this to the top of the second table near line 1640: { { 2499000, 804000, 480000, 756000, 384000, 924000 } }, { { 2397000, 793400, 480000, 756000, 384000, 924000 } }, #And finally, add this to the top of the third table near line 1875: { { 2499000, NO_CAP, NO_CAP, NO_CAP, NO_CAP, NO_CAP } }, { { 2397000, NO_CAP, NO_CAP, NO_CAP, NO_CAP, NO_CAP } }, #(Substitute 2499000 for your desired CPU overclock. I've found that CPU overclocking maxes out at 2805000.) ```
- Make the following edits to tegra12_dvfs.c: ``` #Go to line 168 and change the CPU DVFS values to look like this: 2499000, 2499000, 2499000, 2499000, 2499000, 2499000, 2499000, 2499000, 2499000, #Substitute 2499000 for your desired overclock. Limit seems to be 2805000. #Go to line 767 and change the GPU DVFS values to look like this: 1008000, 1008000, 1008000, 1008000, 1008000, 1008000, 1008000 #Go to line 907 and change 984000 to 1008000. For some reason, 1008000 will not show up as a usable GPU frequency unless you replace 984000 as an option. ```
- Make the following edits to tegra12_edp.c: ``` #Go to lines 54-61 and replace it with this: {26000, {12000, 684000, 933000 }, {6000, 924000, 933000 }, 14452 }, {27000, {12000, 708000, 933000 }, {7000, 924000, 933000 }, 15002 }, {28000, {12000, 708000, 933000 }, {8000, 924000, 933000 }, 16030 }, {29000, {12000, 756000, 933000 }, {8000, 924000, 933000 }, 16311 }, {30000, {12000, 756000, 933000 }, {8000, 1008000, 933000 }, 16311 }, {31000, {12000, 756000, 933000 }, {8000, 1008000, 933000 }, 16311 }, {32000, {12000, 804000, 933000 }, {9000, 1008000, 933000 }, 16883 }, {33000, {12000, 804000, 933000 }, {10000, 1008000, 933000 }, 17721 }, #Go to lines 132-139 and replace it with this: {26000, {10000, 708000, 933000}, {6000, 924000, 933000 }, 14049 }, {27000, {10000, 756000, 933000}, {7000, 924000, 933000 }, 15002 }, {28000, {10000, 756000, 933000}, {8000, 924000, 933000 }, 15071 }, {29000, {10000, 804000, 933000}, {8000, 924000, 933000 }, 15621 }, {30000, {10000, 804000, 933000}, {8000, 1008000, 933000 }, 15621 }, {31000, {10000, 804000, 933000}, {8000, 1008000, 933000 }, 15621 }, {32000, {10000, 804000, 933000}, {9000, 1008000, 933000 }, 16331 }, {33000, {10000, 853000, 933000}, {10000, 1008000, 933000 }, 17721 }, ```
- After saving the changes to those files, go back to the kernel directory and build the kernel. ``` cd /home/ubuntu/Downloads/kernel make #After make is finished, run the following commands: make modules make modules_install ```
- After the modules finish installing, go to /ubuntu/home/kernel/arch/arm/boot and rename the zImage file to something else. I just renamed it zImageoc. After renaming it, copy the file to your /boot/ directory, then open your extlinux.conf file in /boot/extlinux/ and change LINUX /boot/zImage to LINUX /boot/zImageoc (or whatever you renamed your zImage to). This will allow you to use your custom kernel without deleting the default one so you can switch back to it if you want to.
- After that, you are done! Reboot your TK1 and run the max performance script from http://elinux.org/Jetson/Performance to use the overclock! (Change the GPU script from 852000000 to 1008000000).
Tips:
- The CPU seems to be clocked in 25500KHz intervals, while the GPU seems to be clocked in 12000KHz intervals.
Note: I’m pretty new to Linux in general, so I’m pretty sure the above guide could be a lot better. Sorry if the guide isn’t that great!