RE: [linux-next:master 1582/5027] drivers/counter/rz-mtu3-cnt.c:602: undefined reference to `rz_mtu3_shared_reg_update_bit'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi kernel test robot,

This should be fixed by [1]

[1] https://lore.kernel.org/all/20230719090430.1925182-1-arnd@xxxxxxxxxx/

Can you please try after applying this patch?

Cheers,
Biju

> Subject: [linux-next:master 1582/5027] drivers/counter/rz-mtu3-
> cnt.c:602: undefined reference to `rz_mtu3_shared_reg_update_bit'
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new
> version of the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@xxxxxxxxx>
> | Closes:
> 
> All errors (new ones prefixed by >>):
> 
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_ext_input_phase_clock_select_set':
> >> drivers/counter/rz-mtu3-cnt.c:602: undefined reference to
> `rz_mtu3_shared_reg_update_bit'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_cascade_counts_enable_set':
>    drivers/counter/rz-mtu3-cnt.c:563: undefined reference to
> `rz_mtu3_shared_reg_update_bit'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_ext_input_phase_clock_select_get':
> >> drivers/counter/rz-mtu3-cnt.c:583: undefined reference to
> `rz_mtu3_shared_reg_read'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_cascade_counts_enable_get':
>    drivers/counter/rz-mtu3-cnt.c:544: undefined reference to
> `rz_mtu3_shared_reg_read'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_lock_if_counter_is_valid':
>    drivers/counter/rz-mtu3-cnt.c:111: undefined reference to
> `rz_mtu3_shared_reg_read'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_direction_read':
> >> drivers/counter/rz-mtu3-cnt.c:304: undefined reference to
> `rz_mtu3_8bit_ch_read'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_function_write':
> >> drivers/counter/rz-mtu3-cnt.c:283: undefined reference to
> `rz_mtu3_8bit_ch_write'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_function_read':
>    drivers/counter/rz-mtu3-cnt.c:208: undefined reference to
> `rz_mtu3_8bit_ch_read'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_write':
> >> drivers/counter/rz-mtu3-cnt.c:194: undefined reference to
> `rz_mtu3_16bit_ch_write'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:192: undefined reference
> to `rz_mtu3_32bit_ch_write'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_read':
> >> drivers/counter/rz-mtu3-cnt.c:172: undefined reference to
> `rz_mtu3_16bit_ch_read'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:170: undefined reference
> to `rz_mtu3_32bit_ch_read'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_enable_read':
> >> drivers/counter/rz-mtu3-cnt.c:488: undefined reference to
> `rz_mtu3_is_enabled'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:486: undefined reference
> to `rz_mtu3_is_enabled'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:486: undefined reference
> to `rz_mtu3_is_enabled'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_ceiling_write':
>    drivers/counter/rz-mtu3-cnt.c:384: undefined reference to
> `rz_mtu3_16bit_ch_write'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:386: undefined reference
> to `rz_mtu3_8bit_ch_write'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:382: undefined reference
> to `rz_mtu3_32bit_ch_write'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_action_read':
>    drivers/counter/rz-mtu3-cnt.c:208: undefined reference to
> `rz_mtu3_8bit_ch_read'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:653: undefined reference
> to `rz_mtu3_shared_reg_read'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_initialize_counter':
>    drivers/counter/rz-mtu3-cnt.c:413: undefined reference to
> `rz_mtu3_8bit_ch_write'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:415: undefined reference
> to `rz_mtu3_8bit_ch_write'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:416: undefined reference
> to `rz_mtu3_8bit_ch_write'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:417: undefined reference
> to `rz_mtu3_enable'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:399: undefined reference
> to `rz_mtu3_8bit_ch_write'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:401: undefined reference
> to `rz_mtu3_8bit_ch_write'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:402: undefined reference
> to `rz_mtu3_8bit_ch_write'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:404: undefined reference
> to `rz_mtu3_enable'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:405: undefined reference
> to `rz_mtu3_enable'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.o: in function
> `rz_mtu3_count_enable_write':
> >> drivers/counter/rz-mtu3-cnt.c:468: undefined reference to
> `rz_mtu3_disable'
> >> hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:464: undefined reference
> to `rz_mtu3_disable'
>    hppa-linux-ld: drivers/counter/rz-mtu3-cnt.c:465: undefined reference
> to `rz_mtu3_disable'
> 
> 
> vim +602 drivers/counter/rz-mtu3-cnt.c
> 
> 0be8907359df4c6 Biju Das 2023-03-30  407
> 0be8907359df4c6 Biju Das 2023-03-30  408  static void
> rz_mtu3_16bit_cnt_setting(struct counter_device *counter, int id)
> 0be8907359df4c6 Biju Das 2023-03-30  409  {
> 0be8907359df4c6 Biju Das 2023-03-30  410  	struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, id);
> 0be8907359df4c6 Biju Das 2023-03-30  411
> 0be8907359df4c6 Biju Das 2023-03-30  412  	/* Phase counting mode 1
> is used as default in initialization. */
> 0be8907359df4c6 Biju Das 2023-03-30  413  	rz_mtu3_8bit_ch_write(ch,
> RZ_MTU3_TMDR1, RZ_MTU3_TMDR1_PH_CNT_MODE_1);
> 0be8907359df4c6 Biju Das 2023-03-30  414
> 0be8907359df4c6 Biju Das 2023-03-30  415  	rz_mtu3_8bit_ch_write(ch,
> RZ_MTU3_TCR, RZ_MTU3_TCR_CCLR_TGRA);
> 0be8907359df4c6 Biju Das 2023-03-30  416  	rz_mtu3_8bit_ch_write(ch,
> RZ_MTU3_TIOR, RZ_MTU3_TIOR_NO_OUTPUT);
> 0be8907359df4c6 Biju Das 2023-03-30 @417  	rz_mtu3_enable(ch);
> 0be8907359df4c6 Biju Das 2023-03-30  418  }
> 0be8907359df4c6 Biju Das 2023-03-30  419
> 0be8907359df4c6 Biju Das 2023-03-30  420  static int
> rz_mtu3_initialize_counter(struct counter_device *counter, int id)
> 0be8907359df4c6 Biju Das 2023-03-30  421  {
> 0be8907359df4c6 Biju Das 2023-03-30  422  	struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, id);
> 0be8907359df4c6 Biju Das 2023-03-30  423  	struct rz_mtu3_channel
> *const ch1 = rz_mtu3_get_ch(counter, 0);
> 0be8907359df4c6 Biju Das 2023-03-30  424  	struct rz_mtu3_channel
> *const ch2 = rz_mtu3_get_ch(counter, 1);
> 0be8907359df4c6 Biju Das 2023-03-30  425
> 0be8907359df4c6 Biju Das 2023-03-30  426  	switch (id) {
> 0be8907359df4c6 Biju Das 2023-03-30  427  	case
> RZ_MTU3_16_BIT_MTU1_CH:
> 0be8907359df4c6 Biju Das 2023-03-30  428  	case
> RZ_MTU3_16_BIT_MTU2_CH:
> 0be8907359df4c6 Biju Das 2023-03-30  429  		if
> (!rz_mtu3_request_channel(ch))
> 0be8907359df4c6 Biju Das 2023-03-30  430  			return -
> EBUSY;
> 0be8907359df4c6 Biju Das 2023-03-30  431
> 0be8907359df4c6 Biju Das 2023-03-30  432
> 	rz_mtu3_16bit_cnt_setting(counter, id);
> 0be8907359df4c6 Biju Das 2023-03-30  433  		return 0;
> 0be8907359df4c6 Biju Das 2023-03-30  434  	case RZ_MTU3_32_BIT_CH:
> 0be8907359df4c6 Biju Das 2023-03-30  435  		/*
> 0be8907359df4c6 Biju Das 2023-03-30  436  		 * 32-bit phase
> counting need MTU1 and MTU2 to create 32-bit
> 0be8907359df4c6 Biju Das 2023-03-30  437  		 * cascade counter.
> 0be8907359df4c6 Biju Das 2023-03-30  438  		 */
> 0be8907359df4c6 Biju Das 2023-03-30  439  		if
> (!rz_mtu3_request_channel(ch1))
> 0be8907359df4c6 Biju Das 2023-03-30  440  			return -
> EBUSY;
> 0be8907359df4c6 Biju Das 2023-03-30  441
> 0be8907359df4c6 Biju Das 2023-03-30  442  		if
> (!rz_mtu3_request_channel(ch2)) {
> 0be8907359df4c6 Biju Das 2023-03-30  443
> 	rz_mtu3_release_channel(ch1);
> 0be8907359df4c6 Biju Das 2023-03-30  444  			return -
> EBUSY;
> 0be8907359df4c6 Biju Das 2023-03-30  445  		}
> 0be8907359df4c6 Biju Das 2023-03-30  446
> 0be8907359df4c6 Biju Das 2023-03-30  447
> 	rz_mtu3_32bit_cnt_setting(counter);
> 0be8907359df4c6 Biju Das 2023-03-30  448  		return 0;
> 0be8907359df4c6 Biju Das 2023-03-30  449  	default:
> 0be8907359df4c6 Biju Das 2023-03-30  450  		/* should never
> reach this path */
> 0be8907359df4c6 Biju Das 2023-03-30  451  		return -EINVAL;
> 0be8907359df4c6 Biju Das 2023-03-30  452  	}
> 0be8907359df4c6 Biju Das 2023-03-30  453  }
> 0be8907359df4c6 Biju Das 2023-03-30  454
> 0be8907359df4c6 Biju Das 2023-03-30  455  static void
> rz_mtu3_terminate_counter(struct counter_device *counter, int id)
> 0be8907359df4c6 Biju Das 2023-03-30  456  {
> 0be8907359df4c6 Biju Das 2023-03-30  457  	struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, id);
> 0be8907359df4c6 Biju Das 2023-03-30  458  	struct rz_mtu3_channel
> *const ch1 = rz_mtu3_get_ch(counter, 0);
> 0be8907359df4c6 Biju Das 2023-03-30  459  	struct rz_mtu3_channel
> *const ch2 = rz_mtu3_get_ch(counter, 1);
> 0be8907359df4c6 Biju Das 2023-03-30  460
> 0be8907359df4c6 Biju Das 2023-03-30  461  	if (id ==
> RZ_MTU3_32_BIT_CH) {
> 0be8907359df4c6 Biju Das 2023-03-30  462
> 	rz_mtu3_release_channel(ch2);
> 0be8907359df4c6 Biju Das 2023-03-30  463
> 	rz_mtu3_release_channel(ch1);
> 0be8907359df4c6 Biju Das 2023-03-30 @464
> 	rz_mtu3_disable(ch2);
> 0be8907359df4c6 Biju Das 2023-03-30  465
> 	rz_mtu3_disable(ch1);
> 0be8907359df4c6 Biju Das 2023-03-30  466  	} else {
> 0be8907359df4c6 Biju Das 2023-03-30  467
> 	rz_mtu3_release_channel(ch);
> 0be8907359df4c6 Biju Das 2023-03-30 @468
> 	rz_mtu3_disable(ch);
> 0be8907359df4c6 Biju Das 2023-03-30  469  	}
> 0be8907359df4c6 Biju Das 2023-03-30  470  }
> 0be8907359df4c6 Biju Das 2023-03-30  471
> 0be8907359df4c6 Biju Das 2023-03-30  472  static int
> rz_mtu3_count_enable_read(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30  473
> struct counter_count *count, u8 *enable)
> 0be8907359df4c6 Biju Das 2023-03-30  474  {
> 0be8907359df4c6 Biju Das 2023-03-30  475  	struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30  476  	struct rz_mtu3_channel
> *const ch1 = rz_mtu3_get_ch(counter, 0);
> 0be8907359df4c6 Biju Das 2023-03-30  477  	struct rz_mtu3_channel
> *const ch2 = rz_mtu3_get_ch(counter, 1);
> 0be8907359df4c6 Biju Das 2023-03-30  478  	struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30  479  	int ret;
> 0be8907359df4c6 Biju Das 2023-03-30  480
> 0be8907359df4c6 Biju Das 2023-03-30  481  	ret =
> rz_mtu3_lock_if_count_is_enabled(ch, priv, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30  482  	if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30  483  		return ret;
> 0be8907359df4c6 Biju Das 2023-03-30  484
> 0be8907359df4c6 Biju Das 2023-03-30  485  	if (count->id ==
> RZ_MTU3_32_BIT_CH)
> 0be8907359df4c6 Biju Das 2023-03-30 @486  		*enable =
> rz_mtu3_is_enabled(ch1) && rz_mtu3_is_enabled(ch2);
> 0be8907359df4c6 Biju Das 2023-03-30  487  	else
> 0be8907359df4c6 Biju Das 2023-03-30 @488  		*enable =
> rz_mtu3_is_enabled(ch);
> 0be8907359df4c6 Biju Das 2023-03-30  489
> 0be8907359df4c6 Biju Das 2023-03-30  490  	mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  491
> 0be8907359df4c6 Biju Das 2023-03-30  492  	return 0;
> 0be8907359df4c6 Biju Das 2023-03-30  493  }
> 0be8907359df4c6 Biju Das 2023-03-30  494
> 0be8907359df4c6 Biju Das 2023-03-30  495  static int
> rz_mtu3_count_enable_write(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30  496
> struct counter_count *count, u8 enable)
> 0be8907359df4c6 Biju Das 2023-03-30  497  {
> 0be8907359df4c6 Biju Das 2023-03-30  498  	struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30  499  	struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30  500  	int ret = 0;
> 0be8907359df4c6 Biju Das 2023-03-30  501
> 0be8907359df4c6 Biju Das 2023-03-30  502  	if (enable) {
> 0be8907359df4c6 Biju Das 2023-03-30  503
> 	pm_runtime_get_sync(ch->dev);
> 0be8907359df4c6 Biju Das 2023-03-30  504  		mutex_lock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  505  		ret =
> rz_mtu3_initialize_counter(counter, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30  506  		if (ret == 0)
> 0be8907359df4c6 Biju Das 2023-03-30  507  			priv-
> >count_is_enabled[count->id] = true;
> 0be8907359df4c6 Biju Das 2023-03-30  508  		mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  509  	} else {
> 0be8907359df4c6 Biju Das 2023-03-30  510  		mutex_lock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  511
> 	rz_mtu3_terminate_counter(counter, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30  512  		priv-
> >count_is_enabled[count->id] = false;
> 0be8907359df4c6 Biju Das 2023-03-30  513  		mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  514  		pm_runtime_put(ch-
> >dev);
> 0be8907359df4c6 Biju Das 2023-03-30  515  	}
> 0be8907359df4c6 Biju Das 2023-03-30  516
> 0be8907359df4c6 Biju Das 2023-03-30  517  	return ret;
> 0be8907359df4c6 Biju Das 2023-03-30  518  }
> 0be8907359df4c6 Biju Das 2023-03-30  519
> 0be8907359df4c6 Biju Das 2023-03-30  520  static int
> rz_mtu3_lock_if_ch0_is_enabled(struct rz_mtu3_cnt *const priv)
> 0be8907359df4c6 Biju Das 2023-03-30  521  {
> 0be8907359df4c6 Biju Das 2023-03-30  522  	mutex_lock(&priv->lock);
> 0be8907359df4c6 Biju Das 2023-03-30  523  	if (priv->ch->is_busy
> && !(priv->count_is_enabled[RZ_MTU3_16_BIT_MTU1_CH] ||
> 0be8907359df4c6 Biju Das 2023-03-30  524
> priv->count_is_enabled[RZ_MTU3_32_BIT_CH])) {
> 0be8907359df4c6 Biju Das 2023-03-30  525  		mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  526  		return -EINVAL;
> 0be8907359df4c6 Biju Das 2023-03-30  527  	}
> 0be8907359df4c6 Biju Das 2023-03-30  528
> 0be8907359df4c6 Biju Das 2023-03-30  529  	return 0;
> 0be8907359df4c6 Biju Das 2023-03-30  530  }
> 0be8907359df4c6 Biju Das 2023-03-30  531
> 0be8907359df4c6 Biju Das 2023-03-30  532  static int
> rz_mtu3_cascade_counts_enable_get(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30  533
> u8 *cascade_enable)
> 0be8907359df4c6 Biju Das 2023-03-30  534  {
> 0be8907359df4c6 Biju Das 2023-03-30  535  	struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30  536  	unsigned long tmdr;
> 0be8907359df4c6 Biju Das 2023-03-30  537  	int ret;
> 0be8907359df4c6 Biju Das 2023-03-30  538
> 0be8907359df4c6 Biju Das 2023-03-30  539  	ret =
> rz_mtu3_lock_if_ch0_is_enabled(priv);
> 0be8907359df4c6 Biju Das 2023-03-30  540  	if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30  541  		return ret;
> 0be8907359df4c6 Biju Das 2023-03-30  542
> 0be8907359df4c6 Biju Das 2023-03-30  543  	pm_runtime_get_sync(priv-
> >ch->dev);
> 0be8907359df4c6 Biju Das 2023-03-30  544  	tmdr =
> rz_mtu3_shared_reg_read(priv->ch, RZ_MTU3_TMDR3);
> 0be8907359df4c6 Biju Das 2023-03-30  545  	pm_runtime_put(priv->ch-
> >dev);
> 0be8907359df4c6 Biju Das 2023-03-30  546  	*cascade_enable =
> test_bit(RZ_MTU3_TMDR3_LWA, &tmdr);
> 0be8907359df4c6 Biju Das 2023-03-30  547  	mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  548
> 0be8907359df4c6 Biju Das 2023-03-30  549  	return 0;
> 0be8907359df4c6 Biju Das 2023-03-30  550  }
> 0be8907359df4c6 Biju Das 2023-03-30  551
> 0be8907359df4c6 Biju Das 2023-03-30  552  static int
> rz_mtu3_cascade_counts_enable_set(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30  553
> u8 cascade_enable)
> 0be8907359df4c6 Biju Das 2023-03-30  554  {
> 0be8907359df4c6 Biju Das 2023-03-30  555  	struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30  556  	int ret;
> 0be8907359df4c6 Biju Das 2023-03-30  557
> 0be8907359df4c6 Biju Das 2023-03-30  558  	ret =
> rz_mtu3_lock_if_ch0_is_enabled(priv);
> 0be8907359df4c6 Biju Das 2023-03-30  559  	if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30  560  		return ret;
> 0be8907359df4c6 Biju Das 2023-03-30  561
> 0be8907359df4c6 Biju Das 2023-03-30  562  	pm_runtime_get_sync(priv-
> >ch->dev);
> 0be8907359df4c6 Biju Das 2023-03-30  563
> 	rz_mtu3_shared_reg_update_bit(priv->ch, RZ_MTU3_TMDR3,
> 0be8907359df4c6 Biju Das 2023-03-30  564
> RZ_MTU3_TMDR3_LWA, cascade_enable);
> 0be8907359df4c6 Biju Das 2023-03-30  565  	pm_runtime_put(priv->ch-
> >dev);
> 0be8907359df4c6 Biju Das 2023-03-30  566  	mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  567
> 0be8907359df4c6 Biju Das 2023-03-30  568  	return 0;
> 0be8907359df4c6 Biju Das 2023-03-30  569  }
> 0be8907359df4c6 Biju Das 2023-03-30  570
> 0be8907359df4c6 Biju Das 2023-03-30  571  static int
> rz_mtu3_ext_input_phase_clock_select_get(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30  572
> 	    u32 *ext_input_phase_clock_select)
> 0be8907359df4c6 Biju Das 2023-03-30  573  {
> 0be8907359df4c6 Biju Das 2023-03-30  574  	struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30  575  	unsigned long tmdr;
> 0be8907359df4c6 Biju Das 2023-03-30  576  	int ret;
> 0be8907359df4c6 Biju Das 2023-03-30  577
> 0be8907359df4c6 Biju Das 2023-03-30  578  	ret =
> rz_mtu3_lock_if_ch0_is_enabled(priv);
> 0be8907359df4c6 Biju Das 2023-03-30  579  	if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30  580  		return ret;
> 0be8907359df4c6 Biju Das 2023-03-30  581
> 0be8907359df4c6 Biju Das 2023-03-30  582  	pm_runtime_get_sync(priv-
> >ch->dev);
> 0be8907359df4c6 Biju Das 2023-03-30 @583  	tmdr =
> rz_mtu3_shared_reg_read(priv->ch, RZ_MTU3_TMDR3);
> 0be8907359df4c6 Biju Das 2023-03-30  584  	pm_runtime_put(priv->ch-
> >dev);
> 0be8907359df4c6 Biju Das 2023-03-30  585
> 	*ext_input_phase_clock_select = test_bit(RZ_MTU3_TMDR3_PHCKSEL,
> &tmdr);
> 0be8907359df4c6 Biju Das 2023-03-30  586  	mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  587
> 0be8907359df4c6 Biju Das 2023-03-30  588  	return 0;
> 0be8907359df4c6 Biju Das 2023-03-30  589  }
> 0be8907359df4c6 Biju Das 2023-03-30  590
> 0be8907359df4c6 Biju Das 2023-03-30  591  static int
> rz_mtu3_ext_input_phase_clock_select_set(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30  592
> 	    u32 ext_input_phase_clock_select)
> 0be8907359df4c6 Biju Das 2023-03-30  593  {
> 0be8907359df4c6 Biju Das 2023-03-30  594  	struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30  595  	int ret;
> 0be8907359df4c6 Biju Das 2023-03-30  596
> 0be8907359df4c6 Biju Das 2023-03-30  597  	ret =
> rz_mtu3_lock_if_ch0_is_enabled(priv);
> 0be8907359df4c6 Biju Das 2023-03-30  598  	if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30  599  		return ret;
> 0be8907359df4c6 Biju Das 2023-03-30  600
> 0be8907359df4c6 Biju Das 2023-03-30  601  	pm_runtime_get_sync(priv-
> >ch->dev);
> 0be8907359df4c6 Biju Das 2023-03-30 @602
> 	rz_mtu3_shared_reg_update_bit(priv->ch, RZ_MTU3_TMDR3,
> 0be8907359df4c6 Biju Das 2023-03-30  603
> RZ_MTU3_TMDR3_PHCKSEL,
> 0be8907359df4c6 Biju Das 2023-03-30  604
> ext_input_phase_clock_select);
> 0be8907359df4c6 Biju Das 2023-03-30  605  	pm_runtime_put(priv->ch-
> >dev);
> 0be8907359df4c6 Biju Das 2023-03-30  606  	mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  607
> 0be8907359df4c6 Biju Das 2023-03-30  608  	return 0;
> 0be8907359df4c6 Biju Das 2023-03-30  609  }
> 0be8907359df4c6 Biju Das 2023-03-30  610
> 0be8907359df4c6 Biju Das 2023-03-30  611  static struct counter_comp
> rz_mtu3_count_ext[] = {
> 0be8907359df4c6 Biju Das 2023-03-30  612
> 	COUNTER_COMP_DIRECTION(rz_mtu3_count_direction_read),
> 0be8907359df4c6 Biju Das 2023-03-30  613
> 	COUNTER_COMP_ENABLE(rz_mtu3_count_enable_read,
> 0be8907359df4c6 Biju Das 2023-03-30  614
> rz_mtu3_count_enable_write),
> 0be8907359df4c6 Biju Das 2023-03-30  615
> 	COUNTER_COMP_CEILING(rz_mtu3_count_ceiling_read,
> 0be8907359df4c6 Biju Das 2023-03-30  616
> rz_mtu3_count_ceiling_write),
> 0be8907359df4c6 Biju Das 2023-03-30  617  };
> 0be8907359df4c6 Biju Das 2023-03-30  618
> 0be8907359df4c6 Biju Das 2023-03-30  619  static const enum
> counter_synapse_action rz_mtu3_synapse_actions[] = {
> 0be8907359df4c6 Biju Das 2023-03-30  620
> 	COUNTER_SYNAPSE_ACTION_BOTH_EDGES,
> 0be8907359df4c6 Biju Das 2023-03-30  621
> 	COUNTER_SYNAPSE_ACTION_RISING_EDGE,
> 0be8907359df4c6 Biju Das 2023-03-30  622
> 	COUNTER_SYNAPSE_ACTION_NONE,
> 0be8907359df4c6 Biju Das 2023-03-30  623  };
> 0be8907359df4c6 Biju Das 2023-03-30  624
> 0be8907359df4c6 Biju Das 2023-03-30  625  static int
> rz_mtu3_action_read(struct counter_device *counter,
> 0be8907359df4c6 Biju Das 2023-03-30  626  			       struct
> counter_count *count,
> 0be8907359df4c6 Biju Das 2023-03-30  627  			       struct
> counter_synapse *synapse,
> 0be8907359df4c6 Biju Das 2023-03-30  628  			       enum
> counter_synapse_action *action)
> 0be8907359df4c6 Biju Das 2023-03-30  629  {
> 0be8907359df4c6 Biju Das 2023-03-30  630  	const bool is_signal_ab =
> (synapse->signal->id == SIGNAL_A_ID) ||
> 0be8907359df4c6 Biju Das 2023-03-30  631
> (synapse->signal->id == SIGNAL_B_ID);
> 0be8907359df4c6 Biju Das 2023-03-30  632  	struct rz_mtu3_channel
> *const ch = rz_mtu3_get_ch(counter, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30  633  	struct rz_mtu3_cnt *const
> priv = counter_priv(counter);
> 0be8907359df4c6 Biju Das 2023-03-30  634  	enum counter_function
> function;
> 0be8907359df4c6 Biju Das 2023-03-30  635  	bool mtclkc_mtclkd;
> 0be8907359df4c6 Biju Das 2023-03-30  636  	unsigned long tmdr;
> 0be8907359df4c6 Biju Das 2023-03-30  637  	int ret;
> 0be8907359df4c6 Biju Das 2023-03-30  638
> 0be8907359df4c6 Biju Das 2023-03-30  639  	ret =
> rz_mtu3_lock_if_count_is_enabled(ch, priv, count->id);
> 0be8907359df4c6 Biju Das 2023-03-30  640  	if (ret)
> 0be8907359df4c6 Biju Das 2023-03-30  641  		return ret;
> 0be8907359df4c6 Biju Das 2023-03-30  642
> 0be8907359df4c6 Biju Das 2023-03-30  643  	ret =
> rz_mtu3_count_function_read_helper(ch, priv, &function);
> 0be8907359df4c6 Biju Das 2023-03-30  644  	if (ret) {
> 0be8907359df4c6 Biju Das 2023-03-30  645  		mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  646  		return ret;
> 0be8907359df4c6 Biju Das 2023-03-30  647  	}
> 0be8907359df4c6 Biju Das 2023-03-30  648
> 0be8907359df4c6 Biju Das 2023-03-30  649  	/* Default action mode */
> 0be8907359df4c6 Biju Das 2023-03-30  650  	*action =
> COUNTER_SYNAPSE_ACTION_NONE;
> 0be8907359df4c6 Biju Das 2023-03-30  651
> 0be8907359df4c6 Biju Das 2023-03-30  652  	if (count->id !=
> RZ_MTU3_16_BIT_MTU1_CH) {
> 0be8907359df4c6 Biju Das 2023-03-30 @653  		tmdr =
> rz_mtu3_shared_reg_read(priv->ch, RZ_MTU3_TMDR3);
> 0be8907359df4c6 Biju Das 2023-03-30  654  		mtclkc_mtclkd =
> test_bit(RZ_MTU3_TMDR3_PHCKSEL, &tmdr);
> 0be8907359df4c6 Biju Das 2023-03-30  655  		if ((mtclkc_mtclkd
> && is_signal_ab) ||
> 0be8907359df4c6 Biju Das 2023-03-30  656  		    (!mtclkc_mtclkd
> && !is_signal_ab)) {
> 0be8907359df4c6 Biju Das 2023-03-30  657
> 	mutex_unlock(&priv->lock);
> 0be8907359df4c6 Biju Das 2023-03-30  658  			return 0;
> 0be8907359df4c6 Biju Das 2023-03-30  659  		}
> 0be8907359df4c6 Biju Das 2023-03-30  660  	}
> 0be8907359df4c6 Biju Das 2023-03-30  661
> 0be8907359df4c6 Biju Das 2023-03-30  662  	switch (function) {
> 0be8907359df4c6 Biju Das 2023-03-30  663  	case
> COUNTER_FUNCTION_PULSE_DIRECTION:
> 0be8907359df4c6 Biju Das 2023-03-30  664  		/*
> 0be8907359df4c6 Biju Das 2023-03-30  665  		 * Rising edges on
> signal A (signal C) updates the respective
> 0be8907359df4c6 Biju Das 2023-03-30  666  		 * count. The input
> level of signal B (signal D) determines
> 0be8907359df4c6 Biju Das 2023-03-30  667  		 * direction.
> 0be8907359df4c6 Biju Das 2023-03-30  668  		 */
> 0be8907359df4c6 Biju Das 2023-03-30  669  		if (synapse-
> >signal->id == SIGNAL_A_ID ||
> 0be8907359df4c6 Biju Das 2023-03-30  670  		    synapse-
> >signal->id == SIGNAL_C_ID)
> 0be8907359df4c6 Biju Das 2023-03-30  671  			*action =
> COUNTER_SYNAPSE_ACTION_RISING_EDGE;
> 0be8907359df4c6 Biju Das 2023-03-30  672  		break;
> 0be8907359df4c6 Biju Das 2023-03-30  673  	case
> COUNTER_FUNCTION_QUADRATURE_X2_B:
> 0be8907359df4c6 Biju Das 2023-03-30  674  		/*
> 0be8907359df4c6 Biju Das 2023-03-30  675  		 * Any state
> transition on quadrature pair signal B (signal D)
> 0be8907359df4c6 Biju Das 2023-03-30  676  		 * updates the
> respective count.
> 0be8907359df4c6 Biju Das 2023-03-30  677  		 */
> 0be8907359df4c6 Biju Das 2023-03-30  678  		if (synapse-
> >signal->id == SIGNAL_B_ID ||
> 0be8907359df4c6 Biju Das 2023-03-30  679  		    synapse-
> >signal->id == SIGNAL_D_ID)
> 0be8907359df4c6 Biju Das 2023-03-30  680  			*action =
> COUNTER_SYNAPSE_ACTION_BOTH_EDGES;
> 0be8907359df4c6 Biju Das 2023-03-30  681  		break;
> 0be8907359df4c6 Biju Das 2023-03-30  682  	case
> COUNTER_FUNCTION_QUADRATURE_X4:
> 0be8907359df4c6 Biju Das 2023-03-30  683  		/* counts up/down
> on both edges of A (C)  and B (D) signal */
> 0be8907359df4c6 Biju Das 2023-03-30  684  		*action =
> COUNTER_SYNAPSE_ACTION_BOTH_EDGES;
> 0be8907359df4c6 Biju Das 2023-03-30  685  		break;
> 0be8907359df4c6 Biju Das 2023-03-30  686  	default:
> 0be8907359df4c6 Biju Das 2023-03-30  687  		/* should never
> reach this path */
> 0be8907359df4c6 Biju Das 2023-03-30  688  		mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  689  		return -EINVAL;
> 0be8907359df4c6 Biju Das 2023-03-30  690  	}
> 0be8907359df4c6 Biju Das 2023-03-30  691
> 0be8907359df4c6 Biju Das 2023-03-30  692  	mutex_unlock(&priv-
> >lock);
> 0be8907359df4c6 Biju Das 2023-03-30  693
> 0be8907359df4c6 Biju Das 2023-03-30  694  	return 0;
> 0be8907359df4c6 Biju Das 2023-03-30  695  }
> 0be8907359df4c6 Biju Das 2023-03-30  696
> 
> :::::: The code at line 602 was first introduced by commit
> :::::: 0be8907359df4c62319f5cb2c6981ff0d9ebf35a counter: Add Renesas
> RZ/G2L MTU3a counter driver
> 
> :::::: TO: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
> :::::: CC: Lee Jones <lee@xxxxxxxxxx>






[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux