Commit Graph

718 Commits

Author SHA1 Message Date
thorpej 2c0a144aa4 * pmap_clean_page(): Clean up a comment.
* pmap_protect(): write back the range when doing a r/w -> r/o
  transition.  (Still leave the block concerned with this in
  pmap_clean_page() disabled, for now.)
* pmap_pte_init_xscale(): Disable read/write-allocate for now, until
  we figure out why sometimes cache lines of NULs get deposited into
  file data.  Also, make sure ECC protection of page table access is
  disabled for now.
* xscale_setup_minidata(): Make sure the mini-data cache is configured
  write-back with read/write-allocate.
2002-04-24 17:35:10 +00:00
wiz d79f4782b6 Complete renaming of opms to opms (was partly named pms, externally and
internally).  Move arm/iomd/pms* to arm/iomd/opms*. Mechanical change,
tested by cross-compiling a kernel from i386.

Approved by christos.

XXX: What are arm/arm32/conf.c and arm/include/conf.h good for?
2002-04-19 01:04:38 +00:00
thorpej eedd94475c * Move the mii_bitbang attribute into dev/mii/files.mii
* Pull in dev/mii/files.mii from conf/files, rather than playing
  the magic "files include order" dance in N machine-dependent
  configuration definitions.
2002-04-16 20:50:16 +00:00
thorpej f23ba7637c Add Application Accelerator Unit registers. 2002-04-16 17:36:06 +00:00
thorpej bbdbd9ab37 Add i80321 DMA controller registers. 2002-04-16 04:50:14 +00:00
thorpej d533e315ee Fix a typo and an omission in last. 2002-04-15 17:27:39 +00:00
thorpej bc6522fb34 Add bits for the XScale Auxillary Control Register. 2002-04-15 16:34:32 +00:00
thorpej 10c0c20ad4 Default all XScale core processors to the read/write-allocate write-back
cache mode.  Add a new XSCALE_CACHE_WRITE_THROUGH option for people who
are paranoid about the cache-related errata (you *do* have to line up
the planets correctly to trip them, but having the option is useful).
2002-04-12 21:52:45 +00:00
thorpej f56b432a79 Use the bus_space_generic bus space ops. 2002-04-12 19:12:31 +00:00
thorpej 80146a5185 Use the bus_space_generic bus space ops. 2002-04-12 19:02:30 +00:00
thorpej 79303779d8 Add some generic bus_space ops, which are pulled in by the
"bus_space_generic" configuration attribute.
2002-04-12 18:56:57 +00:00
thorpej 32a0860797 Centralize ARM CPU configuration information by adding a new header
file, <arm/cpuconf.h>, which pulls in "opt_cputypes.h" and then defines
the following:
* CPU_NTYPES -- now many CPU types are configured into the kernel.  What
  you really want to know is "== 1" or "> 1".
* Defines ARM_ARCH_2, ARM_ARCH_3, ARM_ARCH_4, ARM_ARCH_5, depending
  on which ARM architecture versions are configured (based on CPU_*
  options).  Also defines ARM_NARCH to determins how many architecture
  versions are configured.
* Defines ARM_MMU_MEMC, ARM_MMU_GENERIC, ARM_MMU_XSCALE depending on
  which classes of ARM MMUs are configured into the kernel, and ARM_NMMUS
  to determine how many MMU classes are configured.

Remove the needless inclusion of "opt_cputypes.h" in several places.
Convert remaining users to <arm/cpuconf.h>.
2002-04-12 18:50:29 +00:00
thorpej 27d98ca694 Remove the Control register handling from arm32_vector_init(). Apparently,
the ARM6 and ARM7 do completely the wrong thing if you read this register,
so we have to handle this a different way.
2002-04-10 21:45:43 +00:00
thorpej 4f778bc49c G/c FOOTBRIDGE option. 2002-04-10 20:12:08 +00:00
thorpej 59c9e94b72 vm_offset_t -> vaddr_t,paddr_t 2002-04-10 19:35:22 +00:00
thorpej ad2350dccf On XScale processors where we use write-back caching, use are
read/write-allocate line allocation policy.

