Commit df386375 authored by David S. Miller's avatar David S. Miller

sparc64: Use M7 PMC write on all chips T4 and onward.

They both work equally well, and the M7 implementation is
simpler and cheaper (less register writes).

With help from David Ahern.
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 41137566
...@@ -737,25 +737,9 @@ static void sparc_vt_write_pmc(int idx, u64 val) ...@@ -737,25 +737,9 @@ static void sparc_vt_write_pmc(int idx, u64 val)
{ {
u64 pcr; u64 pcr;
/* There seems to be an internal latch on the overflow event
* on SPARC-T4 that prevents it from triggering unless you
* update the PIC exactly as we do here. The requirement
* seems to be that you have to turn off event counting in the
* PCR around the PIC update.
*
* For example, after the following sequence:
*
* 1) set PIC to -1
* 2) enable event counting and overflow reporting in PCR
* 3) overflow triggers, softint 15 handler invoked
* 4) clear OV bit in PCR
* 5) write PIC to -1
*
* a subsequent overflow event will not trigger. This
* sequence works on SPARC-T3 and previous chips.
*/
pcr = pcr_ops->read_pcr(idx); pcr = pcr_ops->read_pcr(idx);
pcr_ops->write_pcr(idx, PCR_N4_PICNPT); /* ensure ov and ntc are reset */
pcr &= ~(PCR_N4_OV | PCR_N4_NTC);
pcr_ops->write_pic(idx, val & 0xffffffff); pcr_ops->write_pic(idx, val & 0xffffffff);
...@@ -792,25 +776,12 @@ static const struct sparc_pmu niagara4_pmu = { ...@@ -792,25 +776,12 @@ static const struct sparc_pmu niagara4_pmu = {
.num_pic_regs = 4, .num_pic_regs = 4,
}; };
static void sparc_m7_write_pmc(int idx, u64 val)
{
u64 pcr;
pcr = pcr_ops->read_pcr(idx);
/* ensure ov and ntc are reset */
pcr &= ~(PCR_N4_OV | PCR_N4_NTC);
pcr_ops->write_pic(idx, val & 0xffffffff);
pcr_ops->write_pcr(idx, pcr);
}
static const struct sparc_pmu sparc_m7_pmu = { static const struct sparc_pmu sparc_m7_pmu = {
.event_map = niagara4_event_map, .event_map = niagara4_event_map,
.cache_map = &niagara4_cache_map, .cache_map = &niagara4_cache_map,
.max_events = ARRAY_SIZE(niagara4_perfmon_event_map), .max_events = ARRAY_SIZE(niagara4_perfmon_event_map),
.read_pmc = sparc_vt_read_pmc, .read_pmc = sparc_vt_read_pmc,
.write_pmc = sparc_m7_write_pmc, .write_pmc = sparc_vt_write_pmc,
.upper_shift = 5, .upper_shift = 5,
.lower_shift = 5, .lower_shift = 5,
.event_mask = 0x7ff, .event_mask = 0x7ff,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment