Module Name: src Committed By: macallan Date: Fri Mar 16 22:08:53 UTC 2018
Modified Files: src/sys/arch/macppc/dev: uni-n.c src/sys/arch/macppc/include: cpu.h Log Message: gather per-CPU EEPROM contents if we have them To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/macppc/dev/uni-n.c cvs rdiff -u -r1.19 -r1.20 src/sys/arch/macppc/include/cpu.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/macppc/dev/uni-n.c diff -u src/sys/arch/macppc/dev/uni-n.c:1.8 src/sys/arch/macppc/dev/uni-n.c:1.9 --- src/sys/arch/macppc/dev/uni-n.c:1.8 Thu Mar 1 13:55:25 2018 +++ src/sys/arch/macppc/dev/uni-n.c Fri Mar 16 22:08:53 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: uni-n.c,v 1.8 2018/03/01 13:55:25 macallan Exp $ */ +/* $NetBSD: uni-n.c,v 1.9 2018/03/16 22:08:53 macallan Exp $ */ /*- * Copyright (C) 2005 Michael Lorenz. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uni-n.c,v 1.8 2018/03/01 13:55:25 macallan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uni-n.c,v 1.9 2018/03/16 22:08:53 macallan Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -43,6 +43,8 @@ __KERNEL_RCSID(0, "$NetBSD: uni-n.c,v 1. #include <machine/autoconf.h> +#include "fcu.h" + static void uni_n_attach(device_t, device_t, void *); static int uni_n_match(device_t, cfdata_t, void *); static int uni_n_print(void *, const char *); @@ -56,6 +58,11 @@ struct uni_n_softc { CFATTACH_DECL_NEW(uni_n, sizeof(struct uni_n_softc), uni_n_match, uni_n_attach, NULL, NULL); +#if NFCU > 0 +/* storage for CPUID SEEPROM contents found on some G5 */ +static uint8_t eeprom[2][160]; +#endif + int uni_n_match(device_t parent, cfdata_t cf, void *aux) { @@ -85,6 +92,9 @@ uni_n_attach(device_t parent, device_t s struct confargs *our_ca = aux; struct confargs ca; int node, child, namelen; +#if NFCU > 0 + int cpuid; +#endif u_int reg[20]; int intr[6]; char name[32]; @@ -92,7 +102,25 @@ uni_n_attach(device_t parent, device_t s sc->sc_dev = self; node = our_ca->ca_node; sc->sc_node = node; - printf(" address 0x%08x\n",our_ca->ca_reg[0]); + printf(" address 0x%08x\n", + our_ca->ca_reg[our_ca->ca_nreg > 8 ? 1 : 0]); + +#if NFCU > 0 + /* + * zero out eeprom blocks, then see if we have valid data + * doing this here because the EEPROMs are dangling from out i2c bus + * but we can get all the data just from looking at the properties + */ + memset(eeprom, 0, sizeof(eeprom)); + cpuid = OF_finddevice("/u3/i2c/cpuid@a0"); + OF_getprop(cpuid, "cpuid", eeprom[0], sizeof(eeprom[0])); + if (eeprom[0][1] != 0) + aprint_normal_dev(self, "found EEPROM data for CPU 0\n"); + cpuid = OF_finddevice("/u3/i2c/cpuid@a2"); + OF_getprop(cpuid, "cpuid", eeprom[1], sizeof(eeprom[1])); + if (eeprom[1][1] != 0) + aprint_normal_dev(self, "found EEPROM data for CPU 1\n"); +#endif memset(&sc->sc_memt, 0, sizeof(struct powerpc_bus_space)); sc->sc_memt.pbs_flags = _BUS_SPACE_LITTLE_ENDIAN|_BUS_SPACE_MEM_TYPE; @@ -137,3 +165,14 @@ uni_n_print(void *aux, const char *uni_n return UNCONF; } + +#if NFCU > 0 +int +get_cpuid(int cpu, uint8_t *buf) +{ + if ((cpu < 0) || (cpu > 1)) return -1; + if (eeprom[cpu][1] == 0) return 0; + memcpy(buf, eeprom[cpu], sizeof(eeprom[cpu])); + return sizeof(eeprom[cpu]); +} +#endif Index: src/sys/arch/macppc/include/cpu.h diff -u src/sys/arch/macppc/include/cpu.h:1.19 src/sys/arch/macppc/include/cpu.h:1.20 --- src/sys/arch/macppc/include/cpu.h:1.19 Mon Jun 20 06:35:40 2011 +++ src/sys/arch/macppc/include/cpu.h Fri Mar 16 22:08:53 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.19 2011/06/20 06:35:40 matt Exp $ */ +/* $NetBSD: cpu.h,v 1.20 2018/03/16 22:08:53 macallan Exp $ */ /* * Copyright (C) 1995-1997 Wolfgang Solfrank. @@ -36,6 +36,7 @@ #if defined(_KERNEL) && !defined(_MODULE) #define CPU_MAXNUM 2 extern char bootpath[]; +int get_cpuid(int, uint8_t *); #endif /* _KERNEL */ #include <powerpc/cpu.h>