On the i80321, this improves nearly every lmbench benchmark, dramatically
so the ones that are sensitive to memory bandwidth (100-300% improvement
for these).
2002-04-10 17:39:31 +00:00
thorpej 2b924304ab Add a new function, pmap_alloc_ptpt(), that allocates the PTPT and
maps it the way we want, rather than using uvm_km_zalloc() and playing
the "revoke cacheability" song-and-dance.
2002-04-10 17:08:13 +00:00
thorpej cad393fa1c pmap_alloc_l1pt(): Just enter the mappings for the L1 table by
hand, rather than calling pmap_kenter_pa() and then revoking
cacheability in the PTE.
2002-04-10 15:56:21 +00:00
thorpej cd0e28f1e7 Use L2_S_CACHE_MASK in places where we revoke cacheability. 2002-04-10 15:44:23 +00:00
thorpej 668547d841 pmap_kenter_pa(): Obey the "prot" argument, rather than simply making
all mappings r/w (!!).
2002-04-10 04:40:58 +00:00
thorpej 6e52cbf89e In pmap_copy_page_xscale(), put the source page in the mini-data
cache, as well.  The mini-data cache is 2-way, so src and dst won't
clobber each other, and the smallness of the cache doesn't matter,
since we access each page once sequentially.

While we still have to do the initial clean of the source page, this
saves another 4K of main D$ pollution, and also means we don't have
to do 2 cache passes after the copy is complete (i.e. we can skip the
invalidation of the source page in the main cache, since it's no longer
there).
2002-04-10 01:30:42 +00:00
thorpej 2092e78cec Add separate pmap_{zero,copy}_page() functions for generic ARM
vs. XScale.  Use the mini-data cache for the destination on XScale,
thus saving tossing out 4K of possible-useful data from the main
data cache each time.

This significantly improves every test in lmbench.
2002-04-10 00:45:43 +00:00
thorpej da162bee90 * Move the code that cleans the XScale mini-data cache into its
own function.
* Add a new function which sets up the mini-data cache clean area
  properly.
2002-04-09 23:44:00 +00:00
thorpej 1b20a04772 * Split pte_cache_mode into pte_l1_s_cache_mode, pte_l2_l_cache_mode,
and pte_l2_s_cache_mode.  The cache-meaningful bits are different
  for these descriptor types on some processor models.
* Add pte_*_cache_mask, corresponding to each above, which has a mask
  of the cache-meangful bits, and define those for generic and XScale
  MMU classes.  Note, the L2_S_CACHE_MASK_xscale definition requires
  use of the Extended Small Page L2 descriptor (the "X" bit overlaps
  with AP bits otherwise).
2002-04-09 22:37:00 +00:00
thorpej de29118bc5 Use the "Extended Small Page" L2 descriptor type on XScale (note
this means that there are no 1K sub-pages on XScale, but we don't
use them anyway).
2002-04-09 21:23:16 +00:00
thorpej 917afc7038 Remove the implementation-defined bits from L1_S_PROTO_xscale and
L1_C_PROTO_xscale; while they are supposed to be set to 1 on generic
ARM MMUs (according to the SA-110 and ARM920T manuals), they are listed
as "should be zero" in the i80200 manual.
2002-04-09 21:11:31 +00:00
thorpej c535f4ffc4 Define 2 classes of ARM MMUs:
1. Generic (compatible with ARM6)
1. XScale (can be used as generic, but also has certainly nifty extensions).

Define abstract PTE bit defintions for each MMU class.  If only one MMU
class is configured into the kernel (based on CPU_* options), then we
get the constants for that MMU class.  Otherwise we indirect through
varaibles set up via set_cpufuncs().

XXX The XScale bits are currently the same as the generic bits.  Baby steps.
2002-04-09 21:00:42 +00:00
thorpej 7b422802f6 L2_TYPE_S -> L2_S_PROTO 2002-04-09 19:44:22 +00:00
thorpej aee5994fce Use abstract names for the protection and PTE type bits in
L1 and L2 descriptors.  This will allow us to support different
PTE layouts that enable the use of extensions on different
processor models.
2002-04-09 19:37:14 +00:00
thorpej 4d78508c9d Back-out rev 1.75 (pmap_extract() rewrite), and fix the (minor)
bug that revision intended to fix properly.
2002-04-05 22:17:41 +00:00
thorpej 991426d348 * Rewrite the 32-bit ARM pte.h based on the ARM architecture manual.
Significant cleanup, here, including better PTE bit names.
* Add XScale PTE extensions (ECC enable, write-allocate cache mode).
* Mechanical changes everywhere else to update for new pte.h.  While
  doing this, two bugs (as a result of typos) were fixed in

	arm/arm32/bus_dma.c
	evbarm/integrator/int_bus_dma.c
