NetBSD/sys/arch/sh5/TODO

77 lines
3.0 KiB
Plaintext

$NetBSD: TODO,v 1.12 2005/12/11 12:19:00 christos Exp $
TODO List For NetBSD/sh5
~~~~~~~~~~~~~~~~~~~~~~~~
In no particular order:
DONE. Enable the CPU cache.
There are two cache modes available in the current CPU: write-back
and write-through. The former would be very nice. However, I don't
want to enable caching until I'm happy enough with the stability
of the pmap. And anyway, the pmap doesn't pay lip-service to the
cache yet.
DONE. Re-work the TLB invalidation code.
This is a pain, as there is no hardware support for looking up an
address in the TLBs. To get around this, the PTEG structure
used to track user-space mappings contains a hint as to which group
of four TLB slots a mapping is entered on. This information is
maintained and updated by the TLB miss code itself. Higher level
pmap code uses the hint to speed up TLB invalidation for user-space
mappings (a maximum of 4 ITLB and/or 4 DTLB slots need be searched).
Unfortunately, no such "hint" is maintained for kernel mappings
(those in KSEG1), making KSEG1 TLB invalidations very expensive.
Adding a "hint" field to the pmap_kernel_ipt structure would make
things much quicker, but would use more memory... It's a question
of trade offs.
When I make the above change, I'd like to add a similar "hint"
field to the PTEG structure, instead of relying on "unused" bits
in the PTEH. This will allow the "hint" to pinpoint *exactly*
which TLB slot in both ITLB and DTLB contains the mapping. This
would work for both user-space and KSEG1 mappings.
DONE. Allocate interrupt handles from a pool backed by pages from KSEG0.
This will reduce DTLB misses at interrupt dispatch time.
DONE. copy{in,out}() need to be re-written.
Right now, they copy byte-at-a-time, which is not exactly fast...
DONE. in_cksum.c needs to be replaced with an assembly code version
which makes use of special SHmedia instructions. At first glance,
an algorithm which makes use of the M* instructions would be
very fast indeed.
DONE. libkern needs sh5-specific optimised versions of key functions.
Most of these can be used by libc too.
7. Support for more of the on-chip peripherals, such as the DMAC.
DONE. Test the whole lot using a 64-bit kernel/userland.
DONE. If (8) works, try 64-bit kernel and 32-bit userland, using COMPAT32.
10. Stress-testing of just about everything. ;-)
DONE. Define a "board_info" structure, and move a whole bunch of currently
hard-coded stuff into it. For example:
- CPU speed,
- Memory size,
- KSEG0 physical address,
- Cache details: e.g. size, number of sets/ways, line size,
- Cache/TLB interface routines (currently __cpu_cache*/__cpu_tlb*)
- etc.
DONE. Support for nathan_sa when the branch is merged.
DONE. In the pmap, we should clear the Referenced bit in the PTE (after
saving its value in the mdpg_attrs/pvo, if it's a managed page)
after purging the mapping from the cache. Right now, there are
some cases where the cache can be purged several times for the
same mapping, where only the first time is really necessary.