linux/arch/blackfin
Mike Frysinger eed7b83658 Blackfin: dpmc: optimize hibernate/resume path
The current save logic used in hibernation is to do a MMR load (base +
offset) into a register, and then push that onto the stack.  Then when
restoring, pop off the stack into a register followed by a MMR store
(base + offset).  These use plenty of 32bit insns rather than 16bit,
are pretty long winded, and full of pipeline bubbles.

So, by taking advantage of MMRs that are contiguous, the multi-register
push/pop insn, and register abuse, we can shrink this code considerably.

When saving, the new logic does a lot of loads into the data and pointer
registers before executing a single multi-register push insn.  Then when
restoring, we do a single multi-register pop insn followed by a lot of
stores.  Overall, this allows us to cut the insn count by ~30%, the code
size by ~45%, and drastically reduce the register hazards that trigger
bubbles in the pipeline.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-07-23 01:18:29 -04:00
..
boot Blackfin: encode cpu-rev into uImage name 2011-01-10 07:18:27 -05:00
configs Blackfin: bf561-ezkit: change parallel flash from M to Y in defconfig 2011-07-23 01:18:17 -04:00
include Blackfin: dpmc: optimize hibernate/resume path 2011-07-23 01:18:29 -04:00
kernel Blackfin: debug-mmrs: generalize pint logic 2011-07-23 01:18:26 -04:00
lib Blackfin: strncpy: fix handling of zero lengths 2011-06-03 11:05:36 -04:00
mach-bf518 Blackfin: update anomaly lists to latest public info 2011-07-23 01:18:18 -04:00
mach-bf527 Blackfin: update anomaly lists to latest public info 2011-07-23 01:18:18 -04:00
mach-bf533 Blackfin: update anomaly lists to latest public info 2011-07-23 01:18:18 -04:00
mach-bf537 Blackfin: update anomaly lists to latest public info 2011-07-23 01:18:18 -04:00
mach-bf538 Blackfin: update anomaly lists to latest public info 2011-07-23 01:18:18 -04:00
mach-bf548 Blackfin: gpio/ints: generalize pint logic 2011-07-23 01:18:27 -04:00
mach-bf561 Blackfin: gpio: punt unused GPIO_# defines 2011-07-23 01:18:24 -04:00
mach-common Blackfin: dpmc: optimize hibernate/resume path 2011-07-23 01:18:29 -04:00
mm Merge branch 'tip/perf/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into perf/urgent 2011-05-27 14:28:09 +02:00
oprofile Blackfin arch: remove hardware PM code, oprofile not use it 2009-01-07 23:14:39 +08:00
ADI_BSD.txt Blackfin: mass clean up of copyright/licensing info 2009-10-07 04:36:26 -04:00
Kconfig Blackfin: pwm: implement linux/pwm.h API 2011-07-23 01:18:23 -04:00
Kconfig.debug Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier/blackfin 2011-05-25 15:34:14 -07:00
Makefile Blackfin: encode cpu-rev into uImage name 2011-01-10 07:18:27 -05:00