Revision 54 wattch/power.c

View differences:

power.c
202 202
static double total_parasitic_cc1 = 0.0;
203 203
static double total_parasitic_cc2 = 0.0;
204 204
static double total_parasitic_cc3 = 0.0;
205
static double offchip_parasitic_cc1 = 0.0;
206
static double offchip_parasitic_cc2 = 0.0;
207
static double offchip_parasitic_cc3 = 0.0;
208
static double onchip_parasitic_cc1 = 0.0;
209
static double onchip_parasitic_cc2 = 0.0;
210
static double onchip_parasitic_cc3 = 0.0;
205 211
#define PARASITIC_OHM 0.002
206 212
static double max_amp = 0.00;
207 213
static double min_amp = 1000.00;
......
670 676
  }
671 677

  
672 678
  if (current < 0.5) {
673
      total_parasitic_cc1 += offchip_ploss[0];
674
      total_parasitic_cc2 += offchip_ploss[0];
675
      total_parasitic_cc3 += offchip_ploss[0];
679
      offchip_parasitic_cc1 += offchip_ploss[0];
680
      offchip_parasitic_cc2 += offchip_ploss[0];
681
      offchip_parasitic_cc3 += offchip_ploss[0];
676 682
  } else if (current < 1) {
677
      total_parasitic_cc1 += offchip_ploss[1];
678
      total_parasitic_cc2 += offchip_ploss[1];
679
      total_parasitic_cc3 += offchip_ploss[1];
683
      offchip_parasitic_cc1 += offchip_ploss[1];
684
      offchip_parasitic_cc2 += offchip_ploss[1];
685
      offchip_parasitic_cc3 += offchip_ploss[1];
680 686
  } else if (current < 1.5) {
681
      total_parasitic_cc1 += offchip_ploss[2];
682
      total_parasitic_cc2 += offchip_ploss[2];
683
      total_parasitic_cc3 += offchip_ploss[2];
687
      offchip_parasitic_cc1 += offchip_ploss[2];
688
      offchip_parasitic_cc2 += offchip_ploss[2];
689
      offchip_parasitic_cc3 += offchip_ploss[2];
684 690
  } else if (current < 2) {
685
      total_parasitic_cc1 += offchip_ploss[3];
686
      total_parasitic_cc2 += offchip_ploss[3];
687
      total_parasitic_cc3 += offchip_ploss[3];
691
      offchip_parasitic_cc1 += offchip_ploss[3];
692
      offchip_parasitic_cc2 += offchip_ploss[3];
693
      offchip_parasitic_cc3 += offchip_ploss[3];
688 694
  } else if (current < 2.5) {
689
      total_parasitic_cc1 += offchip_ploss[4];
690
      total_parasitic_cc2 += offchip_ploss[4];
691
      total_parasitic_cc3 += offchip_ploss[4];
695
      offchip_parasitic_cc1 += offchip_ploss[4];
696
      offchip_parasitic_cc2 += offchip_ploss[4];
697
      offchip_parasitic_cc3 += offchip_ploss[4];
692 698
  } else if (current < 3) {
693
      total_parasitic_cc1 += offchip_ploss[5];
694
      total_parasitic_cc2 += offchip_ploss[5];
695
      total_parasitic_cc3 += offchip_ploss[5];
699
      offchip_parasitic_cc1 += offchip_ploss[5];
700
      offchip_parasitic_cc2 += offchip_ploss[5];
701
      offchip_parasitic_cc3 += offchip_ploss[5];
696 702
  } else if (current < 3.5) {
697
      total_parasitic_cc1 += offchip_ploss[6];
698
      total_parasitic_cc2 += offchip_ploss[6];
699
      total_parasitic_cc3 += offchip_ploss[6];
703
      offchip_parasitic_cc1 += offchip_ploss[6];
704
      offchip_parasitic_cc2 += offchip_ploss[6];
705
      offchip_parasitic_cc3 += offchip_ploss[6];
700 706
  } else if (current < 4) {
701
      total_parasitic_cc1 += offchip_ploss[7];
702
      total_parasitic_cc2 += offchip_ploss[7];
703
      total_parasitic_cc3 += offchip_ploss[7];
707
      offchip_parasitic_cc1 += offchip_ploss[7];
708
      offchip_parasitic_cc2 += offchip_ploss[7];
709
      offchip_parasitic_cc3 += offchip_ploss[7];
704 710
  } else if (current < 4.5) {
705
      total_parasitic_cc1 += offchip_ploss[8];
706
      total_parasitic_cc2 += offchip_ploss[8];
707
      total_parasitic_cc3 += offchip_ploss[8];
711
      offchip_parasitic_cc1 += offchip_ploss[8];
712
      offchip_parasitic_cc2 += offchip_ploss[8];
713
      offchip_parasitic_cc3 += offchip_ploss[8];
708 714
  } else if (current < 5) {
709
      total_parasitic_cc1 += offchip_ploss[9];
710
      total_parasitic_cc2 += offchip_ploss[9];
711
      total_parasitic_cc3 += offchip_ploss[9];
715
      offchip_parasitic_cc1 += offchip_ploss[9];
716
      offchip_parasitic_cc2 += offchip_ploss[9];
717
      offchip_parasitic_cc3 += offchip_ploss[9];
712 718
  } else if (current < 5.5) {
713
      total_parasitic_cc1 += offchip_ploss[10];
714
      total_parasitic_cc2 += offchip_ploss[10];
715
      total_parasitic_cc3 += offchip_ploss[10];
719
      offchip_parasitic_cc1 += offchip_ploss[10];
720
      offchip_parasitic_cc2 += offchip_ploss[10];
721
      offchip_parasitic_cc3 += offchip_ploss[10];
716 722
  } else if (current < 6) {
717
      total_parasitic_cc1 += offchip_ploss[11];
718
      total_parasitic_cc2 += offchip_ploss[11];
719
      total_parasitic_cc3 += offchip_ploss[11];
723
      offchip_parasitic_cc1 += offchip_ploss[11];
724
      offchip_parasitic_cc2 += offchip_ploss[11];
725
      offchip_parasitic_cc3 += offchip_ploss[11];
720 726
  } else if (current < 6.5) {
721
      total_parasitic_cc1 += offchip_ploss[12];
722
      total_parasitic_cc2 += offchip_ploss[12];
723
      total_parasitic_cc3 += offchip_ploss[12];
727
      offchip_parasitic_cc1 += offchip_ploss[12];
728
      offchip_parasitic_cc2 += offchip_ploss[12];
729
      offchip_parasitic_cc3 += offchip_ploss[12];
724 730
  } else if (current < 7) {
725
      total_parasitic_cc1 += offchip_ploss[13];
726
      total_parasitic_cc2 += offchip_ploss[13];
727
      total_parasitic_cc3 += offchip_ploss[13];
731
      offchip_parasitic_cc1 += offchip_ploss[13];
732
      offchip_parasitic_cc2 += offchip_ploss[13];
733
      offchip_parasitic_cc3 += offchip_ploss[13];
728 734
  } else if (current < 7.5) {
729
      total_parasitic_cc1 += offchip_ploss[14];
730
      total_parasitic_cc2 += offchip_ploss[14];
731
      total_parasitic_cc3 += offchip_ploss[14];
735
      offchip_parasitic_cc1 += offchip_ploss[14];
736
      offchip_parasitic_cc2 += offchip_ploss[14];
737
      offchip_parasitic_cc3 += offchip_ploss[14];
732 738
  } else if (current < 8) {
733
      total_parasitic_cc1 += offchip_ploss[15];
734
      total_parasitic_cc2 += offchip_ploss[15];
735
      total_parasitic_cc3 += offchip_ploss[15];
739
      offchip_parasitic_cc1 += offchip_ploss[15];
740
      offchip_parasitic_cc2 += offchip_ploss[15];
741
      offchip_parasitic_cc3 += offchip_ploss[15];
736 742
  } else if (current < 8.5) {
737
      total_parasitic_cc1 += offchip_ploss[16];
738
      total_parasitic_cc2 += offchip_ploss[16];
739
      total_parasitic_cc3 += offchip_ploss[16];
743
      offchip_parasitic_cc1 += offchip_ploss[16];
744
      offchip_parasitic_cc2 += offchip_ploss[16];
745
      offchip_parasitic_cc3 += offchip_ploss[16];
740 746
  } else if (current < 9) {
741
      total_parasitic_cc1 += offchip_ploss[17];
742
      total_parasitic_cc2 += offchip_ploss[17];
743
      total_parasitic_cc3 += offchip_ploss[17];
747
      offchip_parasitic_cc1 += offchip_ploss[17];
748
      offchip_parasitic_cc2 += offchip_ploss[17];
749
      offchip_parasitic_cc3 += offchip_ploss[17];
744 750
  } else if (current < 9.5) {
745
      total_parasitic_cc1 += offchip_ploss[18];
746
      total_parasitic_cc2 += offchip_ploss[18];
747
      total_parasitic_cc3 += offchip_ploss[18];
751
      offchip_parasitic_cc1 += offchip_ploss[18];
752
      offchip_parasitic_cc2 += offchip_ploss[18];
753
      offchip_parasitic_cc3 += offchip_ploss[18];
748 754
  } else if (current < 10) {
749
      total_parasitic_cc1 += offchip_ploss[19];
750
      total_parasitic_cc2 += offchip_ploss[19];
751
      total_parasitic_cc3 += offchip_ploss[19];
755
      offchip_parasitic_cc1 += offchip_ploss[19];
756
      offchip_parasitic_cc2 += offchip_ploss[19];
757
      offchip_parasitic_cc3 += offchip_ploss[19];
752 758
  } else if (current < 10.5) {
753
      total_parasitic_cc1 += offchip_ploss[20];
754
      total_parasitic_cc2 += offchip_ploss[20];
755
      total_parasitic_cc3 += offchip_ploss[20];
759
      offchip_parasitic_cc1 += offchip_ploss[20];
760
      offchip_parasitic_cc2 += offchip_ploss[20];
761
      offchip_parasitic_cc3 += offchip_ploss[20];
756 762
  } else if (current < 11) {
757
      total_parasitic_cc1 += offchip_ploss[21];
758
      total_parasitic_cc2 += offchip_ploss[21];
759
      total_parasitic_cc3 += offchip_ploss[21];
763
      offchip_parasitic_cc1 += offchip_ploss[21];
764
      offchip_parasitic_cc2 += offchip_ploss[21];
765
      offchip_parasitic_cc3 += offchip_ploss[21];
760 766
  } else if (current < 11.5) {
761
      total_parasitic_cc1 += offchip_ploss[22];
762
      total_parasitic_cc2 += offchip_ploss[22];
763
      total_parasitic_cc3 += offchip_ploss[22];
767
      offchip_parasitic_cc1 += offchip_ploss[22];
768
      offchip_parasitic_cc2 += offchip_ploss[22];
769
      offchip_parasitic_cc3 += offchip_ploss[22];
764 770
  } else if (current < 12) {
765
      total_parasitic_cc1 += offchip_ploss[23];
766
      total_parasitic_cc2 += offchip_ploss[23];
767
      total_parasitic_cc3 += offchip_ploss[23];
771
      offchip_parasitic_cc1 += offchip_ploss[23];
772
      offchip_parasitic_cc2 += offchip_ploss[23];
773
      offchip_parasitic_cc3 += offchip_ploss[23];
768 774
  } else if (current < 12.5) {
769
      total_parasitic_cc1 += offchip_ploss[24];
770
      total_parasitic_cc2 += offchip_ploss[24];
771
      total_parasitic_cc3 += offchip_ploss[24];
775
      offchip_parasitic_cc1 += offchip_ploss[24];
776
      offchip_parasitic_cc2 += offchip_ploss[24];
777
      offchip_parasitic_cc3 += offchip_ploss[24];
772 778
  } else if (current < 13) {
773
      total_parasitic_cc1 += offchip_ploss[25];
774
      total_parasitic_cc2 += offchip_ploss[25];
775
      total_parasitic_cc3 += offchip_ploss[25];
779
      offchip_parasitic_cc1 += offchip_ploss[25];
780
      offchip_parasitic_cc2 += offchip_ploss[25];
781
      offchip_parasitic_cc3 += offchip_ploss[25];
776 782
  } else {
777
      total_parasitic_cc1 += offchip_ploss[26];
778
      total_parasitic_cc2 += offchip_ploss[26];
779
      total_parasitic_cc3 += offchip_ploss[26];
783
      offchip_parasitic_cc1 += offchip_ploss[26];
784
      offchip_parasitic_cc2 += offchip_ploss[26];
785
      offchip_parasitic_cc3 += offchip_ploss[26];
780 786
  }
