[OpenBIOS] [PATCHv2 2/6] ppc: fix ESCC reg properties
Programmingkid
programmingkidx at gmail.com
Tue Feb 23 21:15:46 CET 2016
On Feb 23, 2016, at 2:38 PM, Howard Spoelstra wrote:
>
>> On 23 Feb 2016, at 20:33, Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk> wrote:
>>
>> On 23/02/16 03:58, Programmingkid wrote:
>>
>>> On Feb 20, 2016, at 12:18 PM, Mark Cave-Ayland wrote:
>>>
>>>> I/O offsets were wrong in legacy mode and some were missing in non-legacy mode.
>>>> This fixes serial port detection in NetBSD, which was ignoring it.
>>>> This also partly fixes MacOS 9.2, which relies on them to initialize OpenTransport.
>>>>
>>>> Based upon an original patch from Hervé Poussineau <hpoussin at reactos.org>.
>>>>
>>>> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
>>>> ---
>>>> openbios-devel/drivers/escc.c | 43 ++++++++++++++++++++++++++++-------------
>>>> 1 file changed, 30 insertions(+), 13 deletions(-)
>>>>
>>>> diff --git a/openbios-devel/drivers/escc.c b/openbios-devel/drivers/escc.c
>>>> index 9b87083..44b73f0 100644
>>>> --- a/openbios-devel/drivers/escc.c
>>>> +++ b/openbios-devel/drivers/escc.c
>>>> @@ -388,7 +388,20 @@ escc_add_channel(const char *path, const char *node, phys_addr_t addr,
>>>> cell props[10];
>>>> int index;
>>>> int legacy;
>>>> -
>>>> + int reg_offsets[2][2][3] = {
>>>> + {
>>>> + /* ch-b */
>>>> + { 0x00, 0x10, 0x40 },
>>>> + /* ch-a */
>>>> + { 0x20, 0x30, 0x50 }
>>>> + },{
>>>> + /* legacy ch-b */
>>>> + { 0x0, 0x2, 0x8 },
>>>> + /* legacy ch-a */
>>>> + { 0x4, 0x6, 0xa }
>>>> + }
>>>> + };
>>>> +
>>>> switch (esnum) {
>>>> case 2: index = 1; legacy = 0; break;
>>>> case 3: index = 0; legacy = 0; break;
>>>> @@ -425,17 +438,21 @@ escc_add_channel(const char *path, const char *node, phys_addr_t addr,
>>>> set_property(dnode, "compatible", buf, 9);
>>>>
>>>> if (legacy) {
>>>> - props[0] = IO_ESCC_LEGACY_OFFSET + index * 0x4;
>>>> - props[1] = 0x00000001;
>>>> - props[2] = IO_ESCC_LEGACY_OFFSET + index * 0x4 + 2;
>>>> - props[3] = 0x00000001;
>>>> - props[4] = IO_ESCC_LEGACY_OFFSET + index * 0x4 + 6;
>>>> - props[5] = 0x00000001;
>>>> + props[0] = IO_ESCC_LEGACY_OFFSET + reg_offsets[legacy][index][0];
>>>> + props[1] = 0x1;
>>>> + props[2] = IO_ESCC_LEGACY_OFFSET + reg_offsets[legacy][index][1];
>>>> + props[3] = 0x1;
>>>> + props[4] = IO_ESCC_LEGACY_OFFSET + reg_offsets[legacy][index][2];
>>>> + props[5] = 0x1;
>>>> set_property(dnode, "reg", (char *)&props, 6 * sizeof(cell));
>>>> } else {
>>>> - props[0] = IO_ESCC_OFFSET + index * 0x20;
>>>> - props[1] = 0x00000020;
>>>> - set_property(dnode, "reg", (char *)&props, 2 * sizeof(cell));
>>>> + props[0] = IO_ESCC_OFFSET + reg_offsets[legacy][index][0];
>>>> + props[1] = 0x1;
>>>> + props[2] = IO_ESCC_OFFSET + reg_offsets[legacy][index][1];
>>>> + props[3] = 0x1;
>>>> + props[4] = IO_ESCC_OFFSET + reg_offsets[legacy][index][2];
>>>> + props[5] = 0x1;
>>>> + set_property(dnode, "reg", (char *)&props, 6 * sizeof(cell));
>>>> }
>>>>
>>>> if (legacy) {
>>>> @@ -446,13 +463,13 @@ escc_add_channel(const char *path, const char *node, phys_addr_t addr,
>>>> OLDWORLD(set_property(dnode, "AAPL,address",
>>>> (char *)&props, 1 * sizeof(cell)));
>>>>
>>>> - props[0] = 0x00000010 - index;
>>>> + props[0] = 0x10 - index;
>>>> OLDWORLD(set_property(dnode, "AAPL,interrupts",
>>>> (char *)&props, 1 * sizeof(cell)));
>>>>
>>>> props[0] = (0x24) + index;
>>>> - props[1] = 0;
>>>> - props[2] = 0;
>>>> + props[1] = 0x0;
>>>> + props[2] = 0x0;
>>>> NEWWORLD(set_property(dnode, "interrupts",
>>>> (char *)&props, 3 * sizeof(cell)));
>>>>
>>>> --
>>>> 1.7.10.4
>>>
>>>
>>> I had a lot of problems applying this patch. Eventually I just applied it by hand. Testing your v2 patch set with Mac OS 9.2 ends with an Illegal Instruction error for me. When I tested Mac OS 9.0, the OS just stops booting and does nothing. It doesn't crash. I just sits there doing nothing. The mouse cursor still can move. I tried this OS again and it crashed on the second time. The third time it just sat there doing nothing like the first time.
>>
>> Just this one patch, or the entire patchset? Pretty much everything just
>> works with "git am" these days?
>>
>> I think there are two issues here: firstly something does cause memory
>> corruption which can cause random crashes under OS 9, and secondly the
>> changes to the serial ports. We know that OT probe causes OS 9 to
>> crash/hang when booting from a vanilla image, but the probe doesn't take
>> place on pre-installed images. In these cases the hang is almost better
>> than the crash in that at least the OS gets to the point where it can
>> probe the serial ports, it is just that the QEMU emulation is lacking.
>>
>> If the change in behaviour occurs when booting from a fresh ISO then I'm
>> not too worried because everyone testing at the moment will have removed
>> these extensions from their images. However if existing installed images
>> start to fail then perhaps the patch needs more work.
>>
>> Howard, is this something that you can test? I believe this is a good
>> candidate to be applied to trunk this week in time for QEMU freeze since
>> it definitely fixes the properties in terms of the reference device tree
>> and indeed it works to the point where NetBSD/Linux can now see the
>> serial ports and use them.
>>
>>
>> ATB,
>>
>> Mark.
>>
>
> Hi, yes, I can test. Can you provide a build? I tried building, but the resulting binary doesn’t boot my OS 9 images, only the OSX images ;-)
I know what is wrong. There is a patch needed that filters out linefeed and carriage return characters that needs to be applied. Here is the patch.
---
openbios-devel/forth/bootstrap/interpreter.fs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openbios-devel/forth/bootstrap/interpreter.fs b/openbios-devel/forth/bootstrap/interpreter.fs
index 5187058..74a109f 100644
--- a/openbios-devel/forth/bootstrap/interpreter.fs
+++ b/openbios-devel/forth/bootstrap/interpreter.fs
@@ -163,7 +163,7 @@ defer outer-interpreter
: evaluate ( str len -- ?? )
2dup + -rot
over + over do
- i c@ 0a = if
+ i c@ dup 0a = swap 0d = or if
i over -
(evaluate)
i 1+
--
1.7.10.4
Mark hasn't applied this patch because it causes problems with Linux.
More information about the OpenBIOS
mailing list