[openfirmware] [commit] r2420 - dev/intel/graphics

repository service svn at openfirmware.info
Sat Aug 6 00:28:48 CEST 2011


Author: wmb
Date: Sat Aug  6 00:28:47 2011
New Revision: 2420
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2420

Log:
Removed carriage returns from line endings in a file.

Modified:
   dev/intel/graphics/pineview.fth

Modified: dev/intel/graphics/pineview.fth
==============================================================================
--- dev/intel/graphics/pineview.fth	Sat Aug  6 00:26:44 2011	(r2419)
+++ dev/intel/graphics/pineview.fth	Sat Aug  6 00:28:47 2011	(r2420)
@@ -1,424 +1,424 @@
-\ See license at end of file
-purpose: Display driver for Intel Pineview using 1280x800 LCD panel on LVDS
-
-\ This is an i915 variant.  The driver hardcodes some assumptions about display
-\ resolution and output device.
-
-\ 0 0  " 2,0"  " /pci" begin-package
-
-" display" device-name
-
-\ Configuration space registers
-my-address my-space              encode-phys
-                             0     encode-int encode+ 0 encode-int encode+
-
-\ MMIO register bank
-0 0        my-space  0200.0010 + encode-phys encode+
-                             0 encode-int encode+  h# 80000 encode-int encode+
-
-\ I/O Space registers
-0 0        my-space  h# 0100.0014 + encode-phys encode+
-                             0 encode-int encode+  8 encode-int encode+
-
-\ Aperture
-0 0        my-space  h# 0200.0018 + encode-phys encode+
-                             0 encode-int encode+  h# 1000.0000 encode-int encode+
-
-\ GATT
-0 0        my-space  h# 0200.001c + encode-phys encode+
-                             0 encode-int encode+  h# 0004.0000 encode-int encode+
-
- " reg" property
-
-: my-l@  ( offset -- l )  my-space + " config-l@" $call-parent  ;
-: my-l!  ( l offset -- )  my-space + " config-l!" $call-parent  ;
-: my-w@  ( offset -- w )  my-space + " config-w@" $call-parent  ;
-: my-w!  ( w offset -- )  my-space + " config-w!" $call-parent  ;
-
-false value scaled?
-
-d# 16 value depth
-
-0 value vdc
-: page-bits  ( n -- n' )  h# fff invert and  ;
-
-: pci-len  ( bar-offset -- len )
-   >r
-   r@ my-l@         ( oldval )
-   -1 r@ my-l!      ( oldval )
-   r@ my-l@         ( oldval writable-bits )
-   swap r> my-l!    ( writable-bits )
-   h# f invert and  ( top-bits )
-   invert 1+        ( len )
-;
-
-0 value gtt
-0 value gatt
-
-0 value gtt-phys
-0 value gatt-phys
-0 value gtt-start
-0 value /gtt
-0 value /gatt
-0 value stolen-base
-0 value scratch-page
-0 value scratch-page-pa
-
-h# 20.0000 value /fb   \ Enough for 1280x800x16bpp
-
-: mmio@  ( offset -- l )  vdc + rl@  ;
-: mmio!  ( l offset -- )  vdc + rl!  ;
-
-: adr>page#  ( adr -- page# )  d# 12 rshift  ;
-: page#>adr  ( page# -- adr )  d# 12 lshift  ;
-h# 1000 constant /page
-
-: map-bar  ( phys.lo len bar# -- vadr )
-   swap >r                       ( phys.lo bar# r: len )
-   my-space + h# 200.0000 +      ( phys.lo phys.hi r: len )
-   0 swap  r>                    ( phys.lo,mid,hi len )
-   " map-in" $call-parent
-;
-
-: /stolen  ( -- n )
-   h# 52 my-w@ 4 >> h# f and  case
-      0 of  0   endof
-      1 of  h# 10.0000  endof
-      3 of  h# 80.0000  endof
-      true abort" Invalid value in Graphics Mode Select field"
-   endcase
-;
-: init-gtt  ( -- )
-   h# 18 my-l@ page-bits to gatt-phys
-   h# 1c my-l@ page-bits to gtt-start
-   h# 1c pci-len to /gtt               \ Can also be determined from config register 52
-   h# 18 pci-len to /gatt
-   h# 5c my-l@   to stolen-base
-
-   h# 0  /gtt  h# 1c map-bar to gtt
-
-   \ Insert the stolen pages into the GTT
-   stolen-base 1 +                         ( pte-template )
-   /stolen  0  do                          ( pte-template )
-      dup i +   gtt i adr>page# la+  rl!   ( pte-template )
-   /page +loop                             ( pte-template )
-   drop
-
-   \ Fill the rest of the GTT with PTEs for a scratch page
-   /page " dma-alloc" $call-parent to scratch-page
-   scratch-page h# 1000 false " dma-map-in" $call-parent to scratch-page-pa
-
-   /gatt /stolen  ?do
-      scratch-page-pa 1+  gtt i adr>page# la+  rl!
-   /page +loop
-
-   gtt /gtt + /page - rl@ drop  \ Sync
-;
-: memory-setup  ( -- )
-   h# 0     h# 80000 h# 10 map-bar  to vdc   \ &
-   4 my-w@ 7 or 4 my-w!            \ Enable bus mastering, memory and I/O access
-   
-   init-gtt
-
-   " address" get-my-property  if
-      gatt-phys  encode-int " address" property
-      h# 0 /fb  h# 18 map-bar  to frame-buffer-adr
-   else
-      decode-int to frame-buffer-adr
-      2drop
-   then
-;
-
-\ Geometry for 1280x800 LCD
-
-d# 1280 constant hdisplay
-d# 1296 constant hsstart
-d# 1344 constant hsend
-d# 1440 constant htotal
-
-d#  800 constant vdisplay
-d#  801 constant vsstart
-d#  804 constant vsend
-d#  818 constant vtotal
-
-d# 1024 value width  \ If scaled is false, will be replaced with hdisplay
-d#  768 value height \ If scaled is false, will be replaced with vdisplay
-
-\ h# d804.0000 constant dpll-val    \ VCO, high speed, VGA disable, LVDS, clock div 10, post div 4
-h# 8480.0000 constant dpll-val-a  \ Pipe A &
-h# 9802.0000 constant dpll-val-b  \ Pipe B &
-dpll-val-b constant dpll-val
-
-h# 0020.0074 constant fp-val      \ N, M1, M2 divisors &
-h# 9500.0000 constant dspcntr-val \ Enable, NoGamma, 16bpp ? no alpha, pipe b &
-
-\ Empirically this has no effect.  It is probably for CRT output
-\ : dac-on  ( -- )
-\    h# c000.0018 h# 61100 mmio!  \ 80000000-DAC_ON 40000000-PIPEB 10-PVSYNC 8-PHSYNC
-\ ;
-
-: bytes/line  ( -- n )  width  depth 8 /  *  ;
-
-h# 0000 constant pipe-a
-h# 1000 constant pipe-b
-pipe-b value pipe
-
-: mmio!!  ( value offset -- )  tuck mmio!  mmio@ drop  ;
-
-: pipe@  ( offset -- n )  pipe + mmio@  ;
-: pipe!  ( n offset -- )  pipe + mmio!  ;
-: pipe!! ( n offset -- )  pipe + mmio!! ;
-
-h# 70180 constant dspcntr-reg
-h# 70184 constant dspbase-reg
-h# 70008 constant pipeconf-reg
-h# 61230 constant pfit-reg
-h# 61180 constant lvds-reg
-
-\ Packs two 16-bit values into a 32-bit register, offsetting
-\ each value by -1
-: crtconf!  ( low high reg -- )
-   >r  swap 1-  swap 1-  wljoin  r>   pipe!
-;
-
-\ A few of the pipe-dependent registers are at offsets of 4
-\ instead of h# 1000.
-
-: +pipe  ( offset -- offset' )  pipe  if  4 +  then  ;
-
-: fpreg!  ( value -- )  h# 6040  +pipe  mmio!  ;
-
-: dpll!  ( value -- )
-   h# 6014 +pipe  mmio!!
-   d# 150 " us" evaluate
-;
-: dpll@  ( -- value )  h# 6014 +pipe  mmio@  ;
-: wait-vblank  ( -- )  d# 30 ms  ;
-
-h# 8000.0000 constant enable-bit
-
-: load-lut  ( -- )
-   100 0  do
-      i i i 0 bljoin  h# a000 pipe 2/ + i la+ l!
-   loop
-;
-
-: crtc-dpms-off  ( -- )  \ CRTC prepare method
-   \ Disable display plane
-   dspcntr-reg pipe@          ( val )
-   dup enable-bit and  if   ( val )
-      enable-bit invert and  dspcntr-reg pipe!
-      dspbase-reg pipe@  dspbase-reg pipe!!
-   else
-      drop
-   then
-   wait-vblank
-
-   \ Disable display pipes
-   pipeconf-reg pipe@         ( val )
-   dup enable-bit and  if   ( val )
-      enable-bit invert and  pipeconf-reg pipe!!
-   else
-      drop
-   then
-   wait-vblank
-		
-   dpll@ dup enable-bit and   if
-      enable-bit invert and dpll!
-   else
-      drop
-   then
-;
-
-: crtc-dpms-on  ( -- )   \ CRTC commit method
-   dpll@ dup enable-bit and  0=  if      ( value )
-      dup dpll!                          ( value )
-      enable-bit or  dup dpll!  dpll!    ( )
-   else                                  ( value )
-      drop                               ( )
-   then
-
-   pipeconf-reg pipe@  dup enable-bit  and  0=  if
-      enable-bit or  pipeconf-reg pipe!
-   else
-      drop
-   then
-
-   dspcntr-reg pipe@  dup enable-bit and  if
-      enable-bit or  dspcntr-reg pipe!
-      dspbase-reg pipe@  dspbase-reg pipe!
-   else
-      drop
-   then
-
-   load-lut
-;
-
-: lvds-set-mode  ( -- )
-   \ When using LVDS, you have to do this little dance to turn on the PLL
-
-   fp-val fpreg!
-   dpll-val enable-bit invert and  dpll!  \ VCO_ENABLE off for now
-
-   lvds-reg mmio@      \ LVDS configuration
-      h# c030.0300 or  \  LVDS_PORT_EN , LVDS_PIPEB_SELECT , LVDS_A0A2_CLKA_POWER_UP  ?? what is 30.0000 bit
-      h# 0000.003c invert and  \ ! LVDS_CLKB_POWER_UP , ! LVDS_B0B3_POWER_UP
-   lvds-reg mmio!!
-
-   fp-val fpreg!
-   dpll-val dpll!  \ VCO_ENABLE on
-
-   \ Double write because Linux driver does it because BIOS does it
-   dpll-val dpll!  \ VCO_ENABLE on
-
-   \ Now that the dance is over we can configure the geometry
-
-   hdisplay   htotal  h# 60000  crtconf!  \ H Display
-   hdisplay   htotal  h# 60004  crtconf!  \ H Blanking
-   hsstart    hsend   h# 60008  crtconf!  \ H Sync
-   vdisplay   vtotal  h# 6000c  crtconf!  \ V Display
-   vdisplay   vtotal  h# 60010  crtconf!  \ V Blanking
-   vsstart    vsend   h# 60014  crtconf!  \ V Sync
-
-   bytes/line      h# 70188  pipe!        \ Pitch (stride)
-   width   height  h# 70190  crtconf!     \ Size
-   0               h# 7018c  pipe!        \ Position
-   height   width  h# 6001c  crtconf!     \ Pipe source
-   enable-bit pipeconf-reg pipe!!         \ Pipe config
-
-   wait-vblank
-
-   dspcntr-val dspcntr-reg pipe!   \ Display control
-
-   0 dspbase-reg pipe!             \ PIPExBASE
-
-   enable-bit h# 71400 mmio!  \ Disable VGA plane
-
-   wait-vblank  
-;
-
-d# 100 constant backlight-min-period
-false value backlight-inverse?
-: set-backlight  ( percentage -- )
-   h# 61254 mmio@ lwsplit nip   ( percent max )
-   backlight-min-period max     ( percent max' )
-   1 invert and  >r             ( percent r: max' )
-
-   d# 20 max                    ( percentage' r: max )
-   r@ * d# 100 /                ( duty-cycle  r: max )
-
-   backlight-inverse?  if       ( duty-cycle  r: max )
-      r@ swap -                 ( duty-cycle' )
-   then                         ( duty-cycle  r: max )
-
-   1 invert and                 ( duty-cycle  r: max ) \ Low bit must be 0
-   r> wljoin h# 61254 mmio!     ( )  \ BLC_PWM_CTL
-;
-
-d# 100 value backlight-val
-
-h# 61200 constant pp-status
-h# 61204 constant pp-control
-: lvds-on  ( -- )
-   pp-control mmio@ 1 or  pp-control mmio!  \ POWER_TARGET_ON
-   begin  pp-status mmio@  enable-bit and  until
-   backlight-val set-backlight
-;
-: lvds-off  ( -- )
-   0 set-backlight
-   pp-control mmio@ 1 invert and  pp-control mmio!
-   begin  pp-status mmio@  enable-bit and  0=  until
-;
-
-: .ps  pp-status mmio@ .  ;
-: pctl  pp-control mmio! ;
-
-: lvds-scaling  ( -- )
-   scaled?  if  h# 8000.2668  else  0  then
-   pfit-reg mmio!
-\   pipe h# 1000 /  d# 29 lshift  pfit-reg mmio!
-;
-: setmode  ( -- )
-   scaled?  if  d# 1024 d# 768  else  hdisplay vdisplay  then
-   to height  to width
-   memory-setup
-   lvds-off               \ Output prepare method
-   crtc-dpms-off          \ CRTC prepare method
-   lvds-set-mode          \ CRTC mode_set method
-   lvds-scaling           \ Output mode_set method
-   crtc-dpms-on           \ CRTC commit method
-   lvds-on                \ Output commit method
-;
-
-: erase-frame-buffer  ( -- )
-   frame-buffer-adr /fb    ( adr len )
-   depth case
-      8      of  h# 0f           fill  endof
-      d# 16  of  h# ffff         " wfill" evaluate  endof
-      d# 32  of  h# ffff.ffff    " lfill" evaluate  endof
-      ( default )  nip nip
-   endcase
-   h# f to background-color
-;
-: map-frame-buffer  ( -- )
-   0 /fb h# 18 map-bar to frame-buffer-adr
-;
-: dump-regs  ( -- )
-   h# 80000 0  do
-      i mmio@  dup 0<>  swap h# ffffffff <>  and  if
-	 i 5 u.r  i mmio@ 9 u.r cr
-      then
-   4 +loop
-;
-
-: declare-props  ( -- )		\ Instantiate screen properties
-   " width" get-my-property  if  
-      width   encode-int " width"     property
-      height  encode-int " height"    property
-      depth   encode-int " depth"     property
-      bytes/line  encode-int " linebytes" property
-   else
-      2drop
-   then
-;
-
-defer gp-install  ' noop to gp-install
-
-: set-terminal  ( -- )
-   width  height                              ( width height )
-   over char-width / over char-height /       ( width height rows cols )
-   bytes/line depth " fb-install" evaluate gp-install     ( )
-;
-
-
-0 value open-count
-
-: display-remove  ( -- )
-   open-count 1 =  if
-   then
-   open-count 1- 0 max to open-count
-;
-
-: display-install  ( -- )
-   open-count 0=  if
-      setmode
-      declare-props		\ Setup properites
-      map-frame-buffer
-      erase-frame-buffer
-   else
-      map-frame-buffer
-   then
-   default-font set-font
-   set-terminal
-   open-count 1+ to open-count
-;
-
-: display-selftest  ( -- failed? )  false  ;
-
-' display-install  is-install
-' display-remove   is-remove
-' display-selftest is-selftest
-
-" display"                      device-type
-" ISO8859-1" encode-string    " character-set" property
-0 0  encode-bytes  " iso6429-1983-colors"  property
+\ See license at end of file
+purpose: Display driver for Intel Pineview using 1280x800 LCD panel on LVDS
+
+\ This is an i915 variant.  The driver hardcodes some assumptions about display
+\ resolution and output device.
+
+\ 0 0  " 2,0"  " /pci" begin-package
+
+" display" device-name
+
+\ Configuration space registers
+my-address my-space              encode-phys
+                             0     encode-int encode+ 0 encode-int encode+
+
+\ MMIO register bank
+0 0        my-space  0200.0010 + encode-phys encode+
+                             0 encode-int encode+  h# 80000 encode-int encode+
+
+\ I/O Space registers
+0 0        my-space  h# 0100.0014 + encode-phys encode+
+                             0 encode-int encode+  8 encode-int encode+
+
+\ Aperture
+0 0        my-space  h# 0200.0018 + encode-phys encode+
+                             0 encode-int encode+  h# 1000.0000 encode-int encode+
+
+\ GATT
+0 0        my-space  h# 0200.001c + encode-phys encode+
+                             0 encode-int encode+  h# 0004.0000 encode-int encode+
+
+ " reg" property
+
+: my-l@  ( offset -- l )  my-space + " config-l@" $call-parent  ;
+: my-l!  ( l offset -- )  my-space + " config-l!" $call-parent  ;
+: my-w@  ( offset -- w )  my-space + " config-w@" $call-parent  ;
+: my-w!  ( w offset -- )  my-space + " config-w!" $call-parent  ;
+
+false value scaled?
+
+d# 16 value depth
+
+0 value vdc
+: page-bits  ( n -- n' )  h# fff invert and  ;
+
+: pci-len  ( bar-offset -- len )
+   >r
+   r@ my-l@         ( oldval )
+   -1 r@ my-l!      ( oldval )
+   r@ my-l@         ( oldval writable-bits )
+   swap r> my-l!    ( writable-bits )
+   h# f invert and  ( top-bits )
+   invert 1+        ( len )
+;
+
+0 value gtt
+0 value gatt
+
+0 value gtt-phys
+0 value gatt-phys
+0 value gtt-start
+0 value /gtt
+0 value /gatt
+0 value stolen-base
+0 value scratch-page
+0 value scratch-page-pa
+
+h# 20.0000 value /fb   \ Enough for 1280x800x16bpp
+
+: mmio@  ( offset -- l )  vdc + rl@  ;
+: mmio!  ( l offset -- )  vdc + rl!  ;
+
+: adr>page#  ( adr -- page# )  d# 12 rshift  ;
+: page#>adr  ( page# -- adr )  d# 12 lshift  ;
+h# 1000 constant /page
+
+: map-bar  ( phys.lo len bar# -- vadr )
+   swap >r                       ( phys.lo bar# r: len )
+   my-space + h# 200.0000 +      ( phys.lo phys.hi r: len )
+   0 swap  r>                    ( phys.lo,mid,hi len )
+   " map-in" $call-parent
+;
+
+: /stolen  ( -- n )
+   h# 52 my-w@ 4 >> h# f and  case
+      0 of  0   endof
+      1 of  h# 10.0000  endof
+      3 of  h# 80.0000  endof
+      true abort" Invalid value in Graphics Mode Select field"
+   endcase
+;
+: init-gtt  ( -- )
+   h# 18 my-l@ page-bits to gatt-phys
+   h# 1c my-l@ page-bits to gtt-start
+   h# 1c pci-len to /gtt               \ Can also be determined from config register 52
+   h# 18 pci-len to /gatt
+   h# 5c my-l@   to stolen-base
+
+   h# 0  /gtt  h# 1c map-bar to gtt
+
+   \ Insert the stolen pages into the GTT
+   stolen-base 1 +                         ( pte-template )
+   /stolen  0  do                          ( pte-template )
+      dup i +   gtt i adr>page# la+  rl!   ( pte-template )
+   /page +loop                             ( pte-template )
+   drop
+
+   \ Fill the rest of the GTT with PTEs for a scratch page
+   /page " dma-alloc" $call-parent to scratch-page
+   scratch-page h# 1000 false " dma-map-in" $call-parent to scratch-page-pa
+
+   /gatt /stolen  ?do
+      scratch-page-pa 1+  gtt i adr>page# la+  rl!
+   /page +loop
+
+   gtt /gtt + /page - rl@ drop  \ Sync
+;
+: memory-setup  ( -- )
+   h# 0     h# 80000 h# 10 map-bar  to vdc   \ &
+   4 my-w@ 7 or 4 my-w!            \ Enable bus mastering, memory and I/O access
+   
+   init-gtt
+
+   " address" get-my-property  if
+      gatt-phys  encode-int " address" property
+      h# 0 /fb  h# 18 map-bar  to frame-buffer-adr
+   else
+      decode-int to frame-buffer-adr
+      2drop
+   then
+;
+
+\ Geometry for 1280x800 LCD
+
+d# 1280 constant hdisplay
+d# 1296 constant hsstart
+d# 1344 constant hsend
+d# 1440 constant htotal
+
+d#  800 constant vdisplay
+d#  801 constant vsstart
+d#  804 constant vsend
+d#  818 constant vtotal
+
+d# 1024 value width  \ If scaled is false, will be replaced with hdisplay
+d#  768 value height \ If scaled is false, will be replaced with vdisplay
+
+\ h# d804.0000 constant dpll-val    \ VCO, high speed, VGA disable, LVDS, clock div 10, post div 4
+h# 8480.0000 constant dpll-val-a  \ Pipe A &
+h# 9802.0000 constant dpll-val-b  \ Pipe B &
+dpll-val-b constant dpll-val
+
+h# 0020.0074 constant fp-val      \ N, M1, M2 divisors &
+h# 9500.0000 constant dspcntr-val \ Enable, NoGamma, 16bpp ? no alpha, pipe b &
+
+\ Empirically this has no effect.  It is probably for CRT output
+\ : dac-on  ( -- )
+\    h# c000.0018 h# 61100 mmio!  \ 80000000-DAC_ON 40000000-PIPEB 10-PVSYNC 8-PHSYNC
+\ ;
+
+: bytes/line  ( -- n )  width  depth 8 /  *  ;
+
+h# 0000 constant pipe-a
+h# 1000 constant pipe-b
+pipe-b value pipe
+
+: mmio!!  ( value offset -- )  tuck mmio!  mmio@ drop  ;
+
+: pipe@  ( offset -- n )  pipe + mmio@  ;
+: pipe!  ( n offset -- )  pipe + mmio!  ;
+: pipe!! ( n offset -- )  pipe + mmio!! ;
+
+h# 70180 constant dspcntr-reg
+h# 70184 constant dspbase-reg
+h# 70008 constant pipeconf-reg
+h# 61230 constant pfit-reg
+h# 61180 constant lvds-reg
+
+\ Packs two 16-bit values into a 32-bit register, offsetting
+\ each value by -1
+: crtconf!  ( low high reg -- )
+   >r  swap 1-  swap 1-  wljoin  r>   pipe!
+;
+
+\ A few of the pipe-dependent registers are at offsets of 4
+\ instead of h# 1000.
+
+: +pipe  ( offset -- offset' )  pipe  if  4 +  then  ;
+
+: fpreg!  ( value -- )  h# 6040  +pipe  mmio!  ;
+
+: dpll!  ( value -- )
+   h# 6014 +pipe  mmio!!
+   d# 150 " us" evaluate
+;
+: dpll@  ( -- value )  h# 6014 +pipe  mmio@  ;
+: wait-vblank  ( -- )  d# 30 ms  ;
+
+h# 8000.0000 constant enable-bit
+
+: load-lut  ( -- )
+   100 0  do
+      i i i 0 bljoin  h# a000 pipe 2/ + i la+ l!
+   loop
+;
+
+: crtc-dpms-off  ( -- )  \ CRTC prepare method
+   \ Disable display plane
+   dspcntr-reg pipe@          ( val )
+   dup enable-bit and  if   ( val )
+      enable-bit invert and  dspcntr-reg pipe!
+      dspbase-reg pipe@  dspbase-reg pipe!!
+   else
+      drop
+   then
+   wait-vblank
+
+   \ Disable display pipes
+   pipeconf-reg pipe@         ( val )
+   dup enable-bit and  if   ( val )
+      enable-bit invert and  pipeconf-reg pipe!!
+   else
+      drop
+   then
+   wait-vblank
+		
+   dpll@ dup enable-bit and   if
+      enable-bit invert and dpll!
+   else
+      drop
+   then
+;
+
+: crtc-dpms-on  ( -- )   \ CRTC commit method
+   dpll@ dup enable-bit and  0=  if      ( value )
+      dup dpll!                          ( value )
+      enable-bit or  dup dpll!  dpll!    ( )
+   else                                  ( value )
+      drop                               ( )
+   then
+
+   pipeconf-reg pipe@  dup enable-bit  and  0=  if
+      enable-bit or  pipeconf-reg pipe!
+   else
+      drop
+   then
+
+   dspcntr-reg pipe@  dup enable-bit and  if
+      enable-bit or  dspcntr-reg pipe!
+      dspbase-reg pipe@  dspbase-reg pipe!
+   else
+      drop
+   then
+
+   load-lut
+;
+
+: lvds-set-mode  ( -- )
+   \ When using LVDS, you have to do this little dance to turn on the PLL
+
+   fp-val fpreg!
+   dpll-val enable-bit invert and  dpll!  \ VCO_ENABLE off for now
+
+   lvds-reg mmio@      \ LVDS configuration
+      h# c030.0300 or  \  LVDS_PORT_EN , LVDS_PIPEB_SELECT , LVDS_A0A2_CLKA_POWER_UP  ?? what is 30.0000 bit
+      h# 0000.003c invert and  \ ! LVDS_CLKB_POWER_UP , ! LVDS_B0B3_POWER_UP
+   lvds-reg mmio!!
+
+   fp-val fpreg!
+   dpll-val dpll!  \ VCO_ENABLE on
+
+   \ Double write because Linux driver does it because BIOS does it
+   dpll-val dpll!  \ VCO_ENABLE on
+
+   \ Now that the dance is over we can configure the geometry
+
+   hdisplay   htotal  h# 60000  crtconf!  \ H Display
+   hdisplay   htotal  h# 60004  crtconf!  \ H Blanking
+   hsstart    hsend   h# 60008  crtconf!  \ H Sync
+   vdisplay   vtotal  h# 6000c  crtconf!  \ V Display
+   vdisplay   vtotal  h# 60010  crtconf!  \ V Blanking
+   vsstart    vsend   h# 60014  crtconf!  \ V Sync
+
+   bytes/line      h# 70188  pipe!        \ Pitch (stride)
+   width   height  h# 70190  crtconf!     \ Size
+   0               h# 7018c  pipe!        \ Position
+   height   width  h# 6001c  crtconf!     \ Pipe source
+   enable-bit pipeconf-reg pipe!!         \ Pipe config
+
+   wait-vblank
+
+   dspcntr-val dspcntr-reg pipe!   \ Display control
+
+   0 dspbase-reg pipe!             \ PIPExBASE
+
+   enable-bit h# 71400 mmio!  \ Disable VGA plane
+
+   wait-vblank  
+;
+
+d# 100 constant backlight-min-period
+false value backlight-inverse?
+: set-backlight  ( percentage -- )
+   h# 61254 mmio@ lwsplit nip   ( percent max )
+   backlight-min-period max     ( percent max' )
+   1 invert and  >r             ( percent r: max' )
+
+   d# 20 max                    ( percentage' r: max )
+   r@ * d# 100 /                ( duty-cycle  r: max )
+
+   backlight-inverse?  if       ( duty-cycle  r: max )
+      r@ swap -                 ( duty-cycle' )
+   then                         ( duty-cycle  r: max )
+
+   1 invert and                 ( duty-cycle  r: max ) \ Low bit must be 0
+   r> wljoin h# 61254 mmio!     ( )  \ BLC_PWM_CTL
+;
+
+d# 100 value backlight-val
+
+h# 61200 constant pp-status
+h# 61204 constant pp-control
+: lvds-on  ( -- )
+   pp-control mmio@ 1 or  pp-control mmio!  \ POWER_TARGET_ON
+   begin  pp-status mmio@  enable-bit and  until
+   backlight-val set-backlight
+;
+: lvds-off  ( -- )
+   0 set-backlight
+   pp-control mmio@ 1 invert and  pp-control mmio!
+   begin  pp-status mmio@  enable-bit and  0=  until
+;
+
+: .ps  pp-status mmio@ .  ;
+: pctl  pp-control mmio! ;
+
+: lvds-scaling  ( -- )
+   scaled?  if  h# 8000.2668  else  0  then
+   pfit-reg mmio!
+\   pipe h# 1000 /  d# 29 lshift  pfit-reg mmio!
+;
+: setmode  ( -- )
+   scaled?  if  d# 1024 d# 768  else  hdisplay vdisplay  then
+   to height  to width
+   memory-setup
+   lvds-off               \ Output prepare method
+   crtc-dpms-off          \ CRTC prepare method
+   lvds-set-mode          \ CRTC mode_set method
+   lvds-scaling           \ Output mode_set method
+   crtc-dpms-on           \ CRTC commit method
+   lvds-on                \ Output commit method
+;
+
+: erase-frame-buffer  ( -- )
+   frame-buffer-adr /fb    ( adr len )
+   depth case
+      8      of  h# 0f           fill  endof
+      d# 16  of  h# ffff         " wfill" evaluate  endof
+      d# 32  of  h# ffff.ffff    " lfill" evaluate  endof
+      ( default )  nip nip
+   endcase
+   h# f to background-color
+;
+: map-frame-buffer  ( -- )
+   0 /fb h# 18 map-bar to frame-buffer-adr
+;
+: dump-regs  ( -- )
+   h# 80000 0  do
+      i mmio@  dup 0<>  swap h# ffffffff <>  and  if
+	 i 5 u.r  i mmio@ 9 u.r cr
+      then
+   4 +loop
+;
+
+: declare-props  ( -- )		\ Instantiate screen properties
+   " width" get-my-property  if  
+      width   encode-int " width"     property
+      height  encode-int " height"    property
+      depth   encode-int " depth"     property
+      bytes/line  encode-int " linebytes" property
+   else
+      2drop
+   then
+;
+
+defer gp-install  ' noop to gp-install
+
+: set-terminal  ( -- )
+   width  height                              ( width height )
+   over char-width / over char-height /       ( width height rows cols )
+   bytes/line depth " fb-install" evaluate gp-install     ( )
+;
+
+
+0 value open-count
+
+: display-remove  ( -- )
+   open-count 1 =  if
+   then
+   open-count 1- 0 max to open-count
+;
+
+: display-install  ( -- )
+   open-count 0=  if
+      setmode
+      declare-props		\ Setup properites
+      map-frame-buffer
+      erase-frame-buffer
+   else
+      map-frame-buffer
+   then
+   default-font set-font
+   set-terminal
+   open-count 1+ to open-count
+;
+
+: display-selftest  ( -- failed? )  false  ;
+
+' display-install  is-install
+' display-remove   is-remove
+' display-selftest is-selftest
+
+" display"                      device-type
+" ISO8859-1" encode-string    " character-set" property
+0 0  encode-bytes  " iso6429-1983-colors"  property



More information about the openfirmware mailing list