]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/gpu/drm/nouveau/nvc0_grgpc.fuc
Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma
[karo-tx-linux.git] / drivers / gpu / drm / nouveau / nvc0_grgpc.fuc
index 06f5e26d1e0f5a2915134e172f889ff84b393561..15272be33b66431e4a2ee54ed2768bfc981b6ae9 100644 (file)
@@ -32,7 +32,7 @@
  * - watchdog timer around ctx operations
  */
 
-.section nvc0_grgpc_data
+.section #nvc0_grgpc_data
 include(`nvc0_graph.fuc')
 gpc_id:                        .b32 0
 gpc_mmio_list_head:    .b32 0
@@ -48,40 +48,45 @@ cmd_queue:          queue_init
 // chipset descriptions
 chipsets:
 .b8  0xc0 0 0 0
-.b16 nvc0_gpc_mmio_head
-.b16 nvc0_gpc_mmio_tail
-.b16 nvc0_tpc_mmio_head
-.b16 nvc0_tpc_mmio_tail
+.b16 #nvc0_gpc_mmio_head
+.b16 #nvc0_gpc_mmio_tail
+.b16 #nvc0_tpc_mmio_head
+.b16 #nvc0_tpc_mmio_tail
 .b8  0xc1 0 0 0
-.b16 nvc0_gpc_mmio_head
-.b16 nvc1_gpc_mmio_tail
-.b16 nvc0_tpc_mmio_head
-.b16 nvc1_tpc_mmio_tail
+.b16 #nvc0_gpc_mmio_head
+.b16 #nvc1_gpc_mmio_tail
+.b16 #nvc0_tpc_mmio_head
+.b16 #nvc1_tpc_mmio_tail
 .b8  0xc3 0 0 0
-.b16 nvc0_gpc_mmio_head
-.b16 nvc0_gpc_mmio_tail
-.b16 nvc0_tpc_mmio_head
-.b16 nvc3_tpc_mmio_tail
+.b16 #nvc0_gpc_mmio_head
+.b16 #nvc0_gpc_mmio_tail
+.b16 #nvc0_tpc_mmio_head
+.b16 #nvc3_tpc_mmio_tail
 .b8  0xc4 0 0 0
-.b16 nvc0_gpc_mmio_head
-.b16 nvc0_gpc_mmio_tail
-.b16 nvc0_tpc_mmio_head
-.b16 nvc3_tpc_mmio_tail
+.b16 #nvc0_gpc_mmio_head
+.b16 #nvc0_gpc_mmio_tail
+.b16 #nvc0_tpc_mmio_head
+.b16 #nvc3_tpc_mmio_tail
 .b8  0xc8 0 0 0
-.b16 nvc0_gpc_mmio_head
-.b16 nvc0_gpc_mmio_tail
-.b16 nvc0_tpc_mmio_head
-.b16 nvc0_tpc_mmio_tail
+.b16 #nvc0_gpc_mmio_head
+.b16 #nvc0_gpc_mmio_tail
+.b16 #nvc0_tpc_mmio_head
+.b16 #nvc0_tpc_mmio_tail
 .b8  0xce 0 0 0
-.b16 nvc0_gpc_mmio_head
-.b16 nvc0_gpc_mmio_tail
-.b16 nvc0_tpc_mmio_head
-.b16 nvc3_tpc_mmio_tail
+.b16 #nvc0_gpc_mmio_head
+.b16 #nvc0_gpc_mmio_tail
+.b16 #nvc0_tpc_mmio_head
+.b16 #nvc3_tpc_mmio_tail
 .b8  0xcf 0 0 0
-.b16 nvc0_gpc_mmio_head
-.b16 nvc0_gpc_mmio_tail
-.b16 nvc0_tpc_mmio_head
-.b16 nvcf_tpc_mmio_tail
+.b16 #nvc0_gpc_mmio_head
+.b16 #nvc0_gpc_mmio_tail
+.b16 #nvc0_tpc_mmio_head
+.b16 #nvcf_tpc_mmio_tail
+.b8  0xd9 0 0 0
+.b16 #nvd9_gpc_mmio_head
+.b16 #nvd9_gpc_mmio_tail
+.b16 #nvd9_tpc_mmio_head
+.b16 #nvd9_tpc_mmio_tail
 .b8  0 0 0 0
 
 // GPC mmio lists
@@ -114,6 +119,35 @@ nvc0_gpc_mmio_tail:
 mmctx_data(0x000c6c, 1);
 nvc1_gpc_mmio_tail:
 
+nvd9_gpc_mmio_head:
+mmctx_data(0x000380, 1)
+mmctx_data(0x000400, 2)
+mmctx_data(0x00040c, 3)
+mmctx_data(0x000450, 9)
+mmctx_data(0x000600, 1)
+mmctx_data(0x000684, 1)
+mmctx_data(0x000700, 5)
+mmctx_data(0x000800, 1)
+mmctx_data(0x000808, 3)
+mmctx_data(0x000828, 1)
+mmctx_data(0x000830, 1)
+mmctx_data(0x0008d8, 1)
+mmctx_data(0x0008e0, 1)
+mmctx_data(0x0008e8, 6)
+mmctx_data(0x00091c, 1)
+mmctx_data(0x000924, 3)
+mmctx_data(0x000b00, 1)
+mmctx_data(0x000b08, 6)
+mmctx_data(0x000bb8, 1)
+mmctx_data(0x000c08, 1)
+mmctx_data(0x000c10, 8)
+mmctx_data(0x000c6c, 1)
+mmctx_data(0x000c80, 1)
+mmctx_data(0x000c8c, 1)
+mmctx_data(0x001000, 3)
+mmctx_data(0x001014, 1)
+nvd9_gpc_mmio_tail:
+
 // TPC mmio lists
 nvc0_tpc_mmio_head:
 mmctx_data(0x000018, 1)
@@ -146,9 +180,34 @@ nvc3_tpc_mmio_tail:
 mmctx_data(0x000544, 1)
 nvc1_tpc_mmio_tail:
 
+nvd9_tpc_mmio_head:
+mmctx_data(0x000018, 1)
+mmctx_data(0x00003c, 1)
+mmctx_data(0x000048, 1)
+mmctx_data(0x000064, 1)
+mmctx_data(0x000088, 1)
+mmctx_data(0x000200, 6)
+mmctx_data(0x00021c, 2)
+mmctx_data(0x0002c4, 1)
+mmctx_data(0x000300, 6)
+mmctx_data(0x0003d0, 1)
+mmctx_data(0x0003e0, 2)
+mmctx_data(0x000400, 3)
+mmctx_data(0x000420, 3)
+mmctx_data(0x0004b0, 1)
+mmctx_data(0x0004e8, 1)
+mmctx_data(0x0004f4, 1)
+mmctx_data(0x000520, 2)
+mmctx_data(0x000544, 1)
+mmctx_data(0x000604, 4)
+mmctx_data(0x000644, 20)
+mmctx_data(0x000698, 1)
+mmctx_data(0x0006e0, 1)
+mmctx_data(0x000750, 3)
+nvd9_tpc_mmio_tail:
 
-.section nvc0_grgpc_code
-bra init
+.section #nvc0_grgpc_code
+bra #init
 define(`include_code')
 include(`nvc0_graph.fuc')
 
@@ -160,10 +219,10 @@ error:
        push $r14
        mov $r14 -0x67ec        // 0x9814
        sethi $r14 0x400000
-       call nv_wr32            // HUB_CTXCTL_CC_SCRATCH[5] = error code
+       call #nv_wr32           // HUB_CTXCTL_CC_SCRATCH[5] = error code
        add b32 $r14 0x41c
        mov $r15 1
-       call nv_wr32            // HUB_CTXCTL_INTR_UP_SET
+       call #nv_wr32           // HUB_CTXCTL_INTR_UP_SET
        pop $r14
        ret
 
@@ -190,7 +249,7 @@ init:
        iowr I[$r1 + 0x000] $r2         // FIFO_ENABLE
 
        // setup i0 handler, and route all interrupts to it
-       mov $r1 ih
+       mov $r1 #ih
        mov $iv0 $r1
        mov $r1 0x400
        iowr I[$r1 + 0x300] $r0         // INTR_DISPATCH
@@ -210,24 +269,24 @@ init:
        and $r2 0x1f
        shl b32 $r3 $r2
        sub b32 $r3 1
-       st b32 D[$r0 + tpc_count] $r2
-       st b32 D[$r0 + tpc_mask] $r3
+       st b32 D[$r0 + #tpc_count] $r2
+       st b32 D[$r0 + #tpc_mask] $r3
        add b32 $r1 0x400
        iord $r2 I[$r1 + 0x000]         // MYINDEX
-       st b32 D[$r0 + gpc_id] $r2
+       st b32 D[$r0 + #gpc_id] $r2
 
        // find context data for this chipset
        mov $r2 0x800
        shl b32 $r2 6
        iord $r2 I[$r2 + 0x000]         // CC_SCRATCH[0]
-       mov $r1 chipsets - 12
+       mov $r1 #chipsets - 12
        init_find_chipset:
                add b32 $r1 12
                ld b32 $r3 D[$r1 + 0x00]
                cmpu b32 $r3 $r2
-               bra e init_context
+               bra e #init_context
                cmpu b32 $r3 0
-               bra ne init_find_chipset
+               bra ne #init_find_chipset
                // unknown chipset
                ret
 
@@ -253,19 +312,19 @@ init:
        clear b32 $r15
        ld b16 $r14 D[$r1 + 4]
        ld b16 $r15 D[$r1 + 6]
-       st b16 D[$r0 + gpc_mmio_list_head] $r14
-       st b16 D[$r0 + gpc_mmio_list_tail] $r15
-       call mmctx_size
+       st b16 D[$r0 + #gpc_mmio_list_head] $r14
+       st b16 D[$r0 + #gpc_mmio_list_tail] $r15
+       call #mmctx_size
        add b32 $r2 $r15
        add b32 $r3 $r15
 
        // calculate per-TPC mmio context size, store the list pointers
        ld b16 $r14 D[$r1 + 8]
        ld b16 $r15 D[$r1 + 10]
-       st b16 D[$r0 + tpc_mmio_list_head] $r14
-       st b16 D[$r0 + tpc_mmio_list_tail] $r15
-       call mmctx_size
-       ld b32 $r14 D[$r0 + tpc_count]
+       st b16 D[$r0 + #tpc_mmio_list_head] $r14
+       st b16 D[$r0 + #tpc_mmio_list_tail] $r15
+       call #mmctx_size
+       ld b32 $r14 D[$r0 + #tpc_count]
        mulu $r14 $r15
        add b32 $r2 $r14
        add b32 $r3 $r14
@@ -283,7 +342,7 @@ init:
 
        // calculate size of strand context data
        mov b32 $r15 $r2
-       call strand_ctx_init
+       call #strand_ctx_init
        add b32 $r3 $r15
 
        // save context size, and tell HUB we're done
@@ -301,13 +360,13 @@ init:
 main:
        bset $flags $p0
        sleep $p0
-       mov $r13 cmd_queue
-       call queue_get
-       bra $p1 main
+       mov $r13 #cmd_queue
+       call #queue_get
+       bra $p1 #main
 
        // 0x0000-0x0003 are all context transfers
        cmpu b32 $r14 0x04
-       bra nc main_not_ctx_xfer
+       bra nc #main_not_ctx_xfer
                // fetch $flags and mask off $p1/$p2
                mov $r1 $flags
                mov $r2 0x0006
@@ -318,14 +377,14 @@ main:
                or $r1 $r14
                mov $flags $r1
                // transfer context data
-               call ctx_xfer
-               bra main
+               call #ctx_xfer
+               bra #main
 
        main_not_ctx_xfer:
        shl b32 $r15 $r14 16
        or $r15 E_BAD_COMMAND
-       call error
-       bra main
+       call #error
+       bra #main
 
 // interrupt handler
 ih:
@@ -342,13 +401,13 @@ ih:
        // incoming fifo command?
        iord $r10 I[$r0 + 0x200]        // INTR
        and $r11 $r10 0x00000004
-       bra e ih_no_fifo
+       bra e #ih_no_fifo
                // queue incoming fifo command for later processing
                mov $r11 0x1900
-               mov $r13 cmd_queue
+               mov $r13 #cmd_queue
                iord $r14 I[$r11 + 0x100]       // FIFO_CMD
                iord $r15 I[$r11 + 0x000]       // FIFO_DATA
-               call queue_put
+               call #queue_put
                add b32 $r11 0x400
                mov $r14 1
                iowr I[$r11 + 0x000] $r14       // FIFO_ACK
@@ -374,11 +433,11 @@ ih:
 //
 hub_barrier_done:
        mov $r15 1
-       ld b32 $r14 D[$r0 + gpc_id]
+       ld b32 $r14 D[$r0 + #gpc_id]
        shl b32 $r15 $r14
        mov $r14 -0x6be8        // 0x409418 - HUB_BAR_SET
        sethi $r14 0x400000
-       call nv_wr32
+       call #nv_wr32
        ret
 
 // Disables various things, waits a bit, and re-enables them..
@@ -395,7 +454,7 @@ ctx_redswitch:
        mov $r15 8
        ctx_redswitch_delay:
                sub b32 $r15 1
-               bra ne ctx_redswitch_delay
+               bra ne #ctx_redswitch_delay
        mov $r15 0xa20
        iowr I[$r14] $r15       // GPC_RED_SWITCH = UNK11, ENABLE, POWER
        ret
@@ -413,8 +472,8 @@ ctx_xfer:
        mov $r1 0xa04
        shl b32 $r1 6
        iowr I[$r1 + 0x000] $r15// MEM_BASE
-       bra not $p1 ctx_xfer_not_load
-               call ctx_redswitch
+       bra not $p1 #ctx_xfer_not_load
+               call #ctx_redswitch
        ctx_xfer_not_load:
 
        // strands
@@ -422,7 +481,7 @@ ctx_xfer:
        sethi $r1 0x20000
        mov $r2 0xc
        iowr I[$r1] $r2         // STRAND_CMD(0x3f) = 0x0c
-       call strand_wait
+       call #strand_wait
        mov $r2 0x47fc
        sethi $r2 0x20000
        iowr I[$r2] $r0         // STRAND_FIRST_GENE(0x3f) = 0x00
@@ -435,46 +494,46 @@ ctx_xfer:
        or $r10 2               // first
        mov $r11 0x0000
        sethi $r11 0x500000
-       ld b32 $r12 D[$r0 + gpc_id]
+       ld b32 $r12 D[$r0 + #gpc_id]
        shl b32 $r12 15
        add b32 $r11 $r12       // base = NV_PGRAPH_GPCn
-       ld b32 $r12 D[$r0 + gpc_mmio_list_head]
-       ld b32 $r13 D[$r0 + gpc_mmio_list_tail]
+       ld b32 $r12 D[$r0 + #gpc_mmio_list_head]
+       ld b32 $r13 D[$r0 + #gpc_mmio_list_tail]
        mov $r14 0              // not multi
-       call mmctx_xfer
+       call #mmctx_xfer
 
        // per-TPC mmio context
        xbit $r10 $flags $p1    // direction
        or $r10 4               // last
        mov $r11 0x4000
        sethi $r11 0x500000     // base = NV_PGRAPH_GPC0_TPC0
-       ld b32 $r12 D[$r0 + gpc_id]
+       ld b32 $r12 D[$r0 + #gpc_id]
        shl b32 $r12 15
        add b32 $r11 $r12       // base = NV_PGRAPH_GPCn_TPC0
-       ld b32 $r12 D[$r0 + tpc_mmio_list_head]
-       ld b32 $r13 D[$r0 + tpc_mmio_list_tail]
-       ld b32 $r15 D[$r0 + tpc_mask]
+       ld b32 $r12 D[$r0 + #tpc_mmio_list_head]
+       ld b32 $r13 D[$r0 + #tpc_mmio_list_tail]
+       ld b32 $r15 D[$r0 + #tpc_mask]
        mov $r14 0x800          // stride = 0x800
-       call mmctx_xfer
+       call #mmctx_xfer
 
        // wait for strands to finish
-       call strand_wait
+       call #strand_wait
 
        // if load, or a save without a load following, do some
        // unknown stuff that's done after finishing a block of
        // strand commands
-       bra $p1 ctx_xfer_post
-       bra not $p2 ctx_xfer_done
+       bra $p1 #ctx_xfer_post
+       bra not $p2 #ctx_xfer_done
        ctx_xfer_post:
                mov $r1 0x4afc
                sethi $r1 0x20000
                mov $r2 0xd
                iowr I[$r1] $r2         // STRAND_CMD(0x3f) = 0x0d
-               call strand_wait
+               call #strand_wait
 
        // mark completion in HUB's barrier
        ctx_xfer_done:
-       call hub_barrier_done
+       call #hub_barrier_done
        ret
 
 .align 256