Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1357362

Re: Export clocks_calc_mult_shift() function

From Murali Karicheri <m-karicheri2@ti.com>
Newsgroups linux.kernel
Subject Re: Export clocks_calc_mult_shift() function
Date 2016-03-14 16:30 +0100
Message-ID <rcCBt-5C6-29@gated-at.bofh.it> (permalink)
References <rayiC-7ah-11@gated-at.bofh.it>
Organization Texas Instruments

Show all headers | View raw


On 03/08/2016 05:25 PM, Murali Karicheri wrote:
> Hi,
> 
> I found a patch posted sometime back to export the clocksource
> function clocks_calc_mult_shift() so that it can be called by
> drivers that are dynamically loadable. I have not seen any
> comment against this. Wondering why this is not merged. We require
> this function exported for use in our driver as well. Can you merge
> the patch please. Or do you suggest me to repost the same?
> 
> http://lkml.iu.edu/hypermail/linux/kernel/1502.2/01641.html
> 
> Thanks
> 
John,

Some reason, your response didn't make into my inbox. So I am 
reproducing it below.

>Why would the clocksource driver need to calculate the hz/shift value
>instead of using the clocksource_register_hz/khz functions?
>
>thanks
>-john

John,

In this use case, the timestamp for Tx/Rx is generated by a firmware
that attach the timestamp raw count to the packet meta data when the
same is received from the Packet Accelerator h/w at the ingress.
We need to convert this raw count value to nano second and use a code
like this.

/* Convert a raw PA timer count to nanoseconds
 */
static inline u64 tstamp_raw_to_ns(struct pa_core_device *core_dev, u32 lo,
                                   u32 hi)
{
        u32 mult = core_dev->timestamp_info.mult;
        u32 shift = core_dev->timestamp_info.shift;
        u64 result;

        /* Minimize overflow errors by doing this in pieces */
        result  = ((u64)lo * mult) >> shift;
        result += ((u64)hi << (32 - shift)) * mult;

        return result;
}

The mult, shift values are obtained using the existing clocks_calc_mult_shift()
that will not work, if our driver is built as a dynamically loadable module
as the symbol is not exported. 

Is there an alternative way of doing this without exporting this function. 
clocksource_register_hz/khz() can't help in this, right?

-- 
Murali Karicheri
Linux Kernel, Keystone

Back to linux.kernel | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

Export clocks_calc_mult_shift() function Murali Karicheri <m-karicheri2@ti.com> - 2016-03-08 23:30 +0100
  Re: Export clocks_calc_mult_shift() function John Stultz <john.stultz@linaro.org> - 2016-03-09 00:00 +0100
  Re: Export clocks_calc_mult_shift() function Murali Karicheri <m-karicheri2@ti.com> - 2016-03-14 16:30 +0100

csiph-web