return;
 }
 
+static void
+dump_config_tdp(void)
+{
+       unsigned long long msr;
+
+       get_msr(base_cpu, MSR_CONFIG_TDP_NOMINAL, &msr);
+       fprintf(stderr, "cpu%d: MSR_CONFIG_TDP_NOMINAL: 0x%08llx", base_cpu, msr);
+       fprintf(stderr, " (base_ratio=%d)\n", (unsigned int)msr & 0xEF);
+
+       get_msr(base_cpu, MSR_CONFIG_TDP_LEVEL_1, &msr);
+       fprintf(stderr, "cpu%d: MSR_CONFIG_TDP_LEVEL_1: 0x%08llx (", base_cpu, msr);
+       if (msr) {
+               fprintf(stderr, "PKG_MIN_PWR_LVL1=%d ", (unsigned int)(msr >> 48) & 0xEFFF);
+               fprintf(stderr, "PKG_MAX_PWR_LVL1=%d ", (unsigned int)(msr >> 32) & 0xEFFF);
+               fprintf(stderr, "LVL1_RATIO=%d ", (unsigned int)(msr >> 16) & 0xEF);
+               fprintf(stderr, "PKG_TDP_LVL1=%d", (unsigned int)(msr) & 0xEFFF);
+       }
+       fprintf(stderr, ")\n");
+
+       get_msr(base_cpu, MSR_CONFIG_TDP_LEVEL_2, &msr);
+       fprintf(stderr, "cpu%d: MSR_CONFIG_TDP_LEVEL_2: 0x%08llx (", base_cpu, msr);
+       if (msr) {
+               fprintf(stderr, "PKG_MIN_PWR_LVL2=%d ", (unsigned int)(msr >> 48) & 0xEFFF);
+               fprintf(stderr, "PKG_MAX_PWR_LVL2=%d ", (unsigned int)(msr >> 32) & 0xEFFF);
+               fprintf(stderr, "LVL2_RATIO=%d ", (unsigned int)(msr >> 16) & 0xEF);
+               fprintf(stderr, "PKG_TDP_LVL2=%d", (unsigned int)(msr) & 0xEFFF);
+       }
+       fprintf(stderr, ")\n");
+
+       get_msr(base_cpu, MSR_CONFIG_TDP_CONTROL, &msr);
+       fprintf(stderr, "cpu%d: MSR_CONFIG_TDP_CONTROL: 0x%08llx (", base_cpu, msr);
+       if ((msr) & 0x3)
+               fprintf(stderr, "TDP_LEVEL=%d ", (unsigned int)(msr) & 0x3);
+       fprintf(stderr, " lock=%d", (unsigned int)(msr >> 31) & 1);
+       fprintf(stderr, ")\n");
+       
+       get_msr(base_cpu, MSR_TURBO_ACTIVATION_RATIO, &msr);
+       fprintf(stderr, "cpu%d: MSR_TURBO_ACTIVATION_RATIO: 0x%08llx (", base_cpu, msr);
+       fprintf(stderr, "MAX_NON_TURBO_RATIO=%d", (unsigned int)(msr) & 0xEF);
+       fprintf(stderr, " lock=%d", (unsigned int)(msr >> 31) & 1);
+       fprintf(stderr, ")\n");
+}
+
 void free_all_buffers(void)
 {
        CPU_FREE(cpu_present_set);
                return 0;
        }
 }
+int has_config_tdp(unsigned int family, unsigned int model)
+{
+       if (!genuine_intel)
+               return 0;
+
+       if (family != 6)
+               return 0;
+
+       switch (model) {
+       case 0x3A:      /* IVB */
+       case 0x3E:      /* IVB Xeon */
+
+       case 0x3C:      /* HSW */
+       case 0x3F:      /* HSX */
+       case 0x45:      /* HSW */
+       case 0x46:      /* HSW */
+       case 0x3D:      /* BDW */
+       case 0x47:      /* BDW */
+       case 0x4F:      /* BDX */
+       case 0x56:      /* BDX-DE */
+       case 0x4E:      /* SKL */
+       case 0x5E:      /* SKL */
+
+       case 0x57:      /* Knights Landing */
+               return 1;
+       default:
+               return 0;
+       }
+}
+
 static void
 dump_cstate_pstate_config_info(family, model)
 {
        if (has_knl_turbo_ratio_limit(family, model))
                dump_knl_turbo_ratio_limits();
 
+       if (has_config_tdp(family, model))
+               dump_config_tdp();
+
        dump_nhm_cst_cfg();
 }
 
 }
 
 void print_version() {
-       fprintf(stderr, "turbostat version 4.7 27-May, 2015"
+       fprintf(stderr, "turbostat version 4.7 17-June, 2015"
                " - Len Brown <lenb@kernel.org>\n");
 }