From: <dar...@ke...> - 2009-02-04 05:27:02
|
configure.ac | 2 libdrm/Makefile.am | 2 libdrm/nouveau/Makefile.am | 40 libdrm/nouveau/libdrm_nouveau.pc.in | 10 libdrm/nouveau/nouveau_bo.c | 838 +++ libdrm/nouveau/nouveau_bo.h | 97 libdrm/nouveau/nouveau_channel.c | 167 libdrm/nouveau/nouveau_channel.h | 56 libdrm/nouveau/nouveau_class.h | 8006 ++++++++++++++++++++++++++++++++++++ libdrm/nouveau/nouveau_device.c | 185 libdrm/nouveau/nouveau_device.h | 31 libdrm/nouveau/nouveau_dma.c | 215 libdrm/nouveau/nouveau_dma.h | 154 libdrm/nouveau/nouveau_drmif.h | 59 libdrm/nouveau/nouveau_fence.c | 249 + libdrm/nouveau/nouveau_grobj.c | 138 libdrm/nouveau/nouveau_grobj.h | 48 libdrm/nouveau/nouveau_notifier.c | 146 libdrm/nouveau/nouveau_notifier.h | 63 libdrm/nouveau/nouveau_private.h | 203 libdrm/nouveau/nouveau_pushbuf.c | 276 + libdrm/nouveau/nouveau_pushbuf.h | 160 libdrm/nouveau/nouveau_resource.c | 115 libdrm/nouveau/nouveau_resource.h | 48 linux-core/Makefile.kernel | 4 linux-core/drm_fence.c | 2 linux-core/nouveau_bios.h | 2 linux-core/nouveau_bo.c | 212 linux-core/nouveau_drv.c | 10 linux-core/nouveau_fence.c | 56 linux-core/nouveau_gem.c | 710 +++ linux-core/nouveau_sgdma.c | 13 linux-core/nv50_connector.c | 592 ++ linux-core/nv50_connector.h | 17 linux-core/nv50_crtc.c | 771 ++- linux-core/nv50_crtc.h | 15 linux-core/nv50_cursor.c | 67 linux-core/nv50_cursor.h | 4 linux-core/nv50_dac.c | 163 linux-core/nv50_display.c | 251 - linux-core/nv50_display.h | 29 linux-core/nv50_fb.c | 142 linux-core/nv50_fb.h | 27 linux-core/nv50_fbcon.c | 107 linux-core/nv50_fbcon.h | 5 linux-core/nv50_kms_wrapper.c | 1454 ------ linux-core/nv50_kms_wrapper.h | 95 linux-core/nv50_lut.c | 147 linux-core/nv50_lut.h | 3 linux-core/nv50_output.c | 33 linux-core/nv50_output.h | 26 linux-core/nv50_sor.c | 161 shared-core/nouveau_dma.c | 200 shared-core/nouveau_dma.h | 84 shared-core/nouveau_drm.h | 123 shared-core/nouveau_drv.h | 120 shared-core/nouveau_fifo.c | 115 shared-core/nouveau_irq.c | 50 shared-core/nouveau_mem.c | 250 - shared-core/nouveau_notifier.c | 15 shared-core/nouveau_object.c | 8 shared-core/nouveau_reg.h | 5 shared-core/nouveau_state.c | 71 shared-core/nv04_instmem.c | 12 shared-core/nv50_fifo.c | 8 shared-core/nv50_graph.c | 13 66 files changed, 14593 insertions(+), 2907 deletions(-) New commits: commit 95fc1b0b52e4e5cff86707fb2dedf02078ac4a1f Author: Ben Skeggs <sk...@gm...> Date: Wed Feb 4 12:50:10 2009 +1000 nv50/kms: be less verbose without debug=1 diff --git a/linux-core/nv50_display.c b/linux-core/nv50_display.c index 7534050..e0f9587 100644 --- a/linux-core/nv50_display.c +++ b/linux-core/nv50_display.c @@ -408,16 +408,17 @@ int nv50_display_destroy(struct drm_device *dev) } /* This can be replaced with a real fifo in the future. */ -void nv50_display_command(struct drm_nouveau_private *dev_priv, uint32_t mthd, uint32_t val) +void nv50_display_command(struct drm_nouveau_private *dev_priv, + uint32_t mthd, uint32_t val) { uint32_t counter = 0; -#if 1 - DRM_INFO("mthd 0x%03X val 0x%08X\n", mthd, val); -#endif + DRM_DEBUG("mthd 0x%03X val 0x%08X\n", mthd, val); NV_WRITE(NV50_PDISPLAY_CTRL_VAL, val); - NV_WRITE(NV50_PDISPLAY_CTRL_STATE, NV50_PDISPLAY_CTRL_STATE_PENDING | 0x10000 | mthd | NV50_PDISPLAY_CTRL_STATE_ENABLE); + NV_WRITE(NV50_PDISPLAY_CTRL_STATE, NV50_PDISPLAY_CTRL_STATE_PENDING | + NV50_PDISPLAY_CTRL_STATE_ENABLE | + 0x10000 | mthd); while (NV_READ(NV50_PDISPLAY_CTRL_STATE) & NV50_PDISPLAY_CTRL_STATE_PENDING) { counter++; diff --git a/shared-core/nouveau_irq.c b/shared-core/nouveau_irq.c index 1c53152..c754ba2 100644 --- a/shared-core/nouveau_irq.c +++ b/shared-core/nouveau_irq.c @@ -534,7 +534,7 @@ nouveau_nv50_display_irq_handler(struct drm_device *dev) struct drm_encoder *drm_encoder; struct drm_crtc *drm_crtc; - DRM_INFO("NV50_PDISPLAY_SUPERVISOR - 0x%08X\n", val); + DRM_DEBUG("NV50_PDISPLAY_SUPERVISOR - 0x%08X\n", val); /* vblank interrupts */ if (val & NV50_PDISPLAY_SUPERVISOR_CRTCn) { @@ -618,7 +618,8 @@ 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_DEBUG("NV50_PCONNECTOR_HOTPLUG_CTRL - 0x%08X\n", + NV_READ(NV50_PCONNECTOR_HOTPLUG_CTRL)); /* This seems to be the way to acknowledge an interrupt. */ NV_WRITE(NV50_PCONNECTOR_HOTPLUG_CTRL, 0x7FFF7FFF); commit 15ed426dd42c51c8a53eaf24a8ee650b4cd2b148 Author: Ben Skeggs <sk...@gm...> Date: Wed Feb 4 12:22:03 2009 +1000 nv50/kms: use DRM_DEBUG diff --git a/linux-core/nv50_connector.c b/linux-core/nv50_connector.c index 0ecae2f..9836e1b 100644 --- a/linux-core/nv50_connector.c +++ b/linux-core/nv50_connector.c @@ -94,7 +94,7 @@ static int nv50_connector_hpd_detect(struct nv50_connector *connector) /* Assume connected for the moment. */ if (connector->base.connector_type == DRM_MODE_CONNECTOR_LVDS) { - NV50_DEBUG("LVDS is defaulting to connected for the moment.\n"); + DRM_DEBUG("LVDS is defaulting to connected for the moment.\n"); return 1; } @@ -116,9 +116,9 @@ static int nv50_connector_hpd_detect(struct nv50_connector *connector) present = 1; if (present) - NV50_DEBUG("Hotplug detect returned positive for bus %d\n", connector->bus); + DRM_DEBUG("Hotplug detect returned positive for bus %d\n", connector->bus); else - NV50_DEBUG("Hotplug detect returned negative for bus %d\n", connector->bus); + DRM_DEBUG("Hotplug detect returned negative for bus %d\n", connector->bus); return present; } @@ -148,7 +148,7 @@ static int nv50_connector_i2c_detect(struct nv50_connector *connector) return -EINVAL; ret = i2c_transfer(&connector->i2c_chan->adapter, msgs, 2); - NV50_DEBUG("I2C detect returned %d\n", ret); + DRM_DEBUG("I2C detect returned %d\n", ret); if (ret == 2) return true; @@ -162,7 +162,7 @@ static void nv50_connector_destroy(struct drm_connector *drm_connector) struct drm_device *dev = connector->base.dev; struct nv50_display *display = nv50_get_display(dev); - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (!display || !connector) return; @@ -336,7 +336,7 @@ static void nv50_connector_fill_modes(struct drm_connector *drm_connector, uint3 struct drm_display_mode *mode, *t; struct edid *edid = NULL; - NV50_DEBUG("%s\n", drm_get_connector_name(drm_connector)); + DRM_DEBUG("%s\n", drm_get_connector_name(drm_connector)); /* set all modes to the unverified state */ list_for_each_entry_safe(mode, t, &drm_connector->modes, head) mode->status = MODE_UNVERIFIED; @@ -345,9 +345,9 @@ static void nv50_connector_fill_modes(struct drm_connector *drm_connector, uint3 connected = true; if (connected) - NV50_DEBUG("%s is connected\n", drm_get_connector_name(drm_connector)); + DRM_DEBUG("%s is connected\n", drm_get_connector_name(drm_connector)); else - NV50_DEBUG("%s is disconnected\n", drm_get_connector_name(drm_connector)); + DRM_DEBUG("%s is disconnected\n", drm_get_connector_name(drm_connector)); /* Not all connnectors have an i2c channel. */ if (connected && connector->i2c_chan) @@ -403,7 +403,7 @@ static void nv50_connector_fill_modes(struct drm_connector *drm_connector, uint3 struct drm_display_mode *stdmode; struct nv50_output *output; - NV50_DEBUG("No valid modes on %s\n", drm_get_connector_name(drm_connector)); + DRM_DEBUG("No valid modes on %s\n", drm_get_connector_name(drm_connector)); /* Making up native modes for LVDS is a bad idea. */ if (drm_connector->connector_type == DRM_MODE_CONNECTOR_LVDS) @@ -431,7 +431,7 @@ static void nv50_connector_fill_modes(struct drm_connector *drm_connector, uint3 drm_mode_sort(&drm_connector->modes); - NV50_DEBUG("Probed modes for %s\n", drm_get_connector_name(drm_connector)); + DRM_DEBUG("Probed modes for %s\n", drm_get_connector_name(drm_connector)); list_for_each_entry_safe(mode, t, &drm_connector->modes, head) { mode->vrefresh = drm_mode_vrefresh(mode); @@ -560,7 +560,7 @@ int nv50_connector_create(struct drm_device *dev, int bus, int i2c_index, int ty struct nv50_display *display = NULL; int i; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); display = nv50_get_display(dev); if (!display || type == DRM_MODE_CONNECTOR_Unknown) diff --git a/linux-core/nv50_crtc.c b/linux-core/nv50_crtc.c index 4908f1d..009219a 100644 --- a/linux-core/nv50_crtc.c +++ b/linux-core/nv50_crtc.c @@ -32,7 +32,7 @@ static int nv50_crtc_validate_mode(struct nv50_crtc *crtc, struct drm_display_mode *mode) { - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (mode->clock > 400000) return MODE_CLOCK_HIGH; @@ -48,7 +48,7 @@ static int nv50_crtc_set_mode(struct nv50_crtc *crtc, struct drm_display_mode *m struct drm_display_mode *hw_mode = crtc->mode; uint8_t rval; - NV50_DEBUG("index %d\n", crtc->index); + DRM_DEBUG("index %d\n", crtc->index); if (!mode) { DRM_ERROR("No mode\n"); @@ -73,8 +73,8 @@ static int nv50_crtc_execute_mode(struct nv50_crtc *crtc) uint32_t hunk1, vunk1, vunk2a, vunk2b; uint32_t offset = crtc->index * 0x400; - NV50_DEBUG("index %d\n", crtc->index); - NV50_DEBUG("%s native mode\n", crtc->use_native_mode ? "using" : "not using"); + DRM_DEBUG("index %d\n", crtc->index); + DRM_DEBUG("%s native mode\n", crtc->use_native_mode ? "using" : "not using"); if (crtc->use_native_mode) mode = crtc->native_mode; @@ -138,7 +138,7 @@ static int nv50_crtc_set_fb(struct nv50_crtc *crtc) struct drm_framebuffer *drm_fb = crtc->base.fb; uint32_t offset = crtc->index * 0x400; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); OUT_MODE(NV50_CRTC0_FB_SIZE + offset, drm_fb->height << 16 | drm_fb->width); @@ -171,8 +171,8 @@ static int nv50_crtc_blank(struct nv50_crtc *crtc, bool blanked) struct drm_nouveau_private *dev_priv = crtc->base.dev->dev_private; uint32_t offset = crtc->index * 0x400; - NV50_DEBUG("index %d\n", crtc->index); - NV50_DEBUG("%s\n", blanked ? "blanked" : "unblanked"); + DRM_DEBUG("index %d\n", crtc->index); + DRM_DEBUG("%s\n", blanked ? "blanked" : "unblanked"); if (blanked) { crtc->cursor->hide(crtc); @@ -222,7 +222,7 @@ static int nv50_crtc_set_dither(struct nv50_crtc *crtc) struct drm_nouveau_private *dev_priv = crtc->base.dev->dev_private; uint32_t offset = crtc->index * 0x400; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); OUT_MODE(NV50_CRTC0_DITHERING_CTRL + offset, crtc->use_dithering ? NV50_CRTC0_DITHERING_CTRL_ON : NV50_CRTC0_DITHERING_CTRL_OFF); @@ -253,7 +253,7 @@ static int nv50_crtc_set_scale(struct nv50_crtc *crtc) uint32_t offset = crtc->index * 0x400; uint32_t outX, outY; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); switch (crtc->requested_scaling_mode) { case DRM_MODE_SCALE_ASPECT: @@ -303,7 +303,7 @@ static int nv50_crtc_calc_clock(struct nv50_crtc *crtc, int delta, bestdelta = INT_MAX; int bestclk = 0; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (crtc->use_native_mode) mode = crtc->native_mode; @@ -404,7 +404,7 @@ static int nv50_crtc_set_clock(struct nv50_crtc *crtc) uint32_t reg1 = NV_READ(pll_reg + 4); uint32_t reg2 = NV_READ(pll_reg + 8); - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); NV_WRITE(pll_reg, NV50_PDISPLAY_CRTC_CLK_CLK_CTRL1_CONNECTED | 0x10000011); @@ -415,7 +415,7 @@ static int nv50_crtc_set_clock(struct nv50_crtc *crtc) if (!nv50_crtc_calc_clock(crtc, &N1, &N2, &M1, &M2, &log2P)) return -EINVAL; - NV50_DEBUG("N1 %d N2 %d M1 %d M2 %d log2P %d\n", N1, N2, M1, M2, log2P); + DRM_DEBUG("N1 %d N2 %d M1 %d M2 %d log2P %d\n", N1, N2, M1, M2, log2P); reg1 |= (M1 << 16) | N1; reg2 |= (log2P << 28) | (M2 << 16) | N2; @@ -430,7 +430,7 @@ static int nv50_crtc_set_clock_mode(struct nv50_crtc *crtc) { struct drm_nouveau_private *dev_priv = crtc->base.dev->dev_private; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); /* This acknowledges a clock request. */ NV_WRITE(NV50_PDISPLAY_CRTC_CLK_CLK_CTRL2(crtc->index), 0); @@ -442,7 +442,7 @@ static void nv50_crtc_destroy(struct drm_crtc *drm_crtc) { struct nv50_crtc *crtc = to_nv50_crtc(drm_crtc); - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (!crtc) return; @@ -533,7 +533,7 @@ int nv50_crtc_set_config(struct drm_mode_set *set) bool switch_fb = false; bool modeset = false; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); /* * Supported operations: @@ -991,7 +991,7 @@ int nv50_crtc_create(struct drm_device *dev, int index) struct nv50_crtc *crtc = NULL; struct nv50_display *display = NULL; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); display = nv50_get_display(dev); if (!display) diff --git a/linux-core/nv50_cursor.c b/linux-core/nv50_cursor.c index 5657a26..f0ac73b 100644 --- a/linux-core/nv50_cursor.c +++ b/linux-core/nv50_cursor.c @@ -32,7 +32,7 @@ static int nv50_cursor_enable(struct nv50_crtc *crtc) { struct drm_nouveau_private *dev_priv = crtc->base.dev->dev_private; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); NV_WRITE(NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(crtc->index), 0x2000); while(NV_READ(NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(crtc->index)) & NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS_MASK); @@ -50,7 +50,7 @@ static int nv50_cursor_disable(struct nv50_crtc *crtc) { struct drm_nouveau_private *dev_priv = crtc->base.dev->dev_private; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); NV_WRITE(NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(crtc->index), 0); while(NV_READ(NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(crtc->index)) & NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS_MASK); @@ -66,7 +66,7 @@ static int nv50_cursor_show(struct nv50_crtc *crtc) struct drm_nouveau_private *dev_priv = crtc->base.dev->dev_private; uint32_t offset = crtc->index * 0x400; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); /* Better not show the cursor when we have none. */ /* TODO: is cursor offset actually set? */ @@ -86,7 +86,7 @@ static int nv50_cursor_hide(struct nv50_crtc *crtc) struct drm_nouveau_private *dev_priv = crtc->base.dev->dev_private; uint32_t offset = crtc->index * 0x400; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); OUT_MODE(NV50_CRTC0_CURSOR_CTRL + offset, NV50_CRTC0_CURSOR_CTRL_HIDE); @@ -110,7 +110,7 @@ static int nv50_cursor_set_offset(struct nv50_crtc *crtc) struct drm_nouveau_private *dev_priv = crtc->base.dev->dev_private; struct nouveau_gem_object *ngem = nouveau_gem_object(crtc->cursor->gem); - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (ngem) { OUT_MODE(NV50_CRTC0_CURSOR_OFFSET + crtc->index * 0x400, @@ -141,7 +141,7 @@ nv50_cursor_set_bo(struct nv50_crtc *crtc, struct drm_gem_object *gem) int nv50_cursor_create(struct nv50_crtc *crtc) { - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (!crtc) return -EINVAL; @@ -166,7 +166,7 @@ int nv50_cursor_destroy(struct nv50_crtc *crtc) { int rval = 0; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (!crtc) return -EINVAL; diff --git a/linux-core/nv50_dac.c b/linux-core/nv50_dac.c index f09c5f4..0404aac 100644 --- a/linux-core/nv50_dac.c +++ b/linux-core/nv50_dac.c @@ -29,7 +29,7 @@ static int nv50_dac_validate_mode(struct nv50_output *output, struct drm_display_mode *mode) { - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (mode->clock > 400000) return MODE_CLOCK_HIGH; @@ -50,10 +50,10 @@ static int nv50_dac_execute_mode(struct nv50_output *output, bool disconnect) uint32_t mode_ctl = NV50_DAC_MODE_CTRL_OFF; uint32_t mode_ctl2 = 0; - NV50_DEBUG("or %d\n", output->or); + DRM_DEBUG("or %d\n", output->or); if (disconnect) { - NV50_DEBUG("Disconnecting DAC\n"); + DRM_DEBUG("Disconnecting DAC\n"); OUT_MODE(NV50_DAC0_MODE_CTRL + offset, mode_ctl); return 0; } @@ -90,7 +90,7 @@ static int nv50_dac_set_clock_mode(struct nv50_output *output) { struct drm_nouveau_private *dev_priv = output->base.dev->dev_private; - NV50_DEBUG("or %d\n", output->or); + DRM_DEBUG("or %d\n", output->or); NV_WRITE(NV50_PDISPLAY_DAC_CLK_CLK_CTRL2(output->or), 0); @@ -103,7 +103,7 @@ static int nv50_dac_set_power_mode(struct nv50_output *output, int mode) uint32_t val; int or = output->or; - NV50_DEBUG("or %d\n", or); + DRM_DEBUG("or %d\n", or); /* wait for it to be done */ while (NV_READ(NV50_PDISPLAY_DAC_REGS_DPMS_CTRL(or)) & NV50_PDISPLAY_DAC_REGS_DPMS_CTRL_PENDING); @@ -150,10 +150,10 @@ static int nv50_dac_detect(struct nv50_output *output) /* Use bios provided value if possible. */ if (dev_priv->bios.dactestval) { load_pattern = dev_priv->bios.dactestval; - NV50_DEBUG("Using bios provided load_pattern of %d\n", load_pattern); + DRM_DEBUG("Using bios provided load_pattern of %d\n", load_pattern); } else { load_pattern = 340; - NV50_DEBUG("Using default load_pattern of %d\n", load_pattern); + DRM_DEBUG("Using default load_pattern of %d\n", load_pattern); } NV_WRITE(NV50_PDISPLAY_DAC_REGS_LOAD_CTRL(or), NV50_PDISPLAY_DAC_REGS_LOAD_CTRL_ACTIVE | load_pattern); @@ -167,9 +167,9 @@ static int nv50_dac_detect(struct nv50_output *output) present = 1; if (present) - NV50_DEBUG("Load was detected on output with or %d\n", or); + DRM_DEBUG("Load was detected on output with or %d\n", or); else - NV50_DEBUG("Load was not detected on output with or %d\n", or); + DRM_DEBUG("Load was not detected on output with or %d\n", or); return present; } @@ -178,7 +178,7 @@ static void nv50_dac_destroy(struct drm_encoder *drm_encoder) { struct nv50_output *output = to_nv50_output(drm_encoder); - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (!drm_encoder) return; @@ -197,7 +197,7 @@ int nv50_dac_create(struct drm_device *dev, struct dcb_entry *entry) { struct nv50_output *output = NULL; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); DRM_INFO("Detected a DAC output\n"); output = kzalloc(sizeof(*output), GFP_KERNEL); diff --git a/linux-core/nv50_display.c b/linux-core/nv50_display.c index de2060e..7534050 100644 --- a/linux-core/nv50_display.c +++ b/linux-core/nv50_display.c @@ -38,7 +38,7 @@ static int nv50_display_pre_init(struct nv50_display *display) int i; uint32_t ram_amount; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); NV_WRITE(0x00610184, NV_READ(0x00614004)); /* @@ -74,7 +74,7 @@ static int nv50_display_pre_init(struct nv50_display *display) NV_WRITE(NV50_PDISPLAY_UNK_380, 0); /* RAM is clamped to 256 MiB. */ ram_amount = nouveau_mem_fb_amount(display->dev); - NV50_DEBUG("ram_amount %d\n", ram_amount); + DRM_DEBUG("ram_amount %d\n", ram_amount); if (ram_amount > 256*1024*1024) ram_amount = 256*1024*1024; NV_WRITE(NV50_PDISPLAY_RAM_AMOUNT, ram_amount - 1); @@ -92,7 +92,7 @@ static int nv50_display_init(struct nv50_display *display) struct drm_nouveau_private *dev_priv = dev->dev_private; uint32_t val; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); /* The precise purpose is unknown, i suspect it has something to do with text mode. */ if (NV_READ(NV50_PDISPLAY_SUPERVISOR) & 0x100) { @@ -142,7 +142,7 @@ static int nv50_display_disable(struct nv50_display *display) struct drm_crtc *drm_crtc; int i; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); list_for_each_entry(drm_crtc, &dev->mode_config.crtc_list, head) { struct nv50_crtc *crtc = to_nv50_crtc(drm_crtc); @@ -193,7 +193,7 @@ static int nv50_display_update(struct nv50_display *display) struct drm_device *dev = display->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); OUT_MODE(NV50_UPDATE_DISPLAY, 0); @@ -277,7 +277,7 @@ int nv50_display_create(struct drm_device *dev) uint32_t bus_digital = 0, bus_analog = 0; int ret, i; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); display = kzalloc(sizeof(*display), GFP_KERNEL); if (!display) @@ -394,7 +394,7 @@ int nv50_display_destroy(struct drm_device *dev) struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_display *display = nv50_get_display(dev); - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (display->init_done) display->disable(display); diff --git a/linux-core/nv50_display.h b/linux-core/nv50_display.h index ccba14a..a7bec9a 100644 --- a/linux-core/nv50_display.h +++ b/linux-core/nv50_display.h @@ -34,9 +34,6 @@ #include "nouveau_reg.h" #include "nv50_display_commands.h" -/* for convience, so you can see through the trees. */ -#define NV50_DEBUG DRM_ERROR - struct nv50_crtc; struct nv50_output; struct nv50_connector; diff --git a/linux-core/nv50_fbcon.c b/linux-core/nv50_fbcon.c index ab2b5e5..20aa16f 100644 --- a/linux-core/nv50_fbcon.c +++ b/linux-core/nv50_fbcon.c @@ -86,7 +86,7 @@ static int nv50_fbcon_check_var(struct fb_var_screeninfo *var, struct fb_info *i struct drm_framebuffer *drm_fb = par->fb; int depth; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (!var || !drm_fb || !info) { DRM_ERROR("No var, drm_fb or info\n"); @@ -179,7 +179,7 @@ static int nv50_fbcon_set_par(struct fb_info *info) int rval; bool crtc_used[2] = {false, false}; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (!info) { DRM_ERROR("No fb_info\n"); diff --git a/linux-core/nv50_lut.c b/linux-core/nv50_lut.c index 3f9ad8b..a3ed2f8 100644 --- a/linux-core/nv50_lut.c +++ b/linux-core/nv50_lut.c @@ -34,7 +34,7 @@ static int nv50_lut_alloc(struct nv50_crtc *crtc) struct drm_device *dev = crtc->base.dev; int ret; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); ret = drm_buffer_object_create(dev, 4096, drm_bo_type_kernel, DRM_BO_FLAG_MEM_VRAM | @@ -57,7 +57,7 @@ static int nv50_lut_alloc(struct nv50_crtc *crtc) static int nv50_lut_free(struct nv50_crtc *crtc) { - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (crtc->lut->bo) { drm_bo_kunmap(&crtc->lut->kmap); @@ -75,7 +75,7 @@ static int nv50_lut_set(struct nv50_crtc *crtc, uint32_t index = 0, i; void __iomem *lut; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (!crtc->lut || !crtc->lut->bo) { DRM_ERROR("Something wrong with the LUT\n"); @@ -127,7 +127,7 @@ int nv50_lut_create(struct nv50_crtc *crtc) { int rval = 0; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (!crtc) return -EINVAL; @@ -161,7 +161,7 @@ int nv50_lut_destroy(struct nv50_crtc *crtc) { int rval = 0; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (!crtc) return -EINVAL; diff --git a/linux-core/nv50_sor.c b/linux-core/nv50_sor.c index bb0ad9d..544af86 100644 --- a/linux-core/nv50_sor.c +++ b/linux-core/nv50_sor.c @@ -29,7 +29,7 @@ static int nv50_sor_validate_mode(struct nv50_output *output, struct drm_display_mode *mode) { - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (mode->clock > 165000) /* no dual link until we figure it out completely */ return MODE_CLOCK_HIGH; @@ -54,10 +54,10 @@ static int nv50_sor_execute_mode(struct nv50_output *output, bool disconnect) uint32_t offset = output->or * 0x40; uint32_t mode_ctl = NV50_SOR_MODE_CTRL_OFF; - NV50_DEBUG("or %d\n", output->or); + DRM_DEBUG("or %d\n", output->or); if (disconnect) { - NV50_DEBUG("Disconnecting SOR\n"); + DRM_DEBUG("Disconnecting SOR\n"); OUT_MODE(NV50_SOR0_MODE_CTRL + offset, mode_ctl); return 0; } @@ -96,7 +96,7 @@ static int nv50_sor_set_clock_mode(struct nv50_output *output) uint32_t limit = 165000; struct drm_display_mode *mode; - NV50_DEBUG("or %d\n", output->or); + DRM_DEBUG("or %d\n", output->or); /* We don't yet know what to do, if anything at all. */ if (output->base.encoder_type == DRM_MODE_ENCODER_LVDS) @@ -120,7 +120,7 @@ static int nv50_sor_set_power_mode(struct nv50_output *output, int mode) uint32_t val; int or = output->or; - NV50_DEBUG("or %d\n", output->or); + DRM_DEBUG("or %d\n", output->or); /* wait for it to be done */ while (NV_READ(NV50_PDISPLAY_SOR_REGS_DPMS_CTRL(or)) & NV50_PDISPLAY_SOR_REGS_DPMS_CTRL_PENDING); @@ -141,7 +141,7 @@ static void nv50_sor_destroy(struct drm_encoder *drm_encoder) { struct nv50_output *output = to_nv50_output(drm_encoder); - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); if (!drm_encoder) return; @@ -162,7 +162,7 @@ int nv50_sor_create(struct drm_device *dev, struct dcb_entry *entry) struct nv50_output *output = NULL; int type; - NV50_DEBUG("\n"); + DRM_DEBUG("\n"); switch (entry->type) { case DCB_OUTPUT_TMDS: diff --git a/shared-core/nouveau_irq.c b/shared-core/nouveau_irq.c index 7685bb0..1c53152 100644 --- a/shared-core/nouveau_irq.c +++ b/shared-core/nouveau_irq.c @@ -546,7 +546,7 @@ nouveau_nv50_display_irq_handler(struct drm_device *dev) 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); + DRM_DEBUG("state %d\n", state); /* Set pll */ if (state == 2) { @@ -582,7 +582,7 @@ nouveau_nv50_display_irq_handler(struct drm_device *dev) if (clock_change) crtc->set_clock(crtc); - NV50_DEBUG("index %d clock_change %d clock_ack %d\n", crtc_index, clock_change, clock_ack); + DRM_DEBUG("index %d clock_change %d clock_ack %d\n", crtc_index, clock_change, clock_ack); if (!clock_ack) continue; commit 988b805fd6588bc225e082b58ed852b2401b1da2 Author: Ben Skeggs <sk...@gm...> Date: Wed Feb 4 12:17:26 2009 +1000 nv50/kms: oops, re-enable fbcon unregister, got disabled while debugging diff --git a/linux-core/nv50_fbcon.c b/linux-core/nv50_fbcon.c index 92a1c94..ab2b5e5 100644 --- a/linux-core/nv50_fbcon.c +++ b/linux-core/nv50_fbcon.c @@ -606,7 +606,7 @@ int nv50_fbcon_destroy(struct drm_device *dev) return -EINVAL; } -// unregister_framebuffer(info); + unregister_framebuffer(info); if (fb->kmap.virtual) drm_bo_kunmap(&fb->kmap); @@ -616,7 +616,7 @@ int nv50_fbcon_destroy(struct drm_device *dev) mutex_unlock(&dev->struct_mutex); } -// framebuffer_release(info); + framebuffer_release(info); return 0; } commit bf8181b78ad85e20868b1900a20c0505c6567950 Author: Ben Skeggs <sk...@gm...> Date: Wed Feb 4 12:11:26 2009 +1000 nv50/kms: store dcb entry ptr & or in encoder struct, remove nv50_output.h diff --git a/linux-core/Makefile.kernel b/linux-core/Makefile.kernel index e566685..d17bf0f 100644 --- a/linux-core/Makefile.kernel +++ b/linux-core/Makefile.kernel @@ -39,7 +39,7 @@ nouveau-objs := nouveau_drv.o nouveau_state.o nouveau_fifo.o nouveau_mem.o \ nv40_graph.o nv50_graph.o \ nv04_instmem.o nv50_instmem.o \ nouveau_bios.o \ - nv50_crtc.o nv50_cursor.o nv50_lut.o nv50_output.o nv50_sor.o nv50_dac.o nv50_connector.o nv50_i2c.o nv50_display.o \ + nv50_crtc.o nv50_cursor.o nv50_lut.o nv50_sor.o nv50_dac.o nv50_connector.o nv50_i2c.o nv50_display.o \ nv50_fbcon.o radeon-objs := radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o radeon_irq.o r300_cmdbuf.o radeon_gem.o \ radeon_buffer.o radeon_fence.o atom.o radeon_display.o radeon_atombios.o radeon_i2c.o radeon_connectors.o radeon_cs.o \ diff --git a/linux-core/nv50_connector.c b/linux-core/nv50_connector.c index fd6e90e..0ecae2f 100644 --- a/linux-core/nv50_connector.c +++ b/linux-core/nv50_connector.c @@ -61,7 +61,7 @@ static struct nv50_output *nv50_connector_to_output(struct nv50_connector *conne list_for_each_entry(drm_encoder, &dev->mode_config.encoder_list, head) { struct nv50_output *output = to_nv50_output(drm_encoder); - if (connector->bus != output->bus) + if (connector->bus != output->dcb_entry->bus) continue; if (digital) { diff --git a/linux-core/nv50_dac.c b/linux-core/nv50_dac.c index 80767db..f09c5f4 100644 --- a/linux-core/nv50_dac.c +++ b/linux-core/nv50_dac.c @@ -46,11 +46,11 @@ static int nv50_dac_execute_mode(struct nv50_output *output, bool disconnect) struct drm_nouveau_private *dev_priv = drm_encoder->dev->dev_private; struct nv50_crtc *crtc = to_nv50_crtc(drm_encoder->crtc); struct drm_display_mode *desired_mode = NULL; - uint32_t offset = nv50_output_or_offset(output) * 0x80; + uint32_t offset = output->or * 0x80; uint32_t mode_ctl = NV50_DAC_MODE_CTRL_OFF; uint32_t mode_ctl2 = 0; - NV50_DEBUG("or %d\n", nv50_output_or_offset(output)); + NV50_DEBUG("or %d\n", output->or); if (disconnect) { NV50_DEBUG("Disconnecting DAC\n"); @@ -90,9 +90,9 @@ static int nv50_dac_set_clock_mode(struct nv50_output *output) { struct drm_nouveau_private *dev_priv = output->base.dev->dev_private; - NV50_DEBUG("or %d\n", nv50_output_or_offset(output)); + NV50_DEBUG("or %d\n", output->or); - NV_WRITE(NV50_PDISPLAY_DAC_CLK_CLK_CTRL2(nv50_output_or_offset(output)), 0); + NV_WRITE(NV50_PDISPLAY_DAC_CLK_CLK_CTRL2(output->or), 0); return 0; } @@ -101,7 +101,7 @@ static int nv50_dac_set_power_mode(struct nv50_output *output, int mode) { struct drm_nouveau_private *dev_priv = output->base.dev->dev_private; uint32_t val; - int or = nv50_output_or_offset(output); + int or = output->or; NV50_DEBUG("or %d\n", or); @@ -137,9 +137,9 @@ static int nv50_dac_set_power_mode(struct nv50_output *output, int mode) static int nv50_dac_detect(struct nv50_output *output) { struct drm_nouveau_private *dev_priv = output->base.dev->dev_private; - int or = nv50_output_or_offset(output); bool present = 0; uint32_t dpms_state, load_pattern, load_state; + int or = output->or; NV_WRITE(NV50_PDISPLAY_DAC_REGS_CLK_CTRL1(or), 0x00000001); dpms_state = NV_READ(NV50_PDISPLAY_DAC_REGS_DPMS_CTRL(or)); @@ -193,27 +193,12 @@ static const struct drm_encoder_funcs nv50_dac_encoder_funcs = { .destroy = nv50_dac_destroy, }; -int nv50_dac_create(struct drm_device *dev, int dcb_entry) +int nv50_dac_create(struct drm_device *dev, struct dcb_entry *entry) { - struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_output *output = NULL; - struct nv50_display *display = NULL; - struct dcb_entry *entry = NULL; NV50_DEBUG("\n"); - - display = nv50_get_display(dev); - entry = &dev_priv->dcb_table.entry[dcb_entry]; - if (!display || dcb_entry >= dev_priv->dcb_table.entries) - return -EINVAL; - - switch (entry->type) { - case DCB_OUTPUT_ANALOG: - DRM_INFO("Detected a DAC output\n"); - break; - default: - return -EINVAL; - } + DRM_INFO("Detected a DAC output\n"); output = kzalloc(sizeof(*output), GFP_KERNEL); if (!output) @@ -225,8 +210,8 @@ int nv50_dac_create(struct drm_device *dev, int dcb_entry) return -ENOMEM; } - output->dcb_entry = dcb_entry; - output->bus = entry->bus; + output->dcb_entry = entry; + output->or = ffs(entry->or) - 1; /* Set function pointers. */ output->validate_mode = nv50_dac_validate_mode; diff --git a/linux-core/nv50_display.c b/linux-core/nv50_display.c index 0064e69..de2060e 100644 --- a/linux-core/nv50_display.c +++ b/linux-core/nv50_display.c @@ -275,7 +275,7 @@ int nv50_display_create(struct drm_device *dev) struct nv50_display *display; uint32_t bus_mask = 0; uint32_t bus_digital = 0, bus_analog = 0; - int ret, i, output_index; + int ret, i; NV50_DEBUG("\n"); @@ -310,17 +310,15 @@ int nv50_display_create(struct drm_device *dev) for (i = 0 ; i < dev_priv->dcb_table.entries; i++) { struct dcb_entry *entry = &dev_priv->dcb_table.entry[i]; - output_index = ffs(entry->or) - 1; - switch (entry->type) { case DCB_OUTPUT_TMDS: case DCB_OUTPUT_LVDS: bus_digital |= (1 << entry->bus); - nv50_sor_create(dev, i); + nv50_sor_create(dev, entry); break; case DCB_OUTPUT_ANALOG: bus_analog |= (1 << entry->bus); - nv50_dac_create(dev, i); + nv50_dac_create(dev, entry); break; default: break; diff --git a/linux-core/nv50_output.c b/linux-core/nv50_output.c deleted file mode 100644 index 167504b..0000000 --- a/linux-core/nv50_output.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2008 Maarten Maathuis. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial - * portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - */ - -#include "nv50_output.h" - -int nv50_output_or_offset(struct nv50_output *output) -{ - struct drm_nouveau_private *dev_priv = output->base.dev->dev_private; - return ffs(dev_priv->dcb_table.entry[output->dcb_entry].or) - 1; -} diff --git a/linux-core/nv50_output.h b/linux-core/nv50_output.h index 0181f0b..3c5c1c0 100644 --- a/linux-core/nv50_output.h +++ b/linux-core/nv50_output.h @@ -32,8 +32,8 @@ struct nv50_output { struct drm_encoder base; - int bus; - int dcb_entry; + struct dcb_entry *dcb_entry; + int or; struct drm_display_mode *native_mode; @@ -46,8 +46,7 @@ struct nv50_output { }; #define to_nv50_output(x) container_of((x), struct nv50_output, base) -int nv50_output_or_offset(struct nv50_output *output); -int nv50_sor_create(struct drm_device *dev, int dcb_entry); -int nv50_dac_create(struct drm_device *dev, int dcb_entry); +int nv50_sor_create(struct drm_device *dev, struct dcb_entry *entry); +int nv50_dac_create(struct drm_device *dev, struct dcb_entry *entry); #endif /* __NV50_OUTPUT_H__ */ diff --git a/linux-core/nv50_sor.c b/linux-core/nv50_sor.c index 2d59bb1..bb0ad9d 100644 --- a/linux-core/nv50_sor.c +++ b/linux-core/nv50_sor.c @@ -51,12 +51,10 @@ static int nv50_sor_execute_mode(struct nv50_output *output, bool disconnect) struct drm_nouveau_private *dev_priv = drm_encoder->dev->dev_private; struct nv50_crtc *crtc = to_nv50_crtc(drm_encoder->crtc); struct drm_display_mode *desired_mode = NULL; - - uint32_t offset = nv50_output_or_offset(output) * 0x40; - + uint32_t offset = output->or * 0x40; uint32_t mode_ctl = NV50_SOR_MODE_CTRL_OFF; - NV50_DEBUG("or %d\n", nv50_output_or_offset(output)); + NV50_DEBUG("or %d\n", output->or); if (disconnect) { NV50_DEBUG("Disconnecting SOR\n"); @@ -98,7 +96,7 @@ static int nv50_sor_set_clock_mode(struct nv50_output *output) uint32_t limit = 165000; struct drm_display_mode *mode; - NV50_DEBUG("or %d\n", nv50_output_or_offset(output)); + NV50_DEBUG("or %d\n", output->or); /* We don't yet know what to do, if anything at all. */ if (output->base.encoder_type == DRM_MODE_ENCODER_LVDS) @@ -111,7 +109,7 @@ static int nv50_sor_set_clock_mode(struct nv50_output *output) /* 0x70000 was a late addition to nv, mentioned as fixing tmds initialisation on certain gpu's. */ /* I presume it's some kind of clock setting, but what precisely i do not know. */ - NV_WRITE(NV50_PDISPLAY_SOR_CLK_CLK_CTRL2(nv50_output_or_offset(output)), 0x70000 | ((mode->clock > limit) ? 0x101 : 0)); + NV_WRITE(NV50_PDISPLAY_SOR_CLK_CLK_CTRL2(output->or), 0x70000 | ((mode->clock > limit) ? 0x101 : 0)); return 0; } @@ -120,9 +118,9 @@ static int nv50_sor_set_power_mode(struct nv50_output *output, int mode) { struct drm_nouveau_private *dev_priv = output->base.dev->dev_private; uint32_t val; - int or = nv50_output_or_offset(output); + int or = output->or; - NV50_DEBUG("or %d\n", nv50_output_or_offset(output)); + NV50_DEBUG("or %d\n", output->or); /* wait for it to be done */ while (NV_READ(NV50_PDISPLAY_SOR_REGS_DPMS_CTRL(or)) & NV50_PDISPLAY_SOR_REGS_DPMS_CTRL_PENDING); @@ -158,21 +156,14 @@ static const struct drm_encoder_funcs nv50_sor_encoder_funcs = { .destroy = nv50_sor_destroy, }; -int nv50_sor_create(struct drm_device *dev, int dcb_entry) +int nv50_sor_create(struct drm_device *dev, struct dcb_entry *entry) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_output *output = NULL; - struct nv50_display *display = NULL; - struct dcb_entry *entry = NULL; int type; NV50_DEBUG("\n"); - display = nv50_get_display(dev); - entry = &dev_priv->dcb_table.entry[dcb_entry]; - if (!display || dcb_entry >= dev_priv->dcb_table.entries) - return -EINVAL; - switch (entry->type) { case DCB_OUTPUT_TMDS: DRM_INFO("Detected a TMDS output\n"); @@ -196,8 +187,8 @@ int nv50_sor_create(struct drm_device *dev, int dcb_entry) return -ENOMEM; } - output->dcb_entry = dcb_entry; - output->bus = entry->bus; + output->dcb_entry = entry; + output->or = ffs(entry->or) - 1; /* Set function pointers. */ output->validate_mode = nv50_sor_validate_mode; @@ -214,7 +205,7 @@ int nv50_sor_create(struct drm_device *dev, int dcb_entry) /* Some default state, unknown what it precisely means. */ if (output->base.encoder_type == DRM_MODE_ENCODER_TMDS) { - int or = nv50_output_or_offset(output); + int or = output->or; NV_WRITE(NV50_PDISPLAY_SOR_REGS_UNK_00C(or), 0x03010700); NV_WRITE(NV50_PDISPLAY_SOR_REGS_UNK_010(or), 0x0000152f); commit 5923c976fb7f5ac23b67dc60cdd24e65b1359087 Author: Ben Skeggs <sk...@gm...> Date: Wed Feb 4 11:55:09 2009 +1000 nv50/kms: nv50_kms_ -> nv50_ diff --git a/linux-core/nv50_connector.c b/linux-core/nv50_connector.c index d21e882..fd6e90e 100644 --- a/linux-core/nv50_connector.c +++ b/linux-core/nv50_connector.c @@ -176,7 +176,7 @@ static void nv50_connector_destroy(struct drm_connector *drm_connector) } /* These 2 functions wrap the connector properties that deal with multiple encoders per connector. */ -bool nv50_kms_connector_get_digital(struct drm_connector *drm_connector) +bool nv50_connector_get_digital(struct drm_connector *drm_connector) { struct drm_device *dev = drm_connector->dev; @@ -233,7 +233,7 @@ bool nv50_kms_connector_get_digital(struct drm_connector *drm_connector) return false; } -static void nv50_kms_connector_set_digital(struct drm_connector *drm_connector, int digital, bool force) +static void nv50_connector_set_digital(struct drm_connector *drm_connector, int digital, bool force) { struct drm_device *dev = drm_connector->dev; @@ -260,7 +260,7 @@ static void nv50_kms_connector_set_digital(struct drm_connector *drm_connector, } } -void nv50_kms_connector_detect_all(struct drm_device *dev) +void nv50_connector_detect_all(struct drm_device *dev) { struct drm_connector *drm_connector = NULL; @@ -269,7 +269,7 @@ void nv50_kms_connector_detect_all(struct drm_device *dev) } } -static enum drm_connector_status nv50_kms_connector_detect(struct drm_connector *drm_connector) +static enum drm_connector_status nv50_connector_detect(struct drm_connector *drm_connector) { struct drm_device *dev = drm_connector->dev; struct nv50_connector *connector = to_nv50_connector(drm_connector); @@ -289,11 +289,11 @@ static enum drm_connector_status nv50_kms_connector_detect(struct drm_connector i2c_detect = connector->i2c_detect(connector); if (load_detect == 1) { - nv50_kms_connector_set_digital(drm_connector, 0, true); /* analog, forced */ + nv50_connector_set_digital(drm_connector, 0, true); /* analog, forced */ } else if (hpd_detect == 1 && load_detect == 0) { - nv50_kms_connector_set_digital(drm_connector, 1, true); /* digital, forced */ + nv50_connector_set_digital(drm_connector, 1, true); /* digital, forced */ } else { - nv50_kms_connector_set_digital(drm_connector, -1, true); /* unknown, forced */ + nv50_connector_set_digital(drm_connector, -1, true); /* unknown, forced */ } if (hpd_detect == 1 || load_detect == 1 || i2c_detect == 1) @@ -327,7 +327,7 @@ static struct drm_display_mode std_mode[] = { DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1280x1024@75Hz */ }; -static void nv50_kms_connector_fill_modes(struct drm_connector *drm_connector, uint32_t maxX, uint32_t maxY) +static void nv50_connector_fill_modes(struct drm_connector *drm_connector, uint32_t maxX, uint32_t maxY) { struct nv50_connector *connector = to_nv50_connector(drm_connector); struct drm_device *dev = drm_connector->dev; @@ -341,7 +341,7 @@ static void nv50_kms_connector_fill_modes(struct drm_connector *drm_connector, u list_for_each_entry_safe(mode, t, &drm_connector->modes, head) mode->status = MODE_UNVERIFIED; - if (nv50_kms_connector_detect(drm_connector) == connector_status_connected) + if (nv50_connector_detect(drm_connector) == connector_status_connected) connected = true; if (connected) @@ -360,7 +360,7 @@ static void nv50_kms_connector_fill_modes(struct drm_connector *drm_connector, u rval = drm_add_edid_modes(drm_connector, edid); /* Only update when relevant and when detect couldn't determine type. */ - nv50_kms_connector_set_digital(drm_connector, edid->digital ? 1 : 0, false); + nv50_connector_set_digital(drm_connector, edid->digital ? 1 : 0, false); kfree(edid); } @@ -373,7 +373,7 @@ static void nv50_kms_connector_fill_modes(struct drm_connector *drm_connector, u list_for_each_entry_safe(mode, t, &drm_connector->modes, head) { if (mode->status == MODE_OK) { - struct nv50_output *output = connector->to_output(connector, nv50_kms_connector_get_digital(drm_connector)); + struct nv50_output *output = connector->to_output(connector, nv50_connector_get_digital(drm_connector)); mode->status = output->validate_mode(output, mode); /* find native mode, TODO: also check if we actually found one */ @@ -387,7 +387,7 @@ static void nv50_kms_connector_fill_modes(struct drm_connector *drm_connector, u /* revalidate now that we have native mode */ list_for_each_entry_safe(mode, t, &drm_connector->modes, head) { if (mode->status == MODE_OK) { - struct nv50_output *output = connector->to_output(connector, nv50_kms_connector_get_digital(drm_connector)); + struct nv50_output *output = connector->to_output(connector, nv50_connector_get_digital(drm_connector)); mode->status = output->validate_mode(output, mode); } @@ -420,7 +420,7 @@ static void nv50_kms_connector_fill_modes(struct drm_connector *drm_connector, u &drm_connector->modes); /* also add it as native mode */ - output = connector->to_output(connector, nv50_kms_connector_get_digital(drm_connector)); + output = connector->to_output(connector, nv50_connector_get_digital(drm_connector)); if (mode) *output->native_mode = *mode; @@ -442,9 +442,9 @@ static void nv50_kms_connector_fill_modes(struct drm_connector *drm_connector, u } } -static int nv50_kms_connector_set_property(struct drm_connector *drm_connector, - struct drm_property *property, - uint64_t value) +static int nv50_connector_set_property(struct drm_connector *drm_connector, + struct drm_property *property, + uint64_t value) { struct drm_device *dev = drm_connector->dev; struct nv50_connector *connector = to_nv50_connector(drm_connector); @@ -547,10 +547,10 @@ static int nv50_kms_connector_set_property(struct drm_connector *drm_connector, static const struct drm_connector_funcs nv50_connector_funcs = { .save = NULL, .restore = NULL, - .detect = nv50_kms_connector_detect, + .detect = nv50_connector_detect, .destroy = nv50_connector_destroy, - .fill_modes = nv50_kms_connector_fill_modes, - .set_property = nv50_kms_connector_set_property + .fill_modes = nv50_connector_fill_modes, + .set_property = nv50_connector_set_property }; int nv50_connector_create(struct drm_device *dev, int bus, int i2c_index, int type) diff --git a/linux-core/nv50_connector.h b/linux-core/nv50_connector.h index 651de7f..97750f0 100644 --- a/linux-core/nv50_connector.h +++ b/linux-core/nv50_connector.h @@ -47,7 +47,7 @@ struct nv50_connector { #define to_nv50_connector(x) container_of((x), struct nv50_connector, base) int nv50_connector_create(struct drm_device *dev, int bus, int i2c_index, int type); -void nv50_kms_connector_detect_all(struct drm_device *dev); -bool nv50_kms_connector_get_digital(struct drm_connector *drm_connector); +void nv50_connector_detect_all(struct drm_device *dev); +bool nv50_connector_get_digital(struct drm_connector *drm_connector); #endif /* __NV50_CONNECTOR_H__ */ diff --git a/linux-core/nv50_crtc.c b/linux-core/nv50_crtc.c index 74bdba9..4908f1d 100644 --- a/linux-core/nv50_crtc.c +++ b/linux-core/nv50_crtc.c @@ -457,10 +457,10 @@ static void nv50_crtc_destroy(struct drm_crtc *drm_crtc) kfree(crtc); } -static int nv50_kms_crtc_cursor_set(struct drm_crtc *drm_crtc, - struct drm_file *file_priv, - uint32_t buffer_handle, - uint32_t width, uint32_t height) +static int nv50_crtc_cursor_set(struct drm_crtc *drm_crtc, + struct drm_file *file_priv, + uint32_t buffer_handle, + uint32_t width, uint32_t height) { struct drm_device *dev = drm_crtc->dev; struct nv50_crtc *crtc = to_nv50_crtc(drm_crtc); @@ -496,15 +496,15 @@ static int nv50_kms_crtc_cursor_set(struct drm_crtc *drm_crtc, return ret; } -static int nv50_kms_crtc_cursor_move(struct drm_crtc *drm_crtc, int x, int y) +static int nv50_crtc_cursor_move(struct drm_crtc *drm_crtc, int x, int y) { struct nv50_crtc *crtc = to_nv50_crtc(drm_crtc); return crtc->cursor->set_pos(crtc, x, y); } -void nv50_kms_crtc_gamma_set(struct drm_crtc *drm_crtc, u16 *r, u16 *g, u16 *b, - uint32_t size) +void nv50_crtc_gamma_set(struct drm_crtc *drm_crtc, u16 *r, u16 *g, u16 *b, + uint32_t size) { struct nv50_crtc *crtc = to_nv50_crtc(drm_crtc); @@ -514,7 +514,7 @@ void nv50_kms_crtc_gamma_set(struct drm_crtc *drm_crtc, u16 *r, u16 *g, u16 *b, crtc->lut->set(crtc, (uint16_t *)r, (uint16_t *)g, (uint16_t *)b); } -int nv50_kms_crtc_set_config(struct drm_mode_set *set) +int nv50_crtc_set_config(struct drm_mode_set *set) { int rval = 0, i; uint32_t crtc_mask = 0; @@ -604,7 +604,7 @@ int nv50_kms_crtc_set_config(struct drm_mode_set *set) /* This is to ensure it knows the connector subtype. */ drm_connector->funcs->fill_modes(drm_connector, 0, 0); - output = connector->to_output(connector, nv50_kms_connector_get_digital(drm_connector)); + output = connector->to_output(connector, nv50_connector_get_digital(drm_connector)); if (!output) { DRM_ERROR("No output\n"); goto out; @@ -676,7 +676,7 @@ int nv50_kms_crtc_set_config(struct drm_mode_set *set) goto out; } - output = connector->to_output(connector, nv50_kms_connector_get_digital(drm_connector)); + output = connector->to_output(connector, nv50_connector_get_digital(drm_connector)); if (!output) { DRM_ERROR("No output\n"); goto out; @@ -976,13 +976,13 @@ out: return -EINVAL; } -static const struct drm_crtc_funcs nv50_kms_crtc_funcs = { +static const struct drm_crtc_funcs nv50_crtc_funcs = { .save = NULL, .restore = NULL, - .cursor_set = nv50_kms_crtc_cursor_set, - .cursor_move = nv50_kms_crtc_cursor_move, - .gamma_set = nv50_kms_crtc_gamma_set, - .set_config = nv50_kms_crtc_set_config, + .cursor_set = nv50_crtc_cursor_set, + .cursor_move = nv50_crtc_cursor_move, + .gamma_set = nv50_crtc_gamma_set, + .set_config = nv50_crtc_set_config, .destroy = nv50_crtc_destroy, }; @@ -1029,7 +1029,7 @@ int nv50_crtc_create(struct drm_device *dev, int index) crtc->set_clock = nv50_crtc_set_clock; crtc->set_clock_mode = nv50_crtc_set_clock_mode; - drm_crtc_init(dev, &crtc->base, &nv50_kms_crtc_funcs); + drm_crtc_init(dev, &crtc->base, &nv50_crtc_funcs); drm_mode_crtc_set_gamma_size(&crtc->base, 256); nv50_lut_create(crtc); diff --git a/linux-core/nv50_display.c b/linux-core/nv50_display.c index e74fa71..0064e69 100644 --- a/linux-core/nv50_display.c +++ b/linux-core/nv50_display.c @@ -200,58 +200,58 @@ static int nv50_display_update(struct nv50_display *display) return 0; } -/* - * FB functions. - */ - -static void nv50_kms_framebuffer_destroy(struct drm_framebuffer *drm_fb) +static void nv50_user_framebuffer_destroy(struct drm_framebuffer *drm_fb) { struct nv50_framebuffer *fb = to_nv50_framebuffer(drm_fb); + struct drm_device *dev = drm_fb->dev; - drm_gem_object_unreference(fb->gem); - drm_framebuffer_cleanup(&fb->base); + if (drm_fb->fbdev) + DRM_ERROR("radeonfb_remove(dev, drm_fb);\n"); + + if (fb->gem) { + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(fb->gem); + mutex_unlock(&dev->struct_mutex); + } + + drm_framebuffer_cleanup(drm_fb); kfree(fb); } -static int -nv50_kms_framebuffer_create_handle(struct drm_framebuffer *drm_fb, - struct drm_file *file_priv, - unsigned int *handle) +static int nv50_user_framebuffer_create_handle(struct drm_framebuffer *drm_fb, + struct drm_file *file_priv, + unsigned int *handle) { struct nv50_framebuffer *fb = to_nv50_framebuffer(drm_fb); return drm_gem_handle_create(file_priv, fb->gem, handle); } -static const struct drm_framebuffer_funcs nv50_kms_fb_funcs = { - .destroy = nv50_kms_framebuffer_destroy, - .create_handle = nv50_kms_framebuffer_create_handle, +static const struct drm_framebuffer_funcs nv50_framebuffer_funcs = { + .destroy = nv50_user_framebuffer_destroy, + .create_handle = nv50_user_framebuffer_create_handle, }; -/* - * Mode config functions. - */ - struct drm_framebuffer * nv50_framebuffer_create(struct drm_device *dev, struct drm_gem_object *gem, struct drm_mode_fb_cmd *mode_cmd) { - struct nv50_framebuffer *nv50_fb; + struct nv50_framebuffer *fb; - nv50_fb = kzalloc(sizeof(struct nv50_framebuffer), GFP_KERNEL); - if (!nv50_fb) + fb = kzalloc(sizeof(struct nv50_framebuffer), GFP_KERNEL); + if (!fb) return NULL; - drm_framebuffer_init(dev, &nv50_fb->base, &nv50_kms_fb_funcs); - drm_helper_mode_fill_fb_struct(&nv50_fb->base, mode_cmd); + drm_framebuffer_init(dev, &fb->base, &nv50_framebuffer_funcs); + drm_helper_mode_fill_fb_struct(&fb->base, mode_cmd); - nv50_fb->gem = gem; - return &nv50_fb->base; + fb->gem = gem; + return &fb->base; } static struct drm_framebuffer * -nv50_kms_framebuffer_create(struct drm_device *dev, struct drm_file *file_priv, - struct drm_mode_fb_cmd *mode_cmd) +nv50_user_framebuffer_create(struct drm_device *dev, struct drm_file *file_priv, + struct drm_mode_fb_cmd *mode_cmd) { struct drm_gem_object *gem; @@ -259,15 +259,14 @@ nv50_kms_framebuffer_create(struct drm_device *dev, struct drm_file *file_priv, return nv50_framebuffer_create(dev, gem, mode_cmd); } -static int nv50_kms_fb_changed(struct drm_device *dev) +static int nv50_framebuffer_changed(struct drm_device *dev) { return 0; /* not needed until nouveaufb? */ } -static const struct drm_mode_config_funcs nv50_kms_mode_funcs = { - .resize_fb = NULL, - .fb_create = nv50_kms_framebuffer_create, - .fb_changed = nv50_kms_fb_changed, +static const struct drm_mode_config_funcs nv50_mode_config_funcs = { + .fb_create = nv50_user_framebuffer_create, + .fb_changed = nv50_framebuffer_changed, }; int nv50_display_create(struct drm_device *dev) @@ -295,7 +294,7 @@ int nv50_display_create(struct drm_device *dev) dev->mode_config.min_width = 0; dev->mode_config.min_height = 0; - dev->mode_config.funcs = (void *)&nv50_kms_mode_funcs; + dev->mode_config.funcs = (void *)&nv50_mode_config_funcs; dev->mode_config.max_width = 8192; dev->mode_config.max_height = 8192; diff --git a/shared-core/nouveau_irq.c b/shared-core/nouveau_irq.c index 8a9d320..7685bb0 100644 --- a/shared-core/nouveau_irq.c +++ b/shared-core/nouveau_irq.c @@ -624,7 +624,7 @@ nouveau_nv50_i2c_irq_handler(struct drm_device *dev) NV_WRITE(NV50_PCONNECTOR_HOTPLUG_CTRL, 0x7FFF7FFF); /* Do a "dumb" detect all */ - nv50_kms_connector_detect_all(dev); + nv50_connector_detect_all(dev); } irqreturn_t commit cd2a87a6826364d365a53d9591e8f5d2cd68480f Author: Ben Skeggs <sk...@gm...> Date: Wed Feb 4 11:40:17 2009 +1000 nv50/kms: remove the last of nv50_kms_wrapper diff --git a/linux-core/Makefile.kernel b/linux-core/Makefile.kernel index 7a533cc..e566685 100644 --- a/linux-core/Makefile.kernel +++ b/linux-core/Makefile.kernel @@ -40,7 +40,6 @@ nouveau-objs := nouveau_drv.o nouveau_state.o nouveau_fifo.o nouveau_mem.o \ nv04_instmem.o nv50_instmem.o \ nouveau_bios.o \ nv50_crtc.o nv50_cursor.o nv50_lut.o nv50_output.o nv50_sor.o nv50_dac.o nv50_connector.o nv50_i2c.o nv50_display.o \ - nv50_kms_wrapper.o \ nv50_fbcon.o radeon-objs := radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o radeon_irq.o r300_cmdbuf.o radeon_gem.o \ radeon_buffer.o radeon_fence.o atom.o radeon_display.o radeon_atombios.o radeon_i2c.o radeon_connectors.o radeon_cs.o \ diff --git a/linux-core/nv50_connector.c b/linux-core/nv50_connector.c index 52fcdb8..d21e882 100644 --- a/linux-core/nv50_connector.c +++ b/linux-core/nv50_connector.c @@ -24,8 +24,8 @@ * */ +#include "drm_edid.h" #include "nv50_connector.h" -#include "nv50_kms_wrapper.h" static struct nv50_output *nv50_connector_to_output(struct nv50_connector *connector, bool digital) { diff --git a/linux-core/nv50_connector.h b/linux-core/nv50_connector.h index 8081536..651de7f 100644 --- a/linux-core/nv50_connector.h +++ b/linux-core/nv50_connector.h @@ -44,7 +44,10 @@ struct nv50_connector { int (*i2c_detect) (struct nv50_connector *connector); struct nv50_output *(*to_output) (struct nv50_connector *connector, bool digital); }; +#define to_nv50_connector(x) container_of((x), struct nv50_connector, base) int nv50_connector_create(struct drm_device *dev, int bus, int i2c_index, int type); +void nv50_kms_connector_detect_all(struct drm_device *dev); +bool nv50_kms_connector_get_digital(struct drm_connector *drm_connector); #endif /* __NV50_CONNECTOR_H__ */ diff --git a/linux-core/nv50_crtc.c b/linux-core/nv50_crtc.c index 50a41d5..74bdba9 100644 --- a/linux-core/nv50_crtc.c +++ b/linux-core/nv50_crtc.c @@ -28,8 +28,7 @@ #include "nv50_cursor.h" #include "nv50_lut.h" #include "nv50_fb.h" -#include "nv50_kms_wrapper.h" -extern void nv50_kms_mirror_routing(struct drm_device *dev); +#include "nv50_connector.h" static int nv50_crtc_validate_mode(struct nv50_crtc *crtc, struct drm_display_mode *mode) { diff --git a/linux-core/nv50_crtc.h b/linux-core/nv50_crtc.h index e072045..308f064 100644 --- a/linux-core/nv50_crtc.h +++ b/linux-core/nv50_crtc.h @@ -65,6 +65,7 @@ struct nv50_crtc { int (*set_clock_mode) (struct nv50_crtc *crtc); int (*destroy) (struct nv50_crtc *crtc); }; +#define to_nv50_crtc(x) container_of((x), struct nv50_crtc, base) int nv50_crtc_create(struct drm_device *dev, int index); diff --git a/linux-core/nv50_dac.c b/linux-core/nv50_dac.c index a161266..80767db 100644 --- a/linux-core/nv50_dac.c +++ b/linux-core/nv50_dac.c @@ -25,7 +25,6 @@ */ #include "nv50_output.h" -#include "nv50_kms_wrapper.h" static int nv50_dac_validate_mode(struct nv50_output *output, struct drm_display_mode *mode) diff --git a/linux-core/nv50_display.c b/linux-core/nv50_display.c index 42e52c4..e74fa71 100644 --- a/linux-core/nv50_display.c +++ b/linux-core/nv50_display.c @@ -28,7 +28,8 @@ #include "nv50_crtc.h" #include "nv50_output.h" #include "nv50_connector.h" -#include "nv50_kms_wrapper.h" +#include "nv50_fb.h" +#include "drm_crtc_helper.h" static int nv50_display_pre_init(struct nv50_display *display) { @@ -199,22 +200,109 @@ static int nv50_display_update(struct nv50_display *display) return 0; } +/* + * FB functions. + */ + +static void nv50_kms_framebuffer_destroy(struct drm_framebuffer *drm_fb) +{ + struct nv50_framebuffer *fb = to_nv50_framebuffer(drm_fb); + + drm_gem_object_unreference(fb->gem); + drm_framebuffer_cleanup(&fb->base); + kfree(fb); +} + +static int +nv50_kms_framebuffer_create_handle(struct drm_framebuffer *drm_fb, + struct drm_file *file_priv, + unsigned int *handle) +{ + struct nv50_framebuffer *fb = to_nv50_framebuffer(drm_fb); + + return drm_gem_handle_create(file_priv, fb->gem, handle); +} + +static const struct drm_framebuffer_funcs nv50_kms_fb_funcs = { + .destroy = nv50_kms_framebuffer_destroy, + .create_handle = nv50_kms_framebuffer_create_handle, +}; + +/* + * Mode config functions. + */ + +struct drm_framebuffer * +nv50_framebuffer_create(struct drm_device *dev, struct drm_gem_object *gem, + struct drm_mode_fb_cmd *mode_cmd) +{ + struct nv50_framebuffer *nv50_fb; + + nv50_fb = kzalloc(sizeof(struct nv50_framebuffer), GFP_KERNEL); + if (!nv50_fb) + return NULL; + + drm_framebuffer_init(dev, &nv50_fb->base, &nv50_kms_fb_funcs); + drm_helper_mode_fill_fb_struct(&nv50_fb->base, mode_cmd); + + nv50_fb->gem = gem; + return &nv50_fb->base; +} + +static struct drm_framebuffer * +nv50_kms_framebuffer_create(struct drm_device *dev, struct drm_file *file_priv, + struct drm_mode_fb_cmd *mode_cmd) +{ + struct drm_gem_object *gem; + + gem = drm_gem_object_lookup(dev, file_priv, mode_cmd->handle); + return nv50_framebuffer_create(dev, gem, mode_cmd); +} + +static int nv50_kms_fb_changed(struct drm_device *dev) +{ + return 0; /* not needed until nouveaufb? */ +} + +static const struct drm_mode_config_funcs nv50_kms_mode_funcs = { + .resize_fb = NULL, + .fb_create = nv50_kms_framebuffer_create, + .fb_changed = nv50_kms_fb_changed, +}; + int nv50_display_create(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nv50_display *display; - int i, output_index; uint32_t bus_mask = 0; uint32_t bus_digital = 0, bus_analog = 0; + int ret, i, output_index; NV50_DEBUG("\n"); display = kzalloc(sizeof(*display), GFP_KERNEL); if (!display) return -ENOMEM; - dev_priv->display_priv = display; + /* init basic kernel modesetting */ + drm_mode_config_init(dev); + + /* Initialise some optional connector properties. */ + drm_mode_create_scaling_mode_property(dev); + drm_mode_create_dithering_property(dev); + + dev->mode_config.min_width = 0; + dev->mode_config.min_height = 0; + + dev->mode_config.funcs = (void *)&nv50_kms_mode_funcs; + + dev->mode_config.max_width = 8192; + dev->mode_config.max_height = 8192; + + dev->mode_config.fb_base = dev_priv->fb_phys; + + /* Create CRTC objects */ for (i = 0; i < 2; i++) { nv50_crtc_create(dev, i); } @@ -292,6 +380,15 @@ int nv50_display_create(struct drm_device *dev) display->disable = nv50_display_disable; display->update = nv50_display_update; + ret = display->pre_init(display); + if (ret) + return ret; + + ret = display->init(display); + if (ret) + return ret; + + display->update(display); return 0; } @@ -305,6 +402,8 @@ int nv50_display_destroy(struct drm_device *dev) if (display->init_done) display->disable(display); + drm_mode_config_cleanup(dev); + kfree(display); dev_priv->display_priv = NULL; diff --git a/linux-core/nv50_display.h b/linux-core/nv50_display.h index 162413f..ccba14a 100644 --- a/linux-core/nv50_display.h +++ b/linux-core/nv50_display.h @@ -60,4 +60,8 @@ struct nv50_display *nv50_get_display(struct drm_device *dev); int nv50_display_create(struct drm_device *dev); int nv50_display_destroy(struct drm_device *dev); +struct drm_framebuffer * +nv50_framebuffer_create(struct drm_device *, struct drm_gem_object *, + struct drm_mode_fb_cmd *); + #endif /* __NV50_DISPLAY_H__ */ diff --git a/linux-core/nv50_fbcon.c b/linux-core/nv50_fbcon.c index d7b450e..92a1c94 100644 --- a/linux-core/nv50_fbcon.c +++ b/linux-core/nv50_fbcon.c @@ -35,7 +35,13 @@ #include <linux/fb.h> #include <linux/init.h> +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" + #include "nv50_fbcon.h" +#include "nv50_display.h" +#include "nv50_fb.h" static int nv50_fbcon_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, diff --git a/li... [truncated message content] |