svn commit: r279137 - in user/nwhitehorn/ppc64-pmap-rework: powermac ps3

Nathan Whitehorn nwhitehorn at FreeBSD.org
Sun Feb 22 03:04:42 UTC 2015


Author: nwhitehorn
Date: Sun Feb 22 03:04:40 2015
New Revision: 279137
URL: https://svnweb.freebsd.org/changeset/base/279137

Log:
  MFC @ r279136

Modified:
  user/nwhitehorn/ppc64-pmap-rework/powermac/atibl.c
  user/nwhitehorn/ppc64-pmap-rework/powermac/nvbl.c
  user/nwhitehorn/ppc64-pmap-rework/powermac/powermac_thermal.c
  user/nwhitehorn/ppc64-pmap-rework/ps3/ps3_syscons.c
Directory Properties:
  user/nwhitehorn/ppc64-pmap-rework/   (props changed)

Modified: user/nwhitehorn/ppc64-pmap-rework/powermac/atibl.c
==============================================================================
--- user/nwhitehorn/ppc64-pmap-rework/powermac/atibl.c	Sun Feb 22 02:59:53 2015	(r279136)
+++ user/nwhitehorn/ppc64-pmap-rework/powermac/atibl.c	Sun Feb 22 03:04:40 2015	(r279137)
@@ -38,6 +38,11 @@ __FBSDID("$FreeBSD$");
 #include <machine/bus.h>
 
 #include <dev/ofw/openfirm.h>
+#include <dev/pci/pcivar.h>
+
+#ifndef PCI_VENDOR_ID_ATI
+#define PCI_VENDOR_ID_ATI 0x1002
+#endif
 
 /* From the xf86-video-ati driver's radeon_reg.h */
 #define RADEON_LVDS_GEN_CNTL         0x02d0
@@ -121,7 +126,9 @@ atibl_probe(device_t dev)
 	if (OF_getprop(handle, "backlight-control", &control, sizeof(control)) < 0)
 		return (ENXIO);
 
-	if (strcmp(control, "ati") != 0)
+	if (strcmp(control, "ati") != 0 &&
+	    (strcmp(control, "mnca") != 0 ||
+	    pci_get_vendor(device_get_parent(dev)) != 0x1002))
 		return (ENXIO);
 
 	device_set_desc(dev, "PowerBook backlight for ATI graphics");
