Ignore:
Timestamp:
Sep 12, 2014, 3:10:03 PM (10 years ago)
Author:
cfuguet
Message:

tsar_boot: Using P_WIDTH constant to get lpid from CP0 EBASE

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/softs/tsar_boot/src/reset.S

    r758 r801  
    7979    mtc0    k0,     CP0_STATUS
    8080
    81     /* All processors compute pid, lpid, cluster_xy */
     81    /*
     82     * All processors compute gpid, lpid, cluster_xy
     83     * gpid = ebase[9:0] = X_WIDTH : Y_WIDTH : P_WIDTH
     84     *                        x         y       lpid
     85     * X, Y and LPID fields are left-aligned
     86     */
    8287
    8388    mfc0    k0,     CP0_EBASE
    84     andi    t0,     k0,     0x3FF    /* t0 <= pid (at most 1024 procs)      */
    85 
    86     move    t3,     t0
    87 
    88     la      k0,     NB_PROCS_MAX     /* k0 <= # of processors per cluster   */
    89     divu    t3,     k0
    90     mfhi    t1                       /* t1 <= lpid       = pid % NB_PROCS   */
    91     mflo    t2                       /* t2 <= cluster_xy = pid / NB_PROCS   */
     89    andi    t0,     k0,     0x3FF            /* t0 <= gpid (<= 1024 procs)  */
     90    andi    t1,     t0,     ((1<<P_WIDTH)-1) /* t1 <= lpid                  */
     91    srl     t2,     t0,     P_WIDTH          /* t2 <= cluster_xy            */
    9292
    9393    /* All processors initialise the count register in CP0 */
Note: See TracChangeset for help on using the changeset viewer.