Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1164460
| From | Andy Lutomirski <luto@kernel.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 09/17] staging/lirc_serial: Remove TSC-based timing |
| Date | 2015-06-13 01:50 +0200 |
| Message-ID | <pAGRZ-44S-53@gated-at.bofh.it> (permalink) |
| References | <pAGRX-44S-9@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
It wasn't compiled in by default. I suspect that the driver was and
still is broken, though -- it's calling udelay with a parameter
that's derived from loops_per_jiffy.
Cc: Jarod Wilson <jarod@wilsonet.com>
Cc: devel@driverdev.osuosl.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Andy Lutomirski <luto@kernel.org>
---
drivers/staging/media/lirc/lirc_serial.c | 63 ++------------------------------
1 file changed, 4 insertions(+), 59 deletions(-)
diff --git a/drivers/staging/media/lirc/lirc_serial.c b/drivers/staging/media/lirc/lirc_serial.c
index dc7984455c3a..465796a686c4 100644
--- a/drivers/staging/media/lirc/lirc_serial.c
+++ b/drivers/staging/media/lirc/lirc_serial.c
@@ -327,9 +327,6 @@ static void safe_udelay(unsigned long usecs)
* time
*/
-/* So send_pulse can quickly convert microseconds to clocks */
-static unsigned long conv_us_to_clocks;
-
static int init_timing_params(unsigned int new_duty_cycle,
unsigned int new_freq)
{
@@ -344,7 +341,6 @@ static int init_timing_params(unsigned int new_duty_cycle,
/* How many clocks in a microsecond?, avoiding long long divide */
work = loops_per_sec;
work *= 4295; /* 4295 = 2^32 / 1e6 */
- conv_us_to_clocks = work >> 32;
/*
* Carrier period in clocks, approach good up to 32GHz clock,
@@ -357,10 +353,9 @@ static int init_timing_params(unsigned int new_duty_cycle,
pulse_width = period * duty_cycle / 100;
space_width = period - pulse_width;
dprintk("in init_timing_params, freq=%d, duty_cycle=%d, "
- "clk/jiffy=%ld, pulse=%ld, space=%ld, "
- "conv_us_to_clocks=%ld\n",
+ "clk/jiffy=%ld, pulse=%ld, space=%ld\n",
freq, duty_cycle, __this_cpu_read(cpu_info.loops_per_jiffy),
- pulse_width, space_width, conv_us_to_clocks);
+ pulse_width, space_width);
return 0;
}
#else /* ! USE_RDTSC */
@@ -431,63 +426,14 @@ static long send_pulse_irdeo(unsigned long length)
return ret;
}
-#ifdef USE_RDTSC
-/* Version that uses Pentium rdtsc instruction to measure clocks */
-
-/*
- * This version does sub-microsecond timing using rdtsc instruction,
- * and does away with the fudged LIRC_SERIAL_TRANSMITTER_LATENCY
- * Implicitly i586 architecture... - Steve
- */
-
-static long send_pulse_homebrew_softcarrier(unsigned long length)
-{
- int flag;
- unsigned long target, start, now;
-
- /* Get going quick as we can */
- rdtscl(start);
- on();
- /* Convert length from microseconds to clocks */
- length *= conv_us_to_clocks;
- /* And loop till time is up - flipping at right intervals */
- now = start;
- target = pulse_width;
- flag = 1;
- /*
- * FIXME: This looks like a hard busy wait, without even an occasional,
- * polite, cpu_relax() call. There's got to be a better way?
- *
- * The i2c code has the result of a lot of bit-banging work, I wonder if
- * there's something there which could be helpful here.
- */
- while ((now - start) < length) {
- /* Delay till flip time */
- do {
- rdtscl(now);
- } while ((now - start) < target);
-
- /* flip */
- if (flag) {
- rdtscl(now);
- off();
- target += space_width;
- } else {
- rdtscl(now); on();
- target += pulse_width;
- }
- flag = !flag;
- }
- rdtscl(now);
- return ((now - start) - length) / conv_us_to_clocks;
-}
-#else /* ! USE_RDTSC */
/* Version using udelay() */
/*
* here we use fixed point arithmetic, with 8
* fractional bits. that gets us within 0.1% or so of the right average
* frequency, albeit with some jitter in pulse length - Steve
+ *
+ * This should use ndelay instead.
*/
/* To match 8 fractional bits used for pulse/space length */
@@ -520,7 +466,6 @@ static long send_pulse_homebrew_softcarrier(unsigned long length)
}
return (actual-length) >> 8;
}
-#endif /* USE_RDTSC */
static long send_pulse_homebrew(unsigned long length)
{
--
2.4.2
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 00/17] x86/tsc: Clean up rdtsc helpers Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 13/17] x86/tsc: Rename native_read_tsc() to rdtsc_unordered() Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 16/17] x86/tsc: Use rdtsc_ordered() in check_tsc_warp() and drop extra barriers Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 04/17] x86/tsc: Remove the rdtscp and rdtscpll macros Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 02/17] x86/msr/kvm: Remove vget_cycles() Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 14/17] x86/tsc: Move rdtsc_barrier() and rename it to barrier_before_rdtsc() Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 15/17] x86: Add rdtsc_ordered() and use it in trivial call sites Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 10/17] input/joystick/analog: Switch from rdtscl() to native_read_tsc() Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 07/17] x86/cpu/amd: Use the full 64-bit TSC to detect the 2.6.2 bug Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 11/17] drivers/input/gameport: Replace rdtscl() with native_read_tsc() Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 17/17] x86/tsc: In read_tsc, use rdtsc_ordered() instead of get_cycles() Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 09/17] staging/lirc_serial: Remove TSC-based timing Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 16/17] x86/tsc: Use rdtsc_unordered() in check_tsc_warp() Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 12/17] x86/tsc: Remove rdtscl() Andy Lutomirski <luto@kernel.org> - 2015-06-13 01:50 +0200 [PATCH 03/17] x86/tsc: Replace rdtscll with native_read_tsc Andy Lutomirski <luto@kernel.org> - 2015-06-13 02:00 +0200 [PATCH 01/17] x86/tsc: Inline native_read_tsc and remove __native_read_tsc Andy Lutomirski <luto@kernel.org> - 2015-06-13 02:00 +0200 [PATCH 08/17] baycom_epp: Replace rdtscl() with native_read_tsc() Andy Lutomirski <luto@kernel.org> - 2015-06-13 02:00 +0200 [PATCH 03/17] x86/tsc/paravirt: Remove the read_tsc and read_tscp paravirt hooks Andy Lutomirski <luto@kernel.org> - 2015-06-13 02:00 +0200 [PATCH 05/17] x86/tsc: Remove the rdtscp and rdtscpll macros Andy Lutomirski <luto@kernel.org> - 2015-06-13 02:00 +0200 [PATCH 06/17] x86/tsc: Use the full 64-bit tsc in tsc_delay Andy Lutomirski <luto@kernel.org> - 2015-06-13 02:00 +0200 [PATCH 04/17] x86/tsc: Replace rdtscll with native_read_tsc Andy Lutomirski <luto@kernel.org> - 2015-06-13 02:00 +0200 [PATCH 05/17] x86/tsc/paravirt: Remove the read_tsc and read_tscp paravirt hooks Andy Lutomirski <luto@kernel.org> - 2015-06-13 02:00 +0200
csiph-web