Dear LFGP,
Thanks for your suggestion,
I have slightly modified my execution time measurement logic as below, Now storing end = ktime_get(); variable in imx93_adc_isr as below.
start = ktime_get();
ret = wait_for_completion_interruptible_timeout(&adc->completion,IMX93_ADC_TIMEOUT);
//end = ktime_get();
delta_time_ns = ktime_to_ns(ktime_sub(end, start));
printk(KERN_INFO "Execution time: start, end, delta %lld, %lld, %lld ns\n", start, end, delta_time_ns);
static irqreturn_t imx93_adc_isr(int irq, void *dev_id)
{
struct imx93_adc *adc = dev_id;
u32 isr, eoc, unexpected;
end = ktime_get();
isr = readl(adc->regs + IMX93_ADC_ISR);
if (FIELD_GET(IMX93_ADC_ISR_EOC_ECH_MASK, isr)) {
eoc = isr & IMX93_ADC_ISR_EOC_ECH_MASK;
writel(eoc, adc->regs + IMX93_ADC_ISR);
complete(&adc->completion);
}
unexpected = isr & ~IMX93_ADC_ISR_EOC_ECH_MASK;
if (unexpected) {
writel(unexpected, adc->regs + IMX93_ADC_ISR);
dev_err(adc->dev, "Unexpected interrupt 0x%08x.\n", unexpected);
return IRQ_NONE;
}
return IRQ_HANDLED;
}
Below is time delta of conversion start time and interrupt generation.
cat /sys/bus/iio/devices/iio\:device0/in_voltage0_raw
[12122.109633] Execution time: start, end, delta 12122502929521, 12122502953563, 24042 ns
3775
cat /sys/bus/iio/devices/iio\:device0/in_voltage0_raw
[12166.448276] Execution time: start, end, delta 12166842653231, 12166842689690, 36459 ns
3786
cat /sys/bus/iio/devices/iio\:device0/in_voltage0_raw
[12168.208182] Execution time: start, end, delta 12168602600091, 12168602636592, 36501 ns
3779
1. Here my question is that is it possible to minimize this latency? Because ADC interrupt generation takes too long here.