Commit Graph

2541 Commits

Author SHA1 Message Date
Warner Losh
b331ba445e Style(9) nit: Use tab here. 2014-02-27 08:19:19 +00:00
Ian Lepore
f0455d6562 Replace many pasted identical definitions of cpu_initclocks() with a common
implementation in arm/machdep.c.  Most arm platforms either don't need to
do anything, or just need to call the standard eventtimer init routines.
A generic implementation that does that is now provided via weak linkage.
Any platform that needs to do something different can provide a its own
implementation to override the generic one.
2014-02-26 22:06:10 +00:00
Ian Lepore
f3549ad525 Minor tweaks to the imx GPT timer...
- Don't use spaces or dots in the eventtimer or timecounter names.
   They turn into sysctl node names, and it's just confusing.
 - Use comparator #3 instead of #1 for one-shot events.  There's an
   extra 1-cycle penalty in the hardware for accessing the registers
   for comparator 1, no point in paying that penalty.
 - Lower the quality of the eventtimer from 1000 to 800, because the
   device can't support PERCPU timers and some other device in the system
   may be able to provide that.
2014-02-26 18:29:14 +00:00
Ruslan Bukin
ee270bbca3 - Pin configuration is a complete iomux register now and includes
drive strength, pull mode, mux mode, speed, etc.
- Add i2c devices to the tree
- Add IPG clock
2014-02-25 17:02:11 +00:00
Ian Lepore
f32801f42b Invalidate the SCU cache tag ram on all 4 cores, not just 1-3. I misread
Juergen's original code, it was doing all 4 cores.  Also remove the L2
cache invalidate operation, this code runs before L2 is activated.
2014-02-25 15:22:40 +00:00
Ruslan Bukin
9516467e96 Add support for Quartz Module.
Quartz is a tiny module utilized Freescale VF6xx
system-on-chip and development kit produced by
Device Solutions.

Quartz is available in a form of LGA (38x38x2mm)
or as a module with high-density connectors.

Sponsored by:	Device Solutions
2014-02-24 19:32:15 +00:00
Ian Lepore
1f22526981 Add the bits needed to run SMP on imx6.
The 'option SMP' isn't added to the kernel config yet; people wanting to
test this have to opt-in for now.
2014-02-24 03:51:31 +00:00
Ian Lepore
1cf228d34b Invalidate caches immediately upon entry to init_secondary(). Also set
the Bufferable bit in the PDE entries of the secondary processor startup
pagetables.

The caches really need to be invalidated even earlier than this, but this
is a big step in the right direction.  The invalidate needs to happen
before the MMU is enabled, which means it has to be called from asm code
that's running with physical addressing.  Fixing that will be handled in
a future change.
2014-02-24 03:47:39 +00:00
Ian Lepore
4b7fcd31e1 Add a new cache maintenance function, idcache_inv_all, to the table, and
implementations for each of the chips we support.  Most chips up through
armv6 can use the armv4 implementation which has a single coprocessor
opcode for this operation.  The rather more complex armv7 implementation
comes from netbsd.
2014-02-24 01:41:58 +00:00
Ian Lepore
02ba95fe77 Add an ident line. 2014-02-24 01:17:23 +00:00
Ian Lepore
08616fa793 Actually set the proper bit to indicate TTB shared memory.
Submitted by:	Juergan Weiss
2014-02-23 23:06:50 +00:00
Ian Lepore
b7c1fc50a4 If the L2 cache type is PIPT, pass a physical address for a flush.
While this is technically more correct, I don't think it much matters,
because the only thing in the tree that calls cpu_flush_dcache() is md(4)
and I'm > 99% sure it's bogus that it does so; md has no ability to do
anything that can perturb data cache coherency.
2014-02-23 22:52:48 +00:00
Ian Lepore
aab6f7ed9a Move the declaration for mpentry() into a header file instead of pasting
it into a bunch of different .c files.  Remove declarations for the unused
mptramp() function from everywhere except AramadaXP (and I think it's
really not used there either, because the code that references it appears
to be insanely does-nothing in nature).
2014-02-23 22:35:18 +00:00
Ian Lepore
a75a785aef Eliminate an unused-var warning by wrapping #if 0 around some tables of
values that were probably entered "for completeness" from a datasheet, and
for all I know may be useful/necessary some day.
2014-02-23 22:29:59 +00:00
Ian Lepore
d39e0a0f50 Fix a typo _IMX51_TZICRREG_H_ -> _IMX51_TZICREG_H_ (extra R) 2014-02-23 21:13:04 +00:00
Ian Lepore
b6028530bd Don't force bootverbose on anymore, it can be set from ubldr now. 2014-02-23 01:49:01 +00:00
Ian Lepore
bcab32ab01 Create a generic IMX6 kernel config. This is based on the existing
WANDBOARD.common config, but with the freescale-specific optons and devices
all together at the bottom now.  In addition to reformatting and shuffling
lines around, two new options are added because they're now known to work,
VFP and FREEBSD_BOOT_LOADER.

This config does not include any static DTB, it requires that u-boot
provide a DTB (or a custom kernel config can compile one in).

This will supercede all the existing WANDBOARD* configs, but those will
be left around for a while to help people transition their customized
configs to include this new one instead.
2014-02-23 01:48:07 +00:00
Ian Lepore
9780433dcd Add the FREEBSD_BOOT_LOADER option so that a loaded DTB passed in from
ubldr will actually get used.
2014-02-23 01:37:29 +00:00
Ian Lepore
86a5575402 Add basic cpu frequency control and temperature monitoring to imx6_anatop.
The temperature monitor device is enabled to sample the die temperature at
16hz.  The temperature is published via sysctl.  A callout routine at 10hz
monitors the temperature and throttles back the cpu if the temperature
goes over a user-settable throttle point (by default 10C less than the
critical high-point temperature for the chip).  The hardware is supposed
to be able to deliver an interrupt when the temperature exceeds a settable
limit, but the interrupt never arrives so for now a callout does the job.

At attach time we read the maximum cpu frequency the chip is allowed to run
at and the cpu is set to run at that speed.  It's reported at attach time.
A sysctl variable reports the current speed when queried.

New sysctl values:

  dev.imx6_anatop.0.cpu_mhz: 984
  dev.imx6_anatop.0.temperature: 37.9C
  dev.imx6_anatop.0.throttle_temperature: 95.0C

Steven Lawrance did the initial heavy lifting on this, but I changed
enough stuff that I'm the one to blame if anything breaks.

