423 Commits

Author SHA1 Message Date
ian
e825adc7a6 Eliminate irq_dispatch.S. Move the data items it contained into arm/intr.c
and the functionality it provided into arm/exception.S.  Rename the main
irq handling routine from arm_handler_execute() to arm_irq_handler() to
make it more congruent with how other exception handlers are named, and
also update its signature to reflect what has long been reality: it is
passed just a trapframe pointer, no interrupt number argument.
2014-03-10 18:10:09 +00:00
ian
3b592f9410 The arm exception entry points currently vector through a function pointer
to the actual handler routine.  All the pointers are static-intialized to
the only handlers available, and yet various platform-specific inits still
set those pointers (to the values they're already initialized to).  Begin
to drain the swamp by removing all the redundant external declarations and
runtime setting of the pointers that's scattered around various places.
2014-03-09 18:08:27 +00:00
imp
3b83a35d4d Remove bogus define that causes compile errors. Most of the defines
for SAM9X are going away soonish anyway (once FDT works), but until
then...
2014-03-09 02:28:30 +00:00
imp
c1c5cdf1e1 Move AIC related stuff to own file. 2014-03-08 06:06:50 +00:00
imp
0f914ddcb5 Properly round on unmapping. 2014-03-08 06:06:42 +00:00
imp
1395253f32 Make at91_soc_id() public. 2014-03-08 05:03:56 +00:00
imp
f53f2685ee tcb device for fdt 2014-02-28 03:00:28 +00:00
imp
44e4ff2e1a shdwc device for fdt 2014-02-28 03:00:25 +00:00
imp
a08374e360 Add device node for SDRAMC device. Currently just claims device's
resources.
2014-02-28 02:59:51 +00:00
imp
5c6b8c9969 Style(9) nit: Use tab here. 2014-02-27 08:19:19 +00:00
imp
bc45fe580c Honor the disabled status by only grabbing resources and returning
when running under FDT.
2014-02-13 16:50:08 +00:00
imp
9ecad450cb Fix board ID too... 2014-02-13 15:47:41 +00:00
imp
875b628e17 Fix board name. 2014-02-13 15:46:08 +00:00
ian
4ca4e5e369 Rework the EARLY_PRINTF mechanism. Instead of defining a special eprintf()
routine, now a platform can provide a pointer to an early_putc() routine
which is used instead of cn_putc().  Control can be handed off from early
printf support to standard console support by NULLing out the pointer
during standard console init.

This leverages all the existing error reporting that uses printf calls,
such as panic() which can now be usefully employed even in early
platform init code (useful at least to those who maintain that code and
build kernels with EARLY_PRINTF defined).

Reviewed by:	imp, eadler
2014-02-12 00:53:38 +00:00
ian
74fc279d26 Check in the "real" board_tsc4370 file in place of the stubbed out one.
Real means the one TSC / Symmetricom / Microsemi actually uses on their 4370
and other rm9200 boards.  This code demonstrates a variety of useful things
board init code can do, including adjusting the master clock frequency.
2014-02-11 21:13:37 +00:00
ian
2ec8b64037 If someone tries to boot a generic ATMEL kernel that has no board_init()
routine compiled in, print a friendly error message about it rather than
mysteriously hanging while trying to init 4GB of nonexistant ram.
2014-02-09 21:21:10 +00:00
imp
f89ada715f Add FDT attachment. 2014-02-09 21:02:46 +00:00
imp
ef1ac29eb3 FDT attachment... 2014-02-09 21:01:53 +00:00
imp
bdaa9ef245 Add TWI attachment for FDT. We're only matching the SAMG20 device for
now, others to follow.
2014-02-09 21:01:10 +00:00
imp
da8067e163 Add FDT attachment. 2014-02-09 21:00:22 +00:00
imp
d8e5eadddc Add FDT attachment. Flag lost functionality with FDT_HACKS so we can
find it later.
2014-02-09 20:59:46 +00:00
imp
5d72dffadd Add FDT attachment. 2014-02-09 20:58:03 +00:00
imp
b4092f9107 Add FDT attachment, plus minor code shuffle. 2014-02-09 20:57:26 +00:00
imp
813fe7dc49 Add FDT attachment. 2014-02-09 20:56:39 +00:00
imp
8a6437c7ce Add FDT matching code. 2014-02-09 20:55:49 +00:00
ian
85ab9dc838 No need to set physmem in each initarm() instance anymore, it's handled
in common code now.
2014-02-09 14:46:50 +00:00
ian
0a3cc34ebf It turns out a global variable is the only straightforward way to
communicate the kernel's physical load address from where it's known in
initarm() into cpu_mp_start() which is called from non-arm code and
takes no parameters.

This adds the global variable and ensures that all the various copies
of initarm() set it.  It uses the variable in cpu_mp_start(), eliminating
the last uses of KERNPHYSADDR outside of locore.S (where we can now
calculate it instead of relying on the constant).
2014-02-09 02:39:00 +00:00
ian
0a15dbb231 Replace compile-time constant KERNPHYSADDR with abp_physaddr (determined
at runtime) where it's trivial to do so.  Another breadcrumb on the trail
to a kernel that can be loaded at any 1MB boundary.
2014-02-09 01:21:30 +00:00
ian
30d95028f0 Consolidate code related to setting up physical memory configuration into
a new physmem.c file.  The new code provides helper routines that can be
used by legacy SoCs and newer FDT-based systems.  There are routines to
add one or more regions of physically contiguous ram, and exclude one or
more physically contiguous regions of ram.  Ram can be excluded from crash
dumps, from being given over to the vm system for allocation management,
or both.  After all the included and excluded regions have been added,
arm_physmem_init_kernel_globals() processes the regions into the global
dump_avail and phys_avail arrays and realmem and physmem variables that
communicate memory configuration to the rest of the kernel.

Convert all existing SoCs to use the new helper code.
2014-02-08 23:54:16 +00:00
andrew
c51bf58e25 Use abp_physaddr for the physical address over KERNPHYSADDR. This helps us
remove the need to load the kernel at a fixed address.
2014-02-06 20:35:33 +00:00
imp
aed0493328 Fix AT91SAM9260 to work with PA rather than VA device addresses. 2014-02-01 17:53:35 +00:00
imp
f2e63e528a Move these for diff reduction against FDT work. 2014-01-31 23:38:05 +00:00
imp
f7d1827f21 Minor cleanup of comments. 2014-01-31 23:28:18 +00:00
imp
9190257f1a Switch to using PAs rather than VAs for the addresses we map for
devices. This is a nop, except for what's reported by atmelbus for the
resources.

It would be nice if we could dymanically allocated these things, but
the pmap_mapdev panics if we don't keep the static mappings, so we
still need to play the carefully allocate VA space between all
supported SoC game.

User's with their own devices may need to make adjustments.
2014-01-31 15:38:05 +00:00
imp
f04b60e2d3 When mapping an address, the bsh needs the same offset we do for other
things.
2014-01-31 01:18:34 +00:00
andrew
ea49382feb Remove STARTUP_PAGETABLE_ADDR from the ARM configs and replace it with
memory at the end of the kernel.

This helps reduce the SoC and board specific configuration required.

Reviewed by:	bsdimp
Tested by:	jmg (armeb), br
2014-01-28 09:12:04 +00:00
imp
741e52a6b9 Before resetting the USART, delay a bit to allow the transmitter to
finish the current character to drain to avoid glitching. Also,
simplify the code a smidge.
2014-01-26 04:57:58 +00:00
imp
e6881f055e Make early printf output nicer by inserting a carriage return before
any linefeeds that are output.
2014-01-25 21:57:45 +00:00
imp
81ef37301f Bus space handles need to be the VA of the requested resource, not the
rounded page VA. Correct so the DBGU device can be mapped for FDT
console since it isn't on a page boundary.
2014-01-25 21:52:19 +00:00
andrew
3d46c92bcd Fix gcc with -Wstrict-prototypes by telling it bi_emac takes no parameters. 2014-01-25 19:36:27 +00:00
imp
e97be4e538 Remove redundant declaration for uart devclass.
Commint some unrelated, but harmless, FDT ifdefs.
2014-01-24 16:50:15 +00:00
imp
726f70df31 Implement support for early printf. You need to define SOCDEV_{PA,VA}
as described in the comments for the eputc function in your config file.
2014-01-22 21:49:20 +00:00
imp
d549191c04 Connect NAND for the SAM9260EK eval board, as well as the HotE HL-201.
# expect more refinement as do more boards.
2014-01-19 17:59:34 +00:00
imp
ba79e5aada Add standard memory controller helper functions. 2014-01-19 17:45:13 +00:00
imp
868757e5ac Add data so we can convert a PIO unit number into a base address. 2014-01-15 19:53:36 +00:00
imp
74fda9ff76 Provide a simplified way to specify GPIO pins for the Atmel port. 2014-01-15 19:49:12 +00:00
imp
6beacd5b4a Set the SoC name for the atmelbus name. 2013-12-30 18:10:04 +00:00
imp
0c05071015 Plumb the cn_grab and cn_ungrab routines down into the uart
clients. Mask RX interrupts while grabbed on the atmel serial
driver. This UART interrupts every character. When interrupts are
enabled at the mountroot> prompt, this means the ISR eats the
characters. Rather than try to create a cooperative buffering system
for the low level kernel console, instead just mask out the ISR. For
NS8250 and decsendents this isn't needed, since interrupts only happen
after 14 or more characters (depending on the fifo settings). Plumb
such that these are optional so there's no change in behavior for all
the other UART clients. ddb worked on this platform because all
interrupts were disabled while it was running, so this problem wasn't
noticed. The mountroot> issue has been around for a very very long
time.

MFC after:	3 days
2013-12-21 16:23:31 +00:00
imp
2baad42ea4 Loose -> Lose so this sentence makes sense.
MFC after:	3 days
2013-12-11 15:32:28 +00:00
imp
43b6b3d843 Fix one race and one fence post error. When the TX buffer was
completely full, we'd not complete any of the mbufs due to the fence
post error (this creates a large leak). When this is fixed, we still
leak, but at a much smaller rate due to a race between ateintr and
atestart_locked as well as an asymmetry where atestart_locked is
called from elsewhere.  Ensure that we free in-flight packets that
have completed there as well. Also remove needless check for NULL on
mb, checked earlier in the loop and simplify a redundant if.

MFC after:	3 days
2013-12-11 05:32:29 +00:00