Commit Graph

1052 Commits

Author SHA1 Message Date
thorpej
d1c431c7e1 pmap_link_l2pt(): If not ARM32_NEW_VM_LAYOUT, add an assertion that
the VA that the page table maps is aligned to a 4MB boundary.
2003-04-22 13:49:48 +00:00
thorpej
bbef46a7e9 Some ARM32_PMAP_NEW-related cleanup:
* Define a new "MMU type", ARM_MMU_SA1.  While the SA-1's MMU is basically
  compatible with the generic, the SA-1 cache does not have a write-through
  mode, and it is useful to know have an indication of this.
* Add a new PMAP_NEEDS_PTE_SYNC indicator, and try to evaluate it at
  compile time.  We evaluate it like so:
  - If SA-1-style MMU is the only type configured -> 1
  - If SA-1-style MMU is not configured -> 0
  - Otherwise, defer to a run-time variable.
  If PMAP_NEEDS_PTE_SYNC might evaluate to true (SA-1 only or run-time
  check), then we also define PMAP_INCLUDE_PTE_SYNC so that e.g. assembly
  code can include the necessary run-time support.  PMAP_INCLUDE_PTE_SYNC
  largely replaces the ARM32_PMAP_NEEDS_PTE_SYNC manual setting Steve
  included with the original new pmap.
* In the new pmap, make pmap_pte_init_generic() check to see if the CPU
  has a write-back cache.  If so, init the PT cache mode to C=1,B=0 to get
  write-through mode.  Otherwise, init the PT cache mode to C=1,B=1.
* Add a new pmap_pte_init_arm8().  Old pmap, same as generic.  New pmap,
  sets page table cacheability to 0 (ARM8 has a write-back cache, but
  flushing it is quite expensive).
* In the new pmap, make pmap_pte_init_arm9() reset the PT cache mode to
  C=1,B=0, since the write-back check in generic gets it wrong for ARM9,
  since we use write-through mode all the time on ARM9 right now.  (What
  this really tells me is that the test for write-through cache is less
  than perfect, but we can fix that later.)
* Add a new pmap_pte_init_sa1().  Old pmap, same as generic.  New pmap,
  does generic initialization, then resets page table cache mode to
  C=1,B=1, since C=1,B=0 does not produce write-through on the SA-1.
2003-04-22 00:24:48 +00:00
thorpej
215580f2da Defflag XSCALE_CACHE_READ_WRITE_ALLOCATE and XSCALE_NO_COALESCE_WRITES. 2003-04-21 05:36:14 +00:00
thorpej
0f16fc12a0 #ifdef, not #if, for XSCALE_NO_COALESCE_WRITES. 2003-04-21 04:33:30 +00:00
thorpej
9884510327 Add a driver for the reset button on the ADI BECC. 2003-04-20 20:50:49 +00:00
thorpej
14acc892ca Fix a typo that prevented the large inbound PCI memory window from
being programmed (guess RedBoot allowed us to get lucky).
2003-04-20 17:17:01 +00:00
thorpej
4b39c84472 Reinstate one change from rev. 1.12, but differently. Preload r2 with
0 before frobbing the control register, and use r2 in the ARMv4 TLB
flush.
2003-04-20 16:21:40 +00:00
thorpej
b534f5853c Back out previous. There were several problems with the patch that
was checked in:
* It was not actually disabling the MMU, and so jumping to the
  reset vector would happily cause a panic(), since it would be
  the kernel's reset vector, not the ROM's.
* In the event the system was using high vectors, VECRELOC was not
  getting cleared, which has the potential to wreak havoc when re-entering
  the ROM.
* It was totally broken for CPUs < ARMv4; you still need to disable
  the MMU on those, just need to skip the ARMv4 TLB flush.
* The code that was checked in would only work if the kernel is mapped
  VA==PA.  For systems where the kernel is NOT mapped VA==PA, you only
  get the prefetch depth # of insns (2) after the MMU is turned off before
  you have fix the PC.

