diff options
author | Vijayakumar <vsubbu@nvidia.com> | 2016-09-16 09:26:22 -0400 |
---|---|---|
committer | Deepak Nibade <dnibade@nvidia.com> | 2016-12-27 04:56:50 -0500 |
commit | c7fbd76e7101b7dedc8c0f04437288d1d6b78adc (patch) | |
tree | 6d1ab41af52a481ddeb148307a69113582569edd /drivers/gpu/nvgpu/clk/clk_domain.c | |
parent | 3c351f5bb2d04c1f70c72f3f2fd758bbb340877c (diff) |
gpu: nvgpu: create function to program coreclk
JIRA DNVGPU-123
now a function can be called with GPC2CLK value
It will take care calculating slave clock values
and calling VF inject to program clock
Made programming of boot clock code to use this
newly created function.
Change-Id: I74de7e9d98e379e94175ed2d9745ce3ab6c70691
Signed-off-by: Vijayakumar <vsubbu@nvidia.com>
Reviewed-on: http://git-master/r/1221976
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-on: http://git-master/r/1235056
Diffstat (limited to 'drivers/gpu/nvgpu/clk/clk_domain.c')
-rw-r--r-- | drivers/gpu/nvgpu/clk/clk_domain.c | 69 |
1 files changed, 52 insertions, 17 deletions
diff --git a/drivers/gpu/nvgpu/clk/clk_domain.c b/drivers/gpu/nvgpu/clk/clk_domain.c index f87530dc..fe3db5d6 100644 --- a/drivers/gpu/nvgpu/clk/clk_domain.c +++ b/drivers/gpu/nvgpu/clk/clk_domain.c | |||
@@ -422,14 +422,14 @@ static u32 clkdomainclkproglink_not_supported(struct gk20a *g, | |||
422 | return -EINVAL; | 422 | return -EINVAL; |
423 | } | 423 | } |
424 | 424 | ||
425 | static u32 clkdomainvfsearch_stub( | 425 | static int clkdomainvfsearch_stub( |
426 | struct gk20a *g, | 426 | struct gk20a *g, |
427 | struct clk_pmupstate *pclk, | 427 | struct clk_pmupstate *pclk, |
428 | struct clk_domain *pdomain, | 428 | struct clk_domain *pdomain, |
429 | u16 *clkmhz, | 429 | u16 *clkmhz, |
430 | u32 *voltuv, | 430 | u32 *voltuv, |
431 | u8 rail | 431 | u8 rail) |
432 | ) | 432 | |
433 | { | 433 | { |
434 | gk20a_dbg_info(""); | 434 | gk20a_dbg_info(""); |
435 | return -EINVAL; | 435 | return -EINVAL; |
@@ -441,8 +441,7 @@ static u32 clkdomaingetfpoints_stub( | |||
441 | struct clk_domain *pdomain, | 441 | struct clk_domain *pdomain, |
442 | u32 *pfpointscount, | 442 | u32 *pfpointscount, |
443 | u16 *pfreqpointsinmhz, | 443 | u16 *pfreqpointsinmhz, |
444 | u8 rail | 444 | u8 rail) |
445 | ) | ||
446 | { | 445 | { |
447 | gk20a_dbg_info(""); | 446 | gk20a_dbg_info(""); |
448 | return -EINVAL; | 447 | return -EINVAL; |
@@ -556,17 +555,47 @@ static u32 clkdomainclkproglink_3x_prog(struct gk20a *g, | |||
556 | return status; | 555 | return status; |
557 | } | 556 | } |
558 | 557 | ||
559 | static u32 clkdomainvfsearch | 558 | static int clkdomaingetslaveclk(struct gk20a *g, |
560 | ( | 559 | struct clk_pmupstate *pclk, |
561 | struct gk20a *g, | 560 | struct clk_domain *pdomain, |
562 | struct clk_pmupstate *pclk, | 561 | u16 *pclkmhz, |
563 | struct clk_domain *pdomain, | 562 | u16 masterclkmhz) |
564 | u16 *pclkmhz, | ||
565 | u32 *pvoltuv, | ||
566 | u8 rail | ||
567 | ) | ||
568 | { | 563 | { |
569 | u32 status = 0; | 564 | int status = 0; |
565 | struct clk_prog *pprog = NULL; | ||
566 | struct clk_prog_1x_master *pprog1xmaster = NULL; | ||
567 | u8 slaveidx; | ||
568 | struct clk_domain_3x_master *p3xmaster; | ||
569 | |||
570 | gk20a_dbg_info(""); | ||
571 | |||
572 | if (pclkmhz == NULL) | ||
573 | return -EINVAL; | ||
574 | |||
575 | if (masterclkmhz == 0) | ||
576 | return -EINVAL; | ||
577 | |||
578 | slaveidx = BOARDOBJ_GET_IDX(pdomain); | ||
579 | p3xmaster = (struct clk_domain_3x_master *) | ||
580 | CLK_CLK_DOMAIN_GET(pclk, | ||
581 | ((struct clk_domain_3x_slave *) | ||
582 | pdomain)->master_idx); | ||
583 | pprog = CLK_CLK_PROG_GET(pclk, p3xmaster->super.clk_prog_idx_first); | ||
584 | pprog1xmaster = (struct clk_prog_1x_master *)pprog; | ||
585 | |||
586 | status = pprog1xmaster->getslaveclk(g, pclk, pprog1xmaster, | ||
587 | slaveidx, pclkmhz, masterclkmhz); | ||
588 | return status; | ||
589 | } | ||
590 | |||
591 | static int clkdomainvfsearch(struct gk20a *g, | ||
592 | struct clk_pmupstate *pclk, | ||
593 | struct clk_domain *pdomain, | ||
594 | u16 *pclkmhz, | ||
595 | u32 *pvoltuv, | ||
596 | u8 rail) | ||
597 | { | ||
598 | int status = 0; | ||
570 | struct clk_domain_3x_master *p3xmaster = | 599 | struct clk_domain_3x_master *p3xmaster = |
571 | (struct clk_domain_3x_master *)pdomain; | 600 | (struct clk_domain_3x_master *)pdomain; |
572 | struct clk_prog *pprog = NULL; | 601 | struct clk_prog *pprog = NULL; |
@@ -580,6 +609,10 @@ static u32 clkdomainvfsearch | |||
580 | u32 bestvoltuv; | 609 | u32 bestvoltuv; |
581 | 610 | ||
582 | gk20a_dbg_info(""); | 611 | gk20a_dbg_info(""); |
612 | |||
613 | if ((pclkmhz == NULL) || (pvoltuv == NULL)) | ||
614 | return -EINVAL; | ||
615 | |||
583 | if ((*pclkmhz != 0) && (*pvoltuv != 0)) | 616 | if ((*pclkmhz != 0) && (*pvoltuv != 0)) |
584 | return -EINVAL; | 617 | return -EINVAL; |
585 | 618 | ||
@@ -595,7 +628,6 @@ static u32 clkdomainvfsearch | |||
595 | ((struct clk_domain_3x_slave *) | 628 | ((struct clk_domain_3x_slave *) |
596 | pdomain)->master_idx); | 629 | pdomain)->master_idx); |
597 | } | 630 | } |
598 | |||
599 | /* Iterate over the set of CLK_PROGs pointed at by this domain.*/ | 631 | /* Iterate over the set of CLK_PROGs pointed at by this domain.*/ |
600 | for (i = p3xmaster->super.clk_prog_idx_first; | 632 | for (i = p3xmaster->super.clk_prog_idx_first; |
601 | i <= p3xmaster->super.clk_prog_idx_last; | 633 | i <= p3xmaster->super.clk_prog_idx_last; |
@@ -625,7 +657,7 @@ static u32 clkdomainvfsearch | |||
625 | } | 657 | } |
626 | } | 658 | } |
627 | } | 659 | } |
628 | /* clk and volt sent as zero to pring vf table */ | 660 | /* clk and volt sent as zero to print vf table */ |
629 | if ((*pclkmhz == 0) && (*pvoltuv == 0)) { | 661 | if ((*pclkmhz == 0) && (*pvoltuv == 0)) { |
630 | status = 0; | 662 | status = 0; |
631 | goto done; | 663 | goto done; |
@@ -836,6 +868,9 @@ static u32 clk_domain_construct_3x_slave(struct gk20a *g, | |||
836 | 868 | ||
837 | pdomain->master_idx = ptmpdomain->master_idx; | 869 | pdomain->master_idx = ptmpdomain->master_idx; |
838 | 870 | ||
871 | pdomain->clkdomainclkgetslaveclk = | ||
872 | clkdomaingetslaveclk; | ||
873 | |||
839 | return status; | 874 | return status; |
840 | } | 875 | } |
841 | 876 | ||