Print this page
de-linting of .s files

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/sun4u/cpu/us3_cheetah_asm.s
          +++ new/usr/src/uts/sun4u/cpu/us3_cheetah_asm.s
↓ open down ↓ 18 lines elided ↑ open up ↑
  19   19   *
  20   20   * CDDL HEADER END
  21   21   */
  22   22  /*
  23   23   * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   *
  26   26   * Assembly code support for the Cheetah module
  27   27   */
  28   28  
  29      -#pragma ident   "%Z%%M% %I%     %E% SMI"
  30      -
  31      -#if !defined(lint)
  32   29  #include "assym.h"
  33      -#endif  /* lint */
  34   30  
  35   31  #include <sys/asm_linkage.h>
  36   32  #include <sys/mmu.h>
  37   33  #include <vm/hat_sfmmu.h>
  38   34  #include <sys/machparam.h>
  39   35  #include <sys/machcpuvar.h>
  40   36  #include <sys/machthread.h>
  41   37  #include <sys/machtrap.h>
  42   38  #include <sys/privregs.h>
  43   39  #include <sys/asm_linkage.h>
↓ open down ↓ 3 lines elided ↑ open up ↑
  47   43  #include <sys/xc_impl.h>
  48   44  #include <sys/intreg.h>
  49   45  #include <sys/async.h>
  50   46  #include <sys/clock.h>
  51   47  #include <sys/cheetahasm.h>
  52   48  
  53   49  #ifdef TRAPTRACE
  54   50  #include <sys/traptrace.h>
  55   51  #endif /* TRAPTRACE */
  56   52  
  57      -#if !defined(lint)
  58      -
  59   53  /* BEGIN CSTYLED */
  60   54  
  61   55  /*
  62   56   * Cheetah version to flush an Ecache line by index (aliased address)
  63   57   */
  64   58  #define ECACHE_REFLUSH_LINE(ecache_size, alias_address, scr2)           \
  65   59          ldxa    [alias_address]ASI_MEM, %g0
  66   60  
  67   61  #define ECACHE_FLUSH_LINE(physaddr, ecache_size, scr1, scr2)            \
  68   62          xor     physaddr, ecache_size, scr1;                            \
  69   63          add     ecache_size, ecache_size, scr2;                         \
  70   64          sub     scr2, 1, scr2;                                          \
  71   65          and     scr1, scr2, scr1;                                       \
  72   66          ASM_LDX(scr2, ecache_flushaddr);                                \
  73   67          add     scr1, scr2, scr1;                                       \
  74   68          ECACHE_REFLUSH_LINE(ecache_size, scr1, scr2)
  75   69  
  76   70  /* END CSTYLED */
  77   71  
  78      -#endif  /* !lint */
  79   72  
  80      -
  81   73  /*
  82   74   * Fast ECC error at TL>0 handler
  83   75   * We get here via trap 70 at TL>0->Software trap 0 at TL>0.  We enter
  84   76   * this routine with %g1 and %g2 already saved in %tpc, %tnpc and %tstate.
  85   77   * For a complete description of the Fast ECC at TL>0 handling see the
  86   78   * comment block "Cheetah/Cheetah+ Fast ECC at TL>0 trap strategy" in
  87   79   * us3_common_asm.s
  88   80   */
  89      -#if defined(lint)
  90   81  
  91      -void
  92      -fast_ecc_tl1_err(void)
  93      -{}
  94      -
  95      -#else   /* lint */
  96      -
  97   82          .section ".text"
  98   83          .align  64
  99   84          ENTRY_NP(fast_ecc_tl1_err)
 100   85  
 101   86          /*
 102   87           * This macro turns off the D$/I$ if they are on and saves their
 103   88           * original state in ch_err_tl1_tmp, saves all the %g registers in the
 104   89           * ch_err_tl1_data structure, updates the ch_err_tl1_flags and saves
 105   90           * the %tpc in ch_err_tl1_tpc.  At the end of this macro, %g1 will
 106   91           * point to the ch_err_tl1_data structure and the original D$/I$ state
↓ open down ↓ 198 lines elided ↑ open up ↑
 305  290           */
 306  291          CH_ERR_TL1_EXIT;
 307  292  
 308  293          /*
 309  294           * Establish panic exit label.
 310  295           */
 311  296          CH_ERR_TL1_PANIC_EXIT(fecc_tl1_err);
 312  297  
 313  298          SET_SIZE(fast_ecc_tl1_err)
 314  299  
 315      -#endif  /* lint */
 316  300  
 317      -
 318      -#if defined(lint)
 319      -/*
 320      - * scrubphys - Pass in the aligned physical memory address
 321      - * that you want to scrub, along with the ecache set size.
 322      - *
 323      - *      1) Displacement flush the E$ line corresponding to %addr.
 324      - *         The first ldxa guarantees that the %addr is no longer in
 325      - *         M, O, or E (goes to I or S (if instruction fetch also happens).
 326      - *      2) "Write" the data using a CAS %addr,%g0,%g0.
 327      - *         The casxa guarantees a transition from I to M or S to M.
 328      - *      3) Displacement flush the E$ line corresponding to %addr.
 329      - *         The second ldxa pushes the M line out of the ecache, into the
 330      - *         writeback buffers, on the way to memory.
 331      - *      4) The "membar #Sync" pushes the cache line out of the writeback
 332      - *         buffers onto the bus, on the way to dram finally.
 333      - *
 334      - * This is a modified version of the algorithm suggested by Gary Lauterbach.
 335      - * In theory the CAS %addr,%g0,%g0 is supposed to mark the addr's cache line
 336      - * as modified, but then we found out that for spitfire, if it misses in the
 337      - * E$ it will probably install as an M, but if it hits in the E$, then it
 338      - * will stay E, if the store doesn't happen. So the first displacement flush
 339      - * should ensure that the CAS will miss in the E$.  Arrgh.
 340      - */
 341      -/* ARGSUSED */
 342      -void
 343      -scrubphys(uint64_t paddr, int ecache_set_size)
 344      -{}
 345      -
 346      -#else   /* lint */
 347  301          ENTRY(scrubphys)
 348  302          rdpr    %pstate, %o4
 349  303          andn    %o4, PSTATE_IE | PSTATE_AM, %o5
 350  304          wrpr    %o5, %g0, %pstate       ! clear IE, AM bits
 351  305  
 352  306          ECACHE_FLUSH_LINE(%o0, %o1, %o2, %o3)
 353  307          casxa   [%o0]ASI_MEM, %g0, %g0
 354  308          ECACHE_REFLUSH_LINE(%o1, %o2, %o3)
 355  309  
 356  310          wrpr    %g0, %o4, %pstate       ! restore earlier pstate register value
 357  311  
 358  312          retl
 359  313          membar  #Sync                   ! move the data out of the load buffer
 360  314          SET_SIZE(scrubphys)
 361  315  
 362      -#endif  /* lint */
 363  316  
 364      -
 365      -#if defined(lint)
 366      - /*
 367      - * clearphys - Pass in the physical memory address of the checkblock
 368      - * that you want to push out, cleared with a recognizable pattern,
 369      - * from the ecache.
 370      - *
 371      - * To ensure that the ecc gets recalculated after the bad data is cleared,
 372      - * we must write out enough data to fill the w$ line (64 bytes). So we read
 373      - * in an entire ecache subblock's worth of data, and write it back out.
 374      - * Then we overwrite the 16 bytes of bad data with the pattern.
 375      - */
 376      -/* ARGSUSED */
 377      -void
 378      -clearphys(uint64_t paddr, int ecache_set_size, int ecache_linesize)
 379      -{
 380      -}
 381      -
 382      -#else   /* lint */
 383  317          ENTRY(clearphys)
 384  318          /* turn off IE, AM bits */
 385  319          rdpr    %pstate, %o4
 386  320          andn    %o4, PSTATE_IE | PSTATE_AM, %o5
 387  321          wrpr    %o5, %g0, %pstate
 388  322  
 389  323          /* turn off NCEEN */
 390  324          ldxa    [%g0]ASI_ESTATE_ERR, %o5
 391  325          andn    %o5, EN_REG_NCEEN, %o3
 392  326          stxa    %o3, [%g0]ASI_ESTATE_ERR
