1/* $NetBSD: db_tlb_access.S,v 1.3 2015/03/02 14:17:06 nakayama Exp $ */ 2 3/* 4 * Copyright (c) 1996-2002 Eduardo Horvath 5 * Copyright (c) 2010 Matthew R. Green 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 */ 27 28#include <machine/ctlreg.h> 29#include <machine/asm.h> 30 31/* 32 * Basic routines to print the I/D-TLB tag & data info. 33 */ 34 35#ifdef _LP64 36ENTRY_NOPROFILE(print_dtlb) 37 save %sp, -CC64FSZ, %sp 38 sll %i0, 3, %l3 39 or %l3, %i1, %l3 40 mov %i1, %l1 41 clr %l2 421: 43 ldxa [%l1] ASI_DMMU_TLB_TAG, %o2 44 membar #Sync 45 mov %l2, %o1 46 ldxa [%l1] ASI_DMMU_TLB_DATA, %o3 47 membar #Sync 48 inc %l2 49 set 2f, %o0 50 call _C_LABEL(db_printf) 51 inc 8, %l1 52 53 ldxa [%l1] ASI_DMMU_TLB_TAG, %o2 54 membar #Sync 55 mov %l2, %o1 56 ldxa [%l1] ASI_DMMU_TLB_DATA, %o3 57 membar #Sync 58 inc %l2 59 set 3f, %o0 60 call _C_LABEL(db_printf) 61 inc 8, %l1 62 63 cmp %l1, %l3 64 bl 1b 65 inc 8, %l0 66 67 ret 68 restore 69 70ENTRY_NOPROFILE(print_itlb) 71 save %sp, -CC64FSZ, %sp 72 sll %i0, 3, %l3 73 or %l3, %i1, %l3 74 mov %i1, %l1 75 clr %l2 761: 77 ldxa [%l1] ASI_IMMU_TLB_TAG, %o2 78 membar #Sync 79 mov %l2, %o1 80 ldxa [%l1] ASI_IMMU_TLB_DATA, %o3 81 membar #Sync 82 inc %l2 83 set 2f, %o0 84 call _C_LABEL(db_printf) 85 inc 8, %l1 86 87 ldxa [%l1] ASI_IMMU_TLB_TAG, %o2 88 membar #Sync 89 mov %l2, %o1 90 ldxa [%l1] ASI_IMMU_TLB_DATA, %o3 91 membar #Sync 92 inc %l2 93 set 3f, %o0 94 call _C_LABEL(db_printf) 95 inc 8, %l1 96 97 cmp %l1, %l3 98 bl 1b 99 inc 8, %l0 100 101 ret 102 restore 103 104 .data 1052: 106 .asciz "%2d:%016lx %016lx " 1073: 108 .asciz "%2d:%016lx %016lx\n" 109 .text 110#else 111ENTRY_NOPROFILE(print_dtlb) 112 save %sp, -CC64FSZ, %sp 113 sll %i0, 3, %l3 114 or %l3, %i1, %l3 115 mov %i1, %l1 116 clr %l2 1171: 118 ldxa [%l1] ASI_DMMU_TLB_TAG, %o2 119 membar #Sync 120 srl %o2, 0, %o3 121 mov %l2, %o1 122 srax %o2, 32, %o2 123 ldxa [%l1] ASI_DMMU_TLB_DATA, %o4 124 membar #Sync 125 srl %o4, 0, %o5 126 inc %l2 127 srax %o4, 32, %o4 128 set 2f, %o0 129 call _C_LABEL(db_printf) 130 inc 8, %l1 131 132 ldxa [%l1] ASI_DMMU_TLB_TAG, %o2 133 membar #Sync 134 srl %o2, 0, %o3 135 mov %l2, %o1 136 srax %o2, 32, %o2 137 ldxa [%l1] ASI_DMMU_TLB_DATA, %o4 138 membar #Sync 139 srl %o4, 0, %o5 140 inc %l2 141 srax %o4, 32, %o4 142 set 3f, %o0 143 call _C_LABEL(db_printf) 144 inc 8, %l1 145 146 cmp %l1, %l3 147 bl 1b 148 inc 8, %l0 149 150 ret 151 restore 152 153ENTRY_NOPROFILE(print_itlb) 154 save %sp, -CC64FSZ, %sp 155 sll %i0, 3, %l3 156 or %l3, %i1, %l3 157 mov %i1, %l1 158 clr %l2 1591: 160 ldxa [%l1] ASI_IMMU_TLB_TAG, %o2 161 membar #Sync 162 srl %o2, 0, %o3 163 mov %l2, %o1 164 srax %o2, 32, %o2 165 ldxa [%l1] ASI_IMMU_TLB_DATA, %o4 166 membar #Sync 167 srl %o4, 0, %o5 168 inc %l2 169 srax %o4, 32, %o4 170 set 2f, %o0 171 call _C_LABEL(db_printf) 172 inc 8, %l1 173 174 ldxa [%l1] ASI_IMMU_TLB_TAG, %o2 175 membar #Sync 176 srl %o2, 0, %o3 177 mov %l2, %o1 178 srax %o2, 32, %o2 179 ldxa [%l1] ASI_IMMU_TLB_DATA, %o4 180 membar #Sync 181 srl %o4, 0, %o5 182 inc %l2 183 srax %o4, 32, %o4 184 set 3f, %o0 185 call _C_LABEL(db_printf) 186 inc 8, %l1 187 188 cmp %l1, %l3 189 bl 1b 190 inc 8, %l0 191 192 ret 193 restore 194 195 .data 1962: 197 .asciz "%2d:%08x:%08x %08x:%08x " 1983: 199 .asciz "%2d:%08x:%08x %08x:%08x\n" 200 .text 201#endif 202