1860 Commits

Author SHA1 Message Date
ian
fc8455d839 Add support for the GlobalScale Technologies DreamPlug computer.
This adds support for version 10, revision 01, but it should also work
without changes for the 0901 model, at least until we get drivers for the
two different wifi chips involved.

Many users contributed to and tested the various patchsets floating around
for the past year that have eventually evolved into this checkin, most notably
Richard Neese who provided the bulk of the kernel config file.

Approved by:	cognet (mentor)
2013-01-27 01:17:37 +00:00
ian
60d7652a68 Add a default do-nothing implementation of fdt_pci_devmap() using a weak alias,
so that we don't need an empty implementation of it for every Marvell platform
that has no PCI.  This allows the removal of the SheevaPlug-specific stub and
config files, and eliminates the need to add similar stubs for future models.

Marvell platforms that do expose PCI are compiled with 'device pci' which
causes the real (non-weak) implementation in dev/fdt/fdt_pci.c to be used.

Approved by:	cognet (mentor)
2013-01-27 00:39:02 +00:00
ian
dc3eff401f Fix a buffer overrun while pre-formatting the names array, perpetrated in
the prior commit.  Use essentially the same sprintf() statement for both
formatting and pre-formatting, and use a format string which eliminates the
need for an extra temporary buffer when formatting the name.

Noted by:   	  Christoph Mallon
Pointy hat to:	  ian
Approved by:	  cognet (mentor)
2013-01-26 20:16:58 +00:00
andrew
f0d9be2036 Align td_frame as it will be placed into the sp register which must be
8 byte aligned on ARM EABI.
2013-01-26 08:55:04 +00:00
ganbold
8533809c9b Fix method of naming compatible string to follow
"<manufacturer>,<model>" as described in
http://www.devicetree.org/Device_Tree_Usage

Reviewed by: andrew@
Approved by: gonzo@
2013-01-25 07:21:22 +00:00
ganbold
7b91243db5 Fix timer to support oneshot and periodic mode
Use 64 bit high and low counter for timecounter and delay

Reviewed by: mav@, ian@
Approved by: gonzo@
2013-01-24 09:36:50 +00:00
kientzle
c824859f78 Clarify the error messages for unrecognized pins and muxtypes. 2013-01-19 17:12:23 +00:00
ian
87dd3ff9a4 Eliminate the need for an intermediate array of indices into the arrays of
interrupt counts and names, by making the names into an array of fixed-length
strings that can be directly indexed.  This eliminates extra memory accesses
on every interrupt to increment the counts.

As a side effect, it also fixes a bug that would corrupt the names data
if a name was longer than MAXCOMLEN, which led to incorrect vmstat -i output.

Approved by:	cognet (mentor)
2013-01-19 00:50:12 +00:00
andrew
d80df3d3ed * Correct KINFO_PROC_SIZE for ARM EABI.
* Update the syscall interface to pass in the syscall value in register r7.
2013-01-17 09:52:35 +00:00
andrew
f32a0e3938 Implement stack unwinding based on section 9 of the "Exception handling ABI
for the ARM architecture" documentation. The unwind tables are currently
not stored in the kernel but will be added later.
2013-01-17 09:47:56 +00:00
ganbold
cd9a4ba4e7 Fix style bugs
Use defined constant instead of variable for reg_shift
Change u_int32_t to uint32_t

Approved by: gonzo
Suggested by: bde, wkoszek
2013-01-16 08:04:55 +00:00
cognet
ecb37fcbc8 Use armv7_drain_writebuf() and armv7_context_switch, instead of the arm11
variants.
2013-01-15 22:11:28 +00:00
cognet
c766fe3366 Only spin on the blocked_lock for SCHED_ULE+SMP, as it's done on the other
arches.
2013-01-15 22:09:11 +00:00
cognet
d7bcd25c32 Don't define rel/acq variants of some atomic operations as the regular
version for armv6.
2013-01-15 22:08:03 +00:00
ganbold
471c910190 Add mistakenly removed third clause to license
Reviewed by: joel
2013-01-15 09:56:20 +00:00
ganbold
29c90575f9 Fix formatting of license according to share/examples/etc/bsd-style-copyright
Reviewed by: joel
2013-01-15 09:39:11 +00:00
ganbold
6cbb1f4892 Fix license to follow standard license template
Reviewed by: joel
2013-01-15 09:31:13 +00:00
ganbold
a0e69297d0 Initial support for Allwinner A10 SoC (Cubieboard)
Add simple console driver
	Add interrupt handling and timer codes
	Add kernel config file
	Add dts file
Approved by: gonzo
2013-01-15 08:26:16 +00:00
andrew
6a74c8a7a2 Update sigcode to use both the current ABI and FreeBSD's version of the
ARM EABI syscall calling convention.

The current ABI encodes the syscall number in the instruction. This causes
issues with the thumb mode as it only has 8 bits to encode this value and
we have too many system calls and by using a register will simplify the
code to get the syscall number in the kernel.

