Changeset 7b187ef in mainline


Ignore:
Timestamp:
2009-02-02T16:22:35Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0867321
Parents:
34259b9
Message:

ppc32: strict coherency, compatible TLB flush

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • boot/arch/ppc32/loader/asm.S

    r34259b9 r7b187ef  
    3030#include "regname.h"
    3131
    32 .macro FLUSH_CACHE addr
     32.macro SMC_COHERENCY addr
    3333        dcbst 0, \addr
    3434        sync
    3535        icbi 0, \addr
     36        sync
    3637        isync
     38.endm
     39
     40.macro FLUSH_DCACHE addr
     41        dcbst 0, \addr
     42        sync
     43        isync
     44.endm
     45
     46.macro TLB_FLUSH reg
     47        tlbie \reg
     48        addi \reg, \reg, 0x1000
    3749.endm
    3850
     
    172184                        stw r28, 0(r30)
    173185                       
    174                         FLUSH_CACHE r30
     186                        SMC_COHERENCY r30
    175187                       
    176188                        addi r29, r29, 4
     
    269281               
    270282                stw r29, 0(r31)
    271                 FLUSH_CACHE r31
     283                FLUSH_DCACHE r31
    272284               
    273285                addi r31, r31, 4
     
    329341#endif
    330342       
     343        # flush TLB
     344       
     345        li r31, 0
     346        sync
     347       
     348        TLB_FLUSH r31
     349        TLB_FLUSH r31
     350        TLB_FLUSH r31
     351        TLB_FLUSH r31
     352        TLB_FLUSH r31
     353        TLB_FLUSH r31
     354        TLB_FLUSH r31
     355        TLB_FLUSH r31
     356       
     357        TLB_FLUSH r31
     358        TLB_FLUSH r31
     359        TLB_FLUSH r31
     360        TLB_FLUSH r31
     361        TLB_FLUSH r31
     362        TLB_FLUSH r31
     363        TLB_FLUSH r31
     364        TLB_FLUSH r31
     365       
     366        TLB_FLUSH r31
     367        TLB_FLUSH r31
     368        TLB_FLUSH r31
     369        TLB_FLUSH r31
     370        TLB_FLUSH r31
     371        TLB_FLUSH r31
     372        TLB_FLUSH r31
     373        TLB_FLUSH r31
     374       
     375        TLB_FLUSH r31
     376        TLB_FLUSH r31
     377        TLB_FLUSH r31
     378        TLB_FLUSH r31
     379        TLB_FLUSH r31
     380        TLB_FLUSH r31
     381        TLB_FLUSH r31
     382        TLB_FLUSH r31
     383       
     384        TLB_FLUSH r31
     385        TLB_FLUSH r31
     386        TLB_FLUSH r31
     387        TLB_FLUSH r31
     388        TLB_FLUSH r31
     389        TLB_FLUSH r31
     390        TLB_FLUSH r31
     391        TLB_FLUSH r31
     392       
     393        TLB_FLUSH r31
     394        TLB_FLUSH r31
     395        TLB_FLUSH r31
     396        TLB_FLUSH r31
     397        TLB_FLUSH r31
     398        TLB_FLUSH r31
     399        TLB_FLUSH r31
     400        TLB_FLUSH r31
     401       
     402        TLB_FLUSH r31
     403        TLB_FLUSH r31
     404        TLB_FLUSH r31
     405        TLB_FLUSH r31
     406        TLB_FLUSH r31
     407        TLB_FLUSH r31
     408        TLB_FLUSH r31
     409        TLB_FLUSH r31
     410       
     411        TLB_FLUSH r31
     412        TLB_FLUSH r31
     413        TLB_FLUSH r31
     414        TLB_FLUSH r31
     415        TLB_FLUSH r31
     416        TLB_FLUSH r31
     417        TLB_FLUSH r31
     418        TLB_FLUSH r31
     419       
     420        eieio
    331421        tlbsync
     422        sync
    332423       
    333424        # start the kernel
  • boot/arch/ppc32/loader/regname.h

    r34259b9 r7b187ef  
    218218#define hid0_icfi       (1 << 11)
    219219#define hid0_dci        (1 << 10)
     220#define hid0_sten       (1 << 7)
    220221
    221222#endif
  • kernel/arch/ppc32/include/asm/regname.h

    r34259b9 r7b187ef  
    225225#define hid0_icfi       (1 << 11)
    226226#define hid0_dci        (1 << 10)
     227#define hid0_sten       (1 << 7)
    227228
    228229#endif
  • kernel/arch/ppc32/include/barrier.h

    r34259b9 r7b187ef  
    5656                "sync\n"
    5757                "icbi 0, %0\n"
     58                "sync\n"
    5859                "isync\n"
    5960                :: "r" (addr)
     
    7778        }
    7879
    79         asm volatile ("isync");
     80        asm volatile (
     81                "sync\n"
     82                "isync\n"
     83        );
    8084}
    8185
  • kernel/arch/ppc32/src/mm/tlb.c

    r34259b9 r7b187ef  
    2727 */
    2828
    29 /** @addtogroup ppc32mm 
     29/** @addtogroup ppc32mm
    3030 * @{
    3131 */
     
    4646static unsigned int seed = 10;
    4747static unsigned int seed_real __attribute__ ((section("K_UNMAPPED_DATA_START"))) = 42;
     48
     49
     50#define TLB_FLUSH \
     51        "tlbie %0\n" \
     52        "addi %0, %0, 0x1000\n"
    4853
    4954
     
    412417void tlb_invalidate_all(void)
    413418{
    414         asm volatile (
     419        uint32_t index;
     420        asm volatile (
     421                "li %0, 0\n"
     422                "sync\n"
     423               
     424                TLB_FLUSH
     425                TLB_FLUSH
     426                TLB_FLUSH
     427                TLB_FLUSH
     428                TLB_FLUSH
     429                TLB_FLUSH
     430                TLB_FLUSH
     431                TLB_FLUSH
     432               
     433                TLB_FLUSH
     434                TLB_FLUSH
     435                TLB_FLUSH
     436                TLB_FLUSH
     437                TLB_FLUSH
     438                TLB_FLUSH
     439                TLB_FLUSH
     440                TLB_FLUSH
     441               
     442                TLB_FLUSH
     443                TLB_FLUSH
     444                TLB_FLUSH
     445                TLB_FLUSH
     446                TLB_FLUSH
     447                TLB_FLUSH
     448                TLB_FLUSH
     449                TLB_FLUSH
     450               
     451                TLB_FLUSH
     452                TLB_FLUSH
     453                TLB_FLUSH
     454                TLB_FLUSH
     455                TLB_FLUSH
     456                TLB_FLUSH
     457                TLB_FLUSH
     458                TLB_FLUSH
     459               
     460                TLB_FLUSH
     461                TLB_FLUSH
     462                TLB_FLUSH
     463                TLB_FLUSH
     464                TLB_FLUSH
     465                TLB_FLUSH
     466                TLB_FLUSH
     467                TLB_FLUSH
     468               
     469                TLB_FLUSH
     470                TLB_FLUSH
     471                TLB_FLUSH
     472                TLB_FLUSH
     473                TLB_FLUSH
     474                TLB_FLUSH
     475                TLB_FLUSH
     476                TLB_FLUSH
     477               
     478                TLB_FLUSH
     479                TLB_FLUSH
     480                TLB_FLUSH
     481                TLB_FLUSH
     482                TLB_FLUSH
     483                TLB_FLUSH
     484                TLB_FLUSH
     485                TLB_FLUSH
     486               
     487                TLB_FLUSH
     488                TLB_FLUSH
     489                TLB_FLUSH
     490                TLB_FLUSH
     491                TLB_FLUSH
     492                TLB_FLUSH
     493                TLB_FLUSH
     494                TLB_FLUSH
     495               
     496                "eieio\n"
    415497                "tlbsync\n"
     498                "sync\n"
     499                : "=r" (index)
    416500        );
    417501}
Note: See TracChangeset for help on using the changeset viewer.