2002-04-05 16:58:01 +00:00
thorpej 388879eeaf Use pte_cache_mode instead of PT_CACHEABLE. 2002-04-05 03:42:39 +00:00
thorpej 22e72c8da2 Don't need to mask w/ PG_FRAME. 2002-04-04 16:56:36 +00:00
skrll c0e4084210 Fix compile problem when DDB not defined. 2002-04-04 12:39:55 +00:00
thorpej ce482eca0a Eliminate a mask against PD_MASK. 2002-04-04 05:42:29 +00:00
thorpej 60b63aec95 There is no need to mask VAs and PAs w/ PG_FRAME to clear
the lower bits; UVM provides us page-aligned addresses for
everything.  For the paranoid, we'll leave KDASSERT()'s in
that check for this if the kernel is built with DEBUG.

Low-hanging fruit that shaves some cycles.
2002-04-04 04:43:20 +00:00
thorpej e539ef03aa Rename flags that are really part of the pv_entry/mdpage into
pmap.h and give them more descriptive names and better comments:
* PT_M  -> PVF_MOD (page is modified)
* PT_H  -> PVF_REF (page is referenced)
* PT_W  -> PVF_WIRED (mapping is wired)
* PT_Wr -> PVF_WRITE (mapping is writable)
* PT_NC -> PVF_NC (mapping is non-cacheable; multiple mappings)
2002-04-04 04:25:44 +00:00
thorpej 263270d684 Catch a couple more vector page mapping manipulations. 2002-04-04 02:06:46 +00:00
reinoud c85015ee71 Also provide differential coordinate updates... pitty it can't be choosen
or specified in wscons itself. The absolute coordinates are broadcasted
_after_ the relative so a program that takes both won't get confused.
2002-04-04 01:03:23 +00:00
thorpej 20b1bb2655 Clean up handling of the vector page on 32-bit ARM systems:
* Don't refer to VA 0, instead refer to a new variable: vector_page
* Delete the old zero_page_*() functions, replacing them with a new
  one: vector_page_setprot().
* When manipulating vector page mappings in user pmaps, only do so if
  the vector page is below KERNEL_BASE (if it's above KERNEL_BASE, the
  vector page is mapped by the kernel pmap).
