[parisc-linux] PDC calls on the C3000
Grant Grundler
grundler@cup.hp.com
Mon, 17 Jan 2000 10:02:59 -0800
Matthew,
The hair on the back of my neck stood up when I read the second part...
Matthew Wilcox wrote:
...
> So the CPU was helpfully sign-extending the address of real_stack
...
> The tophys macro was clearing the `c' to leave us with
...
> which would work if PDC recognised we were being called from narrow mode
> (presumably PDC does on C360 hardware, or we wouldn't've had it working
> on that machine).
I'm thinking the inconsistency is possibly a firmware "bug" where either
the C360 or C3000 isn't behaving "right". Can anyone comment on what
the expected behavior is?
> I changed the tophys macro to:
>
> zdep gr, 31, 30, gr
>
> which takes the rightmost 30 bits from the register, zeroes the whole
> register and then stores them back into it:
> 0xffff'ffff'c0xx'xxxx
> becomes
> 0x0000'0000'00xx'xxxx
> and now PDC is happy, and so am I.
This is where the hair on the back of my neck went up.
The problem is on L-class and N-class machine we have
I/O and memory addresses which are > 4GB. And PDC will really
be confused on those platforms.
I wonder if the right answer is for the ldil instruction to NOT sign extend.
I don't know how to acheive that and I don't see us getting to L-class
without addressing that issue. I'm also hoping fixing this behavior will
make the firmware behavior differences (c360 vs C3000) irrelevant.
thanks,
grant
Grant Grundler
Unix Development Lab
+1.408.447.7253