On Dec 31, 2017, at 8:13 AM, Jd Lyons <lyons_dj@yahoo.com> wrote:



On Dec 31, 2017, at 7:59 AM, Jd Lyons <lyons_dj@yahoo.com> wrote:



On Dec 30, 2017, at 6:04 AM, Segher Boessenkool <segher@kernel.crashing.org> wrote:

On Sat, Dec 30, 2017 at 05:44:10AM -0500, Jd Lyons wrote:
On Dec 30, 2017, at 4:21 AM, Segher Boessenkool <segher@kernel.crashing.org> wrote:
On Fri, Dec 29, 2017 at 08:27:54PM -0500, Tarl Neustaedter wrote:
[re-send, copying the list. For whatever reason, it seems messages
aren't getting the reply-to: header.]

On 2017-Dec-29 03:58 , Jd Lyons wrote:
0 > " /pci/@e" open-dev to my-self  ok
0 > my-self . 5fc5ac34  ok
0 > my-parent . 5fc5abfc  ok
0 > my-space . 0  ok <<---Seems my-space isn't returning a correct value?
0 > 

That's the problem. It appears that simply open-dev and assigning
my-self isn't enough. my-space (and my-address and my-unit) aren't
getting set up, so all config-space accesses are going to do the wrong
thing (they'll go to device 0, which may or may not be the root).

In the Sun/Oracle version, select would properly set things up, it
appears no equivalent is available under openbios.

I think you'll have to further debug this by getting the FCode to be
pulled in at startup in place of the built-in vga fcode, rather than
trying to fiddle things this way.

Or set my-space to return 7000 and keep on fumbling :-)

How would I set my-space to 7000?

Is that specific to pci/@e?

I noticed in SLOF that my-space . returned 1800, however the card was pci/@3.

And that is correct :-)

It is @dev,fn or if fn is 0, it is written as @dev .  In the encoded
representation, it is  800*dev + 100*fn (dev is 5 bits, fn is 3 bits).

In openbios, it looks like my-space gets its data from >dn.probe-addr in
the device node...  And it is set via set-args...  And then I got lost,
not sure how that is supposed to be called.

Looks like we need to change the way openbios handles my-space.

SLOF deals with it in the nodes.fs

: (my-phandle)  ( -- phandle )
   my-self ?dup IF
      ihandle>phandle
   ELSE
      get-node dup 0= ABORT" no active node"
   THEN
;

: my-space ( -- phys.hi )
   (my-phandle) >space
;


I think we also need the >space word, the phandle word, and the ihandle word, I’ll have to track that  down too.

John, do you want to take a crack at fixing the >dn.probe-addr, or replacing it with something that returns a correct my-space .?




Looks lie Openbios already deals with ihandle and phandle, they just are not global words, and they may not need to be for my purpose.

They aren’t global words in SLOF, so as long as the compiler understands them a build time, they should work just fine.


\ Set address and arguments of new device node.
: set-args ( arg-str arg-len unit-str unit-len -- ) 
  ?my-self drop

  depth 1- >r
  " decode-unit" ['] $call-parent catch if
    2drop 2drop
  then

  

  my-self ihandle>phandle >dn.probe-addr \ offset
  begin depth r@ > while
    dup na1+ >r ! r>
  repeat
  r> 2drop

  my-self >in.arguments 2@ free-mem
  strdup my-self >in.arguments 2!
;





Segher