node->avg_bw = 0;
        node->peak_bw = 0;
 
+       if (p->pre_aggregate)
+               p->pre_aggregate(node);
+
        hlist_for_each_entry(r, &node->req_list, req_node)
                p->aggregate(node, r->tag, r->avg_bw, r->peak_bw,
                             &node->avg_bw, &node->peak_bw);
 
  * @nodes: internal list of the interconnect provider nodes
  * @set: pointer to device specific set operation function
  * @aggregate: pointer to device specific aggregate operation function
+ * @pre_aggregate: pointer to device specific function that is called
+ *                before the aggregation begins (optional)
  * @xlate: provider-specific callback for mapping nodes from phandle arguments
  * @dev: the device this interconnect provider belongs to
  * @users: count of active users
        int (*set)(struct icc_node *src, struct icc_node *dst);
        int (*aggregate)(struct icc_node *node, u32 tag, u32 avg_bw,
                         u32 peak_bw, u32 *agg_avg, u32 *agg_peak);
+       void (*pre_aggregate)(struct icc_node *node);
        struct icc_node* (*xlate)(struct of_phandle_args *spec, void *data);
        struct device           *dev;
        int                     users;