aboutsummaryrefslogtreecommitdiff
path: root/shared-core/nouveau_irq.c
diff options
context:
space:
mode:
authorJesse Barnes <jbarnes@virtuousgeek.org>2008-12-10 15:47:28 -0800
committerJesse Barnes <jbarnes@virtuousgeek.org>2008-12-10 15:50:22 -0800
commit9583c099b4a08b49e03f7b461c344b6d277fd262 (patch)
treee3c17d4b9ee2c2a063c3e30e0a650fc0c9b6cfa7 /shared-core/nouveau_irq.c
parentc34539e8bb5568b1d6059abf139dd08e07e84eea (diff)
Revert "Merge branch 'modesetting-gem'"
This reverts commit 6656db10551bbb8770dd945b6d81d5138521f208. We really just want the libdrm and ioctl bits, not all the driver stuff.
Diffstat (limited to 'shared-core/nouveau_irq.c')
-rw-r--r--shared-core/nouveau_irq.c91
1 files changed, 5 insertions, 86 deletions
diff --git a/shared-core/nouveau_irq.c b/shared-core/nouveau_irq.c
index 48872622..2a3d8a0b 100644
--- a/shared-core/nouveau_irq.c
+++ b/shared-core/nouveau_irq.c
@@ -37,13 +37,6 @@
#include "nouveau_reg.h"
#include "nouveau_swmthd.h"
-/* needed for interrupt based vpll changes */
-#include "nv50_display.h"
-#include "nv50_crtc.h"
-#include "nv50_output.h"
-/* needed for hotplug irq */
-#include "nv50_kms_wrapper.h"
-
void
nouveau_irq_preinstall(struct drm_device *dev)
{
@@ -510,82 +503,11 @@ static void
nouveau_nv50_display_irq_handler(struct drm_device *dev)
{
struct drm_nouveau_private *dev_priv = dev->dev_private;
- uint32_t val = NV_READ(NV50_PDISPLAY_SUPERVISOR);
-
- DRM_INFO("NV50_PDISPLAY_SUPERVISOR - 0x%08X\n", val);
-
- /* vblank interrupts */
- if (val & NV50_PDISPLAY_SUPERVISOR_CRTCn) {
- NV_WRITE(NV50_PDISPLAY_SUPERVISOR, val & NV50_PDISPLAY_SUPERVISOR_CRTCn);
- val &= ~NV50_PDISPLAY_SUPERVISOR_CRTCn;
- }
-
- /* clock setting amongst other things. */
- if (val & NV50_PDISPLAY_SUPERVISOR_CLK_MASK) {
- uint32_t state = (val & NV50_PDISPLAY_SUPERVISOR_CLK_MASK) >> NV50_PDISPLAY_SUPERVISOR_CLK_MASK__SHIFT;
-
- NV50_DEBUG("state %d\n", state);
-
- /* Set pll */
- if (state == 2) {
- struct nv50_display *display = nv50_get_display(dev);
- struct nv50_output *output = NULL;
- struct nv50_crtc *crtc = NULL;
- int crtc_index;
-
- uint32_t unk30 = NV_READ(NV50_PDISPLAY_UNK30_CTRL);
-
- for (crtc_index = 0; crtc_index < 2; crtc_index++) {
- bool clock_change = false;
- bool clock_ack = false;
-
- if (crtc_index == 0 && (unk30 & NV50_PDISPLAY_UNK30_CTRL_UPDATE_VCLK0))
- clock_change = true;
-
- if (crtc_index == 1 && (unk30 & NV50_PDISPLAY_UNK30_CTRL_UPDATE_VCLK1))
- clock_change = true;
-
- if (clock_change)
- clock_ack = true;
-
- if (display->last_crtc == crtc_index)
- clock_ack = true;
+ uint32_t val = NV_READ(NV50_DISPLAY_SUPERVISOR);
- list_for_each_entry(crtc, &display->crtcs, item) {
- if (crtc->index == crtc_index)
- break;
- }
+ DRM_INFO("NV50_DISPLAY_INTR - 0x%08X\n", val);
- if (clock_change)
- crtc->set_clock(crtc);
-
- NV50_DEBUG("index %d clock_change %d clock_ack %d\n", crtc_index, clock_change, clock_ack);
-
- if (!clock_ack)
- continue;
-
- crtc->set_clock_mode(crtc);
-
- list_for_each_entry(output, &display->outputs, item) {
- if (!output->crtc)
- continue;
-
- if (output->crtc == crtc)
- output->set_clock_mode(output);
- }
- }
- }
-
- NV_WRITE(NV50_PDISPLAY_UNK30_CTRL, NV50_PDISPLAY_UNK30_CTRL_PENDING);
- NV_WRITE(NV50_PDISPLAY_SUPERVISOR, val & NV50_PDISPLAY_SUPERVISOR_CLK_MASK);
-
- val &= ~NV50_PDISPLAY_SUPERVISOR_CLK_MASK;
- }
-
- if (val)
- DRM_ERROR("unsupported NV50_DISPLAY_INTR - 0x%08X\n", val);
-
- NV_WRITE(NV50_PDISPLAY_SUPERVISOR, val);
+ NV_WRITE(NV50_DISPLAY_SUPERVISOR, val);
}
static void
@@ -593,13 +515,10 @@ nouveau_nv50_i2c_irq_handler(struct drm_device *dev)
{
struct drm_nouveau_private *dev_priv = dev->dev_private;
- DRM_INFO("NV50_PCONNECTOR_HOTPLUG_CTRL - 0x%08X\n", NV_READ(NV50_PCONNECTOR_HOTPLUG_CTRL));
+ DRM_INFO("NV50_I2C_INTR - 0x%08X\n", NV_READ(NV50_I2C_CONTROLLER));
/* This seems to be the way to acknowledge an interrupt. */
- NV_WRITE(NV50_PCONNECTOR_HOTPLUG_CTRL, 0x7FFF7FFF);
-
- /* Do a "dumb" detect all */
- nv50_kms_connector_detect_all(dev);
+ NV_WRITE(NV50_I2C_CONTROLLER, 0x7FFF7FFF);
}
irqreturn_t