Annotation of qemu/roms/SLOF/board-js2x/slof/attu.fs, revision 1.1

1.1     ! root        1: \ *****************************************************************************
        !             2: \ * Copyright (c) 2004, 2008 IBM Corporation
        !             3: \ * All rights reserved.
        !             4: \ * This program and the accompanying materials
        !             5: \ * are made available under the terms of the BSD License
        !             6: \ * which accompanies this distribution, and is available at
        !             7: \ * http://www.opensource.org/licenses/bsd-license.php
        !             8: \ *
        !             9: \ * Contributors:
        !            10: \ *     IBM Corporation - initial implementation
        !            11: \ ****************************************************************************/
        !            12: 
        !            13: \ U4 "Attu" PCIe root complex.
        !            14: 
        !            15: \ See the PCI OF binding document.
        !            16: 
        !            17: new-device
        !            18: 
        !            19: s" pciex" device-name s" pci" device-type
        !            20: s" U4-pcie" compatible
        !            21: s" U4" encode-string s" model" property
        !            22: 
        !            23: \ spare out 0xc0000000-0xefffffff for pcie
        !            24: f8070200 rl@ fffffff0 and f8070200 rl!
        !            25: \ enable io memory for pcie @ c0000000-efffffff
        !            26: 70000003 f80903f0 rl!-le
        !            27: 
        !            28: 3 encode-int s" #address-cells" property
        !            29: 2 encode-int s" #size-cells" property
        !            30: 
        !            31: s" /mpic" find-node encode-int s" interrupt-parent" property
        !            32: \ XXX should have interrupt map, etc.  this works for now though.
        !            33: 
        !            34: : decode-unit  2 hex-decode-unit  3 #join  8 lshift  0 0 rot F00000 + ;
        !            35: : encode-unit  nip nip  ff00 and 8 rshift  3 #split
        !            36:                over IF 2 ELSE nip 1 THEN hex-encode-unit ;
        !            37: 
        !            38: f1000000 CONSTANT my-puid
        !            39: \ Configuration space accesses.
        !            40: : >config  f1000000 + ;
        !            41: : config-l!  >config rl!-le ;
        !            42: : config-l@  >config rl@-le ;
        !            43: : config-w!  >config rw!-le ;
        !            44: : config-w@  >config rw@-le ;
        !            45: : config-b!  >config rb! ;
        !            46: : config-b@  >config rb@ ;
        !            47: 
        !            48: : config-dump ( addr size -- )  ['] config-l@ 4 (dump) ;
        !            49: 
        !            50: \ 16MB of configuration space
        !            51: f1000000 encode-64 1000000 encode-64+ s" reg" property
        !            52: 
        !            53: \ 4MB of I/O space.
        !            54: 01000000 encode-int  00000000 encode-int+ 00000000 encode-int+ 
        !            55: 00000000 encode-int+ f0000000 encode-int+ 
        !            56: 00000000 encode-int+ 00400000 encode-int+
        !            57: 
        !            58: \ 1.75GB of memory space @ c0000000.
        !            59: 02000000 encode-int+ c0000000 encode-64+
        !            60: c0000000 encode-64+  30000000 encode-64+ s" ranges" property
        !            61: 
        !            62: \ Host bridge, so full bus range.
        !            63: f0 encode-int ff encode-int+ s" bus-range" property
        !            64: 
        !            65: : open  true ;
        !            66: : close ;
        !            67: 
        !            68: \ : probe-pci-host-bridge ( bus-max bus-min mmio-max mmio-base mem-max mem-base io-max io-base my-puid -- )
        !            69: s" /mpic" find-node my-puid pci-irq-init drop
        !            70: 
        !            71: 00fff1f0 18 config-l!
        !            72: 
        !            73: ff F0 f0000000 e8000000 e8000000 c0000000 100000000 f000
        !            74: my-puid probe-pci-host-bridge
        !            75: 
        !            76: \ \ PCIe debug / fixup
        !            77: : find-pcie-cap  ( devfn -- offset | 0 )
        !            78:    >r 34  BEGIN  r@ + config-b@ dup ff <> over and  WHILE
        !            79:        dup r@ + config-b@ 10 =  IF
        !            80:           r> drop EXIT
        !            81:        THEN 1+
        !            82:    REPEAT r> 2drop 0
        !            83: ;
        !            84: 
        !            85:  : (set-ps) ( ps addr -- )
        !            86:    8 + >r 5 lshift r@ config-w@ ff1f and or r> config-w! ;
        !            87:  : set-ps ( ps -- )
        !            88:    log2 7 -
        !            89:    10000 0 DO i 8 lshift dup find-pcie-cap ?dup IF
        !            90:    + 2dup (set-ps) THEN drop LOOP drop ;
        !            91:  
        !            92:  : (set-rr) ( rr addr -- )
        !            93:    8 + >r c lshift r@ config-w@ 8fff and or r> config-w! ;
        !            94:  : set-rr ( rr -- )
        !            95:    log2 7 -
        !            96:    10000 0 DO i 8 lshift dup find-pcie-cap ?dup IF
        !            97:    + 2dup (set-rr) THEN drop LOOP drop ;
        !            98: 
        !            99: 80 set-ps  80 set-rr  
        !           100: 
        !           101: finish-device

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.