All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Stein <alexander.stein@ew.tq-group.com>
To: Maxime Ripard <maxime@cerno.tech>
Cc: Tony Lindgren <tony@atomide.com>,
	linux-arm-kernel@lists.infradead.org,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Mike Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@kernel.org>,
	linux-clk@vger.kernel.org,
	Dmitry Osipenko <dmitry.osipenko@collabora.com>,
	'Linux Samsung SOC' <linux-samsung-soc@vger.kernel.org>,
	linux-amlogic@lists.infradead.org, linux-omap@vger.kernel.org
Subject: Re: (EXT) Re: (EXT) Re: (EXT) Re: (EXT) Re: [PATCH v2 3/3] clk: Drop the rate range on clk_put
Date: Fri, 01 Apr 2022 15:49:04 +0200	[thread overview]
Message-ID: <14273141.O9o76ZdvQC@steina-w> (raw)
In-Reply-To: <20220401133409.wtilnpgp4fqlrrew@houat>

Am Freitag, 1. April 2022, 15:34:09 CEST schrieb Maxime Ripard:
> * PGP Signed by an unknown key
> 
> On Fri, Apr 01, 2022 at 03:07:10PM +0200, Alexander Stein wrote:
> > > Does it also happen if you only apply the patch I had above, and not all
> > > the debugging?
> > 
> > Yes, these are the last lines I see:
> > ---
> > [    1.236306] mmcblk0rpmb: mmc0:0001 DA6016 4.00 MiB, chardev (235:0)
> > [    1.241031] i2c i2c-1: IMX I2C adapter registered
> > [    1.251771] i2c i2c-3: IMX I2C adapter registered
> > [    1.256957] i2c i2c-5: IMX I2C adapter registered
> 
> Could you add on top of next (so dropping everything we did so far)
> 
> ---- >8 -----
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index 91f863b7a824..552b1e16a82d 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -540,6 +540,8 @@ static bool mux_is_better_rate(unsigned long rate,
> unsigned long now, if (flags & CLK_MUX_ROUND_CLOSEST)
>  		return abs(now - rate) < abs(best - rate);
> 
> +	pr_crit("%s +%d rate %lu now %lu best %lu\n", __func__, __LINE__, 
rate,
> now, best); +
>  	return now <= rate && now > best;
>  }
> 
> @@ -552,6 +554,12 @@ int clk_mux_determine_rate_flags(struct clk_hw *hw,
>  	unsigned long best = 0;
>  	struct clk_rate_request parent_req = *req;
> 
> +	pr_crit("%s: %s: requested rate %lu\n", __func__, core->name, req-
>rate);
> +
> +	parent = core->parent;
> +	pr_crit("%s: %s: current parent %s\n", __func__, core->name, parent 
?
> parent->name : "(null)"); +	pr_crit("%s: %s: current parent rate %lu\n",
> __func__, core->name, clk_core_get_rate_nolock(parent)); +
>  	/* if NO_REPARENT flag set, pass through to current parent */
>  	if (core->flags & CLK_SET_RATE_NO_REPARENT) {
>  		parent = core->parent;
> @@ -578,24 +586,37 @@ int clk_mux_determine_rate_flags(struct clk_hw *hw,
>  		if (!parent)
>  			continue;
> 
> +		pr_crit("%s: Trying parent %s (%lu)\n",
> +			__func__,
> +			parent->name,
> +			clk_core_get_rate_nolock(parent));
> +
>  		if (core->flags & CLK_SET_RATE_PARENT) {
> +			pr_crit("%s +%d\n", __func__, __LINE__);
>  			parent_req = *req;
>  			ret = __clk_determine_rate(parent->hw, 
&parent_req);
> +			pr_crit("%s +%d %d\n", __func__, __LINE__, 
ret);
>  			if (ret)
>  				continue;
>  		} else {
> +			pr_crit("%s +%d\n", __func__, __LINE__);
>  			parent_req.rate = 
clk_core_get_rate_nolock(parent);
>  		}
> 
> +		pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  		if (mux_is_better_rate(req->rate, parent_req.rate,
>  				       best, flags)) {
> +			pr_crit("%s +%d\n", __func__, __LINE__);
>  			best_parent = parent;
>  			best = parent_req.rate;
>  		}
>  	}
> 
> -	if (!best_parent)
> +	if (!best_parent) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return -EINVAL;
> +	}
> 
>  out:
>  	if (best_parent)
> @@ -603,6 +624,11 @@ int clk_mux_determine_rate_flags(struct clk_hw *hw,
>  	req->best_parent_rate = best;
>  	req->rate = best;
> 
> +	pr_crit("%s: Best parent %s (%lu)\n",
> +		__func__,
> +		best_parent->name,
> +		best);
> +
>  	return 0;
>  }
>  EXPORT_SYMBOL_GPL(clk_mux_determine_rate_flags);
> @@ -1345,11 +1371,15 @@ static int clk_core_determine_round_nolock(struct
> clk_core *core,
> 
>  	lockdep_assert_held(&prepare_lock);
> 
> +	pr_crit("%s +%d %s\n", __func__, __LINE__, core->name);
>  	if (!core)
>  		return 0;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
>  	req->rate = clamp(req->rate, req->min_rate, req->max_rate);
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	/*
>  	 * At this point, core protection will be disabled
>  	 * - if the provider is not protected at all
> @@ -1357,10 +1387,13 @@ static int clk_core_determine_round_nolock(struct
> clk_core *core, *   over the provider
>  	 */
>  	if (clk_core_rate_is_protected(core)) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		req->rate = core->rate;
>  	} else if (core->ops->determine_rate) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return core->ops->determine_rate(core->hw, req);
>  	} else if (core->ops->round_rate) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		rate = core->ops->round_rate(core->hw, req->rate,
>  					     &req-
>best_parent_rate);
>  		if (rate < 0)
> @@ -1368,6 +1401,7 @@ static int clk_core_determine_round_nolock(struct
> clk_core *core,
> 
>  		req->rate = rate;
>  	} else {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return -EINVAL;
>  	}
> 
> @@ -1402,17 +1436,26 @@ static int clk_core_round_rate_nolock(struct
> clk_core *core, {
>  	lockdep_assert_held(&prepare_lock);
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	if (!core) {
>  		req->rate = 0;
>  		return 0;
>  	}
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	clk_core_init_rate_req(core, req);
> 
> -	if (clk_core_can_round(core))
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
> +	if (clk_core_can_round(core)) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return clk_core_determine_round_nolock(core, req);
> -	else if (core->flags & CLK_SET_RATE_PARENT)
> +	} else if (core->flags & CLK_SET_RATE_PARENT) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return clk_core_round_rate_nolock(core->parent, req);
> +	}
> 
>  	req->rate = core->rate;
>  	return 0;
> @@ -2201,21 +2244,31 @@ static int clk_core_set_rate_nolock(struct clk_core
> *core, if (!core)
>  		return 0;
> 
> +	pr_crit("%s: %s: rate %lu\n", __func__, core->name, req_rate);
> +
>  	rate = clk_core_req_round_rate_nolock(core, req_rate);
> 
> +	pr_crit("%s: %s: rounded rate %lu\n", __func__, core->name, 
req_rate);
> +
>  	/* bail early if nothing to do */
>  	if (rate == clk_core_get_rate_nolock(core))
>  		return 0;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	/* fail on a direct rate set of a protected provider */
>  	if (clk_core_rate_is_protected(core))
>  		return -EBUSY;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	/* calculate new rates and get the topmost changed clock */
>  	top = clk_calc_new_rates(core, req_rate);
>  	if (!top)
>  		return -EINVAL;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	ret = clk_pm_runtime_get(core);
>  	if (ret)
>  		return ret;
> @@ -2367,6 +2420,16 @@ static int clk_set_rate_range_nolock(struct clk *clk,
> goto out;
>  	}
> 
> +	pr_crit("%s: %s: orphan ? %c\n",
> +		__func__,
> +		clk->core->name,
> +		clk->core->orphan ? 'y' : 'n');
> +
> +	pr_crit("%s: %s: core req rate %lu\n",
> +		__func__,
> +		clk->core->name,
> +		clk->core->req_rate);
> +
>  	/*
>  	 * Since the boundaries have been changed, let's give the
>  	 * opportunity to the provider to adjust the clock rate based on
> @@ -2384,7 +2447,11 @@ static int clk_set_rate_range_nolock(struct clk *clk,
> * - the determine_rate() callback does not really check for
>  	 *   this corner case when determining the rate
>  	 */
> +
>  	rate = clamp(clk->core->req_rate, min, max);
> +
> +	pr_crit("%s: %s: clamped rate %lu\n", __func__, clk->core->name, 
rate);
> +
>  	ret = clk_core_set_rate_nolock(clk->core, rate);
>  	if (ret) {
>  		/* rollback the changes */
> @@ -2599,6 +2666,8 @@ static int clk_core_set_parent_nolock(struct clk_core
> *core, } else {
>  		__clk_recalc_rates(core, POST_RATE_CHANGE);
>  		__clk_recalc_accuracies(core);
> +
> +		core->req_rate = core->rate;
>  	}
> 
>  runtime_put:
> ---- >8 -----

Sure, here we go
---
[    0.630873] Asymmetric key parser 'x509' registered                                                                               
[    0.635802] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 
243)                                                  
[    0.643210] io scheduler mq-deadline registered                                                                                   
[    0.647758] io scheduler kyber registered                                                                                         
[    0.658708] clk_set_rate_range_nolock: arm_a53_div: orphan ? n                                                                    
[    0.661717] clk_set_rate_range_nolock: arm_a53_div: core req rate 800000000                                                       
[    0.668724] clk_set_rate_range_nolock: arm_a53_div: clamped rate 800000000                                                        
[    0.675633] clk_core_set_rate_nolock: arm_a53_div: rate 800000000                                                                 
[    0.681761] clk_core_round_rate_nolock +1439                                                                                      
[    0.686048] clk_core_round_rate_nolock +1446                                                                                      
[    0.690333] clk_core_round_rate_nolock +1450                                                                                      
[    0.694619] clk_core_round_rate_nolock +1453                                                                                      
[    0.698908] clk_core_determine_round_nolock +1374 arm_a53_div                                                                     
[    0.704681] clk_core_determine_round_nolock +1378                                                                                 
[    0.709408] clk_core_determine_round_nolock +1381                                                                                 
[    0.714133] clk_core_determine_round_nolock +1393                                                                                 
[    0.718860] clk_core_set_rate_nolock: arm_a53_div: rounded rate 800000000                                                         
[    0.725684] clk_set_rate_range_nolock: sys_pll1_800m: orphan ? n                                                                  
[    0.731719] clk_set_rate_range_nolock: sys_pll1_800m: core req rate 
800000000                                                     
[    0.738894] clk_set_rate_range_nolock: sys_pll1_800m: clamped rate 
800000000                                                      
[    0.745983] clk_core_set_rate_nolock: sys_pll1_800m: rate 800000000                                                               
[    0.752281] clk_core_round_rate_nolock +1439                                                                                      
[    0.756569] clk_core_round_rate_nolock +1446                                                                                      
[    0.760862] clk_core_round_rate_nolock +1450                                                                                      
[    0.765152] clk_core_round_rate_nolock +1453                                                                                      
[    0.769435] clk_core_determine_round_nolock +1374 sys_pll1_800m                                                                   
[    0.775385] clk_core_determine_round_nolock +1378                                                                                 
[    0.780114] clk_core_determine_round_nolock +1381                                                                                 
[    0.784833] clk_core_determine_round_nolock +1396                                                                                 
[    0.789559] clk_core_round_rate_nolock +1439                                                                                      
[    0.793844] clk_core_round_rate_nolock +1446                                                                                      
[    0.798133] clk_core_round_rate_nolock +1450                                                                                      
[    0.802423] clk_core_round_rate_nolock +1456                                                                                      
[    0.806708] clk_core_round_rate_nolock +1439                                                                                      
[    0.810994] clk_core_round_rate_nolock +1446                                                                                      
[    0.815284] clk_core_round_rate_nolock +1450                                                                                      
[    0.819570] clk_core_round_rate_nolock +1453                                                                                      
[    0.823856] clk_core_determine_round_nolock +1374 sys_pll1_bypass                                                                 
[    0.829981] clk_core_determine_round_nolock +1378                                                                                 
[    0.834706] clk_core_determine_round_nolock +1381                                                                                 
[    0.839431] clk_core_determine_round_nolock +1393                                                                                 
[    0.844159] clk_mux_determine_rate_flags: sys_pll1_bypass: requested rate 
800000000                                               
[    0.851856] clk_mux_determine_rate_flags: sys_pll1_bypass: current parent 
sys_pll1                                                
[    0.859471] clk_mux_determine_rate_flags: sys_pll1_bypass: current parent 
rate 800000000                                          
[    0.867608] clk_core_round_rate_nolock +1439                                                                                      
[    0.871894] clk_core_round_rate_nolock +1446                                                                                      
[    0.876182] clk_core_round_rate_nolock +1450                                                                                      
[    0.880477] clk_core_round_rate_nolock +1453                                                                                      
[    0.884758] clk_core_determine_round_nolock +1374 sys_pll1                                                                        
[    0.890273] clk_core_determine_round_nolock +1378                                                                                 
[    0.894996] clk_core_determine_round_nolock +1381                                                                                 
[    0.899721] clk_core_determine_round_nolock +1396                                                                                 
[    0.904457] Unable to handle kernel NULL pointer dereference at virtual 
address 0000000000000000                                  
[    0.913285] Mem abort info:                                                                                                       
[    0.916083]   ESR = 0x96000004                                                                                                    
[    0.919147]   EC = 0x25: DABT (current EL), IL = 32 bits                                                                          
[    0.924484]   SET = 0, FnV = 0                                                                                                    
[    0.927547]   EA = 0, S1PTW = 0                                                                                                   
[    0.930697]   FSC = 0x04: level 0 translation fault
[    0.935595] Data abort info:
[    0.938487]   ISV = 0, ISS = 0x00000004
[    0.942334]   CM = 0, WnR = 0
[    0.945304] [0000000000000000] user address but active_mm is swapper
[    0.951696] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[    0.957292] Modules linked in:
[    0.960355] CPU: 2 PID: 1 Comm: swapper/0 Not tainted 5.17.0-next-20220331+ 
#53 da834fe2485dc10e4c2f50265323ce628a30bc5e
[    0.971291] Hardware name: TQ-Systems i.MX8MPlus TQMa8MPxL on MBa8MPxL (DT)
[    0.978292] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[    0.985291] pc : clk_mux_determine_rate_flags+0x33c/0x380
[    0.990714] lr : clk_mux_determine_rate_flags+0x10c/0x380
[    0.996141] sp : ffff800009ceb4a0
[    0.999464] x29: ffff800009ceb4a0 x28: ffff000002cf4700 x27: 
0000000000000001
[    1.006639] x26: ffff8000092fe728 x25: ffff800008eaa028 x24: 
ffff800008ea95d8
[    1.013816] x23: ffff800008ea95d8 x22: ffff000002aab700 x21: 
000000002faf0800
[    1.020989] x20: ffff800009ceb640 x19: 0000000000000000 x18: 
0000000000004590
[    1.028164] x17: 617220746e657261 x16: 7020746e65727275 x15: 
63203a7373617079
[    1.035339] x14: 0000000000000000 x13: 363933312b206b63 x12: 
6f6c6f6e5f646e75
[    1.042514] x11: 6f725f656e696d72 x10: 657465645f65726f x9 : 
206b636f6c6f6e5f
[    1.049689] x8 : 646e756f725f656e x7 : 205d313237393938 x6 : 
ffff800009a947c8
[    1.056864] x5 : ffff800008eb0310 x4 : 0000000000000009 x3 : 
000000002faf0800
[    1.064039] x2 : ffff800008eb039c x1 : ffff800008eaa028 x0 : 
ffff8000092fd8b8
[    1.071217] Call trace:
[    1.073667]  clk_mux_determine_rate_flags+0x33c/0x380
[    1.078741]  clk_mux_determine_rate+0x10/0x20
[    1.083115]  clk_core_determine_round_nolock+0xd4/0x140
[    1.088364]  clk_core_round_rate_nolock+0xac/0xf8
[    1.093090]  clk_core_round_rate_nolock+0xd4/0xf8
[    1.097814]  clk_hw_round_rate+0x44/0x7c
[    1.101751]  clk_factor_round_rate+0x60/0x80
[    1.106041]  clk_core_determine_round_nolock+0x104/0x140
[    1.111376]  clk_core_round_rate_nolock+0xac/0xf8
[    1.116101]  clk_core_set_rate_nolock.part.0+0xac/0x21c
[    1.121351]  clk_set_rate_range_nolock+0x294/0x2b0
[    1.126164]  __clk_put+0x60/0x12c
[    1.129489]  clk_put+0xc/0x1c
[    1.132464]  __set_clk_parents+0x12c/0x244
[    1.136576]  of_clk_set_defaults+0x20/0x50
[    1.140691]  of_clk_add_hw_provider.part.0+0x94/0x120
[    1.145764]  of_clk_add_hw_provider+0x10/0x20
[    1.150139]  imx8mp_clocks_probe+0x3458/0x34d0
[    1.154601]  platform_probe+0x64/0x100
[    1.158364]  call_driver_probe+0x28/0x130
[    1.162389]  really_probe+0x178/0x310
[    1.166064]  __driver_probe_device+0xfc/0x144
[    1.170439]  driver_probe_device+0x38/0x12c
[    1.174641]  __driver_attach+0xcc/0x220
[    1.178489]  bus_for_each_dev+0x6c/0xc0
[    1.182339]  driver_attach+0x20/0x2c
[    1.185926]  bus_add_driver+0x140/0x230
[    1.189776]  driver_register+0x74/0x120
[    1.193626]  __platform_driver_register+0x24/0x30
[    1.198351]  imx8mp_clk_driver_init+0x18/0x20
[    1.202726]  do_one_initcall+0x58/0x200
[    1.206578]  do_initcalls+0x164/0x19c
[    1.210251]  kernel_init_freeable+0x134/0x17c
[    1.214628]  kernel_init+0x2c/0x150
[    1.218126]  ret_from_fork+0x10/0x20
[    1.221720] Code: f9000e95 91294301 d0002900 9122e000 (f9400262) 
[    1.227845] ---[ end trace 0000000000000000 ]---
[    1.232501] Kernel panic - not syncing: Attempted to kill init! 
exitcode=0x0000000b
[    1.240179] SMP: stopping secondary CPUs
[    1.244122] Kernel Offset: disabled
[    1.247616] CPU features: 0x000,00020009,00001082
[    1.252341] Memory Limit: none
[    1.255406] ---[ end Kernel panic - not syncing: Attempted to kill init! 
exitcode=0x0000000b ]---
---

HTH
Alexander




WARNING: multiple messages have this Message-ID (diff)
From: Alexander Stein <alexander.stein@ew.tq-group.com>
To: Maxime Ripard <maxime@cerno.tech>
Cc: Tony Lindgren <tony@atomide.com>,
	linux-arm-kernel@lists.infradead.org,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Mike Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@kernel.org>,
	linux-clk@vger.kernel.org,
	Dmitry Osipenko <dmitry.osipenko@collabora.com>,
	'Linux Samsung SOC' <linux-samsung-soc@vger.kernel.org>,
	linux-amlogic@lists.infradead.org, linux-omap@vger.kernel.org
Subject: Re: (EXT) Re: (EXT) Re: (EXT) Re: (EXT) Re: [PATCH v2 3/3] clk: Drop the rate range on clk_put
Date: Fri, 01 Apr 2022 15:49:04 +0200	[thread overview]
Message-ID: <14273141.O9o76ZdvQC@steina-w> (raw)
In-Reply-To: <20220401133409.wtilnpgp4fqlrrew@houat>

Am Freitag, 1. April 2022, 15:34:09 CEST schrieb Maxime Ripard:
> * PGP Signed by an unknown key
> 
> On Fri, Apr 01, 2022 at 03:07:10PM +0200, Alexander Stein wrote:
> > > Does it also happen if you only apply the patch I had above, and not all
> > > the debugging?
> > 
> > Yes, these are the last lines I see:
> > ---
> > [    1.236306] mmcblk0rpmb: mmc0:0001 DA6016 4.00 MiB, chardev (235:0)
> > [    1.241031] i2c i2c-1: IMX I2C adapter registered
> > [    1.251771] i2c i2c-3: IMX I2C adapter registered
> > [    1.256957] i2c i2c-5: IMX I2C adapter registered
> 
> Could you add on top of next (so dropping everything we did so far)
> 
> ---- >8 -----
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index 91f863b7a824..552b1e16a82d 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -540,6 +540,8 @@ static bool mux_is_better_rate(unsigned long rate,
> unsigned long now, if (flags & CLK_MUX_ROUND_CLOSEST)
>  		return abs(now - rate) < abs(best - rate);
> 
> +	pr_crit("%s +%d rate %lu now %lu best %lu\n", __func__, __LINE__, 
rate,
> now, best); +
>  	return now <= rate && now > best;
>  }
> 
> @@ -552,6 +554,12 @@ int clk_mux_determine_rate_flags(struct clk_hw *hw,
>  	unsigned long best = 0;
>  	struct clk_rate_request parent_req = *req;
> 
> +	pr_crit("%s: %s: requested rate %lu\n", __func__, core->name, req-
>rate);
> +
> +	parent = core->parent;
> +	pr_crit("%s: %s: current parent %s\n", __func__, core->name, parent 
?
> parent->name : "(null)"); +	pr_crit("%s: %s: current parent rate %lu\n",
> __func__, core->name, clk_core_get_rate_nolock(parent)); +
>  	/* if NO_REPARENT flag set, pass through to current parent */
>  	if (core->flags & CLK_SET_RATE_NO_REPARENT) {
>  		parent = core->parent;
> @@ -578,24 +586,37 @@ int clk_mux_determine_rate_flags(struct clk_hw *hw,
>  		if (!parent)
>  			continue;
> 
> +		pr_crit("%s: Trying parent %s (%lu)\n",
> +			__func__,
> +			parent->name,
> +			clk_core_get_rate_nolock(parent));
> +
>  		if (core->flags & CLK_SET_RATE_PARENT) {
> +			pr_crit("%s +%d\n", __func__, __LINE__);
>  			parent_req = *req;
>  			ret = __clk_determine_rate(parent->hw, 
&parent_req);
> +			pr_crit("%s +%d %d\n", __func__, __LINE__, 
ret);
>  			if (ret)
>  				continue;
>  		} else {
> +			pr_crit("%s +%d\n", __func__, __LINE__);
>  			parent_req.rate = 
clk_core_get_rate_nolock(parent);
>  		}
> 
> +		pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  		if (mux_is_better_rate(req->rate, parent_req.rate,
>  				       best, flags)) {
> +			pr_crit("%s +%d\n", __func__, __LINE__);
>  			best_parent = parent;
>  			best = parent_req.rate;
>  		}
>  	}
> 
> -	if (!best_parent)
> +	if (!best_parent) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return -EINVAL;
> +	}
> 
>  out:
>  	if (best_parent)
> @@ -603,6 +624,11 @@ int clk_mux_determine_rate_flags(struct clk_hw *hw,
>  	req->best_parent_rate = best;
>  	req->rate = best;
> 
> +	pr_crit("%s: Best parent %s (%lu)\n",
> +		__func__,
> +		best_parent->name,
> +		best);
> +
>  	return 0;
>  }
>  EXPORT_SYMBOL_GPL(clk_mux_determine_rate_flags);
> @@ -1345,11 +1371,15 @@ static int clk_core_determine_round_nolock(struct
> clk_core *core,
> 
>  	lockdep_assert_held(&prepare_lock);
> 
> +	pr_crit("%s +%d %s\n", __func__, __LINE__, core->name);
>  	if (!core)
>  		return 0;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
>  	req->rate = clamp(req->rate, req->min_rate, req->max_rate);
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	/*
>  	 * At this point, core protection will be disabled
>  	 * - if the provider is not protected at all
> @@ -1357,10 +1387,13 @@ static int clk_core_determine_round_nolock(struct
> clk_core *core, *   over the provider
>  	 */
>  	if (clk_core_rate_is_protected(core)) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		req->rate = core->rate;
>  	} else if (core->ops->determine_rate) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return core->ops->determine_rate(core->hw, req);
>  	} else if (core->ops->round_rate) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		rate = core->ops->round_rate(core->hw, req->rate,
>  					     &req-
>best_parent_rate);
>  		if (rate < 0)
> @@ -1368,6 +1401,7 @@ static int clk_core_determine_round_nolock(struct
> clk_core *core,
> 
>  		req->rate = rate;
>  	} else {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return -EINVAL;
>  	}
> 
> @@ -1402,17 +1436,26 @@ static int clk_core_round_rate_nolock(struct
> clk_core *core, {
>  	lockdep_assert_held(&prepare_lock);
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	if (!core) {
>  		req->rate = 0;
>  		return 0;
>  	}
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	clk_core_init_rate_req(core, req);
> 
> -	if (clk_core_can_round(core))
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
> +	if (clk_core_can_round(core)) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return clk_core_determine_round_nolock(core, req);
> -	else if (core->flags & CLK_SET_RATE_PARENT)
> +	} else if (core->flags & CLK_SET_RATE_PARENT) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return clk_core_round_rate_nolock(core->parent, req);
> +	}
> 
>  	req->rate = core->rate;
>  	return 0;
> @@ -2201,21 +2244,31 @@ static int clk_core_set_rate_nolock(struct clk_core
> *core, if (!core)
>  		return 0;
> 
> +	pr_crit("%s: %s: rate %lu\n", __func__, core->name, req_rate);
> +
>  	rate = clk_core_req_round_rate_nolock(core, req_rate);
> 
> +	pr_crit("%s: %s: rounded rate %lu\n", __func__, core->name, 
req_rate);
> +
>  	/* bail early if nothing to do */
>  	if (rate == clk_core_get_rate_nolock(core))
>  		return 0;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	/* fail on a direct rate set of a protected provider */
>  	if (clk_core_rate_is_protected(core))
>  		return -EBUSY;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	/* calculate new rates and get the topmost changed clock */
>  	top = clk_calc_new_rates(core, req_rate);
>  	if (!top)
>  		return -EINVAL;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	ret = clk_pm_runtime_get(core);
>  	if (ret)
>  		return ret;
> @@ -2367,6 +2420,16 @@ static int clk_set_rate_range_nolock(struct clk *clk,
> goto out;
>  	}
> 
> +	pr_crit("%s: %s: orphan ? %c\n",
> +		__func__,
> +		clk->core->name,
> +		clk->core->orphan ? 'y' : 'n');
> +
> +	pr_crit("%s: %s: core req rate %lu\n",
> +		__func__,
> +		clk->core->name,
> +		clk->core->req_rate);
> +
>  	/*
>  	 * Since the boundaries have been changed, let's give the
>  	 * opportunity to the provider to adjust the clock rate based on
> @@ -2384,7 +2447,11 @@ static int clk_set_rate_range_nolock(struct clk *clk,
> * - the determine_rate() callback does not really check for
>  	 *   this corner case when determining the rate
>  	 */
> +
>  	rate = clamp(clk->core->req_rate, min, max);
> +
> +	pr_crit("%s: %s: clamped rate %lu\n", __func__, clk->core->name, 
rate);
> +
>  	ret = clk_core_set_rate_nolock(clk->core, rate);
>  	if (ret) {
>  		/* rollback the changes */
> @@ -2599,6 +2666,8 @@ static int clk_core_set_parent_nolock(struct clk_core
> *core, } else {
>  		__clk_recalc_rates(core, POST_RATE_CHANGE);
>  		__clk_recalc_accuracies(core);
> +
> +		core->req_rate = core->rate;
>  	}
> 
>  runtime_put:
> ---- >8 -----

Sure, here we go
---
[    0.630873] Asymmetric key parser 'x509' registered                                                                               
[    0.635802] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 
243)                                                  
[    0.643210] io scheduler mq-deadline registered                                                                                   
[    0.647758] io scheduler kyber registered                                                                                         
[    0.658708] clk_set_rate_range_nolock: arm_a53_div: orphan ? n                                                                    
[    0.661717] clk_set_rate_range_nolock: arm_a53_div: core req rate 800000000                                                       
[    0.668724] clk_set_rate_range_nolock: arm_a53_div: clamped rate 800000000                                                        
[    0.675633] clk_core_set_rate_nolock: arm_a53_div: rate 800000000                                                                 
[    0.681761] clk_core_round_rate_nolock +1439                                                                                      
[    0.686048] clk_core_round_rate_nolock +1446                                                                                      
[    0.690333] clk_core_round_rate_nolock +1450                                                                                      
[    0.694619] clk_core_round_rate_nolock +1453                                                                                      
[    0.698908] clk_core_determine_round_nolock +1374 arm_a53_div                                                                     
[    0.704681] clk_core_determine_round_nolock +1378                                                                                 
[    0.709408] clk_core_determine_round_nolock +1381                                                                                 
[    0.714133] clk_core_determine_round_nolock +1393                                                                                 
[    0.718860] clk_core_set_rate_nolock: arm_a53_div: rounded rate 800000000                                                         
[    0.725684] clk_set_rate_range_nolock: sys_pll1_800m: orphan ? n                                                                  
[    0.731719] clk_set_rate_range_nolock: sys_pll1_800m: core req rate 
800000000                                                     
[    0.738894] clk_set_rate_range_nolock: sys_pll1_800m: clamped rate 
800000000                                                      
[    0.745983] clk_core_set_rate_nolock: sys_pll1_800m: rate 800000000                                                               
[    0.752281] clk_core_round_rate_nolock +1439                                                                                      
[    0.756569] clk_core_round_rate_nolock +1446                                                                                      
[    0.760862] clk_core_round_rate_nolock +1450                                                                                      
[    0.765152] clk_core_round_rate_nolock +1453                                                                                      
[    0.769435] clk_core_determine_round_nolock +1374 sys_pll1_800m                                                                   
[    0.775385] clk_core_determine_round_nolock +1378                                                                                 
[    0.780114] clk_core_determine_round_nolock +1381                                                                                 
[    0.784833] clk_core_determine_round_nolock +1396                                                                                 
[    0.789559] clk_core_round_rate_nolock +1439                                                                                      
[    0.793844] clk_core_round_rate_nolock +1446                                                                                      
[    0.798133] clk_core_round_rate_nolock +1450                                                                                      
[    0.802423] clk_core_round_rate_nolock +1456                                                                                      
[    0.806708] clk_core_round_rate_nolock +1439                                                                                      
[    0.810994] clk_core_round_rate_nolock +1446                                                                                      
[    0.815284] clk_core_round_rate_nolock +1450                                                                                      
[    0.819570] clk_core_round_rate_nolock +1453                                                                                      
[    0.823856] clk_core_determine_round_nolock +1374 sys_pll1_bypass                                                                 
[    0.829981] clk_core_determine_round_nolock +1378                                                                                 
[    0.834706] clk_core_determine_round_nolock +1381                                                                                 
[    0.839431] clk_core_determine_round_nolock +1393                                                                                 
[    0.844159] clk_mux_determine_rate_flags: sys_pll1_bypass: requested rate 
800000000                                               
[    0.851856] clk_mux_determine_rate_flags: sys_pll1_bypass: current parent 
sys_pll1                                                
[    0.859471] clk_mux_determine_rate_flags: sys_pll1_bypass: current parent 
rate 800000000                                          
[    0.867608] clk_core_round_rate_nolock +1439                                                                                      
[    0.871894] clk_core_round_rate_nolock +1446                                                                                      
[    0.876182] clk_core_round_rate_nolock +1450                                                                                      
[    0.880477] clk_core_round_rate_nolock +1453                                                                                      
[    0.884758] clk_core_determine_round_nolock +1374 sys_pll1                                                                        
[    0.890273] clk_core_determine_round_nolock +1378                                                                                 
[    0.894996] clk_core_determine_round_nolock +1381                                                                                 
[    0.899721] clk_core_determine_round_nolock +1396                                                                                 
[    0.904457] Unable to handle kernel NULL pointer dereference at virtual 
address 0000000000000000                                  
[    0.913285] Mem abort info:                                                                                                       
[    0.916083]   ESR = 0x96000004                                                                                                    
[    0.919147]   EC = 0x25: DABT (current EL), IL = 32 bits                                                                          
[    0.924484]   SET = 0, FnV = 0                                                                                                    
[    0.927547]   EA = 0, S1PTW = 0                                                                                                   
[    0.930697]   FSC = 0x04: level 0 translation fault
[    0.935595] Data abort info:
[    0.938487]   ISV = 0, ISS = 0x00000004
[    0.942334]   CM = 0, WnR = 0
[    0.945304] [0000000000000000] user address but active_mm is swapper
[    0.951696] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[    0.957292] Modules linked in:
[    0.960355] CPU: 2 PID: 1 Comm: swapper/0 Not tainted 5.17.0-next-20220331+ 
#53 da834fe2485dc10e4c2f50265323ce628a30bc5e
[    0.971291] Hardware name: TQ-Systems i.MX8MPlus TQMa8MPxL on MBa8MPxL (DT)
[    0.978292] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[    0.985291] pc : clk_mux_determine_rate_flags+0x33c/0x380
[    0.990714] lr : clk_mux_determine_rate_flags+0x10c/0x380
[    0.996141] sp : ffff800009ceb4a0
[    0.999464] x29: ffff800009ceb4a0 x28: ffff000002cf4700 x27: 
0000000000000001
[    1.006639] x26: ffff8000092fe728 x25: ffff800008eaa028 x24: 
ffff800008ea95d8
[    1.013816] x23: ffff800008ea95d8 x22: ffff000002aab700 x21: 
000000002faf0800
[    1.020989] x20: ffff800009ceb640 x19: 0000000000000000 x18: 
0000000000004590
[    1.028164] x17: 617220746e657261 x16: 7020746e65727275 x15: 
63203a7373617079
[    1.035339] x14: 0000000000000000 x13: 363933312b206b63 x12: 
6f6c6f6e5f646e75
[    1.042514] x11: 6f725f656e696d72 x10: 657465645f65726f x9 : 
206b636f6c6f6e5f
[    1.049689] x8 : 646e756f725f656e x7 : 205d313237393938 x6 : 
ffff800009a947c8
[    1.056864] x5 : ffff800008eb0310 x4 : 0000000000000009 x3 : 
000000002faf0800
[    1.064039] x2 : ffff800008eb039c x1 : ffff800008eaa028 x0 : 
ffff8000092fd8b8
[    1.071217] Call trace:
[    1.073667]  clk_mux_determine_rate_flags+0x33c/0x380
[    1.078741]  clk_mux_determine_rate+0x10/0x20
[    1.083115]  clk_core_determine_round_nolock+0xd4/0x140
[    1.088364]  clk_core_round_rate_nolock+0xac/0xf8
[    1.093090]  clk_core_round_rate_nolock+0xd4/0xf8
[    1.097814]  clk_hw_round_rate+0x44/0x7c
[    1.101751]  clk_factor_round_rate+0x60/0x80
[    1.106041]  clk_core_determine_round_nolock+0x104/0x140
[    1.111376]  clk_core_round_rate_nolock+0xac/0xf8
[    1.116101]  clk_core_set_rate_nolock.part.0+0xac/0x21c
[    1.121351]  clk_set_rate_range_nolock+0x294/0x2b0
[    1.126164]  __clk_put+0x60/0x12c
[    1.129489]  clk_put+0xc/0x1c
[    1.132464]  __set_clk_parents+0x12c/0x244
[    1.136576]  of_clk_set_defaults+0x20/0x50
[    1.140691]  of_clk_add_hw_provider.part.0+0x94/0x120
[    1.145764]  of_clk_add_hw_provider+0x10/0x20
[    1.150139]  imx8mp_clocks_probe+0x3458/0x34d0
[    1.154601]  platform_probe+0x64/0x100
[    1.158364]  call_driver_probe+0x28/0x130
[    1.162389]  really_probe+0x178/0x310
[    1.166064]  __driver_probe_device+0xfc/0x144
[    1.170439]  driver_probe_device+0x38/0x12c
[    1.174641]  __driver_attach+0xcc/0x220
[    1.178489]  bus_for_each_dev+0x6c/0xc0
[    1.182339]  driver_attach+0x20/0x2c
[    1.185926]  bus_add_driver+0x140/0x230
[    1.189776]  driver_register+0x74/0x120
[    1.193626]  __platform_driver_register+0x24/0x30
[    1.198351]  imx8mp_clk_driver_init+0x18/0x20
[    1.202726]  do_one_initcall+0x58/0x200
[    1.206578]  do_initcalls+0x164/0x19c
[    1.210251]  kernel_init_freeable+0x134/0x17c
[    1.214628]  kernel_init+0x2c/0x150
[    1.218126]  ret_from_fork+0x10/0x20
[    1.221720] Code: f9000e95 91294301 d0002900 9122e000 (f9400262) 
[    1.227845] ---[ end trace 0000000000000000 ]---
[    1.232501] Kernel panic - not syncing: Attempted to kill init! 
exitcode=0x0000000b
[    1.240179] SMP: stopping secondary CPUs
[    1.244122] Kernel Offset: disabled
[    1.247616] CPU features: 0x000,00020009,00001082
[    1.252341] Memory Limit: none
[    1.255406] ---[ end Kernel panic - not syncing: Attempted to kill init! 
exitcode=0x0000000b ]---
---

HTH
Alexander




_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic

WARNING: multiple messages have this Message-ID (diff)
From: Alexander Stein <alexander.stein@ew.tq-group.com>
To: Maxime Ripard <maxime@cerno.tech>
Cc: Tony Lindgren <tony@atomide.com>,
	linux-arm-kernel@lists.infradead.org,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Mike Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@kernel.org>,
	linux-clk@vger.kernel.org,
	Dmitry Osipenko <dmitry.osipenko@collabora.com>,
	'Linux Samsung SOC' <linux-samsung-soc@vger.kernel.org>,
	linux-amlogic@lists.infradead.org, linux-omap@vger.kernel.org
Subject: Re: (EXT) Re: (EXT) Re: (EXT) Re: (EXT) Re: [PATCH v2 3/3] clk: Drop the rate range on clk_put
Date: Fri, 01 Apr 2022 15:49:04 +0200	[thread overview]
Message-ID: <14273141.O9o76ZdvQC@steina-w> (raw)
In-Reply-To: <20220401133409.wtilnpgp4fqlrrew@houat>

Am Freitag, 1. April 2022, 15:34:09 CEST schrieb Maxime Ripard:
> * PGP Signed by an unknown key
> 
> On Fri, Apr 01, 2022 at 03:07:10PM +0200, Alexander Stein wrote:
> > > Does it also happen if you only apply the patch I had above, and not all
> > > the debugging?
> > 
> > Yes, these are the last lines I see:
> > ---
> > [    1.236306] mmcblk0rpmb: mmc0:0001 DA6016 4.00 MiB, chardev (235:0)
> > [    1.241031] i2c i2c-1: IMX I2C adapter registered
> > [    1.251771] i2c i2c-3: IMX I2C adapter registered
> > [    1.256957] i2c i2c-5: IMX I2C adapter registered
> 
> Could you add on top of next (so dropping everything we did so far)
> 
> ---- >8 -----
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index 91f863b7a824..552b1e16a82d 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -540,6 +540,8 @@ static bool mux_is_better_rate(unsigned long rate,
> unsigned long now, if (flags & CLK_MUX_ROUND_CLOSEST)
>  		return abs(now - rate) < abs(best - rate);
> 
> +	pr_crit("%s +%d rate %lu now %lu best %lu\n", __func__, __LINE__, 
rate,
> now, best); +
>  	return now <= rate && now > best;
>  }
> 
> @@ -552,6 +554,12 @@ int clk_mux_determine_rate_flags(struct clk_hw *hw,
>  	unsigned long best = 0;
>  	struct clk_rate_request parent_req = *req;
> 
> +	pr_crit("%s: %s: requested rate %lu\n", __func__, core->name, req-
>rate);
> +
> +	parent = core->parent;
> +	pr_crit("%s: %s: current parent %s\n", __func__, core->name, parent 
?
> parent->name : "(null)"); +	pr_crit("%s: %s: current parent rate %lu\n",
> __func__, core->name, clk_core_get_rate_nolock(parent)); +
>  	/* if NO_REPARENT flag set, pass through to current parent */
>  	if (core->flags & CLK_SET_RATE_NO_REPARENT) {
>  		parent = core->parent;
> @@ -578,24 +586,37 @@ int clk_mux_determine_rate_flags(struct clk_hw *hw,
>  		if (!parent)
>  			continue;
> 
> +		pr_crit("%s: Trying parent %s (%lu)\n",
> +			__func__,
> +			parent->name,
> +			clk_core_get_rate_nolock(parent));
> +
>  		if (core->flags & CLK_SET_RATE_PARENT) {
> +			pr_crit("%s +%d\n", __func__, __LINE__);
>  			parent_req = *req;
>  			ret = __clk_determine_rate(parent->hw, 
&parent_req);
> +			pr_crit("%s +%d %d\n", __func__, __LINE__, 
ret);
>  			if (ret)
>  				continue;
>  		} else {
> +			pr_crit("%s +%d\n", __func__, __LINE__);
>  			parent_req.rate = 
clk_core_get_rate_nolock(parent);
>  		}
> 
> +		pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  		if (mux_is_better_rate(req->rate, parent_req.rate,
>  				       best, flags)) {
> +			pr_crit("%s +%d\n", __func__, __LINE__);
>  			best_parent = parent;
>  			best = parent_req.rate;
>  		}
>  	}
> 
> -	if (!best_parent)
> +	if (!best_parent) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return -EINVAL;
> +	}
> 
>  out:
>  	if (best_parent)
> @@ -603,6 +624,11 @@ int clk_mux_determine_rate_flags(struct clk_hw *hw,
>  	req->best_parent_rate = best;
>  	req->rate = best;
> 
> +	pr_crit("%s: Best parent %s (%lu)\n",
> +		__func__,
> +		best_parent->name,
> +		best);
> +
>  	return 0;
>  }
>  EXPORT_SYMBOL_GPL(clk_mux_determine_rate_flags);
> @@ -1345,11 +1371,15 @@ static int clk_core_determine_round_nolock(struct
> clk_core *core,
> 
>  	lockdep_assert_held(&prepare_lock);
> 
> +	pr_crit("%s +%d %s\n", __func__, __LINE__, core->name);
>  	if (!core)
>  		return 0;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
>  	req->rate = clamp(req->rate, req->min_rate, req->max_rate);
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	/*
>  	 * At this point, core protection will be disabled
>  	 * - if the provider is not protected at all
> @@ -1357,10 +1387,13 @@ static int clk_core_determine_round_nolock(struct
> clk_core *core, *   over the provider
>  	 */
>  	if (clk_core_rate_is_protected(core)) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		req->rate = core->rate;
>  	} else if (core->ops->determine_rate) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return core->ops->determine_rate(core->hw, req);
>  	} else if (core->ops->round_rate) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		rate = core->ops->round_rate(core->hw, req->rate,
>  					     &req-
>best_parent_rate);
>  		if (rate < 0)
> @@ -1368,6 +1401,7 @@ static int clk_core_determine_round_nolock(struct
> clk_core *core,
> 
>  		req->rate = rate;
>  	} else {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return -EINVAL;
>  	}
> 
> @@ -1402,17 +1436,26 @@ static int clk_core_round_rate_nolock(struct
> clk_core *core, {
>  	lockdep_assert_held(&prepare_lock);
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	if (!core) {
>  		req->rate = 0;
>  		return 0;
>  	}
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	clk_core_init_rate_req(core, req);
> 
> -	if (clk_core_can_round(core))
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
> +	if (clk_core_can_round(core)) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return clk_core_determine_round_nolock(core, req);
> -	else if (core->flags & CLK_SET_RATE_PARENT)
> +	} else if (core->flags & CLK_SET_RATE_PARENT) {
> +		pr_crit("%s +%d\n", __func__, __LINE__);
>  		return clk_core_round_rate_nolock(core->parent, req);
> +	}
> 
>  	req->rate = core->rate;
>  	return 0;
> @@ -2201,21 +2244,31 @@ static int clk_core_set_rate_nolock(struct clk_core
> *core, if (!core)
>  		return 0;
> 
> +	pr_crit("%s: %s: rate %lu\n", __func__, core->name, req_rate);
> +
>  	rate = clk_core_req_round_rate_nolock(core, req_rate);
> 
> +	pr_crit("%s: %s: rounded rate %lu\n", __func__, core->name, 
req_rate);
> +
>  	/* bail early if nothing to do */
>  	if (rate == clk_core_get_rate_nolock(core))
>  		return 0;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	/* fail on a direct rate set of a protected provider */
>  	if (clk_core_rate_is_protected(core))
>  		return -EBUSY;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	/* calculate new rates and get the topmost changed clock */
>  	top = clk_calc_new_rates(core, req_rate);
>  	if (!top)
>  		return -EINVAL;
> 
> +	pr_crit("%s +%d\n", __func__, __LINE__);
> +
>  	ret = clk_pm_runtime_get(core);
>  	if (ret)
>  		return ret;
> @@ -2367,6 +2420,16 @@ static int clk_set_rate_range_nolock(struct clk *clk,
> goto out;
>  	}
> 
> +	pr_crit("%s: %s: orphan ? %c\n",
> +		__func__,
> +		clk->core->name,
> +		clk->core->orphan ? 'y' : 'n');
> +
> +	pr_crit("%s: %s: core req rate %lu\n",
> +		__func__,
> +		clk->core->name,
> +		clk->core->req_rate);
> +
>  	/*
>  	 * Since the boundaries have been changed, let's give the
>  	 * opportunity to the provider to adjust the clock rate based on
> @@ -2384,7 +2447,11 @@ static int clk_set_rate_range_nolock(struct clk *clk,
> * - the determine_rate() callback does not really check for
>  	 *   this corner case when determining the rate
>  	 */
> +
>  	rate = clamp(clk->core->req_rate, min, max);
> +
> +	pr_crit("%s: %s: clamped rate %lu\n", __func__, clk->core->name, 
rate);
> +
>  	ret = clk_core_set_rate_nolock(clk->core, rate);
>  	if (ret) {
>  		/* rollback the changes */
> @@ -2599,6 +2666,8 @@ static int clk_core_set_parent_nolock(struct clk_core
> *core, } else {
>  		__clk_recalc_rates(core, POST_RATE_CHANGE);
>  		__clk_recalc_accuracies(core);
> +
> +		core->req_rate = core->rate;
>  	}
> 
>  runtime_put:
> ---- >8 -----

Sure, here we go
---
[    0.630873] Asymmetric key parser 'x509' registered                                                                               
[    0.635802] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 
243)                                                  
[    0.643210] io scheduler mq-deadline registered                                                                                   
[    0.647758] io scheduler kyber registered                                                                                         
[    0.658708] clk_set_rate_range_nolock: arm_a53_div: orphan ? n                                                                    
[    0.661717] clk_set_rate_range_nolock: arm_a53_div: core req rate 800000000                                                       
[    0.668724] clk_set_rate_range_nolock: arm_a53_div: clamped rate 800000000                                                        
[    0.675633] clk_core_set_rate_nolock: arm_a53_div: rate 800000000                                                                 
[    0.681761] clk_core_round_rate_nolock +1439                                                                                      
[    0.686048] clk_core_round_rate_nolock +1446                                                                                      
[    0.690333] clk_core_round_rate_nolock +1450                                                                                      
[    0.694619] clk_core_round_rate_nolock +1453                                                                                      
[    0.698908] clk_core_determine_round_nolock +1374 arm_a53_div                                                                     
[    0.704681] clk_core_determine_round_nolock +1378                                                                                 
[    0.709408] clk_core_determine_round_nolock +1381                                                                                 
[    0.714133] clk_core_determine_round_nolock +1393                                                                                 
[    0.718860] clk_core_set_rate_nolock: arm_a53_div: rounded rate 800000000                                                         
[    0.725684] clk_set_rate_range_nolock: sys_pll1_800m: orphan ? n                                                                  
[    0.731719] clk_set_rate_range_nolock: sys_pll1_800m: core req rate 
800000000                                                     
[    0.738894] clk_set_rate_range_nolock: sys_pll1_800m: clamped rate 
800000000                                                      
[    0.745983] clk_core_set_rate_nolock: sys_pll1_800m: rate 800000000                                                               
[    0.752281] clk_core_round_rate_nolock +1439                                                                                      
[    0.756569] clk_core_round_rate_nolock +1446                                                                                      
[    0.760862] clk_core_round_rate_nolock +1450                                                                                      
[    0.765152] clk_core_round_rate_nolock +1453                                                                                      
[    0.769435] clk_core_determine_round_nolock +1374 sys_pll1_800m                                                                   
[    0.775385] clk_core_determine_round_nolock +1378                                                                                 
[    0.780114] clk_core_determine_round_nolock +1381                                                                                 
[    0.784833] clk_core_determine_round_nolock +1396                                                                                 
[    0.789559] clk_core_round_rate_nolock +1439                                                                                      
[    0.793844] clk_core_round_rate_nolock +1446                                                                                      
[    0.798133] clk_core_round_rate_nolock +1450                                                                                      
[    0.802423] clk_core_round_rate_nolock +1456                                                                                      
[    0.806708] clk_core_round_rate_nolock +1439                                                                                      
[    0.810994] clk_core_round_rate_nolock +1446                                                                                      
[    0.815284] clk_core_round_rate_nolock +1450                                                                                      
[    0.819570] clk_core_round_rate_nolock +1453                                                                                      
[    0.823856] clk_core_determine_round_nolock +1374 sys_pll1_bypass                                                                 
[    0.829981] clk_core_determine_round_nolock +1378                                                                                 
[    0.834706] clk_core_determine_round_nolock +1381                                                                                 
[    0.839431] clk_core_determine_round_nolock +1393                                                                                 
[    0.844159] clk_mux_determine_rate_flags: sys_pll1_bypass: requested rate 
800000000                                               
[    0.851856] clk_mux_determine_rate_flags: sys_pll1_bypass: current parent 
sys_pll1                                                
[    0.859471] clk_mux_determine_rate_flags: sys_pll1_bypass: current parent 
rate 800000000                                          
[    0.867608] clk_core_round_rate_nolock +1439                                                                                      
[    0.871894] clk_core_round_rate_nolock +1446                                                                                      
[    0.876182] clk_core_round_rate_nolock +1450                                                                                      
[    0.880477] clk_core_round_rate_nolock +1453                                                                                      
[    0.884758] clk_core_determine_round_nolock +1374 sys_pll1                                                                        
[    0.890273] clk_core_determine_round_nolock +1378                                                                                 
[    0.894996] clk_core_determine_round_nolock +1381                                                                                 
[    0.899721] clk_core_determine_round_nolock +1396                                                                                 
[    0.904457] Unable to handle kernel NULL pointer dereference at virtual 
address 0000000000000000                                  
[    0.913285] Mem abort info:                                                                                                       
[    0.916083]   ESR = 0x96000004                                                                                                    
[    0.919147]   EC = 0x25: DABT (current EL), IL = 32 bits                                                                          
[    0.924484]   SET = 0, FnV = 0                                                                                                    
[    0.927547]   EA = 0, S1PTW = 0                                                                                                   
[    0.930697]   FSC = 0x04: level 0 translation fault
[    0.935595] Data abort info:
[    0.938487]   ISV = 0, ISS = 0x00000004
[    0.942334]   CM = 0, WnR = 0
[    0.945304] [0000000000000000] user address but active_mm is swapper
[    0.951696] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[    0.957292] Modules linked in:
[    0.960355] CPU: 2 PID: 1 Comm: swapper/0 Not tainted 5.17.0-next-20220331+ 
#53 da834fe2485dc10e4c2f50265323ce628a30bc5e
[    0.971291] Hardware name: TQ-Systems i.MX8MPlus TQMa8MPxL on MBa8MPxL (DT)
[    0.978292] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[    0.985291] pc : clk_mux_determine_rate_flags+0x33c/0x380
[    0.990714] lr : clk_mux_determine_rate_flags+0x10c/0x380
[    0.996141] sp : ffff800009ceb4a0
[    0.999464] x29: ffff800009ceb4a0 x28: ffff000002cf4700 x27: 
0000000000000001
[    1.006639] x26: ffff8000092fe728 x25: ffff800008eaa028 x24: 
ffff800008ea95d8
[    1.013816] x23: ffff800008ea95d8 x22: ffff000002aab700 x21: 
000000002faf0800
[    1.020989] x20: ffff800009ceb640 x19: 0000000000000000 x18: 
0000000000004590
[    1.028164] x17: 617220746e657261 x16: 7020746e65727275 x15: 
63203a7373617079
[    1.035339] x14: 0000000000000000 x13: 363933312b206b63 x12: 
6f6c6f6e5f646e75
[    1.042514] x11: 6f725f656e696d72 x10: 657465645f65726f x9 : 
206b636f6c6f6e5f
[    1.049689] x8 : 646e756f725f656e x7 : 205d313237393938 x6 : 
ffff800009a947c8
[    1.056864] x5 : ffff800008eb0310 x4 : 0000000000000009 x3 : 
000000002faf0800
[    1.064039] x2 : ffff800008eb039c x1 : ffff800008eaa028 x0 : 
ffff8000092fd8b8
[    1.071217] Call trace:
[    1.073667]  clk_mux_determine_rate_flags+0x33c/0x380
[    1.078741]  clk_mux_determine_rate+0x10/0x20
[    1.083115]  clk_core_determine_round_nolock+0xd4/0x140
[    1.088364]  clk_core_round_rate_nolock+0xac/0xf8
[    1.093090]  clk_core_round_rate_nolock+0xd4/0xf8
[    1.097814]  clk_hw_round_rate+0x44/0x7c
[    1.101751]  clk_factor_round_rate+0x60/0x80
[    1.106041]  clk_core_determine_round_nolock+0x104/0x140
[    1.111376]  clk_core_round_rate_nolock+0xac/0xf8
[    1.116101]  clk_core_set_rate_nolock.part.0+0xac/0x21c
[    1.121351]  clk_set_rate_range_nolock+0x294/0x2b0
[    1.126164]  __clk_put+0x60/0x12c
[    1.129489]  clk_put+0xc/0x1c
[    1.132464]  __set_clk_parents+0x12c/0x244
[    1.136576]  of_clk_set_defaults+0x20/0x50
[    1.140691]  of_clk_add_hw_provider.part.0+0x94/0x120
[    1.145764]  of_clk_add_hw_provider+0x10/0x20
[    1.150139]  imx8mp_clocks_probe+0x3458/0x34d0
[    1.154601]  platform_probe+0x64/0x100
[    1.158364]  call_driver_probe+0x28/0x130
[    1.162389]  really_probe+0x178/0x310
[    1.166064]  __driver_probe_device+0xfc/0x144
[    1.170439]  driver_probe_device+0x38/0x12c
[    1.174641]  __driver_attach+0xcc/0x220
[    1.178489]  bus_for_each_dev+0x6c/0xc0
[    1.182339]  driver_attach+0x20/0x2c
[    1.185926]  bus_add_driver+0x140/0x230
[    1.189776]  driver_register+0x74/0x120
[    1.193626]  __platform_driver_register+0x24/0x30
[    1.198351]  imx8mp_clk_driver_init+0x18/0x20
[    1.202726]  do_one_initcall+0x58/0x200
[    1.206578]  do_initcalls+0x164/0x19c
[    1.210251]  kernel_init_freeable+0x134/0x17c
[    1.214628]  kernel_init+0x2c/0x150
[    1.218126]  ret_from_fork+0x10/0x20
[    1.221720] Code: f9000e95 91294301 d0002900 9122e000 (f9400262) 
[    1.227845] ---[ end trace 0000000000000000 ]---
[    1.232501] Kernel panic - not syncing: Attempted to kill init! 
exitcode=0x0000000b
[    1.240179] SMP: stopping secondary CPUs
[    1.244122] Kernel Offset: disabled
[    1.247616] CPU features: 0x000,00020009,00001082
[    1.252341] Memory Limit: none
[    1.255406] ---[ end Kernel panic - not syncing: Attempted to kill init! 
exitcode=0x0000000b ]---
---

HTH
Alexander




_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-04-01 13:49 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-25 16:11 [PATCH v2 0/3] clk: Some Clock Range Fixes Maxime Ripard
2022-03-25 16:11 ` [PATCH v2 1/3] clk: Initialize orphan req_rate Maxime Ripard
2022-03-29 18:36   ` Stephen Boyd
2022-03-25 16:11 ` [PATCH v2 2/3] clk: test: Test clk_set_rate_range on orphan mux Maxime Ripard
2022-03-29 18:36   ` Stephen Boyd
2022-03-25 16:11 ` [PATCH v2 3/3] clk: Drop the rate range on clk_put Maxime Ripard
2022-03-29 18:36   ` Stephen Boyd
     [not found]   ` <CGME20220330080612eucas1p195caaf35d900412de762a27ae02b7b9e@eucas1p1.samsung.com>
2022-03-30  8:06     ` Marek Szyprowski
2022-03-30  8:06       ` Marek Szyprowski
2022-03-30  8:47       ` Maxime Ripard
2022-03-30  8:47         ` Maxime Ripard
2022-03-31  9:42         ` Tony Lindgren
2022-03-31  9:42           ` Tony Lindgren
2022-03-31  9:42           ` Tony Lindgren
2022-03-31  9:54           ` Maxime Ripard
2022-03-31  9:54             ` Maxime Ripard
2022-03-31  9:54             ` Maxime Ripard
2022-03-31 15:00             ` Tony Lindgren
2022-03-31 15:00               ` Tony Lindgren
2022-03-31 15:00               ` Tony Lindgren
2022-03-31 15:31               ` Maxime Ripard
2022-03-31 15:31                 ` Maxime Ripard
2022-03-31 15:31                 ` Maxime Ripard
2022-03-31 17:00                 ` Tony Lindgren
2022-03-31 17:00                   ` Tony Lindgren
2022-03-31 17:00                   ` Tony Lindgren
2022-03-31 21:58                   ` Stephen Boyd
2022-03-31 21:58                     ` Stephen Boyd
2022-03-31 21:58                     ` Stephen Boyd
2022-04-01 12:28                     ` Maxime Ripard
2022-04-01 12:28                       ` Maxime Ripard
2022-04-01 12:28                       ` Maxime Ripard
2022-04-03  2:14                       ` Stephen Boyd
2022-04-03  2:14                         ` Stephen Boyd
2022-04-03  2:14                         ` Stephen Boyd
2022-04-01 11:55                 ` (EXT) " Alexander Stein
2022-04-01 11:55                   ` Alexander Stein
2022-04-01 11:55                   ` Alexander Stein
2022-04-01 12:27                   ` Maxime Ripard
2022-04-01 12:27                     ` Maxime Ripard
2022-04-01 12:27                     ` Maxime Ripard
2022-04-01 12:59                     ` (EXT) " Alexander Stein
2022-04-01 12:59                       ` Alexander Stein
2022-04-01 12:59                       ` Alexander Stein
2022-04-01 13:04                       ` Maxime Ripard
2022-04-01 13:04                         ` Maxime Ripard
2022-04-01 13:04                         ` Maxime Ripard
2022-04-01 13:07                         ` (EXT) " Alexander Stein
2022-04-01 13:07                           ` Alexander Stein
2022-04-01 13:07                           ` Alexander Stein
2022-04-01 13:34                           ` Maxime Ripard
2022-04-01 13:34                             ` Maxime Ripard
2022-04-01 13:34                             ` Maxime Ripard
2022-04-01 13:49                             ` Alexander Stein [this message]
2022-04-01 13:49                               ` (EXT) " Alexander Stein
2022-04-01 13:49                               ` Alexander Stein
2022-04-01 14:55                               ` Maxime Ripard
2022-04-01 14:55                                 ` Maxime Ripard
2022-04-01 14:55                                 ` Maxime Ripard
2022-04-04  7:06                                 ` (EXT) " Alexander Stein
2022-04-04  7:06                                   ` Alexander Stein
2022-04-04  7:06                                   ` Alexander Stein
2022-04-04  7:27                                   ` Maxime Ripard
2022-04-04  7:27                                     ` Maxime Ripard
2022-04-04  7:27                                     ` Maxime Ripard
2022-04-04 10:54                                     ` (EXT) " Alexander Stein
2022-04-04 10:54                                       ` Alexander Stein
2022-04-04 10:54                                       ` Alexander Stein
2022-04-07  8:09                                       ` Maxime Ripard
2022-04-07  8:09                                         ` Maxime Ripard
2022-04-07  8:09                                         ` Maxime Ripard
2022-04-02 17:01                     ` Maxime Ripard
2022-04-02 17:01                       ` Maxime Ripard
2022-04-02 17:01                       ` Maxime Ripard
2022-04-07  7:53           ` Maxime Ripard
2022-04-07  7:53             ` Maxime Ripard
2022-04-07  7:53             ` Maxime Ripard
2022-04-07  8:03             ` Tony Lindgren
2022-04-07  8:03               ` Tony Lindgren
2022-04-07  8:03               ` Tony Lindgren
2022-04-07 11:08               ` Tony Lindgren
2022-04-07 11:08                 ` Tony Lindgren
2022-04-07 11:08                 ` Tony Lindgren
2022-04-07 13:45                 ` Maxime Ripard
2022-04-07 13:45                   ` Maxime Ripard
2022-04-07 13:45                   ` Maxime Ripard
2022-04-08  5:03                   ` Tony Lindgren
2022-04-08  5:03                     ` Tony Lindgren
2022-04-08  5:03                     ` Tony Lindgren
2022-03-31  9:56         ` Marek Szyprowski
2022-03-31  9:56           ` Marek Szyprowski
2022-03-31 10:19           ` Maxime Ripard
2022-03-31 10:19             ` Maxime Ripard

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=14273141.O9o76ZdvQC@steina-w \
    --to=alexander.stein@ew.tq-group.com \
    --cc=dmitry.osipenko@collabora.com \
    --cc=linux-amlogic@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=maxime@cerno.tech \
    --cc=mturquette@baylibre.com \
    --cc=sboyd@kernel.org \
    --cc=tony@atomide.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.