@@ -162,14 +169,13 @@ atibl_pll_rreg(struct atibl_softc *sc, u
 {
 	uint32_t data, save, tmp;
 
-	bus_write_1(sc->sc_memr, RADEON_CLOCK_CNTL_INDEX,
-	    ((reg & 0x3f) | RADEON_PLL_WR_EN));
+	bus_write_1(sc->sc_memr, RADEON_CLOCK_CNTL_INDEX, (reg & 0x3f));
 	(void)bus_read_4(sc->sc_memr, RADEON_CLOCK_CNTL_DATA);
 	(void)bus_read_4(sc->sc_memr, RADEON_CRTC_GEN_CNTL);
 
 	data = bus_read_4(sc->sc_memr, RADEON_CLOCK_CNTL_DATA);
 
-	/* Only necessary on R300, bt won't hurt others. */
+	/* Only necessary on R300, but won't hurt others. */
 	save = bus_read_4(sc->sc_memr, RADEON_CLOCK_CNTL_INDEX);
 	tmp = save & (~0x3f | RADEON_PLL_WR_EN);
 	bus_write_4(sc->sc_memr, RADEON_CLOCK_CNTL_INDEX, tmp);
@@ -192,7 +198,7 @@ atibl_pll_wreg(struct atibl_softc *sc, u
 	bus_write_4(sc->sc_memr, RADEON_CLOCK_CNTL_DATA, val);
 	DELAY(5000);
 
-	/* Only necessary on R300, bt won't hurt others. */
+	/* Only necessary on R300, but won't hurt others. */
 	save = bus_read_4(sc->sc_memr, RADEON_CLOCK_CNTL_INDEX);
 	tmp = save & (~0x3f | RADEON_PLL_WR_EN);
 	bus_write_4(sc->sc_memr, RADEON_CLOCK_CNTL_INDEX, tmp);

Modified: user/nwhitehorn/ppc64-pmap-rework/powermac/nvbl.c
==============================================================================
--- user/nwhitehorn/ppc64-pmap-rework/powermac/nvbl.c	Sun Feb 22 02:59:53 2015	(r279136)
+++ user/nwhitehorn/ppc64-pmap-rework/powermac/nvbl.c	Sun Feb 22 03:04:40 2015	(r279137)
@@ -38,6 +38,9 @@ __FBSDID("$FreeBSD$");
 #include <machine/bus.h>
 
 #include <dev/ofw/openfirm.h>
+#include <dev/pci/pcivar.h>
+
+#define PCI_VENDOR_ID_NVIDIA	0x10de
 
 #define NVIDIA_BRIGHT_MIN     (0x0ec)
 #define NVIDIA_BRIGHT_MAX     (0x538)
@@ -102,7 +105,8 @@ nvbl_probe(device_t dev)
 	if (OF_getprop(handle, "backlight-control", &control, sizeof(control)) < 0)
 		return (ENXIO);
 
-	if (strcmp(control, "mnca") != 0)
+	if ((strcmp(control, "mnca") != 0) ||
+	    pci_get_vendor(device_get_parent(dev)) != PCI_VENDOR_ID_NVIDIA)
 		return (ENXIO);
 
 	device_set_desc(dev, "PowerBook backlight for nVidia graphics");

Modified: user/nwhitehorn/ppc64-pmap-rework/powermac/powermac_thermal.c
==============================================================================
--- user/nwhitehorn/ppc64-pmap-rework/powermac/powermac_thermal.c	Sun Feb 22 02:59:53 2015	(r279136)
+++ user/nwhitehorn/ppc64-pmap-rework/powermac/powermac_thermal.c	Sun Feb 22 03:04:40 2015	(r279137)
@@ -42,6 +42,9 @@ __FBSDID("$FreeBSD$");
 
 #include "powermac_thermal.h"
 
+/* A 10 second timer for spinning down fans. */
+#define FAN_HYSTERESIS_TIMER	10
+
 static void fan_management_proc(void);
 static void pmac_therm_manage_fans(void);
 
@@ -63,6 +66,7 @@ static MALLOC_DEFINE(M_PMACTHERM, "pmact
 struct pmac_fan_le {
 	struct pmac_fan			*fan;
 	int				last_val;
+	int				timer;
 	SLIST_ENTRY(pmac_fan_le)	entries;
 };
 struct pmac_sens_le {
@@ -95,6 +99,7 @@ pmac_therm_manage_fans(void)
 	struct pmac_sens_le *sensor;
 	struct pmac_fan_le *fan;
 	int average_excess, max_excess_zone, frac_excess;
+	int fan_speed;
 	int nsens, nsens_zone;
 	int temp;
 
@@ -137,10 +142,11 @@ pmac_therm_manage_fans(void)
 		nsens = nsens_zone = 0;
 		average_excess = max_excess_zone = 0;
 		SLIST_FOREACH(sensor, &sensors, entries) {
-			frac_excess = (sensor->last_val -
+			temp = imin(sensor->last_val,
+			    sensor->sensor->max_temp);
+			frac_excess = (temp -
 			    sensor->sensor->target_temp)*100 /
-			    (sensor->sensor->max_temp -
-			    sensor->sensor->target_temp);
+			    (sensor->sensor->max_temp - temp + 1);
 			if (frac_excess < 0)
 				frac_excess = 0;
 			if (sensor->sensor->zone == fan->fan->zone) {
@@ -166,9 +172,21 @@ pmac_therm_manage_fans(void)
 		 * Scale the fan linearly in the max temperature in its
 		 * thermal zone.
 		 */
-		fan->fan->set(fan->fan, max_excess_zone *
+		max_excess_zone = imin(max_excess_zone, 100);
+		fan_speed = max_excess_zone * 
 		    (fan->fan->max_rpm - fan->fan->min_rpm)/100 +
-		    fan->fan->min_rpm);
+		    fan->fan->min_rpm;
+		if (fan_speed >= fan->last_val) {
+		    fan->timer = FAN_HYSTERESIS_TIMER;
+		    fan->last_val = fan_speed;
+		} else {
+		    fan->timer--;
+		    if (fan->timer == 0) {
+		    	fan->last_val = fan_speed;
+		    	fan->timer = FAN_HYSTERESIS_TIMER;
+		    }
+		}
+		fan->fan->set(fan->fan, fan->last_val);
 	}
 }
 

Modified: user/nwhitehorn/ppc64-pmap-rework/ps3/ps3_syscons.c
==============================================================================
--- user/nwhitehorn/ppc64-pmap-rework/ps3/ps3_syscons.c	Sun Feb 22 02:59:53 2015	(r279136)
+++ user/nwhitehorn/ppc64-pmap-rework/ps3/ps3_syscons.c	Sun Feb 22 03:04:40 2015	(r279137)
@@ -49,8 +49,6 @@ __FBSDID("$FreeBSD$");
 
 #include "ps3-hvcall.h"
 
-#define PS3FB_SIZE (4*1024*1024)
-
 #define L1GPU_CONTEXT_ATTRIBUTE_DISPLAY_MODE_SET	0x0100
 #define L1GPU_CONTEXT_ATTRIBUTE_DISPLAY_SYNC		0x0101
 #define  L1GPU_DISPLAY_SYNC_HSYNC			1
@@ -138,8 +136,8 @@ ps3fb_remap(void)
 	    0,L1GPU_DISPLAY_SYNC_VSYNC,0,0);
 	lv1_gpu_context_attribute(0, L1GPU_CONTEXT_ATTRIBUTE_DISPLAY_SYNC,
 	    1,L1GPU_DISPLAY_SYNC_VSYNC,0,0);
-	lv1_gpu_memory_allocate(PS3FB_SIZE, 0, 0, 0, 0, &sc->sc_fbhandle,
-	    &fb_paddr);
+	lv1_gpu_memory_allocate(roundup2(sc->fb_info.fb_size, 1024*1024),
+	    0, 0, 0, 0, &sc->sc_fbhandle, &fb_paddr);
 	lv1_gpu_context_allocate(sc->sc_fbhandle, 0, &sc->sc_fbcontext,
 	    &sc->sc_dma_control, &sc->sc_driver_info, &sc->sc_reports,
 	    &sc->sc_reports_size);
@@ -150,7 +148,7 @@ ps3fb_remap(void)
 	    L1GPU_CONTEXT_ATTRIBUTE_DISPLAY_FLIP, 1, 0, 0, 0);
 
 	sc->fb_info.fb_pbase = fb_paddr;
-	for (va = 0; va < PS3FB_SIZE; va += PAGE_SIZE)
+	for (va = 0; va < sc->fb_info.fb_size; va += PAGE_SIZE)
 		pmap_kenter_attr(0x10000000 + va, fb_paddr + va,
 		    VM_MEMATTR_WRITE_COMBINING);
 	sc->fb_info.fb_flags &= ~FB_FLAG_NOWRITE;
@@ -168,6 +166,8 @@ ps3fb_init(struct vt_device *vd)
 	sc->fb_info.fb_depth = 32;
 	sc->fb_info.fb_height = 480;
 	sc->fb_info.fb_width = 720;
+	TUNABLE_INT_FETCH("hw.ps3fb.height", &sc->fb_info.fb_height);
+	TUNABLE_INT_FETCH("hw.ps3fb.width", &sc->fb_info.fb_width);
 	sc->fb_info.fb_stride = sc->fb_info.fb_width*4;
 	sc->fb_info.fb_size = sc->fb_info.fb_height * sc->fb_info.fb_stride;
 	sc->fb_info.fb_bpp = sc->fb_info.fb_stride / sc->fb_info.fb_width * 8;


More information about the svn-src-user mailing list