summaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/itlb_miss.S
blob: 61233125cc9b3538ec4391198fca7affaf478868 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* $Id: itlb_miss.S,v 1.10 1997/03/26 12:24:18 davem Exp $
 * itlb_miss.S:	Instruction TLB miss code, this is included directly
 *              into the trap table.
 *
 * Copyright (C) 1996,1997 David S. Miller (davem@caip.rutgers.edu)
 * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
 */

/* Gratuitous comment. */

				/* ICACHE line 1 */
  /*0x00*/	ldxa		[%g0] ASI_IMMU, %g1		! Get TAG_TARGET
  /*0x04*/	srlx		%g1, 8, %g3			! Position PGD offset
  /*0x08*/	srlx		%g1, 48, %g5			! Shift down CONTEXT bits
  /*0x0c*/	and		%g3, %g2, %g3			! Mask PGD offset
  /*0x10*/	sllx		%g1, 2, %g4			! Position PMD offset
  /*0x14*/	ldxa		[%g0] ASI_IMMU_TSB_8KB_PTR, %g1	! For PTE offset
  /*0x18*/	brz,pn		%g5, 3f				! Context 0 == kernel
  /*0x1c*/	 and		%g4, %g2, %g4			! Mask PMD offset

				/* ICACHE line 2 */
  /*0x20*/	ldxa		[%g7 + %g3] ASI_PHYS_USE_EC, %g5	! Load user PGD
  /*0x24*/	srlx		%g1, 1, %g1				! PTE offset
  /*0x28*/	ldxa		[%g5 + %g4] ASI_PHYS_USE_EC, %g3	! Load PMD
2:/*0x2c*/	ldxa		[%g3 + %g1] ASI_PHYS_USE_EC, %g5	! Load PTE
  /*0x30*/	brlz,a,pt	%g5, 1f					! Valid set?
  /*0x34*/	 stxa		%g5, [%g0] ASI_ITLB_DATA_IN		! TLB load
  /*0x38*/	ba,a,pt		%xcc, sparc64_itlb_refbit_catch		! Nope...
1:/*0x3c*/	retry							! Trap return

3:				/* ICACHE line 3 */
  /*0x40*/	ldxa		[%g6 + %g3] ASI_PHYS_USE_EC, %g5	! Load kern PGD
  /*0x44*/	srlx		%g1, 1, %g1				! PTE offset
  /*0x48*/	ba,pt		%xcc, 2b				! Continue above
  /*0x4c*/	 ldxa		[%g5 + %g4] ASI_PHYS_USE_EC, %g3	! Load PMD
  /*0x50*/	nop
  /*0x54*/	nop
  /*0x58*/	nop
  /*0x5c*/	nop

				/* ICACHE line 4 */
  /*0x60*/	nop
  /*0x64*/	nop
  /*0x68*/	nop
  /*0x6c*/	nop
  /*0x70*/	nop
  /*0x74*/	nop
  /*0x78*/	nop
  /*0x7c*/	nop