diff options
| author | Peter Tribble <peter.tribble@gmail.com> | 2019-08-25 11:37:30 +0100 |
|---|---|---|
| committer | Peter Tribble <peter.tribble@gmail.com> | 2019-09-07 11:38:14 +0100 |
| commit | 9cb0a1d4446fe891a01d01e07b2e27f0177c84cd (patch) | |
| tree | 1eeb1f901e48054f81cf1c490dcdf3b5d50a9f1d /usr/src/psm/promif | |
| parent | 95bfa623bf6336d9476ba272ebda6e2c2a305e6f (diff) | |
| download | illumos-joyent-9cb0a1d4446fe891a01d01e07b2e27f0177c84cd.tar.gz | |
11630 remove checks for 64-bit capable hardware
Reviewed by: Yuri Pankov <yuripv@yuripv.net>
Reviewed by: Andy Fiddaman <omnios@citrus-it.co.uk>
Approved by: Robert Mustacchi <rm@joyent.com>
Diffstat (limited to 'usr/src/psm/promif')
| -rw-r--r-- | usr/src/psm/promif/ieee1275/sun4/prom_vercheck.c | 362 | ||||
| -rw-r--r-- | usr/src/psm/promif/ieee1275/sun4u/Makefile.files | 1 | ||||
| -rw-r--r-- | usr/src/psm/promif/ieee1275/sun4v/Makefile.files | 6 |
3 files changed, 2 insertions, 367 deletions
diff --git a/usr/src/psm/promif/ieee1275/sun4/prom_vercheck.c b/usr/src/psm/promif/ieee1275/sun4/prom_vercheck.c deleted file mode 100644 index 852f2a6e60..0000000000 --- a/usr/src/psm/promif/ieee1275/sun4/prom_vercheck.c +++ /dev/null @@ -1,362 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2010 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#include <sys/promif.h> -#include <sys/promimpl.h> - -#ifdef DPRINTF -#define dprintf prom_printf -#endif - -/* - * Check if the prom is 64-bit ready. - */ - -/* - * Table listing the minimum prom versions supported by this kernel. - * The model value is expected to match the model in the flashprom node. - */ -static struct obp_rev_table { - char *model; - char *version; -} obp_min_revs[] = { - {"SUNW,525-1414", "OBP 3.11.2 1997/12/05 10:25"}, /* pulsar */ - {"SUNW,525-1672", "OBP 3.7.107 1998/02/19 17:54"}, /* tazmo */ - {"SUNW,525-1431", "OBP 3.2.16 1998/06/08 16:58"}, /* sunfire */ - { NULL, NULL} -}; - -#define NMINS 60 -#define NHOURS 24 -#define NDAYS 31 -#define NMONTHS 12 - -#define YEAR(y) ((y-1) * (NMONTHS * NDAYS * NHOURS * NMINS)) -#define MONTH(m) ((m-1) * (NDAYS * NHOURS * NMINS)) -#define DAY(d) ((d-1) * (NHOURS * NMINS)) -#define HOUR(h) ((h) * (NMINS)) -#define MINUTE(m) (m) - -static int -strtoi(char *str, char **pos) -{ - int c; - int val = 0; - - for (c = *str++; c >= '0' && c <= '9'; c = *str++) { - val *= 10; - val += c - '0'; - } - if (pos) - *pos = str; - return (val); -} - -/* - * obp_timestamp: based on the OBP flashprom version string of the - * format "OBP x.y.z YYYY/MM/DD HH:MM" calculate a timestamp based - * on the year, month, day, hour and minute by turning that into - * a number of minutes. - */ -static int -obp_timestamp(char *v) -{ - char *c; - int maj, year, month, day, hour, min; - - if (v[0] != 'O' || v[1] != 'B' || v[2] != 'P') - return (-1); - - c = v + 3; - - /* Find first non-space character after OBP */ - while (*c != '\0' && (*c == ' ' || *c == '\t')) - c++; - if (prom_strlen(c) < 5) /* need at least "x.y.z" */ - return (-1); - - maj = strtoi(c, &c); - if (maj < 3) - return (-1); - -#if 0 /* XXX - not used */ - dot = dotdot = 0; - if (*c == '.') { - dot = strtoi(c + 1, &c); - - /* optional? dot-dot release */ - if (*c == '.') - dotdot = strtoi(c + 1, &c); - } -#endif - - /* Find space at the end of version number */ - while (*c != '\0' && *c != ' ') - c++; - if (prom_strlen(c) < 11) /* need at least " xxxx/xx/xx" */ - return (-1); - - /* Point to first character of date */ - c++; - - /* Validate date format */ - if (c[4] != '/' || c[7] != '/') - return (-1); - - year = strtoi(c, NULL); - month = strtoi(c + 5, NULL); - day = strtoi(c + 8, NULL); - - if (year < 1995 || month == 0 || day == 0) - return (-1); - - /* - * Find space at the end of date number - */ - c += 10; - while (*c != '\0' && *c != ' ') - c++; - if (prom_strlen(c) < 6) /* need at least " xx:xx" */ - return (-1); - - /* Point to first character of time */ - c++; - - if (c[2] != ':') - return (-1); - - hour = strtoi(c, NULL); - min = strtoi(c + 3, NULL); - - return (YEAR(year) + MONTH(month) + - DAY(day) + HOUR(hour) + MINUTE(min)); -} - -/* - * Check the prom against the obp_min_revs table and complain if - * the system has an older prom installed. The actual major/minor/ - * dotdot numbers are not checked, only the date/time stamp. - */ - -static struct obp_rev_table *flashprom_ortp; -static pnode_t flashprom_node; -static int flashprom_checked; -static int flashprom_return_code; - -int -check_timestamp(char *model, int tstamp) -{ - int min_tstamp; - struct obp_rev_table *ortp; - - for (ortp = obp_min_revs; ortp->model != NULL; ortp++) { - if (prom_strcmp(model, ortp->model) == 0) { - min_tstamp = obp_timestamp(ortp->version); - if (min_tstamp == -1) { -#ifdef DEBUG - prom_printf("prom_version_check: " - "invalid OBP version string in table " - " (entry %d)", (int)(ortp - obp_min_revs)); -#endif - continue; - } - if (tstamp < min_tstamp) { -#ifdef DPRINTF - dprintf("prom_version_check: " - "Down-rev OBP detected. " - "Please update to at least:\n\t%s\n\n", - ortp->version); -#endif - flashprom_ortp = ortp; - return (1); - } - } - } /* for each obp_rev_table entry */ - - return (0); -} - -static pnode_t -visit(pnode_t node) -{ - int tstamp, plen, i; - char vers[512], model[64]; - static pnode_t openprom_node; - static char version[] = "version"; - static char model_name[] = "model"; - static char flashprom[] = "flashprom"; - - /* - * if name isn't 'flashprom', continue. - */ - if (prom_getproplen(node, OBP_NAME) != sizeof (flashprom)) - return ((pnode_t)0); - (void) prom_getprop(node, OBP_NAME, model); - if (prom_strncmp(model, flashprom, sizeof (flashprom)) != 0) - return ((pnode_t)0); - - plen = prom_getproplen(node, version); - if (plen <= 0 || plen > sizeof (vers)) - return ((pnode_t)0); - (void) prom_getprop(node, version, vers); - vers[plen] = '\0'; - - /* Make sure it's an OBP flashprom */ - if (vers[0] != 'O' && vers[1] != 'B' && vers[2] != 'P') - return ((pnode_t)0); - - plen = prom_getproplen(node, model_name); - if (plen <= 0 || plen > sizeof (model)) - return ((pnode_t)0); - (void) prom_getprop(node, model_name, model); - model[plen] = '\0'; - - tstamp = obp_timestamp(vers); - if (tstamp == -1) { - prom_printf("prom_version_check: node contains " - "improperly formatted version property,\n" - "\tnot checking prom version"); - return ((pnode_t)0); - } - - i = check_timestamp(model, tstamp); - - if (i == 0) - return ((pnode_t)0); - - /* - * We know that "node"'s flashprom image contains downrev firmware, - * however, a multi-board server might be running correct firmware. - * Check for that case by looking at the "/openprom" node, - * which always contains the running version. (We needed the - * "model" value to be able to do this, so we can use it as - * an index value into the table.) - * - * If it turns out we're running 'current' firmware, - * but detect down-rev firmware, use a different return code. - */ - - flashprom_return_code = PROM_VER64_UPGRADE; - - openprom_node = prom_finddevice("/openprom"); - if (openprom_node == OBP_BADNODE) - return (node); - - plen = prom_getproplen(node, version); - if (plen <= 0 || plen > sizeof (vers)) - return (node); - (void) prom_getprop(node, version, vers); - vers[plen] = '\0'; - - if (vers[0] != 'O' && vers[1] != 'B' && vers[2] != 'P') { - prom_printf("prom_version_check: " - "unknown <version> string in </openprom>\n"); - return (node); - } - - tstamp = obp_timestamp(vers); - if (tstamp == -1) { - prom_printf("prom_version_check: " - "</openprom> node <version> property: bad tstamp\n"); - return (node); - } - - i = check_timestamp(model, tstamp); - /* - * If that returned zero, then the running version is - * adequate ... so we can 'suggest' instead of 'require'. - */ - if (i == 0) - flashprom_return_code = PROM_VER64_SUGGEST; - - return (node); -} - -/* - * visit each node in the device tree, until we get a non-null answer - */ -static pnode_t -walk(pnode_t node) -{ - pnode_t id; - - if (visit(node)) - return (node); - - for (node = prom_childnode(node); node; node = prom_nextnode(node)) - if ((id = walk(node)) != (pnode_t)0) - return (id); - - return ((pnode_t)0); -} - -/* - * Check if the prom is 64-bit ready. - * - * If it's ready (or the test doesn't apply), return PROM_VER64_OK. - * If downrev firmware is running, return PROM_VER64_UPGRADE. - * If downrev firmware is detected (but not running), return PROM_VER64_SUGGEST. - * - * For PROM_VER64_UPGRADE and PROM_VER64_SUGGEST return code values: - * Return the nodeid of the flashprom node in *nodeid. - * and a printable message in *buf, buflen. - */ -int -prom_version_check(char *buf, size_t buflen, pnode_t *nodeid) -{ - char *p; - pnode_t node = flashprom_node; - size_t i; - - /* - * If we already checked, we already know the answer. - */ - if (flashprom_checked == 0) { - flashprom_node = node = walk(prom_rootnode()); - flashprom_checked = 1; - } - - if (nodeid) - *nodeid = node; - - if (node == (pnode_t)0) { - if (buf && buflen) - *buf = '\0'; - return (PROM_VER64_OK); - } - - /* bzero the callers buffer */ - for (i = buflen, p = buf; i != 0; --i, ++p) - *p = '\0'; - - /* - * Do a bounded copy of the output string into the callers buffer - */ - if (buflen <= 1) - return (flashprom_return_code); - - (void) prom_strncpy(buf, flashprom_ortp->version, buflen - 1); - return (flashprom_return_code); -} diff --git a/usr/src/psm/promif/ieee1275/sun4u/Makefile.files b/usr/src/psm/promif/ieee1275/sun4u/Makefile.files index 5fa8bbe84e..ea10f14d47 100644 --- a/usr/src/psm/promif/ieee1275/sun4u/Makefile.files +++ b/usr/src/psm/promif/ieee1275/sun4u/Makefile.files @@ -55,6 +55,5 @@ CORE_OBJS += \ prom_sparc.o \ prom_sunfire.o \ prom_tlb.o \ - prom_vercheck.o \ prom_vername.o \ prom_opl.o diff --git a/usr/src/psm/promif/ieee1275/sun4v/Makefile.files b/usr/src/psm/promif/ieee1275/sun4v/Makefile.files index 0cb087efa2..684d7c5f19 100644 --- a/usr/src/psm/promif/ieee1275/sun4v/Makefile.files +++ b/usr/src/psm/promif/ieee1275/sun4v/Makefile.files @@ -21,12 +21,11 @@ # # Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. -# -#pragma ident "%Z%%M% %I% %E% SMI" +# Copyright 2019 Peter Tribble. # # psm/promif/ieee1275/sun4u/Makefile.files # -# This Makefile defines all the promif file modules for the +# This Makefile defines all the promif file modules for the # directory psm/promif/ieee1275/sun4u. # @@ -55,5 +54,4 @@ CORE_OBJS += \ prom_sparc.o \ prom_sun4v_api_version.o \ prom_sun4v_soft_state_supported.o \ - prom_vercheck.o \ prom_vername.o |
