Module Name:    src
Committed By:   jdc
Date:           Fri Oct 23 15:18:10 UTC 2020

Modified Files:
        src/sys/arch/sparc64/dev: pcfiic_ebus.c
        src/sys/arch/sparc64/sparc64: autoconf.c ofw_patch.c ofw_patch.h

Log Message:
Move E250 and E450 i2c patches from dev/pcfiic_ebus.c to sparc64/ofw_patch.c.
They are now co-located with the other OFW patch routines.
New i2c devices are created for E250/E450 and v210/v240, so create new
functions to avoid duplicate code.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/sparc64/dev/pcfiic_ebus.c
cvs rdiff -u -r1.225 -r1.226 src/sys/arch/sparc64/sparc64/autoconf.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/sparc64/sparc64/ofw_patch.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/sparc64/sparc64/ofw_patch.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/sparc64/dev/pcfiic_ebus.c
diff -u src/sys/arch/sparc64/dev/pcfiic_ebus.c:1.6 src/sys/arch/sparc64/dev/pcfiic_ebus.c:1.7
--- src/sys/arch/sparc64/dev/pcfiic_ebus.c:1.6	Fri Jun 12 03:41:57 2020
+++ src/sys/arch/sparc64/dev/pcfiic_ebus.c	Fri Oct 23 15:18:10 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pcfiic_ebus.c,v 1.6 2020/06/12 03:41:57 thorpej Exp $	*/
+/*	$NetBSD: pcfiic_ebus.c,v 1.7 2020/10/23 15:18:10 jdc Exp $	*/
 /*	$OpenBSD: pcfiic_ebus.c,v 1.13 2008/06/08 03:07:40 deraadt Exp $ */
 
 /*
@@ -18,7 +18,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pcfiic_ebus.c,v 1.6 2020/06/12 03:41:57 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pcfiic_ebus.c,v 1.7 2020/10/23 15:18:10 jdc Exp $");
 
 /*
  * Device specific driver for the EBus i2c devices found on some sun4u
@@ -57,11 +57,6 @@ struct pcfiic_ebus_softc {
 CFATTACH_DECL_NEW(pcfiic, sizeof(struct pcfiic_ebus_softc),
 	pcfiic_ebus_match, pcfiic_ebus_attach, NULL, NULL);
 
-static prop_array_t create_dict(device_t);
-static void add_prop(prop_array_t, const char *, const char *, u_int, int);
-static void envctrl_props(prop_array_t, int);
-static void envctrltwo_props(prop_array_t, int);
-
 int
 pcfiic_ebus_match(device_t parent, struct cfdata *match, void *aux)
 {
@@ -103,6 +98,11 @@ pcfiic_ebus_attach(device_t parent, devi
 		return;
 	}
 
+	/* E450 and E250 have a different clock */
+	if ((strcmp(ea->ea_name, "SUNW,envctrl") == 0) ||
+	    (strcmp(ea->ea_name, "SUNW,envctrltwo") == 0))
+		clock = PCF8584_CLK_12 | PCF8584_SCL_45;
+
 	sc->sc_dev = self;
 	if (OF_getprop(ea->ea_node, "compatible", compat, sizeof(compat)) > 0 &&
 	    strcmp(compat, "SUNW,bbc-i2c") == 0) {
@@ -160,65 +160,5 @@ pcfiic_ebus_attach(device_t parent, devi
 	if (esc->esc_ih == NULL)
 		sc->sc_poll = 1;
 
-	if (strcmp(ea->ea_name, "SUNW,envctrl") == 0) {
-		envctrl_props(create_dict(self), ea->ea_node);
-		pcfiic_attach(sc, 0x55, PCF8584_CLK_12 | PCF8584_SCL_45, 0);
-	} else if (strcmp(ea->ea_name, "SUNW,envctrltwo") == 0) {
-		envctrltwo_props(create_dict(self), ea->ea_node);
-		pcfiic_attach(sc, 0x55, PCF8584_CLK_12 | PCF8584_SCL_45, 0);
-	} else
-		pcfiic_attach(sc, (i2c_addr_t)(addr >> 1), clock, swapregs);
-}
-
-static prop_array_t
-create_dict(device_t parent)
-{
-	prop_dictionary_t props = device_properties(parent);
-	prop_array_t cfg = prop_dictionary_get(props, "i2c-child-devices");
-	if (cfg) return cfg;
-	cfg = prop_array_create();
-	prop_dictionary_set(props, "i2c-child-devices", cfg);
-	prop_object_release(cfg);
-	return cfg;
-}
-
-static void
-add_prop(prop_array_t c, const char *name, const char *compat, u_int addr,
-	int node)
-{
-	prop_dictionary_t dev;
-
-	dev = prop_dictionary_create();
-	prop_dictionary_set_string(dev, "name", name);
-	prop_dictionary_set_data(dev, "compatible", compat, strlen(compat)+1);
-	prop_dictionary_set_uint32(dev, "addr", addr);
-	prop_dictionary_set_uint64(dev, "cookie", node);
-	prop_array_add(c, dev);
-	prop_object_release(dev);
-}
-
-static void
-envctrl_props(prop_array_t c, int node)
-{
-	/* Power supply 1 temperature. */
-	add_prop(c, "PSU-1", "ecadc", 0x48, node);
-
-	/* Power supply 2 termperature. */
-	add_prop(c, "PSU-2", "ecadc", 0x49, node);
-
-	/* Power supply 3 tempterature. */
-	add_prop(c, "PSU-3", "ecadc", 0x4a, node);
-
-	/* Ambient tempterature. */
-	add_prop(c, "ambient", "i2c-lm75", 0x4d, node);
-
-	/* CPU temperatures. */
-	add_prop(c, "CPU", "ecadc", 0x4f, node);
-}
-
-static void
-envctrltwo_props(prop_array_t c, int node)
-{
-	add_prop(c, "PSU", "ecadc", 0x4a, node);
-	add_prop(c, "CPU", "ecadc", 0x4f, node);
+	pcfiic_attach(sc, (i2c_addr_t)(addr >> 1), clock, swapregs);
 }

Index: src/sys/arch/sparc64/sparc64/autoconf.c
diff -u src/sys/arch/sparc64/sparc64/autoconf.c:1.225 src/sys/arch/sparc64/sparc64/autoconf.c:1.226
--- src/sys/arch/sparc64/sparc64/autoconf.c:1.225	Sat Oct 17 08:10:31 2020
+++ src/sys/arch/sparc64/sparc64/autoconf.c	Fri Oct 23 15:18:10 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.c,v 1.225 2020/10/17 08:10:31 jdc Exp $ */
+/*	$NetBSD: autoconf.c,v 1.226 2020/10/23 15:18:10 jdc Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.225 2020/10/17 08:10:31 jdc Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.226 2020/10/23 15:18:10 jdc Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -1281,6 +1281,16 @@ noether:
 		    (!strcmp(machine_model, "SUNW,Sun-Fire-V240") ||
 		    !strcmp(machine_model, "SUNW,Sun-Fire-V210")))
 			add_env_sensors_v210(busdev);
+
+		/* E450 SUNW,envctrl */
+		if (device_is_a(busdev, "pcfiic") &&
+		    (!strcmp(machine_model, "SUNW,Ultra-4")))
+			add_i2c_props_e450(busdev, busnode);
+		/* E250 SUNW,envctrltwo */
+		if (device_is_a(busdev, "pcfiic") &&
+		    (!strcmp(machine_model, "SUNW,Ultra-250")))
+			add_i2c_props_e250(busdev, busnode);
+
 	}
 
 	/* set properties for PCI framebuffers */

