Print this page
restore sparc comments
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  301  /*
 320  302   * scrubphys - Pass in the aligned physical memory address
 321  303   * that you want to scrub, along with the ecache set size.
 322  304   *
 323  305   *      1) Displacement flush the E$ line corresponding to %addr.
 324  306   *         The first ldxa guarantees that the %addr is no longer in
 325  307   *         M, O, or E (goes to I or S (if instruction fetch also happens).
 326  308   *      2) "Write" the data using a CAS %addr,%g0,%g0.
 327  309   *         The casxa guarantees a transition from I to M or S to M.
 328  310   *      3) Displacement flush the E$ line corresponding to %addr.
↓ open down ↓ 2 lines elided ↑ open up ↑
 331  313   *      4) The "membar #Sync" pushes the cache line out of the writeback
 332  314   *         buffers onto the bus, on the way to dram finally.
 333  315   *
 334  316   * This is a modified version of the algorithm suggested by Gary Lauterbach.
 335  317   * In theory the CAS %addr,%g0,%g0 is supposed to mark the addr's cache line
 336  318   * as modified, but then we found out that for spitfire, if it misses in the
 337  319   * E$ it will probably install as an M, but if it hits in the E$, then it
 338  320   * will stay E, if the store doesn't happen. So the first displacement flush
 339  321   * should ensure that the CAS will miss in the E$.  Arrgh.
 340  322   */
 341      -/* ARGSUSED */
 342      -void
 343      -scrubphys(uint64_t paddr, int ecache_set_size)
 344      -{}
 345      -
 346      -#else   /* lint */
 347  323          ENTRY(scrubphys)
 348  324          rdpr    %pstate, %o4
 349  325          andn    %o4, PSTATE_IE | PSTATE_AM, %o5
 350  326          wrpr    %o5, %g0, %pstate       ! clear IE, AM bits
 351  327  
 352  328          ECACHE_FLUSH_LINE(%o0, %o1, %o2, %o3)
 353  329          casxa   [%o0]ASI_MEM, %g0, %g0
 354  330          ECACHE_REFLUSH_LINE(%o1, %o2, %o3)
 355  331  
 356  332          wrpr    %g0, %o4, %pstate       ! restore earlier pstate register value
 357  333  
 358  334          retl
 359  335          membar  #Sync                   ! move the data out of the load buffer
 360  336          SET_SIZE(scrubphys)
 361  337  
 362      -#endif  /* lint */
 363  338  
 364      -
 365      -#if defined(lint)
 366      - /*
      339 +/*
 367  340   * clearphys - Pass in the physical memory address of the checkblock
 368  341   * that you want to push out, cleared with a recognizable pattern,
 369  342   * from the ecache.
 370  343   *
 371  344   * To ensure that the ecc gets recalculated after the bad data is cleared,
 372  345   * we must write out enough data to fill the w$ line (64 bytes). So we read
 373  346   * in an entire ecache subblock's worth of data, and write it back out.
 374  347   * Then we overwrite the 16 bytes of bad data with the pattern.
 375  348   */
 376      -/* ARGSUSED */
 377      -void
 378      -clearphys(uint64_t paddr, int ecache_set_size, int ecache_linesize)
 379      -{
 380      -}
 381      -
 382      -#else   /* lint */
 383  349          ENTRY(clearphys)
 384  350          /* turn off IE, AM bits */
 385  351          rdpr    %pstate, %o4
 386  352          andn    %o4, PSTATE_IE | PSTATE_AM, %o5
 387  353          wrpr    %o5, %g0, %pstate
 388  354  
 389  355          /* turn off NCEEN */
 390  356          ldxa    [%g0]ASI_ESTATE_ERR, %o5
 391  357          andn    %o5, EN_REG_NCEEN, %o3
 392  358          stxa    %o3, [%g0]ASI_ESTATE_ERR
↓ open down ↓ 27 lines elided ↑ open up ↑
 420  386  
 421  387          /* turn NCEEN back on */
 422  388          stxa    %o5, [%g0]ASI_ESTATE_ERR
 423  389          membar  #Sync
 424  390  
 425  391          /* return and re-enable IE and AM */
 426  392          retl
 427  393            wrpr  %g0, %o4, %pstate
 428  394          SET_SIZE(clearphys)
 429  395  
 430      -#endif  /* lint */
 431  396  
 432      -
 433      -#if defined(lint)
 434  397  /*
 435  398   * Cheetah Ecache displacement flush the specified line from the E$
 436  399   *
 437  400   * Register usage:
 438  401   *      %o0 - 64 bit physical address for flushing
 439  402   *      %o1 - Ecache set size
 440  403   */
 441      -/*ARGSUSED*/
 442      -void
 443      -ecache_flush_line(uint64_t flushaddr, int ec_set_size)
 444      -{
 445      -}
 446      -#else   /* lint */
 447  404          ENTRY(ecache_flush_line)
 448  405  
 449  406          ECACHE_FLUSH_LINE(%o0, %o1, %o2, %o3)
 450  407  
 451  408          retl
 452  409            nop
 453  410          SET_SIZE(ecache_flush_line)
 454      -#endif  /* lint */
 455  411  
 456      -
 457      -#if defined(lint)
 458  412  /*
 459  413   * This routine will not be called in Cheetah systems.
 460  414   */
 461      -void
 462      -flush_ipb(void)
 463      -{ return; }
 464      -
 465      -#else   /* lint */
 466      -
 467  415          ENTRY(flush_ipb)
 468  416          retl
 469  417          nop
 470  418          SET_SIZE(flush_ipb)
 471  419  
 472      -#endif  /* lint */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX