Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 Nov 2016 10:47:13 -0600
From:      Justin Hibbits <chmeeedalf@gmail.com>
To:        Jukka Ukkonen <jau789@gmail.com>
Cc:        Mark Millard <markmi@dsl-only.net>, Nathan Whitehorn <nwhitehorn@freebsd.org>,  FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, Peter Grehan <grehan@freebsd.org>
Subject:   Re: svn commit: r306065 - in head/sys vs. PowerMacs: Nathan's trail patch included but inappropriate? [My hack vs. Apple G4's.]
Message-ID:  <CAHSQbTCijFV87PpRxOpZuLvvrGcwjzK4HspMaERV7Eyxkrf05w@mail.gmail.com>
In-Reply-To: <5C253E59-265B-4F5F-A4C5-E4FB7EEBF084@gmail.com>
References:  <C48933C3-DB22-4D94-B22D-B51822197E4E@dsl-only.net> <917EFF5A-D054-4424-9D7D-4E4BEF6072EF@gmail.com> <4bb1046a-225d-66b2-7b00-067f0d6f6c60@gmail.com> <465041D5-C1A2-48F4-9CA7-DD03B094FAE4@dsl-only.net> <01cfa4e9-954f-3e86-c8d7-36ec8523dde0@freebsd.org> <B28E3336-2F85-4395-8DDF-CF09CA9D41E1@dsl-only.net> <5C253E59-265B-4F5F-A4C5-E4FB7EEBF084@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Can you point me to documentation that states sprg0 must point to
separate buffer areas?  IIRC, when we make OF calls, at least on Apple
hardware, we suspend all other CPUs, so they shouldn't be doing
anything in OF.

- Justin

On Tue, Nov 15, 2016 at 6:04 AM, Jukka Ukkonen <jau789@gmail.com> wrote:
>
> The bad news is that with this modification my G5 is
> still prone to panic during the very early phases of booting
> depending on which kernel modules are preloaded by
> loader. Some preloaded modules do not cause a panic,
> but they do not work either until they are unloaded and
> the loaded again when the kernel is already in control
> of everything. Preloaded modules end up in relatively
> low addresses. The modules loaded under the control of
> the kernel itself end up in very high addresses.
> I assume there is some sort of memory corruption which
> tends to make a mess in the lower addresses and some
> modules are very sensitive to such corruption causing
> panics while others are less sensitive and simply refuse
> to operate normally.
> I guess this might be related to the initialization of sprg0.
> IBM's documentation says sprg0 must point to a separate
> buffer area for each CPU, but I have failed to convince
> myself that sprg0 actually refers a separate CPU specific
> buffer space for each CPU at all times when ofw is called.
> The old values of the sprg# registers and something else
> get apparently stored in the buffer pointed by sprg0.
>
> --jau
>
>
>> On 15 Nov 2016, at 7.53, Mark Millard <markmi@dsl-only.net> wrote:
>>
>> On 2016-Sep-21, at 3:01 PM, Peter Grehan <grehan at freebsd.org> wrote:
>>
>>>> I've never had my hands on an eMac. I'm not sure if it has the same
>>>> SPRGx requirements as other G4's or not.
>>>
>>> That's the machine that caused the sprg save/restore.
>>>    https://svnweb.freebsd.org/base?view=revision&revision=151891
>>>
>>> later,
>>>
>>> Peter.
>>
>> My patch/hack as I have always had it for booting PowerMac G5's does not
>> change the content for G4's (such as eMac G4's). I made a separate case
>> for __powerpc64__ --and only for AIM-capable as well. My code has been:
>>
>> # svnlite diff /usr/src/sys/powerpc/ofw/ofw_machdep.c
>> Index: /usr/src/sys/powerpc/ofw/ofw_machdep.c
>> ===================================================================
>> --- /usr/src/sys/powerpc/ofw/ofw_machdep.c      (revision 308247)
>> +++ /usr/src/sys/powerpc/ofw/ofw_machdep.c      (working copy)
>> @@ -111,6 +111,24 @@
>>         * Assume that interrupt are disabled at this point, or
>>         * SPRG1-3 could be trashed
>>         */
>> +#if defined(AIM) && defined(__powerpc64__)
>> +/* HACK: PowerMac G5 specific code to avoid demonstrated hangs in
>> + *       the early boot time frame: avoid mtsprg0 use.
>> + *       This would need a live test for PowerMac vs. not in order
>> + *       to remove HACK status --but without calling into
>> + *       OpenFirmware or the problem would be recreated.
>> + */
>> +       if (1)
>> +               __asm __volatile("mfsprg0 %0\n\t"
>> +                                "mtsprg1 %1\n\t"
>> +                                "mtsprg2 %2\n\t"
>> +                                "mtsprg3 %3\n\t"
>> +                                : "=&r"(ofw_sprg0_save)
>> +                                : "r"(ofmsr[2]),
>> +                                "r"(ofmsr[3]),
>> +                                "r"(ofmsr[4]));
>> +       else
>> +#endif
>>        __asm __volatile("mfsprg0 %0\n\t"
>>                         "mtsprg0 %1\n\t"
>>                         "mtsprg1 %2\n\t"
>>
>> (The comment does not reflect the modern discussion of why the
>> change works: the code has been around a long time.)
>>
>> I do not know if there are any AIM-capable __powerpc64__
>> contexts for which the change is inappropriate. It would be
>> nice if it was always appropriate to that kind of context
>> and could be added to head and stable/11 and stable/10 .
>> (I've no experience before stable/10: so untested prior to
>> that.)
>>
>> Jukka did experiments with eliminating more --and not just for
>> AIM-capable __powerpc64__ but some other PowerMac contexts as
>> well.
>>
>> But I kept to the minimal generated-code change which appeared
>> to fix the problematical behavior.
>>
>> ===
>> Mark Millard
>> markmi at dsl-only.net
>>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAHSQbTCijFV87PpRxOpZuLvvrGcwjzK4HspMaERV7Eyxkrf05w>