Index: src/sys/arch/sparc64/sparc64/ofw_patch.c
diff -u src/sys/arch/sparc64/sparc64/ofw_patch.c:1.1 src/sys/arch/sparc64/sparc64/ofw_patch.c:1.2
--- src/sys/arch/sparc64/sparc64/ofw_patch.c:1.1	Fri Oct 16 07:35:16 2020
+++ src/sys/arch/sparc64/sparc64/ofw_patch.c	Fri Oct 23 15:18:10 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: ofw_patch.c,v 1.1 2020/10/16 07:35:16 jdc Exp $ */
+/*	$NetBSD: ofw_patch.c,v 1.2 2020/10/23 15:18:10 jdc Exp $ */
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ofw_patch.c,v 1.1 2020/10/16 07:35:16 jdc Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ofw_patch.c,v 1.2 2020/10/23 15:18:10 jdc Exp $");
 
 #include <sys/param.h>
 
@@ -54,7 +54,42 @@ add_gpio_LED(prop_array_t pins, const ch
 	prop_array_add(pins, pin);
 	prop_object_release(pin);
 }
-	
+
+static prop_array_t
+create_i2c_dict(device_t busdev)
+{
+	prop_dictionary_t props = device_properties(busdev);
+	prop_array_t cfg = NULL;
+
+	cfg = prop_dictionary_get(props, "i2c-child-devices");
+ 	if (!cfg) {
+		cfg = prop_array_create();
+		prop_dictionary_set(props, "i2c-child-devices", cfg);
+		prop_dictionary_set_bool(props, "i2c-indirect-config", false);
+	}
+	return cfg;
+}
+
+static void
+add_i2c_device(prop_array_t cfg, const char *name, const char *compat,
+uint32_t addr, uint64_t node)
+{
+	prop_dictionary_t dev;
+	prop_data_t data;
+
+	DPRINTF(ACDB_PROBE, ("\nAdding i2c device: %s (%s) @ 0x%x (%lx)\n",
+	    name, compat, addr, node & 0xffffffff));
+	dev = prop_dictionary_create();
+	prop_dictionary_set_string(dev, "name", name);
+	data = prop_data_create_copy(compat, strlen(compat) + 1);
+	prop_dictionary_set(dev, "compatible", data);
+	prop_object_release(data);
+	prop_dictionary_set_uint32(dev, "addr", addr);
+	prop_dictionary_set_uint64(dev, "cookie", node);
+	prop_array_add(cfg, dev);
+	prop_object_release(dev);
+}
+
 void
 add_gpio_props_v210(device_t dev, void *aux)
 {
@@ -134,42 +169,56 @@ add_spdmem_props_sparcle(device_t busdev
 void
 add_env_sensors_v210(device_t busdev)
 {
-	prop_dictionary_t props = device_properties(busdev);
-	prop_array_t cfg = NULL;
-	prop_dictionary_t sens;
-	prop_data_t data;
-	const char name_lm[] = "i2c-lm75";
-	const char name_adm[] = "i2c-adm1026";
+	prop_array_t cfg;
 
 	DPRINTF(ACDB_PROBE, ("\nAdding sensors for %s ", machine_model));
-	cfg = prop_dictionary_get(props, "i2c-child-devices");
- 	if (!cfg) {
-		cfg = prop_array_create();
-		prop_dictionary_set(props, "i2c-child-devices", cfg);
-		prop_dictionary_set_bool(props, "i2c-indirect-config", false);
-	}
+	cfg = create_i2c_dict(busdev);
 
 	/* ADM1026 at 0x2e */
-	sens = prop_dictionary_create();
-	prop_dictionary_set_uint32(sens, "addr", 0x2e);
-	prop_dictionary_set_uint64(sens, "cookie", 0);
-	prop_dictionary_set_string(sens, "name", "hardware-monitor");
-	data = prop_data_create_copy(&name_adm[0], sizeof(name_adm));
-	prop_dictionary_set(sens, "compatible", data);
-	prop_object_release(data);
-	prop_array_add(cfg, sens);
-	prop_object_release(sens);
-
+	add_i2c_device(cfg, "hardware-monitor", "i2c-adm1026", 0x2e, 0);
 	/* LM75 at 0x4e */
-	sens = prop_dictionary_create();
-	prop_dictionary_set_uint32(sens, "addr", 0x4e);
-	prop_dictionary_set_uint64(sens, "cookie", 0);
-	prop_dictionary_set_string(sens, "name", "temperature-sensor");
-	data = prop_data_create_copy(&name_lm[0], sizeof(name_lm));
-	prop_dictionary_set(sens, "compatible", data);
-	prop_object_release(data);
-	prop_array_add(cfg, sens);
-	prop_object_release(sens);
+	add_i2c_device(cfg, "temperature-sensor", "i2c-lm75", 0x4e, 0);
+
+	prop_object_release(cfg);
+}
+
+/* Sensors and GPIO's for E450 and E250 */
+void
+add_i2c_props_e450(device_t busdev, uint64_t node)
+{
+	prop_array_t cfg;
+
+	DPRINTF(ACDB_PROBE, ("\nAdding sensors for %s ", machine_model));
+	cfg = create_i2c_dict(busdev);
+
+	/* Power supply 1 temperature. */
+	add_i2c_device(cfg, "PSU-1", "ecadc", 0x48, node);
+
+	/* Power supply 2 termperature. */
+	add_i2c_device(cfg, "PSU-2", "ecadc", 0x49, node);
+
+	/* Power supply 3 tempterature. */
+	add_i2c_device(cfg, "PSU-3", "ecadc", 0x4a, node);
+
+	/* Ambient tempterature. */
+	add_i2c_device(cfg, "ambient", "i2c-lm75", 0x4d, node);
+
+	/* CPU temperatures. */
+	add_i2c_device(cfg, "CPU", "ecadc", 0x4f, node);
+}
+
+void
+add_i2c_props_e250(device_t busdev, uint64_t node)
+{
+	prop_array_t cfg;
+
+	DPRINTF(ACDB_PROBE, ("\nAdding sensors for %s ", machine_model));
+	cfg = create_i2c_dict(busdev);
+
+	/* PSU temperature / CPU fan */
+	add_i2c_device(cfg, "PSU", "ecadc", 0x4a, node);
+	/* CPU & system board temperature */
+	add_i2c_device(cfg, "CPU", "ecadc", 0x4f, node);
 }
 
 /* Hardware specific device properties */

Index: src/sys/arch/sparc64/sparc64/ofw_patch.h
diff -u src/sys/arch/sparc64/sparc64/ofw_patch.h:1.2 src/sys/arch/sparc64/sparc64/ofw_patch.h:1.3
--- src/sys/arch/sparc64/sparc64/ofw_patch.h:1.2	Sat Oct 17 08:10:31 2020
+++ src/sys/arch/sparc64/sparc64/ofw_patch.h	Fri Oct 23 15:18:10 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: ofw_patch.h,v 1.2 2020/10/17 08:10:31 jdc Exp $ */
+/*	$NetBSD: ofw_patch.h,v 1.3 2020/10/23 15:18:10 jdc Exp $ */
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -45,6 +45,8 @@ void add_gpio_props_v210(device_t, void 
 void add_drivebay_props_v210(device_t, int, void *);
 void add_spdmem_props_sparcle(device_t);
 void add_env_sensors_v210(device_t);
+void add_i2c_props_e450(device_t, uint64_t);
+void add_i2c_props_e250(device_t, uint64_t);
 void set_hw_props(device_t);
 void set_static_edid(prop_dictionary_t);
 

Reply via email to