/* fuc microcode for nvc0 PGRAPH/HUB
 *
 * Copyright 2011 Red Hat Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 *
 * Authors: Ben Skeggs
 */

#ifdef INCLUDE_DATA
hub_mmio_list_head:	.b32 #hub_mmio_list_base
hub_mmio_list_tail:	.b32 #hub_mmio_list_next

gpc_count:		.b32 0
rop_count:		.b32 0
cmd_queue:		queue_init

ctx_current:		.b32 0

.align 256
chan_data:
chan_mmio_count:	.b32 0
chan_mmio_address:	.b32 0

.align 256
xfer_data: 		.skip 256

hub_mmio_list_base:
.b32 0x0417e91c // 0x17e91c, 2
hub_mmio_list_next:
#endif

#ifdef INCLUDE_CODE
// reports an exception to the host
//
// In: $r15 error code (see nvc0.fuc)
//
error:
	nv_iowr(NV_PGRAPH_FECS_CC_SCRATCH_VAL(5), 0, $r15)
	mov $r15 1
	nv_iowr(NV_PGRAPH_FECS_INTR_UP_SET, 0, $r15)
	ret

// HUB fuc initialisation, executed by triggering ucode start, will
// fall through to main loop after completion.
//
// Output:
//   CC_SCRATCH[0]:
//	     31:31: set to signal completion
//   CC_SCRATCH[1]:
//	      31:0: total PGRAPH context size
//
init:
	clear b32 $r0
	mov $xdbase $r0

	// setup stack
	nv_iord($r1, NV_PGRAPH_FECS_CAPS, 0)
	extr $r1 $r1 9:17
	shl b32 $r1 8
	mov $sp $r1

	// enable fifo access
	mov $r2 NV_PGRAPH_FECS_ACCESS_FIFO
	nv_iowr(NV_PGRAPH_FECS_ACCESS, 0, $r2)

	// setup i0 handler, and route all interrupts to it
	mov $r1 #ih
	mov $iv0 $r1

	clear b32 $r2
	nv_iowr(NV_PGRAPH_FECS_INTR_ROUTE, 0, $r2)

	// route HUB_CHSW_PULSE to fuc interrupt 8
	mov $r2 0x2003		// { HUB_CHSW_PULSE, ZERO } -> intr 8
	nv_iowr(NV_PGRAPH_FECS_IROUTE, 0, $r2)

	// not sure what these are, route them because NVIDIA does, and
	// the IRQ handler will signal the host if we ever get one.. we
	// may find out if/why we need to handle these if so..
	//
	mov $r2 0x2004		// { 0x04, ZERO } -> intr 9
	nv_iowr(NV_PGRAPH_FECS_IROUTE, 1, $r2)
	mov $r2 0x200b		// { HUB_FIRMWARE_MTHD, ZERO } -> intr 10
	nv_iowr(NV_PGRAPH_FECS_IROUTE, 2, $r2)
	mov $r2 0x200c		// { 0x0c, ZERO } -> intr 15
	nv_iowr(NV_PGRAPH_FECS_IROUTE, 7, $r2)

	// enable all INTR_UP interrupts
	sub b32 $r3 $r0 1
	nv_iowr(NV_PGRAPH_FECS_INTR_UP_EN, 0, $r3)

	// enable fifo, ctxsw, 9, fwmthd, 15 interrupts
	imm32($r2, 0x8704)
	nv_iowr(NV_PGRAPH_FECS_INTR_EN_SET, 0, $r2)

	// fifo level triggered, rest edge
	mov $r2 NV_PGRAPH_FECS_INTR_MODE_FIFO_LEVEL
	nv_iowr(NV_PGRAPH_FECS_INTR_MODE, 0, $r2)

	// enable interrupts
	bset $flags ie0

	// fetch enabled GPC/ROP counts
	nv_rd32($r14, 0x409604)
	extr $r1 $r15 16:20
	st b32 D[$r0 + #rop_count] $r1
	and $r15 0x1f
	st b32 D[$r0 + #gpc_count] $r15

	// set BAR_REQMASK to GPC mask
	mov $r1 1
	shl b32 $r1 $r15
	sub b32 $r1 1
	nv_iowr(NV_PGRAPH_FECS_BAR_MASK0, 0, $r1)
	nv_iowr(NV_PGRAPH_FECS_BAR_MASK1, 0, $r1)

	// context size calculation, reserve first 256 bytes for use by fuc
	mov $r1 256

	//
	mov $r15 2
	call(ctx_4170s)
	call(ctx_4170w)
	mov $r15 0x10
	call(ctx_86c)

	// calculate size of mmio context data
	ld b32 $r14 D[$r0 + #hub_mmio_list_head]
	ld b32 $r15 D[$r0 + #hub_mmio_list_tail]
	call(mmctx_size)

	// set mmctx base addresses now so we don't have to do it later,
	// they don't (currently) ever change
	shr b32 $r4 $r1 8
	nv_iowr(NV_PGRAPH_FECS_MMCTX_SAVE_SWBASE, 0, $r4)
	nv_iowr(NV_PGRAPH_FECS_MMCTX_LOAD_SWBASE, 0, $r4)
	add b32 $r3 0x1300
	add b32 $r1 $r15
	shr b32 $r15 2
	nv_iowr(NV_PGRAPH_FECS_MMCTX_LOAD_COUNT, 0, $r15) // wtf??

	// strands, base offset needs to be aligned to 256 bytes
	shr b32 $r1 8
	add b32 $r1 1
	shl b32 $r1 8
	mov b32 $r15 $r1
	call(strand_ctx_init)
	add b32 $r1 $r15

	// initialise each GPC in sequence by passing in the offset of its
	// context data in GPCn_CC_SCRATCH[1], and starting its FUC (which
	// has previously been uploaded by the host) running.
	//
	// the GPC fuc init sequence will set GPCn_CC_SCRATCH[0] bit 31
	// when it has completed, and return the size of its context data
	// in GPCn_CC_SCRATCH[1]
	//
	ld b32 $r3 D[$r0 + #gpc_count]
	imm32($r4, 0x502000)
	init_gpc:
		// setup, and start GPC ucode running
		add b32 $r14 $r4 0x804
		mov b32 $r15 $r1
		call(nv_wr32)			// CC_SCRATCH[1] = ctx offset
		add b32 $r14 $r4 0x10c
		clear b32 $r15
		call(nv_wr32)
		add b32 $r14 $r4 0x104
		call(nv_wr32)			// ENTRY
		add b32 $r14 $r4 0x100
		mov $r15 2			// CTRL_START_TRIGGER
		call(nv_wr32)			// CTRL

		// wait for it to complete, and adjust context size
		add b32 $r14 $r4 0x800
		init_gpc_wait:
			call(nv_rd32)
			xbit $r15 $r15 31
			bra e #init_gpc_wait
		add b32 $r14 $r4 0x804
		call(nv_rd32)
		add b32 $r1 $r15

		// next!
		add b32 $r4 0x8000
		sub b32 $r3 1
		bra ne #init_gpc

	//
	mov $r15 0
	call(ctx_86c)
	mov $r15 0
	call(ctx_4170s)

	// save context size, and tell host we're ready
	nv_iowr(NV_PGRAPH_FECS_CC_SCRATCH_VAL(1), 0, $r1)
	clear b32 $r1
	bset $r1 31
	nv_iowr(NV_PGRAPH_FECS_CC_SCRATCH_SET(0), 0, $r1)

// Main program loop, very simple, sleeps until woken up by the interrupt
// handler, pulls a command from the queue and executes its handler
//
main:
	// sleep until we have something to do
	bset $flags $p0
	sleep $p0
	mov $r13 #cmd_queue
	call(queue_get)
	bra $p1 #main

	// context switch, requested by GPU?
	cmpu b32 $r14 0x4001
	bra ne #main_not_ctx_switch
		trace_set(T_AUTO)
		nv_iord($r1, NV_PGRAPH_FECS_CHAN_ADDR, 0)
		nv_iord($r2, NV_PGRAPH_FECS_CHAN_NEXT, 0)

		xbit $r3 $r1 31
		bra e #chsw_no_prev
			xbit $r3 $r2 31
			bra e #chsw_prev_no_next
				push $r2
				mov b32 $r2 $r1
				trace_set(T_SAVE)
				bclr $flags $p1
				bset $flags $p2
				call(ctx_xfer)
				trace_clr(T_SAVE);
				pop $r2
				trace_set(T_LOAD);
				bset $flags $p1
				call(ctx_xfer)
				trace_clr(T_LOAD);
				bra #chsw_done
			chsw_prev_no_next:
				push $r2
				mov b32 $r2 $r1
				bclr $flags $p1
				bclr $flags $p2
				call(ctx_xfer)
				pop $r2
				nv_iowr(NV_PGRAPH_FECS_CHAN_ADDR, 0, $r2)
				bra #chsw_done
		chsw_no_prev:
			xbit $r3 $r2 31
			bra e #chsw_done
				bset $flags $p1
				bclr $flags $p2
				call(ctx_xfer)

		// ack the context switch request
		chsw_done:
		mov $r2 NV_PGRAPH_FECS_CHSW_ACK
		nv_iowr(NV_PGRAPH_FECS_CHSW, 0, $r2)
		trace_clr(T_AUTO)
		bra #main

	// request to set current channel? (*not* a context switch)
	main_not_ctx_switch:
	cmpu b32 $r14 0x0001
	bra ne #main_not_ctx_chan
		mov b32 $r2 $r15
		call(ctx_chan)
		bra #main_done

	// request to store current channel context?
	main_not_ctx_chan:
	cmpu b32 $r14 0x0002
	bra ne #main_not_ctx_save
		trace_set(T_SAVE)
		bclr $flags $p1
		bclr $flags $p2
		call(ctx_xfer)
		trace_clr(T_SAVE)
		bra #main_done

	main_not_ctx_save:
		shl b32 $r15 $r14 16
		or $r15 E_BAD_COMMAND
		call(error)
		bra #main

	main_done:
	clear b32 $r2
	bset $r2 31
	nv_iowr(NV_PGRAPH_FECS_CC_SCRATCH_SET(0), 0, $r2)
	bra #main

// interrupt handler
ih:
	push $r8
	mov $r8 $flags
	push $r8
	push $r9
	push $r10
	push $r11
	push $r13
	push $r14
	push $r15
	clear b32 $r0

	// incoming fifo command?
	nv_iord($r10, NV_PGRAPH_FECS_INTR, 0)
	and $r11 $r10 NV_PGRAPH_FECS_INTR_FIFO
	bra e #ih_no_fifo
		// queue incoming fifo command for later processing
		mov $r13 #cmd_queue
		nv_iord($r14, NV_PGRAPH_FECS_FIFO_CMD, 0)
		nv_iord($r15, NV_PGRAPH_FECS_FIFO_DATA, 0)
		call(queue_put)
		add b32 $r11 0x400
		mov $r14 1
		nv_iowr(NV_PGRAPH_FECS_FIFO_ACK, 0, $r14)

	// context switch request?
	ih_no_fifo:
	and $r11 $r10 NV_PGRAPH_FECS_INTR_CHSW
	bra e #ih_no_ctxsw
		// enqueue a context switch for later processing
		mov $r13 #cmd_queue
		mov $r14 0x4001
		call(queue_put)

	// firmware method?
	ih_no_ctxsw:
	and $r11 $r10 NV_PGRAPH_FECS_INTR_FWMTHD
	bra e #ih_no_fwmthd
		// none we handle, ack, and fall-through to unhandled
		mov $r11 0x100
		nv_wr32(0x400144, $r11)

	// anything we didn't handle, bring it to the host's attention
	ih_no_fwmthd:
	mov $r11 0x104 // FIFO | CHSW
	not b32 $r11
	and $r11 $r10 $r11
	bra e #ih_no_other
		nv_iowr(NV_PGRAPH_FECS_INTR_UP_SET, 0, $r11)

	// ack, and wake up main()
	ih_no_other:
	nv_iowr(NV_PGRAPH_FECS_INTR_ACK, 0, $r10)

	pop $r15
	pop $r14
	pop $r13
	pop $r11
	pop $r10
	pop $r9
	pop $r8
	mov $flags $r8
	pop $r8
	bclr $flags $p0
	iret

#if CHIPSET < GK100
// Not real sure, but, MEM_CMD 7 will hang forever if this isn't done
ctx_4160s:
	mov $r15 1
	nv_wr32(0x404160, $r15)
	ctx_4160s_wait:
		nv_rd32($r15, 0x404160)
		xbit $r15 $r15 4
		bra e #ctx_4160s_wait
	ret

// Without clearing again at end of xfer, some things cause PGRAPH
// to hang with STATUS=0x00000007 until it's cleared.. fbcon can
// still function with it set however...
ctx_4160c:
	clear b32 $r15
	nv_wr32(0x404160, $r15)
	ret
#endif

// Again, not real sure
//
// In: $r15 value to set 0x404170 to
//
ctx_4170s:
	or $r15 0x10
	nv_wr32(0x404170, $r15)
	ret

// Waits for a ctx_4170s() call to complete
//
ctx_4170w:
	nv_rd32($r15, 0x404170)
	and $r15 0x10
	bra ne #ctx_4170w
	ret

// Disables various things, waits a bit, and re-enables them..
//
// Not sure how exactly this helps, perhaps "ENABLE" is not such a
// good description for the bits we turn off?  Anyways, without this,
// funny things happen.
//
ctx_redswitch:
	mov $r14 NV_PGRAPH_FECS_RED_SWITCH_ENABLE_GPC
	or  $r14 NV_PGRAPH_FECS_RED_SWITCH_POWER_ROP
	or  $r14 NV_PGRAPH_FECS_RED_SWITCH_POWER_GPC
	or  $r14 NV_PGRAPH_FECS_RED_SWITCH_POWER_MAIN
	nv_iowr(NV_PGRAPH_FECS_RED_SWITCH, 0, $r14)
	mov $r15 8
	ctx_redswitch_delay:
		sub b32 $r15 1
		bra ne #ctx_redswitch_delay
	or  $r14 NV_PGRAPH_FECS_RED_SWITCH_ENABLE_ROP
	or  $r14 NV_PGRAPH_FECS_RED_SWITCH_ENABLE_MAIN
	nv_iowr(NV_PGRAPH_FECS_RED_SWITCH, 0, $r14)
	ret

// Not a clue what this is for, except that unless the value is 0x10, the
// strand context is saved (and presumably restored) incorrectly..
//
// In: $r15 value to set to (0x00/0x10 are used)
//
ctx_86c:
	nv_iowr(NV_PGRAPH_FECS_UNK86C, 0, $r15)
	nv_wr32(0x408a14, $r15)
	nv_wr32(NV_PGRAPH_GPCX_GPCCS_UNK86C, $r15)
	ret

// In: $r15 NV_PGRAPH_FECS_MEM_CMD_*
ctx_mem:
	nv_iowr(NV_PGRAPH_FECS_MEM_CMD, 0, $r15)
	ctx_mem_wait:
		nv_iord($r15, NV_PGRAPH_FECS_MEM_CMD, 0)
		or $r15 $r15
		bra ne #ctx_mem_wait
	ret

// ctx_load - load's a channel's ctxctl data, and selects its vm
//
// In: $r2 channel address
//
ctx_load:
	trace_set(T_CHAN)

	// switch to channel, somewhat magic in parts..
	mov $r10 12		// DONE_UNK12
	call(wait_donez)
	clear b32 $r15
	nv_iowr(0x409a24, 0, $r15)
	nv_iowr(NV_PGRAPH_FECS_CHAN_NEXT, 0, $r2)
	nv_iowr(NV_PGRAPH_FECS_MEM_CHAN, 0, $r2)
	mov $r15 NV_PGRAPH_FECS_MEM_CMD_LOAD_CHAN
	call(ctx_mem)
	nv_iowr(NV_PGRAPH_FECS_CHAN_ADDR, 0, $r2)

	// load channel header, fetch PGRAPH context pointer
	mov $xtargets $r0
	bclr $r2 31
	shl b32 $r2 4
	add b32 $r2 2

	trace_set(T_LCHAN)
	nv_iowr(NV_PGRAPH_FECS_MEM_BASE, 0, $r2)
	imm32($r2, NV_PGRAPH_FECS_MEM_TARGET_UNK31)
	or  $r2 NV_PGRAPH_FECS_MEM_TARGET_AS_VRAM
	nv_iowr(NV_PGRAPH_FECS_MEM_TARGET, 0, $r2)
	mov $r1 0x10			// chan + 0x0210
	mov $r2 #xfer_data
	sethi $r2 0x00020000		// 16 bytes
	xdld $r1 $r2
	xdwait
	trace_clr(T_LCHAN)

	// update current context
	ld b32 $r1 D[$r0 + #xfer_data + 4]
	shl b32 $r1 24
	ld b32 $r2 D[$r0 + #xfer_data + 0]
	shr b32 $r2 8
	or $r1 $r2
	st b32 D[$r0 + #ctx_current] $r1

	// set transfer base to start of context, and fetch context header
	trace_set(T_LCTXH)
	nv_iowr(NV_PGRAPH_FECS_MEM_BASE, 0, $r1)
	mov $r2 NV_PGRAPH_FECS_MEM_TARGET_AS_VM
	nv_iowr(NV_PGRAPH_FECS_MEM_TARGET, 0, $r2)
	mov $r1 #chan_data
	sethi $r1 0x00060000		// 256 bytes
	xdld $r0 $r1
	xdwait
	trace_clr(T_LCTXH)

	trace_clr(T_CHAN)
	ret

// ctx_chan - handler for HUB_SET_CHAN command, will set a channel as
//            the active channel for ctxctl, but not actually transfer
//            any context data.  intended for use only during initial
//            context construction.
//
// In: $r2 channel address
//
ctx_chan:
#if CHIPSET < GK100
	call(ctx_4160s)
#endif
	call(ctx_load)
	mov $r10 12			// DONE_UNK12
	call(wait_donez)
	mov $r15 5 // MEM_CMD 5 ???
	call(ctx_mem)
#if CHIPSET < GK100
	call(ctx_4160c)
#endif
	ret

// Execute per-context state overrides list
//
// Only executed on the first load of a channel.  Might want to look into
// removing this and having the host directly modify the channel's context
// to change this state...  The nouveau DRM already builds this list as
// it's definitely needed for NVIDIA's, so we may as well use it for now
//
// Input: $r1 mmio list length
//
ctx_mmio_exec:
	// set transfer base to be the mmio list
	ld b32 $r3 D[$r0 + #chan_mmio_address]
	nv_iowr(NV_PGRAPH_FECS_MEM_BASE, 0, $r3)

	clear b32 $r3
	ctx_mmio_loop:
		// fetch next 256 bytes of mmio list if necessary
		and $r4 $r3 0xff
		bra ne #ctx_mmio_pull
			mov $r5 #xfer_data
			sethi $r5 0x00060000	// 256 bytes
			xdld $r3 $r5
			xdwait

		// execute a single list entry
		ctx_mmio_pull:
		ld b32 $r14 D[$r4 + #xfer_data + 0x00]
		ld b32 $r15 D[$r4 + #xfer_data + 0x04]
		call(nv_wr32)

		// next!
		add b32 $r3 8
		sub b32 $r1 1
		bra ne #ctx_mmio_loop

	// set transfer base back to the current context
	ctx_mmio_done:
	ld b32 $r3 D[$r0 + #ctx_current]
	nv_iowr(NV_PGRAPH_FECS_MEM_BASE, 0, $r3)

	// disable the mmio list now, we don't need/want to execute it again
	st b32 D[$r0 + #chan_mmio_count] $r0
	mov $r1 #chan_data
	sethi $r1 0x00060000		// 256 bytes
	xdst $r0 $r1
	xdwait
	ret

// Transfer HUB context data between GPU and storage area
//
// In: $r2 channel address
//     $p1 clear on save, set on load
//     $p2 set if opposite direction done/will be done, so:
//		on save it means: "a load will follow this save"
//		on load it means: "a save preceeded this load"
//
ctx_xfer:
	// according to mwk, some kind of wait for idle
	mov $r14 4
	nv_iowr(0x409c08, 0, $r14)
	ctx_xfer_idle:
		nv_iord($r14, 0x409c00, 0)
		and $r14 0x2000
		bra ne #ctx_xfer_idle

	bra not $p1 #ctx_xfer_pre
	bra $p2 #ctx_xfer_pre_load
	ctx_xfer_pre:
		mov $r15 0x10
		call(ctx_86c)
#if CHIPSET < GK100
		call(ctx_4160s)
#endif
		bra not $p1 #ctx_xfer_exec

	ctx_xfer_pre_load:
		mov $r15 2
		call(ctx_4170s)
		call(ctx_4170w)
		call(ctx_redswitch)
		clear b32 $r15
		call(ctx_4170s)
		call(ctx_load)

	// fetch context pointer, and initiate xfer on all GPCs
	ctx_xfer_exec:
	ld b32 $r1 D[$r0 + #ctx_current]

	clear b32 $r2
	nv_iowr(NV_PGRAPH_FECS_BAR, 0, $r2)

	nv_wr32(0x41a500, $r1)	// GPC_BCAST_WRCMD_DATA = ctx pointer
	xbit $r15 $flags $p1
	xbit $r2 $flags $p2
	shl b32 $r2 1
	or $r15 $r2
	nv_wr32(0x41a504, $r15)	// GPC_BCAST_WRCMD_CMD = GPC_XFER(type)

	// strands
	call(strand_pre)
	clear b32 $r2
	nv_iowr(NV_PGRAPH_FECS_STRAND_SELECT, 0x3f, $r2)
	xbit $r2 $flags $p1	// SAVE/LOAD
	add b32 $r2 NV_PGRAPH_FECS_STRAND_CMD_SAVE
	nv_iowr(NV_PGRAPH_FECS_STRAND_CMD, 0x3f, $r2)

	// mmio context
	xbit $r10 $flags $p1	// direction
	or $r10 6		// first, last
	mov $r11 0		// base = 0
	ld b32 $r12 D[$r0 + #hub_mmio_list_head]
	ld b32 $r13 D[$r0 + #hub_mmio_list_tail]
	mov $r14 0		// not multi
	call(mmctx_xfer)

	// wait for GPCs to all complete
	mov $r10 8		// DONE_BAR
	call(wait_doneo)

	// wait for strand xfer to complete
	call(strand_wait)

	// post-op
	bra $p1 #ctx_xfer_post
		mov $r10 12		// DONE_UNK12
		call(wait_donez)
		mov $r15 5 // MEM_CMD 5 ???
		call(ctx_mem)

	bra $p2 #ctx_xfer_done
	ctx_xfer_post:
		mov $r15 2
		call(ctx_4170s)
		clear b32 $r15
		call(ctx_86c)
		call(strand_post)
		call(ctx_4170w)
		clear b32 $r15
		call(ctx_4170s)

		bra not $p1 #ctx_xfer_no_post_mmio
		ld b32 $r1 D[$r0 + #chan_mmio_count]
		or $r1 $r1
		bra e #ctx_xfer_no_post_mmio
			call(ctx_mmio_exec)

		ctx_xfer_no_post_mmio:
#if CHIPSET < GK100
		call(ctx_4160c)
#endif

	ctx_xfer_done:
	ret
#endif