Backing out the change fixes rebooting on several evbarm platforms.
2003-04-20 15:42:51 +00:00
christos
a2dfb1b570 PR/3012: Greg A. Woods: Write all float.h files [except the vax of course]
in terms of float_ieee.h
2003-04-19 23:05:28 +00:00
thorpej
ec678aa9cd Use L1_S_MAPPABLE_P() and L2_L_MAPPABLE_P(). 2003-04-18 23:46:12 +00:00
thorpej
8896997409 Gah, fix *another* typo. 2003-04-18 23:45:50 +00:00
thorpej
21e8a3bc0f Oops, fix typo. 2003-04-18 22:44:54 +00:00
thorpej
08330568d0 Define two new macros to test if a mapping is mappable with an L1 Section
mapping or an L2 Large Page mapping.
2003-04-18 22:39:56 +00:00
thorpej
78b1b81e74 Add a comment indicating that the current method of enabling high vectors
requires that the CPU control vector be properly readable.  I believe that
all CPUs that have high vector support have a readable CPU control register,
but if we ever encounter one that does not, then we'll have to adjust this
code.
2003-04-18 22:30:05 +00:00
scw
3fe47173f5 Didn't mean to leave PMAP_DEBUG enabled ... 2003-04-18 11:55:26 +00:00
scw
41a1932e58 Add the generic arm32 bits of the new pmap, contributed by Wasabi Systems.
Some features of the new pmap are:

 - It allows L1 descriptor tables to be shared efficiently between
   multiple processes. A typical "maxusers 32" kernel, where NPROC is set
   to 532, requires 35 L1s. A "maxusers 2" kernel runs quite happily
   with just 4 L1s. This completely solves the problem of running out
   of contiguous physical memory for allocating new L1s at runtime on a
   busy system.

 - Much improved cache/TLB management "smarts". This change ripples
   out to encompass the low-level context switch code, which is also
   much smarter about when to flush the cache/TLB, and when not to.

 - Faster allocation of L2 page tables and associated metadata thanks,
   in part, to the pool_cache enhancements recently contributed to
   NetBSD by Wasabi Systems.

 - Faster VM space teardown due to accurate referenced tracking of L2
   page tables.

 - Better/faster cache-alias tracking.

The new pmap is enabled by adding options ARM32_PMAP_NEW to the kernel
config file, and making the necessary changes to the port-specific
initarm() function. Several ports have already been converted and will
be committed shortly.
2003-04-18 11:08:24 +00:00
scw
9c5cceb804 In arm32_vector_init(), if the vector page is ARM_VECTORS_HIGH, make
sure the CPU_CONTROL_VECRELOC bit is set in the cpu control register
before returning.
2003-04-18 10:51:35 +00:00
scw
c8ba6cb1b9 - In the various cpu_setup() functions, check if the vector page
is at ARM_VECTORS_HIGH and set CPU_CONTROL_VECRELOC if so.

- Don't de-ref a NULL args pointer in parse_cpu_options().
2003-04-18 10:45:23 +00:00
bouyer
aec10dd80c Nake return values from bounds_check_with_label() conform to the man
page: -1 for error, 0 for EOF, 1 otherwise. Inspired by an OpenBSD commit
message, pointed out by Miod Vallat in private mail.
vax/mba/hp.c: check return value <= 0, not < 0 to be concistent with how
other places handle return values from bounds_check_with_label().
2003-04-16 15:00:59 +00:00
rjs
971ce6c243 Remove membase and memsize device config parameters. 2003-04-14 14:20:10 +00:00
rjs
9e4c3aa218 Remove unused structure member variables. 2003-04-14 14:18:41 +00:00
rjs
8704a520e3 Remove unused sa_membase and sa_memsize structure member variables. 2003-04-14 14:16:10 +00:00
nathanw
ff28c51cc0 Make cpu_getmcontext() run the PC through ras_lookup() so that kernel
getcontext() plus userlevel setcontext() (as used in libpthread) respects
the atomicity of RAS regions.
2003-04-11 22:02:28 +00:00
thorpej
bcea7d5f28 Use cached physical addresses for mbufs and clusters to save having
to extract the physical address from the virtual.

On the ARM, also use the "read-only at MMU" indication to avoid a
redundant cache clean operation.

Other platforms should use these two as examples of how to use these
new pool/mbuf features to improve network performance.  Note this requires
a platform to provide a working POOL_VTOPHYS().

Part 3 in a series of simple patches contributed by Wasabi Systems
to improve network performance.
2003-04-09 18:51:35 +00:00
thorpej
a0aee79a1d Add the ability for pool caches to cache the physical address of
objects.  Clients of the pool_cache API must consistently use
the "paddr" variants or not, otherwise behavior is undefined.

Enable this on Alpha, ARM, MIPS, and x86.  Other platforms must
define POOL_VTOPHYS() in the appropriate manner in order to enable
the feature.