* Add a new function, arm32_vector_init(), which takes the virtual
  address of the vector page (which MUST be valid when the function
  is called) and a bitmask of vectors the kernel is going to take
  over, and performs all vector page initialization, including setting
  the V bit in the CPU Control register ("relocate vectors to high
  address"), if necessary.
2002-04-03 23:33:26 +00:00
thorpej d36a56b03a Define the two possible addresses for the ARM vector page. 2002-04-03 22:12:52 +00:00
thorpej d8ab0d1e84 Remove unused extern decls. 2002-04-03 21:06:21 +00:00
thorpej 6d66c469bf Add a comment summarizing the post-ARM3 CP15 registers. 2002-04-03 19:57:48 +00:00
thorpej 7739f7410a Always provide kernel_text. 2002-04-03 17:30:50 +00:00
reinoud 9fc5cf5824 Fix the mmap'ing of the screen memory. The way it was implemented
completely sucked... I wonder how it was even working (....)

Thanks to Jason for pointing out the problem.
2002-04-03 16:03:50 +00:00
reinoud 943880cea2 Rototil and fix the pmap_extract function. It wouldn't even return data
when the part being quiried was mapped with a section (!) giving weird
results and had become a mess of goto's.

Complete rewrite and cleaned up the `goto'-jungle entirely ... ripped all
goto's. The resulting code is much better to read and might even have a
small performance gain.
2002-04-03 15:59:58 +00:00
reinoud d6a3919c2c In analogy to L2_LPAGE_SIZE add L2_SPAGE_SIZE .... 2002-04-03 00:46:53 +00:00
lukem d213d804f7 Rename MEMORY_DISK_SIZE (formerly MINIROOTSIZE) to MEMORY_DISK_ROOT_SIZE,
which was suggested by Izumi Tsutsui <tsutsui@ceres.dti.ne.jp> as
being more consistent with what it's controlling...
2002-04-02 05:30:34 +00:00
reinoud d1f811363a Only include the vidc_machdep.h file when we're compiling the kernel 2002-03-30 17:10:31 +00:00
thorpej 243dc1d498 Rename the ARM sysarch calls from arm32* -> arm* 2002-03-30 06:23:39 +00:00
thorpej 863afc5d41 Fix a printf format. 2002-03-29 00:48:58 +00:00
thorpej 6ce299c3d3 Use write-back caching on the Verde. 2002-03-28 16:47:49 +00:00
thorpej 70fbd8fba7 Fix soft interrupts. 2002-03-28 03:19:31 +00:00
thorpej 0b109cd060 iwin_base_lo is a BAR value; make sure to mask off the non-address
bits when using it.
2002-03-27 23:17:03 +00:00
thorpej f536211623 Basic support for the Intel i80321 I/O Processor (Xscale core).
Note: This is a snapshot of work-in-progress; there are still some
bugs to be shaken out.
2002-03-27 21:45:47 +00:00
thorpej c915b880c5 The 80321 manual lies; it does have a CPU ID distinct from the 80200.
Add that CPU ID, and add a case for it.
2002-03-27 01:34:47 +00:00
thorpej 41f47f03e7 Restructure a few things in order to support other XScale core
I/O processors:
* The i80200 and the i80321 have the same CPU ID, so split the
  CPU_XSCALE option into CPU_XSCALE_80200 and CPU_XSCALE_80321
  options, and don't let them both be defined at the same time.
  XXX May want to revisit this in the future.
* Split some registers common between the i80200 and i80321 into
  <arm/xscale/xscalereg.h>.
* Rename a few existing functions.
2002-03-26 19:29:44 +00:00
thorpej 3964313f67 Fix reporting of the kernel virtual address space range to UVM. 2002-03-25 22:11:12 +00:00
thorpej a2a309d02a * Some cleanup.
* Delete the call to pmap_copy() in pmap.h
2002-03-25 19:53:38 +00:00
thorpej b17e7a03c2 Clean up pmap_map_ptes() and pmap_unmap_ptes() a little, and add
a debug assertion that curproc is never NULL if mapping a non-current
pmap.
2002-03-25 17:50:12 +00:00
thorpej a2d8f71d01 The target page of pmap_zero_page(), pmap_pageidlezero(), and
pmap_copy_page() will never have any mappings.  Therefore, it
is unnecessary to do a cache clean for that page.

Add assertions in #ifdef DEBUG that assert this invariant.

This shaves some cycles off the frequently-called pmap_zero_page()
and pmap_copy_page() (no need to look up the dst page's vm_page
structure, and one less function call to clean the page).
2002-03-25 17:33:26 +00:00
thorpej 75cb2c6554 * Clean up some comments/whitespace.
* Don't construct a fake trap frame and pass it to main(); that hasn't
  been needed for some time.
* panic if main() returns.
2002-03-25 16:58:18 +00:00
thorpej a61914be93 Garbage-collect fetchuserword(); nothing uses it any more. 2002-03-25 16:32:55 +00:00
thorpej dbe6d8291b * Fix use of pmap_curmaxkvaddr.
* Use the PTP hint in the pmap.
2002-03-25 04:51:19 +00:00
thorpej 8500c97458 Move some private pmap data structures into pmap.c 2002-03-25 03:00:28 +00:00
thorpej c93e4f6940 Tidy a few things up. 2002-03-25 02:51:32 +00:00
thorpej a9cba12f54 Correct the comment describing the layout of the VM space. In
particular, don't describe a recursive PTE mapping, since the ARM
port doesn't (and can't) use one.
2002-03-25 02:44:07 +00:00
thorpej da2944b10e In the Prefetch Abort handler, just do the uvm_fault() dance
directly, rather than doing a data access to fetch the page,
which meant we had to take another fault (!!).
2002-03-25 01:53:36 +00:00
thorpej a4652c81cf Only check for SA110 bugs on SA110 CPUs with step <= K. 2002-03-24 22:03:23 +00:00
thorpej ea553e2681 Cache the cpu type and cpu revision in cpu_info. 2002-03-24 22:02:58 +00:00
thorpej 186c0135d6 Garbage-collect pmap_pte() (and good riddance!) 2002-03-24 21:32:18 +00:00
thorpej ea95b58d21 * Only check for SA110 rev K bug if we're on an SA110 (XXX should also
check stepping).
* In said check, don't use pmap_pte().
* Garbage-collect some useless debug code.
2002-03-24 21:27:57 +00:00
chris 03345d6008 remove pointless pg = NULL in else part of if (pg != NULL) 2002-03-24 21:10:25 +00:00
thorpej bf3ea66d5c pmap_enter(): Use pmap_map_ptes() correctly. 2002-03-24 20:48:59 +00:00
thorpej 1ffa188c0a Remove exported pmap_pte() prototype. 2002-03-24 18:36:52 +00:00
thorpej 5ffc15a083 Use vtopte() instead of pmap_pte(). 2002-03-24 18:12:54 +00:00
chris 434f6391ea Update pmap_copy_page to only map in the src readonly and only invalidate it after the copy, no need for it to flush the wb. 2002-03-24 18:05:45 +00:00
bjh21 650f7e5c99 arm26 -> acorn26 changes. 2002-03-24 16:10:11 +00:00
bjh21 99ba40c188 arm26->acorn26 transition. 2002-03-24 15:49:38 +00:00
bjh21 ebfcb75fe5 Add ARM610 cache information. Not yet tested because booting on ARM610s seems
to be broken at present.
2002-03-24 15:37:46 +00:00
thorpej a6d59cb039 pmap_allocpagedir(): Don't use pmap_pte(), and simplify a little. 2002-03-24 06:07:00 +00:00
thorpej b812152b34 pmap_handled_emulation(): Fix locking protocol botch.
XXX Should we traverse the PV list and enable all PTEs?
2002-03-24 05:55:31 +00:00
thorpej 6fbfe41621 pmap_handled_emulation(): Use pmap_map_ptes() correctly. 2002-03-24 05:52:10 +00:00
thorpej ec75dcf496 pmap_modified_emulation(): Use pmap_map_ptes() correctly. 2002-03-24 05:39:53 +00:00
thorpej 0aef2cab11 pmap_unwire(): Use pmap_map_ptes() correctly. 2002-03-24 05:28:46 +00:00
thorpej 11df08a743 pmap_clearbit(): Use pmap_map_ptes() correctly. 2002-03-24 05:15:59 +00:00
thorpej eb638f9bc5 Use pmap_is_curpmap() consistently. 2002-03-24 04:56:49 +00:00
thorpej 242f080390 Clean up the PTP allocation functions a bit. 2002-03-24 04:49:16 +00:00
thorpej c34d24ea3c Clean up PTE access macros a bit. 2002-03-24 04:38:33 +00:00
thorpej aa1563948c * arm_byte_to_page() -> arm_btop()
* arm_page_to_byte() -> arm_ptob()
2002-03-24 03:37:18 +00:00
thorpej 48d8c5fdd9 Remove some redundant tests in pmap_enter(). 2002-03-24 03:25:10 +00:00
reinoud 2b488a7d9f Big rototil of the vidcvideo code to cleanup illogical structures and to
incorporate write back support for processors not having a write through
cache.

The current fb_devconfig structure now really holds the device's
configuration and the softc really only holds the attachment information.
This used to be mixed giving rise to weird stuctures and cross references.

The number of vertical syncs before the video memory writeback is triggered
is configurable ... default is to wait for 5 Vsync .. aprox minumum 10
times a second, but more likely in the order of 12,5 times a second. When
printing is in progress no write back is performed... only after the
waiting time. The reasoning behind this is that as long as the screen is
printed too the cache will be purged of dirty data anyway due to the
processing and new screen memory useage.
2002-03-23 21:27:41 +00:00
thorpej 2488d00e5f KERNEL_SPACE_START -> KERNEL_BASE 2002-03-23 19:38:30 +00:00
thorpej e80bfdc1a3 Garbage-collect the "pagehook" stuff. 2002-03-23 19:21:58 +00:00
reinoud 2d2df858f7 Fix up typos. 2002-03-23 18:10:24 +00:00
reinoud fe2473fafd Fix typo. 2002-03-23 17:10:13 +00:00
thorpej 0ba36d6f6f * Rename PROCESS_PAGE_TBLS_BASE -> PTE_BASE
* Rename ALT_PAGE_TBLS_BASE -> APTE_BASE
* Garbage-collect PAGE_TABLE_SPACE_START
2002-03-23 02:22:56 +00:00
reinoud 89400b4aab Allthough this patch doesn't look that much it adds a few things that were
on the port-acorn32's TODO list for quite some time :

- when the serial console is selected, don't exclude the screen
alltogether; currently the keyboard is still not attached but that might be
a configuration problem in the GENERIC console or a failure to explicitly
connect to a wsmux. This needs further investigation.

- create a framework for the display memory writeback on vsync for
StrongARM processors since they don't have a write-trough cache. This is to
solve the lazy screen update that is very evident in single user mode on
these processors; the cache isn't flushed/written back that often and parts
of the screen can thus be resident in the cache but not written out to
memory yet.

- clean up some loose ends in the code.
2002-03-23 02:00:26 +00:00
thorpej b326238b01 Remove redundant #ifdef _KERNEL 2002-03-23 01:56:31 +00:00
reinoud 12d0f60218 If the serial console is asked for then dont forget to define the function
prototype for connecting the serial console....
2002-03-22 13:32:51 +00:00