diff options
| author | Rui Paulo <rpaulo@FreeBSD.org> | 2007-12-12 20:24:06 +0000 |
|---|---|---|
| committer | Rui Paulo <rpaulo@FreeBSD.org> | 2007-12-12 20:24:06 +0000 |
| commit | 319b564536d80696a0980e9ea6d11da75d13cf69 (patch) | |
| tree | eb005d916961173ecc3365e9a4e1890ae59f6a31 /sys/amd64 | |
| parent | 620721db82bcd154b887b45cbdc221035f1b1da3 (diff) | |
Notes
Diffstat (limited to 'sys/amd64')
| -rw-r--r-- | sys/amd64/amd64/machdep.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index 1928518e5f99..24226f7e7e8e 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -155,6 +155,10 @@ SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST, cpu_startup, NULL) extern vm_offset_t ksym_start, ksym_end; #endif +/* Intel ICH registers */ +#define ICH_PMBASE 0x400 +#define ICH_SMI_EN ICH_PMBASE + 0x30 + int _udatasel, _ucodesel, _ucode32sel; int cold = 1; @@ -192,6 +196,27 @@ static void cpu_startup(dummy) void *dummy; { + char *sysenv; + + /* + * On 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. + * We do this by disabling a bit in the SMI_EN (SMI Control and + * Enable register) of the Intel ICH LPC Interface Bridge. + */ + sysenv = getenv("smbios.system.product"); + if (sysenv != NULL) { + if (strncmp(sysenv, "MacBook", 7) == 0) { + if (bootverbose) + printf("Disabling LEGACY_USB_EN bit on " + "Intel ICH.\n"); + outl(ICH_SMI_EN, inl(ICH_SMI_EN) & ~0x8); + } + freeenv(sysenv); + } + /* * Good {morning,afternoon,evening,night}. */ |
