All pastes #1925226 Raw Edit

Stuff

public diff v1 · immutable
#1925226 ·published 2010-08-25 17:48 UTC
rendered paste body
diff --git a/pscnv/nouveau_drv.c b/pscnv/nouveau_drv.cindex a58f79a..5beebf1 100644--- a/pscnv/nouveau_drv.c+++ b/pscnv/nouveau_drv.c@@ -495,6 +495,7 @@ struct drm_ioctl_desc nouveau_ioctls[] = { 	DRM_IOCTL_DEF(DRM_PSCNV_FIFO_INIT, pscnv_ioctl_fifo_init, DRM_UNLOCKED), 	DRM_IOCTL_DEF(DRM_PSCNV_OBJ_ENG_NEW, pscnv_ioctl_obj_eng_new, DRM_UNLOCKED), 	DRM_IOCTL_DEF(DRM_PSCNV_FIFO_INIT_IB, pscnv_ioctl_fifo_init_ib, DRM_UNLOCKED),+	DRM_IOCTL_DEF(DRM_PSCNV_CORE_CLOCK, pscnv_ioctl_core_clock, DRM_UNLOCKED), };  int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls);diff --git a/pscnv/nv50_fifo.c b/pscnv/nv50_fifo.cindex 505bb40..9273061 100644--- a/pscnv/nv50_fifo.c+++ b/pscnv/nv50_fifo.c@@ -298,6 +298,17 @@ int pscnv_ioctl_fifo_init(struct drm_device *dev, void *data, 	return 0; } +int pscnv_ioctl_core_clock(struct drm_device *dev, void *data, +						struct drm_file *file_priv) {+	uint32_t core_first_dword = nv_rd32(dev, 0x4028);+	uint32_t core_second_dword = nv_rd32(dev, 0x402c);+	if (core_first_dword << 31 == 0)+		return 1; /* PLL is not set */+	struct drm_pscnv_clocks *clocks = data;++	return 0;+}+ int pscnv_ioctl_fifo_init_ib(struct drm_device *dev, void *data, 						struct drm_file *file_priv) { 	struct drm_pscnv_fifo_init_ib *req = data;diff --git a/pscnv/pscnv_drm.h b/pscnv/pscnv_drm.hindex 536cfae..78eb192 100644--- a/pscnv/pscnv_drm.h+++ b/pscnv/pscnv_drm.h@@ -139,6 +139,13 @@ struct drm_pscnv_obj_eng_new { 	uint32_t flags;		/* < */ }; +struct drm_pscnv_clocks {+	uint32_t core;+	uint32_t shader;+	uint32_t core_unknown;+	uint32_t memory;+};+ #define DRM_PSCNV_GETPARAM           0x00	/* get some information from the card */ #define DRM_PSCNV_GEM_NEW            0x20	/* create a new BO */ #define DRM_PSCNV_GEM_INFO           0x21	/* get info about a BO */@@ -153,5 +160,6 @@ struct drm_pscnv_obj_eng_new { #define DRM_PSCNV_FIFO_INIT          0x29	/* Initialises PFIFO processing on a channel */ #define DRM_PSCNV_OBJ_ENG_NEW        0x2a	/* Create a new engine object on a channel */ #define DRM_PSCNV_FIFO_INIT_IB       0x2b	/* Initialises IB PFIFO processing on a channel */+#define DRM_PSCNV_CORE_CLOCK         0x2c	/* Gets the core gpu clock speed */  #endif /* __PSCNV_DRM_H__ */diff --git a/pscnv/pscnv_fifo.h b/pscnv/pscnv_fifo.hindex d91d32a..ec73871 100644--- a/pscnv/pscnv_fifo.h+++ b/pscnv/pscnv_fifo.h@@ -31,5 +31,7 @@ int pscnv_ioctl_fifo_init(struct drm_device *dev, void *data, 						struct drm_file *file_priv); int pscnv_ioctl_fifo_init_ib(struct drm_device *dev, void *data, 						struct drm_file *file_priv);+int pscnv_ioctl_core_clock(struct drm_device *dev, void *data, +						struct drm_file *file_priv);  #endif