A little time ago I wrote about the S0ix and S0i3 modes for Intel SoC CPUs. I moved a small step forward.
It seems indeed that the reason for the pretty high power drain in suspend, which is around 0.4W, has its roots in the system not entering S0i3. In S0i3 the power management controller (PMC) would not only stop all clocks but will also put the DRAM in self refresh mode. DRAM has a pretty high power consumption while being refreshed by the DRAM controller of the CPU. But in self refresh this power consumption is significantly reduced. Ideally a Baytrail system in S0i3 should be able to last one or even two weeks on battery. Currenty Cherrytrail system are advertised with 30 days of standby. On the TPT10 we currently get three days of standby from a fully charged battery. So we are looking at a magnitude of power saving / loss, roughly 0.4W <-> 0.04W.
This is pretty frustrating.
I started to look at other implementations of Baytrail systems, especially Android devices. For some of them you get the kernel sources, which are usually old 3.xx kernels. But here I was able to see that S0i3 is supposed to be handled by the Intel idle driver found in drivers/idle/intel_idle.c. Looking at this code in current mainline Linux up to 4.11.x you can see that these modes are not implemented, not at all. So I think this is the reason we do not see S0i3 usage and thus inefficient power saving in standby.
Next task is to find what needs to be done to finally implement it. The CPU documentation for the Intel Z37xx SoCs is probably the (worst /) most complex i have seen so far. Want to give it a try? Try to find what needs to be done to enter S0i3… I was not really able to find it.