With the ARM EABI we reuse the Linux calling convention by storing the
value in r7. Because of this we use both methods to encode the syscall
number in this function.
2013-01-14 09:11:18 +00:00
ray
673cba243d Enable syscons framebuffer support for bcm2835. It makes possible to run Xorg
on Raspberry Pi.
o convert mmap address to physical.
o add FBIOGTYPE ioctl handler - allow to get screen resolution by new
    xf86-video-scfb driver.
Originally designed for "Efika MX" project.

Sponsored by:	FreeBSD Foundation
2013-01-13 22:05:46 +00:00
gonzo
5740e090f2 Remove accidentally copypasted comment
Spotted by: gavin
2013-01-13 21:32:40 +00:00
cognet
477199d02b Define IPI_IRQ_START and IPI_IRQ_END. 2013-01-09 01:54:17 +00:00
cognet
680d20a37c Use get_pcpu() instead of using pcpup, as it's wrong for SMP.
Submitted by:	Lukasz Plachno <luk@semihalf.com>
2013-01-09 01:52:28 +00:00
cognet
8d1a456222 Remove old declarations. 2013-01-08 22:55:39 +00:00
gonzo
d6fdadb6d6 Switch default cache type for ARMv6/ARMv7 from write-through to
writeback-writeallocate
2013-01-08 02:40:20 +00:00
gonzo
2d5f0c58d8 Fix cache-related issue with pmap for ARMv6/ARMv7:
- Missing PTE_SYNC in pmap_kremove caused memory corruption
    in userland applications
- Fix lack of cache flushes when using special PTEs for zeroing or
    copying pages. If there are dirty lines for destination memory
    and page later remapped as a non-cached region actual content
    might be overwritten by these dirty lines when cache eviction
    happens as a result of applying cache eviction policy or because
    of wbinv_all call.
- icache sync for new mapping for userland applications.

Tested by: gber
2013-01-08 02:38:38 +00:00
gonzo
87211dc2c9 - Identify more devices for OMAP4 SoC (up to OMAP4470)
- Whitespace fixes
2013-01-07 23:30:53 +00:00
gonzo
f7a4165c51 Implement barriers for AMRv6 and ARMv7
Submitted by:	Daisuke Aoyama <aoyama at peach.ne.jp>
Reviewed by:	ian, cognet
2013-01-07 20:36:51 +00:00
gonzo
d98fa8927e Release version check for erratum 727915 workaround in
l2_wbinv_range function implementation causes function
fail to flush caches for chip with RTL number 0x7. I failed
to find official PL310 revision with this RTL number
so further research on this matter required.
2013-01-07 02:38:36 +00:00
andrew
eee69c44e4 Fix the build:
* Use pl310_softc when the softc is otherwise unavailable.
 * Use the correct spelling of sc_rtl_revision.
2013-01-06 01:17:36 +00:00
andrew
72392dc5f8 Only work around errata when we are on a part where the erratum applies.
Reviewed by:	gonzo
2013-01-06 00:42:09 +00:00
gonzo
47c050325d Export board serial and board revision obtained from FDT blob 2013-01-05 23:08:58 +00:00
gonzo
c78b98152b Add hw.board.serial and hw.board.revision for exporting board-specific info 2013-01-05 23:08:10 +00:00
gonzo
75ba745d80 Fix background color calculation
Spotted by: ray@
2013-01-05 21:05:16 +00:00
kientzle
9b6c7883bd Shuffle the TX underrun to work the same way as the RX underrun,
as suggested by YongHyeon PYUN.
2013-01-05 20:37:40 +00:00
kientzle
5ec4d94d6a Prefer the new NFS modules 2013-01-05 20:30:10 +00:00
kientzle
2b2fcab759 While trying to track down the root cause for
TX stalls in this driver, I've also had some
time to evaluate the effectiveness of different
watchdog strategies.

This is the latest attempt, which consolidates
all of the watchdog logic in one place and
consistently detects TX stalls and resets within
a couple of seconds.
2013-01-05 17:59:44 +00:00
kientzle
f78ae91218 Overhauled CPSW driver for TI CPSW Ethernet module
(as used in AM335x SoC for BeagleBone).

Among other things:
 * Watchdog reset doesn't hang the driver.
 * Disconnecting cable doesn't hang the driver.
 * ifconfig up/down doesn't hang the driver
 * Out-of-memory no longer panics the driver.

Known issues:
 * Doesn't have good support for fragmented packets
   (calls m_defrag() on TX, assumes RX packets are never fragmented)
 * Promisc and allmulti still unimplimented
 * addmulti and delmulti still unimplemented
 * TX queue still stalls (but watchdog now consistently recovers in ~5s)
 * No sysctl monitoring
 * Only supports port0
 * No switch configuration support
 * Not tested on anything but BeagleBone

Committed from: BeagleBone
2013-01-01 18:55:04 +00:00
andrew
93a0b775d9 Document the known values of the RTL release field in the cache is register 2013-01-01 03:48:39 +00:00
gonzo
a381b05232 PL310 driver update:
- Add pl310.disable tunable to disable L2 cache altogether. In
    order to make sure that it's 100% disabled we use cache event
    counters for cache line eviction and read allocate events
    and panic if any of these counters increased. This is purely
    for debugging purpose