781 787

  
782
  total_parasitic_cc1 += pow(current, 2) * PARASITIC_OHM;
783
  total_parasitic_cc2 += pow(current, 2) * PARASITIC_OHM;
784
  total_parasitic_cc3 += pow(current, 2) * PARASITIC_OHM;
788
  offchip_parasitic_cc1 += pow(current, 2) * PARASITIC_OHM;
789
  offchip_parasitic_cc2 += pow(current, 2) * PARASITIC_OHM;
790
  offchip_parasitic_cc3 += pow(current, 2) * PARASITIC_OHM;
785 791

  
786 792
  // Onchip regulator paraisitc loss
787 793
  if (speed_grade == 0) {
788
      total_parasitic_cc1 += ONCHIP_VREG_LOSS_LOW;
789
      total_parasitic_cc2 += ONCHIP_VREG_LOSS_LOW;
790
      total_parasitic_cc3 += ONCHIP_VREG_LOSS_LOW;
794
      onchip_parasitic_cc1 += ONCHIP_VREG_LOSS_LOW;
795
      onchip_parasitic_cc2 += ONCHIP_VREG_LOSS_LOW;
796
      onchip_parasitic_cc3 += ONCHIP_VREG_LOSS_LOW;
791 797
  } else {
792
      total_parasitic_cc1 += ONCHIP_VREG_LOSS_HIGH;
793
      total_parasitic_cc2 += ONCHIP_VREG_LOSS_HIGH;
794
      total_parasitic_cc3 += ONCHIP_VREG_LOSS_HIGH;
798
      onchip_parasitic_cc1 += ONCHIP_VREG_LOSS_HIGH;
799
      onchip_parasitic_cc2 += ONCHIP_VREG_LOSS_HIGH;
800
      onchip_parasitic_cc3 += ONCHIP_VREG_LOSS_HIGH;
795 801
  }
