Re: MacBook users: possible fix for the SMP problem

From: Scott Long <scottl_at_samsco.org>
Date: Wed, 07 Nov 2007 10:34:10 -0700
We can probably do a hack early on to see the PCI ID of the chipset.
If that's possible, then it can be turned on by default for that case.
The problem with tunbles like this is that they are inherently obscure,
especially for new users that are most likely to need them.

Scott


Rui Paulo wrote:
> I'm requesting review for the following patch:
> 
> Index: sys/i386/isa/clock.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/i386/isa/clock.c,v
> retrieving revision 1.240
> diff -u -p -r1.240 clock.c
> --- sys/i386/isa/clock.c    26 Oct 2007 03:23:54 -0000    1.240
> +++ sys/i386/isa/clock.c    7 Nov 2007 15:27:21 -0000
> _at__at_ -130,6 +130,9 _at__at_ static    u_char    rtc_statusb = RTCSB_24HR;
>  #define    ACQUIRED    2
>  #define    ACQUIRE_PENDING    3
> 
> +/* Intel ICH register */
> +#define ICH_PMBASE    0x400
> +
>  static    u_char    timer2_state;
> 
>  static    unsigned i8254_get_timecount(struct timecounter *tc);
> _at__at_ -616,11 +619,26 _at__at_ i8254_init(void)
>  void
>  startrtclock()
>  {
> +    char *ichenv;
>      u_int delta, freq;
> 
>      writertc(RTC_STATUSA, rtc_statusa);
>      writertc(RTC_STATUSB, RTCSB_24HR);
> 
> +    /*
> +     * On some systems, namely MacBooks, we need to disallow the
> +     * legacy USB circuit to generate an SMI# because this can
> +     * cause several problems, namely: incorrect CPU frequency
> +     * detection and failure to start the APs.
> +     */
> +    ichenv = getenv("hw.ich.disable_legacy_usb");
> +    if (ichenv !=  NULL) {
> +        if (bootverbose)
> +            printf("Disabling LEGACY_USB_EN bit on Intel ICH.\n");
> +        outl(ICH_PMBASE + 0x30, inl(ICH_PMBASE + 0x30) & ~0x8);
> +        freeenv(ichsmi);
> +    }
> +   
>      freq = calibrate_clocks();
>  #ifdef CLK_CALIBRATION_LOOP
>      if (bootverbose) {
> 
> 
> If you have a MacBook, you now need to set hw.ich.disable_legacy_usb on 
> the boot loader prompt or in loader.conf. I decided to go this route 
> because it seems safer. Imagine the case where there's a port at the 
> same IO address that has nothing to do with the ICH7. If we tried to 
> issue the outl() on every system, something bad could happen.
> 
> Comments?
> 
> Regards.
> -- 
> Rui Paulo
> 
Received on Wed Nov 07 2007 - 16:34:28 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:21 UTC