Part 1 of a series of simple patches contributed by Wasabi Systems
to improve network performance.
2003-04-09 18:22:13 +00:00
thorpej
4d402f3790 Fix a typo. 2003-04-09 02:34:31 +00:00
thorpej
9a8042f242 Use PAGE_SIZE rather than NBPG. 2003-04-08 22:57:53 +00:00
rjs
5043a41a74 Add bs_mmap and make hack in bs_mmap conditional on hpcarm. 2003-04-06 12:56:45 +00:00
briggs
7679f5b28b Channel active is bit 10, not 9. 2003-04-05 04:18:26 +00:00
he
e7dc774449 Including <uvm/uvm_extern.h> exposed the fact that we had a benign
type mismatch for SetCPSR.  Remove local extern declaration, since
it's now superfluous.
2003-04-03 17:47:04 +00:00
thorpej
cc2c493bc4 Use PAGE_SIZE rather than NBPG. 2003-04-02 07:35:54 +00:00
thorpej
95281cabad Use PAGE_SIZE rather than NBPG. 2003-04-01 23:19:08 +00:00
thorpej
d071d9a8d0 Use PAGE_SIZE rather than NBPG. 2003-04-01 15:02:05 +00:00
chris
d19c70cbe2 Fix for PR arm/17971. Used patch as provided
Compiled, but no hardware to test on.
2003-03-31 19:52:35 +00:00
bsh
347085b57d put options XSCALE_CACHE_WRITE_THROUGH into opt_cpuoptions.h.
add XSCALE_CACHE_WRITE_BACK.
2003-03-29 07:59:41 +00:00
bsh
105db01dcd for Intel PXA2[15][05] processors, select write-back/write-through
cache based on CPU id.  write-through on PXA2[15]0 B2 stepping and
earlier. write-back on C0 and C1 stepping (a.k.a PXA2[15]5 A0)

options XSCALE_CACHE_WRITE_{THROUGH,BACK} can override it.

for other XScale CPUs than PXA2xx, XSCALE_CACHE_WRITE_THROUGH works
same as before.
2003-03-29 07:58:16 +00:00
mycroft
15e5d9ec58 Add a couple of byte-wide variants that weren't implemented -- I guess because
nobody else has a byte-accessible bus.
2003-03-27 19:46:14 +00:00
mycroft
49f94a02b4 Remove references to variables that aren't used here. 2003-03-27 19:42:30 +00:00
mycroft
6b44caa63e Doh, fix a pasto -- the ldr/str mask had a bad bit set. 2003-03-27 16:58:36 +00:00
mycroft
a589baf905 Fix multiple problems with ldrh/strh/ldrsb/ldrsh disassembly:
* The offset format was wrong.
* There is no post-increment or index register update.
* It wasn't even matching because the mask was wrong.
Also touch up ldr/str disassembly slightly.
2003-03-27 16:42:40 +00:00
mycroft
0c23a8613a Fix multiple bugs in the way we do the v4 MMU disable -- it was blasting way
too many bits (including some reserved ones) and was writing the wrong value
for the TLB flush.
Also, if the flag is off, don't write the control register!
2003-03-26 17:36:56 +00:00
thorpej
0abb67bb3b Bump copyright date for last. 2003-03-25 19:47:30 +00:00
thorpej
891be168b5 Add support for attaching on-chip peripherals to the BECC using
indirect configuration (because the BECC is a soft-core, it could
have a variety of peripherals in the FPGA).  Also add support for
local untranslated DMA.
2003-03-25 19:45:52 +00:00
igy
4691b478a0 Add __KERNEL_RCSID tags 2003-03-25 06:12:46 +00:00
bsh
3034a15d1f + fix a crash when write-back cache is used, by calling PTE_SYNC()
after tweaking page table entry.

+ 4th argument of bus_space_map() is not only for BUS_SPACE_MAP_CACHEABLE.
2003-03-24 04:15:49 +00:00
chris
c9033077aa Garbage collect pmap_map, the last (and only?) use has been removed. 2003-03-23 15:59:23 +00:00
chris
a97b660835 When doing a kernel dump use the pmap_k* funcs. Also make sure that all
data is written to ram.  This avoids issues with tlb's not being flushed
etc.

As discussed a long time ago on port-arm
2003-03-23 15:49:25 +00:00
chris
9fd86b683f Add __KERNEL_RCSID tags to footbridge files. 2003-03-23 14:12:25 +00:00
bsh
f8f0fcb3af don't make kernels with options DEBUG print too much debug messages. 2003-03-23 08:59:02 +00:00
bsh
ae4f6e5092 add interrupt numbers for built-in peripherals.
add register definitions for DMA, AC97, and USB.
2003-03-18 11:23:03 +00:00