Your test is interesting. Is the AmdMsrTweaker available on Linux? Is there any way to manipulate the P-state of NB?
Actually, I am also looking for methods to read the iGPU P-state and try to control it. However, I'm afraid you can not find any useful details from BKDG. About the power management of iGPU, only some general ideas and techniques are mentioned in the document. I suspect that the state of NB may affect the P-state (or frequency) of iGPU, because the iGPU controller is integrated in NB according to BKDG. You may try to confirm that. Some guys have told me that the GPU state is adjustable, but only with AMD internal tools.
Anyway, I have moved my work to another heterogeneous platform, NVIDIA TK1 Jetson, on which GPU frequency, CPU frequency and Memory frequency can be adjusted manually in a much easier way. So I didn't work on APU any more due to the lack of frequency adjustment of iGPU. If you find out how to read and manipulate GPU P-state with public tools and methods, please let me know.
There is a Linux fork of AmdMsrTweaker on GitHub johkra/amdmsrtweaker-lnx · GitHub.
I am working on improving the original Windows version LogioTek/AmdMsrTweaker · GitHub.
About iGPU, yes on Kaveri it's part of NB and is powered by VDD NB and I was told that VDD NB is set based on MAX(NBpStateVIDDemand, GPUpStateVIDDemand) and on Carrizo they added separate VDD GPU power plane.
Programs like CPU-Z and GPU-Z able to read iGPU P-State information (at least frequencies) so there is definitely a way to read them. I'd like to first achieve reading P-State information before I attempt modifying it (if there is a way to).