Submitted by:	Steven Lawrance <stl@koffein.net>
2014-02-21 06:00:06 +00:00
Warner Losh
40a4c9d72e Remove bogus blank line. 2014-02-21 05:17:30 +00:00
Ian Lepore
8df34dd25b Add early printf support, wrapped in #if 0 because it's only rarely needed. 2014-02-20 14:29:59 +00:00
Ian Lepore
4af6e44409 Give the fdt helper routines static linkage since no global definition
of them is provided anywhere.  (gcc was nice enough to warn about this,
clang didn't for some reason.)
2014-02-17 20:04:57 +00:00
John Hay
f37fafddd6 Make it possible to use the env kernel config file option for AVILA
and CAMBRIA boards that does not use loader to load the kernel. This
is basically how it was done for i386. This way tunables can also be
set. For example in config file:

env "/conf/AVILA.env"

And in AVILA.env:

vfs.unmapped_buf_allowed=0

MFC after:	2 weeks
2014-02-17 11:05:57 +00:00
Ruslan Bukin
0beadc3c1c - Decrease buffer size.
- Handle eDMA interrupt on running channel only.
2014-02-16 19:21:44 +00:00
Ruslan Bukin
586a16c431 Add driver for Synchronous Audio Interface (SAI).
SAI supports full-duplex serial interfaces with frame
synchronization such as I2S, AC97, TDM, and codec/DSP
interfaces.
2014-02-16 16:49:54 +00:00
Ian Lepore
49624653d5 Oops, remove some dregs of debugging. 2014-02-16 03:30:22 +00:00
Ian Lepore
f3639674b5 Make it possible to access the ocotp registers before the ocotp device
is attached, by establishing a temporary mapping of the registers when
necessary.  This is a temporary measure to keep progress moving; in the
long run we need better control over the order in which devices attach
(better than "the order they appear in the fdt dts source").
2014-02-16 03:09:39 +00:00
Ian Lepore
b6e466340b Sweep up a couple crumbs left over from the imx6->fsl renaming. 2014-02-15 21:59:00 +00:00
Ian Lepore
350badf9db It turns out Freescale cleverly made the ocotp device compatible across
several different families of SoCs, so move it to the freescale directory
and prefix everything with fsl rather than imx6.
2014-02-15 21:21:57 +00:00
Ian Lepore
f1887a86aa Convert the "R1B fix" from a busy-loop in the interrupt handler to a callout. 2014-02-15 17:55:35 +00:00
Ian Lepore
844a97cdc2 Add a driver to provide access to imx6 on-chip one-time-programmble data.
Submitted by:	Steven Lawrance <stl@koffein.net>
2014-02-15 17:19:55 +00:00
Zbigniew Bodek
bccb7a02b5 Handle pmap_enter() on already promoted mappings for ARMv6/v7
Attempt to demote the superpage if trying to pmap_enter() on
one. Panic only when the particular superpage should
no longer exist for that pmap and address.
2014-02-15 13:27:45 +00:00
Zbigniew Bodek
6720dd234f Remove spurious assertion from pmap_extract_locked() on ARM
The condition under assertion is no longer valid since
superpages support is operating on section mappings.
2014-02-15 13:24:58 +00:00
Zbigniew Bodek
6be8284c66 Avoid redundant superpage promotion attempts on ARM
Because pmap_enter_locked() is called from few different functions
some redundancy in superpage promotion attempts can be observed.
Hence, avoid promotion in pmap_enter_object() (if the object can
be mapped by superpage it will be handled by pmap_enter_object()
itself) and also do not waste time in pmap_enter_quick().
From now on the promotion will be performed only in pmap_enter().
2014-02-15 13:22:37 +00:00
Zbigniew Bodek
bdd635e646 Fix superpage promotion on ARM with respect to RO/RW and wired attributes
It was possible to create RW superpage mapping even if
the base pages were RO due to wrong setting of the prot
flag passed to pmap_map_section().
Promotion attempt should be canceled in case of attributes
mismatch between any two base pages. Since we still use
pv_flags to maintain permission to write (PVF_WRITE) and
wired status (PVF_WIRED) for a page, it is also necessary
to take those variables into account.
2014-02-15 13:20:17 +00:00
Zbigniew Bodek
a7bd28f2cb Ensure proper TLB invalidation on superpage promotion and demotion on ARM
Base pages within newly created superpage need to be invalidated so that
new mapping is "visible" immediately after creation.
2014-02-15 13:17:51 +00:00
Zbigniew Bodek
807c947a43 Always clear L1 PTE descriptor when removing superpage on ARM
Invalidate L1 PTE regardles of existance of the corresponding
l2_bucket. This is relevant when superpage is entered via
pmap_enter_object() and will fix crash on entering page
in place of not properly removed superpage.
2014-02-15 13:13:00 +00:00
Christian Brueffer
d01195e3a9 Correct the order of arguments to mtx_init().
PR:		186701
Submitted by:	Takanori Sawada <tak.swd at gmail.com>
MFC after:	2 weeks
2014-02-14 11:18:15 +00:00
Andrew Turner
7cbd3dd68b Allow the kernel to be loaded at any 1MiB address. This requirement is
because we use the 1MiB section maps as they only need a single pagetable.

To allow this we only use pc relative loads to ensure we only load from
physical addresses until we are running from a known virtual address.

As a side effect any data from before or 64MiB after the kernel needs to
be mapped in to be used. This should not be an issue for kernels loaded
with ubldr as it places this data just after the kernel. It will be a
problem when loading directly from anything using the Linux ABI that
places the ATAG data outside this range, for example U-Boot.
2014-02-13 21:30:54 +00:00
Ian Lepore
f688503cc4 Remove a couple obsolete function declarations. 2014-02-13 19:14:23 +00:00
Luiz Otavio O Souza
62564a0858 Make the gpioled(4) work out of the box on BBB.
Add gpioled(4) to BEAGLEBONE kernel and add the description of the four
on-board leds of beaglebone-black to its DTS file.

Approved by:	adrian (mentor, implicit)
2014-02-13 18:51:37 +00:00
Luiz Otavio O Souza
8c705c2c30 Allow the use of the OFW GPIO bus for ti_gpio and bcm2835_gpio. With this
change the gpio children can be described as directly connected to the GPIO
controller without the need of describing the OFW GPIO bus itself on the
DTS file.

With this commit the OFW GPIO bus is fully functional on BBB and RPi.

GPIO controllers which want to use the OFW GPIO bus will need similar
changes.

Approved by:	adrian (mentor, implicit)
2014-02-13 18:42:23 +00:00
Warner Losh
fd420f84dd Honor the disabled status by only grabbing resources and returning
when running under FDT.
2014-02-13 16:50:08 +00:00
Warner Losh
88bc24ff35 Fix board ID too... 2014-02-13 15:47:41 +00:00
Warner Losh
2956b2b069 Fix board name. 2014-02-13 15:46:08 +00:00
Ruslan Bukin
896fc918b1 Add function for configuring PLL4 (Audio) clock frequency output. 2014-02-13 06:38:01 +00:00
Ian Lepore
1d650ff3a8 Add handling of standard "non-removable" property, and also some workaround
code so that if card detect is wired to a gpio pin, for now we just treat
it the same as non-removable (because there isn't a gpio driver yet).
2014-02-13 03:45:33 +00:00
Ian Lepore
1744bacc7b Write translation code for the SDHCI_PRESENT_STATE register. Freescale
moved some bits around in their version of the register, adjust things
so that the sdhci code sees the standard layout.
2014-02-13 02:38:16 +00:00
Ian Lepore
28ea625437 Use the same logic as the x86 platforms to avoid trying perform fault fixup
while in a critical section or while holding a non-sleepable lock.

Reviewed by:	cognet
2014-02-12 20:09:27 +00:00
Ian Lepore
255a0cc653 Use the right symbols for determining arm architecture. Include the
necessary header file which has the new FAULT_WNR symbol defined in it.
2014-02-12 19:59:30 +00:00
Ian Lepore
bcaa399985 On armv6 and later, use the WriteNotRead bit of the fault status register
to decide what protections are required by the faulting access.  The old
code disassembled the faulting instruction, and there are a lot of new
instructions that aren't handled.  The old code is still used for armv4/5
which doesn't have the WNR bit)
2014-02-12 18:55:26 +00:00
Warner Losh
ff9a07fa97 Convert two while(1); statements into proper panics. Soon, kernels
with early printf support will print this info... For kernels without,
the observed behavior will be the same as it is now...
2014-02-12 03:19:35 +00:00
Ian Lepore
42c8459bed 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
Warner Losh
360bd8ad2b Swap PA and VA so they are in the right registers... 2014-02-11 22:09:03 +00:00
Ian Lepore
7233ddb0cb 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
Ruslan Bukin
ebc7703641 Disable debugging by default. 2014-02-11 20:14:54 +00:00
Ian Lepore
65f04a3da5 Update legacy platforms to use new arm_physmem helper routines. 2014-02-09 22:10:14 +00:00
Ian Lepore
46aa33b2ac 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
Warner Losh
1ef5f6a006 Add FDT attachment. 2014-02-09 21:02:46 +00:00
Warner Losh
c6053263cc FDT attachment... 2014-02-09 21:01:53 +00:00
Warner Losh
3526a97bba 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
Warner Losh
bf5c70c929 Add FDT attachment. 2014-02-09 21:00:22 +00:00
Warner Losh
22a484c9d5 Add FDT attachment. Flag lost functionality with FDT_HACKS so we can
find it later.
2014-02-09 20:59:46 +00:00
Warner Losh
bc259c9157 Add FDT attachment. 2014-02-09 20:58:03 +00:00
Warner Losh
4da9131d2a Add FDT attachment, plus minor code shuffle. 2014-02-09 20:57:26 +00:00
Warner Losh
210c0e4c87 Add FDT attachment. 2014-02-09 20:56:39 +00:00
Warner Losh
bad391b21c Add FDT matching code. 2014-02-09 20:55:49 +00:00
Ian Lepore
342322bb36 Add some extra debugging output when DEBUG is defined. 2014-02-09 20:20:49 +00:00
Ian Lepore
c884902d1f Fix the exclude-region clipping logic for the edge-trim case. 2014-02-09 20:19:41 +00:00
Andrew Turner
b2478843a9 Pass the pagetable used from locore.S to initarm to allow it to map data
in as required.
2014-02-09 15:54:31 +00:00
Ian Lepore
73ab448c43 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 Lepore
d215d5c662 Use vm_paddr_t, not vm_offset_t, when dealing with physical addresses.
Pointed out by:	alc
2014-02-09 14:35:44 +00:00
Andrew Turner
321d79fdca Remove the now unused MMU_INIT macro. 2014-02-09 12:52:39 +00:00
Ian Lepore
0c27b1d4fd 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 Lepore
88fdb318f0 Calculate the kernel's load address from the PC in the elf / gzip
trampoline instead of relying on KERNPHYSADDR as a compile-time constant.
2014-02-09 02:06:12 +00:00
Ian Lepore
ca3eec15c0 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 Lepore
5698bf8c86 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
Ian Lepore
007aeeced6 Remove the ARM_USE_SMALL_ALLOC option and code related to it.
This was an optimization used only by a few xscale platforms.  Part of
the optimization was to create a direct map for all physical pages, and
that resulted in making multiple mappings of pages in a way that bypassed
the logic in pmap.c to handle VIVT cache aliasing.  It also just generally
made the code more complex and hard to maintain for all SoCs.

Reviewed by:	cognet
2014-02-08 22:21:38 +00:00
Ruslan Bukin
f3a72e40b5 Add drivers for:
- Enhanced Direct Memory Access Controller (eDMA)
- Direct Memory Access Multiplexer (DMAMUX)
2014-02-08 19:47:59 +00:00
Andrew Turner
bc6c10477d Dynamically generate the page table. This will allow us to detect the
physical address we are loaded at to change the mapping.
2014-02-07 19:15:25 +00:00
Ian Lepore
667a1295b3 Remove references to PHYSADDR where it's used only in debugging output,
and where the code that references it can safely be elided if it's not
defined (meaning the code is used for legacy arm platforms that still
define the compile-time PHYSADDR but not on newer systems that calculate
the value at runtime).
2014-02-07 14:38:51 +00:00
Ian Lepore
7fc3a5ec6b Add option USB_HOST_ALIGN=64 for all SoCs that have 64 byte cache lines. 2014-02-07 04:05:08 +00:00
Ian Lepore
082660c8e1 Revert r260440. I didn't realize that most of this change was already
in effect due to r250753.  That is sufficient for all SoCs with a 32 byte
cache line size.  Systems with 64 byte cache lines will need the option;
that will be done in a separate commit.

Thanks to loos@ for pointing out r250753.
2014-02-07 03:30:16 +00:00
Andrew Turner
9e4ed33024 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
Andrew Turner
a9540a2624 Fix __syscall on armeb EABI. As it returns a 64-bit value it needs to place
32-bit data in r1, not r0. 64-bit data is already packed correctly.
2014-02-06 20:26:36 +00:00
Andrew Turner
15a922df35 Make functions only used in this file static, and remove vfp_enable as it
is unused.
2014-02-06 20:23:35 +00:00
Andrew Turner
313857e9b7 Pass the kernel physical address to initarm through the boot param struct. 2014-02-06 20:17:58 +00:00
Nathan Whitehorn
65d08437ef Move Open Firmware device root on PowerPC, ARM, and MIPS systems to
a sub-node of nexus (ofwbus) rather than direct attach under nexus. This
fixes FDT on x86 and will make coexistence with ACPI on ARM systems easier.
SPARC is unchanged.

Reviewed by:	imp, ian
2014-02-05 14:44:22 +00:00
Warner Losh
5f384f7c36 Remove trailing tabs causing false grep positives 2014-02-04 05:26:12 +00:00
Warner Losh
664b50e6e5 s/standard/optional/ for ohci and echi, since these files are optional
and not standard.
2014-02-04 05:21:57 +00:00
Olivier Houchard
d5e7c3b7af Only use the CPU ID register if SMP is defined. Some non-MPCore armv6 cpu,
such as the one found in the RPi, don't have it, and just hang when we try
to access it.
2014-02-02 23:29:51 +00:00
Olivier Houchard
2dfc0cd1b1 Invalidate cachelines for bounce pages on PREREAD too, there may still be
stale entries from a previous transfer.
2014-02-02 22:26:30 +00:00
Ian Lepore
af727bf0d3 Add missing semicolon. 2014-02-02 21:44:04 +00:00
Ruslan Bukin
8c7da46079 o Add prototype for tcon_bypass() used by dcu4
o Add register definition
2014-02-02 21:10:40 +00:00
Olivier Houchard
646b940455 Change the way pcpu and curthread are stored per-core:
the old way was to store pcpu in a register, and get curthread from pcpu,
which is not very atomic, and led to issues if the thread was migrated
to another core between the time we got the pcpu address and the time we
got curthread.
Instead, we now store curthread where pcpu used to be store, and we
calculate the pcpu address based on the cpu id.
2014-02-02 20:58:23 +00:00
Olivier Houchard
006a01df2c Don't call device_set_ivars() for the mmchs, it doesn't seem to be used,
and it overrides the ivars set by the simplebus.
2014-02-02 20:45:41 +00:00
Ruslan Bukin
bb8bc226d3 Add driver for Display Control Unit (DCU4). 2014-02-02 20:25:27 +00:00
Ruslan Bukin
b318fc466d Add support for Colibri VF50 Evaluation Board.
Colibri VF50 is a SODIMM200 Vybrid Family core module
and development board produced by Toradex AG.

Sponsored by:	Machdep, Inc.
2014-02-02 19:35:10 +00:00
Ian Lepore
add35ed5b8 Follow r261352 by updating all drivers which are children of simplebus
to check the status property in their probe routines.

Simplebus used to only instantiate its children whose status="okay"
but that was improper behavior, fixed in r261352.  Now that it doesn't
check anymore and probes all its children; the children all have to
do the check because really only the children know how to properly
interpret their status property strings.

Right now all existing drivers only understand "okay" versus something-
that's-not-okay, so they all use the new ofw_bus_status_okay() helper.
2014-02-02 19:17:28 +00:00
Ruslan Bukin
6f34487cc9 Split kernel configuration to chip common and board specific parts. 2014-02-02 19:13:02 +00:00
Ruslan Bukin
bf636ac469 o Expand device tree information
o Export iomuxc (pins) configuration to DTS
o Allow devices to assign clocks in DTS
2014-02-02 17:48:06 +00:00
Nathan Whitehorn
52567c06be Fix one remnant endian flaw here. The back-and-forth endian conversions are
confusing.
2014-02-02 16:42:26 +00:00
Nathan Whitehorn
4a5e35f650 Fix typo. Sorry for breakage! 2014-02-02 05:21:12 +00:00
Ian Lepore
37211e7bcd Update all arm code that manipulates the PSR registers to use modern syntax.
It turns out the version of gas we're using interprets the old '_all' mask
as 'fc' instead of 'fsxc'.  That is, "all" doesn't really mean "all".

This was the cause of the "wrong-endian register restore" bug that's
been causing problems with some cortex-a9 chips.  The 'endian' bit in the
spsr register would never get changed (it falls into the 'x' mask group)
and the first return-from-exception would fail if the chip had powered on
with garbage in the spsr register that included the big-endian bit.  It's
unknown why this affected only certain cortex-a9 chips.
2014-02-02 00:48:15 +00:00
Warner Losh
a865b1a02e Fix AT91SAM9260 to work with PA rather than VA device addresses. 2014-02-01 17:53:35 +00:00
Nathan Whitehorn
bbc6da03ef Open Firmware interrupt specifiers can consist of arbitrary-length byte
strings and include arbitrary information (IRQ line/domain/sense). When the
ofw_bus_map_intr() API was introduced, it assumed that, as on most systems,
these were either 1 cell, containing an interrupt line, or 2, containing
a line number plus a sense code. It turns out a non-negligible number of
ARM systems use 3 (or even 4!) cells for interrupts, so make this more
general.
2014-02-01 17:17:35 +00:00
Warner Losh
cb3b48b05d Move these for diff reduction against FDT work. 2014-01-31 23:38:05 +00:00
Warner Losh
9aa2e6f381 Minor cleanup of comments. 2014-01-31 23:28:18 +00:00
Warner Losh
3f10c1c0fc Fix silly typo... 2014-01-31 23:18:30 +00:00
Warner Losh
4587b6e9fd 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
Warner Losh
8b1bf92acc When mapping an address, the bsh needs the same offset we do for other
things.
2014-01-31 01:18:34 +00:00
Warner Losh
9a40e29377 Fix the name of the dts file for the HL201... 2014-01-30 03:14:36 +00:00
Warner Losh
6af02384da Fix clang warning. 2014-01-28 22:07:16 +00:00
Andrew Turner
979d76c948 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
Warner Losh
255943f9d0 Remove extra parens to silence clang warning. 2014-01-27 19:31:18 +00:00
John-Mark Gurney
6eebe8507a fix args to mtx_init
Note that this commit hasn't been compile tested because these files
are not hooked up to the build...

PR:		186129
Submitted by:	Takanori Sawada
Approved by:	rpaulo
2014-01-27 17:31:21 +00:00
Warner Losh
9107643c54 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
Warner Losh
1fb293548d Make early printf output nicer by inserting a carriage return before
any linefeeds that are output.
2014-01-25 21:57:45 +00:00
Warner Losh
a500a7ce91 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 Turner
9bd8ce289b Fix gcc with -Wstrict-prototypes by telling it bi_emac takes no parameters. 2014-01-25 19:36:27 +00:00
Andrew Turner
af3088290b Correct the alignment of sp through functions that use UNWINDSVCFRAME. We
were incorrectly adding the trap frame padding to the stack pointer after
reading it's value and unaligning it.
2014-01-24 20:51:56 +00:00
Warner Losh
26fb3de82c Remove obsolete option 2014-01-24 17:00:27 +00:00
Warner Losh
5fac1adda0 Fix comment to match option 2014-01-24 16:58:50 +00:00
Warner Losh
8a141da3d0 Fix comment to match option 2014-01-24 16:58:21 +00:00
Warner Losh
26c1c257fe Fix comment to match option 2014-01-24 16:57:42 +00:00
Warner Losh
624932ff81 Add NAND support
Fix comment
This board has 4 wire support
2014-01-24 16:56:27 +00:00
Warner Losh
0da1cf4094 Remove redundant declaration for uart devclass.
Commint some unrelated, but harmless, FDT ifdefs.
2014-01-24 16:50:15 +00:00
Warner Losh
8c9dc67411 Clean up HL201 config (for the hot-e 201 and 101 models from thinlinx).
Make comments match parameters
Add options for early printf so we get regression build testing on it.
Add preview of options for FDT support coming soon (I hope)
2014-01-22 22:01:29 +00:00
Warner Losh
52e996ac52 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
Warner Losh
88b842d215 Add support for mapping a small range of the SoC devices for debugging
purposes early in boot.
2014-01-22 21:23:58 +00:00
Warner Losh
99fd7cb44d We need nand now that the boards reference it. 2014-01-20 19:57:30 +00:00
Warner Losh
294ef64a17 Introduce grab and ungrab upcalls. When the kernel desires to grab the
console, it calls the grab functions. These functions should turn off
the RX interrupts, and any others that interfere. This makes mountroot
prompt work again. If there's more generalized need other than
prompting, many of these routines should be expanded to do those new
things.

Reviewed by:	bde (with reservations)
2014-01-19 19:36:11 +00:00
Warner Losh
1067f8879b Add nand device and NANDFS into the mix for those boards that have
support for it at the moment.
2014-01-19 18:09:00 +00:00
Warner Losh
2bff652222 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
Warner Losh
7b94bdc970 Add standard memory controller helper functions. 2014-01-19 17:45:13 +00:00
Aleksandr Rybalko
5f171f64a2 Fix build after FDT changes.
Sponsored by:	The FreeBSD Foundation
2014-01-16 14:48:23 +00:00
Warner Losh
7855b0bd68 Add data so we can convert a PIO unit number into a base address. 2014-01-15 19:53:36 +00:00
Warner Losh
db9765adeb Provide a simplified way to specify GPIO pins for the Atmel port. 2014-01-15 19:49:12 +00:00
Ian Lepore
afaa74ffe7 Add a prototype for the new arm_devmap_print_table(). This should have
been part of r260490.
2014-01-09 20:57:19 +00:00
Ian Lepore
a0e04ab3ff Add a function to print the contents of the static device mapping table,
and invoke it for bootverbose logging, and also from a new DDB command,
"show devmap".  Also tweak the format string for the bootverbose output
of physical memory chunks to get the leading zeros in the hex values.
2014-01-09 18:51:57 +00:00
Ian Lepore
14f4ecfafa Add option USB_HOST_ALIGN to configs that contain 'device usb'. Setting
this to the cache line size is required to avoid data corruption on armv4
and armv5, and improves performance on armv6, in both cases by avoiding
partial cacheline flushes for USB IO.
2014-01-08 03:42:09 +00:00
Ian Lepore
7c2136adbb Add option USB_HOST_ALIGN to configs that contain 'device usb'. Setting
this to the cache line size is required to avoid data corruption on armv4
and armv5, and improves performance on armv6, in both cases by avoiding
partial cacheline flushes for USB IO.

All these configs already exist in 10-stable.  A few that don't (and
thus can't be MFC'd yet) will be committed separately.
2014-01-08 03:40:18 +00:00
Andreas Tobler
6bb9be1b41 Fix arm build.
Reviewed by:	ian, zbb
2014-01-06 17:16:27 +00:00
Ian Lepore
358018a688 Switch to using arm_devmap_add_entry() to set up static device mapping.
This eliminates the hard-coded max kva and roughly doubles the available
kva space.
2014-01-06 16:57:22 +00:00
Ian Lepore
4f9ffa42b0 Don't try to find a static mapping before calling pmap_mapdev(), that logic
is now part of pmap_mapdev() and doesn't need to be duplicated here.
Likewise for unmapping.
2014-01-06 16:33:16 +00:00
Ian Lepore
62a70ef64d Allow 'no static device mappings' to potentially work. It's not clear that
every arm system must have some static mappings to work correctly (although
currently they all do), so remove some panic() calls (which would never
been seen anyway, because they would happen before a console is available).
2014-01-06 16:07:27 +00:00
Ian Lepore
fdadb971af Switch to using arm_devmap_add_entry() to set up static device mapping.
This eliminates the hard-coded max kva and roughly doubles the available
kva space.
2014-01-06 15:48:16 +00:00
Ian Lepore
02c7dba919 Remove dev/fdt/fdt_pci.c, which was code specific to Marvell ARM SoCs,
related to setting up static device mappings.  Since it was only used by
arm/mv/mv_pci.c, it's now just static functions within that file, plus
one public function that gets called only from arm/mv/mv_machdep.c.
2014-01-05 22:36:34 +00:00
Ian Lepore
8f4fa88900 Enable the cesa security/crypto device by providing the required property
in the dts source, and adding the right devices to the kernel config. Also
generally bring the kernel config into line with what we have for other
Marvell/Kirkwood systems (add lots of useful devices and options).

One particularly notable addition amongst the kernel config changes is
USB_HOST_ALIGN=32, which may help eliminate data corruption on USB drives.

PR:		kern/181975 arm/162159
2014-01-05 20:44:10 +00:00
Ian Lepore
170e15fb4c Add #include <machine/fdt.h> to a few files that used to get it via
pollution from other headers.
2014-01-05 20:09:51 +00:00
Nathan Whitehorn
dcd08302e5 Retire machine/fdt.h as a header used by MI code, as its function is now
obsolete. This involves the following pieces:
- Remove it entirely on PowerPC, where it is not used by MD code either
- Remove all references to machine/fdt.h in non-architecture-specific code
  (aside from uart_cpu_fdt.c, shared by ARM and MIPS, and so is somewhat
  non-arch-specific).
- Fix code relying on header pollution from machine/fdt.h includes
- Legacy fdtbus.c (still used on x86 FDT systems) now passes resource
  requests to its parent (nexus). This allows x86 FDT devices to allocate
  both memory and IO requests and removes the last notionally MI use of
  fdtbus_bs_tag.
- On those architectures that retain a machine/fdt.h, unused bits like
  FDT_MAP_IRQ and FDT_INTR_MAX have been removed.
2014-01-05 18:46:58 +00:00
Ian Lepore
51dbd04609 Convert from using fdt_immr style to arm_devmap_add_entry() to make
static device mappings.

This SoC relied heavily on the fact that all devices were static-mapped
at a fixed address, and it (rather bogusly) used bus_space read and write
calls passing hard-coded virtual addresses instead of proper bus handles,
relying on the fact that the virtual addresses of the mappings were known
at compile time, and relying on the implementation details of arm
bus_space never changing.  All such usage was replaced with calls to
bus_space_map() to obtain a proper bus handle for the read/write calls.

This required adjusting some of the #define values that map out hardware
registers, and some of them were renamed in the process to make it clear
which were defining absolute physical addresses and which were defining
offsets.  (The ones that just define offsets don't appear to be referenced
and probably serve no value other than perhaps documentation.)
2014-01-05 18:40:06 +00:00
Ian Lepore
caca500f02 Eliminate use of fdt_immr_addr(), it's not needed for this SoC. Convert
to the newer arm_devmap_add_entry() routine for creating device mappings.
2014-01-05 16:45:34 +00:00
Ian Lepore
6bd6fe5bbb Use the common armv6 fdt_bus_tag defintion instead of an essentially
identical local copy of it.
2014-01-05 15:33:33 +00:00
Ian Lepore
273f1d76d9 Doh! Use C comments, not C++. 2014-01-04 22:14:59 +00:00
Ian Lepore
219f39ba09 Convert static device mapping to use the new arm_devmap_add_entry(),
and add static mappings that cover most of the on-chip peripherals with
1MB section mappings.  This adds about 220MB or so available kva space
by not using a hard-coded 0xF0000000 as the mapping address.
2014-01-04 22:09:53 +00:00
Ian Lepore
c18fc3ff67 In pmap_mapdev(), first check whether a static mapping exists, and if so
use it rather than allocating kva space and making another mapping.  In
pmap_unmapdev(), don't unmap/free if the mapping is static.
2014-01-04 21:38:41 +00:00
Ian Lepore
f61b6fe561 Use bus_space_map() rather than pmap_mapdev() in nexus_activate_resource(),
when running on FDT systems.  Unmap memory in nexus_deactivate_resource().

Also, call rman_activate_resource() before mapping device memory, and only
do the mapping if it returns success.

Reviewed by:	nwhitehorn
2014-01-04 21:18:22 +00:00
Nathan Whitehorn
818f49fc98 Implement OFW_BUS_MAP_INTR() in terms of the FDT PIC table, which will
become an ARM-specific quirk.
2014-01-04 20:59:03 +00:00
Ian Lepore
faacdbd9cf Fix a typo that caused a loop to run beyond the end of the array it was
searching.  If you didn't configure a timer capture pin you'd get a data
abort as it wandered into the weeds, now you get a nice warning message
about your config, as originally intended.
2014-01-03 21:38:33 +00:00
Zbigniew Bodek
e1b5472915 Fix race condition in DELAY for SP804 timer.
Fix race condition in DELAY function: sc->tc was not initialized yet when
time_counter pointer was set, what resulted in NULL pointer dereference.

Export sysfreq to dts.

Submitted by:	Wojciech Macek <wma@semihalf.com>
Obtained from:	Semihalf
2014-01-01 20:35:38 +00:00
Zbigniew Bodek
4acd62c51e Add polarity and level support to ARM GIC
Add suport for setting triggering level and polarity in GIC.
New function pointer was added to nexus which corresponds
to the function which sets level/sense in the hardware (GIC).

Submitted by:	Wojciech Macek <wma@semihalf.com>
Obtained from:	Semihalf
2014-01-01 20:03:48 +00:00
Warner Losh
6f4f8f233c Set the SoC name for the atmelbus name. 2013-12-30 18:10:04 +00:00
Adrian Chadd
f553cf3bb9 Revert r252694 - which attempted to fix bit emulation for armv6/armv7.
This seems to cause issues with jemalloc + {dhclient, sshd}.

Thus, revert this for now until the root cause can be found and
fixed.

This should quieten some runtime problems with the Raspberry Pi.

PR: kern/185046
MFC after: 3 days
2013-12-27 05:01:13 +00:00
Ian Lepore
fb962e6dcf Add PPS support to the am335x timer driver. This uses the timer hardware's
capture mode together with the timecounter's PPS polling feature to get
very accurate PPS capture without any interrupt processing (or latency).

Hardware timers 4 through 7 have associated capture-trigger input pins.
When the PPS support is compiled in the code automatically chooses the
first timer it finds that has the capture-trigger pin set to input mode
(this is configured via the fdt data).
2013-12-22 23:03:29 +00:00
Ian Lepore
97247a2acf A variety of cleanups...
- Use named constants for register bits, instead of mystery numebrs
   scattered around in the code.
 - Use inline functions for bus space read/write, instead of macros
   that rely on global variables.
 - Move the timecounter struct into the softc instead of treating it
   as a global variable.  Backlink from it to the softc.
 - This leaves a pointer to the softc as the only static/global variable
   and it's now used only by DELAY().
2013-12-22 21:44:32 +00:00
Ian Lepore
b125ed0241 Map out all the timer-related registers, and define named constants for
the bits within the registers.
2013-12-22 21:35:18 +00:00
Ian Lepore
299e547f97 Shorten the DMTIMER_ prefix used for register names to DMT_. This is in
preparation for adding more complete register defintions, some of which
have fairly long names.
2013-12-22 20:40:56 +00:00
Aleksandr Rybalko
e58e20aeda Add Freescale i.MX515 vt(9) driver.
Sponsored by:	The FreeBSD Foundation
2013-12-22 16:09:29 +00:00
Warner Losh
f83ed22cb6 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
Ganbold Tsagaankhuu
543c9e95f2 Add identification and necessary type checks for Krait CPU cores. Krait CPU is used in
Qualcomm Snapdragon S4 and Snapdragon 400/600/800 SoCs and has architectural
similarities to ARM Cortex-A15. As for development boards IFC6400 series embedded
boards from Inforce Computing uses Snapdragon S4 Pro/APQ8064.

Approved by: stas (mentor)
2013-12-20 00:56:23 +00:00
Aleksandr Rybalko
86b04d42ec Fix copyright and some style(9) things.
Sponsored by:	The FreeBSD Foundation
2013-12-17 15:34:38 +00:00
Aleksandr Rybalko
0f705e869b Add vt support for RPi. (No early stage yet.)
Sponsored by:	The FreeBSD Foundation
2013-12-17 15:23:47 +00:00
Nathan Whitehorn
95e3bfe889 Simplify the ofw_bus_lookup_imap() API slightly: make it allocate maskbuf
internally instead of requiring the caller to allocate it.
2013-12-17 15:11:24 +00:00
Nathan Whitehorn
c826a64307 Use the common Open Firmware PCI interrupt routing code instead of the
duplicate version in dev/fdt.

Tested by:	zbb
2013-12-16 22:04:47 +00:00
Luiz Otavio O Souza
9fa569a713 After r256961 ofw_iicbuc.c will be built for any kernel which includes
options 'iicbus' and 'fdt'.  Remove the (now) unnecessary entries.

Verified on BBB (am335x), EFIKA_MX (imx51 - by ray@), DIGI-CCWMX53
(imx53 - kernel build).

Approved by:	adrian (mentor)
2013-12-12 18:29:36 +00:00
Warner Losh
9336463d86 Loose -> Lose so this sentence makes sense.
MFC after:	3 days
2013-12-11 15:32:28 +00:00
Warner Losh
19dab280cc 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
John Baldwin
0b20d9bf78 Correct license statements to reflect the fact that these files were all
derived from sys/arm/mv/bus_space.c.

Approved by:	core
2013-12-10 22:13:36 +00:00
Luiz Otavio O Souza
7f6897133f Bring the RPi I2C driver in line with ti_i2c. Make it treat any slave
address as a 7-bit address.

Approved by:	adrian (mentor)
2013-12-09 12:01:17 +00:00
Luiz Otavio O Souza
05a92e03c3 Activate the device before attempt to access any of its registers. Without
this change we may end up with a panic (Fatal kernel mode data abort:
'External Non-Linefetch Abort (S)') as described in
http://e2e.ti.com/support/arm/sitara_arm/f/791/t/276862.aspx.

It is now possible to bring up I2C1 and I2C2 on BBB.

Approved by:	adrian (mentor)
2013-12-09 11:51:17 +00:00
Luiz Otavio O Souza
8537123a62 Fix a few typos on the scm (control module) pin mux definitions.
Approved by:	adrian (mentor)
2013-12-09 11:33:45 +00:00
Ganbold Tsagaankhuu
bfb24e2a06 Add gpio parse routines according to sys/boot/fdt/dts/bindings-gpio.txt.
Reviewed by: stas@
2013-12-09 07:14:59 +00:00
Luiz Otavio O Souza
87bd9889d1 Similar to r255816, fix the math for the DELAY() calculation. It was off
by a really small amount because of the higher timer resolution.

Approved by:	adrian (mentor)
Verified on:	BBB
2013-12-08 13:46:27 +00:00
Warner Losh
0b40a04719 Although not strictly required to boot a 64MB board, bump
vm_max_virtual_address to be KERNVIRTADDR + 256MB. This allows some
future shock protection since the KVA requirements have gone up since
the unmapped changes have gone in, as well as preventing us from
overlapping with the hardware devices, which we map at 0xd0000000,
which we'd hit with anything more than 85MB...

MFC after:	3 days
2013-12-06 18:41:16 +00:00
Luiz Otavio O Souza
9f16518401 Fix the pin value reading on AM335x. Because of the inverted logic it was
always returning '0' for all the reads, even for the outputs.  It is now
known to work with gpioiic(4) and gpioled(4).

Approved by:	adrian (mentor)
Tested on:	BBB
2013-12-06 18:09:10 +00:00
Luiz Otavio O Souza
1fbabb4886 Make the sysctl node read-only.
Approved by:	adrian (mentor)
2013-12-06 17:45:14 +00:00
Zbigniew Bodek
a92a06d31a Enable missing Access Flag for secondary cores on ARMv6/v7
Spotted by:	Wojciech Macek <wma@semihalf.com>
Obtained from:	Semihalf
2013-12-02 13:09:59 +00:00
Ian Lepore
f32d80bf1f Add a nand flash controller driver for Atmel at91 family. Tested only
on at91rm9200 so far.

The files.at91 has listed a nand driver for ages, but it never existed.
2013-12-02 03:52:40 +00:00
Ian Lepore
ca38150ce3 Add definitions for the additional PIO pins found on recent AT91 SoCs. 2013-12-02 02:33:03 +00:00
Eitan Adler
4be4358fd1 r258780 should not have applied to .S files.
Reported by:	jmallett
2013-12-01 02:58:48 +00:00
Eitan Adler
7a22215c53 Fix undefined behavior: (1 << 31) is not defined as 1 is an int and this
shifts into the sign bit.  Instead use (1U << 31) which gets the
expected result.

This fix is not ideal as it assumes a 32 bit int, but does fix the issue
for most cases.

A similar change was made in OpenBSD.

Discussed with:	-arch, rdivacky
Reviewed by:	cperciva
2013-11-30 22:17:27 +00:00
Ian Lepore
4808bd047e Set the PGA_WRITEABLE flag when the protections indicate write access, not
just when the current access is a write.

Reviewed by:	zbb@
2013-11-29 15:06:11 +00:00
Ganbold Tsagaankhuu
18d753d0fb Enable reset mechanism for rk3188.
Approved by: ray@
2013-11-25 11:02:58 +00:00
Ganbold Tsagaankhuu
421663eb64 Add watchdog driver for rk3188.
Approved by: ray@
2013-11-25 11:01:19 +00:00
Gavin Atkinson
e0c634180c Fix typo in comment. 2013-11-24 22:53:49 +00:00
Gavin Atkinson
702701714b platform_devmap_init() was renamed initarm_devmap_init() in r257669, update
comments to match.
2013-11-24 22:01:15 +00:00
Ian Lepore
c6ff193255 Call cpu_setup() from the initarm() routine on platforms that don't use
the common FDT-aware initarm() in arm/machdep.c.

Pointed out by:	     cognet
Pointy hat to:	     ian
2013-11-21 01:08:10 +00:00
Olivier Houchard
e5926a9f69 In pmap_unmapdev(), remember the size, and use that as an argument to
kva_free(), or we'd end up always passing it a size of 0, and for some
strange reason it doesn't seem to like it.
2013-11-20 23:06:54 +00:00
Ian Lepore
27ce8f8368 Add USB_HOST_ALIGN=64; the cache line size on the am335x is 64 bytes. 2013-11-20 16:42:01 +00:00
Ian Lepore
db87bba4c7 Call cpu_setup() immediately after the page tables are installed. This
enables data cache and other chip-specific features.  It was previously
done via an early SYSINIT, but it was being done after pmap and vm setup,
and those setups need to use mutexes.  On some modern ARM platforms,
the ldrex/strex instructions that implement mutexes require the data cache
to be enabled.

A nice side effect of enabling caching earlier is that it eliminates the
multi-second pause that used to happen early in boot while physical memory
and pmap and vm were being set up.  On boards with 1 GB or more of ram
this pause was very noticible, sometimes 5-6 seconds.

PR:		arm/183740
2013-11-20 15:53:50 +00:00
Zbigniew Bodek
a39370ff87 Apply access flags for managed and unmanaged pages properly on ARMv6/v7
When entering a mapping via pmap_enter() unmanaged pages ought to be
naturally excluded from the "modified" and "referenced" emulation.
RW permission should be granted implicitly when requested,
otherwise unmanaged page will not recover from the permission fault
since there will be no PV entry to indicate that the page can be written.

In addition, only managed pages that participate in "modified"
emulation need to be marked as "dirty" and "writeable" when entered
with RW permissions. Likewise with "referenced" flag for managed pages.
Unmanaged ones however should not be marked as such.

Reviewed by:	cognet, gber
2013-11-19 23:37:50 +00:00
Zbigniew Bodek
5677154505 Avoid clearing EXEC permission bit when setting the page RW on ARMv6/v7
When emulating modified bit the executable attribute was cleared by
mistake when calling pmap_set_prot(). This was not a problem before
changes to ref/mod emulation since all the pages were created RW basing
on the "prot" argument in pmap_enter(). Now however not all pages are RW
and the RW permission can be cleared in the process.

Added proper KTRs accordingly.

Spotted by:	cognet
Reviewed by:	gber
2013-11-19 23:31:39 +00:00
Ian Lepore
19bc299f1c Bugfixes... the host capabilties from FDT data are stored in host.caps, not
host.host_ocr, examine the correct field when setting up the hardware.  Also,
the offset for the capabilties register should be 0x140, not 0x240.

Submitted by:	Ilya Bakulin <ilya@bakulin.de>
Pointy hat to:	me
2013-11-19 22:14:35 +00:00
Alan Cox
eb11fc3cf3 Implement pmap_align_superpage().
MFC after:	6 weeks
2013-11-17 23:28:10 +00:00
Ian Lepore
055a74d854 In the data abort handler, don't panic if kdb is available and says it
handled the condition.

PR:		arm/183668
Submitted by:	Howard Su <howard0su@gmail.com>
2013-11-16 23:37:56 +00:00
Rui Paulo
3477d65d6a Enable the ti_mbox and ti_pruss drivers. 2013-11-16 08:28:14 +00:00
Rui Paulo
8cfbb9cf03 Add a driver for the TI Programmable Realtime Unit Subsystem.
This is only a userland accessibility driver.  It mmaps the hardware region to
userland and posts interrupt notifications via kqueue.
2013-11-16 08:23:15 +00:00
Rui Paulo
5b8db1da54 Add a driver for the Texas Instruments Mailbox hardware. 2013-11-16 08:20:50 +00:00
John Baldwin
5e9257436c Remove an incorrectly copied and pasted clause from these license
statements.

Approved by:	Yohanes Nugroho <yohanes@gmail.com>
MFC after:	1 week
2013-11-15 16:16:55 +00:00
Ruslan Bukin
009e1b7790 o Use common ARMv6/v7 bus_space tag.
o Use new helper routines for arm static device mapping.
o style(9) tweaks.
2013-11-13 16:17:05 +00:00
Ruslan Bukin
5c263f43ef Add support for Freescale Vybrid Family VF600 heterogeneous
ARM Cortex-A5/M4 SoC (M4 core is not used in this work).

Support includes device drivers for:
- NAND Flash Controller (NFC)
- USB Enhanced Host Controller Interface (EHCI)
- General-Purpose Input/Output (GPIO)
- Universal Asynchronous Receiver/Transmitter (UART)

Also supported:
- Generic Interrupt Controller (GIC)
- MPCore timer
- ffec ethernet driver

Reviewed by:	ray
Approved by:	cognet (mentor)
2013-11-12 18:02:56 +00:00
Luiz Otavio O Souza
21cb1342c0 As all the IIC controllers on system uses the same 'iichb' prefix we cannot
rely only on checking the device unit to indentify the BSC unit we are
attaching to.  Make use of the device base address to identify our BSC unit.

Approved by:	adrian (mentor)
2013-11-12 13:34:07 +00:00
Ian Lepore
272faa5f51 Apparently with "const uint32_t foo = 0x60;" gcc doesn't consider 'foo'
to be a constant integer suitable for use in a case label, so use #defines.
2013-11-10 21:12:42 +00:00
Alan Cox
647e61eaca Eliminate an unused macro. 2013-11-08 16:56:13 +00:00
Alan Cox
c70af4875e As of r257209, all architectures have defined VM_KMEM_SIZE_SCALE. In other
words, every architecture is now auto-sizing the kmem arena.  This revision
changes kmeminit() so that the definition of VM_KMEM_SIZE_SCALE becomes
mandatory and the definition of VM_KMEM_SIZE becomes optional.

Replace or eliminate all existing definitions of VM_KMEM_SIZE.  With
auto-sizing enabled, VM_KMEM_SIZE effectively became an alternate spelling
for VM_KMEM_SIZE_MIN on most architectures.  Use VM_KMEM_SIZE_MIN for
clarity.

Change kmeminit() so that the effect of defining VM_KMEM_SIZE is similar to
that of setting the tunable vm.kmem_size.  Whereas the macros
VM_KMEM_SIZE_{MAX,MIN,SCALE} have had the same effect as the tunables
vm.kmem_size_{max,min,scale}, the effects of VM_KMEM_SIZE and vm.kmem_size
have been distinct.  In particular, whereas VM_KMEM_SIZE was overridden by
VM_KMEM_SIZE_{MAX,MIN,SCALE} and vm.kmem_size_{max,min,scale}, vm.kmem_size
was not.  Remedy this inconsistency.  Now, VM_KMEM_SIZE can be used to set
the size of the kmem arena at compile-time without that value being
overridden by auto-sizing.

Update the nearby comments to reflect the kmem submap being replaced by the
kmem arena.  Stop duplicating the auto-sizing formula in every machine-
dependent vmparam.h and place it in kmeminit() where auto-sizing takes
place.

Reviewed by:	kib (an earlier version)
Sponsored by:	EMC / Isilon Storage Division
2013-11-08 16:25:00 +00:00
Ian Lepore
5a8b65f67a Switch to the new common bus_space-v6.c, remove the local one. 2013-11-07 04:09:19 +00:00
Ian Lepore
10f52325db Switch to the new common bus_space-v6.c, remove the local one. 2013-11-07 04:02:08 +00:00
Aleksandr Rybalko
a12e93c5ba Switch allwinner A10/A20 and rockchip ports to use common ARMv6/v7 bus_space tag.
Tested by: ganbold
2013-11-06 10:31:52 +00:00
Aleksandr Rybalko
cd183dbb20 Switch to use common ARMv6/v7 bus_space tag.
Tested by: ian, ray
2013-11-06 09:44:32 +00:00
Aleksandr Rybalko
bc06e10a0e Add common bus_space tag definition shared for most supported ARMv6/v7 SoCs.
Tested by: ian, ray
2013-11-06 09:41:19 +00:00
Nathan Whitehorn
5cd2b97cd0 Teach nexus(4) about Open Firmware (e.g. FDT) on ARM and MIPS, retiring
fdtbus in most cases. This brings ARM and MIPS more in line with existing
Open Firmware platforms like sparc64 and powerpc, as well as preventing
double-enumeration of the OF tree on embedded PowerPC (first through nexus,
then through fdtbus).

This change is also designed to simplify resource management on FDT platforms
by letting there exist a platform-defined root bus resource_activate() call
instead of replying on fdtbus to do the right thing through fdt_bs_tag.
The OFW_BUS_MAP_INTR() and OFW_BUS_CONFIG_INTR() kobj methods are also
available to implement for similar purposes.

Discussed on:	-arm, -mips
Tested by:	zbb, brooks, imp, and others
MFC after:	6 weeks
2013-11-05 13:48:34 +00:00
Ian Lepore
81acdf3f63 Remove local devmap code and use the essentially identical common code
that got moved from imx_machdep.c to arm/devmap.c.
2013-11-05 05:18:18 +00:00
Ian Lepore
0f7191e8ad Style and comment tweaks, no functional changes. 2013-11-05 05:01:46 +00:00
Ian Lepore
b4df095c2e Add new helper routines for arm static device mapping. The new code
allocates kva space from the top down for the device mappings and builds
entries in an internal table which is automatically used later by
arm_devmap_bootstrap().  The platform code just calls the new
arm_devmap_add_entry() function as many times as it needs to (up to 32
entries allowed; most platforms use 2 or 3 at most).

There is also a new arm_devmap_lastaddr() function that returns the lowest
kva address allocated; this can be used to implement initarm_lastaddr()
which is used to initialize vm_max_kernel_address.

The new code is based on a similar concept developed for the imx family
SoCs recently.  They will soon be converted to use this new common code.
2013-11-05 04:30:55 +00:00
Ian Lepore
c2d47adbb7 Make PTE_DEVICE a synonym for PTE_NOCACHE on armv4, to make it easier to
share the same code on both architectures.
2013-11-05 04:06:29 +00:00
Ian Lepore
515cbe8673 Call initarm_lastaddr() later in the init sequence, after establishing
static device mappings, rather than as the first of the initializations
that a platform can hook into.  This allows a platform to allocate KVA
from the top of the address space downwards for things like static device
mapping, and return the final "last usable address" result after that and
other early init work is done.

Because some platforms were doing work in initarm_lastaddr() that needs to
be done early, add a new initarm_early_init() routine and move the early
init code to that routine on those platforms.

Rename platform_devmap_init() to initarm_devmap_init() to match all the
other init routines called from initarm() that are designed to be
implemented by platform code.

Add a comment block that explains when these routines are called and the
type of work expected to be done in each of them.
2013-11-05 02:57:34 +00:00
Ian Lepore
3110e7eed8 Move remaining code and data related to static device mapping into the
new devmap.[ch] files.  Emphasize the MD nature of these things by using
the prefix arm_devmap_ on the function and type names (already a few of
these things found their way into MI code, hopefully it will be harder to
do by accident in the future).
2013-11-04 22:45:26 +00:00
Ian Lepore
13a98c8536 Begin reducing code duplication in arm pmap.c and pmap-v6.c by factoring
out common code related to mapping device memory into a new devmap.c file.

Remove the growing duplication of code that used pmap_devmap_find_pa() and
then did some math with the returned results to generate a virtual address,
and likewise in reverse to get a physical address.  Now there are a pair
of functions, arm_devmap_vtop() and arm_devmap_ptov(), to do that.  The
bus_space_map() implementations are rewritten in terms of these.
2013-11-04 19:44:37 +00:00
Ian Lepore
2b3f8f22e1 Remove the duplicated implementations of some bus_space functions and use
the essentially identical generic implementations instead.  The generic
implementations differ only in the spelling of a couple variable names
and some formatting differences.
2013-11-04 16:16:40 +00:00
Ian Lepore
5f1c941298 Properly quote the included filename, now that it has a dot in it. Doh. 2013-11-04 03:46:09 +00:00
Ian Lepore
ab428fad78 Rename WANDBOARD-COMMON to WANDBOARD.common and adjust the configs that
include it accordingly.  The build machinery for universe and tinderbox
tries to build every kernel config whose name begins and ends with [A-Z0-9]
and the common include file that has most of the options isn't buildable
by itself, so the new lowercase .common will avoid building it.
2013-11-04 03:39:23 +00:00
Ian Lepore
5e503d28c5 Comments and style(9) only, no functional changes. 2013-11-03 22:55:33 +00:00
Ian Lepore
8310e9ea5d Bugfix: the attach routine needs to use the same table of fdt compat
strings that the probe routine used.
2013-11-02 22:44:35 +00:00
Ian Lepore
d2f51fc343 Add a missing register definition. 2013-11-02 21:07:39 +00:00
Alan Cox
b603e09555 Don't create a distinct free page pool for segregating allocations that are
accessed through the direct map unless the kernel configuration actually
includes a direct map.  Only a few configurations do, and for the rest the
unnecessary free page pool is a small pessimization.

Tested by:	zbb
MFC after:	6 weeks
2013-11-02 17:08:20 +00:00
Ian Lepore
760eb697b4 The ability to do 8-bit implies 4-bit capability too. Rearrange the cases
and add a fallthrough comment to make that happen.
2013-11-01 19:29:59 +00:00
Ian Lepore
4a98e46950 TI sdhci driver improvements, mostly related to fdt data...
Use the published compatible strings (our own invention, "ti,mmchs" is
still accepted as well, for now).

Don't blindly turn on 8-bit bus mode, because even though the conroller
supports it, the board has to be wired appropriately as well.  Use the
published property (bus-width=<n>) and honor all the valid values (1,4,8).

The eMMC device on a Beaglebone Black is wired for 8-bit, update the dts.

The mmchs controller can inherently do both 1.8v and 3.0v on the first
device and 1.8v only on other devices, unless an external transceiver is
used.  Set the voltage automatically for the first device and honor
the published fdt property (ti,dualvolt) for other devices.

Thanks go to Ilya Bakulin for figuring out the voltage compatibility stuff.
2013-11-01 19:22:06 +00:00
Ian Lepore
bc5c7a1ad3 Kernel config for Wandboard. 2013-11-01 02:04:05 +00:00
Ian Lepore
034e9ed611 Add the Soc- / machine-dependent parts of imx6 support. 2013-11-01 00:21:09 +00:00
Ian Lepore
3d9d5b4313 Add definitions for the register and data that describes the SoC type.
This isn't in the chip reference manuals, it was found in u-boot and
various old mailing list threads.
2013-10-31 23:08:30 +00:00
Ian Lepore
f955880f7b Revamp the SoC identity numbering scheme to be more in line with the way
Freescale numbers the chips in the ID registers.
2013-10-31 23:05:05 +00:00
Ian Lepore
7352de58e8 Add sdhci driver glue for imx family SoCs. This should support both uSDHC
(newer SoCs) and eSDHC (older SoCs), but the eSDHC support is untested and
likely to need some tweaking.
2013-10-31 15:27:39 +00:00
Ian Lepore
9808ebfa39 Add stubbed-out imx6 support for clocks and power management. This
contains little more than a few stub functions required to keep the
linker happy, but it's enough to let early imx6 development proceed.
2013-10-31 15:04:23 +00:00
Ian Lepore
c8c16b3df2 Add support for the USB PHY on imx6 SoCs. Pretty minimal at this point,
but enough to get usb host mode working.
2013-10-31 14:52:06 +00:00
Ian Lepore
425a5c7900 Do not EOI an interrupt until the point after the filter handlers / before
threaded handlers.

It's not easy to see from the diffs of this change exactly how it
accomplishes the above.  The arm_mask_irq() and arm_unmask_irq() functions
are, respectively, the pre_thread and post_thread hooks.  Not seen in
these diffs, the arm_post_filter() routine also EOIs.  The post_filter
routine runs after filter handlers if there will be no threaded handlers,
so it just EOIs.  The pre_thread routine masks the interrupt (at the
controller, not the source) and EOIs.  So one way or another, the EOI
happens at the point where filter handlers are done.
2013-10-31 03:23:25 +00:00
Ian Lepore
adcea15135 Don't iterate through the bits of the pending interrupt register if the
whole register is zero.  Most of the registers will be zero most of the time.
2013-10-31 03:12:48 +00:00
Rui Paulo
74678000dc Enable USB. 2013-10-31 02:14:28 +00:00
Ian Lepore
54fe60971c Reset the timer interrupt status register at the top rather than bottom of
the interrupt handler.  If the event callback starts a new short timeout,
the timer can fire before returning from the event callback, and clearing
the interrupt status after that loses the interrupt and hangs until the
counter wraps.  Fixing all of this removes the need for the do-nothing
loop at the top of the handler which really just waited for the counter to
roll over and reach the one-shot count again.

Also add a missing return(0) in the periodic timer start case.
2013-10-31 02:11:35 +00:00
Ian Lepore
eb756ebd94 Expand the list of compatible devices this driver works with. Increase
the target frequency from 1 to 10 MHz because these SoCs are plenty fast
enough to benefit from the extra event timer resolution.
2013-10-31 01:45:55 +00:00