public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv3 13/14] arm64: pmuv3: handle !PMUv3 when probing
Date: Thu, 13 Apr 2017 16:36:36 +0100	[thread overview]
Message-ID: <20170413153636.GG24027@leverpostej> (raw)
In-Reply-To: <CA+7sy7AA+SX_YUNAgCL5tyBXGW+rUidaApN7D2g3O0maRNcKSw@mail.gmail.com>

Hi,

On Thu, Apr 13, 2017 at 07:36:45PM +0530, Jayachandran C. wrote:
> On Tue, Apr 11, 2017 at 2:09 PM, Mark Rutland <mark.rutland@arm.com> wrote:
> > When probing via ACPI, we won't know up-front whether a CPU has a PMUv3
> > compatible PMU. Thus we need to consult ID registers during probe time.
> >
> > This patch updates our PMUv3 probing code to test for the presence of
> > PMUv3 functionality before touching an PMUv3-specific registers, and
> > before updating the struct arm_pmu with PMUv3 data.

[..]

> > +       dfr0 = read_sysreg(id_aa64dfr0_el1);
> > +       pmuver = cpuid_feature_extract_unsigned_field(dfr0,
> > +                       ID_AA64DFR0_PMUVER_SHIFT);
> > +       if (pmuver != 1)
> > +               return;
> 
> There is a problem here, the 8.1 spec allows PMUver value 4 for PMUv3
> "Performance Monitors extension System registers implemented, PMUv3,
> with a 16-bit evtCount field, and if EL2 is implemented, the addition
> of the MDCR_EL2.HPMD bit"
>
> On Broadcom Vulcan/Cavium ThunderX2 the value of PMUver is 4 and this
> breaks (even the working DT case if I am not mistaken).

Good point; sorry about this.

Annoyingly, ID_AA64DFR0.PMUVer is a bit weird, and doesn't seem to
strictly follow the rules laid out in ARM DDI 0487B.a, D7.1.4,
"Principles of the ID scheme for fields in ID registers".

Since both 0b0000 and 0b1111 mean that PMUv3 isn't implemented, I don't
know if it should be treated as unsigned with 0xf being special-cased,
or if it should be treated as signed with 0b001 being the minimal
version we expect.

i.e. it's not clear to me if we should do:

	dfr0 = read_sysreg(id_aa64dfr0_el1);
	pmuver = cpuid_feature_extract_unsigned_field(dfr0,
			id_aa64dfr0_pmuver_shift);
	if (pmuver < 1 || pmuver == 0xf)
		return;

... or:

	dfr0 = read_sysreg(id_aa64dfr0_el1);
	pmuver = cpuid_feature_extract_signed_field(dfr0,
			id_aa64dfr0_pmuver_shift);
	if (pmuver < 1)
		return;

I'll try to get that clarified ASAP.

Thanks,
Mark.

  reply	other threads:[~2017-04-13 15:36 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-11  8:39 [PATCHv3 00/14] arm_pmu: ACPI support Mark Rutland
2017-04-11  8:39 ` [PATCHv3 01/14] drivers/perf: arm_pmu: remove pointless PMU disabling Mark Rutland
2017-04-11  8:39 ` [PATCHv3 02/14] drivers/perf: arm_pmu: define armpmu_init_fn Mark Rutland
2017-04-11  8:39 ` [PATCHv3 03/14] drivers/perf: arm_pmu: fold init into alloc Mark Rutland
2017-04-11  8:39 ` [PATCHv3 04/14] drivers/perf: arm_pmu: factor out pmu registration Mark Rutland
2017-04-11  8:39 ` [PATCHv3 05/14] drivers/perf: arm_pmu: simplify cpu_pmu_request_irqs() Mark Rutland
2017-04-11  8:39 ` [PATCHv3 06/14] drivers/perf: arm_pmu: handle no platform_device Mark Rutland
2017-04-11  8:39 ` [PATCHv3 07/14] drivers/perf: arm_pmu: rename irq request/free functions Mark Rutland
2017-04-11  8:39 ` [PATCHv3 08/14] drivers/perf: arm_pmu: split cpu-local irq request/free Mark Rutland
2017-04-18 17:25   ` Geert Uytterhoeven
2017-04-18 18:24     ` Geert Uytterhoeven
2017-04-18 18:33     ` Mark Rutland
2017-04-18 18:57       ` Geert Uytterhoeven
2017-04-20 19:10         ` Mark Rutland
2017-04-11  8:39 ` [PATCHv3 09/14] drivers/perf: arm_pmu: move irq request/free into probe Mark Rutland
2017-04-11  8:39 ` [PATCHv3 10/14] drivers/perf: arm_pmu: split out platform device probe logic Mark Rutland
2017-04-11  8:39 ` [PATCHv3 11/14] arm64: add function to get a cpu's MADT GICC table Mark Rutland
2017-04-11  8:39 ` [PATCHv3 12/14] drivers/perf: arm_pmu: add ACPI framework Mark Rutland
2017-04-11  8:39 ` [PATCHv3 13/14] arm64: pmuv3: handle !PMUv3 when probing Mark Rutland
2017-04-13 14:06   ` Jayachandran C.
2017-04-13 15:36     ` Mark Rutland [this message]
2017-04-11  8:39 ` [PATCHv3 14/14] arm64: pmuv3: use arm_pmu ACPI framework Mark Rutland
2017-04-11 15:11 ` [PATCHv3 00/14] arm_pmu: ACPI support Anurup M
2017-04-11 15:45 ` Will Deacon
2017-04-12  6:48 ` Hanjun Guo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170413153636.GG24027@leverpostej \
    --to=mark.rutland@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox