Date: Sat, 14 May 2005 22:05:13 -0700 (PDT) From: george+freebsd@m5p.com To: freebsd-mobile@freebsd.org Subject: Patched 5.4 kernel for Compaq R3000 series Message-ID: <200505150505.j4F55DA7073488@m5p.com>
next in thread | raw e-mail | index | archive | help
Symptom: You have a Compaq Presario R3000-series machine. When you put the 5.4 CD-ROM in and boot up, the machine powers down shortly after you leave the beastie boot menu. Workaround: You need a version of the patch originated by Jung-uk Kim (http://docs.freebsd.org/cgi/mid.cgi?200407021130.58247.jkim). But you can't apply the patch until after you install the system, but you can't install the system until ... (etc., etc.). I have posted a patched version of the kernel TEMPORARILY at: http://www.m5p.com/freebsd/kernel-5.4-r3000.tar.bz2 (My version of the patch, attached, is slightly different from the original version and disables the keyboard controller test under the control of a device hint.) Here is how you can use this patched kernel, after logging in as root: A. Unpack the contents of a FreeBSD CD-ROM in some temporary space. For example, mount the CD-ROM on /cdrom and make a directory /usr/tmp/5.4. Then cd to /usr/tmp/5.4 and do: (cd /cdrom, gtar cvf - .) | gtar xvfp - B. Replace the distributed kernel with the patched kernel. cd /usr/tmp/5.4/boot/kernel mv kernel kernel.orig tar xvfy kernel-5.4-r3000.tar.bz2 C. cd to /usr/tmp/5.4/boot. Add the lines: hint.atkbdtest.0.disabled="1" hint.acpi.0.disabled="1" to the end of the file loader.conf (unless you know that ACPI works on your R3000). D. cd to /usr/tmp/5.4 and burn a new CD-ROM with this command: mkisofs -R -b boot/cdboot -no-emul-boot . | burncd data - fixate E. Install with the patched CD-ROM. Install in the usual way. But after the base distribution has been extracted, go to the emergency holographic shell (ALT-F4) and replace the kernel which was just installed with the patched kernel: cp /dist/boot/kernel/kernel /boot/kernel You should now have a working system. Here is my modified version of Jung-ok Kim's patch. -- George Mitchell --- dev/kbd/atkbdc.c.orig Sun Aug 24 10:49:15 2003 +++ dev/kbd/atkbdc.c Tue Dec 14 15:28:11 2004 @@ -944,53 +944,59 @@ int test_kbd_port(KBDC p) { - int retry = KBD_MAXRETRY; - int again = KBD_MAXWAIT; - int c = -1; + if (resource_disabled("atkbdtest", 0)) return 0; + else { + int retry = KBD_MAXRETRY; + int again = KBD_MAXWAIT; + int c = -1; - while (retry-- > 0) { - empty_both_buffers(p, 10); - if (write_controller_command(p, KBDC_TEST_KBD_PORT)) - break; - } - if (retry < 0) - return FALSE; + while (retry-- > 0) { + empty_both_buffers(p, 10); + if (write_controller_command(p, KBDC_TEST_KBD_PORT)) + break; + } + if (retry < 0) + return FALSE; - emptyq(&kbdcp(p)->kbd); - while (again-- > 0) { - c = read_controller_data(p); - if (c != -1) /* try again if the controller is not ready */ - break; + emptyq(&kbdcp(p)->kbd); + while (again-- > 0) { + c = read_controller_data(p); + if (c != -1) /* try again if the controller is not ready */ + break; + } + if (verbose || bootverbose) + log(LOG_DEBUG, "kbdc: TEST_KBD_PORT status:%04x\n", c); + return c; } - if (verbose || bootverbose) - log(LOG_DEBUG, "kbdc: TEST_KBD_PORT status:%04x\n", c); - return c; } int test_aux_port(KBDC p) { - int retry = KBD_MAXRETRY; - int again = KBD_MAXWAIT; - int c = -1; + if (resource_disabled("atkbdtest", 0)) return 0; + else { + int retry = KBD_MAXRETRY; + int again = KBD_MAXWAIT; + int c = -1; - while (retry-- > 0) { - empty_both_buffers(p, 10); - if (write_controller_command(p, KBDC_TEST_AUX_PORT)) - break; - } - if (retry < 0) - return FALSE; + while (retry-- > 0) { + empty_both_buffers(p, 10); + if (write_controller_command(p, KBDC_TEST_AUX_PORT)) + break; + } + if (retry < 0) + return FALSE; - emptyq(&kbdcp(p)->kbd); - while (again-- > 0) { - c = read_controller_data(p); - if (c != -1) /* try again if the controller is not ready */ - break; + emptyq(&kbdcp(p)->kbd); + while (again-- > 0) { + c = read_controller_data(p); + if (c != -1) /* try again if the controller is not ready */ + break; + } + if (verbose || bootverbose) + log(LOG_DEBUG, "kbdc: TEST_AUX_PORT status:%04x\n", c); + return c; } - if (verbose || bootverbose) - log(LOG_DEBUG, "kbdc: TEST_AUX_PORT status:%04x\n", c); - return c; } int
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200505150505.j4F55DA7073488>