From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mikulas Patocka Date: Sun, 03 Jun 2018 14:40:54 +0000 Subject: [PATCH 01/21] udl-kms: fix display corruption of the last line Message-Id: <20180603144219.405627951@twibright.com> List-Id: References: <20180603144053.875668929@twibright.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Mikulas Patocka , Bartlomiej Zolnierkiewicz , Dave Airlie , Bernie Thompson , Ladislav Michl Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org The displaylink hardware has such a peculiarity that it doesn't render a command until next command is received. This produces occasional corruption, such as when setting 22x11 font on the console, only the first line of the cursor will be blinking if the cursor is located at some specific columns. When we end up with a repeating pixel, the driver has a bug that it leaves one uninitialized byte after the command (and this byte is enough to flush the command and render it - thus it fixes the screen corruption), however whe we end up with a non-repeating pixel, there is no byte appended and this results in temporary screen corruption. This patch fixes the screen corruption by always appending a byte 0xAF at the end of URB. It also removes the uninitialized byte. Signed-off-by: Mikulas Patocka Cc: stable@vger.kernel.org --- drivers/gpu/drm/udl/udl_fb.c | 5 ++++- drivers/gpu/drm/udl/udl_transfer.c | 11 +++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) Index: linux-4.16.12/drivers/gpu/drm/udl/udl_transfer.c =================================--- linux-4.16.12.orig/drivers/gpu/drm/udl/udl_transfer.c 2018-05-31 14:47:07.000000000 +0200 +++ linux-4.16.12/drivers/gpu/drm/udl/udl_transfer.c 2018-05-31 14:53:31.000000000 +0200 @@ -153,11 +153,11 @@ static void udl_compress_hline16( raw_pixels_count_byte = cmd++; /* we'll know this later */ raw_pixel_start = pixel; - cmd_pixel_end = pixel + (min(MAX_CMD_PIXELS + 1, - min((int)(pixel_end - pixel) / bpp, - (int)(cmd_buffer_end - cmd) / 2))) * bpp; + cmd_pixel_end = pixel + min3(MAX_CMD_PIXELS + 1UL, + (unsigned long)(pixel_end - pixel) / bpp, + (unsigned long)(cmd_buffer_end - 1 - cmd) / 2) * bpp; - prefetch_range((void *) pixel, (cmd_pixel_end - pixel) * bpp); + prefetch_range((void *) pixel, cmd_pixel_end - pixel); pixel_val16 = get_pixel_val16(pixel, bpp); while (pixel < cmd_pixel_end) { @@ -193,6 +193,9 @@ static void udl_compress_hline16( if (pixel > raw_pixel_start) { /* finalize last RAW span */ *raw_pixels_count_byte = ((pixel-raw_pixel_start) / bpp) & 0xFF; + } else { + /* undo unused byte */ + cmd--; } *cmd_pixels_count_byte = ((pixel - cmd_pixel_start) / bpp) & 0xFF; Index: linux-4.16.12/drivers/gpu/drm/udl/udl_fb.c =================================--- linux-4.16.12.orig/drivers/gpu/drm/udl/udl_fb.c 2018-05-31 14:47:07.000000000 +0200 +++ linux-4.16.12/drivers/gpu/drm/udl/udl_fb.c 2018-05-31 14:53:32.000000000 +0200 @@ -137,7 +137,10 @@ int udl_handle_damage(struct udl_framebu if (cmd > (char *) urb->transfer_buffer) { /* Send partial buffer remaining before exiting */ - int len = cmd - (char *) urb->transfer_buffer; + int len; + if (cmd < (char *) urb->transfer_buffer + urb->transfer_buffer_length) + *cmd++ = 0xAF; + len = cmd - (char *) urb->transfer_buffer; ret = udl_submit_urb(dev, urb, len); bytes_sent += len; } else From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mikulas Patocka Subject: [PATCH 01/21] udl-kms: fix display corruption of the last line Date: Sun, 03 Jun 2018 16:40:54 +0200 Message-ID: <20180603144219.405627951@twibright.com> References: <20180603144053.875668929@twibright.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from leontynka.twibright.com (109-183-129-149.tmcz.cz [109.183.129.149]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8B8E989CF7 for ; Sun, 3 Jun 2018 15:18:39 +0000 (UTC) Content-Disposition: inline; filename=udlkms-append-zero-4.patch List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Mikulas Patocka , Bartlomiej Zolnierkiewicz , Dave Airlie , Bernie Thompson , Ladislav Michl Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhlIGRpc3BsYXlsaW5rIGhhcmR3YXJlIGhhcyBzdWNoIGEgcGVjdWxpYXJpdHkgdGhhdCBpdCBk b2Vzbid0IHJlbmRlciBhCmNvbW1hbmQgdW50aWwgbmV4dCBjb21tYW5kIGlzIHJlY2VpdmVkLiBU aGlzIHByb2R1Y2VzIG9jY2FzaW9uYWwKY29ycnVwdGlvbiwgc3VjaCBhcyB3aGVuIHNldHRpbmcg MjJ4MTEgZm9udCBvbiB0aGUgY29uc29sZSwgb25seSB0aGUgZmlyc3QKbGluZSBvZiB0aGUgY3Vy c29yIHdpbGwgYmUgYmxpbmtpbmcgaWYgdGhlIGN1cnNvciBpcyBsb2NhdGVkIGF0IHNvbWUKc3Bl Y2lmaWMgY29sdW1ucy4KCldoZW4gd2UgZW5kIHVwIHdpdGggYSByZXBlYXRpbmcgcGl4ZWwsIHRo ZSBkcml2ZXIgaGFzIGEgYnVnIHRoYXQgaXQgbGVhdmVzCm9uZSB1bmluaXRpYWxpemVkIGJ5dGUg YWZ0ZXIgdGhlIGNvbW1hbmQgKGFuZCB0aGlzIGJ5dGUgaXMgZW5vdWdoIHRvIGZsdXNoCnRoZSBj b21tYW5kIGFuZCByZW5kZXIgaXQgLSB0aHVzIGl0IGZpeGVzIHRoZSBzY3JlZW4gY29ycnVwdGlv biksIGhvd2V2ZXIKd2hlIHdlIGVuZCB1cCB3aXRoIGEgbm9uLXJlcGVhdGluZyBwaXhlbCwgdGhl cmUgaXMgbm8gYnl0ZSBhcHBlbmRlZCBhbmQKdGhpcyByZXN1bHRzIGluIHRlbXBvcmFyeSBzY3Jl ZW4gY29ycnVwdGlvbi4KClRoaXMgcGF0Y2ggZml4ZXMgdGhlIHNjcmVlbiBjb3JydXB0aW9uIGJ5 IGFsd2F5cyBhcHBlbmRpbmcgYSBieXRlIDB4QUYgYXQKdGhlIGVuZCBvZiBVUkIuIEl0IGFsc28g cmVtb3ZlcyB0aGUgdW5pbml0aWFsaXplZCBieXRlLgoKU2lnbmVkLW9mZi1ieTogTWlrdWxhcyBQ YXRvY2thIDxtcGF0b2NrYUByZWRoYXQuY29tPgpDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZwoK LS0tCiBkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9mYi5jICAgICAgIHwgICAgNSArKysrLQogZHJp dmVycy9ncHUvZHJtL3VkbC91ZGxfdHJhbnNmZXIuYyB8ICAgMTEgKysrKysrKy0tLS0KIDIgZmls ZXMgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCkluZGV4OiBsaW51 eC00LjE2LjEyL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX3RyYW5zZmVyLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gbGludXgtNC4xNi4xMi5vcmlnL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX3RyYW5zZmVyLmMJ MjAxOC0wNS0zMSAxNDo0NzowNy4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4LTQuMTYuMTIvZHJp dmVycy9ncHUvZHJtL3VkbC91ZGxfdHJhbnNmZXIuYwkyMDE4LTA1LTMxIDE0OjUzOjMxLjAwMDAw MDAwMCArMDIwMApAQCAtMTUzLDExICsxNTMsMTEgQEAgc3RhdGljIHZvaWQgdWRsX2NvbXByZXNz X2hsaW5lMTYoCiAJCXJhd19waXhlbHNfY291bnRfYnl0ZSA9IGNtZCsrOyAvKiAgd2UnbGwga25v dyB0aGlzIGxhdGVyICovCiAJCXJhd19waXhlbF9zdGFydCA9IHBpeGVsOwogCi0JCWNtZF9waXhl bF9lbmQgPSBwaXhlbCArIChtaW4oTUFYX0NNRF9QSVhFTFMgKyAxLAotCQkJbWluKChpbnQpKHBp eGVsX2VuZCAtIHBpeGVsKSAvIGJwcCwKLQkJCSAgICAoaW50KShjbWRfYnVmZmVyX2VuZCAtIGNt ZCkgLyAyKSkpICogYnBwOworCQljbWRfcGl4ZWxfZW5kID0gcGl4ZWwgKyBtaW4zKE1BWF9DTURf UElYRUxTICsgMVVMLAorCQkJCQkodW5zaWduZWQgbG9uZykocGl4ZWxfZW5kIC0gcGl4ZWwpIC8g YnBwLAorCQkJCQkodW5zaWduZWQgbG9uZykoY21kX2J1ZmZlcl9lbmQgLSAxIC0gY21kKSAvIDIp ICogYnBwOwogCi0JCXByZWZldGNoX3JhbmdlKCh2b2lkICopIHBpeGVsLCAoY21kX3BpeGVsX2Vu ZCAtIHBpeGVsKSAqIGJwcCk7CisJCXByZWZldGNoX3JhbmdlKCh2b2lkICopIHBpeGVsLCBjbWRf cGl4ZWxfZW5kIC0gcGl4ZWwpOwogCQlwaXhlbF92YWwxNiA9IGdldF9waXhlbF92YWwxNihwaXhl bCwgYnBwKTsKIAogCQl3aGlsZSAocGl4ZWwgPCBjbWRfcGl4ZWxfZW5kKSB7CkBAIC0xOTMsNiAr MTkzLDkgQEAgc3RhdGljIHZvaWQgdWRsX2NvbXByZXNzX2hsaW5lMTYoCiAJCWlmIChwaXhlbCA+ IHJhd19waXhlbF9zdGFydCkgewogCQkJLyogZmluYWxpemUgbGFzdCBSQVcgc3BhbiAqLwogCQkJ KnJhd19waXhlbHNfY291bnRfYnl0ZSA9ICgocGl4ZWwtcmF3X3BpeGVsX3N0YXJ0KSAvIGJwcCkg JiAweEZGOworCQl9IGVsc2UgeworCQkJLyogdW5kbyB1bnVzZWQgYnl0ZSAqLworCQkJY21kLS07 CiAJCX0KIAogCQkqY21kX3BpeGVsc19jb3VudF9ieXRlID0gKChwaXhlbCAtIGNtZF9waXhlbF9z dGFydCkgLyBicHApICYgMHhGRjsKSW5kZXg6IGxpbnV4LTQuMTYuMTIvZHJpdmVycy9ncHUvZHJt L3VkbC91ZGxfZmIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaW51eC00LjE2LjEyLm9yaWcvZHJpdmVycy9n cHUvZHJtL3VkbC91ZGxfZmIuYwkyMDE4LTA1LTMxIDE0OjQ3OjA3LjAwMDAwMDAwMCArMDIwMAor KysgbGludXgtNC4xNi4xMi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9mYi5jCTIwMTgtMDUtMzEg MTQ6NTM6MzIuMDAwMDAwMDAwICswMjAwCkBAIC0xMzcsNyArMTM3LDEwIEBAIGludCB1ZGxfaGFu ZGxlX2RhbWFnZShzdHJ1Y3QgdWRsX2ZyYW1lYnUKIAogCWlmIChjbWQgPiAoY2hhciAqKSB1cmIt PnRyYW5zZmVyX2J1ZmZlcikgewogCQkvKiBTZW5kIHBhcnRpYWwgYnVmZmVyIHJlbWFpbmluZyBi ZWZvcmUgZXhpdGluZyAqLwotCQlpbnQgbGVuID0gY21kIC0gKGNoYXIgKikgdXJiLT50cmFuc2Zl cl9idWZmZXI7CisJCWludCBsZW47CisJCWlmIChjbWQgPCAoY2hhciAqKSB1cmItPnRyYW5zZmVy X2J1ZmZlciArIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKKwkJCSpjbWQrKyA9IDB4QUY7 CisJCWxlbiA9IGNtZCAtIChjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCQlyZXQgPSB1 ZGxfc3VibWl0X3VyYihkZXYsIHVyYiwgbGVuKTsKIAkJYnl0ZXNfc2VudCArPSBsZW47CiAJfSBl bHNlCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK