[Xoom Android Development] FormerPalmOS:
Overclocking and over/under volting

I work in the multi-core processors space and thought I would offer some background for those of you wondering why so-and-so's SetCPU settings don't work on my Xoom. No new ideas or suggestions in here so skip reading if not interested. Otherwise sorry for the long post.

There is inherent variability from manufactured chip to chip due to the many many steps involved in building the chip, potential slight differences in the chemical and physical properties of the materials used at each step, where the die is on the wafer, etc. At the end of the line you get a gaussian distribution of maximum performance, performance at a specific voltage and power consumption (thermal dissipation). The distribution is pretty tight and the manufacturers typically throw out the most extreme outliers to tighten up that distribution even more. Then, depending on the particular business requirements, they might ship everything as the same speed grade or they might ship different speed grades. Sometimes this means that a faster chip is shipped marked as a slower speed grade. However you should never see a chip that runs slower than the manufacturer marks them.

For our Xooms, the design target is 1000 MHz. However this variability is the primary reason why there is

never

a one size fits all when overclocking or over/under volting. This is also why it should not be built into the rom. The one size that fits all is what the manufacturer specs - 1000 MHz at 1.0V in case of stock Xooms. This speed was most likely chosen (vs. a faster speed) to optimize battery life vs. performance - keep in mind when this decision had to be made - at least two years ago if not more.

Given that we are seeing people overclocking successfully at 1500 MHz (some at 1600 and a few at 1700), the mid-point of the distribution is likely around 1400 MHz, maybe 1500. So Xoom A might get built with a chip that barely makes 1400 at all operating points, and Xoom B might get built with a chip that makes 1700 at some (but not all points). The variability also means that Xoom A might need a slight voltage boost to hit that 1400 MHz and Xoom B might need a big boost to hit 1700. Xoom C might hit 1400 and do so while undervolted. There is no guaranteed relation - two overclock-capable chips might be capable at different voltages.

There are however two very important relations. First, in general, higher voltage is required to run faster. Thus if you can under-volt at some high speed, you can almost certainly do so at lower speeds. Second, higher voltage means more power (more heat and less battery life). Higher voltage, if high enough, can also accelerate certain chemical activites (electromigration if you want to read more) that will reduce the life expectancy of the chip (read turn up the juice too much and you will in fact fry your CPU). The power supply might not be capable of supplying that higher power cleanly (noise might equal errors or data loss or lock-ups), and the mechanical design of the system might not be able to get the heat out (more heat means more chance of damage). So be very careful with over volting. In general I never over-volt, but 5% OV or less probably won't hurt anything.

Conversely, be careful with too low of a voltage - the SRAM memories in the cache and other parts of the chip need a minimum voltage to retain their data. As with everything this is variable and there is a different floor for each device.

So the best guidance I can give are the following:

a) Never over- or under-volt by more than 5%. Might be able to get away with greater under-volt in the middle of the performance range, but at the low end, never go < 5% or you risk data loss. But remember faster speeds need more voltage.

b) Get your Xoom hot (hair dryer - but not too hot - don't melt the thing!) then stress test the hell out of your settings. When you find where it breaks when hot, back off (e.g. next lower speed).

c) If you insist on setting OC/OV/UV settings at boot, see b above. It sucks to create a boot loop because your settings are unstable.