- Direct access DEBUG_CTRL and CTRL might be unavailable in
    unsecure mode, so use platform-specific functions for
    these registers
- Replace #if 1 with proper erratum numbers
- Add erratum 753970 workaround
- Remove wait function for atomic operations
- Protect cache operations with spin mutex in order to prevent race condition
- Disable instruction cache prefetch and make sure data cache
    prefetch is enabled in OMAP4-specific intialization
2012-12-31 21:19:44 +00:00
gonzo
620905405b Merge r234561 from busdma_machdep.c to ARMv6 version of busdma:
Interrupts must be disabled while handling a partial cache line flush,
as otherwise the interrupt handling code may modify data in the non-DMA
part of the cache line while we have it stashed away in the temporary
stack buffer, then we end up restoring a stale value.

PR:             160431
Submitted by:   Ian Lepore
2012-12-31 21:00:38 +00:00
gonzo
1231ad9b21 Add makeshift implementation for framebuffer console's cursor
Basically it's replica of VersatilePB code which is replica of XBox FB
code. All of them are linear framebuffers and should have common bits
moved to reusable framework.
2012-12-28 03:18:05 +00:00
gonzo
bda4c885f5 Fix event timer on Raspberry Pi
- Disable interrupt when updating compare value in order to
   make this operation atomical

- Increase minimum period for event timer. Systimer on BCM2835
    is compare timer, so if minimum period is too small it might
    be less then fraction of time between "read current value" and
    "set compare timer" operations. It means that when timer is armed
    actual counter value is more then compare value and it will take
    whole cycle (~32sec for 1MHz timer) to fire interrupt.

Submitted by:	Daisuke Aoyama <aoyama at peach.ne.jp>
2012-12-28 01:38:43 +00:00
gonzo
6274b9f3de Add custom renderer for poor man's cursor support for framebuffer console 2012-12-28 00:55:43 +00:00
cognet
25bbadc6fa The manpage states that bus_dmamap_create(9) returns ENOMEM if it can't
allocate a map or mapping resources.  That seems to imply that any memory
allocations it does must use M_NOWAIT and check for NULL.

Submitted by:	Ian Lepore <freebsd@damnhippie.dyndns.org>
2012-12-22 01:04:29 +00:00
cognet
c4f3118502 The VM_MEMATTR_ constants are enumerated, not a bitset. Compare accordingly.
Submitted by:	Ian Lepore <freebsd@damnhippie.dyndns.org>
2012-12-22 01:03:23 +00:00
gonzo
809ad0530a Replace generic ARM11 option with more specific
support for ARM1136 and ARM1176

Submitted by:	Daisuke Aoyama <aoyama at peach.ne.jp>
Obtained from:	NetBSD
2012-12-20 04:32:02 +00:00
gonzo
1fa6530f64 Fix misleading comment 2012-12-20 03:33:33 +00:00
cognet
450d909b25 Use C comments instead of C++ comments.
Spotted out by:	gonzo (thanks, man)
2012-12-20 00:50:04 +00:00
cognet
5c7a1afd08 Busdma enhancements, especially for managing small uncacheable buffers.
- Use the new architecture-agnostic buffer pool manager that uses uma(9)
  to manage a set of power-of-2 sized buffers for bus_dmamem_alloc().

- Create pools of buffers backed by both regular and uncacheable memory,
  and use them to handle regular versus BUS_DMA_COHERENT allocations.

- Use uma(9) to manage a pool of bus_dmamap structs instead of local code
  to manage a static list of 500 items (it took 3300 maps to get to
  multi-user mode, so the static pool wasn't much of an optimization).

- Small BUS_DMA_COHERENT allocations no longer waste an entire page per
  allocation, or set pages to uncached when they contain data other than
  DMA buffers.  There's no longer a need for drivers to work around the
  inefficiency by allocing large buffers then sub-dividing them.

- Because we know the alignment and padding of buffers allocated by
  bus_dmamem_alloc() (whether coherent or regular memory, and whether
  obtained from the pool allocator or directly from the kernel) we
  can avoid doing partial cacheline flushes on them.

- Add a fast-out to _bus_dma_could_bounce() (and some comments about
  what the routine really does because the old misplaced comment was wrong).

- Everywhere the dma tag alignment is used, the interpretation is that
  an alignment of 1 means no special alignment.  If the tag is created
  with an alignment argument of zero, store it in the tag as one, and
  remove all the code scattered around that changed 0->1 at point of use.

- Remove stack-allocated arrays of segments, use a local array of two
  segments within the tag struct, or dynamically allocate an array at first
  use if nsegments > 2.  On an arm system I tested, only 5 of 97 tags used
  more than two segments.  On my x86 desktop it was only 7 of 111 tags.

Submitted by:	Ian Lepore <freebsd@damnhippie.dyndns.org>
2012-12-20 00:38:08 +00:00