Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 07 Nov 2007 10:34:10 -0700
From:      Scott Long <scottl@samsco.org>
To:        Rui Paulo <rpaulo@FreeBSD.org>
Cc:        freebsd-current@FreeBSD.org, Rink Springer <rink@FreeBSD.org>, freebsd-i386@FreeBSD.org, freebsd-hardware@FreeBSD.org
Subject:   Re: MacBook users: possible fix for the SMP problem
Message-ID:  <4731F712.5000601@samsco.org>
In-Reply-To: <EABAF87E-087E-4E7D-AACA-0DDF8050D485@FreeBSD.org>
References:  <4A5A9C78-22AC-4480-BDEB-A72F6CF472DB@fnop.net>	<20071104231422.GA82337@rink.nu> <e1309ba60711041555n72def9fn71de42fcf40bfaa1@mail.gmail.com> <472F5E62.4080406@samsco.org> <60C64C73-A019-4C01-85E1-80DF4C76B1AF@freebsd.org> <EABAF87E-087E-4E7D-AACA-0DDF8050D485@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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
> @@ -130,6 +130,9 @@ 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);
> @@ -616,11 +619,26 @@ 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
> 




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