From owner-freebsd-current Thu Dec 24 18:47:05 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id SAA22845 for freebsd-current-outgoing; Thu, 24 Dec 1998 18:47:05 -0800 (PST) (envelope-from owner-freebsd-current@FreeBSD.ORG) Received: from janus.syracuse.net (janus.syracuse.net [205.232.47.15]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id SAA22837 for ; Thu, 24 Dec 1998 18:47:02 -0800 (PST) (envelope-from green@unixhelp.org) Received: from localhost (green@localhost) by janus.syracuse.net (8.8.8/8.8.7) with ESMTP id VAA09671 for ; Thu, 24 Dec 1998 21:46:56 -0500 (EST) Date: Thu, 24 Dec 1998 21:46:56 -0500 (EST) From: Brian Feldman X-Sender: green@janus.syracuse.net To: current@FreeBSD.ORG Subject: K6-2 (3?) CPU_WT_ALLOC Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-644874553-914554016=:9437" Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-644874553-914554016=:9437 Content-Type: TEXT/PLAIN; charset=US-ASCII CPU_WT_ALLOC does not work correctly for K6-2s of model 8+ and probably K6-3s (when they appear on the market soon). In addition, print_AMD_info() incorrectly printfs write allocation's size. I've fixed them, so they now Do The Right Thing, and added a "NO_MEMORY_HOLE" option to easily allow 15-16mb range handling for us K6 and K6-2 users. A patch follows in cleartext and encoded forms. Brian Feldman _ __ ___ ___ ___ green@unixhelp.org _ __ ___ | _ ) __| \ http://www.freebsd.org/ _ __ ___ ____ | _ \__ \ |) | FreeBSD: The Power to Serve! _ __ ___ ____ _____ |___/___/___/ --- src/sys/i386/conf/options.i386.orig Wed Dec 23 20:36:45 1998 +++ src/sys/i386/conf/options.i386 Wed Dec 23 20:36:56 1998 @@ -57,6 +57,7 @@ CPU_WT_ALLOC opt_cpu.h CYRIX_CACHE_WORKS opt_cpu.h CYRIX_CACHE_REALLY_WORKS opt_cpu.h +NO_MEMORY_HOLE opt_cpu.h # The CPU type affects the endian conversion functions all over the kernel. I386_CPU opt_global.h --- src/sys/i386/i386/identcpu.c.orig Mon Dec 21 23:12:18 1998 +++ src/sys/i386/i386/identcpu.c Wed Dec 23 20:30:39 1998 @@ -68,6 +68,7 @@ #if defined(I586_CPU) && defined(CPU_WT_ALLOC) void enable_K5_wt_alloc(void); void enable_K6_wt_alloc(void); +void enable_K6_2_wt_alloc(void); #endif void panicifcpuunsupported(void); static void identifycyrix(void); @@ -291,9 +292,11 @@ if ((cpu_id & 0xf00) == 0x500) { if (((cpu_id & 0x0f0) > 0) && ((cpu_id & 0x0f0) < 0x60) - && ((cpu_id & 0x00f) > 3)) { + && ((cpu_id & 0x00f) > 3)) enable_K5_wt_alloc(); - } else if ((cpu_id & 0x0f0) > 0x50) + else if ((cpu_id & 0x0f0) > 0x70) + enable_K6_2_wt_alloc(); + else if ((cpu_id & 0x0f0) > 0x50) enable_K6_wt_alloc(); } #endif @@ -860,18 +863,28 @@ switch (cpu_id & 0xFF0) { case 0x560: /* K6 0.35u */ case 0x570: /* K6 0.25u */ - case 0x580: /* K6-2 */ - case 0x590: /* K6-3 */ amd_whcr = rdmsr(0xc0000082); if (!(amd_whcr & 0x00fe)) { printf("Write Allocate Disable\n"); } else { printf("Write Allocate Enable Limit: %dM bytes\n", - (u_int32_t)(amd_whcr & 0x00fe) * 2); + (u_int32_t)(amd_whcr & 0x00fe) * 4); printf("Write Allocate 15-16M bytes: %s\n", (amd_whcr & 0x0001) ? "Enable" : "Disable"); printf("Hardware Write Allocate Control: %s\n", (amd_whcr & 0x0100) ? "Enable" : "Disable"); + } + break; + case 0x580: /* K6-2 */ + case 0x590: /* K6-3 */ + amd_whcr = rdmsr(0xc0000082); + if (!(amd_whcr & (0x3ff << 22))) { + printf("Write Allocate Disable\n"); + } else { + printf("Write Allocate Enable Limit: %dM bytes\n", + (u_int32_t)((amd_whcr & (0x3ff << 22)) >> 22) * 4); + printf("Write Allocate 15-16M bytes: %s\n", + (amd_whcr & (1 << 16)) ? "Enable" : "Disable"); } break; } --- src/sys/i386/i386/initcpu.c.orig Mon Dec 21 23:01:26 1998 +++ src/sys/i386/i386/initcpu.c Wed Dec 23 19:53:10 1998 @@ -44,6 +44,7 @@ #if defined(I586_CPU) && defined(CPU_WT_ALLOC) void enable_K5_wt_alloc(void); void enable_K6_wt_alloc(void); +void enable_K6_2_wt_alloc(void); #endif #ifdef I486_CPU @@ -628,8 +629,9 @@ whcr &= ~0x00feLL; whcr |= (size << 1); -#ifdef PC98 +#if defined(PC98) || defined(NO_MEMORY_HOLE) if (whcr & 0x00feLL) { +#ifdef PC98 /* * If bit 2 of port 0x43b is 0, disable wrte allocate for the * 15-16M range. @@ -637,6 +639,7 @@ if (!(inb(0x43b) & 4)) whcr &= ~0x0001LL; else +#endif whcr |= 0x0001LL; } #else @@ -644,7 +647,68 @@ * There is no way to know wheter 15-16M hole exists or not. * Therefore, we disable write allocate for this range. */ - whcr &= 0x00feLL; + whcr &= ~0x0001LL; +#endif + wrmsr(0x0c0000082, whcr); + + write_eflags(eflags); + enable_intr(); +} + +void +enable_K6_2_wt_alloc(void) +{ + quad_t size; + u_int64_t whcr; + u_long eflags; + + eflags = read_eflags(); + disable_intr(); + wbinvd(); + +#ifdef CPU_DISABLE_CACHE + /* + * Certain K6-2 box becomes unstable when write allocation is + * enabled. + */ + /* + * The AMD-K6 processer provides the 64-bit Test Register 12(TR12), + * but only the Cache Inhibit(CI) (bit 3 of TR12) is suppported. + * All other bits in TR12 have no effect on the processer's operation. + * The I/O Trap Restart function (bit 9 of TR12) is always enabled + * on the AMD-K6. + */ + wrmsr(0x0000000e, (u_int64_t)0x0008); +#endif + /* Don't assume that memory size is aligned with 4M. */ + if (Maxmem > 0) + size = ((Maxmem >> 8) + 3) >> 2; + else + size = 0; + + /* Limit is 4092M bytes. */ + size &= 0x3ff; + whcr = (rdmsr(0xc0000082) & ~(0x3ffLL << 22)) | (size << 22); + +#if defined(PC98) || defined(NO_MEMORY_HOLE) + if (whcr & (0x3ffLL << 22)) { +#ifdef PC98 + /* + * If bit 2 of port 0x43b is 0, disable wrte allocate for the + * 15-16M range. + */ + if (!(inb(0x43b) & 4)) + whcr &= ~(1LL << 16); + else +#endif + whcr |= 1LL << 16; + } +#else + /* + * There is no way to know wheter 15-16M hole exists or not. + * Therefore, we disable write allocate for this range. + */ + whcr &= ~(1LL << 16); #endif wrmsr(0x0c0000082, whcr); --0-644874553-914554016=:9437 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="K6-2.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="K6-2.patch" LS0tIHNyYy9zeXMvaTM4Ni9jb25mL29wdGlvbnMuaTM4Ni5vcmlnCVdlZCBE ZWMgMjMgMjA6MzY6NDUgMTk5OA0KKysrIHNyYy9zeXMvaTM4Ni9jb25mL29w dGlvbnMuaTM4NglXZWQgRGVjIDIzIDIwOjM2OjU2IDE5OTgNCkBAIC01Nyw2 ICs1Nyw3IEBADQogQ1BVX1dUX0FMTE9DCQkJb3B0X2NwdS5oDQogQ1lSSVhf Q0FDSEVfV09SS1MJCW9wdF9jcHUuaA0KIENZUklYX0NBQ0hFX1JFQUxMWV9X T1JLUwlvcHRfY3B1LmgNCitOT19NRU1PUllfSE9MRQkJCW9wdF9jcHUuaA0K IA0KICMgVGhlIENQVSB0eXBlIGFmZmVjdHMgdGhlIGVuZGlhbiBjb252ZXJz aW9uIGZ1bmN0aW9ucyBhbGwgb3ZlciB0aGUga2VybmVsLg0KIEkzODZfQ1BV CQlvcHRfZ2xvYmFsLmgNCi0tLSBzcmMvc3lzL2kzODYvaTM4Ni9pZGVudGNw dS5jLm9yaWcJTW9uIERlYyAyMSAyMzoxMjoxOCAxOTk4DQorKysgc3JjL3N5 cy9pMzg2L2kzODYvaWRlbnRjcHUuYwlXZWQgRGVjIDIzIDIwOjMwOjM5IDE5 OTgNCkBAIC02OCw2ICs2OCw3IEBADQogI2lmIGRlZmluZWQoSTU4Nl9DUFUp ICYmIGRlZmluZWQoQ1BVX1dUX0FMTE9DKQ0KIHZvaWQJZW5hYmxlX0s1X3d0 X2FsbG9jKHZvaWQpOw0KIHZvaWQJZW5hYmxlX0s2X3d0X2FsbG9jKHZvaWQp Ow0KK3ZvaWQJZW5hYmxlX0s2XzJfd3RfYWxsb2Modm9pZCk7DQogI2VuZGlm DQogdm9pZCBwYW5pY2lmY3B1dW5zdXBwb3J0ZWQodm9pZCk7DQogc3RhdGlj IHZvaWQgaWRlbnRpZnljeXJpeCh2b2lkKTsNCkBAIC0yOTEsOSArMjkyLDEx IEBADQogCQlpZiAoKGNwdV9pZCAmIDB4ZjAwKSA9PSAweDUwMCkgew0KIAkJ CWlmICgoKGNwdV9pZCAmIDB4MGYwKSA+IDApDQogCQkJICAgICYmICgoY3B1 X2lkICYgMHgwZjApIDwgMHg2MCkNCi0JCQkgICAgJiYgKChjcHVfaWQgJiAw eDAwZikgPiAzKSkgew0KKwkJCSAgICAmJiAoKGNwdV9pZCAmIDB4MDBmKSA+ IDMpKQ0KIAkJCQllbmFibGVfSzVfd3RfYWxsb2MoKTsNCi0JCQl9IGVsc2Ug aWYgKChjcHVfaWQgJiAweDBmMCkgPiAweDUwKQ0KKwkJCWVsc2UgaWYgKChj cHVfaWQgJiAweDBmMCkgPiAweDcwKQ0KKwkJCQllbmFibGVfSzZfMl93dF9h bGxvYygpOw0KKwkJCWVsc2UgaWYgKChjcHVfaWQgJiAweDBmMCkgPiAweDUw KQ0KIAkJCQllbmFibGVfSzZfd3RfYWxsb2MoKTsNCiAJCX0NCiAjZW5kaWYN CkBAIC04NjAsMTggKzg2MywyOCBAQA0KIAlzd2l0Y2ggKGNwdV9pZCAmIDB4 RkYwKSB7DQogCWNhc2UgMHg1NjA6CS8qIEs2IDAuMzV1ICovDQogCWNhc2Ug MHg1NzA6CS8qIEs2IDAuMjV1ICovDQotCWNhc2UgMHg1ODA6CS8qIEs2LTIg Ki8NCi0JY2FzZSAweDU5MDoJLyogSzYtMyAqLw0KIAkJYW1kX3doY3IgPSBy ZG1zcigweGMwMDAwMDgyKTsNCiAJCWlmICghKGFtZF93aGNyICYgMHgwMGZl KSkgew0KIAkJCXByaW50ZigiV3JpdGUgQWxsb2NhdGUgRGlzYWJsZVxuIik7 DQogCQl9IGVsc2Ugew0KIAkJCXByaW50ZigiV3JpdGUgQWxsb2NhdGUgRW5h YmxlIExpbWl0OiAlZE0gYnl0ZXNcbiIsDQotCQkJICAgICh1X2ludDMyX3Qp KGFtZF93aGNyICYgMHgwMGZlKSAqIDIpOw0KKwkJCSAgICAodV9pbnQzMl90 KShhbWRfd2hjciAmIDB4MDBmZSkgKiA0KTsNCiAJCQlwcmludGYoIldyaXRl IEFsbG9jYXRlIDE1LTE2TSBieXRlczogJXNcbiIsDQogCQkJICAgIChhbWRf d2hjciAmIDB4MDAwMSkgPyAiRW5hYmxlIiA6ICJEaXNhYmxlIik7DQogCQkJ cHJpbnRmKCJIYXJkd2FyZSBXcml0ZSBBbGxvY2F0ZSBDb250cm9sOiAlc1xu IiwNCiAJCQkgICAgKGFtZF93aGNyICYgMHgwMTAwKSA/ICJFbmFibGUiIDog IkRpc2FibGUiKTsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIDB4NTgwOgkv KiBLNi0yICovDQorCWNhc2UgMHg1OTA6CS8qIEs2LTMgKi8NCisJCWFtZF93 aGNyID0gcmRtc3IoMHhjMDAwMDA4Mik7DQorCQlpZiAoIShhbWRfd2hjciAm ICgweDNmZiA8PCAyMikpKSB7DQorCQkJcHJpbnRmKCJXcml0ZSBBbGxvY2F0 ZSBEaXNhYmxlXG4iKTsNCisJCX0gZWxzZSB7DQorCQkJcHJpbnRmKCJXcml0 ZSBBbGxvY2F0ZSBFbmFibGUgTGltaXQ6ICVkTSBieXRlc1xuIiwNCisJCQkg ICAgKHVfaW50MzJfdCkoKGFtZF93aGNyICYgKDB4M2ZmIDw8IDIyKSkgPj4g MjIpICogNCk7DQorCQkJcHJpbnRmKCJXcml0ZSBBbGxvY2F0ZSAxNS0xNk0g Ynl0ZXM6ICVzXG4iLA0KKwkJCSAgICAoYW1kX3doY3IgJiAoMSA8PCAxNikp ID8gIkVuYWJsZSIgOiAiRGlzYWJsZSIpOw0KIAkJfQ0KIAkJYnJlYWs7DQog CX0NCi0tLSBzcmMvc3lzL2kzODYvaTM4Ni9pbml0Y3B1LmMub3JpZwlNb24g RGVjIDIxIDIzOjAxOjI2IDE5OTgNCisrKyBzcmMvc3lzL2kzODYvaTM4Ni9p bml0Y3B1LmMJV2VkIERlYyAyMyAxOTo1MzoxMCAxOTk4DQpAQCAtNDQsNiAr NDQsNyBAQA0KICNpZiBkZWZpbmVkKEk1ODZfQ1BVKSAmJiBkZWZpbmVkKENQ VV9XVF9BTExPQykNCiB2b2lkCWVuYWJsZV9LNV93dF9hbGxvYyh2b2lkKTsN CiB2b2lkCWVuYWJsZV9LNl93dF9hbGxvYyh2b2lkKTsNCit2b2lkCWVuYWJs ZV9LNl8yX3d0X2FsbG9jKHZvaWQpOw0KICNlbmRpZg0KIA0KICNpZmRlZiBJ NDg2X0NQVQ0KQEAgLTYyOCw4ICs2MjksOSBAQA0KIAl3aGNyICY9IH4weDAw ZmVMTDsNCiAJd2hjciB8PSAoc2l6ZSA8PCAxKTsNCiANCi0jaWZkZWYgUEM5 OA0KKyNpZiBkZWZpbmVkKFBDOTgpIHx8IGRlZmluZWQoTk9fTUVNT1JZX0hP TEUpDQogCWlmICh3aGNyICYgMHgwMGZlTEwpIHsNCisjaWZkZWYgUEM5OA0K IAkJLyoNCiAJCSAqIElmIGJpdCAyIG9mIHBvcnQgMHg0M2IgaXMgMCwgZGlz YWJsZSB3cnRlIGFsbG9jYXRlIGZvciB0aGUNCiAJCSAqIDE1LTE2TSByYW5n ZS4NCkBAIC02MzcsNiArNjM5LDcgQEANCiAJCWlmICghKGluYigweDQzYikg JiA0KSkNCiAJCQl3aGNyICY9IH4weDAwMDFMTDsNCiAJCWVsc2UNCisjZW5k aWYNCiAJCQl3aGNyIHw9ICAweDAwMDFMTDsNCiAJfQ0KICNlbHNlDQpAQCAt NjQ0LDcgKzY0Nyw2OCBAQA0KIAkgKiBUaGVyZSBpcyBubyB3YXkgdG8ga25v dyB3aGV0ZXIgMTUtMTZNIGhvbGUgZXhpc3RzIG9yIG5vdC4gDQogCSAqIFRo ZXJlZm9yZSwgd2UgZGlzYWJsZSB3cml0ZSBhbGxvY2F0ZSBmb3IgdGhpcyBy YW5nZS4NCiAJICovDQotCXdoY3IgJj0gMHgwMGZlTEw7DQorCXdoY3IgJj0g fjB4MDAwMUxMOw0KKyNlbmRpZg0KKwl3cm1zcigweDBjMDAwMDA4Miwgd2hj cik7DQorDQorCXdyaXRlX2VmbGFncyhlZmxhZ3MpOw0KKwllbmFibGVfaW50 cigpOw0KK30NCisNCit2b2lkDQorZW5hYmxlX0s2XzJfd3RfYWxsb2Modm9p ZCkNCit7DQorCXF1YWRfdAlzaXplOw0KKwl1X2ludDY0X3QJd2hjcjsNCisJ dV9sb25nCWVmbGFnczsNCisNCisJZWZsYWdzID0gcmVhZF9lZmxhZ3MoKTsN CisJZGlzYWJsZV9pbnRyKCk7DQorCXdiaW52ZCgpOw0KKw0KKyNpZmRlZiBD UFVfRElTQUJMRV9DQUNIRQ0KKwkvKg0KKwkgKiBDZXJ0YWluIEs2LTIgYm94 IGJlY29tZXMgdW5zdGFibGUgd2hlbiB3cml0ZSBhbGxvY2F0aW9uIGlzDQor CSAqIGVuYWJsZWQuDQorCSAqLw0KKwkvKg0KKwkgKiBUaGUgQU1ELUs2IHBy b2Nlc3NlciBwcm92aWRlcyB0aGUgNjQtYml0IFRlc3QgUmVnaXN0ZXIgMTIo VFIxMiksDQorCSAqIGJ1dCBvbmx5IHRoZSBDYWNoZSBJbmhpYml0KENJKSAo Yml0IDMgb2YgVFIxMikgaXMgc3VwcHBvcnRlZC4NCisJICogQWxsIG90aGVy IGJpdHMgaW4gVFIxMiBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcHJvY2Vzc2Vy J3Mgb3BlcmF0aW9uLg0KKwkgKiBUaGUgSS9PIFRyYXAgUmVzdGFydCBmdW5j dGlvbiAoYml0IDkgb2YgVFIxMikgaXMgYWx3YXlzIGVuYWJsZWQNCisJICog b24gdGhlIEFNRC1LNi4NCisJICovDQorCXdybXNyKDB4MDAwMDAwMGUsICh1 X2ludDY0X3QpMHgwMDA4KTsNCisjZW5kaWYNCisJLyogRG9uJ3QgYXNzdW1l IHRoYXQgbWVtb3J5IHNpemUgaXMgYWxpZ25lZCB3aXRoIDRNLiAqLw0KKwlp ZiAoTWF4bWVtID4gMCkNCisJICBzaXplID0gKChNYXhtZW0gPj4gOCkgKyAz KSA+PiAyOw0KKwllbHNlDQorCSAgc2l6ZSA9IDA7DQorDQorCS8qIExpbWl0 IGlzIDQwOTJNIGJ5dGVzLiAqLw0KKwlzaXplICY9IDB4M2ZmOw0KKwl3aGNy ID0gKHJkbXNyKDB4YzAwMDAwODIpICYgfigweDNmZkxMIDw8IDIyKSkgfCAo c2l6ZSA8PCAyMik7DQorDQorI2lmIGRlZmluZWQoUEM5OCkgfHwgZGVmaW5l ZChOT19NRU1PUllfSE9MRSkNCisJaWYgKHdoY3IgJiAoMHgzZmZMTCA8PCAy MikpIHsNCisjaWZkZWYgUEM5OA0KKwkJLyoNCisJCSAqIElmIGJpdCAyIG9m IHBvcnQgMHg0M2IgaXMgMCwgZGlzYWJsZSB3cnRlIGFsbG9jYXRlIGZvciB0 aGUNCisJCSAqIDE1LTE2TSByYW5nZS4NCisJCSAqLw0KKwkJaWYgKCEoaW5i KDB4NDNiKSAmIDQpKQ0KKwkJCXdoY3IgJj0gfigxTEwgPDwgMTYpOw0KKwkJ ZWxzZQ0KKyNlbmRpZg0KKwkJCXdoY3IgfD0gIDFMTCA8PCAxNjsNCisJfQ0K KyNlbHNlDQorCS8qDQorCSAqIFRoZXJlIGlzIG5vIHdheSB0byBrbm93IHdo ZXRlciAxNS0xNk0gaG9sZSBleGlzdHMgb3Igbm90LiANCisJICogVGhlcmVm b3JlLCB3ZSBkaXNhYmxlIHdyaXRlIGFsbG9jYXRlIGZvciB0aGlzIHJhbmdl Lg0KKwkgKi8NCisJd2hjciAmPSB+KDFMTCA8PCAxNik7DQogI2VuZGlmDQog CXdybXNyKDB4MGMwMDAwMDgyLCB3aGNyKTsNCiANCg== --0-644874553-914554016=:9437-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message