↓ open down ↓ 27 lines elided ↑ open up ↑
 420  354  
 421  355          /* turn NCEEN back on */
 422  356          stxa    %o5, [%g0]ASI_ESTATE_ERR
 423  357          membar  #Sync
 424  358  
 425  359          /* return and re-enable IE and AM */
 426  360          retl
 427  361            wrpr  %g0, %o4, %pstate
 428  362          SET_SIZE(clearphys)
 429  363  
 430      -#endif  /* lint */
 431  364  
 432      -
 433      -#if defined(lint)
 434      -/*
 435      - * Cheetah Ecache displacement flush the specified line from the E$
 436      - *
 437      - * Register usage:
 438      - *      %o0 - 64 bit physical address for flushing
 439      - *      %o1 - Ecache set size
 440      - */
 441      -/*ARGSUSED*/
 442      -void
 443      -ecache_flush_line(uint64_t flushaddr, int ec_set_size)
 444      -{
 445      -}
 446      -#else   /* lint */
 447  365          ENTRY(ecache_flush_line)
 448  366  
 449  367          ECACHE_FLUSH_LINE(%o0, %o1, %o2, %o3)
 450  368  
 451  369          retl
 452  370            nop
 453  371          SET_SIZE(ecache_flush_line)
 454      -#endif  /* lint */
 455  372  
 456  373  
 457      -#if defined(lint)
 458      -/*
 459      - * This routine will not be called in Cheetah systems.
 460      - */
 461      -void
 462      -flush_ipb(void)
 463      -{ return; }
 464      -
 465      -#else   /* lint */
 466      -
 467  374          ENTRY(flush_ipb)
 468  375          retl
 469  376          nop
 470  377          SET_SIZE(flush_ipb)
 471  378  
 472      -#endif  /* lint */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX