/*
 * ARM JUNO specific energy cost model data. There are no unit requirements for
 * the data. Data can be normalized to any reference point, but the
 * normalization must be consistent. That is, one bogo-joule/watt must be the
 * same quantity for all data, but we don't care what it is.
 */

/* static struct idle_state idle_states_cluster_a53[] = { */
/*        { .power = 56 }, /\* arch_cpu_idle() (active idle) = WFI *\/ */
/*        { .power = 56 }, /\* WFI *\/ */
/*        { .power = 56 }, /\* cpu-sleep-0 *\/ */
/*        { .power = 17 }, /\* cluster-sleep-0 *\/ */
/* }; */

/* static struct idle_state idle_states_cluster_a57[] = { */
/*        { .power = 65 }, /\* arch_cpu_idle() (active idle) = WFI *\/ */
/*        { .power = 65 }, /\* WFI *\/ */
/*        { .power = 65 }, /\* cpu-sleep-0 *\/ */
/*        { .power = 24 }, /\* cluster-sleep-0 *\/ */
/* }; */

/* static struct capacity_state cap_states_cluster_a53[] = { */
/*         /\* Power per cluster *\/ */
/*        { .cap =  235, .power = 26, }, /\*  450 MHz *\/ */
/*        { .cap =  303, .power = 30, }, /\*  575 MHz *\/ */
/*        { .cap =  368, .power = 39, }, /\*  700 MHz *\/ */
/*        { .cap =  406, .power = 47, }, /\*  775 MHz *\/ */
/*        { .cap =  447, .power = 57, }, /\*  850 Mhz *\/ */
/* }; */

/* static struct capacity_state cap_states_cluster_a57[] = { */
/*         /\* Power per cluster *\/ */
/*        { .cap =  417, .power = 24, }, /\*  450 MHz *\/ */
/*        { .cap =  579, .power = 32, }, /\*  625 MHz *\/ */
/*        { .cap =  744, .power = 43, }, /\*  800 MHz *\/ */
/*        { .cap =  883, .power = 49, }, /\*  950 MHz *\/ */
/*        { .cap = 1024, .power = 64, }, /\* 1100 MHz *\/ */
/* }; */

/* static struct sched_group_energy energy_cluster_a53 = { */
/*        .nr_idle_states = ARRAY_SIZE(idle_states_cluster_a53), */
/*        .idle_states    = idle_states_cluster_a53, */
/*        .nr_cap_states  = ARRAY_SIZE(cap_states_cluster_a53), */
/*        .cap_states     = cap_states_cluster_a53, */
/* }; */

/* static struct sched_group_energy energy_cluster_a57 = { */
/*        .nr_idle_states = ARRAY_SIZE(idle_states_cluster_a57), */
/*        .idle_states    = idle_states_cluster_a57, */
/*        .nr_cap_states  = ARRAY_SIZE(cap_states_cluster_a57), */
/*        .cap_states     = cap_states_cluster_a57, */
/* }; */

/* static struct idle_state idle_states_core_a53[] = { */
/*        { .power = 6 }, /\* arch_cpu_idle() (active idle) = WFI *\/ */
/*        { .power = 6 }, /\* WFI *\/ */
/*        { .power = 0 }, /\* cpu-sleep-0 *\/ */
/*        { .power = 0 }, /\* cluster-sleep-0 *\/ */
/* }; */

/* static struct idle_state idle_states_core_a57[] = { */
/*        { .power = 15 }, /\* arch_cpu_idle() (active idle) = WFI *\/ */
/*        { .power = 15 }, /\* WFI *\/ */
/*        { .power = 0  }, /\* cpu-sleep-0 *\/ */
/*        { .power = 0  }, /\* cluster-sleep-0 *\/ */
/* }; */

/* static struct capacity_state cap_states_core_a53[] = { */
/*         /\* Power per cpu *\/ */
/*        { .cap =  235, .power =  33, }, /\*  450 MHz *\/ */
/*        { .cap =  302, .power =  46, }, /\*  575 MHz *\/ */
/*        { .cap =  368, .power =  61, }, /\*  700 MHz *\/ */
/*        { .cap =  406, .power =  76, }, /\*  775 MHz *\/ */
/*        { .cap =  447, .power =  93, }, /\*  850 Mhz *\/ */
/* }; */

/* static struct capacity_state cap_states_core_a57[] = { */
/*         /\* Power per cpu *\/ */
/*        { .cap =  417, .power = 168, }, /\*  450 MHz *\/ */
/*        { .cap =  579, .power = 251, }, /\*  625 MHz *\/ */
/*        { .cap =  744, .power = 359, }, /\*  800 MHz *\/ */
/*        { .cap =  883, .power = 479, }, /\*  950 MHz *\/ */
/*        { .cap = 1024, .power = 616, }, /\* 1100 MHz *\/ */
/* }; */

energy-costs {
	CPU_COST_A57: core-cost0 {
		busy-cost-data = <
			417   168
			579   251
			744   359
			883   479
		       1023   616
		>;
		idle-cost-data = <
		      15
		      15
		       0
		       0
		>;
	};
	CPU_COST_A53: core-cost1 {
		busy-cost-data = <
			235    33
			302    46
			368    61
			406    76
			447    93
		>;
		idle-cost-data = <
		      6
		      6
		      0
		      0
		>;
	};
	CLUSTER_COST_A57: cluster-cost0 {
		busy-cost-data = <
			417    24
			579    32
			744    43
			883    49
		       1024    64
		>;
		idle-cost-data = <
			 65
			 65
			 65
			 24
		>;
	};
	CLUSTER_COST_A53: cluster-cost1 {
		busy-cost-data = <
			235    26
			303    30
			368    39
			406    47
			447    57
		>;
		idle-cost-data = <
			56
			56
			56
			17
		>;
	};
};
