Ignore:
Timestamp:
2015-10-28T18:17:27Z (9 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
77a194c, ff381a7
Parents:
0328987 (diff), 5783d10 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge various ARM fixes from lp:~jakub/helenos/arm

Fix GTA02 uspace/kernel memory corruption caused by wrong TLB
invalidation. ARM920T does not have a unified TLB, so it is necessary
to purge the instruction and data TLBs separately.

Fix RaspberryPi support. Make RaspberryPi use non-shared memory
(eliminating thus a weird special case for ARMv6) and invalidate the
entire D-cache before it is re-enabled in the kernel.

Make the CP15 cache-related macros non-ARMv7-centric for ARMv6-. Define
only macros that are supported by the given CPU/architecture (partially).

Be more careful and do not assume ARMv7 features. This relates to
enabling branch predictors, prefetch buffer and various control bits
in some registers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/arm32/include/arch/mm/page_armv6.h

    r0328987 r5265eea4  
    156156do { \
    157157        for (unsigned i = 0; i < count; ++i) \
    158                 DCCMVAU_write((uintptr_t)(pt + i)); \
     158                dcache_clean_mva_pou((uintptr_t)(pt + i)); \
    159159        read_barrier(); \
    160160} while (0)
    161 
    162161
    163162/** Returns level 0 page table entry flags.
     
    258257        if (flags & PAGE_CACHEABLE) {
    259258                /*
    260                  * Write-through, write-allocate memory, see ch. B3.8.2
    261                  * (p. B3-1358) of ARM Architecture reference manual.
     259                 * Outer and inner write-back, write-allocate memory,
     260                 * see ch. B3.8.2 (p. B3-1358) of ARM Architecture reference
     261                 * manual.
     262                 *
    262263                 * Make sure the memory type is correct, and in sync with:
    263264                 * init_boot_pt (boot/arch/arm32/src/mm.c)
     
    278279        }
    279280       
    280 #if defined(PROCESSOR_ARCH_armv6)
    281         /* FIXME: this disables caches */
    282         p->shareable = 1;
    283 #else
    284281        /* Shareable is ignored for devices (non-cacheable),
    285282         * turn it off for normal memory. */
    286283        p->shareable = 0;
    287 #endif
    288284       
    289285        p->non_global = !(flags & PAGE_GLOBAL);
Note: See TracChangeset for help on using the changeset viewer.