linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexey Klimov <alexey.klimov@arm.com>
To: Prashanth Prakash <pprakash@codeaurora.org>
Cc: linux-acpi@vger.kernel.org, rjw@rjwysocki.net, hotran@apm.com,
	cov@codeaurora.org
Subject: Re: [PATCH 4/5] ACPI/CPPC: set a non-zero value for transition_latency
Date: Wed, 20 Jul 2016 16:51:18 +0100	[thread overview]
Message-ID: <20160720155117.GA6572@arm.com> (raw)
In-Reply-To: <1467309758-26536-5-git-send-email-pprakash@codeaurora.org>

Hi Prashanth,

On Thu, Jun 30, 2016 at 12:02:37PM -0600, Prashanth Prakash wrote:
> Compute the expected transition latency for frequency transitions
> using the values from the PCCT tables when the desired perf
> register is in PCC.
> 
> Signed-off-by: Prashanth Prakash <pprakash@codeaurora.org>
> ---
>  drivers/acpi/cppc_acpi.c       | 47 ++++++++++++++++++++++++++++++++++++++++--
>  drivers/cpufreq/cppc_cpufreq.c |  1 +
>  include/acpi/cppc_acpi.h       |  1 +
>  3 files changed, 47 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
> index 8dee6d5..7844e4c 100644
> --- a/drivers/acpi/cppc_acpi.c
> +++ b/drivers/acpi/cppc_acpi.c
> @@ -85,7 +85,7 @@ static void __iomem *pcc_comm_addr;
>  static int pcc_subspace_idx = -1;
>  static bool pcc_channel_acquired;
>  static ktime_t deadline;
> -static unsigned int pcc_mpar, pcc_mrtt;
> +static unsigned int pcc_mpar, pcc_mrtt, pcc_nominal;
>  
>  /* pcc mapped address + header size + offset within PCC subspace */
>  #define GET_PCC_VADDR(offs) (pcc_comm_addr + 0x8 + (offs))
> @@ -462,7 +462,6 @@ static int register_pcc_channel(int pcc_subspace_idx)
>  			return -ENODEV;
>  		}
>  
> -
>  		/*
>  		 * cppc_ss->latency is just a Nominal value. In reality
>  		 * the remote processor could be much slower to reply.
> @@ -472,6 +471,7 @@ static int register_pcc_channel(int pcc_subspace_idx)
>  		deadline = ns_to_ktime(usecs_lat * NSEC_PER_USEC);
>  		pcc_mrtt = cppc_ss->min_turnaround_time;
>  		pcc_mpar = cppc_ss->max_access_rate;
> +		pcc_nominal = cppc_ss->latency;
>  
>  		pcc_comm_addr = acpi_os_ioremap(cppc_ss->base_address, cppc_ss->length);
>  		if (!pcc_comm_addr) {
> @@ -1034,3 +1034,46 @@ int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls)
>  	return ret;
>  }
>  EXPORT_SYMBOL_GPL(cppc_set_perf);
> +
> +/**
> + * cppc_get_transition_latency - returns frequency transition latency in ns
> + *
> + * ACPI CPPC does not explicitly specifiy how a platform can specify the
> + * transition latency for perfromance change requests. The closest we have
> + * is the timing information from the PCCT tables which provides the info
> + * on the number and frequency of PCC commands the platform can handle.
> + */
> +unsigned int cppc_get_transition_latency(int cpu_num)
> +{
> +	/*
> +	 * Expected transition latency is based on the PCCT timing values
> +	 * Below are definition from ACPI spec:
> +	 * pcc_nominal- Expected latency to process a command, in microseconds
> +	 * pcc_mpar   - The maximum number of periodic requests that the subspace
> +	 *              channel can support, reported in commands per minute. 0
> +	 *              indicates no limitation.
> +	 * pcc_mrtt   - The minimum amount of time that OSPM must wait after the
> +	 *              completion of a command before issuing the next command,
> +	 *              in microseconds.
> +	 */
> +	unsigned int latency_ns = 0;
> +	struct cpc_desc *cpc_desc;
> +	struct cpc_register_resource *desired_reg;
> +
> +	cpc_desc = per_cpu(cpc_desc_ptr, cpu_num);
> +	if (!cpc_desc)
> +		return CPUFREQ_ETERNAL;
> +
> +	desired_reg = &cpc_desc->cpc_regs[DESIRED_PERF];
> +	if (!CPC_IN_PCC(desired_reg))
> +		return CPUFREQ_ETERNAL;
> +
> +	if (pcc_mpar)
> +		latency_ns = 60 * (1000 * 1000 * 1000 / pcc_mpar);
> +
> +	latency_ns = max(latency_ns, pcc_nominal * 1000);
> +	latency_ns = max(latency_ns, pcc_mrtt * 1000);

How transition latency is used?
If it is used in the sense of "wait this amount of time before sending next request"
or this behaviour is inherited because of using this latency as a sample time,
then I would say it should be a sum of pcc_nominal and pcc_mrtt here.

Best regards,
Alexey

  reply	other threads:[~2016-07-20 15:51 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-30 18:02 [PATCH 0/5] CPPC enhancements Prashanth Prakash
2016-06-30 18:02 ` [PATCH 1/5] ACPI/CPPC: restructure read/writes for efficient sys mapped reg ops Prashanth Prakash
2016-07-14 23:54   ` Hoan Tran
2016-07-15 20:26     ` Prakash, Prashanth
2016-06-30 18:02 ` [PATCH 2/5] ACPI/CPPC: acquire pcc_lock only while accessing PCC subspace Prashanth Prakash
2016-06-30 18:02 ` [PATCH 3/5] ACPI/CPPC: support for batching CPPC requests Prashanth Prakash
2016-06-30 18:02 ` [PATCH 4/5] ACPI/CPPC: set a non-zero value for transition_latency Prashanth Prakash
2016-07-20 15:51   ` Alexey Klimov [this message]
2016-07-20 23:44     ` Prakash, Prashanth
2016-06-30 18:02 ` [PATCH 5/5] ACPI/CPPC: add sysfs support to compute delivered performance Prashanth Prakash
2016-07-14 13:25   ` Alexey Klimov
2016-07-14 15:44     ` Prakash, Prashanth

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=20160720155117.GA6572@arm.com \
    --to=alexey.klimov@arm.com \
    --cc=cov@codeaurora.org \
    --cc=hotran@apm.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=pprakash@codeaurora.org \
    --cc=rjw@rjwysocki.net \
    /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;
as well as URLs for NNTP newsgroup(s).