Author: mcayland Date: Fri Jan 8 13:09:35 2016 New Revision: 1372 URL: http://tracker.coreboot.org/trac/openbios/changeset/1372
Log: pci: switch ob_pci_map_in() to use physical addresses rather than region and size
This matches the parameters for the map-in word as defined in the IEEE-1275 PCI bindings and provides extra information about the address space in use to be used later. Even better this allows us to considerably simplify the Forth.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@ilande.co.uk
Modified: trunk/openbios-devel/drivers/pci.c trunk/openbios-devel/drivers/pci.fs trunk/openbios-devel/drivers/vga.fs
Modified: trunk/openbios-devel/drivers/pci.c ============================================================================== --- trunk/openbios-devel/drivers/pci.c Mon Jan 4 13:03:40 2016 (r1371) +++ trunk/openbios-devel/drivers/pci.c Fri Jan 8 13:09:35 2016 (r1372) @@ -340,7 +340,7 @@ ss, dev, fn, buf); }
-/* ( pci-addr.lo pci-addr.hi size -- virt ) */ +/* ( pci-addr.lo pci-addr.mid pci-addr.hi size -- virt ) */
static void ob_pci_map_in(int *idx) @@ -353,6 +353,7 @@
size = POP(); POP(); + POP(); ba = POP();
phys = pci_bus_addr_to_host_addr(ba);
Modified: trunk/openbios-devel/drivers/pci.fs ============================================================================== --- trunk/openbios-devel/drivers/pci.fs Mon Jan 4 13:03:40 2016 (r1371) +++ trunk/openbios-devel/drivers/pci.fs Fri Jan 8 13:09:35 2016 (r1372) @@ -12,59 +12,19 @@ rot encode-int encode+ ;
-\ Get region offset for BAR reg -: pci-bar-offset@ ( bar-reg -- off.lo off.hi -1 | 0 ) - " reg" active-package get-package-property 0= if - begin - decode-phys \ ( reg prop prop-len phys.lo phys.mid phys.hi ) - ff and 5 pick = if - >r >r 3drop r> r> - -1 exit - else - 2drop - then - \ Drop the size as we don't need it - decode-int drop decode-int drop - dup 0= - until - 3drop - 0 exit - else - 0 - then - ; - -\ Get region size for BAR reg -: pci-bar-size@ ( bar-reg -- size ) - " reg" active-package get-package-property 0= if - begin - decode-phys \ ( reg prop prop-len phys.lo phys.mid phys.hi ) - ff and 5 pick = if - 2drop decode-int drop - decode-int - >r 3drop r> - exit - else - 2drop decode-int drop - decode-int drop - then - dup 0= - until - 3drop - 0 \ default size of 0 if BAR not found - then - ; - -\ Get base address for configured BAR reg -: pci-bar-base@ ( bar-reg -- addr.lo addr.hi -1 | 0 ) +\ Get PCI physical address and size for configured BAR reg +: pci-bar>pci-addr ( bar-reg -- addr.lo addr.mid addr.hi size -1 | 0 ) " assigned-addresses" active-package get-package-property 0= if begin decode-phys \ ( reg prop prop-len phys.lo phys.mid phys.hi ) - ff and 5 pick = if - >r >r 3drop r> r> + dup ff and 6 pick = if + >r >r >r rot drop + decode-int drop decode-int + -rot 2drop + r> swap r> r> rot -1 exit else - 2drop + 3drop then \ Drop the size as we don't need it decode-int drop decode-int drop @@ -77,16 +37,4 @@ then ;
-\ Get PCI bus address and size for configured BAR reg -: pci-bar>pci-region ( bar-reg -- addr.lo addr.hi size ) - dup - >r pci-bar-offset@ if - swap r@ pci-bar-base@ if - swap d+ - then - swap r@ pci-bar-size@ - then - r> drop - ; - [THEN]
Modified: trunk/openbios-devel/drivers/vga.fs ============================================================================== --- trunk/openbios-devel/drivers/vga.fs Mon Jan 4 13:03:40 2016 (r1371) +++ trunk/openbios-devel/drivers/vga.fs Fri Jan 8 13:09:35 2016 (r1372) @@ -109,16 +109,17 @@ \ PCI \
-" pci-bar>pci-region" (find-xt) value pci-bar>pci-region-xt -: pci-bar>pci-region pci-bar>pci-region-xt execute ; +" pci-bar>pci-addr" (find-xt) value pci-bar>pci-addr-xt +: pci-bar>pci-addr pci-bar>pci-addr-xt execute ;
h# 10 constant cfg-bar0 \ Framebuffer BAR -1 value fb-addr
: map-fb ( -- ) - cfg-bar0 pci-bar>pci-region \ ( pci-addr.lo pci-addr.hi size ) - " pci-map-in" $call-parent - to fb-addr + cfg-bar0 pci-bar>pci-addr if \ ( pci-addr.lo pci-addr.mid pci-addr.hi size ) + " pci-map-in" $call-parent + to fb-addr + then ;
\