Intel Atom N2600 / N2800 CPUs are still categorically considered Intel CPUs even if the on-die GPU is not designed in-house (Imagination Technologies PowerVR SGX).
Code:
$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 54
model name      : Intel(R) Atom(TM) CPU N2800   @ 1.86GHz
stepping        : 1
microcode       : 0x10c
cpu MHz         : 1862.000
cache size      : 512 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fdiv_bug        : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon pebs bts nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 xtpr pdcm movbe lahf_lm arat dtherm
bogomips        : 3723.94
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 32 bits virtual
power management:
So can somebody tell me why in the following cases-in-point, it seems that support for these specific Atom CPUs are (intentionally left?) missing from source code?


CASE 1: Missing C-states

The generic ACPI processor driver (acpi_cpuidle) from Linux-3.9.8 does not expose C-states for this CPU to the OS, nor does intel_idle v0.4:
Code:
$ dmesg | grep idle
intel_idle: does not run on family 6 model 54
cpuidle: using governor ladder
cpuidle: using governor menu
Powertop-2.1 shows empty idle states.

Here's an excerpt from drivers/idle/intel_idle.c where it shows the CPUs it runs on:
Code:
static const struct x86_cpu_id intel_idle_ids[] = {
	ICPU(0x1a, idle_cpu_nehalem),
	ICPU(0x1e, idle_cpu_nehalem),
	ICPU(0x1f, idle_cpu_nehalem),
	ICPU(0x25, idle_cpu_nehalem),
	ICPU(0x2c, idle_cpu_nehalem),
	ICPU(0x2e, idle_cpu_nehalem),
	ICPU(0x1c, idle_cpu_atom),
	ICPU(0x26, idle_cpu_lincroft),
	ICPU(0x2f, idle_cpu_nehalem),
	ICPU(0x2a, idle_cpu_snb),
	ICPU(0x2d, idle_cpu_snb),
	ICPU(0x3a, idle_cpu_ivb),
	ICPU(0x3e, idle_cpu_ivb),
	ICPU(0x3c, idle_cpu_hsw),
	ICPU(0x3f, idle_cpu_hsw),
	ICPU(0x45, idle_cpu_hsw),
	ICPU(0x46, idle_cpu_hsw),
	{}
};
I have a family 6 model 28 (0x1c from the code above) Intel Atom N280 CPU and its C-states are exposed by intel_idle. So why is a family 6 model 54 (0x36) Intel Atom N2800 missing support from intel_idle? Intel Atom Processor D2000 and N2000 series datasheet [1] shows that this processor supports C-states:
Support CPU states: C0 and C1 (for D2000 series); C0-C4, C1E-C4E, Deep Power
Down Technology (code named C6)(for N2000 series)
[1] https://www-ssl.intel.com/content/ww...datasheet.html

Patching intel_idle.c like so:
Code:
--- linux-3.9/drivers/idle/intel_idle.c.orig	2013-06-28 09:52:26.270075222 +0800
+++ linux-3.9/drivers/idle/intel_idle.c	2013-06-28 09:52:09.478076218 +0800
@@ -456,6 +456,7 @@
 	ICPU(0x2c, idle_cpu_nehalem),
 	ICPU(0x2e, idle_cpu_nehalem),
 	ICPU(0x1c, idle_cpu_atom),
+	ICPU(0x36, idle_cpu_atom),
 	ICPU(0x26, idle_cpu_lincroft),
 	ICPU(0x2f, idle_cpu_nehalem),
 	ICPU(0x2a, idle_cpu_snb),
then recompiling the kernel, intel_idle now reports:
Code:
$ dmesg | grep idle
intel_idle: MWAIT substates: 0x3020220
intel_idle: v0.4 model 0x36
intel_idle: lapic_timer_reliable_states 0xffffffff
cpuidle: using governor ladder
cpuidle: using governor menu
And Powertop-2.1 now reports idle states (POLL, C1E-ATM, C2-ATM, C4-ATM, C6-ATM).


CASE 2: Intel PowerClamp does not support this CPU

Code:
# modprobe intel_powerclamp
FATAL: Error inserting intel_powerclamp (lib/modules/3.9.8/kernel/drivers/thermal/intel_powerclamp.ko): No such device
And I found out why
Code:
# modinfo intel_powerclamp
filename:       /lib/modules/3.9.8/kernel/drivers/thermal/intel_powerclamp.ko
description:    Package Level C-state Idle Injection for Intel CPUs
author:         Jacob Pan <jacob.jun.pan@linux.intel.com>
author:         Arjan van de Ven <arjan@linux.intel.com>
license:        GPL
srcversion:     4FEB61B99F664447271957F
alias:          x86cpu:vendor:0000:family:0006:model:003A:feature:*
alias:          x86cpu:vendor:0000:family:0006:model:002F:feature:*
alias:          x86cpu:vendor:0000:family:0006:model:002E:feature:*
alias:          x86cpu:vendor:0000:family:0006:model:002D:feature:*
alias:          x86cpu:vendor:0000:family:0006:model:002C:feature:*
alias:          x86cpu:vendor:0000:family:0006:model:002A:feature:*
alias:          x86cpu:vendor:0000:family:0006:model:0026:feature:*
alias:          x86cpu:vendor:0000:family:0006:model:0025:feature:*
alias:          x86cpu:vendor:0000:family:0006:model:001F:feature:*
alias:          x86cpu:vendor:0000:family:0006:model:001E:feature:*
alias:          x86cpu:vendor:0000:family:0006:model:001C:feature:*
alias:          x86cpu:vendor:0000:family:0006:model:001A:feature:*
depends:        
intree:         Y
vermagic:       3.9.8 SMP preempt mod_unload modversions ATOM 
parm:           duration:forced idle time for each attempt in msec.
parm:           window_size:sliding window in number of clamping cycles
	powerclamp controls idle ratio within this window. larger
	window size results in slower response time but more smooth
	clamping results. default to 2.
From the module's aliases above we can see that it supports my family 6 model 28 (001C) Intel Atom N280 CPU, but is missing support for my family 6 model 54 (0036) Intel Atom N2800.

Considering the above presentations I have made, I am under the impression that these particular Atom CPUs, being unfortunately the odd-man out among Intel's great FOSS-supported CPU line-up, are being singled-out from support by Intel OTC.

It's already a rough road getting decent graphics performance from these Atoms, but seeing some CPU-specific, not to mention the important C-state, support missing for these models I am more inclined to think that support is cursed for this product, at least from a GNU/Linux point-of-view. Intel really dropped the ball on this one.

Can somebody from Intel start adding CPU support where it's missing for these particular Atom CPUs, please?