lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 6 May 2015 15:57:20 +0200
From:	Thierry Reding <thierry.reding@...il.com>
To:	Rhyland Klein <rklein@...dia.com>
Cc:	Benson Leung <bleung@...omium.org>,
	Peter De Schrijver <pdeschrijver@...dia.com>,
	Mike Turquette <mturquette@...aro.org>,
	Stephen Warren <swarren@...dotorg.org>,
	Stephen Boyd <sboyd@...eaurora.org>,
	Alexandre Courbot <gnurou@...il.com>,
	linux-clk@...r.kernel.org, linux-tegra@...r.kernel.org,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v4 08/20] clk: tegra: pll: Add logic for handling SDM data

On Tue, May 05, 2015 at 03:16:08PM -0400, Rhyland Klein wrote:
> On 5/4/2015 7:01 PM, Benson Leung wrote:
> > On Mon, May 4, 2015 at 9:37 AM, Rhyland Klein <rklein@...dia.com> wrote:
> >> @@ -495,6 +505,28 @@ static int _calc_rate(struct clk_hw *hw, struct tegra_clk_pll_freq_table *cfg,
> >>         return 0;
> >>  }
> >>
> >> +static void clk_pll_set_sdm_data(struct clk_hw *hw,
> >> +                                struct tegra_clk_pll_freq_table *cfg)
> >> +{
> >> +       struct tegra_clk_pll *pll = to_clk_pll(hw);
> >> +       u32 val;
> >> +
> >> +       if (!pll->params->sdm_din_reg)
> >> +               return;
> >> +
> >> +       if (cfg->sdm_data) {
> >> +               val = pll_readl_sdm_din(pll) & (~sdm_din_mask(pll));
> >> +               val |= sdin_data_to_din(cfg->sdm_data) & sdm_din_mask(pll);
> >> +               pll_writel_sdm_din(val, pll);
> >> +       }
> >> +
> >> +       val = pll_readl_sdm_ctrl(pll);
> >> +       if (!cfg->sdm_data != !(val & pll->params->sdm_ctrl_en_mask)) {
> > 
> > You can use sdm_en_mask(pll) here.
> > 
> > I'm not super clear about what you're trying to accomplish here with
> > !cfg->sdm_data != !(val & mask).
> > Are you just checking if the masked value is different from sdm_data,
> > but accounting for the integer widths being different (u16 vs u32)?
> 
> So I got clarification from the downstream author to be sure, and this
> is the answer to what this is checking:
> 
> (<Configuration has non zero  SDM_DATA>  AND <sdm control is disabled>)
> OR
> (<Configuration has zero  SDM_DATA>  AND <sdm control is enabled>)
> 
> So the check is correct, just a complicated way of expressing it.

Can it be rewritten to be less complicated? I hate it when I have to
look at code for several seconds and still not understand what it's
doing. Why not something that is closer to the pseudo code you gave:

	bool enabled = (val & pll->params->sdm_ctrl_en_mask) != 0;

	if ((enabled && cfg->sdm_data == 0) || (!enabled && cfg->sdm_data != 0))

? Also I think this could use some could comments explaining what's
going on. Perhaps this could be simplified even further:

	if (cfg->sdm_data == 0 && enabled)
		val &= ~pll->params->sdm_ctrl_en_mask;

	if (cfg->sdm_data != 0 && !enabled)
		val |= pll->params->sdm_ctrl_en_mask;

	pll_writel_sdm_ctrl(val, pll);

Now that I have a /much/ easier time reading and understanding. That may
not even require comments because it's pretty plain what's going on. But
there may be some advantage in adding comments about SDM in general. The
comment could be something like what you have in the commit message, so
that people don't have to go find the commit that added the code to find
out what this is doing.

Thierry

Content of type "application/pgp-signature" skipped

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