summaryrefslogtreecommitdiffstats
path: root/arch/blackfin/mach-common
Commit message (Collapse)AuthorAgeFilesLines
* Blackfin: improve double fault debug handlingGraf Yang2009-09-162-13/+17
| | | | | | | | | | | | | | Since the hardware only provides reporting for the last exception handled, and the values are valid only when executing the exception handler, we need to save the context for reporting at a later point. While we do this for one exception, it doesn't work properly when handling a second one as the original exception is clobbered by the double fault. So when double fault debugging is enabled, create a dedicated shadow of these values and save/restore out of there. Now the crash report properly displays the first exception as well as the second one. Signed-off-by: Graf Yang <graf.yang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: catch hardware errors earlier during bootingRobin Getz2009-09-161-0/+11
| | | | | | | | | | | | | | | | | | Allow hardware errors to be caught during early portions of booting, and leave something in the shadow console that people can use to debug their system with (to be printed out by the bootloader on next reset). This enables the hardare error interrupts in head.S, allowing us to find hardware errors when they happen (well, as much as you can with a hardware error) and prints out the trace if it is enabled. This will catch errors (like booting the wrong image on a 533) which previously resulted in a infinite loop/hang, as well as random hardware errors before before setup_arch(). To disable this debug only feature - turn off EARLY_PRINTK. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: inline I-pipe bypass code in ret_from_exceptionPhilippe Gerum2009-09-161-7/+7
| | | | | Signed-off-by: Philippe Gerum <rpm@xenomai.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: sanitize manual control of IPEND[4]Philippe Gerum2009-09-161-14/+11
| | | | | | | | | | | | | Cleanup is performed in two ways: - remove extraneous updates of IPEND[4] w/ CONFIG_IPIPE, and document remaining use. - substitute pop-reg-from-stack instructions with plain SP fixups in all save-RETI-then-discard patterns. Signed-off-by: Philippe Gerum <rpm@xenomai.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: document __ipipe_call_irqtailPhilippe Gerum2009-09-161-0/+25
| | | | | Signed-off-by: Philippe Gerum <rpm@xenomai.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: allow EVT5 to preempt irqtail prologue (CONFIG_DEBUG_HWERR)Philippe Gerum2009-09-161-1/+9
| | | | | Signed-off-by: Philippe Gerum <rpm@xenomai.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: reuse evt_evt14 handler to perform irqtail epiloguePhilippe Gerum2009-09-161-23/+1
| | | | | Signed-off-by: Philippe Gerum <rpm@xenomai.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: use generic name for EVT14 handlerPhilippe Gerum2009-09-162-5/+5
| | | | | | | | | | | | | | The purpose of the EVT14 handler may depend on whether CONFIG_IPIPE is enabled, albeit its implementation can be the same in both cases. When the interrupt pipeline is enabled, EVT14 can be used to raise the core priority level for the running code; when CONFIG_IPIPE is off, EVT14 can be used to lower this level before running softirq handlers. Rename evt14_softirq to evt_evt14 to pick an identifier that fits both, which allows to reuse the same vector setup code as well. Signed-off-by: Philippe Gerum <rpm@xenomai.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: make EVT3->EVT5 lowering more robust wrt IPEND[4]Robin Getz2009-09-161-32/+54
| | | | | | | | | | | | | | | | | We handle many exceptions at EVT5 (hardware error level) so that we can catch exceptions in our exception handling code. Today - if the global interrupt enable bit (IPEND[4]) is set (interrupts disabled) our trap handling code goes into a infinite loop, since we need interrupts to be on to defer things to EVT5. Normal kernel code should not trigger this for any reason as IPEND[4] gets cleared early (when doing an interrupt context save) and the kernel stack there should be sane (or something much worse is happening in the system). But there have been a few times where this has happened, so this change makes sure we dump a proper crash message even when things have gone south. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* arch/blackfin: Add kmalloc NULL testsJulia Lawall2009-07-161-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Check that the result of kmalloc is not NULL before passing it to other functions. In the first two cases, the new code returns -ENOMEM, which seems compatible with what is done for similar functions for other architectures. In the last two cases, the new code fails silently, ie just returns, because the function has void return type. The semantic match that finds this problem is as follows: (http://www.emn.fr/x-info/coccinelle/) // <smpl> @@ expression *x; identifier f; constant char *C; @@ x = \(kmalloc\|kcalloc\|kzalloc\)(...); ... when != x == NULL when != x != NULL when != (x || ...) ( kfree(x) | f(...,C,...,x,...) | *f(...,x,...) | *x->f ) // </smpl> Signed-off-by: Julia Lawall <julia@diku.dk> Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: drop per-cpu loops_per_jiffy trackingMichael Hennerich2009-07-161-1/+1
| | | | | | | | | | | On Blackfin SMP, a per-cpu loops_per_jiffy is pointless since both cores always run at the same CCLK. In addition, the current implementation has flaws since the main consumer for loops_per_jiffy (asm/delay.h) uses the global kernel loops_per_jiffy and not the per_cpu one. So punt all of the per-cpu handling and go back to the global shared one. Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: cleanup code a bit with comments and definesRobin Getz2009-07-161-5/+7
| | | | | | | | Improve the assembly with a few explanatory comments and use symbolic defines rather than numeric values for bit positions. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: hook up new perf_counter_open syscallMike Frysinger2009-06-221-0/+1
| | | | Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: decouple unrelated cache settings to get exact behaviorJie Zhang2009-06-223-5/+5
| | | | | | | | | | | | | | | The current cache options don't really represent the hardware features. They end up setting different aspects of the hardware so that the end result is to turn on/off the cache. Unfortunately, when we hit cache problems with the hardware, it's difficult to test different settings to root cause the problem. The current settings also don't cleanly allow for different caching behaviors with different regions of memory. So split the configure options such that they properly reflect the settings that are applied to the hardware. Signed-off-by: Jie Zhang <jie.zhang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: allow CONFIG_TICKSOURCE_GPTMR0 with interrupt pipelinePhilippe Gerum2009-06-221-25/+22
| | | | | Signed-off-by: Philippe Gerum <rpm@xenomai.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: only build irqpanic.c when neededMike Frysinger2009-06-182-10/+4
| | | | | | | | The irq_panic function is only used when CONFIG_DEBUG_ICACHE_CHECK is enabled, so move the conditional build to the Makefile rather than wrapping all of the contents of the file. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: use common test_bit() rather than __test_bit()Mike Frysinger2009-06-181-2/+2
| | | | | | | Convert to test_bit() as that is what pretty much everyone uses and allows us to migrate asm/bitops.h to the asm-generic version. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: hook up new rt_tgsigqueueinfo syscallMike Frysinger2009-06-131-0/+1
| | | | Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: fix deadlock in SMP IPI handlerSonic Zhang2009-06-131-6/+7
| | | | | | | | | | | | | When a low priority interrupt (like ethernet) is triggered between 2 high priority IPI messages, a deadlock in disable_irq() is hit by the second IPI handler. This is because the second IPI message is queued within the first IPI handler, but the handler doesn't process all messages, and new ones are inserted rather than appended. So now we process all the pending messages, and append new ones to the pending list. URL: http://blackfin.uclinux.org/gf/tracker/5226 Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: add blackfin_invalidate_entire_icache for SMP systemsSonic Zhang2009-06-132-1/+24
| | | | | | | | The KGDB code uses this when switching processors to make sure the icache is in a valid state. Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: only handle CPLB protection violations when MPU is enabledRobin Getz2009-06-131-4/+7
| | | | | | | | | | | We don't need to handle CPLB protection violations unless we are running with the MPU on. Fix the entry code to call common trap_c, and remove the code which is never run. This allows the traps test suite to run on older boards with the MPU disabled. URL: http://blackfin.uclinux.org/gf/tracker/5129 Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: check SIC defines rather than variant namesMike Frysinger2009-06-121-9/+8
| | | | | | | | Rather than having to maintain a hard coded list of Blackfin variants, use the SIC defines themselves. This fixes build problems on BF51x/BF538 under some configurations as they were missing from one of the lists. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: fix command line corruption with DEBUG_DOUBLEFAULTMike Frysinger2009-06-121-8/+8
| | | | | | | | Commit 6b3087c6 (which introduced Blackfin SMP) broke command line passing when the DEBUG_DOUBLEFAULT config option was enabled. Switch the code to using a scratch register and not R7 which holds the command line. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: drop unused reserve_pda() functionGraf Yang2009-06-121-3/+0
| | | | | | | | The Per-processor Data Area isn't actually reserved by this function, and all it ended up doing was issuing a printk(), so punt it. Signed-off-by: Graf Yang <graf.yang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: make deferred hardware errors more exactRobin Getz2009-06-122-18/+68
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Hardware errors on the Blackfin architecture are queued by nature of the hardware design. Things that could generate a hardware level queue up at the system interface and might not process until much later, at which point the system would send a notification back to the core. As such, it is possible for user space code to do something that would trigger a hardware error, but have it delay long enough for the process context to switch. So when the hardware error does signal, we mistakenly evaluate it as a different process or as kernel context and panic (erp!). This makes it pretty difficult to find the offending context. But wait, there is good news somewhere. By forcing a SSYNC in the interrupt entry, we force all pending queues at the system level to be processed and all hardware errors to be signaled. Then we check the current interrupt state to see if the hardware error is now signaled. If so, we re-queue the current interrupt and return thus allowing the higher priority hardware error interrupt to process properly. Since we haven't done any other context processing yet, the right context will be selected and killed. There is still the possibility that the exact offending instruction will be unknown, but at least we'll have a much better idea of where to look. The downside of course is that this causes system-wide syncs at every interrupt point which results in significant performance degradation. Since this situation should not occur in any properly configured system (as hardware errors are triggered by things like bad pointers), make it a debug configuration option and disable it by default. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: add note about anomaly 05000242 being worked aroundMike Frysinger2009-06-121-0/+1
| | | | | | Document anomaly 05000242 workaround in source code. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: work around anomaly 05000220Graf Yang2009-06-121-0/+7
| | | | | | | | | When possible, work around anomaly 05000220 (external memory is write back cached, but L2 is not cached). If not possible, detect the conditions at build time and reject any qualifying configurations. Signed-off-by: Graf Yang <graf.yang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: add support for gptimer0 as a tick sourceGraf Yang2009-06-122-19/+9
| | | | | | | | For systems where the core cycles are not a usable tick source (like SMP or cycles gets updated), enable gptimer0 as an alternative. Signed-off-by: Graf Yang <graf.yang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: annotate anomaly 05000120Graf Yang2009-06-121-0/+4
| | | | | | | Add some notes for anomaly 05000120 to make sure we work around it. Signed-off-by: Graf Yang <graf.yang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: detect anomaly 05000274Sonic Zhang2009-06-121-1/+2
| | | | | | | | Detect and reject operating conditions for anomaly 05000274 since the problem cannot be worked around in software. Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: workaround anomaly 05000227Mike Frysinger2009-06-121-7/+11
| | | | | | | | Workaround anomaly 05000227 by only using the scratch pad for stack when absolutely necessary. The core code which reprograms clocks really only touches MMRs directly with constants. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: simplify the do_flush macroMike Frysinger2009-06-121-15/+15
| | | | | | | | Simplify the do_flush macro now that we don't need to take into account a second instruction being used together. Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin: merge Philippe's recent ipipe patchPhilippe Gerum2009-06-121-7/+0
| | | | | | | | | ipipe-2.6.28.9-blackfin-git95aafe6.patch Singed-off-by: Philippe Gerum <rpm@xenomai.org> Signed-off-by: Yi Li <yi.li@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin: fix data cache flushing when doing icache flushingMike Frysinger2009-06-121-16/+0
| | | | | | | | | | | Make sure we flush all data caches and their write buffers before flushing icache, otherwise random edge cases could crop up where stale data is read into icache from external memory. As fallout, punt the combined icache + dcache flush function since we cannot safely do them back to back -- the SSYNC is needed between the dcache flush and the icache flush. Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin: fix link failure due to CONFIG_EXCEPTION_L1_SCRATCHGraf Yang2009-06-121-17/+0
| | | | | | | | | Move exception stack mess from entry.S to init.c to fix link failure when CONFIG_EXCEPTION_L1_SCRATCH is in use. Signed-off-by: Graf Yang <graf.yang@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin: add comment for anomaly 05000171 to init codeMichael Hennerich2009-06-121-0/+3
| | | | | | Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin: hook up preadv/pwritev syscallsMike Frysinger2009-05-271-0/+2
| | | | Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Blackfin arch: Blacklist Hibernate (PM_SUSPEND_MEM) on BF561 as wellMichael Hennerich2009-03-281-1/+1
| | | | | | Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: remove duplicated ANOMALY_05000448 ifdef checkMike Frysinger2009-03-061-4/+2
| | | | | | Signed-off-by: Mike Frysinger <vapier.adi@gmail.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: fix bug - On bf548-ezkit, ethernet fails to work after wakeup ↵Michael Hennerich2009-03-051-0/+24
| | | | | | | | from "mem" Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: Random read/write errors are a bad thingRobin Getz2009-03-051-0/+6
| | | | | | | | | Random read/write errors are a bad thing - so don't let anyone (including the test bench) run on something we know is bad. Signed-off-by: Robin Getz <rgetz@blackfin.uclinux.org> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: Fix bug - KGDB single step into the middle of a 4 bytes ↵Sonic Zhang2009-03-051-0/+22
| | | | | | | | | | | | | | | | instruction on bf561 after soft bp is hit Run IFLUSH twice to avoid loading wrong instruction after invalidating icache and following sequence is met. 1) The one instruction address is cached in the icache. 2) This instruction in SDRAM is changed. 3) IFLASH[P0] is executed only once in lackfin_icache_flush_range(). 4) This instruction is executed again, but not the changed new one. Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: make sure people do not set the kernel load address too highMike Frysinger2009-03-051-0/+5
| | | | | | Signed-off-by: Mike Frysinger <vapier.adi@gmail.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: fix bug - The SPORT_HYS bit is not set for BF561 0.5Enrik Berkhan2009-03-051-1/+1
| | | | | | | | | | | | | | IMHO the setting should depend on ANOMALY_05000305 which is about the availability of the bit, not ANOMALY_05000265 which only describes the SPORT sensitivity to noise (checked for BF561 only, though). If that's not true for other BF variants, maybe the definition of ANOMALY_05000265 for BF561 should be changed to '(1)' instead. Signed-off-by: Enrik Berkhan <Enrik.Berkhan@ge.com> Signed-off-by: Mike Frysinger <vapier.adi@gmail.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: fix bug - kgdb fails to continue after setting breakpoint on ↵Sonic Zhang2009-03-051-1/+5
| | | | | | | | | | | | | | | | | | | | bf561-ezkit kernel with smp patch Free spinlock before call IPI handlers. Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org> Header from folded patch 'blackfin_arch__fix_bug_-_kgdb_fails_to_continue_after_setting_breakpoint_on_bf561-ezkit_kernel_with_smp_patch-1': Blackfin arch: fix bug - kgdb fails to continue after setting breakpoint on bf561-ezkit kernel with smp patch Don't test l1 code in SMP kernel. Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: Update adeos blackfin arch patch to 1.9-00Philippe Gerum2009-03-043-86/+113
| | | | | | Signed-off-by: Philippe Gerum <rpm@xenomai.org> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: fix 2 bugs related to debugJie Zhang2009-02-041-8/+1
| | | | | | | | | | | | - unable to single step over emuexcpt instruction - gdbproxy goes into infinite loop when doing gdb does "next" over "emuexcpt" Don't decrement PC after software breakpoint. Signed-off-by: Jie Zhang <jie.zhang@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: Fix bug - 561 SMP kernel can't boot from jffs2Graf Yang2009-02-041-42/+42
| | | | | | | | | bss_l2 section is garbage when the data in this section is used by _bfin_relocate_l1_mem, so move the zero out function ahead. Signed-off-by: Graf Yang <graf.yang@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: base SIC_IWR# programming on whether the MMR existsMike Frysinger2009-02-042-14/+8
| | | | | | | | | base SIC_IWR# programming on whether the MMR exists rather than having to maintain another list of processors Signed-off-by: Mike Frysinger <vapier.adi@gmail.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
* Blackfin arch: Fix URLRobin Getz2009-02-041-1/+1
| | | | | | Signed-off-by: Robin Getz <rgetz@blackfin.uclinux.org> Signed-off-by: Bryan Wu <cooloney@kernel.org>
OpenPOWER on IntegriCloud