* [PATCH 1/4] qxl: drop mode_info.modes & related code. [not found] <1488363154-6889-1-git-send-email-kraxel@redhat.com> @ 2017-03-01 10:12 ` Gerd Hoffmann 2017-03-01 10:12 ` [PATCH 2/4] qxl: limit monitor config read retries Gerd Hoffmann ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: Gerd Hoffmann @ 2017-03-01 10:12 UTC (permalink / raw) To: dri-devel Cc: Gerd Hoffmann, Dave Airlie, David Airlie, open list:DRM DRIVER FOR QXL VIRTUAL GPU, open list very old qxl hardware revisions (predating qxl ksm support by a few years) supported a fixed list of video modes only. The list is still provided by the virtual hardware, for backward compatibility reasons. The qxl kms driver never ever looks at it, except for dumping it to the kernel log at load time in case debug logging is enabled. Drop that pointless code. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- drivers/gpu/drm/qxl/qxl_drv.h | 2 -- drivers/gpu/drm/qxl/qxl_kms.c | 22 ---------------------- 2 files changed, 24 deletions(-) diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h index 0c313e5..fe90b36 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.h +++ b/drivers/gpu/drm/qxl/qxl_drv.h @@ -160,8 +160,6 @@ struct qxl_mman { }; struct qxl_mode_info { - int num_modes; - struct qxl_mode *modes; bool mode_config_initialized; /* pointer to fbdev info structure */ diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c index 2b1e1f3..a9a741c 100644 --- a/drivers/gpu/drm/qxl/qxl_kms.c +++ b/drivers/gpu/drm/qxl/qxl_kms.c @@ -31,19 +31,9 @@ int qxl_log_level; -static void qxl_dump_mode(struct qxl_device *qdev, void *p) -{ - struct qxl_mode *m = p; - DRM_DEBUG_KMS("%d: %dx%d %d bits, stride %d, %dmm x %dmm, orientation %d\n", - m->id, m->x_res, m->y_res, m->bits, m->stride, m->x_mili, - m->y_mili, m->orientation); -} - static bool qxl_check_device(struct qxl_device *qdev) { struct qxl_rom *rom = qdev->rom; - int mode_offset; - int i; if (rom->magic != 0x4f525851) { DRM_ERROR("bad rom signature %x\n", rom->magic); @@ -53,8 +43,6 @@ static bool qxl_check_device(struct qxl_device *qdev) DRM_INFO("Device Version %d.%d\n", rom->id, rom->update_id); DRM_INFO("Compression level %d log level %d\n", rom->compression_level, rom->log_level); - DRM_INFO("Currently using mode #%d, list at 0x%x\n", - rom->mode, rom->modes_offset); DRM_INFO("%d io pages at offset 0x%x\n", rom->num_io_pages, rom->pages_offset); DRM_INFO("%d byte draw area at offset 0x%x\n", @@ -62,14 +50,6 @@ static bool qxl_check_device(struct qxl_device *qdev) qdev->vram_size = rom->surface0_area_size; DRM_INFO("RAM header offset: 0x%x\n", rom->ram_header_offset); - - mode_offset = rom->modes_offset / 4; - qdev->mode_info.num_modes = ((u32 *)rom)[mode_offset]; - DRM_INFO("rom modes offset 0x%x for %d modes\n", rom->modes_offset, - qdev->mode_info.num_modes); - qdev->mode_info.modes = (void *)((uint32_t *)rom + mode_offset + 1); - for (i = 0; i < qdev->mode_info.num_modes; i++) - qxl_dump_mode(qdev, qdev->mode_info.modes + i); return true; } @@ -282,7 +262,5 @@ void qxl_device_fini(struct qxl_device *qdev) iounmap(qdev->ram_header); iounmap(qdev->rom); qdev->rom = NULL; - qdev->mode_info.modes = NULL; - qdev->mode_info.num_modes = 0; qxl_debugfs_remove_files(qdev); } -- 1.8.3.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/4] qxl: limit monitor config read retries [not found] <1488363154-6889-1-git-send-email-kraxel@redhat.com> 2017-03-01 10:12 ` [PATCH 1/4] qxl: drop mode_info.modes & related code Gerd Hoffmann @ 2017-03-01 10:12 ` Gerd Hoffmann 2017-03-01 10:12 ` [PATCH 3/4] qxl: read monitors config at boot Gerd Hoffmann 2017-03-01 10:12 ` [PATCH 4/4] qxl: fix qxl_conn_get_modes Gerd Hoffmann 3 siblings, 0 replies; 5+ messages in thread From: Gerd Hoffmann @ 2017-03-01 10:12 UTC (permalink / raw) To: dri-devel Cc: Gerd Hoffmann, Dave Airlie, David Airlie, open list:DRM DRIVER FOR QXL VIRTUAL GPU, open list When reading the monitor config fails, don't retry forever. If it fails ten times in a row just give up to avoid the driver hangs. Also add a small delay after each attempt, so the host has a chance to complete a partial update. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- drivers/gpu/drm/qxl/qxl_display.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c index 2cd14be..2b99496 100644 --- a/drivers/gpu/drm/qxl/qxl_display.c +++ b/drivers/gpu/drm/qxl/qxl_display.c @@ -157,19 +157,23 @@ static void qxl_update_offset_props(struct qxl_device *qdev) void qxl_display_read_client_monitors_config(struct qxl_device *qdev) { - struct drm_device *dev = &qdev->ddev; - int status; + int status, retries; - status = qxl_display_copy_rom_client_monitors_config(qdev); - while (status == MONITORS_CONFIG_BAD_CRC) { - qxl_io_log(qdev, "failed crc check for client_monitors_config," - " retrying\n"); + for (retries = 0; retries < 10; retries++) { status = qxl_display_copy_rom_client_monitors_config(qdev); + if (status != MONITORS_CONFIG_BAD_CRC) + break; + udelay(5); + } + if (status == MONITORS_CONFIG_BAD_CRC) { + qxl_io_log(qdev, "config: bad crc\n"); + DRM_DEBUG_KMS("ignoring client monitors config: bad crc"); + return; } if (status == MONITORS_CONFIG_UNCHANGED) { - qxl_io_log(qdev, "config unchanged\n"); - DRM_DEBUG("ignoring unchanged client monitors config"); + qxl_io_log(qdev, "config: unchanged\n"); + DRM_DEBUG_KMS("ignoring client monitors config: unchanged"); return; } -- 1.8.3.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/4] qxl: read monitors config at boot [not found] <1488363154-6889-1-git-send-email-kraxel@redhat.com> 2017-03-01 10:12 ` [PATCH 1/4] qxl: drop mode_info.modes & related code Gerd Hoffmann 2017-03-01 10:12 ` [PATCH 2/4] qxl: limit monitor config read retries Gerd Hoffmann @ 2017-03-01 10:12 ` Gerd Hoffmann 2017-03-01 10:12 ` [PATCH 4/4] qxl: fix qxl_conn_get_modes Gerd Hoffmann 3 siblings, 0 replies; 5+ messages in thread From: Gerd Hoffmann @ 2017-03-01 10:12 UTC (permalink / raw) To: dri-devel Cc: Gerd Hoffmann, Dave Airlie, David Airlie, open list:DRM DRIVER FOR QXL VIRTUAL GPU, open list Try to read the client monitors config at driver load time, even without explicit notification. So in case that info was filled before the driver loaded and we've missed the notifications because of that the settings will still be used. With that place we now have to take care to properly handle a empty client monitors config, so we don't trip over an uninitialized client monitors config. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- drivers/gpu/drm/qxl/qxl_display.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c index 2b99496..cf99ace 100644 --- a/drivers/gpu/drm/qxl/qxl_display.c +++ b/drivers/gpu/drm/qxl/qxl_display.c @@ -81,6 +81,10 @@ static int qxl_display_copy_rom_client_monitors_config(struct qxl_device *qdev) qdev->rom->client_monitors_config_crc); return MONITORS_CONFIG_BAD_CRC; } + if (!num_monitors) { + DRM_DEBUG_KMS("no client monitors configured\n"); + return status; + } if (num_monitors > qdev->monitors_config->max_allowed) { DRM_DEBUG_KMS("client monitors list will be truncated: %d < %d\n", qdev->monitors_config->max_allowed, num_monitors); @@ -1192,6 +1196,7 @@ int qxl_modeset_init(struct qxl_device *qdev) qdev_output_init(&qdev->ddev, i); } + qxl_display_read_client_monitors_config(qdev); qdev->mode_info.mode_config_initialized = true; drm_mode_config_reset(&qdev->ddev); -- 1.8.3.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 4/4] qxl: fix qxl_conn_get_modes [not found] <1488363154-6889-1-git-send-email-kraxel@redhat.com> ` (2 preceding siblings ...) 2017-03-01 10:12 ` [PATCH 3/4] qxl: read monitors config at boot Gerd Hoffmann @ 2017-03-01 10:12 ` Gerd Hoffmann 3 siblings, 0 replies; 5+ messages in thread From: Gerd Hoffmann @ 2017-03-01 10:12 UTC (permalink / raw) To: dri-devel Cc: Gerd Hoffmann, Dave Airlie, David Airlie, open list:DRM DRIVER FOR QXL VIRTUAL GPU, open list Call qxl_add_monitors_config_modes() unconditionally. Do all sanity checks in that function. Fix sanity checks. monitors_config is the current monitor configuration, whereas client_monitors_config is the configuration requested by the spice client. So when filling the mode list, based on the spice client request, we need to look at client_monitors_config->count not monitors_config->count. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- drivers/gpu/drm/qxl/qxl_display.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c index cf99ace..9548bb5 100644 --- a/drivers/gpu/drm/qxl/qxl_display.c +++ b/drivers/gpu/drm/qxl/qxl_display.c @@ -202,9 +202,17 @@ static int qxl_add_monitors_config_modes(struct drm_connector *connector, struct drm_display_mode *mode = NULL; struct qxl_head *head; + if (!qdev->monitors_config) + return 0; + if (h >= qdev->monitors_config->max_allowed) + return 0; if (!qdev->client_monitors_config) return 0; + if (h >= qdev->client_monitors_config->count) + return 0; + head = &qdev->client_monitors_config->heads[h]; + DRM_DEBUG_KMS("head %d is %dx%d\n", h, head->width, head->height); mode = drm_cvt_mode(dev, head->width, head->height, 60, false, false, false); @@ -911,19 +919,13 @@ static void qxl_enc_mode_set(struct drm_encoder *encoder, static int qxl_conn_get_modes(struct drm_connector *connector) { - int ret = 0; - struct qxl_device *qdev = connector->dev->dev_private; unsigned pwidth = 1024; unsigned pheight = 768; + int ret = 0; - DRM_DEBUG_KMS("monitors_config=%p\n", qdev->monitors_config); - /* TODO: what should we do here? only show the configured modes for the - * device, or allow the full list, or both? */ - if (qdev->monitors_config && qdev->monitors_config->count) { - ret = qxl_add_monitors_config_modes(connector, &pwidth, &pheight); - if (ret < 0) - return ret; - } + ret = qxl_add_monitors_config_modes(connector, &pwidth, &pheight); + if (ret < 0) + return ret; ret += qxl_add_common_modes(connector, pwidth, pheight); return ret; } -- 1.8.3.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v4 0/7] mmc: bcm2835: Add new driver for the sdhost controller
@ 2017-03-08 9:19 Gerd Hoffmann
2017-03-08 9:19 ` [PATCH 1/4] qxl: drop mode_info.modes & related code Gerd Hoffmann
0 siblings, 1 reply; 5+ messages in thread
From: Gerd Hoffmann @ 2017-03-08 9:19 UTC (permalink / raw)
To: linux-rpi-kernel
Cc: ulf.hansson, robh+dt, mark.rutland, lee, eric, stefan.wahren,
f.fainelli, rjui, sbranden, bcm-kernel-feedback-list, linux,
catalin.marinas, will.deacon, linux-mmc, devicetree,
linux-arm-kernel, linux-kernel, Gerd Hoffmann
Hi,
Next version if the bcm2835 sdhost patch series.
New in v4:
* squashed in more cleanups by Stefan.
* removed the long cleanup patch list
from commit message (patch 2).
* rebased to (and tested with) 4.11-rc1.
* minor fixes pointed out in review.
New in v3:
* squashed in cleanups by Stefan.
* use one dma channel only.
* improve commit messages.
New in v2:
* DMA fixed.
* updated docs (kconfig, file comment, commit message) clarifying
the two sd controller situation.
* some code cleanups, as pointed out by Stefan.
* dt bindings use mmc@... now.
* added patches to update defconfigs.
* added patch for rpi3 device tree, so wifi is actually enabled.
please review & test,
Gerd
Eric Anholt (2):
dt-bindings: Add binding for brcm,bcm2835-sdhost.
mmc: bcm2835: Add new driver for the sdhost controller.
Gerd Hoffmann (5):
mmc: bcm2835: add sdhost controller to devicetree
arm: set CONFIG_MMC_BCM2835=y in bcm2835_defconfig and
multi_v7_defconfig
arm64: set CONFIG_MMC_BCM2835=y in defconfig
arm: dts: bcm283x: switch from &sdhci to &sdhost
arm64: dts: bcm2837: add &sdhci and &sdhost
.../bindings/mmc/brcm,bcm2835-sdhost.txt | 23 +
arch/arm/boot/dts/bcm2835-rpi.dtsi | 6 +
arch/arm/boot/dts/bcm283x.dtsi | 10 +
arch/arm/configs/bcm2835_defconfig | 1 +
arch/arm/configs/multi_v7_defconfig | 1 +
arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b.dts | 17 +
arch/arm64/configs/defconfig | 1 +
drivers/mmc/host/Kconfig | 14 +
drivers/mmc/host/Makefile | 1 +
drivers/mmc/host/bcm2835.c | 1465 ++++++++++++++++++++
10 files changed, 1539 insertions(+)
create mode 100644 Documentation/devicetree/bindings/mmc/brcm,bcm2835-sdhost.txt
create mode 100644 drivers/mmc/host/bcm2835.c
--
1.8.3.1
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 1/4] qxl: drop mode_info.modes & related code. 2017-03-08 9:19 [PATCH v4 0/7] mmc: bcm2835: Add new driver for the sdhost controller Gerd Hoffmann @ 2017-03-08 9:19 ` Gerd Hoffmann 0 siblings, 0 replies; 5+ messages in thread From: Gerd Hoffmann @ 2017-03-08 9:19 UTC (permalink / raw) To: linux-rpi-kernel Cc: ulf.hansson, robh+dt, mark.rutland, lee, eric, stefan.wahren, f.fainelli, rjui, sbranden, bcm-kernel-feedback-list, linux, catalin.marinas, will.deacon, linux-mmc, devicetree, linux-arm-kernel, linux-kernel, Gerd Hoffmann, Dave Airlie, David Airlie, open list:DRM DRIVER FOR QXL VIRTUAL GPU, open list:DRM DRIVERS very old qxl hardware revisions (predating qxl ksm support by a few years) supported a fixed list of video modes only. The list is still provided by the virtual hardware, for backward compatibility reasons. The qxl kms driver never ever looks at it, except for dumping it to the kernel log at load time in case debug logging is enabled. Drop that pointless code. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- drivers/gpu/drm/qxl/qxl_drv.h | 2 -- drivers/gpu/drm/qxl/qxl_kms.c | 22 ---------------------- 2 files changed, 24 deletions(-) diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h index 0c313e5..fe90b36 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.h +++ b/drivers/gpu/drm/qxl/qxl_drv.h @@ -160,8 +160,6 @@ struct qxl_mman { }; struct qxl_mode_info { - int num_modes; - struct qxl_mode *modes; bool mode_config_initialized; /* pointer to fbdev info structure */ diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c index 2b1e1f3..a9a741c 100644 --- a/drivers/gpu/drm/qxl/qxl_kms.c +++ b/drivers/gpu/drm/qxl/qxl_kms.c @@ -31,19 +31,9 @@ int qxl_log_level; -static void qxl_dump_mode(struct qxl_device *qdev, void *p) -{ - struct qxl_mode *m = p; - DRM_DEBUG_KMS("%d: %dx%d %d bits, stride %d, %dmm x %dmm, orientation %d\n", - m->id, m->x_res, m->y_res, m->bits, m->stride, m->x_mili, - m->y_mili, m->orientation); -} - static bool qxl_check_device(struct qxl_device *qdev) { struct qxl_rom *rom = qdev->rom; - int mode_offset; - int i; if (rom->magic != 0x4f525851) { DRM_ERROR("bad rom signature %x\n", rom->magic); @@ -53,8 +43,6 @@ static bool qxl_check_device(struct qxl_device *qdev) DRM_INFO("Device Version %d.%d\n", rom->id, rom->update_id); DRM_INFO("Compression level %d log level %d\n", rom->compression_level, rom->log_level); - DRM_INFO("Currently using mode #%d, list at 0x%x\n", - rom->mode, rom->modes_offset); DRM_INFO("%d io pages at offset 0x%x\n", rom->num_io_pages, rom->pages_offset); DRM_INFO("%d byte draw area at offset 0x%x\n", @@ -62,14 +50,6 @@ static bool qxl_check_device(struct qxl_device *qdev) qdev->vram_size = rom->surface0_area_size; DRM_INFO("RAM header offset: 0x%x\n", rom->ram_header_offset); - - mode_offset = rom->modes_offset / 4; - qdev->mode_info.num_modes = ((u32 *)rom)[mode_offset]; - DRM_INFO("rom modes offset 0x%x for %d modes\n", rom->modes_offset, - qdev->mode_info.num_modes); - qdev->mode_info.modes = (void *)((uint32_t *)rom + mode_offset + 1); - for (i = 0; i < qdev->mode_info.num_modes; i++) - qxl_dump_mode(qdev, qdev->mode_info.modes + i); return true; } @@ -282,7 +262,5 @@ void qxl_device_fini(struct qxl_device *qdev) iounmap(qdev->ram_header); iounmap(qdev->rom); qdev->rom = NULL; - qdev->mode_info.modes = NULL; - qdev->mode_info.num_modes = 0; qxl_debugfs_remove_files(qdev); } -- 1.8.3.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-03-08 9:20 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <1488363154-6889-1-git-send-email-kraxel@redhat.com>
2017-03-01 10:12 ` [PATCH 1/4] qxl: drop mode_info.modes & related code Gerd Hoffmann
2017-03-01 10:12 ` [PATCH 2/4] qxl: limit monitor config read retries Gerd Hoffmann
2017-03-01 10:12 ` [PATCH 3/4] qxl: read monitors config at boot Gerd Hoffmann
2017-03-01 10:12 ` [PATCH 4/4] qxl: fix qxl_conn_get_modes Gerd Hoffmann
2017-03-08 9:19 [PATCH v4 0/7] mmc: bcm2835: Add new driver for the sdhost controller Gerd Hoffmann
2017-03-08 9:19 ` [PATCH 1/4] qxl: drop mode_info.modes & related code Gerd Hoffmann
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®