802
    
803
  total_parasitic_cc1 += onchip_parasitic_cc1 + offchip_parasitic_cc1;
804
  total_parasitic_cc2 += onchip_parasitic_cc2 + offchip_parasitic_cc2;
805
  total_parasitic_cc3 += onchip_parasitic_cc3 + offchip_parasitic_cc3;
796 806

  
797 807
  max_cycle_power_cc1 = MAX(max_cycle_power_cc1,current_total_cycle_power_cc1);
798 808
  max_cycle_power_cc2 = MAX(max_cycle_power_cc2,current_total_cycle_power_cc2);
......
1227 1237

  
1228 1238
  stat_reg_double(sdb, "max_cycle_power_cc3", "maximum cycle power usage of cc3", &max_cycle_power_cc3, 0, NULL);
1229 1239

  
1230
  stat_reg_double(sdb, "parasitic_power_cc1", "parasitic power cc1", &total_parasitic_cc1, 0, NULL);
1231
  stat_reg_double(sdb, "parasitic_power_cc2", "parasitic power cc2", &total_parasitic_cc2, 0, NULL);
1232
  stat_reg_double(sdb, "parasitic_power_cc3", "parasitic power cc3", &total_parasitic_cc3, 0, NULL);
1240
  stat_reg_double(sdb, "parasitic_power_cc3", "total parasitic power cc3", &total_parasitic_cc3, 0, NULL);
1241
  stat_reg_double(sdb, "onchip parasitic_power_cc3", "onchip parasitic power cc3", &onchip_parasitic_cc3, 0, NULL);
1242
  stat_reg_double(sdb, "offchip parasitic_power_cc3", "offchip parasitic power cc3", &offchip_parasitic_cc3, 0, NULL);
1233 1243
  stat_reg_double(sdb, "min amperage", "min amperage", &min_amp, 0, NULL);
1234 1244
  stat_reg_double(sdb, "max amperage", "max amperage", &max_amp, 0, NULL);
1235 1245
  stat_reg_double(sdb, "slow_cycles", "slow cycles", &slow_cycles, 0, NULL);

Also available in: Unified diff